Octobercms: как переводить флеш сообщения?
Я использую translate.rainlab
Плагин для локализации, но не уверен, как переводить флэш-сообщения для формы AJAX.
function onMailSend() {
Mail::sendTo('name@example.com', 'contact.form', post());
Flash::success('Message has been sent');
}
2 ответа
Плагин translate используется для перевода внешнего интерфейса контента, но для перевода сообщений в коде рекомендуется использовать локальные языковые сообщения.
предположим, что это ваш сайт: http://octdev.local.com/demo/ajax (для lang по умолчанию установлено значение en)
тогда вы можете создать плагин и внутри lang/en/lang.php
файл вы можете определить перевод сообщений
Файл en lang будет там, и содержимое по умолчанию будет выглядеть так
// lang/en/lang.php
<?php return [
'plugin' => [
'name' => 'TestPlugin',
'description' => ''
]
];
Вы можете получить доступ к этим сообщениям в любом месте
\Flash::success(\Lang::get('hardiksatasiya.testplugin::lang.plugin.name'));
хардиксатасия.testplugin =>
plugin auther name
,pluginname
lang.plugin.name => работал как массив
lang
обозначает имя файла (язык), затем получитьplugin array
тогда его ключname
так что в нашем случае это будет поставить TestPlugin
Теперь вы можете использовать новый URL: http://octdev.local.com/de/demo/ajax его в де
так что вы можете создать новый файл lang в каталоге плагинов lang/de/lang.php
и поставить тот же код php выше с переведенными сообщениями
// lang/de/lang.php
<?php return [
'plugin' => [
'name' => 'TestPlugin In de',
'description' => ''
]
];
и это будет работать. если вам нужен весь документ, вы можете использовать эту ссылку: https://octobercms.com/docs/plugin/localization
Обновите, если вы думаете, что мне нужно сделать только в одном месте, вы можете сделать что-то вроде этого (но не предпочтительный способ)
$locale = \Lang::getLocale();
switch($locale) {
case 'en':
\Flash::success('Message has been sent - EN');
break;
case 'de':
\Flash::success('Message has been sent - DE');
break;
default:
\Flash::success('Message has been sent - default');
}
Вы можете использовать функции плагина Translate, не нужно использовать другой механизм перевода.
use RainLab\Translate\Models\Message;
function onMailSend() {
Mail::sendTo('name@example.com', 'contact.form', post());
Flash::success(Message::trans('Message has been sent'));
}
Это предполагает, что "Сообщение было отправлено" является строкой в локали по умолчанию.