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'));
}

Это предполагает, что "Сообщение было отправлено" является строкой в ​​локали по умолчанию.

Другие вопросы по тегам