abcms/yii2-multilanguage

该软件包最新版本(v0.4.0)没有提供许可信息。

安装: 799

依赖关系: 2

建议者: 0

安全: 0

星级: 4

观察者: 2

分支: 3

开放问题: 1

类型:yii2-extension

v0.4.0 2020-02-24 21:45 UTC

This package is auto-updated.

Last update: 2024-09-10 21:34:10 UTC


README

特性

  • 将语言栏小部件添加到您的网站
  • 翻译模型
  • 从数据库或配置管理语言
  • 消息翻译 CRUD

安装

composer require abcms/yii2-library:dev-master
composer require abcms/yii2-multilanguage:dev-master

在您的网站上启用多语言支持

1. 将 language 和 sourceLanguage 属性添加到您的配置数组中。

$config = [
    ......
    'language' => 'en',
    'sourceLanguage' => 'en',
    ......
];

2. 添加多语言组件

[
    'components' => [
        ......
        'multilanguage' => [
            'class' => 'abcms\multilanguage\Multilanguage',
            'languages' => [
                'en' => 'English',
                'ar' => 'Arabic',
                'fr' => 'French',
            ],
        ],
    ],
]

将组件添加到 bootstrap 数组中,以允许它从 cookies 和 URL 中读取和设置语言

'bootstrap' => ['log', 'multilanguage'],

3. 添加自定义 URL 管理器

此 URL 管理器类将自动将语言添加到每个 URL 中。

'urlManager' => [
      'class' => abcms\multilanguage\UrlManager::className(),
      'enablePrettyUrl' => true,
      'showScriptName' => false,
      'rules' => [
          '<lang:([a-z]{2,3}(-[A-Z]{2})?)>/<controller>/<action>/' => '<controller>/<action>',
      ],
],

4. 在布局中添加语言切换器

使用语言栏小部件

<?= abcms\multilanguage\widgets\LanguageBar::widget() ?>

或手动

<a class="<?= (Yii::$app->language == 'en') ? 'active' : ''; ?>" href="<?= Url::current(['lang' => 'en']) ?>">En</a>

为您的模型和 CRUD 启用翻译

1. 迁移

1- 在 console.php 配置中添加迁移命名空间

'controllerMap' => [
    'migrate' => [
        'class' => 'yii\console\controllers\MigrateController',
        'migrationNamespaces' => [
            'abcms\library\migrations',
            'abcms\multilanguage\migrations',
        ],
    ],
],

2- 运行 ./yii migrate

您可以使用 abcms/yii2-generators 生成自定义模型和 CRUD,或继续以下手动步骤。

2. 添加模型行为

添加多语言行为,并指定哪些属性可以翻译以及每个字段的类型。如果未指定字段类型,则默认使用文本输入。

[
    'class' => \abcms\multilanguage\behaviors\ModelBehavior::className(),
    'attributes' => [
        'title',
        'description:text-area',
    ],
],

3. 在管理面板中添加翻译表单

在 _form.php 中添加

<?= \abcms\multilanguage\widgets\TranslationForm::widget(['model' => $model, 'form' => $form]) ?>

4. 在管理面板中添加翻译详情视图

在 view.php 中添加

<?=
\abcms\multilanguage\widgets\TranslationView::widget([
    'model' => $model,
])
?>

在控制器中启用自动保存翻译

在 Controller 的 create 和 update 动作中添加

$model->automaticTranslationSaving = true;

如何获取翻译内容?

获取当前语言的单个模型翻译

$translatedModel = $model->translate();

获取当前语言的多模型翻译

$translatedModels = Yii::$app->multilanguage->translateMultiple($models);