Добрый день, специалисты.
Допустим есть сторонний виджет, который ставится из композера.
Как перевести его сообщения на языки, которые не предусмотрены по умолчанию в этом виджете?
Например, есть виджет kartik-v/yii2-widget-select2, мне нужно перевести его сообщения:
'Select all' => 'Выбрать все',
'Unselect all' => 'Отменить выбор',
На язык, которого нет в списке его переводов, но есть на самом сайте.
Руководство не помогло ответить на вопрос. так что прибегаю к форуму в крайнем случае.
Переводы для виджетов сторонних разработчиков.
Re: Переводы для виджетов сторонних разработчиков.
Посмотрев 5 минут Select2 находим такой комментарий
Как использовать?
Обязательно нужно учитывать что только для 'multiple' => true
Код: Выделить всё
/**
* @var array the toggle all button settings for selecting/unselecting all the options. This is applicable only for
* multiple select. The following array key properties can be set:
* - `selectLabel`: _string_, the markup to be shown to select all records. Defaults to:
* `<i class="glyphicon glyphicon-unchecked"></i> Select all`.
* - `unselectLabel`: _string_, the markup to be shown to unselect all records. Defaults to:
* `<i class="glyphicon glyphicon-checked"></i> Unselect all`.
* - `selectOptions`: _array_, the HTML attributes for the container wrapping the select label. Defaults to `[]`.
* - `unselectOptions`: _array_, the HTML attributes for the container wrapping the unselect label. Defaults to `[]`.
* - `options`: _array_, the HTML attributes for the toggle button container. Defaults to:
* `['class' => 's2-togall-button']`.
*/
Код: Выделить всё
<?= $form->field($model, 'field_name')->widget(Select2::classname(), [
'theme' => Select2::THEME_KRAJEE,
'model' => $model,
'data' => $MyArray,
'options' => [
'multiple' => true,
],
'toggleAllSettings' => [
'selectLabel' => 'YOUR_TRANSLATE',
'unselectLabel' => 'YOUR_TRANSLATE',
],
]) ?>
Re: Переводы для виджетов сторонних разработчиков.
Интересный подход, спасибо за совет. Переводы сработали, но ошибка не пропала. Всё равно выдает:
[127.0.0.1][1000][-][error][yii\i18n\PhpMessageSource::loadFallbackMessages]
The message file for category 'kvselect' does not exist:
\vendor\kartik-v\yii2-widget-select2\src/messages/abk/kvselect.php
Fallback file does not exist as well:
\vendor\kartik-v\yii2-widget-select2\src/messages/ab/kvselect.php
in
\vendor\kartik-v\yii2-widget-select2\src\Select2.php:260
in
\vendor\kartik-v\yii2-widget-select2\src\Select2.php:239
in
\vendor\kartik-v\yii2-widget-select2\src\Select2.php:197
2020-02-26 16:53:09 [127.0.0.1][1000][-][info][application] $_GET = [
'language' => 'abk'
]
Нету универсального решения для таких проблем? Например для несущетвующих переводов чтоб система в базу обращалась или в другую папку с переводами?
[127.0.0.1][1000][-][error][yii\i18n\PhpMessageSource::loadFallbackMessages]
The message file for category 'kvselect' does not exist:
\vendor\kartik-v\yii2-widget-select2\src/messages/abk/kvselect.php
Fallback file does not exist as well:
\vendor\kartik-v\yii2-widget-select2\src/messages/ab/kvselect.php
in
\vendor\kartik-v\yii2-widget-select2\src\Select2.php:260
in
\vendor\kartik-v\yii2-widget-select2\src\Select2.php:239
in
\vendor\kartik-v\yii2-widget-select2\src\Select2.php:197
2020-02-26 16:53:09 [127.0.0.1][1000][-][info][application] $_GET = [
'language' => 'abk'
]
Нету универсального решения для таких проблем? Например для несущетвующих переводов чтоб система в базу обращалась или в другую папку с переводами?
Re: Переводы для виджетов сторонних разработчиков.
Решил следующим путем:
В common/config/main.php
добавил:
'i18n' => [
'translations' => [
'kvselect' => [
'class' => 'yii\i18n\PhpMessageSource',
'sourceLanguage' => 'ru',
'basePath' => '@common/messages'
]
А в common/messages/abk/kvselect.php внес переводы
В common/config/main.php
добавил:
'i18n' => [
'translations' => [
'kvselect' => [
'class' => 'yii\i18n\PhpMessageSource',
'sourceLanguage' => 'ru',
'basePath' => '@common/messages'
]
А в common/messages/abk/kvselect.php внес переводы
Re: Переводы для виджетов сторонних разработчиков.
'sourceLanguage' => en' - правильнее. Так как изначально слова на англ.
Спасибо, unknownby, за оригинальный подход. В след раз буду читать комменты в классах.
Спасибо, unknownby, за оригинальный подход. В след раз буду читать комменты в классах.
Re: Переводы для виджетов сторонних разработчиков.
Попробуй добавить строку
Код: Выделить всё
use kartik\select2\Select2;
...
->widget(Select2::class, [
...
'options' => [...],
'language' => Yii::$app->language, // добавить
...
[\code]
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Переводы для виджетов сторонних разработчиков.
Если нужна возможность добавлять/переопределять (файловые) переводы к сторонним пакетам без копирования переводов с оригинального пакета, то пишите, могу сделать PR, будет возможность задавать дополнительные/кастомные переводы.