首頁 >後端開發 >php教程 >帶有getText的簡單多語言樹枝應用程序

帶有getText的簡單多語言樹枝應用程序

Christopher Nolan
Christopher Nolan原創
2025-02-15 08:42:10579瀏覽

本教程演示瞭如何使用Twig和GetText向PHP應用程序添加多語言支持。 它比Symfony的翻譯組件(例如Symfony的翻譯組件)要快得多。我們將修改既有英語應用程序(NOFW)來說明這一點。

Easy Multi-Language Twig Apps with Gettext

鍵優點:

  • 效率: getText的本機實現與userland替代方案相比提供了出色的性能。
  • 簡單性:
  • 將國際化添加到現有應用程序的過程非常簡單。 >
  • 綜合指南:
  • >本教程涵蓋環境設置,字符串提取(使用),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使用

或其別名Easy Multi-Language Twig Apps with Gettext 標記可翻譯字符串。 如果找不到翻譯,則返回原始字符串(佔位符)。

>讓我們用一個簡單的PHP文件(twig之外)對此進行測試以驗證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”。

>

Easy Multi-Language Twig Apps with Gettext 字符串提取:

>使用

從您的文件中提取字符串:

這將創建

(便攜式對像模板)。 生成一個英語

文件: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>

>添加一種新語言(例如,克羅地亞語):messages.po.mo>

  1. 安裝語言環境:sudo locale-gen hr_HR hr_HR.UTF-8; sudo update-locale; sudo dpkg-reconfigure locales
  2. >
  3. 生成.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
  4. >
  5. >在messages.po>中將“ hello_world”轉換為“ zdravo”。
  6. 編譯到
  7. .momsgfmt -c -o Locale/hr_HR/LC_MESSAGES/messages.mo Locale/hr_HR/LC_MESSAGES/messages.po
  8. 更改
  9. 的語言環境為i18n.php和測試。 可能需要重新啟動服務器。 hr_HR.UTF-8

twig Integration:

>將其添加到

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>

更新>使用

和recompile
<code class="language-bash">msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot</code>
文件的文件。

.pomsgmerge .mo

獎勵:實用程序腳本(App/bin/i18n): Easy Multi-Language Twig Apps with Gettext

>教程提供bash腳本(

)來自動添加語言的過程,更新

>和addlang.sh>> files。 這些腳本在原始文本中詳細介紹。 update-pot.sh> update-mo.sh config.sh部署:.pot.mo

>確保安裝getText並在服務器上生成位置。 在ubuntu上:

文件應成為您版本控件的一部分。 適用於非ubuntu系統的安裝命令和腳本。 FAQ部分提供了更多詳細信息和故障排除信息。
<code class="language-bash">msgfmt -c -o Locale/en_US/LC_MESSAGES/messages.mo Locale/en_US/LC_MESSAGES/messages.po</code>

以上是帶有getText的簡單多語言樹枝應用程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn