tonchik-tm / yii2-translate-manager
在线翻译
Requires
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