Name Last Update
..
behaviors Loading commit data...
components Loading commit data...
migrations Loading commit data...
models Loading commit data...
widgets Loading commit data...
Module.php Loading commit data...
readme.txt Loading commit data...

readme.txt

Как включить мультиязычность на сайте:
1. Запускаем миграцию: php yii migrate --migrationPath=common/modules/language/migrations
2. Добавляем в файл конфигурации:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'class'=>'common\modules\language\components\LanguageUrlManager',
'rules'=>[
'/' => 'site/index',
'//*'=>'/',
]
],
3. Добавляем в файл конфигурации:
'request' => [
'class' => 'common\modules\language\components\LanguageRequest'
],
4. Добавляем в файл конфигурации:
'language'=>'ru-RU',
'i18n' => [
'translations' => [
'*' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@frontend/messages',
'sourceLanguage' => 'en',
'fileMap' => [
],
],
],
],
5. Переводы писать в файл frontend\messages\{language}\app.php, где {language} - нужный язык, например ru.
6. Для вывода на странице сообщения с переводом используем функцию: Yii::t('app', {message}, $params = [], $language = null),
где {message} - нужное сообщение, $params - массив параметров, $language - нужный язык (по умолчанию используется текущий язык).
7. В наличие также виджет переключения языка: LanguagePicker::widget()

Как использовать мультиязычность для Active Record:
1. Создаем для таблицы {table} таблицу с языками {table_lang}.
2. Создаем для класса {Table} класс с языками {TableLang}.
3. Подключаеи для класса {Table} поведение LanguageBehavior:
public function behaviors() {
return [
'language' => [
'class' => LanguageBehavior::className(),
'object_lang' => {TableLang}::className() // optional, default to {TableLang}::className()
'ownerKey' => {Table}->id //optional, default to {Table}->primaryKey()[0]
'langKey' => {TableLang}->table_id //optional, default to {Table}->tableName().'_id'
],
];
}
3.1. PHPDoc для {Table}:
* * From language behavior *
* @property {TableLang} $lang
* @property {TableLang}[] $langs
* @property {TableLang} $object_lang
* @property string $ownerKey
* @property string $langKey
* @property {TableLang}[] $model_langs
* @property bool $transactionStatus
* @method string getOwnerKey()
* @method void setOwnerKey(string $value)
* @method string getLangKey()
* @method void setLangKey(string $value)
* @method ActiveQuery getLangs()
* @method ActiveQuery getLang( integer $language_id )
* @method {TableLang}[] generateLangs()
* @method void loadLangs(Request $request)
* @method bool linkLangs()
* @method bool saveLangs()
* @method bool getTransactionStatus()
* * End language behavior *
3.2. Убрать language behavior с наследуемых таблиц от {Table} ({TableSearch}...)
4. Доступные полезные методы:
{Table}->getLangs() - получить все текущие {TableLang} для {Table} проиндексированные по language_id
{Table}->getLang($language_id = NULL) - получить {TableLang} для определенного языка (default: текущий язык) для {Table}
{Table}->generateLangs() - получить массив {TableLang} под каждый язык, включая существующие записи, для {Table}
{Table}->loadLangs($request) - заполнить массив {TableLang} данными с POST
{Table}->linkLangs() - связать каждый элемент массива {TableLang} с текущей {Table}
{Table}->saveLangs() - провалидировать и сохранить каждый элемент массива {TableLang}
5. Добавить поля в форму (к примеру через Bootstrap Tabs).
В наличии:
LanguageForm::widget([
'model_langs' => {TableLang}[],
'formView' => string,
'form' => ActiveForm,
]);
6. Обрабатывать данные в контроллере.
1. После создания/поиска {Table} создаем/находим языковые модели {Table}->generateLangs()
2. При POST запросе загружаем данные в языковые модели {Table}->loadLangs(Request $request)
3. После сохранения, если транзанкция успешна, то свойство {Table}->transactionStatus будет true, иначе возникла ошибка в какой то модели.
7. Получать данные на публичной части сайта через {Table}->lang.