devgroup / yii2-polyglot
为AirBnB Polyglot.js提供的Yii2集成
Requires
- bower-asset/polyglot: ^0.4.3
- yiisoft/yii2: ^2.0.6
This package is auto-updated.
Last update: 2024-09-11 14:10:59 UTC
README
Polyglot.js 是来自Airbnb的一个小巧且强大的JavaScript国际化库。
这是一个yii2-extension,它可以帮助您将polyglot.js集成到您的yii2应用程序中。
使用方法
首先通过composer安装扩展
php composer.phar require --prefer-dist devgroup/yii2-polyglot
创建一个目录,您将在这里放置您的翻译js文件。例如,如果我们的应用程序基于yii2-app-advanced,则创建目录 common/polyglot.js/
。
现在,在这个目录下创建您的js翻译文件。命名格式为 common/polyglot.js/%LANGUAGE%.js
,其中 %LANGUAGE%
是您的 Yii::$app->language
,例如 common/polyglot.js/ru-RU.js
。
js文件内容的一个示例(英文版本文件 common/polyglot.js/en-US.js
)
polyglot.extend({ "nav": { "hello": "Hello", "hello_name": "Hello, %{name}", "sidebar": { "welcome": "Welcome" } } });
以及俄语版本文件的一个示例 common/polyglot.js/ru-RU.js
polyglot.extend({ "nav": { "hello": "Привет", "hello_name": "Привет, %{name}", "sidebar": { "welcome": "Бобро пожаловать" } } });
现在,将特殊的yii2应用程序参数 PolyglotTranslationPath
与您的js翻译路径作为值添加到您的配置文件中(例如,common/config/params.php
)
<?php return [ 'adminEmail' => '[email protected]', 'supportEmail' => '[email protected]', 'user.passwordResetTokenExpire' => 3600, /** * This is a path where your js translation files are stored * You can use yii2 aliases here(@app, @common, etc.) */ 'PolyglotTranslationPath' => '@common/polyglot.js' ];
最后一件事是在您的布局视图中注册 CurrentTranslation
或将其添加为AssetBundle依赖项。
要将 CurrentTranslation
添加到您的视图,只需在 views/layouts/main.php
中靠近您的 AppAsset::register
调用处添加一行即可
DevGroup\Polyglot\CurrentTranslation::register($this);
要将 CurrentTranslation
作为依赖项添加到您的 AppAssetBundle
,修改您的 assets/AppAsset.php
<?php namespace frontend\assets; use yii\web\AssetBundle; class AppAsset extends AssetBundle { public $sourcePath = '@frontend/assets/dist/'; public $css = [ 'styles/main.min.css', ]; public $js = [ 'scripts/main.js', ]; public $depends = [ 'yii\web\JqueryAsset', 'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset', 'yii\bootstrap\BootstrapPluginAsset', /// !!! This is a dependency to CurrentTranslation !!! 'DevGroup\Polyglot\CurrentTranslation', ]; }
就这样。现在,在每个请求中,您将得到
- Polyglot.js 将包含在您的HTML的HEAD部分
- 全局
polyglot
变量将使用当前区域设置(Yii::$app->language
)初始化。 - 基于应用程序语言的翻译文件将动态添加到
<body>
标签之后。
现在,您可以使用 Polyglot.js
,正如它在 官方文档 中所描述的那样。
polyglot.t("nav.sidebar.welcome"); => "Бобро пожаловать"