当前位置:K88软件开发文章中心网站服务器框架Yii 2.0 → 文章内容

国际化(Internationalization)

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:29:58

, 'Price: {0, number, currency}', $price);注意:参数的格式化需要安装?intl PHP 扩展。可以使用缩写的形式或完整的形式来格式化占位符:short form: {PlaceholderName, ParameterType}full form: {PlaceholderName, ParameterType, ParameterStyle}请参阅?ICU 文档?关于如何指定这样的占位符的说明。接下来我们会展示一些常用的使用方法。数字参数值应该被格式化为一个数。例如,$sum = 42;echo \Yii::t('app', 'Balance: {0, number}', $sum);你可以指定参数的格式为?integer(整型),currency?(货币),或者?percent?(百分数):$sum = 42;echo \Yii::t('app', 'Balance: {0, number, currency}', $sum);你也可以指定一个自定义模式来格式化数字。 例如,$sum = 42;echo \Yii::t('app', 'Balance: {0, number, ,000,000000}', $sum);格式化参考。日期该参数值应该被格式化为一个日期。 例如,echo \Yii::t('app', 'Today is {0, date}', time());你可以指定一个可选的参数格式?short?,medium?,long?,或?full?:echo \Yii::t('app', 'Today is {0, date, short}', time());你还可以指定一个自定义模式来格式化日期:echo \Yii::t('app', 'Today is {0, date, yyyy-MM-dd}', time());格式化参考。时间参数值应该被格式化为一个时间。 例如,echo \Yii::t('app', 'It is {0, time}', time());你可以指定一个可选的参数格式?short?,medium?,long?,或?full?:echo \Yii::t('app', 'It is {0, time, short}', time());你还可以指定一个自定义模式来格式化时间:echo \Yii::t('app', 'It is {0, date, HH:mm}', time());格式化参考。拼写参数值为一个数并被格式化为它的字母拼写形式。 例如,// 输出:"42 is spelled as forty-two"echo \Yii::t('app', '{n,number} is spelled as {n, spellout}', ['n' => 42]);序数词参数值为一个数并被格式化为一个序数词。 例如,// 输出:"You are the 42nd visitor here!"echo \Yii::t('app', 'You are the {n, ordinal} visitor here!', ['n' => 42]);持续时间参数值为秒数并被格式化为持续的时间段。 例如,// 输出:"You are here for 47 sec. already!"echo \Yii::t('app', 'You are here for {n, duration} already!', ['n' => 47]);复数不同的语言有不同的方式来表示复数。 Yii 提供一个便捷的途径,即使是非常复杂的规则也使翻译消息时不同的复数形式行之有效。 取之以直接处理词形变化规则,它是足以面对某些词形变化语言的翻译。 例如,// 当 $n = 0 时,输出:"There are no cats!"// 当 $n = 1 时,输出:"There is one cat!"// 当 $n = 42 时,输出:"There are 42 cats!"echo \Yii::t('app', 'There {n, plural, =0{are no cats} =1{is one cat} other{are # cats}}!', ['n' => $n]);在上面的多个规则的参数中,?=0?意味着?n?的值是 0 ,=1?意味着?n?的值是 1 , 而?other?则是对于其它值,?#?会被?n?中的值给替代。复数形式可以是某些非常复杂的语言。下面以俄罗斯为例,=1?完全匹配?n = 1,而?one?匹配?21?或?101:Здесь {n, plural, =0{котов нет} =1{есть один кот} one{# кот} few{# кота} many{# котов} other{# кота}}!注意,上述信息主要是作为一个翻译的信息,而不是一个原始消息,除非设置应用程序的 yii\base\Application::$sourceLanguage 为ru-RU。如果没有找到一个翻译的原始消息,复数规则 yii\base\Application::$sourceLanguage 将被应用到原始消息。要了解词形变化形式,你应该指定一个特定的语言,请参考?rules reference at unicode.org。选择可以使用?select?参数类型来选择基于参数值的短语。例如,// 输出:"Snoopy is a dog and it loves Yii!"echo \Yii::t('app', '{name} is a {gender} and {gender, select, female{she} male{he} other{it}} loves Yii!', [ 'name' => 'Snoopy', 'gender' => 'dog',]);在上面的表达中,?female?和?male?是可能的参数值,而?other?用于处理不与它们中任何一个相匹配的值。对于每一个可能的参数值, 应指定一个短语并把它放在在一对大括号中。指定默认翻译你可以指定使用默认的翻译,该翻译将作为一个类别,用于不匹配任何其他翻译的后备。这种翻译应标有?*?。 为了做到这一点以下内容需要添加到应用程序的配置://配置 i18n 组件'i18n' => [ 'translations' => [ '*' => [ 'class' => 'yii\i18n\PhpMessageSource' ], ],],现在,你可以使用每一个还没有配置的类别,这跟 Yii 1.1 的行为有点类似。该类别的消息将来自在默认翻译?basePath?中的一个文件, 该文件在?@app/messages?:echo Yii::t('not_specified_category', 'message from unspecified category');该消息将来自?@app/messages/<LanguageCode>/not_specified_category.php?。翻译模块消息如果你想翻译一个模块的消息,并避免使用单一翻译文件的所有信息,你可以按照下面的方式来翻译:<?phpnamespace app\modules\users;use Yii;class Module extends \yii\base\Module{ public $controllerNamespace = 'app\modules\users\controllers'; public function init() { parent::init(); $this->registerTranslations(); } public function registerTranslations() { Yii::$app->i18n->translations['modules/users/*'] = [ 'class' => 'yii\i18n\PhpMessageSource', 'sourceLanguage' => 'en-US', 'basePath' => '@app/modules/users/messages', 'fileMap' => [ 'modules/users/validation' => 'validation.php', 'modules/users/form' => 'form.php', ... ], ]; } public static function t($category, $message, $params = [], $language = null) { return Yii::t('modules/users/' . $category, $message, $params, $language); }}在上面的例子中,我们使用通配符匹配,然后过滤了所需的文件中的每个类别。取之使用?fileMap?,你可以简单地使用类映射的同名

上一页  [1] [2] [3] [4]  下一页


国际化(Internationalization)