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

国际化(Internationalization)

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

文件。 现在你可以直接使用?Module::t('validation', 'your custom validation message')?或?Module::t('form', 'some form label')。翻译小部件消息上述模块的翻译规则也同样适用于小部件的翻译规则,例如:<?phpnamespace app\widgets\menu;use yii\base\Widget;use Yii;class Menu extends Widget{ public function init() { parent::init(); $this->registerTranslations(); } public function registerTranslations() { $i18n = Yii::$app->i18n; $i18n->translations['widgets/menu/*'] = [ 'class' => 'yii\i18n\PhpMessageSource', 'sourceLanguage' => 'en-US', 'basePath' => '@app/widgets/menu/messages', 'fileMap' => [ 'widgets/menu/messages' => 'messages.php', ], ]; } public function run() { echo $this->render('index'); } public static function t($category, $message, $params = [], $language = null) { return Yii::t('widgets/menu/' . $category, $message, $params, $language); }}你可以简单地使用类映射的同名文件而不是使用?fileMap?。现在你直接可以使用?Menu::t('messages', 'new messages {messages}', ['{messages}' => 10])?。提示: 对于小部件也可以使用 i18n 视图,并一样以控制器的规则来应用它们。翻译框架信息Yii 自带了一些默认的信息验证错误和其他一些字符串的翻译。这些信息都是在?yii?类别中。有时候你想纠正应用程序的默认信息翻译。 为了做到这一点,需配置?i18n?应用组件?如下:'i18n' => [ 'translations' => [ 'yii' => [ 'class' => 'yii\i18n\PhpMessageSource', 'sourceLanguage' => 'en-US', 'basePath' => '@app/messages' ], ],],现在可以把你修改过的翻译放在?@app/messages/<language>/yii.php。处理缺少的翻译如果翻译的消息在消息源文件里找不到,Yii 将直接显示该消息内容。这样一来当你的原始消息是一个有效的冗长的文字时会很方便。 然而,有时它是不能实现我们的需求。你可能需要执行一些自定义处理的情况,这时请求的翻译可能在消息翻译源文件找不到。 这可通过使用 yii\i18n\MessageSource::EVENT_MISSING_TRANSLATION - yii\i18n\MessageSource 的事件来完成。例如,你可能想要将所有缺失的翻译做一个明显的标记,这样它们就可以很容易地在页面中找到。 为此,你需要先设置一个事件处理程序。这可以在应用程序配置中进行:'components' => [ // ... 'i18n' => [ 'translations' => [ 'app*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'fileMap' => [ 'app' => 'app.php', 'app/error' => 'error.php', ], 'on missingTranslation' => ['app\components\TranslationEventHandler', 'handleMissingTranslation'] ], ], ],],现在,你需要实现自己的事件处理程序:<?phpnamespace app\components;use yii\i18n\MissingTranslationEvent;class TranslationEventHandler{ public static function handleMissingTranslation(MissingTranslationEvent $event) { $event->translatedMessage = "@MISSING: {$event->category}.{$event->message} FOR LANGUAGE {$event->language} @"; }}如果 yii\i18n\MissingTranslationEvent::translatedMessage 是由事件处理程序设置,它将显示翻译结果。注意:每个消息源会单独处理它缺少的翻译。如果是使用多个消息源,并希望他们把缺少的翻译以同样的方式来处理, 你应该给它们每一个消息源指定相应的事件处理程序。使用?message?命令翻译储存在 yii\i18n\PhpMessageSource,[[yii\i18n\GettextMessageSource|.po 文件] 或者 yii\i18n\DbMessageSource。 具体见类的附加选项。首先,你需要创建一个配置文件。确定应该保存在哪里,然后执行命令./yii message/config path/to/config.php打开创建的文件,并按照需求来调整参数。特别注意:languages: 代表你的应用程序应该被翻译成什么语言的一个数组;messagePath: 存储消息文件的路径,这应与配置中?i18n?的?basePath?参数一致。注意,这里不支持路径别名,它们必须是配置文件相对路径的位置一旦你做好了配置文件,你就可以使用命令提取消息./yii message path/to/config.php然后你会发现你的文件(如果你已经选择基于文件的翻译)在?messagePath?目录。视图的翻译有时你可能想要翻译一个完整的视图文件,而不是翻译单条文本消息。为了达到这一目的,只需简单的翻译视图并在它子目录下保存一个名称一样的目标语言文件。 例如,如果你想要翻译的视图文件为?views/site/index.php?且目标语言是?ru-RU,你可以将视图翻译并保存为?views/site/ru-RU/index.php。现在 每当你调用 yii\base\View::renderFile() 或任何其它方法 (如 yii\base\Controller::render()) 来渲染?views/site/index.php?视图, 它最终会使用所翻译的?views/site/ru-RU/index.php。注意:如果 yii\base\Application::$language 跟 yii\base\Application::$sourceLanguage 相同, 在翻译视图的存在下,将呈现原始视图。格式化日期和数字值在?格式化输出数据?一节可获取详细信息。设置 PHP 环境Yii 使用?PHP intl 扩展?来提供大多数 I18N 的功能, 如日期和数字格式的 yii\i18n\Formatter 类和消息格式的 yii\i18n\MessageFormatter 类。 当?intl?扩展没有安装时,两者会提供一个回调机制。然而,该回调机制只适用于目标语言是英语的情况下。 因此,当 I18N 对你来说必不可少时,强烈建议你安装?intl。PHP intl 扩展?是基于对于所有不同的语言环境提供格式化规则的?ICU库。 不同版本的 ICU 中可能会产生不同日期和数值格式的结果。为了确保你的网站在所有环境产生相同的结果,建议你安装与?intl?扩展相同的版本(和 ICU 同一版本)。要找出所使用的 PHP 是哪个版本的 ICU ,你可以运行下面的脚

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


国际化(Internationalization)