abcms / yii2-multilanguage
该软件包最新版本(v0.4.0)没有提供许可信息。
v0.4.0
2020-02-24 21:45 UTC
Requires
- yiisoft/yii2: *
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);