Symfony - 国际化

国际化 (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) 中创建一个新函数 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

结果将是英文版的"I love Symfony"。现在,在浏览器中加载页面 http://localhost:8000/fr/translation/sample。现在,文本将被翻译成法语,如下所示。

I love Symfony

同样,twig 模板有 {% 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 块也指定了占位符。页面结果如下。

Place Holder