{% raw %}

Symfony 翻译教程

原文: http://zetcode.com/symfony/translation/

Symfony 翻译教程显示了如何在 Symfony 中使用不同的语言。

国际化和本地化正在使计算机软件适应不同的语言和文化。

Symfony 翻译

对于国际化和本地化,Symfony 包含用于这些任务的symfony/translation包。

翻原文件具有以下强制格式: domain.locale.loaderdomain是将消息组织成组的一种可选方式。 默认域为messageslocale定义翻原文件的语言环境; 例如zhskdeloader是一种加载和解析文件的方式。 例如 xlf,php 或 yaml。

可以将翻译后的文本写入不同的文件格式。 Symfony 转换组件支持许多转换格式,例如 XLIFF,PHP,Qt,.po.mo,JSON,CSV 或 INI。 推荐的格式是 XLIFF。

可以将翻原文件放在三个不同的目录中,其中第一个位置具有最高优先级:translations/src/Resources/%bundle name%/translations/Resources/translations/

Symfony 翻译示例

在下面的示例中,我们创建一个简单的 Web 应用,该应用根据语言环境返回一条消息。 我们使用默认的messages域。

  1. $ composer create-project symfony/skeleton symtrans

使用composer,我们创建一个新的 Symfony 骨架项目。

  1. $ cd symtrans

我们转到项目目录。

  1. $ composer require symfony/translation
  2. $ composer require annotations
  3. $ composer require maker

我们安装了三个包:symfony/translationannotationsmaker

  1. $ composer require server --dev

我们安装开发 Web 服务器。

config/packages/translation.yaml

  1. framework:
  2. default_locale: '%locale%'
  3. translator:
  4. paths:
  5. - '%kernel.project_dir%/translations'
  6. fallbacks:
  7. - '%locale%'

translation.yaml文件中,我们定义了默认语言环境。 它使用%locale%参数,该参数在services.yaml配置文件中设置。

config/services.yaml

  1. parameters:
  2. locale: 'en'
  3. ...

默认情况下,我们具有英语默认语言环境。

translations/messages.en.xlf

  1. <?xml version="1.0"?>
  2. <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
  3. <file source-language="en" target-language="en" datatype="plaintext"
  4. original="file.ext">
  5. <body>
  6. <trans-unit id="text.message">
  7. <source>text.message</source>
  8. <target>Today is a beautiful day</target>
  9. </trans-unit>
  10. </body>
  11. </file>
  12. </xliff>

这是英语的翻原文件。

  1. <trans-unit id="text.message">
  2. <source>text.message</source>
  3. <target>Today is a beautiful day</target>
  4. </trans-unit>

我们只有一个翻译部门。 翻译单位由 ID 标识。

translations/messages.sk.xlf

  1. <?xml version="1.0"?>
  2. <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
  3. <file source-language="en" target-language="sk" datatype="plaintext"
  4. original="file.ext">
  5. <body>
  6. <trans-unit id="text.message">
  7. <source>text.message</source>
  8. <target>Dnes je krásny deň.</target>
  9. </trans-unit>
  10. </body>
  11. </file>
  12. </xliff>

这是斯洛伐克语的翻原文件。

  1. $ php bin/console clear:cache

请注意,我们可能需要清除缓存。

  1. $ php bin/console make:controller HomeController

我们创建一个HomeController

src/Controller/HomeController.php

  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Component\Routing\Annotation\Route;
  4. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Translation\TranslatorInterface;
  7. class HomeController extends Controller
  8. {
  9. /**
  10. * @Route("/", name="home")
  11. */
  12. public function index(TranslatorInterface $translator)
  13. {
  14. $translated = $translator->trans('text.message',[], null, 'sk');
  15. return new Response($translated);
  16. }
  17. }

HomeController返回翻译后的消息。

  1. public function index(TranslatorInterface $translator)
  2. {

我们注入了TranslatorInterface以获取 Symfony 翻译服务。

  1. $translated = $translator->trans('text.message',[], null, 'sk');

转换程序的trans()方法转换给定的消息。 最后一个参数是语言环境。 在我们的案例中,我们使用了斯洛伐克语区域设置,因此我们希望在斯洛伐克语中输入一条消息。

  1. $ php bin/console server:start

我们启动服务器。

  1. $ curl localhost:8000
  2. Dnes je krásny deň.

我们使用curl生成 GET 请求,并在斯洛伐克语中收到一条消息。

使用 Twig 模板

接下来,我们将使用 Twig 模板。

  1. $ composer require twig

我们安装 Twig。

HomeController.php

  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Component\Routing\Annotation\Route;
  4. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  5. use Symfony\Component\Translation\TranslatorInterface;
  6. class HomeController extends Controller
  7. {
  8. /**
  9. * @Route("/home", name="home")
  10. */
  11. public function index(TranslatorInterface $translator)
  12. {
  13. $message = $translator->trans('text.message',[], null, 'sk');
  14. return $this->render('home/index.html.twig', [
  15. 'message' => $message
  16. ]);
  17. }
  18. }

控制器翻译消息并呈现 Twing 模板。 它向模板发送翻译后的消息。

templates/home/index.html.twig

  1. {% extends 'base.html.twig' %}
  2. {% block title %}Home page{% endblock %}
  3. {% block body %}
  4. {% trans %}%message%{% endtrans %}
  5. {% endblock %}

在模板中,我们使用 Twig {% trans %}{% endtrans %}指令显示消息。

templates/base.html.twig

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>{% block title %}Welcome!{% endblock %}</title>
  6. {% block stylesheets %}{% endblock %}
  7. </head>
  8. <body>
  9. {% block body %}{% endblock %}
  10. {% block javascripts %}{% endblock %}
  11. </body>
  12. </html>

这是自动生成的基本模板文件。

在本教程中,我们使用了 Symfony 中的翻译。

您可能也会对以下相关教程感兴趣: Symfony 简介Symfony 表单教程Symfony 验证教程Symfony 上传文件教程Symfony 服务教程Symfony 请求教程PHP 教程

{% endraw %}