0

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

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

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

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

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

2 回答 2

3

唔,

有一个问题。当您尝试直接添加它时$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']to add fields to the tabs。如果你想添加normal fields或者secondary tab fields你可以分别使用$widget->fields$widget->secondaryTabs['fields]

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

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

于 2019-10-31T15:55:42.693 回答
0

@hardik-satasiya

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

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

文档结束

在此处输入图像描述

于 2019-11-13T09:12:54.980 回答