Symfony国际化


国际化(i18n)本地化(l10n) 有助于提高客户对Web应用程序的覆盖率。Symfony为此提供了一个出色的翻译组件。让我们学习如何在本章中使用Translation组件。

启用翻译

默认情况下,Symfony Web框架禁用翻译组件。要启用它,请在配置文件app / config / config.yml中添加翻译器部分。

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的第一部分。现在,运行应用程序并在浏览器中加载页面 http:// localhost:8000 / en / translation / sample

结果将是“我爱Symfony”的英文版。现在,在浏览器中加载页面 http:// localhost:8000 / fr / translation / sample 。现在,文本将被翻译成法文如下。

我爱Symfony

同样,树枝模板也包含 {%trans%} 块,以便在视图中启用翻译功能。要检查它,请在 app / Resources / views / translate / index.html.twig中 添加一个新函数, translationTwigSample 和相应的视图。 **

/**
   * @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 %}

这里,反转块也指定占位符。页面结果如下。

占位符