arillo / silverstripe-deepl-translator
为silverstripe CMS添加deepl翻译
Requires
- amphp/parallel-functions: ^1.1
- arillo/silverstripe-cms-alpine: dev-main
- deeplcom/deepl-php: ^1.3.0
- tractorcow/silverstripe-fluent: ^5 || ^6
This package is auto-updated.
Last update: 2024-09-20 09:46:35 UTC
README
将Deepl翻译API添加到Fluent翻译的SilverStripe CMS中。目前它只为文本字段(TextField,TextareaField,HTMLEditorField)添加UI元素以翻译其内容。
安装
composer require arillo/silverstripe-deepl-translator
配置
创建Deepl API密钥并将其添加到您的.env
DEEPL_APIKEY="<YOUR_DEEPL_APIKEY>"
如果您使用词汇表功能,需要在.env
中设置一个唯一的前缀名称。这将防止旧词汇表被删除,如果它们的名称不以该前缀开头。如果您在多个实例中(例如,开发环境和生产环境)使用相同的API密钥,这将很有用。
DEEPL_GLOSSARY_NAME_PREFIX="myky-dev"
配置您的DataObjects以显示Deepl翻译处理程序。
注意:重要的是,此配置必须在将Fluent添加到这些DataObjects之后进行。否则,UI将不会显示。
假设您有以下名为myfluentcms
的Fluent配置
---
Name: myfluentcms
After:
- '#basei18n'
- '#fluentcms'
- '#fluentcms-pages'
---
SilverStripe\i18n\i18n:
default_locale: de_CH
Arillo\Elements\ElementBase:
extensions:
- 'TractorCow\Fluent\Extension\FluentVersionedExtension'
字段级翻译器
在#myfluentcms
之后应用deepl配置
---
Name: mydeepl
After:
- '#myfluentcms'
- '#silverstripe-deepl-translator'
---
SilverStripe\CMS\Model\SiteTree:
extensions:
- Arillo\Deepl\FieldWiseTranslationExtension
Arillo\Elements\ElementBase:
extensions:
- Arillo\Deepl\FieldWiseTranslationExtension
使URLSegmentFields可翻译(注意:实验性;JS实现正在进行中)
Arillo\Deepl\FieldWiseTranslationExtension:
deepl_fieldwise_translate_urlsegment_field: true
字段级翻译器的字段值收集备选方案
为了预加载字段级翻译的当前值,此模块使用以下方法$record->{$fieldName}
。但是,您可以通过实现一个名为deeplFieldValueFromRecord
的类方法来指定备选数据源,以覆盖默认行为,例如。
// in some DataObject class
// ...
public function deeplFieldValueFromRecord($fieldName)
{
switch ($fieldName) {
case 'AOLink_Title':
return $this->LinkObject()->Title;
case 'AOLink_URL':
return $this->LinkObject()->URL;
default:
return $this->{$fieldName};
}
}
仅向所选字段添加翻译功能
以下是一个示例配置,它只为App\Model\MyDataObject
中的Title
和Description
字段添加字段级翻译功能。
App\Model\MyDataObject:
extensions:
- Arillo\Deepl\FieldWiseTranslationExtension
deepl_fieldwise_included_fields:
- Title
- Description
数据对象级翻译器
自动翻译数据对象的所有可翻译字段。只需将该数据对象类的扩展添加到Arillo\Deepl\DataObjectWiseTranslationExtension
中即可,例如。
---
Name: mydeepl
After:
- '#myfluentcms'
- '#silverstripe-deepl-translator'
---
SilverStripe\CMS\Model\SiteTree:
extensions:
- Arillo\Deepl\DataObjectWiseTranslationExtension
Arillo\Elements\ElementBase:
extensions:
- Arillo\Deepl\DataObjectWiseTranslationExtension
可选地,您可以定义也将被翻译的关系。请确保相应的DataObject也使用某些Fluent扩展。
要配置所需的关系,请使用deepl_dataobject_included_relations
配置,例如。
Arillo\Elements\ElementBase:
extensions:
- Arillo\Deepl\DataObjectWiseTranslationExtension
deepl_dataobject_included_relations:
- Elements
- LinkObject
词汇表
如果您想使用Deepl的词汇表功能,您可以在SiteConfig中编辑您的词汇表。
您需要在.env
中设置词汇表名称前缀,如下所示
DEEPL_GLOSSARY_NAME_PREFIX="mysite-prod"
这些前缀对于在不同的环境中运行您的应用程序很有用,例如:dev
或live
。
截至本文写作时,请注意,Deepl词汇表API不允许更新词汇表。因此,更新是删除和创建。清除机制考虑到了名称前缀。例如:如果您的环境设置为mysite-prod
,则它将仅删除以该前缀开头的词汇表。这应该有助于防止意外的词汇表删除。
CMS
在CMS中,您必须向非管理员组添加USE_DEEPL
权限。
替代方案
如果您想使用Google Translate,请考虑使用:bratiask/silverstripe-autotranslate