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) 中使用路由/{_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 。

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

我爱交响乐

类似地,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 块也指定占位符。页面结果如下。

占位符