SilverStripe Fluent 自动翻译行为

SilverStripe Fluent automatic translation behaviour

SilverStripe Fluent mod 似乎可以自动翻译 DataExtension 中的所有字段。要禁用它,我必须使用:private static $translate = 'none';.

这很奇怪,因为当谈到 DataObjects 时,它的工作方式恰恰相反:没有任何内容会自动翻译,只有您明确指定要翻译的字段。

是否可以禁用 SS-Fluent mod 的这种自动翻译行为?了解 Fluent 自动翻译的其他内容也很有趣。

在代码中...

在 silverstripe 中,任何静态数组都可以在代码中设置,所以可以将其添加到 _confip.php

Config::inst()->update('MyDataObject', 'translate',<SET ME HERE>);

...将确保设置所需的值!

如果您想将相同的内容添加到 config.yml 中,那么...

MyDataObject:
  translate:
    - 'FieldOne'
    - 'SomeOtherField'

...这在 https://github.com/tractorcow/silverstripe-fluent/blob/master/docs/en/configuration.md

中有更详细的介绍

只是建立在 Barry 的回答之上; Fluent 不翻译扩展,它翻译数据对象,默认情况下会自动翻译数据对象上与 Fluent.data_include 规则匹配的字段。将其视为将字段推入数据对象本身的扩展,fluent 将其视为由该扩展对象拥有,而不是扩展本身。

您 运行 遇到的问题是自动翻译行为,其中 translate 未定义。您可以按照 Barry 的回答为单个对象解决此问题。

如果要全局禁用所有自动字段翻译,可以将值从 Fluent.data_include 复制到 Fluent.data_exclude。此列表中的字段类型将不会包含在本地化中(即使在 Fluent.data_include 中)。

---
Name: myfluentconfig
After: '#fluentconfig'
---
Fluent:
  data_exclude:
    - 'Text'
    - 'Varchar'
    - 'HTMLText'
    - 'HTMLVarchar'

这意味着如果您有如下所示的数据对象(或扩展名),它将不会被自动翻译。

class MyObject extends DataObject {
    private static $db = [
        'Name' => 'Text'
    ];
}