Рекомендации по локализации PHP? GetText?

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

Однако я просмотрел «gettext» php, если я правильно понял, я вижу большой недостаток:

Если моя веб-страница, скажем, «Hello World», как статический текст. Я могу поместить строку как <?php echo gettext("Hello World"); ?> <?php echo gettext("Hello World"); ?> , сгенерируйте файлы po / mo с помощью инструмента. Затем я передам файл переводчику для работы.

Через несколько дней мы хотим изменить текст на английском языке, чтобы сказать «Hello Small World»? Изменить значение в gettext? Создать файл английского ПО и изменить его там? Если вы измените gettext, он рассмотрит его как новую строку, и вы мгновенно потеряете текущий перевод …

Мне кажется, что постепенно содержимое php-файла будет иметь старый текст повсюду. Или, может быть, нужно перевести перевод людей, когда вы увидите Hello World, вместо этого переведите Hello Small World.

Я не знаю, смущаюсь.

На других языках программирования я видел, что они используют такие ключевые слова, как web.home.featured.HelloWorld .

Каков наилучший способ обработки переводов в PHP?

благодаря

Solutions Collecting From Web of "Рекомендации по локализации PHP? GetText?"

Вы в основном спросили и ответили на свой вопрос, ответ может быть просто немного лучше понять, как работают файлы PO.

Внутри файла PO есть msgid и msgstr. Msgid – это значение, которое заменяется на msgstr в файле PHP в зависимости от локализации.

Теперь вы можете сделать эти теги все, что хотите, вы вполне можете это сделать:

 <?php echo _("web.home.featured.HelloWorld"); ?> 

И тогда вы никогда не коснетесь этой строки снова в источнике, вы только редактируете строку через файлы PO.

Таким образом, в основном ответ на ваш вопрос заключается в том, что вы делаете идентификаторы значений gettext для того, что должна сказать строка, однако, как правило, переводчики используют текст языковых файлов по умолчанию в качестве основы для преобразования, а не сам идентификатор.

Надеюсь, это ясно.

Я знаю, что ответ был принят, и этот ответ хорош. Но есть еще одна проблема с использованием постоянных ключей машинного стиля, таких как thing.stuff.widget при работе с Gettext.

Хотя использование постоянных ключей – лучший подход к разработке, Gettext не настроен для этого стиля работы, и это может усложнить ваш рабочий процесс .

Если вы представите переводчик с файлом PO, заполненным ключами вместо исходного текста, они могут не знать, что такое английский. Поэтому вам придется предоставить им второй файл, содержащий исходные языковые переводы для сравнения. Не конец света, но более неудобный для них, а не как разработан Gettext. (квадратный штифт, круглое отверстие и т. д.)

Я думаю, что PO отлично подходит для формата файлов для перевода на PHP и особенно рекомендуется, если вы не работаете с фреймворком с хорошим модулем l10n, но это не значит, что это хорошо для рабочего процесса и вашего процесса перевода.

Я предлагаю вам приступить к документообороту, который позволяет вашим программистам работать с постоянными ключами, ваши переводчики работают со словами и выдает файл MO с другого конца. Посмотрите на Loco для решения этой проблемы.

В качестве альтернативы используйте другой промежуточный формат файла, который позволяет использовать клавиши и слова. TMX – один из примеров. Если вы все еще хотите использовать Gettext во время выполнения, вы можете конвертировать файлы .

В настоящее время я занимаюсь той же проблемой. Общей практикой в ​​gettext является использование английского текста в качестве ключа. Недавно наш редактор копий изменил целую кучу английского текста (другие языки почти не тронуты), поэтому нам нужно изменить весь исходный код на все файлы PO.

Мы переключаемся на нейтральный ключ. Поскольку у нас уже есть некоторые сайты на Java. Мы будем использовать тот же формат имен свойств.