Перевод сообщений в расширениях

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Перевод сообщений в расширениях

Сообщение maleks »

Приветствую.
Думаю какой самый простой и удобный способ написание своего расширения интернациональным, но чтобы можно было конечному пользователю все натюнить, при этом не хочется в самом расширении поддерживать кучу переводов, по крайней мере пока их никто не добавит.
У меня конкретно тут модуль, поэтому в его init регистрируем, вот как в usuario:

Код: Выделить всё

            $app->get('i18n')->translations['usuario*'] = [
                'class' => PhpMessageSource::class,
                'basePath' => __DIR__ . '/resources/i18n',
                'sourceLanguage' => 'en-US',
            ];
Тут они в своем расширении все переводы поддерживает.
Но такого бы не хотелось поначалу, поэтому следующие вопросы:
1) как у себя в проекте для такого расширения добавлять переводы отсутствующего языка?
2) как менять существующий перевод языка?

Дать что ли возможность при настройке модуля в конфиге менять вот этот basePath перевода и предложить копировать эти переводы из расширения к себе в проект и там с ними что хотят пусть делают?
Может по другому как то?
Yii2 universal module sceleton - for basic and advanced templates
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Перевод сообщений в расширениях

Сообщение yiiliveext »

Регистрировать надо не в init(), а в отдельном классе с интерфейсом BootstrapInterface, который потом прописывать в composer.json вашего расширения в extra/bootstrap.
Таким образом вам больше ничего не нужно делать, пользователь сам сможет скопировать и переопределить переводы для вашей категории в бутстрапе своего приложения, поскольку бутстрап приложения выполняется после бутстрапа расширений.
Ну и желающие большего удобства могут немного доработать компонент i18n под себя, чтобы была возможность мержить свои кастомные переводы с переводами расширений.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Перевод сообщений в расширениях

Сообщение maleks »

yiiliveext писал(а): 2020.01.13, 15:42 Регистрировать надо не в init(), а в отдельном классе с интерфейсом BootstrapInterface, который потом прописывать в composer.json вашего расширения в extra/bootstrap.
Я как в доках посмотрел, т.к. функционал нужен только на страницах модуля.
Но не суть, можно и в бутстрапе.
yiiliveext писал(а): 2020.01.13, 15:42 Ну и желающие большего удобства могут немного доработать компонент i18n под себя, чтобы была возможность мержить свои кастомные переводы с переводами расширений.
Вот этого момента(*) как раз и нужно избежать.

(*) Требовать от пользователя моего расширения дорабатывать компоненты yii чтобы начать пользоваться.
Yii2 universal module sceleton - for basic and advanced templates
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Перевод сообщений в расширениях

Сообщение yiiliveext »

maleks писал(а): 2020.01.13, 16:43 Вот этого момента(*) как раз и нужно избежать.
(*) Требовать от пользователя моего расширения дорабатывать компоненты yii чтобы начать пользоваться.
Вы меня неверно поняли. Эта доработка официального компонента i18n не является острой необходимостью и не имеет никакого непосредственного отношения именно к вашему расширению. Она просто позволяет делать кастомные переводы для абсолютно любого расширения Yii 2, при этом сохраняя обновление официальных переводов расширения. Почему это до сих пор не было сделано командой разработчиков фреймворка - для меня загадка, ибо решение там простое и очевидное.
Для возможности переопределения источника переводов вашего конкретного расширения достаточно выполнить рекомендации данные мной выше с добавлением ваших оригинальных переводов в бутстрапе вашего расширения.
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Перевод сообщений в расширениях

Сообщение maleks »

yiiliveext писал(а): 2020.01.13, 17:36 Для возможности переопределения источника переводов вашего конкретного расширения достаточно выполнить рекомендации данные мной выше с добавлением ваших оригинальных переводов в бутстрапе вашего расширения.
Ну вот этот же момент чуток и напрягает.
Скажем идет у меня с расширением перевод на русский. Исходный язык англ конечно.
Они хотят добавить себе франзузский.
Им надо basePath переопределить на какой то свой, в нем создать папку fr, файл переводов для него добавить.
Ладно если сайт одноязычный то прокатит.
Но если надо переводы от расширения плюс свои переводы, то придется в папке своих делать обертки над теми что в расширении. Оно ж с одного места только ищет один источник.
yiiliveext писал(а): 2020.01.13, 17:36 Почему это до сих пор не было сделано командой разработчиков фреймворка - для меня загадка, ибо решение там простое и очевидное
Может расширение под это есть, поищу.
Yii2 universal module sceleton - for basic and advanced templates
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Перевод сообщений в расширениях

Сообщение yiiliveext »

maleks писал(а): 2020.01.13, 18:37 Ну вот этот же момент чуток и напрягает.
Скажем идет у меня с расширением перевод на русский. Исходный язык англ конечно.
Они хотят добавить себе франзузский.
Им надо basePath переопределить на какой то свой, в нем создать папку fr, файл переводов для него добавить.
Ладно если сайт одноязычный то прокатит.
Но если надо переводы от расширения плюс свои переводы, то придется в папке своих делать обертки над теми что в расширении. Оно ж с одного места только ищет один источник.
Переопределять они будут не basePath, а источник переводов по вашей категории. Для того чтобы добавить/переопределить переводы им нужно будет скопировать к себе в приложения ваши оригинальные переводы и там уже добавлять/переопределять. Естественно переопределенный источник будет будет указывать на их локальные переводы.
Может расширение под это есть, поищу.
И чем вам это поможет? Его и написать-то недолго. Разве что рекомендовать ставить вместе с вашим расширением.
Ответить