ale10257 / yii2-simple-translate-module
Requires
- phpoffice/phpspreadsheet: ^1.5
- yiisoft/yii2: ~2.0.0
This package is not auto-updated.
Last update: 2024-10-01 06:29:40 UTC
README
模块创建目的:学习如何快速保存必要的术语。
例如,网站应该有两种语言 - ru 和 de。在需要的地方写入必要的术语,例如
TService::t('Крокодилы летят на север')
需要该函数首次调用时,术语 '鳄鱼飞向北方' 自动 记录到数据库和缓存中。
创建、删除、更新术语时,缓存应被重写。所有术语都应从应用程序缓存中获取。
还需要生成术语 Excel 文件供翻译人员使用,并将其上传到服务器
安装
composer require ale10257/yii2-simple-translate-module "@dev"
存储术语的表字段命名约定
安装语言/区域的标准格式:ll-CC,其中 ll 是 ISO-639 标准下的双字母或三字母语言代码(小写),CC 是 ISO-3166 标准下的国家代码。
例如,en-US,ru-Ru ...
在 Yii2 中,还允许声明如下形式的区域:ru,de,en ...
注意:存储术语的表字段必须符合 PHP 变量声明规则和区域声明规则(不带连字符)。
即,如果在应用程序配置文件中声明了区域 en-US,则字段应命名为 enUS,如果 ru,则 ru。大小写错误是禁止的。
配置配置文件
<?php
...
$languages = [
'Русский' => 'ru',
'Deutsch' => 'de',
];
$sourceLanguage = $languages['Русский'];
$basePath = dirname(__DIR__);
$config = [
...
'basePath' => $basePath,
'language' => $sourceLanguage,
'sourceLanguage' => $sourceLanguage,
...
'components' => [
...
'ale10257Translate' => [
'class' => 'ale10257\translate\ConfigTranslate',
'languages' => $languages,
// ключ кеша может быть любым
'cacheKey' => 'ale10257_translate',
// необязательная настройка tService, можно не передавать
'tService' => [
'nameSpace' => 'app\components\translate',
'path' => $basePath . '/components/translate',
]
],
...
],
'modules' => [
...
// название модуля может быть любым в рамках соглашений Yii2 о наименовании модулей
'translate' => [
'class' => 'ale10257\translate\Translate',
'as access' => [
'class' => 'yii\filters\AccessControl',
'rules' => [
[
'allow' => true,
'roles' => ['@'],
],
],
],
],
...
],
];
根据 $languages
中声明的区域和上述约定创建迁移。
php yii migrate/create create_ale10257_translate_table --fields=ru:text,de:text
应用迁移
php yii migrate
配置完成后,模块可通过以下地址访问
Url::to('/' . your-name-translate-module);
可以生成“实时”术语,处理 Excel 文件。要生成术语,请在所需文件中连接 ale10257\translate\models\TService 类,并调用其静态方法 t
<?php
/**
* @var $this \yii\web\View
*/
use ale10257\translate\models\TService;
echo TService::t('Крокодилы летят на север');
与 Yii2 标准本地化一样,可以在 t()
方法中传递参数,例如
<?php
/**
* @var $this \yii\web\View
*/
use ale10257\translate\models\TService;
echo TService::t( 'Крокодил летит на {path}', ['path' => 'хутор']);
如果您不想每次都输入长术语,并且为了防止输入长术语时的错误,可以为已注册的术语组织自动完成(已在 PhpStorm 中验证)
为此,需要在配置应用程序的 ale10257Translate
组件时正确设置 tService
字段,例如
$basePath = dirname(__DIR__);
...
'components' => [
'ale10257Translate' => [
'class' => 'ale10257\translate\ConfigTranslate',
'languages' => $languages,
'cacheKey' => 'ale10257_translate',
'tService' => [
'nameSpace' => 'app\components\translate',
'path' => $basePath . '/components/translate',
]
],
],
...
其意义在于,每次更新术语缓存时,模块 ale10257\translate\Translate
都会在设置的路径(path
)中生成工作类 TService
,并在指定的命名空间('nameSpace' => 'app\components\translate'
)中编写数据,以便自动完成(在静态字段 $term
中)。
目录路径和命名空间应符合 PSR-4 标准。在提供的示例中,新的 TService
类将位于以下路径
path-your-application/components/translate
注册的命名空间
app\components\translate
完成这些设置后,不建议 在实时中声明术语!
在浏览器中进入 ale10257\translate\Translate 模块
Url::to('/' . your-name-translate-module);
- 显式创建术语,例如 '长颈鹿飞向南方'
- 在需要的地方连接新的
TService
类,并使用静态字段$term
调用其静态方法t()
例如
<?php
use app\components\translate\TService;
echo TService::t(TService::$terms['Жирафы летят на юг']);
当输入 TService::t(TService::$terms['Ж'])
时,将显示自动完成“长颈鹿飞向南方”(在模块配置正确的情况下)。
如何添加区域
在配置文件 $languages
中添加所需区域,例如
$languages = [
'Русский' => 'ru',
'Deutsch' => 'de',
'English' => 'en-Us',
];
以某种方式将文本字段添加到 ale10257_translate
表中,在本例中为 enUS,例如
ALTER TABLE `ale10257_translate`
ADD `enUS` text NULL;
必须重置应用程序缓存,例如
php yii cache/flush-all