tonchik-tm/yii2-translate-manager

此包已被弃用且不再维护。未建议替代包。

在线翻译

安装: 37

依赖: 0

建议者: 0

安全: 0

星星: 2

关注者: 1

分支: 77

公开问题: 0

类型:yii2-extension

1.5.5 2016-01-11 09:17 UTC

README

在线翻译

简介

此模块为项目的多语言元素提供简单的翻译界面。它可以自动检测新的语言元素(项目扫描)。在项目扫描过程中自动过滤重复项。可以一键从数据库中删除未使用的语言元素(数据库优化),并可以导入和导出翻译。还可以翻译客户端消息(存储在JavaScript文件中的消息),因为项目扫描还会收集要翻译的JavaScript文件中的语言元素。

它还允许您在不登录翻译界面的情况下翻译客户端上的文本(在实时网页上)。(前端翻译)。

在服务器端,它可以处理数据库或一维/多维数组元素以及Yii::t函数。您可以排除文件、文件夹或类别以防止它们被翻译。

安装

安装此扩展的首选方式是通过 composer

运行以下命令

php composer.phar require --prefer-dist lajax/yii2-translate-manager "1.*"

"lajax/yii2-translate-manager": "1.*"

将以下内容添加到您的 composer.json 文件的 require 部分。

###迁移

在终端中运行以下命令进行数据库迁移

Linux/Unix

yii migrate/up --migrationPath=@vendor/lajax/yii2-translate-manager/migrations

Windows

yii.bat migrate/up --migrationPath=@vendor/lajax/yii2-translate-manager/migrations

###配置

以下是一个简单的示例,用于开启 Yii 数据库多语言。

'language' => 'en-US',
'components' => [
    'i18n' => [
        'translations' => [
            '*' => [
                'class' => 'yii\i18n\DbMessageSource',
                'db' => 'db',
                'sourceLanguage' => 'xx-XX', // Developer language
                'sourceMessageTable' => '{{%language_source}}',
                'messageTable' => '{{%language_translate}}',
                'cachingDuration' => 86400,
                'enableCaching' => true,
            ],
        ],
    ],
],

开启 TranslateManager 模块

简单示例

'modules' => [
    'translatemanager' => [
        'class' => 'lajax\translatemanager\Module',
    ],
],

以下是一个更复杂的示例,包括支持多语言的数据表

'modules' => [
    'translatemanager' => [
        'class' => 'lajax\translatemanager\Module',
        'root' => '@app',               // The root directory of the project scan.
        'layout' => 'language',         // Name of the used layout. If using own layout use 'null'.
        'allowedIPs' => ['127.0.0.1'],  // IP addresses from which the translation interface is accessible.
        'roles' => ['@'],               // For setting access levels to the translating interface.
        'tmpDir' => '@runtime',         // Writable directory for the client-side temporary language files. 
                                        // IMPORTANT: must be identical for all applications (the AssetsManager serves the JavaScript files containing language elements from this directory).
        'phpTranslators' => ['::t'],    // list of the php function for translating messages.
        'jsTranslators' => ['lajax.t'], // list of the js function for translating messages.
        'patterns' => ['*.js', '*.php'],// list of file extensions that contain language elements.
        'ignoredCategories' => ['yii'], // these categories won't be included in the language database.
        'ignoredItems' => ['config'],   // these files will not be processed.
        'scanTimeLimit' => null,        // increase to prevent "Maximum execution time" errors, if null the default max_execution_time will be used
        'searchEmptyCommand' => '!',    // the search string to enter in the 'Translation' search field to find not yet translated items, set to null to disable this feature
        'defaultExportStatus' => 1,     // the default selection of languages to export, set to 0 to select all languages by default
        'defaultExportFormat' => 'json',// the default format for export, can be 'json' or 'xml'
        'tables' => [                   // Properties of individual tables
            [
                'connection' => 'db',   // connection identifier
                'table' => '{{%language}}',         // table name
                'columns' => ['name', 'name_ascii'],// names of multilingual fields
                'category' => 'database-table-name',// the category is the database table name
                'categoryPrefix' => 'lx-'           // 
            ]
        ]
    ],
],

重要:如果您想修改角色值(换句话说,开始使用用户角色),您需要在 common 配置中启用 authManager。

使用 authManager

示例

PhpManager

'components' => [
    'authManager' => [
        'class' => 'yii\rbac\PhpManager',
    ],
    // ...
],

DbManager

'components' => [
    'authManager' => [
        'class' => 'yii\rbac\DbManager',
    ],
    // ...
],

前端翻译

'bootstrap' => ['translatemanager'],
'component' => [
    'translatemanager' => [
        'class' => 'lajax\translatemanager\Component'
    ]
]

用法

###注册客户端脚本

要翻译 JavaScript 文件中的静态消息,需要注册文件。

要注册您的脚本,请在每个操作中调用以下方法

\lajax\translatemanager\helpers\Language::registerAssets();

以下是在每次页面加载时调用上述方法的简单示例

namespace common\controllers;

use lajax\translatemanager\helpers\Language;

// IMPORTANT: all Controllers must originate from this Controller!
class Controller extends \yii\web\Controller {

    public function init() {
        Language::registerAssets();
        parent::init();
    }
}

###ToggleTranslate 按钮

以下是一个简单的示例,用于显示用于切换前端翻译模式的按钮。(按钮仅对具有翻译必要权限的用户显示!)

\lajax\translatemanager\widgets\ToggleTranslate::widget();

以下是一个更复杂的示例,用于显示按钮

\lajax\translatemanager\widgets\ToggleTranslate::widget([
 'position' => \lajax\translatemanager\widgets\ToggleTranslate::POSITION_TOP_RIGHT,
 'template' => '<a href="javascript:void(0);" id="toggle-translate" class="{position}" data-language="{language}" data-url="{url}"><i></i> {text}</a><div id="translate-manager-div"></div>',
 'frontendTranslationAsset' => 'lajax\translatemanager\bundles\FrontendTranslationAsset',
 'frontendTranslationPluginAsset' => 'lajax\translatemanager\bundles\FrontendTranslationPluginAsset',
]);

###在源代码中放置多语言元素。

JavaScript

lajax.t('Apple');
lajax.t('Hello {name}!', {name:'World'});
lajax.t("Don't be so upset.");

PHP 方法

Yii::t('category', 'Apple');
Yii::t('category', 'Hello {name}!', ['name' => 'World']);
Yii::t('category', "Don't be so upset.");

PHP 前端翻译函数

use lajax\translatemanager\helpers\Language as Lx;

Lx::t('category', 'Apple');
Lx::t('category', 'Hello {name}!', ['name' => 'World']);
Lx::t('category', "Don't be so upset.");

PHP 数组

/**
 * @translate
 */
private $_STATUSES = [
    self::STATUS_INACTIVE => 'Inactive',
    self::STATUS_ACTIVE => 'Active',
    self::STATUS_DELETED => 'Deleted'
];

/**
 * Returning the 'status' array on the site's own language.
 * return array
 */
public function getStatuses() {
    return \lajax\translatemanager\helpers\Language::a($this->_STATUSES);
}

/**
 * @translate
 */
private $_GENDERS = ['Male', 'Female'];

/**
 * Returning the 'genders' array in German
 * return array
 */
public function getGenders() {
    return \lajax\translatemanager\helpers\Language::a($this->_GENDERS, 'de-DE');
}

PHP 数据库

namespace common\models;

use lajax\translatemanager\helpers\Language;

/**
 * This is the model class for table "category".
 *
 * @property string $category_id
 * @property string $name
 * @property string $description
 */
class Category extends \yii\db\ActiveRecord {

    // afterFind & beforeSave:

    /**
     * @var Returning the 'name' attribute on the site's own language.
     */
    public $name_t;

    /**
     * @var Returning the 'description' attribute on the site's own language.
     */
    public $description_t;

    ...

    public function afterFind() {
        $this->name_t = Language::d($this->name);
        $this->description_t = Language::d($this->descrioption);

        // or If the category is the database table name.
        // $this->name_t = Language::t(static::tableName(), $this->name);
        // $this->description_t = Language::t(static::tableName(), $this->descrioption);
        parent::afterFind();
    }

    public function beforeSave($insert) {
        if (parent::beforeSave($insert)) {
            Language::saveMessage($this->name);
            Language::saveMessage($this->description);

            return true;
        }

        return false;
    }

    // or GETTERS:

    /**
     * @return string Returning the 'name' attribute on the site's own language.
     */
    public function getName($params = [], $language = null) {
        return Language::d($this->name, $params, $language);

        // or If the category is the database table name.
        // return Language::t(static::tableName(), $this->name, $params, $language);
    }

    /**
     * @return string Returning the 'description' attribute on the site's own language.
     */
    public function getDescription($params = [], $language = null) {
        return Language::d($this->description, $params, $language);

        // or If the category is the database table name.
        // return Language::t(static::tableName(), $this->description, $params, $language);
    }
}

###URLs

翻译工具的 URL

/translatemanager/language/list         // List of languages and modifying their status
/translatemanager/language/create       // Create languages
/translatemanager/language/scan         // Scan the project for new multilingual elements
/translatemanager/language/optimizer    // Optimise the database

以下是将 Yii2 菜单实现到您自己的菜单中的示例。

$menuItems = [
    ['label' => Yii::t('language', 'Language'), 'items' => [
            ['label' => Yii::t('language', 'List of languages'), 'url' => ['/translatemanager/language/list']],
            ['label' => Yii::t('language', 'Create'), 'url' => ['/translatemanager/language/create']],
        ]
    ],
    ['label' => Yii::t('language', 'Scan'), 'url' => ['/translatemanager/language/scan']],
    ['label' => Yii::t('language', 'Optimize'), 'url' => ['/translatemanager/language/optimizer']],
    ['label' => Yii::t('language', 'Im-/Export'), 'items' => [
        ['label' => Yii::t('language', 'Import'), 'url' => ['/translatemanager/language/import']],
        ['label' => Yii::t('language', 'Export'), 'url' => ['/translatemanager/language/export']],
    ]
];

###控制台命令

注册命令

'controllerMap' => [
    'translate' => \lajax\translatemanager\commands\TranslatemanagerController::className()
],

使用 Yii CLI 使用它

./yii translate/scan
./yii translate/optimize

屏幕截图

### 语言列表 translate-manager-0 2-screen-1

### 扫描项目 translate-manager-0 2-screen-2

### 优化数据库 translate-manager-0 2-screen-3

### 在管理员界面翻译 translate-manager-0 2-screen-4

### 翻译模式下的前端 translate-manager-0 2-screen-6

### 前端翻译 translate-manager-0 2-screen-7

链接