2

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

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

2 回答 2

3

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

use RainLab\Translate\Models\Message;

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

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

于 2018-03-29T11:43:52.830 回答
2

translate 插件用于在前端翻译内容,但对于在代码中翻译消息,使用语言环境语言消息是个好主意。

假设这是您的网站: http: //octdev.local.com/demo/ajax(默认语言设置为 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 => plugin auther namepluginname

lang.plugin.name => 像数组一样工作,lang代表文件名(语言)然后获取plugin array它的键name,所以在我们的例子中它会输出TestPlugin

现在你可以使用新的 url: http: //octdev.local.com/de/demo/ajax它在de

因此您可以在插件目录中创建新的 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');
}
于 2017-12-19T04:26:35.877 回答