[offtopic] Локализация веб-приложений, PHP - вопрос к коллегам

Кто-нибудь может посоветовать что-нибудь толковое на тему локализации приложений? В основном интересует PHP, но опыт с другими ЯП тоже интересен.

Чего хотелось бы от технологии:

  1. Языковые файлы должны быть представлены в человекочитаемом виде, чтобы можно было дать их на перевод переводчику.

  2. Если меняется текст на исходном языке, об этом должен об этом узнавать я при билде/деплое (чтобы дать на перевод переводчику, см. пункт 1), а не пользователи любовались непереведенными строками.

  3. Все это должно быть пригодно для хранения не только коротких сообщений, но и длинных абзацев текста.
    Почему этот пункт важен - кодировать длинный абзац константами STR_ROAD_IMPORTANCE_03 не очень-то наглядно.

  4. Крайне желателен простой способ посмотреть что как переведено - текст и перевод на одном экране.

  5. Технология должна работать под Windows - особенно это касается всяких утилит.

  6. Должно быть простое описание того, как эту технологию использовать.

что у меня есть, но не вполне устраивает.
Переводы хранятся в простых текстовых файлах, и зачитываются в массив строк. В программе это выглядит примерно так:

Недостатки такого подхода в общем-то очевидны:

  • в самой программе непонятно, что скрывается за $lan[358],
  • добавлять можно новые строки только в конец, если логически они в средине, текстовый файл становится не очень то читаемым.

Интересует в первую очередь личный опыт.

Зачем изобретать велосипед? Есть типовое де факто решение в виде шаблонов .pot и файлов локализации .po. Есть Куча средств работы с переводами для этих форматов. Это не только актуально для c/c++ и прочего софта, но и многие крупные скрипты на php используют этот же механизм локализации. На вскидку среди скриптов на PHP могу назвать Drupal, как использующий механизм локализации на основе импорта po-файлов.

  • косяк -

Что-то мне кажется freeExec написал толковое. Зачем удалил? :wink:

Ничего толкового, хотел ошибку поправить, а нажал на квоту. Ну и пришлось стереть позор.

Макс, можешь порекомендовать наиболее простой мануал, с ответами на вопросы из моего поста?

Постараюсь что нибудь поискать на эту тему общего плана.

Чаще всего это делается средствами IDE, в несколько шагов: сгенерировать из строковых констант шаблон pot, а потом инструментом перевода перевести в нём строки и подключить обратно к проекту. Для проектов на c/c++ ещё производится компиляция текстового po-файла с переводом в бинарный mo-файл. В скриптовых языках, текстовый файл обычно парсится и добавляется в справочник переводов в базу, а при выводе на экран делается запрос в базу, где используется для поиска перевода текущая локаль и если перевод находится, то строка транслируется, если нет, выдаётся как есть.

Для редактирования неплох poedit. Он позволяет так создать бинарный файл и подкорректировать уже имеющийся при изменении шаблона.
Вроде тут как это дело использовать - http://phpmaster.com/localizing-php-applications-1/

При каждом показе, на каждую фразу по запросу? Это ж как оно тормозить будет…

PS. Не пробовали просто шаблонизаторы использовать? Например Smarty.

Кстати, мой http://openworldtextures.org работает именно на Smarty. :3

Нисколько, использовали OpenERP.

В шаблонизаторах хорошие модули локализации обычно, и файлы - пошло отдавать на редактирование, обычно есть БД локализации с веб-интерфейсом, а там уже генерируются файлики :slight_smile:

вместо числа используй полный текст на английском, текст в данном случае хранится в массиве и локализатор видит англ текст и перевод…
я бы использовал что нибудь такое http://stackoverflow.com/questions/3174353/two-simple-php-files-for-localization-that-do-basically-the-same-but-one-doesn

Что только люди не придумают, лишь бы не использовать po-файлы… :slight_smile:

Ты понимаешь, речь о домашнем проекте, причем сами php файлы я редактирую в notepad’е. У меня пока нет ни IDE, ни БД )

Буду весьма признателен.

…все придумано до нас… сам локализированное приложение не делал, но переводом периодически занимаюсь… ну пусть попробует gettext, может и понравится…

зы: есть еще Zend_Translate… как пример http://perevodik.net/ru/posts/10/

Речь шла о PHP. А это, как правило, веб-приложения. Там совсем другая специфика. И страницы генерируются при каждом обращении заново (если не предпринимать узкоспециализированные шаманства). Т.е. каждый переход по странице = новое подключение к БД, и по-новой загрузка всего, что надо. Это как если бы твоё приложение перезапускалось после каждого клика :slight_smile:
Не даром в веб-приложениях ценится экономия запросов к БД.

Вообще не понимаю, почему автор спросил о PHP, а ответы от Си до GUI приложений на питоне :slight_smile:

Речь даже не о РHP как таковом, а о наборе базовых утилит, которые должны поддержать процесс. Не составлять же po-файлы в ручную!

http://www.poedit.net/download.php

Описание системы перевода неплохое в википедии: http://ru.wikipedia.org/wiki/Gettext

Нашёл инструкцию по переводу php-приложений на русском языке: http://php.russofile.ru/ru/translate/multilangual/php_gettext/