Подтвердить что ты не робот

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

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

Я просмотрел php "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?

Спасибо

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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