Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Управление мультиязыковой поддержкой


Автор: Wowa 2.2.2005, 03:51
Я сделал мультиязыковую поддержку в программе по типу:
/locale/ru/файлы модулей
/locale/de/файлы модулей
и т.п.

в файлах содержится примерно следующее:

$lang['text']='текст';
...


Так вот. Языков поддержки много, а программа каждый день активно разрабатывается и усовершенствуется. Соответственно нужно менять эти языковые файлы, дополнять их. При написании каждого нового предложения вносить перевод в файлы всех языков - муторно. Может у кого есть какие-то идеи по автоматизации?

Слышал, что вроде есть даже софт спец. для этого, но вроде по отзывам он довольно глючный и народ им не пользуется.

Что посоветуете?

Автор: Secandr 2.2.2005, 09:11
написать формочку, которая бы парсила файлики и можно было бы поменять или добавить запись сразу на всех языках.

Автор: Sardar 2.2.2005, 12:21
Преводить по любому нужно в ручную, нужно только инфа каких ключей не хватает в других файлах. Поддерживаем один файл, где все изменения, например английский. Для такой проверки можно использовать и сам PHP, что бы самому не парсить это дело. Консольный скрипт иклюдит файл, перед этим в функции создаём локальный $lang. Достаём ключи(array_keys), смотрим расхождение с эталоном, по недостающим ключам опрашиваем юзера, либо считаем из файла, затем генерим модуль языка по новой.

Автор: Gold Dragon 2.2.2005, 13:15
форма 1
читает все имеющиеся папки в /locale/
- ru
- de
- en
- ...
- china

Кнопки
- добавить язык
- удалить язык

при добавлении
- создаём папку "язык"
- переписывает из любой папки (или из шаблона) все $lang['text'] со значением ='';

и потом выводим форму 3

Форма 2 - добавить значение
показывает все $lang['text']

Кнопки
- добавить значение
- удалить значение

при добавлении
- поле имени нового значения
- язык + поля самого значения ( по количеству папок)

записываем новое значение во все папки

форма 3 - редактирование языка
после выбора языка
- показываются все $lang['text']
- и их значения

------------------------
В папку с языком можно добавить файлик с описанием языка и отображать его содержание при редактированиях, да и вообще для наглядности smile


ЗЫ
не знаю ка насчёт понятности, но я сам понял smile Надеюсь на мысли натолкнул

Автор: Wowa 2.2.2005, 13:23
Мне кажется более логичным хранить все значения в базе и потом переписывать файлы языков при изменении базы.
Добавлено @ 13:24
По крайней мере так вроде обрабатывать проще.

Автор: Sardar 2.2.2005, 13:40
Admin тоже верно, всё зависти от желания и возможностей smile

Автор: Wowa 2.2.2005, 14:01
Может есть готовый софт? Лень писать свой редактор.


Есть еще такая вещь, как gettext и редактор к ней, но мне не нравится.

Автор: HalkaR 6.2.2005, 02:12
Admin, как вариант таблица типа
Добавлено @ 02:14
Когда надо делаешь ALTER TABLE и добавлешь столбец.

Автор: Wowa 6.2.2005, 03:44
Да, да.. В базе я хранить слова буду, чтобы можно было легче управлять. Но все же в конечном продукты слова должны браться из подключаемых файлов ИМХО, т.к. так думаю будет быстрее.

Автор: Sardar 6.2.2005, 14:49
А в чём проблема сгенерить модуль по выборке из базы? Проверяем дату последней модиффикации таблицы и файла, если устарело, то обновляем модуль. Все остальные действя делаются в базе.

Автор: Wowa 24.2.2005, 23:36
А что посоветуете хранить в качестве ключа?
$lang['ключ']='текст';

Хранить по идее там можно хоть даже текст на русском. Полный текст, полные предлложения... Хотя полные предложения и тексты невсегда можно туда записать.


и все-таки, ключи наверное лучше основываясь на англ.яз делать...

Добавлено @ 23:38
А если надо большой текст хранить, то делать так?

Код

$lang['ключ']=<<<HTML
большой текст
HTML;


Автор: Sardar 25.2.2005, 02:06
По идее ключём может быть любая последовательность байтов, ассоциативный массив это хеш таблица.

Да, heredoc как раз удобен для вставки больших текстов.

Автор: InfMag 14.4.2005, 07:08
ИМХО. Я бы не стал юзать $lang['text'] = "text"; Взял бы файлик типа:
Код

Название языка
Hello|Привет|
I'm|Я|
You|Ты|

Не судите строго. smile
Добавлено @ 07:09
Мол самая первая строка - название языка на языке, который сам язык. smile

Автор: Sardar 14.4.2005, 11:26
InfMag тогда придётся грузить всё разом, к тому же еще и парсить smile

Автор: Wowa 14.4.2005, 12:55
InfMag плюс проблемы с фразами, предложениями, текстами.

Автор: Iurie 15.4.2005, 14:00
Privet vsem, izvinite cto pishu latynschimi bucvami.
U menea esti drugaia mysli, no ea ne znaiu nascolico ato horosho, no ea dumaiu cto OK.
Naprimer bereo tablitzu v cotorom sohroneaiutsea v BD i v zavisimosti ot vybronovo iazyca vseo ato zapisyvaiem v sesiu i esli meneaietsea iazyc to opeatje obrosheaiemsea c baze, i tagda prosto priideotsea sopostaviti nujnyi text i v nujnom meste.
Ea delaiu ctota v atom rode, no ea ne garantiruiu scorosty raboty vashego site.
Ea dumaiu cto ato horo shaia ideia. smile

Автор: Sardar 15.4.2005, 15:57
Кеширование инфы в сессии идея хорошая, для прав, настроек и т.п. А вот зачем текста со всего сайта закладывать в сессию...? Никогда не знаешь на какую страницу пойдёт юзер в следующий раз smile

Автор: AntonioBanderaz 1.5.2005, 03:30
А вот я бы вообще define'ом сделал...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)