Лучшие практики локализации PHP? GetText? - PullRequest
21 голосов
/ 07 мая 2010

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

Я изучил php "gettext", однако, если я правильно понял, я вижу большой недостаток:

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

Через несколько дней мы хотим поменять текст на английский на «Hello Small World»? Могу ли я изменить значение в gettext? Я создаю английский PO-файл и меняю его там? Если вы измените gettext, он будет считаться новой строкой, и вы немедленно потеряете текущий перевод ...

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

Я не знаю, что запутался.

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

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

Спасибо

Ответы [ 3 ]

14 голосов
/ 08 мая 2010

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

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

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

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

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

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

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

9 голосов
/ 05 июня 2013

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

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

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

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

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

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

7 голосов
/ 08 мая 2010

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

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

...