【问题标题】:Octobercms: how to translate flash messages?Octobercms:如何翻译Flash消息?
【发布时间】:2018-06-01 10:07:55
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我喜欢你直接的解决方案。但是,出现了一个小错字。缺少另一个双点Message::trans
    • 感谢@creg,修正了错别字。
    【解决方案2】:

    translate 插件用于翻译 content 前端,但要翻译代码中的消息,最好使用 locale lang 消息。

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

    现在您可以使用新网址:http://octdev.local.com/de/demo/ajax 它在 de

    这样您就可以在插件目录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');
    }
    

    【讨论】:

    • 所以,无论如何,我必须创建一个新的单独插件来翻译几条消息,而且没有更简单的本地方法可以做到这一点,对吗?
    • 如果这是您要翻译的唯一消息,您可以手动完成。 \Lang::getLocale() 将返回您选择的语言环境 deen 现在您可以放置​​ switch..case 或 if else ,并分配您的 Flash 消息(在答案中添加更新块只需检查一次)
    • 是的,就可以了。非常感谢您提供如此丰富的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多