📅  最后修改于: 2020-10-19 03:20:55             🧑  作者: Mango
国际化(i18n)和本地化(l10n)帮助增加Web应用程序的客户覆盖率。为此,Symfony提供了出色的翻译组件。让我们学习本章中如何使用翻译组件。
默认情况下,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)中,使用路由/ {_ locale} / translation / sample创建一个新函数TranslationSample 。 {_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 。现在,将文本翻译为法语,如下所示。
同样,树枝模板具有{%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 %}
在这里,trans块也指定占位符。页面结果如下。