ale10257/yii2-simple-translate-module

安装: 64

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:yii2-extension

dev-master 2018-12-17 02:24 UTC

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