将新字段扩展到用户插件后,我如何在10月CMS使用翻译插件?

时间:2019-10-31 10:49:45

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

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

我想我知道为什么它不起作用。但是找不到解决方案。 有人有主意吗?

如果我添加到$ model->可翻译的默认字段(例如“电子邮件”),则效果很好。

我使用此代码向我的自定义插件添加了启动功能

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

2 个答案:

答案 0 :(得分: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事件中的表单,然后注册要翻译的字段。当我们尝试使用form扩展名在extendFormFields中注册新字段时,此操作随后发生,因此新添加的字段对翻译侦听器不可见。因此,由于已经完成翻译字段注册过程,因此可以略过它们。

解决方案:因此,对于解决方案,我们只需在翻译注册发生之前添加我们的字段即可。幸运的是,翻译插件在监听此事件-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现在可以看到我们的字段及其处理的内容,它也应该能够在frontend-ui中显示翻译UI。

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

答案 1 :(得分:0)

@ hardik-satasiya

是的,前端没有更多错误,但是新的问题是,字段上没有转换功能。 也许要向控制器添加jQuery脚本?

没有JQuery和October Framework文件的集成: https://octobercms.com/plugin/rainlab-translate

文档结尾

enter image description here