abcms/yii2-multilanguage

There is no license information available for the latest version (v0.4.0) of this package.

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

This package is auto-updated.

Last update: 2024-04-10 20:36:56 UTC


README

Features:

  • Add a language bar widget to your website
  • Translate models
  • Manage languages from database or configuration
  • Message translation CRUD

Install:

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

Enable multi-language support in your website:

1. Add language and sourceLanguage attributes to your config array.

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

2. Add multilanguage component

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

Add the component to the bootstrap array to allow it to read and set the language from cookies and URL:

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

3. Add custom URL manager:

This URL manager class will automatically add the language to each 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. Add a language switcher to the layout.

Using the language bar widget:

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

or manually:

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

Enable translation for your models and CRUDs:

1. Migration:

1- Add the migration namespaces in the console.php configuration:

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

2- Run ./yii migrate

You can use abcms/yii2-generators to generate a custom model and CRUD or continue with the manual steps below.

2. Add model behavior:

Add the multi-language behavior and specify which attributes can be translated and the type for each field. If the field type is not specified, text input will be used by default.

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

3. Add translation form in the admin panel:

Add in _form.php:

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

4. Add translation detail view in the admin panel:

Add in view.php:

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

5. Enable automatic translation saving in the controller

Add in Controller create and update actions:

$model->automaticTranslationSaving = true;

How to get translated content?

Get a single model translation for the current language:

$translatedModel = $model->translate();

Get multiple models translation for the current language:

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