Мультиязыковые проекты

Как Вы реализуете интернационализацию своих проектов?

  • Копирую скрипты в другой каталог и перевожу выводимые сообщения

    Голосов: 1 1,8%
  • Подключаю include()'ом файл, где в переменных определяются сообщения на нужном языке

    Голосов: 34 60,7%
  • С помощью разных шаблонов

    Голосов: 10 17,9%
  • GNU gettext

    Голосов: 2 3,6%
  • как-то по-другому...

    Голосов: 9 16,1%

  • Всего проголосовало
    56

su1d

Старожил PHPClubа
Мультиязыковые проекты

Набрёл вот на статейку интересную: Internationalization Using PHP and GetText. Соответственно, хотел бы услышать мнения господ профессионалов по этому поводу. Может кто-то уже использует/использовал этот метод в своих проектах.
По-крайней мере, подход, описанный в статье, походит на хорошее стандартное решение проблемы.
Как попробую в каком-нибудь из своих проектов - расскажу о результатах...
 

su1d

Старожил PHPClubа
Re: Re: Мультиязыковые проекты

Автор оригинала: admin
Ты бы лучше перевел
Времени нет. Да и те, кому эта статья полезна, читают по-английски совершенно без проблем.
 

si

Administrator
Re: Re: Re: Мультиязыковые проекты

Автор оригинала: su1d
Времени нет. Да и те, кому эта статья полезна, читают по-английски совершенно без проблем.
По пробовал gettext() у себя, сходу не заработало, время изучить почему небыло.
 

Grey_EM

Guest
Re: Re: Re: Re: Мультиязыковые проекты

Автор оригинала: si
По пробовал gettext() у себя, сходу не заработало, время изучить почему небыло.
Особых проблем с gettext не имел. Под suse linux.
Так что welcome кого интересует.
Рекомендую к использованию так как это стандарт де факто.
 

si

Administrator
Re: Re: Re: Re: Re: Мультиязыковые проекты

Автор оригинала: Grey_EM
Особых проблем с gettext не имел. Под suse linux.
Так что welcome кого интересует.
Рекомендую к использованию так как это стандарт де факто.
ОС у меня таже, но gettext() ничего не переводит
 

Grey_EM

Guest
Re: Re: Re: Re: Re: Re: Мультиязыковые проекты

Автор оригинала: si
ОС у меня таже, но gettext() ничего не переводит
Это странно.
Посмотри ссылочки, это должно дать общее понимание технологии:
http://groups.google.com/groups?hl=en&lr=lang_en&[email protected]&rnum=10&prev=/groups?as_q=xgettext%20php&lr=lang_en&num=100&hl=en

http://linuxland.itam.nsc.ru/misc/other09/main.html

Кроме этого посмотри онлайновую документацию по gettext на php.net Там есть интересные комментарии.
Пиши если не получится.
P.S. Да, кстати, ты уверен что у тебя вкомпилен gettext в suse? В моей версии этого не было (в отличие от red hat например). Проверь.
 

si

Administrator
Re: Re: Re: Re: Re: Re: Re: Мультиязыковые проекты

Автор оригинала: Grey_EM
Это странно.
Посмотри ссылочки, это должно дать общее понимание технологии:
http://groups.google.com/groups?hl=en&lr=lang_en&[email protected]&rnum=10&prev=/groups?as_q=xgettext%20php&lr=lang_en&num=100&hl=en
http://linuxland.itam.nsc.ru/misc/other09/main.html
Кроме этого посмотри онлайновую документацию по gettext на php.net Там есть интересные комментарии.
Пиши если не получится.
P.S. Да, кстати, ты уверен что у тебя вкомпилен gettext в suse? В моей версии этого не было (в отличие от red hat например). Проверь.
Да есть и msgfrm и etc , в РНР есть поддержка gettext, но не переводит, а разбираться небыло время.
 

Grey_EM

Guest
Re: Re: Re: Re: Re: Re: Re: Re: Мультиязыковые проекты

Автор оригинала: si
Да есть и msgfrm и etc , в РНР есть поддержка gettext, но не переводит, а разбираться небыло время.
Так, привожу почти дословно свою конфигурацию

(Linux Suse)

//---установка переменных для русского языка

putenv ("LANG=ru_RU");
setlocale (LC_ALL,"");
bindtextdomain ("имя_сайта", "/usr/local/и.т.д/имя_сайта/locale/");
textdomain ("имя_сайта");

//----------Структура каталогов
"/usr/local/и.т.д/имя_сайта/locale/ru_RU/имя_сайта.mo

Попробуйте повторить дословно.
P.S. Сравнивать скорость массивов и gettext бессмысленно и так ясно что массивы быстрее, но дело в том что это не важно быстрее или медленнее массивы. Gettext просто НАМНОГО УДОБНЕЕ и это стандарт.
 

Benvolio

Guest
Массивы

А можно еще так:
сначала подготавливаешь массивы с ключевыми словами и значениями для каждого языка и сериализуешь их. Потом в начале скрипта подгружаешь необходимый массив для нужного языка, unserialize и вперед.
 

Higgerom

Guest
Gettext просто НАМНОГО УДОБНЕЕ и это стандарт.
Скажите, а можно узнать, в чем реальное удобство Gettext?
Поюзав его, я не нашел существенных отличий от того же метода с массивами, да еще и один из языков - внутри скриптов!
Может, я что-то упустил, или как?...
 

Grey_EM

Guest
Автор оригинала: Higgerom

Скажите, а можно узнать, в чем реальное удобство Gettext?
Поюзав его, я не нашел существенных отличий от того же метода с массивами, да еще и один из языков - внутри скриптов!
Может, я что-то упустил, или как?...
Опять повторяю, ничто не вечно под луной, подходы схожи, но gettext стандарт де факто для мира open-source.

Преимущества gettext:
1)Изучив один раз сможешь использовать везде, не только в php, ибо стандарт.
2)Будешь понимать чужие проекты ибо все серьезные php проекты сейчас использут gettext или переписываются под его использование;
3)Сможешь воспользоваться уже имеющимися программами и библиотеками, которые существенно ускорят твою работу. Например xgettext;
4)Облегчишь жизнь переводчику-лингвисту, если он чистый лингвист, не компьютерщик. Сейчас уже есть пакеты, которые автоматизирут труд имеенно переводчиков по переводу стандартных для gettext файлов po. Например пакет kbabel.
 

Higgerom

Guest
2Grey_EM

1)Изучив один раз сможешь использовать везде, не только в php, ибо стандарт.
Каким боком это относится к удобству использования в PHP, не пойму. Да, я почитал мануал, понял, как эта система работает, ну и?.. То же самое, что утверждать, что обязательно нужно знать Winapi - ну да, это очень важно и полезно, но к PHP никоим боко м не относится.. Или я что-то не понял в твоей фразе?

Будешь понимать чужие проекты ибо все серьезные php проекты сейчас использут gettext или переписываются под его использование;
См. выше, опять же не пойму, и чем это удобно лично мне, а?

3)Сможешь воспользоваться уже имеющимися программами и библиотеками, которые существенно ускорят твою работу. Например xgettext;
Здрасте! Ты так говоришь, будто без gettext (используя те же массивы) я очень сильно страдал без этих утилит. Что же до xgettext, то это, имхо, очень плохой пример - ну что мне до утилиты, которая extracts translatable strings from given input files, а? :) Вспомогательная утилита для использования gettext (да и то, использовать ее нужно только один раз), и ничего более..

4)Облегчишь жизнь переводчику-лингвисту, если он чистый лингвист, не компьютерщик. Сейчас уже есть пакеты, которые автоматизирут труд имеенно переводчиков по переводу стандартных для gettext файлов po. Например пакет kbabel.
С большой натяжкой, но соглашусь - хотя точно так же массивы можно вынести в отдельный файл, а написать простейший текстовый редактор для обработки таких файлов - раз плюнуть, займет от силы час.. О kbabel (klabel?) сказать ничего не могу, не видел и не слышал, что это :-\

2Pacha

http://home.a-city.de/franco.bez/gettext/gettext.win32.msvcrt.zip - это собственно скомпилированный gettext под винды, и с gnu_gettext.dll внутри (ее в систем загнать).

Мануал читай тут.
 

С.

Guest
Не видел еще ничего хуже, чем геттекст. Годится только для громоздких мертвяков, которые написаны один раз и никогда не меняются. Для небольших "живых" проектов ну никак не годитса. Я только представил во что обойдется изменение фразы или добавление новой, меня чуть не вырвало.
 

Higgerom

Guest
Ни к чему выражаться так резко, поскольку изменение фразы ничем не отличается от тех же массивов (ну разве что .mo скомпилировать - проблема?).
 

Grey_EM

Guest
Автор оригинала: С.
Не видел еще ничего хуже, чем геттекст. Годится только для громоздких мертвяков, которые написаны один раз и никогда не меняются. Для небольших "живых" проектов ну никак не годитса. Я только представил во что обойдется изменение фразы или добавление новой, меня чуть не вырвало.
Что за треп в ультимативной форме?
Ты скажи что у тебя не устраивает в gettext, уже используемый сотнями тысяч программистов по всему миру.
А то может и правда это кака, а мы и не прочуяли.
Только конкретно, с примерами.
 

Grey_EM

Guest
Автор оригинала: Higgerom
2Grey_EM

Каким боком это относится к удобству использования в PHP, не пойму. Да, я почитал мануал, понял, как эта система работает, ну и?.. То же самое, что утверждать, что обязательно нужно знать Winapi - ну да, это очень важно и полезно, но к PHP никоим боко м не относится.. Или я что-то не понял в твоей фразе?
Есть мэйнстрим технологии в программировании. Знать их стоит хотя бы потому что они широко используются. Использовать тебя никто не заставляет. Но практический опыт применения иметь стоит. Ну хотя бы для того чтобы понимать в деталях как работает чужой код, где предусмотрена интернационализация. Ты попробуй сделать меленький проект для того чтобы понять насколько это все удобно или наоборот неудобно. Прочтение мануала не даст тебе никакого представления.
Здрасте! Ты так говоришь, будто без gettext (используя те же массивы) я очень сильно страдал без этих утилит. Что же до xgettext, то это, имхо, очень плохой пример - ну что мне до утилиты, которая extracts translatable strings from given input files, а? :)
:) Надеюсь ты понял как это переводится :). Шучю.
Опять таки мне ведь денег не платят за то что я тебя уговорю пользоваться. Мне удобно, удобнее чем массивы. Сотням тысяч других программистов тоже удобно. Переводчикам удобнее чем переводить массив. Хотя бы для потому что перевести
msgid "HomePage"
msgstr ""
на финский, какой-нибудь бабушке лингвисту проще, чем
$my_arr["HomePage"] = "";
Поверь мне, я с такими общался.
Вспомогательная утилита для использования gettext (да и то, использовать ее нужно только один раз), и ничего более..
Почему один? Я ведь в проект могу новые модули дописывать и там просто пишу:
if (Something)
{
PEAR::raiseError(_("You not in session or your session is end. Please login"),
2706,
null,
null,
"(" . __FILE__ . ") on line " . __LINE__ .
" 'HTTP_SESSION_VARS[UID]' is empty ",
"NotInSessionException",
false
);
}
Затем я запускаю gettext и говорю переводчику на финский: "Слышь Вась тут новый текст появился". Он переводит. И так далее в каждом новом добавлении проекта.
С большой натяжкой, но соглашусь - хотя точно так же массивы можно вынести в отдельный файл, а написать простейший текстовый редактор для обработки таких файлов - раз плюнуть, займет от силы час..
О господи а это то зачем? Какой смысл писать еще один тупой редактор?
Систему уровня kbabel ты за час не напишешь. Там работа в человекогодах измеряется.

О kbabel (klabel?) сказать ничего не могу, не видел и не слышал, что это :-\
А ты попробуй посмотреть :). А то разговор слепого с глухим получается.
 
Сверху