Symfony 简介

news/2024/5/20 5:22:48 标签: symfony, php, 开发语言

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

翻原文件具有以下强制格式: domain.locale.loader。 domain是将消息组织成组的一种可选方式。 默认域为messages。 locale定义翻原文件的语言环境; 例如zhskde。 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/translationannotationsmaker

$ 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

<?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返回翻译后的消息。

public function index(TranslatorInterface $translator)
{

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

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

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

$ php bin/console server:start

我们启动服务器。

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

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

使用 Twig 模板

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

$ composer require twig

我们安装 Twig。

HomeController.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

{% 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 中的翻译。


http://www.niftyadmin.cn/n/2528.html

相关文章

PXIXjs游戏框架-游戏开发笔记(更新中...)

文章目录基础代码篇游戏窗体图片、文本添加元素样式与属性元素事件开启基本函数鼠标控制获取鼠标指针坐标发现问题&#xff0c;引出锚点锚点设置锚点分辨案例演示1案例演示2动画移动游戏开发技巧斗地主选中、撤回打出的牌放到桌面上&#xff0c;重复图片复制&#xff08;非数组…

买阿里云服务器,实操搭建nginx+php+mysql+thinkphp5全过程(2)

书接上回(买阿里云服务器,实操搭建nginx+php+thinkphp5全过程(1)),我的阿里云服务器快要到期了,为了让它发光发热,实现最后的价值,我目标初始化服务器,重新实操搭建nginx+php+thinkphp5全过程。 反正也快过期了,知道IP也没关系了(但是我的淘宝名还是遮一下吧),上…

java-php-python-基于Springboot的水世界乐园管理系统计算机毕业设计

java-php-python-基于Springboot的水世界乐园管理系统计算机毕业设计 java-php-python-基于Springboot的水世界乐园管理系统计算机毕业设计本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术…

图像篡改检测调研

综述 https://zhuanlan.zhihu.com/p/110093560 综述 Image Tampering Detection and Localization https://github.com/yannadani/image_tampering_detection_references 阿里天池上线篡改图像检测大赛 https://www.163.com/dy/article/H0OFL14B0511DPVD.html 视频图像篡改检…

Springboot基于Java Web的华家医疗器械商城设计与实现 毕业设计-附源码261620

springboot华家医疗器械商城 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;华家医疗器械商城当然也不能排除在外。华家医疗器械商城是以实际运用为开发背景&#xff0…

第34讲:MySQL中常用的几种存储引擎以及如何选择

文章目录1.MySQL中常用的存储引擎2.InnoDB存储引擎2.1.InnoDB存储引擎的特点2.2.观察InnoDB存储引擎的数据持久化文件2.3.InnoDB存储引擎的逻辑存储结构3.MyISAM存储引擎4.Memory存储引擎5.各个存储引擎的对比表6.各场景下应该如何选择存储引擎1.MySQL中常用的存储引擎 在MySQ…

企业内容管理(ECM)系统代替纸面文档如何使所有业务部门受益

企业内容管理&#xff08;ECM&#xff09;系统代替纸面文档如何使所有业务部门受益 使用企业内容管理&#xff08;ECM&#xff09;系统为会计部门带来巨大的好处&#xff0c;包括提高效率、节约成本&#xff0c;如果实施得当&#xff0c;还可以带来巨大的投资回报。但其他部门可…

力扣算法入门刷题

1、回文数 判断输入的整数是否是回文 我的一般思路&#xff1a; 将输入的整数转成字符串&#xff0c;再将这个字符串转成字符数组c&#xff0c;对字符数组进行遍历&#xff0c;如果第i个元素与第 c.length - i - 1 元素不相等&#xff0c;也就是通过比较首尾元素是否相同来判断…