{% raw %}
Symfony 翻译教程
Symfony 翻译教程显示了如何在 Symfony 中使用不同的语言。
国际化和本地化正在使计算机软件适应不同的语言和文化。
Symfony 翻译
对于国际化和本地化,Symfony 包含用于这些任务的symfony/translation包。
翻原文件具有以下强制格式: domain.locale.loader。 domain是将消息组织成组的一种可选方式。 默认域为messages。 locale定义翻原文件的语言环境; 例如zh,sk或de。 loader是一种加载和解析文件的方式。 例如 xlf,php 或 yaml。
可以将翻译后的文本写入不同的文件格式。 Symfony 转换组件支持许多转换格式,例如 XLIFF,PHP,Qt,.po,.mo,JSON,CSV 或 INI。 推荐的格式是 XLIFF。
可以将翻原文件放在三个不同的目录中,其中第一个位置具有最高优先级:translations/,src/Resources/%bundle name%/translations/或Resources/translations/。
Symfony 翻译示例
在下面的示例中,我们创建一个简单的 Web 应用,该应用根据语言环境返回一条消息。 我们使用默认的messages域。
$ composer create-project symfony/skeleton symtrans
使用composer,我们创建一个新的 Symfony 骨架项目。
$ cd symtrans
我们转到项目目录。
$ composer require symfony/translation$ composer require annotations$ composer require maker
我们安装了三个包:symfony/translation,annotations和maker。
$ composer require server --dev
我们安装开发 Web 服务器。
config/packages/translation.yaml
framework:default_locale: '%locale%'translator:paths:- '%kernel.project_dir%/translations'fallbacks:- '%locale%'
在translation.yaml文件中,我们定义了默认语言环境。 它使用%locale%参数,该参数在services.yaml配置文件中设置。
config/services.yaml
parameters:locale: 'en'...
默认情况下,我们具有英语默认语言环境。
translations/messages.en.xlf
<?xml version="1.0"?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"><file source-language="en" target-language="en" datatype="plaintext"original="file.ext"><body><trans-unit id="text.message"><source>text.message</source><target>Today is a beautiful day</target></trans-unit></body></file></xliff>
这是英语的翻原文件。
<trans-unit id="text.message"><source>text.message</source><target>Today is a beautiful day</target></trans-unit>
我们只有一个翻译部门。 翻译单位由 ID 标识。
translations/messages.sk.xlf
<?xml version="1.0"?><xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"><file source-language="en" target-language="sk" datatype="plaintext"original="file.ext"><body><trans-unit id="text.message"><source>text.message</source><target>Dnes je krásny deň.</target></trans-unit></body></file></xliff>
这是斯洛伐克语的翻原文件。
$ php bin/console clear:cache
请注意,我们可能需要清除缓存。
$ php bin/console make:controller HomeController
我们创建一个HomeController。
src/Controller/HomeController.php
<?phpnamespace App\Controller;use Symfony\Component\Routing\Annotation\Route;use Symfony\Bundle\FrameworkBundle\Controller\Controller;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Translation\TranslatorInterface;class HomeController extends Controller{/*** @Route("/", name="home")*/public function index(TranslatorInterface $translator){$translated = $translator->trans('text.message',[], null, 'sk');return new Response($translated);}}
HomeController返回翻译后的消息。
public function index(TranslatorInterface $translator){
我们注入了TranslatorInterface以获取 Symfony 翻译服务。
$translated = $translator->trans('text.message',[], null, 'sk');
转换程序的trans()方法转换给定的消息。 最后一个参数是语言环境。 在我们的案例中,我们使用了斯洛伐克语区域设置,因此我们希望在斯洛伐克语中输入一条消息。
$ php bin/console server:start
我们启动服务器。
$ curl localhost:8000Dnes je krásny deň.
我们使用curl生成 GET 请求,并在斯洛伐克语中收到一条消息。
使用 Twig 模板
接下来,我们将使用 Twig 模板。
$ composer require twig
我们安装 Twig。
HomeController.php
<?phpnamespace App\Controller;use Symfony\Component\Routing\Annotation\Route;use Symfony\Bundle\FrameworkBundle\Controller\Controller;use Symfony\Component\Translation\TranslatorInterface;class HomeController extends Controller{/*** @Route("/home", name="home")*/public function index(TranslatorInterface $translator){$message = $translator->trans('text.message',[], null, 'sk');return $this->render('home/index.html.twig', ['message' => $message]);}}
控制器翻译消息并呈现 Twing 模板。 它向模板发送翻译后的消息。
templates/home/index.html.twig
{% extends 'base.html.twig' %}{% block title %}Home page{% endblock %}{% block body %}{% trans %}%message%{% endtrans %}{% endblock %}
在模板中,我们使用 Twig {% trans %}和{% endtrans %}指令显示消息。
templates/base.html.twig
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>{% block title %}Welcome!{% endblock %}</title>{% block stylesheets %}{% endblock %}</head><body>{% block body %}{% endblock %}{% block javascripts %}{% endblock %}</body></html>
这是自动生成的基本模板文件。
在本教程中,我们使用了 Symfony 中的翻译。
您可能也会对以下相关教程感兴趣: Symfony 简介, Symfony 表单教程, Symfony 验证教程, Symfony 上传文件教程, Symfony 服务教程, Symfony 请求教程, PHP 教程。
{% endraw %}
