📜  Symfony-国际化

📅  最后修改于: 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 。现在,将文本翻译为法语,如下所示。

我爱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 %} 

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

占位符