Добавление поддержки i18n в PHP с gettext?

Erland Sommarskog поддерживал авторитетный ответ на этот вопрос в течение прошлых 16 лет: Массивы и Списки в SQL Server.

существует по крайней мере дюжина способов передать массив или список к запросу; у каждого есть их собственные уникальные за и против.

я действительно не могу рекомендовать достаточно [1 112], читает статью для приобретения знаний о компромиссах среди всех этих опций.

5
задан tonfa 25 August 2009 в 21:01
поделиться

1 ответ

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

Ключ поиска - это предложение в "базовый" язык.

в исходном коде у вас будет что-то вроде

echo _("Hello, world!");

для каждого языка, у вас будет соответствующий текстовый файл с ключом и переведенной версией (обратите внимание на% s, который можно использовать с функциями printf)

french
msgid "Hello, world!"
msgstr "Salut, monde!"
msgid "My name is %s"
msgstr "Mon nom est %s"

italian
msgid "Hello, world!"
msgstr "Ciao, mondo!"
msgid "My name is %s"
msgstr "Il mio nome è %s"

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

  • весь вывод текста должен использовать функции gettext (gettext (), ngettext (), _ ())
  • использовать xgettext (* nix) для анализа ваших файлов php и создания базового текстового файла .po
  • используйте poedit , чтобы добавить тексты перевода в файлы .po
  • , используйте msgfmt (* nix) для создания двоичного файла.mo из файла .po
  • поместите файлы .mo в структуру каталогов, например

locale / de_DE / LC_MESSAGES / myPHPApp.mo

locale / en_EN / LC_MESSAGES / myPHPApp.mo

locale / it_IT /LC_MESSAGES/myPHPApp.mo[1287 providedthen you php script must set the locale that need to be used

Пример из руководства по php очень понятен для этой части

<?php
// Set language to German
setlocale(LC_ALL, 'de_DE');

// Specify location of translation tables
bindtextdomain("myPHPApp", "./locale");

// Choose domain
textdomain("myPHPApp");

// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now

// Print a test message
echo gettext("Welcome to My PHP Application");

// Or use the alias _() for gettext()
echo _("Have a nice day");
?>

Всегда из руководства по php смотрите здесь за хорошее руководство

12
ответ дан 13 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: