本教程演示瞭如何使用Twig和GetText向PHP應用程序添加多語言支持。 它比Symfony的翻譯組件(例如Symfony的翻譯組件)要快得多。我們將修改既有英語應用程序(NOFW)來說明這一點。
鍵優點:
xgettext
和.po
文件生成,通過.mo
擴展的twig集成以及有用的實用程序腳本。 i18n
設置和基礎知識:
我們將使用宅基地改進(假設已經安裝了GetText;稍後提供手動安裝的說明)。 因為NOFW使用樹枝,因此需要擴展:>
i18n
<code class="language-bash">git clone https://github.com/swader/nofw cd nofw git checkout tags/2.93 -b 2.93 composer require twig/extensions</code>(注意:這克隆較舊的NOFW版本,而無需內置國際化以進行教程。
>按照NOFW讀取文件進行配置數據庫。 該應用程序現在應該運行。
getText使用
或其別名標記可翻譯字符串。 如果找不到翻譯,則返回原始字符串(佔位符)。
:gettext("string")
_("string")
i18n.php
<code class="language-php"><?php $language = "en_US.UTF-8"; putenv("LANGUAGE=" . $language); setlocale(LC_ALL, $language); $domain = "messages"; bindtextdomain($domain, "Locale"); bind_textdomain_codeset($domain, 'UTF-8'); textdomain($domain); echo _("HELLO_WORLD");</code>
代碼為GetText設置語言,語言環境和域。 由於缺少語言文件,因此運行此功能會迴盪“ Hello_world”。
> 字符串提取:
>使用
從您的文件中提取字符串:這將創建
(便攜式對像模板)。 生成一個英語文件:xgettext
<code class="language-bash">xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php</code>編輯
,翻譯“ hello_world”(例如,“ howdy”)。 編譯為messages.pot
:.po
<code class="language-bash">msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot</code>
>添加一種新語言(例如,克羅地亞語): twig Integration:
:
更新>使用
獎勵:實用程序腳本(App/bin/i18n): ,,, >和
和.mo
>
sudo locale-gen hr_HR hr_HR.UTF-8; sudo update-locale; sudo dpkg-reconfigure locales
.po
> file:mkdir -p Locale/hr_HR/LC_MESSAGES; msginit --locale=hr_HR --output-file=Locale/hr_HR/LC_MESSAGES/messages.po --input=Locale/messages.pot
messages.po
>中將“ hello_world”轉換為“ zdravo”。
.mo
msgfmt -c -o Locale/hr_HR/LC_MESSAGES/messages.mo Locale/hr_HR/LC_MESSAGES/messages.po
i18n.php
和測試。 可能需要重新啟動服務器。 hr_HR.UTF-8
app/config/config_web.php
<code class="language-bash">git clone https://github.com/swader/nofw
cd nofw
git checkout tags/2.93 -b 2.93
composer require twig/extensions</code>
> block:trans
<code class="language-php"><?php
$language = "en_US.UTF-8";
putenv("LANGUAGE=" . $language);
setlocale(LC_ALL, $language);
$domain = "messages";
bindtextdomain($domain, "Locale");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
echo _("HELLO_WORLD");</code>
:xgettext
app/bin/twigcache.php
然後從緩存的文件中提取字符串:<code class="language-bash">xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php</code>
<code class="language-bash">msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot</code>
文件的文件。 .po
msgmerge
.mo
addlang.sh
>> files。 這些腳本在原始文本中詳細介紹。 update-pot.sh
>
update-mo.sh
config.sh
部署:.pot
.mo
<code class="language-bash">msgfmt -c -o Locale/en_US/LC_MESSAGES/messages.mo Locale/en_US/LC_MESSAGES/messages.po</code>
以上是帶有getText的簡單多語言樹枝應用程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!