ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
{% raw %} # Symfony 翻译教程 > 原文: [http://zetcode.com/symfony/translation/](http://zetcode.com/symfony/translation/) 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`域。 ```php $ composer create-project symfony/skeleton symtrans ``` 使用`composer`,我们创建一个新的 Symfony 骨架项目。 ```php $ cd symtrans ``` 我们转到项目目录。 ```php $ composer require symfony/translation $ composer require annotations $ composer require maker ``` 我们安装了三个包:`symfony/translation`,`annotations`和`maker`。 ```php $ composer require server --dev ``` 我们安装开发 Web 服务器。 `config/packages/translation.yaml` ```php framework: default_locale: '%locale%' translator: paths: - '%kernel.project_dir%/translations' fallbacks: - '%locale%' ``` 在`translation.yaml`文件中,我们定义了默认语言环境。 它使用`%locale%`参数,该参数在`services.yaml`配置文件中设置。 `config/services.yaml` ```php parameters: locale: 'en' ... ``` 默认情况下,我们具有英语默认语言环境。 `translations/messages.en.xlf` ```php <?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> ``` 这是英语的翻原文件。 ```php <trans-unit id="text.message"> <source>text.message</source> <target>Today is a beautiful day</target> </trans-unit> ``` 我们只有一个翻译部门。 翻译单位由 ID 标识。 `translations/messages.sk.xlf` ```php <?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 $ php bin/console clear:cache ``` 请注意,我们可能需要清除缓存。 ```php $ php bin/console make:controller HomeController ``` 我们创建一个`HomeController`。 `src/Controller/HomeController.php` ```php <?php namespace 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`返回翻译后的消息。 ```php public function index(TranslatorInterface $translator) { ``` 我们注入了`TranslatorInterface`以获取 Symfony 翻译服务。 ```php $translated = $translator->trans('text.message',[], null, 'sk'); ``` 转换程序的`trans()`方法转换给定的消息。 最后一个参数是语言环境。 在我们的案例中,我们使用了斯洛伐克语区域设置,因此我们希望在斯洛伐克语中输入一条消息。 ```php $ php bin/console server:start ``` 我们启动服务器。 ```php $ curl localhost:8000 Dnes je krásny deň. ``` 我们使用`curl`生成 GET 请求,并在斯洛伐克语中收到一条消息。 ## 使用 Twig 模板 接下来,我们将使用 Twig 模板。 ```php $ composer require twig ``` 我们安装 Twig。 `HomeController.php` ```php <?php namespace 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` ```php {% extends 'base.html.twig' %} {% block title %}Home page{% endblock %} {% block body %} {% trans %}%message%{% endtrans %} {% endblock %} ``` 在模板中,我们使用 Twig `{% trans %}`和`{% endtrans %}`指令显示消息。 `templates/base.html.twig` ```php <!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/intro/), [Symfony 表单教程](/symfony/form/), [Symfony 验证教程](/symfony/validation/), [Symfony 上传文件教程](/symfony/uploadfile/), [Symfony 服务教程](/symfony/service/), [Symfony 请求教程](/symfony/request/), [PHP 教程](/lang/php/)。 {% endraw %}