/** * Creates a new Language model. * If creation is successful, the browser will be redirected to the 'view' page. * @return mixed */ public function run() { $model = new Language(); if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) { Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return ActiveForm::validate($model); } else { if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->controller->redirect(['view', 'id' => $model->language_id]); } else { return $this->controller->render('create', ['model' => $model]); } } }
/** * Show import form and import the uploaded file if posted * @return string * @throws \Exception */ public function run() { $model = new ImportForm(); if (Yii::$app->request->isPost) { $model->importFile = UploadedFile::getInstance($model, 'importFile'); if ($model->validate()) { try { $result = $model->import(); $message = Yii::t('language', 'Successfully imported {fileName}', ['fileName' => $model->importFile->name]); $message .= "<br/>\n"; foreach ($result as $type => $typeResult) { $message .= "<br/>\n" . Yii::t('language', '{type}: {new} new, {updated} updated', ['type' => $type, 'new' => $typeResult['new'], 'updated' => $typeResult['updated']]); } $languageIds = Language::find()->select('language_id')->where(['status' => Language::STATUS_ACTIVE])->column(); foreach ($languageIds as $languageId) { $generator = new Generator($this->controller->module, $languageId); $generator->run(); } Yii::$app->getSession()->setFlash('success', $message); } catch (\Exception $e) { if (YII_DEBUG) { throw $e; } else { Yii::$app->getSession()->setFlash('danger', str_replace("\n", "<br/>\n", $e->getMessage())); } } } } return $this->controller->render('import', ['model' => $model]); }
/** * Finds the Language model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param string $id * @return Language the loaded model * @throws NotFoundHttpException if the model cannot be found */ public function findModel($id) { if (($model = \lajax\translatemanager\models\Language::findOne($id)) !== null) { return $model; } else { throw new \yii\web\NotFoundHttpException('The requested page does not exist.'); } }
/** * @return Array[] Generate a two dimensional array of the translation data for the exportLanguages: * * ~~~ * [ * 'languages' => [], * 'languageSources' => [], * 'languageTranslations' => [], * ] * ~~~ * */ public function getExportData() { $languages = Language::findAll($this->exportLanguages); $languageSources = LanguageSource::find()->all(); $languageTranslations = LanguageTranslate::findAll(['language' => $this->exportLanguages]); $data = ['languages' => $languages, 'languageSources' => $languageSources, 'languageTranslations' => $languageTranslations]; return $data; }
/** * @throw yii\base\UnknownClassException * @return mixed */ private function _loadLanguages() { $array = []; UrlManager::checkDependency('\\lajax\\translatemanager\\models\\Language', 'lajax/yii2-translate-manager', ""); $model = Language::getLanguages(true, true); foreach ($model as $language) { $array[$language['language']] = $language['language_id']; } return $array; }
/** * @param array $params Search conditions. * @return ActiveDataProvider */ public function search($params) { $query = Language::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } $query->andFilterWhere(['status' => $this->status]); $query->andFilterWhere(['like', 'lower(language_id)', mb_strtolower($this->language_id, 'UTF-8')])->andFilterWhere(['like', 'lower(language)', mb_strtolower($this->language, 'UTF-8')])->andFilterWhere(['like', 'lower(country)', mb_strtolower($this->country, 'UTF-8')])->andFilterWhere(['like', 'lower(name)', mb_strtolower($this->name, 'UTF-8')])->andFilterWhere(['like', 'lower(name_ascii)', mb_strtolower($this->name_ascii, 'UTF-8')]); return $dataProvider; }
/** * @param array $params Search conditions. * @return ActiveDataProvider */ public function search($params) { $query = Language::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } $query->andFilterWhere(['status' => $this->status]); $query->andFilterWhere(['like', 'language_id', $this->language_id])->andFilterWhere(['like', 'language', $this->language])->andFilterWhere(['like', 'country', $this->country])->andFilterWhere(['like', 'name', $this->name])->andFilterWhere(['like', 'name_ascii', $this->name_ascii]); return $dataProvider; }
/** * Modifying the state of language. * @return Json */ public function run() { Yii::$app->response->format = Response::FORMAT_JSON; $language = Language::findOne(Yii::$app->request->post('language_id', '')); if ($language !== null) { $language->status = Yii::$app->request->post('status', Language::STATUS_BETA); if ($language->validate()) { $language->save(); } } return $language->getErrors(); }
public function init() { parent::init(); $this->js = []; $this->sourcePath = \Yii::$app->getModule('translatemanager')->getLanguageItemsDirPath(); $langs = \lajax\translatemanager\models\Language::findAll(['status' => \lajax\translatemanager\models\Language::STATUS_ACTIVE]); foreach ($langs as $key => $lang) { if (file_exists(\Yii::getAlias($this->sourcePath . $lang->language_id . '.js'))) { $this->js[] = $lang->language_id . '.js'; } } }
/** * Creating JavaScript language file in current language. */ private function _generateJSFile() { $this->_loadLanguageItems(); $data = []; foreach ($this->_languageItems as $language_item) { $data[md5($language_item->message)] = $language_item->languageTranslate->translation; } $langs = \lajax\translatemanager\models\Language::findAll(['status' => \lajax\translatemanager\models\Language::STATUS_ACTIVE]); foreach ($langs as $key => $lang) { $filename = $this->_basePath . '/' . $lang->language_id . '.js'; $file_contents = str_replace('{language_items}', Json::encode($data), $this->_template); $file_contents = str_replace('{language_id}', $lang->language_id, $file_contents); if (!$key) { //first file should contain `language` var with current language Id $file_contents .= 'var language = "' . $this->_languageId . '"'; } file_put_contents($filename, $file_contents); } }
<?php /** * @author Lajos Molnár <*****@*****.**> * @since 1.0 */ use yii\grid\GridView; use yii\helpers\Html; use lajax\translatemanager\models\Language; use yii\widgets\Pjax; /* @var $this \yii\web\View */ /* @var $dataProvider yii\data\ActiveDataProvider */ /* @var $searchModel lajax\translatemanager\models\searches\LanguageSearch */ $this->title = Yii::t('language', 'List of languages'); $this->params['breadcrumbs'][] = $this->title; ?> <div id="languages"> <?php Pjax::begin(['id' => 'languages']); echo GridView::widget(['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [['class' => 'yii\\grid\\SerialColumn'], 'language_id', 'name_ascii', ['format' => 'raw', 'filter' => Language::getStatusNames(), 'attribute' => 'status', 'filterInputOptions' => ['class' => 'form-control', 'id' => 'status'], 'label' => Yii::t('language', 'Status'), 'content' => function ($language) { return Html::activeDropDownList($language, 'status', Language::getStatusNames(), ['class' => 'status', 'id' => $language->language_id, 'data-url' => Yii::$app->urlManager->createUrl('/translatemanager/language/change-status')]); }], ['format' => 'raw', 'attribute' => Yii::t('language', 'Statistic'), 'content' => function ($language) { return '<span class="statistic"><span style="width:' . $language->gridStatistic . '%"></span><i>' . $language->gridStatistic . '%</i></span>'; }], ['class' => 'yii\\grid\\ActionColumn', 'template' => '{view} {update} {translate} {delete}', 'buttons' => ['translate' => function ($url, $model, $key) { return Html::a('<span class="glyphicon glyphicon-list-alt"></span>', ['language/translate', 'language_id' => $model->language_id], ['title' => Yii::t('language', 'Translate'), 'data-pjax' => '0']); }]]]]); Pjax::end(); ?> </div>
use yii\helpers\Html; use yii\web\Response; /* @var $this yii\web\View */ /* @var $model ExportForm */ $this->title = Yii::t('language', 'Export'); $this->params['breadcrumbs'][] = $this->title; ?> <div class="language-export col-sm-6"> <?php $form = ActiveForm::begin(); ?> <?php echo $form->field($model, 'exportLanguages')->listBox(ArrayHelper::map(Language::find()->all(), 'language_id', 'name_ascii'), ['multiple' => true, 'size' => 20]); ?> <?php echo $form->field($model, 'format')->radioList([Response::FORMAT_JSON => Response::FORMAT_JSON, Response::FORMAT_XML => Response::FORMAT_XML]); ?> <div class="form-group"> <?php echo Html::submitButton(Yii::t('language', 'Export'), ['class' => 'btn btn-primary']); ?> </div> <?php ActiveForm::end(); ?>
/** * Returns language objects. * @param boolean $active True/False according to the status of the language. * @param bool $asArray Return the languages as language object or as 'flat' array * @return Language|array */ public static function getLanguages($active = true, $asArray = false) { if ($active) { return Language::find()->asArray($asArray)->where(['status' => static::STATUS_ACTIVE])->all(); } else { return Language::find()->asArray($asArray)->all(); } }
/** * @author Lajos Molnár <*****@*****.**> * @since 1.0 */ use yii\helpers\Url; use yii\grid\GridView; use yii\helpers\Html; use lajax\translatemanager\models\Language; use yii\widgets\Pjax; $this->title = Yii::t('language', 'List of languages'); $this->params['breadcrumbs'][] = $this->title; ?> <h1> <?php echo $this->title; ?> </h1> <div id="languages"> <?php Pjax::begin(['id' => 'languages']); echo GridView::widget(['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [['class' => 'yii\\grid\\SerialColumn'], 'language_id', 'name_ascii', ['format' => 'text', 'filter' => Language::getStatusNames(), 'attribute' => 'status', 'filterInputOptions' => ['class' => 'form-control', 'id' => 'status'], 'label' => Yii::t('language', 'Status'), 'content' => function ($language) { return Html::activeDropDownList($language, 'status', Language::getStatusNames(), ['class' => 'status', 'id' => $language->language_id]); }], ['format' => 'html', 'attribute' => Yii::t('language', 'Statistic'), 'content' => function ($language) { return '<span class="statistic"><span style="width:' . $language->getGridStatistic() . '%"></span><i>' . $language->getGridStatistic() . '%</i></span>'; }], ['format' => 'html', 'attribute' => Yii::t('language', 'Translate'), 'content' => function ($language) { return Html::a(Yii::t('language', 'Translate'), Url::toRoute(['language/translate', 'language_id' => $language->language_id]), ['class' => 'translate btn btn-xs btn-success']); }]]]); Pjax::end(); ?> </div>
/** * @return \yii\db\ActiveQuery */ public function getLanguages() { return $this->hasMany(Language::className(), ['language_id' => 'language'])->viaTable(LanguageTranslate::tableName(), ['id' => 'id']); }
/** * Import the uploaded file. Existing languages and translations will be updated, new ones will be created. * Source messages won't be updated, only created if they not exist. * @return array * @throws BadRequestHttpException * @throws Exception */ public function import() { $result = ['languages' => ['new' => 0, 'updated' => 0], 'languageSources' => ['new' => 0, 'updated' => 0], 'languageTranslations' => ['new' => 0, 'updated' => 0]]; $data = $this->parseImportFile(); /** @var Language[] $languages */ $languages = Language::find()->indexBy('language_id')->all(); foreach ($data['languages'] as $importedLanguage) { if (isset($languages[$importedLanguage['language_id']])) { $language = $languages[$importedLanguage['language_id']]; } else { $language = new Language(); } //cast integers $importedLanguage['status'] = (int) $importedLanguage['status']; $language->attributes = $importedLanguage; if (count($language->getDirtyAttributes())) { $saveType = $language->isNewRecord ? 'new' : 'updated'; if ($language->save()) { $result['languages'][$saveType]++; } else { $this->throwInvalidModelException($language); } } } /** @var LanguageSource[] $languageSources */ $languageSources = LanguageSource::find()->indexBy('id')->all(); /** @var LanguageTranslate[] $languageTranslations */ $languageTranslations = LanguageTranslate::find()->all(); /* * Create 2 dimensional array for current and imported translation, first index by LanguageSource->id * and than indexed by LanguageTranslate->language. * E.g.: [ * id => [ * language => LanguageTranslate (for $languageTranslations) / Array (for $importedLanguageTranslations) * ... * ] * ... * ] */ $languageTranslations = ArrayHelper::map($languageTranslations, 'language', function ($languageTranslation) { return $languageTranslation; }, 'id'); $importedLanguageTranslations = ArrayHelper::map($data['languageTranslations'], 'language', function ($languageTranslation) { return $languageTranslation; }, 'id'); foreach ($data['languageSources'] as $importedLanguageSource) { $languageSource = null; //check if id exist and if category and messages are matching if (isset($languageSources[$importedLanguageSource['id']]) && $languageSources[$importedLanguageSource['id']]->category == $importedLanguageSource['category'] && $languageSources[$importedLanguageSource['id']]->message == $importedLanguageSource['message']) { $languageSource = $languageSources[$importedLanguageSource['id']]; } if (is_null($languageSource)) { //no match by id, search by message foreach ($languageSources as $languageSourceSearch) { if ($languageSourceSearch->category == $importedLanguageSource['category'] && $languageSourceSearch->message == $importedLanguageSource['message']) { $languageSource = $languageSourceSearch; break; } } } if (is_null($languageSource)) { //still no match, create new $languageSource = new LanguageSource(['category' => $importedLanguageSource['category'], 'message' => $importedLanguageSource['message']]); if ($languageSource->save()) { $result['languageSources']['new']++; } else { $this->throwInvalidModelException($languageSource); } } //do we have translations for the current source? if (isset($importedLanguageTranslations[$importedLanguageSource['id']])) { //loop through the translations for the current source foreach ($importedLanguageTranslations[$importedLanguageSource['id']] as $importedLanguageTranslation) { $languageTranslate = null; //is there already a translation for this souce if (isset($languageTranslations[$languageSource->id]) && isset($languageTranslations[$languageSource->id][$importedLanguageTranslation['language']])) { $languageTranslate = $languageTranslations[$languageSource->id][$importedLanguageTranslation['language']]; } //no translation found, create a new one if (is_null($languageTranslate)) { $languageTranslate = new LanguageTranslate(); } $languageTranslate->attributes = $importedLanguageTranslation; //overwrite the id because the $languageSource->id might be different from the $importedLanguageTranslation['id'] $languageTranslate->id = $languageSource->id; if (count($languageTranslate->getDirtyAttributes())) { $saveType = $languageTranslate->isNewRecord ? 'new' : 'updated'; if ($languageTranslate->save()) { $result['languageTranslations'][$saveType]++; } else { $this->throwInvalidModelException($languageTranslate); } } } } } return $result; }
/** * @return \yii\db\ActiveQuery */ public function getLanguage0() { return $this->hasOne(Language::className(), ['language_id' => 'language']); }
<?php echo $form->field($model, 'language')->textInput(['maxlength' => 3]); ?> <?php echo $form->field($model, 'country')->textInput(['maxlength' => 3]); ?> <?php echo $form->field($model, 'name')->textInput(['maxlength' => 32]); ?> <?php echo $form->field($model, 'name_ascii')->textInput(['maxlength' => 32]); ?> <?php echo $form->field($model, 'status')->dropDownList(Language::getStatusNames()); ?> <div class="form-group"> <?php echo Html::submitButton($model->isNewRecord ? Yii::t('language', 'Create') : Yii::t('language', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']); ?> </div> <?php ActiveForm::end(); ?> </div>
<?php return ['bootstrap' => ['translatemanager', 'languagepicker'], 'modules' => ['utility' => ['class' => 'c006\\utility\\migration\\Module', 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'as access' => ['class' => 'yii\\filters\\AccessControl', 'rules' => [['allow' => true, 'roles' => ['admin']]]]], 'gallery' => ['class' => 'wolfguard\\gallery\\Module', 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'as access' => ['class' => 'yii\\filters\\AccessControl', 'rules' => [['allow' => true, 'roles' => ['admin']]]]], 'pages' => ['class' => 'bupy7\\pages\\Module', 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'pathToImages' => '@webroot/uploads/images', 'urlToImages' => '/uploads/images', 'pathToFiles' => '@webroot/uploads/files', 'urlToFiles' => '/uploads/files', 'uploadImage' => true, 'uploadFile' => true, 'addImage' => true, 'addFile' => true, 'as access' => ['class' => 'yii\\filters\\AccessControl', 'rules' => [['allow' => true, 'roles' => ['admin']]]]], 'menu' => ['class' => 'cornernote\\menu\\Module', 'controllerMap' => ['menu' => 'dyar74\\admin\\controllers\\MenuController'], 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'as access' => ['class' => 'yii\\filters\\AccessControl', 'rules' => [['allow' => true, 'roles' => ['admin']]]]], 'setting' => ['class' => 'funson86\\setting\\Module', 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'controllerNamespace' => 'funson86\\setting\\controllers', 'as access' => ['class' => 'yii\\filters\\AccessControl', 'rules' => [['allow' => true, 'roles' => ['admin']]]]], 'video_gallery' => ['class' => 'wolfguard\\video_gallery\\Module', 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'as access' => ['class' => 'yii\\filters\\AccessControl', 'rules' => [['allow' => true, 'roles' => ['admin']]]]], 'block' => ['class' => 'wolfguard\\block\\Module', 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'as access' => ['class' => 'yii\\filters\\AccessControl', 'rules' => [['allow' => true, 'roles' => ['admin']]]]], 'user' => ['class' => 'dektrium\\user\\Module', 'enableUnconfirmedLogin' => true, 'confirmWithin' => 21600, 'cost' => 12, 'admins' => ['admin'], 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'modelMap' => ['User' => 'dyar74\\admin\\models\\User']], 'translatemanager' => ['class' => 'lajax\\translatemanager\\Module', 'root' => '@app', 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'allowedIPs' => ['127.0.0.1', '10.21.146.*', '213.111.122.199'], 'roles' => ['admin', 'editor'], 'tmpDir' => '@runtime', 'phpTranslators' => ['::t'], 'jsTranslators' => ['lajax.t'], 'patterns' => ['*.js', '*.php'], 'ignoredCategories' => ['yii'], 'ignoredItems' => ['config'], 'scanTimeLimit' => null], 'permit' => ['class' => 'developeruz\\db_rbac\\Yii2DbRbac', 'layout' => '@vendor/dyar74/yii2-admin/views/layouts/admin.php', 'as access' => ['class' => 'yii\\filters\\AccessControl', 'rules' => [['allow' => true, 'roles' => ['admin']]]], 'params' => ['userClass' => 'dyar74\\admin\\models\\User']]], 'components' => ['setting' => ['class' => 'funson86\\setting\\Setting'], 'translatemanager' => ['class' => 'lajax\\translatemanager\\Component'], 'languagepicker' => ['class' => 'lajax\\languagepicker\\Component', 'languages' => function () { // List of available languages (icons only) return array_keys(\lajax\translatemanager\models\Language::getLanguageNames(true)); }, 'cookieName' => 'language', 'expireDays' => 64], 'urlManager' => ['rules' => ['<module:\\w+>/<controller:\\w+>/<action:(\\w|-)+>' => '<module>/<controller>/<action>', '<module:\\w+>/<controller:\\w+>/<action:(\\w|-)+>/<id:\\d+>' => '<module>/<controller>/<action>', 'admin' => 'admin/admin', 'admin/<controller:\\w+>/<action:[\\w-]+>/<id:\\d+>' => 'admin/<controller>/<action>', 'admin/<module:\\w+>/<controller:\\w+>/<action:[\\w-]+>/<id:\\d+>' => 'admin/<module>/<controller>/<action>', '/admin/translatemanager/language/create' => '/translatemanager/language/create', '/admin/translatemanager/language/list' => '/translatemanager/language/list', '/admin/translatemanager/language/scan' => '/translatemanager/language/scan', '/admin/translatemanager/language/optimizer' => '/translatemanager/language/optimizer', '/admin/menu' => '/menu/menu', '/admin/utility' => '/utility', '/admin/setting' => '/setting', '/admin/gallery' => '/gallery/admin', '/admin/video-gallery' => '/video_gallery/admin', '/admin/block' => '/block/admin', '/admin/gallery/<action:[\\w-]+>/<id:\\d+>' => '/gallery/admin/<action:[\\w-]+>/<id:\\d+>', '/admin/pages/manager/<action:[\\w-]+>/<id:\\d+>' => '/pages/manager/<action:[\\w-]+>/<id:\\d+>']], 'user' => ['identityClass' => 'dyar74\\admin\\models\\User', 'loginUrl' => ['/user/login']], 'view' => ['theme' => ['pathMap' => ['@dektrium/user/views/admin' => '@dyar74/admin/views/user', '@bupy7/pages/views/manager' => '@dyar74/admin/views/manager', '@cornernote/menu/views/menu' => '@dyar74/admin/views/menu']]], 'i18n' => ['translations' => ['*' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'app*' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'bupy7/pages/core' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'funson86/setting' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'block' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'video_gallery' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'gallery' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'utility' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'menu' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'user' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'db_rbac' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'rbac' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true], 'database' => ['class' => 'yii\\i18n\\DbMessageSource', 'db' => 'db', 'forceTranslation' => true, 'sourceLanguage' => 'en-US', 'sourceMessageTable' => 'language_source', 'messageTable' => 'language_translate', 'cachingDuration' => 86400, 'enableCaching' => true]]]]];
/** * Returns the completness of a given translation (language). * @return integer */ public function getGridStatistic() { static $statistics; if (!$statistics) { $count = LanguageSource::find()->count(); if ($count == 0) { return 0; } $languages = Language::find()->select('language_id, COUNT(`lt`.`id`) AS `status`')->leftJoin(LanguageTranslate::tableName() . ' AS `lt`', '`language`.`language_id` = `lt`.`language`')->groupBy('language_id')->all(); foreach ($languages as $language) { $statistics[$language->language_id] = round($language->status / $count, 2) * 100; } } return isset($statistics[$this->language_id]) ? $statistics[$this->language_id] : 0; }
$this->params['breadcrumbs'][] = ['label' => Yii::t('language', 'Languages'), 'url' => ['list']]; $this->params['breadcrumbs'][] = $this->title; ?> <h1> <?php echo $this->title; ?> </h1> <?php echo Html::hiddenInput('language_id', $language_id, ['id' => 'language_id', 'data-url' => Yii::$app->urlManager->createAbsoluteUrl('/translatemanager/language/save')]); ?> <div id="translates" class="<?php echo $language_id; ?> "> <?php Pjax::begin(['id' => 'translates']); $form = ActiveForm::begin(['method' => 'get', 'id' => 'search-form', 'enableAjaxValidation' => false, 'enableClientValidation' => false]); echo $form->field($searchModel, 'source')->dropDownList(['' => Yii::t('language', 'Original')] + Lang::getLanguageNames(true))->label(Yii::t('language', 'Source language')); ActiveForm::end(); echo GridView::widget(['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [['class' => 'yii\\grid\\SerialColumn'], ['format' => 'raw', 'filter' => Language::getCategories(), 'attribute' => 'category', 'filterInputOptions' => ['class' => 'form-control', 'id' => 'category']], ['format' => 'raw', 'attribute' => 'message', 'filterInputOptions' => ['class' => 'form-control', 'id' => 'message'], 'label' => Yii::t('language', 'Source'), 'content' => function ($data) { return Html::textarea('LanguageSource[' . $data->id . ']', $data->source, ['class' => 'form-control source', 'readonly' => 'readonly']); }], ['format' => 'raw', 'attribute' => 'translation', 'filterInputOptions' => ['class' => 'form-control', 'id' => 'translation'], 'label' => Yii::t('language', 'Translation'), 'content' => function ($data) { return Html::textarea('LanguageTranslate[' . $data->id . ']', $data->translation, ['class' => 'form-control translation', 'data-id' => $data->id, 'tabindex' => $data->id]); }], ['format' => 'raw', 'label' => Yii::t('language', 'Action'), 'content' => function ($data) { return Html::button(Yii::t('language', 'Save'), ['type' => 'button', 'data-id' => $data->id, 'class' => 'btn btn-lg btn-success']); }]]]); Pjax::end(); ?> </div>