taitava / silverstripe-untranslatablefields
制作自定义指定数据字段,以在各个语言版本间共享相同的值。
Requires
This package is auto-updated.
Last update: 2020-01-13 09:23:04 UTC
README
维护者
Jarkko Linnanvirta (昵称:Taitava) posti (at) taitavasti.fi
简介
此模块允许在使用可翻译模块时定义不能翻译到不同语言的字段。例如,您可能有一个名为Person的模型,具有两个字段:姓名和描述。您安装了可翻译模块,以便能够以不同的语言提供描述字段。但由于人的姓名通常不会被翻译,没有必要为每个翻译输入人的姓名 - 每个翻译一次。
实际上,每次将对象(扩展此模块)保存到数据库时,都会遍历其翻译,并将标记为不可翻译的字段的值复制到其他翻译并保存。
- 编辑任何语言版本 - 不可翻译字段的编辑将应用于所有翻译
- 只修改编写过程
- 数据库中不同翻译的不可翻译字段具有相同的值
- 不依赖于CMS模块(我相信 - 没有测试 :) )
- 不可翻译字段可以在后端具有特殊的CSS样式和HTML属性(默认情况下没有样式/属性更改)
要求
- SilverStripe 3.1
- 可翻译
CMS模块不是必需的。
安装
这是一个非常简单的配置。但是首先,您可以下载此模块并将其解压缩到根目录下名为"untranslatablefields"的文件夹中,或者通过Composer安装
composer require "taitava/silverstripe-untranslatablefields:*"
然后创建一个新文件:mysite/_config/untranslatablefields.yml,并将以下内容放入其中
--- UntranslatableFields: fields: MyClass: - MyField - CommonField AnotherClass - AnotherField - CommonField
此外,请记住扩展您的类以使用此模块。编辑mysite/_config/config.yml并添加以下行
MyClass: extensions: - UntranslatableFieldsExtension AnotherClass: extensions: - UntranslatableFieldsExtension
这两个配置一起将MyClass中的MyField和CommonField字段以及AnotherField和CommonField字段标记为不可翻译。请注意,指定类不会影响任何子类!
您也可以做相反的事情:除了指定的字段之外,所有内容都不进行翻译!只需在mysite/_config/untranslatablefields.yml中添加invert: true
--- UntranslatableFields: fields: MyClass: - MyField - CommonField AnotherClass - AnotherField - CommonField invert: true
自动发布
如果用户保存并发布例如页面对象,其不同语言版本将被保存,但默认情况下不会发布。这是因为DataObject::write()方法默认不发布更改。不可翻译字段可以设置为为具有Versioned扩展的DataObjects执行发布。
此功能默认关闭。要启用它,请将以下内容添加到mysite/_config/untranslatablefields.yml中
UnstranslatableFields: auto_publish: true
注意:如果在写入操作之前翻译处于阶段模式(=未发布)中,即使此选项设置为true,也不会自动发布。如果有较旧的发布版本,则更改将写入最新的(阶段)版本而不会发布。
指示 CMS 中字段的不可翻译状态
有几种低级方法可以向 CMS 用户提示不可翻译的字段。即使在没有 CMS 模块的一般后端以及在 DataObjects 的 ModelAdmin 中,这也应该有效。
您可以为所有不可翻译字段的 FormField 元素添加一些自定义 CSS 类。将以下内容添加到 mysite/_config/untranslatablefields.yml 中
UntranslatableFields: add_classes_to_cms: - untranslatable - 'another-class'
您也可以以相同的方式设置 HTML 属性
UntranslatableFields: add_attributes_to_cms: - data-untranslatable: yes - title: "This field can't be translated separately. Changes to this field are saved across all existing translations."
仅为了让您知道:如果您正在翻译没有 CMS 字段的字段,此功能不会与其冲突:该模块仅尝试将此类/属性添加到存在于 CMS/ModelAdmin 编辑器中的字段。
备注
- 类名和字段名区分大小写
- 我脑海中还有什么?我忘记了 :)
梦想
可以做的事情
- 检查类继承:无需单独指定子类。还实现星号前缀 (*Class) 以专门针对类。
- 全局不可翻译字段:在扩展此模块的所有类中翻译这些字段