umbalaconmeogia / yii2-i18nui
GUI for editing i18n translation in database
Installs: 170
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Type:yii2-extension
Requires
- umbalaconmeogia/yii2-batsg: *
- yiisoft/yii2: >=2.0.6
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.
- 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. ], ],
- 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.
$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.
$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__); } }