Yii2 学习笔记之国际化

1. Yii::t() 方法可以像这样使用,如下所示:

// 代码片段中,'app' 代表文本消息的类别
echo \Yii::t('app', 'This is a message to translate!');

2. 修改配置文件

'components' => [
    // ...
    'i18n' => [
        'translations' => [
            	'*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@common/messages',
                //'sourceLanguage' => 'en',
                'fileMap' => [
                    'common' => 'common.php',
                    'backend' => 'backend.php',
                    'frontend' => 'frontend.php',
                ],
            ],
        ],
    ],
],

上面配置中的“*”表示所有消息开始程式类别必须使用这种特殊的消息源进行翻译(转换)。 设置了fileMap进行对应各自的源消息。如\Yii::t(‘backend’, ‘username’),翻译中文时,则对应common文件夹->messages文件夹->zh文件夹->backend.php源文件

3. 设置翻译文件

上一步骤的配置文件中,我们设置了basePath。所以翻译文件应存放在:

│──backend
│──common
│   │──messages
│       │──es
│       │──ru
│       │──zh
│          │──backend.php
│          │──common.php
│          │──frontend.php
│──frontend
<?php
    return [
        'This is a string to translate' => '这是一个翻译的字符串'
    ];
?>

4. 文本消息翻译 测试。

//测试 A
public function actionTest1() {
    //该文本消息会被翻译成中文,因为设定的目标语言是 zh-CN。我们也可以动态地改变应用程序的语言。
    echo \Yii::t('backend', 'This is a string to translate');
    \Yii::$app->language = 'en-US';
    echo \Yii::t('backend', 'This is a string to translate!');
}

//测试 B
//在一个转换(翻译)的消息,可以插入一个或多个参数
public function actionTest2() {
    $username = 'Username1';
    // display a translated message with username being "Vladimir"
    echo \Yii::t('backend', 'Hello, {username}!', [
        'username' => $username,
    ]), "<br>";
    $username = 'username2';
    // display a translated message with username being "John"
    echo \Yii::t('backend', 'Hello, {username}!', [
        'username' => $username,
    ]), "<br>";
    $price = 150;
    $count = 3;
    $subtotal = 450;
    echo \Yii::t('backend', 'Price: {0}, Count: {1}, Subtotal: {2}', [$price, $count, $subtotal]);
}

5. 视图文件翻译 测试

可以翻译整个视图脚本,而不是单独的翻译文本消息。例如,如果目标语言是zh-CN,想翻译是 views/site/index.php 视图文件, 那么应该翻译视图并保存在 views/site/zh-CN 目录下。 第8步 - 创建 views/site/zh-CN 目录。 然后,zh-CN 文件夹中创建一个 index.php 文件并使用下面的代码。

<?php
   /* @var $this yii\web\View */
   $this->title = 'My Yii Application';
?>

<div class = "site-index">
   <div class = "jumbotron">
      <h1>欢迎您访问!</h1>
   </div>
</div>

参考链接

(完)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

如何在安卓移动终端进行一次渗透实验?

下面的实验将通过使用一个虚拟Android系统作为实验主体来进行展示。在这个实验中,通过使用虚拟Android系统,模拟移动终端的操作,来帮助我们逐步实现使用一...

3086
来自专栏云计算教程系列

如何使用Ubuntu 16.04的Django一键安装镜像

Django是一个用于快速开发Web应用程序的高级Python框架。Django一键安装程序通过Django,Nginx,Gunicorn和Postgres为您...

1735
来自专栏肖洒的博客

tomcat启动问题(JDBC文件配置问题)

问题:部署完tomcat,只显示首页,点击无反应。 解决:是JDBC配置的问题。 正确配置:

591
来自专栏木子昭的博客

nodejs爬虫获取漫威超级英雄电影海报

1593
来自专栏Python、Flask、Django

MongoDb 3.4.x 集群部署之分片

1163
来自专栏Laoqi's Linux运维专列

mycat实现MySQL读写分离

4445
来自专栏xcywt

《Linux命令行与shell脚本编程大全》第十章 使用编辑器

主要介绍vim, nano, emacs,KWrite,Kate,GNOME 10.1 vim Unix系统最初的编辑器 10.1.1检查vim软件包 先搞明白...

2028
来自专栏云计算教程系列

如何在一个Ubuntu 16.04服务器上将Nginx配置为Web服务器和Apache的反向代理

Apache和Nginx是两种常用的PHP开源Web服务器。当托管具有不同要求的多个网站时,在同一虚拟机上运行它们会很有用。在单个系统上运行两个Web服务器的一...

2233
来自专栏云计算教程系列

给你的数据库加一道缓存:Redis入门教程

Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。 本教程将会教你如何在Ubuntu 18.04 上安装、配置Red...

2100
来自专栏java架构师

Hadoop总结篇之四---底层通信是怎么做到的

上一篇介绍了一个job的提交过程。期间多次提到通信协议。那么协议是什么? 协议其实就是通信的双方所遵守的一套规范,这套规范规定了通信时传输的数据的固定的格式。 ...

3666

扫码关注云+社区

领取腾讯云代金券