Перевод php-приложения с помощью gettext

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

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

Я немного поигрался с poedit и могу ошибаться, надеюсь, кто-то сможет прояснить некоторые вопросы.

  1. Насколько я могу судить, poedit читает ваш php-код и находит все доступные места для перевода, это правильно?

  2. Если вышесказанное верно, то как сделать так, чтобы переводчик-человек переводил с помощью poedit, не имея доступа к вашему приложению?

Или, проще говоря, можно ли сделать файл перевода с помощью poedit, не имея доступа к вашему PHP-коду?


person JasonDavis    schedule 13.09.2009    source источник


Ответы (3)


Обратите внимание, что я никогда не использовал poedit, так что это может быть неточно ...

Интересная статья, которую вы могли бы сначала прочитать для некоторой информации: Локализация плагина WordPress с помощью poEdit
Это wordpress, что означает PHP, так что основные идеи должны подходить для вашего приложения.

В принципе, если я хорошо понимаю:

  • you first extract all the strings from the PHP source code
    • by telling poedit how your translation function is called
    • это должно ответить на ваш 1)
  • then, you do translation
    • working with/on the .po file
    • И я предполагаю, что вы можете распространить этот файл .po среди своих переводчиков, которые затем смогут переводить содержащиеся в нем строки.
  • и, наконец, вы используете файл .po для создания файла .mo, который будет использоваться в вашем приложении.


Эта другая статья, тоже о wordpress, похоже, указывает на то, что я догадываюсь правильно: Пользователь : Skippy / Создание файлов POT - особенно это предложение:

Сделайте файл .po доступным для загрузки (или, при желании, включите его в архив плагина). Переводчики будут использовать этот файл для создания файла .mo, который будет использоваться функцией load_plugin_textdomain().

(Очевидно, что имя функции, которое вы будете использовать в своем приложении, не будет таким же, как в wordpress, но идея есть)


Надеюсь, это поможет :-)
Удачи!

person Pascal MARTIN    schedule 13.09.2009
comment
спасибо, ты всегда вкладываешь столько усилий в свои ответы +1 - person JasonDavis; 14.09.2009
comment
@jason: пожалуйста :-) Здесь мне было любопытно по поводу gettext: я полагаю, я буду использовать его однажды или другой (тем более что сейчас я работаю над проектом, который использует gettext - даже если я м не тот, кто отвечает за переводы) - person Pascal MARTIN; 14.09.2009
comment
Я надеялся, что есть способ создать исходное (первое) поле, которое gettext будет использовать вручную в текстовом редакторе, но похоже, что мне придется позволить poedit сканировать все мои файлы проекта, если я не найду другой метод - person JasonDavis; 14.09.2009
comment
Казалось бы, файлы .po - это просто текстовые файлы в специальном формате (см. en.wikipedia. org / wiki / GNU_gettext # Перевод для реального базового примера) ;; может ты где-нибудь найдешь определение этого формата? учитывая, что gettext - это GNU, формат должен быть открытым ... - person Pascal MARTIN; 14.09.2009
comment
Здесь stackoverflow.com/questions/873017/ это основная причина, по которой я хотел бы сделать это вручную, так как я вижу проблему в том, как это работает, спасибо за ссылку - person JasonDavis; 14.09.2009
comment
о, понятно - а как насчет решения, предложенного raspi на этой странице? stackoverflow.com/questions/873017/ < / а> - person Pascal MARTIN; 14.09.2009
comment
ну, мой случай немного отличается. Чтобы использовать gettext, вам нужно вызвать gettext или _ (), насколько я знаю, ну, в моем приложении я буду использовать настраиваемую именованную функцию adn, тогда эта функция вызовет функцию gettext, поэтому poedit будет видеть только фактический gettext или _ (), вызываемый 1 раз на всем сайте внутри функции, потому что poedit не выполняет код, а просто читает файлы. Я просто успешно смог отредактировать файл .po в текстовом редакторе, и gettext его правильно прочитал =) - person JasonDavis; 14.09.2009
comment
Я должен сначала прочитать вашу ссылку на wordpress, похоже, что poedit имеет ключевые слова вкладки при создании нового проекта, вы можете ввести имя настраиваемой функции там, это здорово - person JasonDavis; 14.09.2009
comment
Читая ваш первый комментарий, я собирался сказать, почему бы вам не указать, что ваша функция перевода называется adn, а потом я увидел, что вы сами это выяснили - приятно :-) - person Pascal MARTIN; 14.09.2009
comment
@downvoter: я в порядке, если меня проголосуют против (так работает SO; даже если голосование против меня через 4 месяца после того, как мой ответ был принят, кажется странным), но объяснение того, что вы считаете неправильным в моем ответе, может помочь (и я, и ОП, и сообщество SO в целом): это позволило бы мне отредактировать свой ответ, улучшить его :-) ;; Заранее спасибо :-) - person Pascal MARTIN; 26.01.2010

Нет, poEdit не читает все ваши источники. Для этого вы используете утилиту gettext "xgettext".

По сути, xgettext создаст файл .po.

Ваши переводчики будут использовать POEdit для работы с этим файлом .po.

Когда переводчик будет готов, вы скомпилируете .po в .mo, который ваше приложение будет использовать для поиска переводов.

Если у вас установлен gettext в какой-либо системе unixy, попробуйте "info gettext" в bash.

person timdev    schedule 13.09.2009
comment
@tim: на странице poedit.net говорится: вы можете использовать Poedit для сканирования исходного кода на предмет переводимых строк. - кажется, можно использовать poEdit для чтения исходного кода? - person Pascal MARTIN; 14.09.2009
comment
Ой, посмотрите на это! На самом деле, давно не использовал gettext (меня это испугало). Тогда я закончил тем, что написал некоторые вещи в командной строке для управления xgettext, и это работало достаточно хорошо. Я думаю, что у расширения php-gettext было несколько приличных документов по этому процессу .. - person timdev; 14.09.2009

PoEdit фактически использует xgettext, который можно правильно настроить на вкладке Настройки / Парсеры.

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

К сожалению, я не вижу возможности создать файл .pot из источника, но poedit может его прочитать (конечно, это то же самое, что и .po).

После создания собственного .po у вас может быть .mo!

person zimpee    schedule 28.04.2012