Octobercms:如何翻译flash消息?

时间:2017-12-19 02:07:27

标签: octobercms octobercms-plugins october-form-controller

我使用translate.rainlab插件进行本地化,但不确定如何为ajax表单翻译flash消息。

function onMailSend() {
    Mail::sendTo('name@example.com', 'contact.form', post());
    Flash::success('Message has been sent');
}

2 个答案:

答案 0 :(得分:3)

您可以坚持使用Translate插件的功能,无需使用其他翻译机制。

use RainLab\Translate\Models\Message;

function onMailSend() {
    Mail::sendTo('name@example.com', 'contact.form', post());
    Flash::success(Message::trans('Message has been sent'));
}

这假定"消息已被发送"是默认语言环境中的字符串。

答案 1 :(得分:2)

translate插件用于翻译内容前端,但是为了在代码中翻译消息,最好使用locale lang消息。

假设这是您的网站: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'));
  

hardiksatasiya.testplugin =&gt; plugin auther namepluginname

     

lang.plugin.name =&gt;就像数组lang代表文件名(语言)然后得到plugin array然后它的键name那么在我们的例子中它将把 TestPlugin

现在您可以在 de

中使用新网址: http://octdev.local.com/de/demo/ajax

所以你可以在你的插件目录lang/de/lang.php中创建新的lang文件,并将上面的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');
}