- 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://127.0.0.1:8000/en/translation/sample。
结果将是英文的“I love Symfony”。现在,在浏览器中加载页面 https://127.0.0.1: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 块也指定了占位符。页面结果如下所示。