
- Symfony 教程
- Symfony - 首頁
- Symfony - 簡介
- Symfony - 安裝
- Symfony - 架構
- Symfony - 元件
- Symfony - 服務容器
- Symfony - 事件 & 事件監聽器
- Symfony - 表示式
- Symfony - 捆綁包
- 建立簡單的 Web 應用程式
- Symfony - 控制器
- Symfony - 路由
- Symfony - 檢視引擎
- Symfony - Doctrine ORM
- Symfony - 表單
- Symfony - 驗證
- Symfony - 檔案上傳
- Symfony - Ajax 控制
- Cookie & 會話管理
- Symfony - 國際化
- Symfony - 日誌記錄
- Symfony - 郵件管理
- Symfony - 單元測試
- Symfony - 高階概念
- Symfony - REST 版本
- Symfony - CMF 版本
- 完整的工作示例
- Symfony 有用資源
- Symfony - 快速指南
- Symfony - 有用資源
- Symfony - 討論
Symfony - 國際化
國際化 (i18n) 和 本地化 (l10n) 有助於擴大 Web 應用程式的客戶覆蓋範圍。Symfony 為此提供了優秀的翻譯元件。讓我們在本節中學習如何使用翻譯元件。
啟用翻譯
預設情況下,Symfony Web 框架會停用翻譯元件。要啟用它,請在配置檔案 app/config/config.yml 中新增 translator 部分。
framework: translator: { fallbacks: [en] }
翻譯檔案
翻譯元件使用翻譯資原始檔來翻譯文字。資原始檔可以用 PHP、XML 和 YAML 編寫。資原始檔的預設位置是 app/Resources/translations。每個語言都需要一個資原始檔。讓我們為法語編寫一個資原始檔 messages.fr.yml。
I love Symfony: J'aime Symfony I love %name%: J'aime %name%
左側文字為英文,右側文字為法文。第二行顯示了佔位符的使用。在使用翻譯時,可以動態新增佔位符資訊。
用法
預設情況下,Symfony Web 框架將設定使用者系統的預設區域設定。如果 Web 應用程式中未配置預設區域設定,則它將回退到英文。區域設定也可以在網頁的 URL 中設定。
http://www.somedomain.com/en/index http://www.somedomain.com/fr/index
讓我們在我們的示例中使用基於 URL 的區域設定來輕鬆理解翻譯概念。在 DefaultController (src/AppBundle/Controller/DefaultController.php) 中建立一個新的函式 translationSample,並使用路由 /{_locale}/translation/sample。{_locale} 是 Symfony 中用於指定預設區域設定的特殊關鍵字。
/** * @Route("/{_locale}/translation/sample", name="translation_sample") */ public function translationSample() { $translated = $this->get('translator')->trans('I love Symfony'); return new Response($translated); }
在這裡,我們使用了翻譯方法 trans,它將內容翻譯成當前區域設定。在本例中,當前區域設定是 URL 的第一部分。現在,執行應用程式並在瀏覽器中載入頁面 https://:8000/en/translation/sample。
結果將是英文的“I love Symfony”。現在,在瀏覽器中載入頁面 https://:8000/fr/translation/sample。現在,文字將翻譯成法文,如下所示。

類似地,twig 模板也有 {% trans %} 塊,以便在檢視中啟用翻譯功能。要檢查它,請新增一個新的函式 translationTwigSample 和相應的檢視在 app/Resources/views/translate/index.html.twig。
/** * @Route("/{_locale}/translation/twigsample", name="translation_twig_sample") */ public function translationTwigSample() { return $this->render('translate/index.html.twig'); }
檢視
{% extends 'base.html.twig' %} {% block body %} {% trans with {'%name%': 'Symfony'} from "app" into "fr" %}I love %name% {% endtrans %} {% endblock %}
在這裡,trans 塊也指定了佔位符。頁面結果如下所示。
