yii2-国际化,可参考开发文档权威指南-国际化
2016-07-08 21:58
615 查看
国际化
国际化(I18N)指软件应用设计成无须改动引擎即可应用于不同语言和地区的过程。对于 web 应用,这点特别重要,因为潜在用户是全球范围的。地区和语言
在 Yii 应用中定义了两个语言属性:[[yii\base\Application::$sourceLanguage|source language]]和[[yii\base\Application::$language|target language]]。源语言是应用消息原始编写语言:目标语言是当前使用的语言,在应用配置中如下定义:
ll-CC,其中
ll是语言的两个或三个小写字母代码,根据ISO-639分配确定,而
CC是国家代码,根据ISO-3166分配确定。
如果没有
ru-RU翻译文件,Yii 将在提示失败前尝试查找
ru翻译文件。
注意:你能更进一步地自定义指定语言的细节as documented in ICU project.
消息翻译
基础
Yii 基础消息翻译在基本的变换工作中无须使用其他 PHP 扩展。它要做的只是查找从源语言翻译到目标语言的消息翻译文件。消息以\Yii::t方法的第二个参数来指定:
i18n组件配置中的消息源加载适当的翻译:
app*指定了该消息源处理哪些类别的消息。这个例子中我们处理以
app开头的所有消息。你也可以指定缺省翻译,更多消息请参考i18n 示例.
class定义使用哪个消息源。以下消息源是可用的:
PhpMessageSource 使用 PHP 文件保存
GettextMessageSource 使用 GNU Gettext MO 或 PO 文件保存
DbMessageSource 使用数据库保存
basePath定义当前使用消息源在哪里保存消息。该例中保存在应用的
messages目录。使用数据库保存的情况要跳过这个选项。
sourceLanguage定义
\Yii::t第二个参数使用的语言。如未定义,将使用应用的代码语言。
fileMap在
PhpMessageSource使用时定义指定在
\Yii::t()第一个参数的消息类别如何映射到文件。该例中我们定义了两个类别
app和
app/error。
依靠
BasePath/messages/LanguageID/CategoryName.php这样约定好的翻译文件格式可省略配置
fileMap。
命名占位符
可以添加参数到翻译消息,翻译后这些参数将被对应的值替换。格式是使用大括号包围参数名,如下所示:位置占位符
高级占位符格式
要使用高级功能需要安装和启用intl PHP 扩展。安装并启用这个扩展后就能够对占位符使用扩展语法。可以是默认设置的缩写形式
{placeholderName, argumentType},也可以是允许指定格式风格的完整形式
{placeholderName, argumentType, argumentStyle}。
完整参考请看available at ICU website。但它有点晦涩,我们在下面提供自己的参考。
数字
integer,
currency,
percent)的其中一个:
日期
short,
medium,
long,
full):
时间
short,
medium,
long,
full):
拼出
序数
期间
复数
不同语言的复数表现形式不同。有些规则非常复杂,所以非常方便,已提供的功能不需要指定转化规则。相反它只需要在指定的位置输入转化好的单词即可。在以上的复数规则参数,
=0指恰好等于零,
=1指恰好是一个,而
other是此外的所有数字。
#将用
n参数值替换。但不是所有语言都像英语这么简单,如俄语的例子:
=1精确匹配
n = 1但
one匹配
21或
101。
注意如果使用两次占位符,一次用来表示复数而另一处要用来表示数字,否则将会输出 "Inconsistent types declared for an argument: U_ARGUMENT_TYPE_MISMATCH" 错误:
选集
可以基于关键词挑选短语,这种例子的格式指定了怎样映射关键词到短信并提供了默认短语。在表达式中
female和
male都是可选值,而
other处理那些不匹配前两者的值。大括号内的字符串是子表达式所以可以是一个字符串也可以是字符串和占位符。
指定默认翻译
可以指定默认翻译作为回调函数用于某些不需要匹配其他翻译的类别。该翻译要用*标记。要做到这一点需要添加以下代码到配置文件(
yii2-basic应用的话是
web.php):
basePath)即
@app/messages下的文件加载:
@app/messages/<LanguageCode>/not_specified_category.php加载。
翻译小部件消息
对小部件也使用相同规则,如:fileMap设置,只要简单地遵循类别和同名文件的映射约定并直接使用
Menu::t('messages', 'new messages {messages}', ['{messages}' => 10])即可。
注意:小部件也可使用i18n视图,规则和它们应用在控制器上是一样的。
翻译框架消息
有时你想要为你的应用校正默认的框架消息翻译文件,可以如下配置i18n组件:
/path/to/my/message/files放入已调整过的翻译文件了。
视图
可以在视图使用i18n来支持不同语言。例如,给视图views/site/index.php创建俄语版本,就要在当前控制器/小部件的视图路径下创建
ru-RU文件夹并放入俄语版本的视图文件
views/site/ru-RU/index.php。
注意:如果指定的语言为
en-US且没有对应的视图, Yii 将在使用原始视图文件前查找
en下的视图文件。
i18n 格式器
i18n 格式器组件是格式器的本地化版本,支持基于当前时区的日期、时间和数字的格式化。要使用格式器须配置格式器应用组件如下:Yii::$app->formatter连接格式器了。
注意要使用i18n格式器先要安装和启用intl PHP 扩展。
要了解格式器方法请参考它的 API 文档:[[yii\i18n\Formatter]]。
相关文章推荐
- php 上传文件 cvs文件
- PHP面向对象知识总结
- H264 RTP封包原理(转载)
- 切莫让CDN缓存你的动态文件
- php中将12567890装化为1,234,567,890
- 将一个字符串(1234567890)转换成(1,234,567,890)每三个一组用逗号隔开
- 写一个方法,将一个字符串(1234567890)转换成(1,234,567,890)每三个一组用逗号隔开()
- laravel中邮件的发送以及model的使用
- Yii 2 load() 和 save()
- 6步实现laravel图片上传
- php+jq(plupload插件)+ajax多图上传并入库
- 5 个 Laravel Eloquent 小技巧
- InputStreamReader和OutputStreamWriter的用法
- PHP报错“Parse error: syntax error, unexpected T_VARIABLE”的解决办法
- PHP之双向链表(SplDoublyLinkedList)简介
- 配置云服务器 FTP 服务
- Snoopy.class.php
- 我的第一个thinkphp
- php 学习之对象
- laravel的模板中修改编辑的view表单form需要注意的问题