taitava/silverstripe-untranslatablefields

此包已被放弃,不再维护。未建议替代包。

制作自定义指定数据字段,以在各个语言版本间共享相同的值。

安装: 176

依赖者: 0

建议者: 0

安全: 0

星标: 2

关注者: 1

分支: 2

开放问题: 2

类型:silverstripe-module

dev-master 2016-01-19 15:53 UTC

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) 以专门针对类。
  • 全局不可翻译字段:在扩展此模块的所有类中翻译这些字段