【问题标题】:How i can on October CMS use translate plugin after extend new fields to user plugin?将新字段扩展到用户插件后,我如何在 10 月 CMS 上使用翻译插件?
【发布时间】:2020-02-26 17:12:50
【问题描述】:

对于我的项目,我使用用户插件和翻译插件。 我已经向用户添加了自定义的新字段,现在我想翻译它们。

我想我知道为什么它不起作用。但是找不到解决办法。 有人有想法吗?

如果我添加到 $model->可翻译的默认字段,如“电子邮件”,工作正常。

我用这段代码在我的自定义插件中添加了启动功能

\RainLab\User\Models\User::extend(function ($model) {
 $model->implement[] = 'RainLab.Translate.Behaviors.TranslatableModel';
 $model->translatable = ['about', 'preview_text'];
});

【问题讨论】:

    标签: translation octobercms octobercms-plugins octobercms-user-plugin


    【解决方案1】:

    嗯,

    有一个问题。当您尝试直接添加$model->translatable时,它似乎将其视为模型的attribute

    试试这个$model->addDynamicProperty(variable_name, value);

    \RainLab\User\Models\User::extend(function ($model) {
       $model->implement[] = 'RainLab.Translate.Behaviors.TranslatableModel';
       $model->addDynamicProperty('translatable', ['about', 'preview_text']);
       // like this ^
    });
    

    它应该把它当作局部变量,它应该可以工作。

    如有任何疑问,请发表评论。

    修订 [最终解决方案] - 解决方案:当我们添加新字段时,它适用于现有字段,这是行不通的。

    问题: 翻译机制是它监听backend.form.extendFieldsBefore事件的表单,然后注册字段进行翻译。当我们尝试使用extendFormFields 扩展名在form 中注册新字段时,之后会发生这种情况,因此翻译侦听器看不到新添加的字段。因此,由于翻译字段注册过程已经完成,因此它们会被跳过。

    解决方案:所以对于解决方案,我们可以在翻译注册发生之前添加我们的字段。幸运的是,翻译插件具有最低的-1 侦听此事件backend.form.extendFieldsBefore 的优先级,因此我们可以在它之前注册我们的字段,所以我们现在很好,我们的字段可以在它处理字段之前添加。

    代码

    \Event::listen('backend.form.extendFieldsBefore', function($widget) {        
        // You should always check to see if you're extending correct model
        if (!$widget->model instanceof \RainLab\User\Models\User) {
            return;
        }
    
        // we will merge current fields with fields we want to add
        // we used shorthand + plus operator for this
        $widget->tabs['fields'] = $widget->tabs['fields'] + Config::get('rms.secis::user_fields');
    
        // here Config::get('rms.secis::user_fields') is just returning field array
        // Fo ref. Ex: 
        // return [
        //     'gender' => [
        //         'label'   => 'Gender',
        //         'tab'     => 'Security Island',
        //         'type'    => 'radio',
        //         'options' => [
        //             'male'   => 'Male',
        //             'female' => 'Female'
        //         ],
        //         'span'    => 'auto'
        //     ],
        // ];
    });
    

    注意:我们正在向选项卡添加字段,因此我们使用 $widget->tabs['fields']add fields to the tabs。如果要添加normal fieldssecondary tab fields,可以分别使用$widget->fields$widget->secondaryTabs['fields]

    是的,现在translator 可以看到我们的字段及其处理,它应该也可以在前端 UI 中显示翻译 UI。

    如有任何疑问,请发表评论。

    【讨论】:

    • 我已经用图片创建了一篇关于它的帖子
    • :( jQuery on Controller 就像前端一样,不工作
    【解决方案2】:

    @hardik-satasiya

    是的,前端没有更多错误,但新问题是,字段上没有翻译功能。 是否可以将 jQuery 脚本添加到 Controller?

    没有 JQuery 和十月框架文件的集成: https://octobercms.com/plugin/rainlab-translate

    文档结束

    【讨论】:

    • 你能用drop box等分享最小的工作插件吗?我可以检查并修复它,然后把它寄给你。
    • 我通过 Bitbucket 创建了 sn-p:bitbucket.org/sn-ps/ev-werkz/7nBkx6
    • 我已经更新了答案,希望它能解决您的问题。
    猜你喜欢
    • 2018-08-09
    • 2018-01-19
    • 1970-01-01
    • 2019-02-26
    • 2020-04-03
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2017-06-10
    相关资源
    最近更新 更多