在将新字段扩展到用户插件后,我如何在 October CMS 上使用翻译插件?
How i can on October CMS use translate plugin after extend new fields to user plugin?
对于我的项目,我使用用户插件和翻译插件。
我已经为用户添加了自定义新字段,现在我想翻译它们。
我想我知道为什么它不起作用。但是找不到解决办法。
有人有想法吗?
如果我添加到 $model-> 可翻译的默认字段,如 'email',工作正常。
我用这段代码为我的自定义插件添加了启动功能
\RainLab\User\Models\User::extend(function ($model) {
$model->implement[] = 'RainLab.Translate.Behaviors.TranslatableModel';
$model->translatable = ['about', 'preview_text'];
});
嗯,
有一个问题。当您尝试直接添加它时 $model->translatable
,它似乎将其视为模型的 attribute
。
Try this $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 ^
});
它应该把它当作局部变量,它应该可以工作。
如有疑问请评论。
修订[最终解决方案] - 解决方案:当我们添加新字段时,它适用于现有字段,但这是行不通的。
Problem: With translation mechanism is that it listens the backend.form.extendFieldsBefore
event for form and then register fields for translation. When we try to register new fields in form
using extendFormFields
extension, It happens afterward so new added fields are not visible to translation listener. so they are kind of skipped as translation field registration process already been done.
解决方案: 因此,对于解决方案,我们可以在翻译注册开始之前添加我们的字段。幸运的是,翻译插件具有最低的 -1
侦听此事件的优先级 backend.form.extendFieldsBefore
所以我们可以在它之前注册我们的字段所以我们现在很好,我们的字段可以在它处理翻译字段之前添加。
Code
\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'
// ],
// ];
});
Note: we are adding fields to tab so we are using $widget->tabs['fields']
to add fields to the tabs
. If you want to add normal fields
or secondary tab fields
you can use $widget->fields
and $widget->secondaryTabs['fields]
respectively.
是的,现在 translator
可以看到我们的字段及其处理,它应该也可以在前端显示翻译 UI-ui。
如有疑问请评论。
@hardik-satasiya
是的,前端不再有错误,但新问题是,字段上没有翻译功能。
也许向控制器添加 jQuery 脚本?
没有 JQuery 和十月框架文件的集成:
https://octobercms.com/plugin/rainlab-translate
文档结束
对于我的项目,我使用用户插件和翻译插件。 我已经为用户添加了自定义新字段,现在我想翻译它们。
我想我知道为什么它不起作用。但是找不到解决办法。 有人有想法吗?
如果我添加到 $model-> 可翻译的默认字段,如 'email',工作正常。
我用这段代码为我的自定义插件添加了启动功能
\RainLab\User\Models\User::extend(function ($model) {
$model->implement[] = 'RainLab.Translate.Behaviors.TranslatableModel';
$model->translatable = ['about', 'preview_text'];
});
嗯,
有一个问题。当您尝试直接添加它时 $model->translatable
,它似乎将其视为模型的 attribute
。
Try this
$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 ^
});
它应该把它当作局部变量,它应该可以工作。
如有疑问请评论。
修订[最终解决方案] - 解决方案:当我们添加新字段时,它适用于现有字段,但这是行不通的。
Problem: With translation mechanism is that it listens the
backend.form.extendFieldsBefore
event for form and then register fields for translation. When we try to register new fields inform
usingextendFormFields
extension, It happens afterward so new added fields are not visible to translation listener. so they are kind of skipped as translation field registration process already been done.
解决方案: 因此,对于解决方案,我们可以在翻译注册开始之前添加我们的字段。幸运的是,翻译插件具有最低的 -1
侦听此事件的优先级 backend.form.extendFieldsBefore
所以我们可以在它之前注册我们的字段所以我们现在很好,我们的字段可以在它处理翻译字段之前添加。
Code
\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'
// ],
// ];
});
Note: we are adding fields to tab so we are using
$widget->tabs['fields']
toadd fields to the tabs
. If you want to addnormal fields
orsecondary tab fields
you can use$widget->fields
and$widget->secondaryTabs['fields]
respectively.
是的,现在 translator
可以看到我们的字段及其处理,它应该也可以在前端显示翻译 UI-ui。
如有疑问请评论。
@hardik-satasiya
是的,前端不再有错误,但新问题是,字段上没有翻译功能。 也许向控制器添加 jQuery 脚本?
没有 JQuery 和十月框架文件的集成: https://octobercms.com/plugin/rainlab-translate
文档结束