devgroup/yii2-polyglot

为AirBnB Polyglot.js提供的Yii2集成

安装次数: 1,894

依赖项: 3

建议者: 0

安全: 0

星级: 4

关注者: 8

分支: 0

开放问题: 0

类型:yii2-extension

1.1.1 2015-12-08 09:49 UTC

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',
    ];
}

就这样。现在,在每个请求中,您将得到

  1. Polyglot.js 将包含在您的HTML的HEAD部分
  2. 全局 polyglot 变量将使用当前区域设置(Yii::$app->language)初始化。
  3. 基于应用程序语言的翻译文件将动态添加到 <body> 标签之后。

现在,您可以使用 Polyglot.js,正如它在 官方文档 中所描述的那样。

polyglot.t("nav.sidebar.welcome");
=> "Бобро пожаловать"