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

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

Christopher Nolan
發布: 2025-02-15 08:42:10
原創
634 人瀏覽過

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

Easy Multi-Language Twig Apps with Gettext

鍵優點:

  • 效率: getText的本機實現與userland替代方案相比提供了出色的性能。
  • 簡單性:
  • 將國際化添加到現有應用程序的過程非常簡單。 >
  • 綜合指南:
  • >本教程涵蓋環境設置,字符串提取(使用),xgettext.po文件生成,通過.mo擴展的twig集成以及有用的實用程序腳本。 i18n

設置和基礎知識:

我們將使用宅基地改進(假設已經安裝了GetText;稍後提供手動安裝的說明)。 因為NOFW使用樹枝,因此需要擴展:

> i18n

>
git clone https://github.com/swader/nofw
cd nofw
git checkout tags/2.93 -b 2.93
composer require twig/extensions
登入後複製
登入後複製
(注意:這克隆較舊的NOFW版本,而無需內置國際化以進行教程。

>按照NOFW讀取文件進行配置數據庫。 該應用程序現在應該運行。

getText使用

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

>讓我們用一個簡單的PHP文件(twig之外)對此進行測試以驗證getText功能。創建

gettext("string") _("string")

創建目錄結構:

i18n.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");
登入後複製
登入後複製

代碼為GetText設置語言,語言環境和域。 由於缺少語言文件,因此運行此功能會迴盪“ Hello_world”。

>

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

>使用

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

這將創建

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

文件:xgettext

xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php
登入後複製
登入後複製
編輯

,翻譯“ hello_world”(例如,“ howdy”)。 編譯為messages.pot.po

msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot
登入後複製
登入後複製

>添加一種新語言(例如,克羅地亞語):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. .mo<>msgfmt -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

在您的樹枝模板中,使用
git clone https://github.com/swader/nofw
cd nofw
git checkout tags/2.93 -b 2.93
composer require twig/extensions
登入後複製
登入後複製
<>> block:>

trans

>不直接處理樹枝,因此我們將使用緩存機制。創建
<?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");
登入後複製
登入後複製

xgettext app/bin/twigcache.php然後從緩存的文件中提取字符串:

xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php
登入後複製
登入後複製

更新>使用

和recompile
msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot
登入後複製
登入後複製
文件的文件。

.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部分提供了更多詳細信息和故障排除信息。
msgfmt -c -o Locale/en_US/LC_MESSAGES/messages.mo Locale/en_US/LC_MESSAGES/messages.po
登入後複製

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板