Yii2 перевод данных, хранящихся в базе данных

Я работаю с Yii2 Framework и уже настроил компонент i18n, используя это руководство:
http://thecodeninja.net/2014/12/i18n-with-yii-2-advanced-template/

Итак, теперь я могу переводить строки в моих файлах php, используя Yii::t() функция. Переводимые строки извлекаются с использованием $ ./yii message/extract консольная команда, которая генерирует правильные файлы перевода.

Теперь мне нужно отобразить переводы для строк, хранящихся в базе данных.

Я мог бы использовать Yii:t() с переменной вместо строки в качестве аргумента, как это

echo Yii:t('app', $some_string_from_db );

и создайте новый php-файл с таким кодом

<?php

function dbStringsToTranslate() {
$o = Yii::t('app','db english string 1');
$o.= Yii::t('app','db english string 2');
$o.= Yii::t('app','db english string 3');
return $o;
}

Сюда $ ./yii message/extract Команда найдет нужные переводы.

Это работает хорошо, но, конечно, $ ./yii message/extract бросает некоторые предупреждения везде, где я использую Yii:t() с переменными.

Skipping line 39. Make sure both category and message are static strings.

Я думаю, что это не имеет большого значения, но хорошо, вот мой вопрос:

Это правильный способ перевода строк, хранящихся в базе данных?

Есть ли лучший способ сделать это?

2

Решение

Вы можете проверить это расширение. https://github.com/creocoder/yii2-translateable это позволяет привязывать поведение к моделям для поддержки нескольких языков.

Я использую его сейчас в проектах, и он прост в использовании.

2

Другие решения

У меня была такая же проблема, и я нашел решение с этот модуль. В конфигурации модуля у вас есть массив таблиц, в котором вы можете указать, какие поля из какой таблицы должны быть переведены.
Затем модуль имеет свое собственное действие «сканирование» (эквивалентное сообщению / извлечению), с помощью которого он добавляет все переводимые строки в базу данных (используя DbMessageSource): все Yii :: t, указанные поля базы данных и многое другое (даже javascript, проверьте документы). Он также имеет приятный пользовательский интерфейс для выполнения переводов, это потрясающе!

Например, при следующей конфигурации имя поля из таблицы национальности будет отсканировано и добавлено для его перевода (т.е. названия стран):

'modules' => [
'translatemanager' => [
'class' => 'lajax\translatemanager\Module',
...
'tables' => [                   // Properties of individual tables
[
'connection' => 'db',   // connection identifier
'table' => 'nationality',         // table name
'columns' => ['name'], // names of multilingual fields
'category' => 'database-table-name',// the category is the database table name
'categoryPrefix' => 'lx-'           //
]
]
],

],

2

По вопросам рекламы [email protected]