umbalaconmeogia/yii2-i18nui

GUI for editing i18n translation in database

Installs: 147

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Type:yii2-extension

v1.2.4 2021-04-11 14:09 UTC

This package is auto-updated.

Last update: 2024-04-11 20:43:10 UTC


README

For more about internationalization in yii2, see the guide.

This is inspired by wokster/yii2-translation-manage.

Edit composer.json

Run

composer require umbalaconmeogia/yii2-i18nui

or add "umbalaconmeogia/yii2-i18nui": "*" to composer.json then run composer update

Edit config

Add to modules in config

'modules' => [
    'i18nui' => [
        'class' => 'umbalaconmeogia\i18nui\Module',
        'languages' => ['en', 'ja', 'vi'], // Any languages that you want to use
    ],
    // Other stuffs
],

Config i18n like:

'components' => [
    'i18n' => [
        'translations' => [
            'yii*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@vendor/yiisoft/yii2/messages',
                'sourceLanguage' => 'en'
            ],
            'app' => [
                'class' => 'yii\i18n\DbMessageSource',
                'forceTranslation' => true,
                //'enableCaching' => false,
                //'cachingDuration' => 3600,
            ],
        ],
    ],
    // Other stuffs
],

Run yii2 migration

To add database tables to store i18n data, run migration

php yii migrate --migrationPath=@yii/i18n/migrations/

Access to translation manager

https://<your domain>/?r=i18nui

Select language

This module contains some function to set language for your yii2 application.

  1. To change language, add the config below into your web config (config/web.php or frontend/config/main.php)
  return [
      'bootstrap' => [
          [
              'class' => 'umbalaconmeogia\i18nui\components\LanguageSelector',
              'supportedLanguages' => ['vi', 'ja'],
          ],
          // Other stuffs.
      ],
  ],
  1. To add link to change config, use /i18nui/default/set-language. For example, add to menu
  $languages = [
      'vi' => 'Tiếng Việt',
      'ja' => '日本語',
  ];
  $callbackUrl = Yii::$app->request->getAbsoluteUrl();

  foreach ($languages as $langCode => $langName) {
      $menuItems[] = [
          'label' => $langName,
          'url' => Url::to(['/i18nui/default/set-language',
          'language' => $langCode, 'callbackUrl' => $callbackUrl]),
      ];
  }

Import message data from CSV

To import i18n data from CSV, run command

php yii i18nui/import/csv i18n.csv

while i18n.csv is created as bellow (the first row is the header, with the first key is category, the second key is message, follow by language codes)

category message ja vi
app house nhà
app home 家庭 gia đình

Add language related menu items

Add menu items as sub-menu

Add language related menu as sub menu items on menu bar.

language sub menu

    $languageMenuItems = [];
    $languageMenuItems[] = ['label' => Yii::t('app', 'Translation manager'), 'url' => ['/i18nui']];

    $languages = [
        'vi' => 'Tiếng Việt',
        'ja' => '日本語',
    ];
    $callbackUrl = Yii::$app->request->getAbsoluteUrl();

    foreach ($languages as $langCode => $langName) {
        $languageMenuItems[] = ['label' => $langName, 'url' => Url::to(['/i18nui/default/set-language', 'language' => $langCode, 'callbackUrl' => $callbackUrl])];
    }

    $menuItems[] = [
        'label' => Yii::t('app', 'Language'),
        'items' => $languageMenuItems,
    ];

Add menu items as sub-sub-menu

Add language related menu as an item of sub menu on menu bar.

Use kartik-v/yii2-nav-x to display sub-sub-menu easily.

language sub sub menu

    $languageMenuItems = [];
    $languageMenuItems[] = ['label' => Yii::t('app', 'Translation manager'), 'url' => ['/i18nui']];

    $languages = [
        'vi' => 'Tiếng Việt',
        'ja' => '日本語',
    ];
    $callbackUrl = Yii::$app->request->getAbsoluteUrl();

    foreach ($languages as $langCode => $langName) {
        $languageMenuItems[] = ['label' => $langName, 'url' => Url::to(['/i18nui/default/set-language', 'language' => $langCode, 'callbackUrl' => $callbackUrl])];
    }
    $adminMenuItems[] = [
        'label' => Yii::t('app', 'Language'),
        'items' => $languageMenuItems,
    ];

    $menuItems[] = [
        'label' => Yii::t('app', 'Admin'),
        'items' => $adminMenuItems,
    ];
    // Other stuffs

    echo NavX::widget([
        // 'options' => ['class' => 'ml-3 navbar-nav navbar-left'],
        'options' => ['class' => 'navbar-nav navbar-right'],
        'encodeLabels' => FALSE,
        'items' => $menuItems,
    ]);

Use another Message, SourceMessage classes

If you want to use your own Message, SourceMessage classes, define them and declared in configuration of i18nui.

For example.

Config

    'modules' => [
        'i18nui' => [
            'class' => 'umbalaconmeogia\i18nui\Module',
            'languages' => ['ja', 'vi'], // Any languages that you want to use
            'modelMessageClass' => 'frontend\models\NewMessage',
        ],
    ],

Class frontent\models\NewMessage

namespace frontend\models;
class NewMessage extends \umbalaconmeogia\i18nui\models\Message
{
    public function afterSave($insert, $changedAttributes)
    {
        parent::afterSave($insert, $changedAttributes);

        \Yii::trace('New afterSave', __METHOD__);
    }
}