类 TranslateBehavior
此行为提供了一种通过在单独的表格中保留翻译并将其链接到另一个表格中的原始记录来翻译动态数据的方法。翻译后的字段可以被配置为在获取时覆盖主表格中的字段,或者为同一实体放在另一个属性中。
如果你希望覆盖字段,你需要调用此行为中的locale
方法来设置你想要从翻译表格中获取的语言。
如果你想为每个获取的记录获取所有语言或某些语言,你可以使用公开给表格的自定义translations
查找器。
属性摘要
-
$_config protected
array<string, mixed>
运行时配置
-
$_configInitialized protected
bool
配置属性是否已经使用默认值配置
-
$_defaultConfig protected
array<string, mixed>
默认配置
-
$_reflectionCache protected static
array<string, array>
行为的反射方法缓存。
-
$_table protected
Cake\ORM\Table
表格实例。
-
$defaultStrategyClass protected static
string
默认策略类名称。
-
$strategy protected
Cake\ORM\Behavior\Translate\TranslateStrategyInterface|null
翻译策略实例。
方法摘要
-
__call() public
将方法调用代理到策略类实例。
-
__construct() public
构造函数
-
_configDelete() protected
删除单个配置键。
-
_configRead() protected
读取配置键。
-
_configWrite() protected
写入配置键。
-
_reflectionCache() protected
获取此行为实现的方法
-
_resolveMethodAliases() protected
删除别名方法,否则这些方法会因用户端配置而重复。
-
beforeMarshal() public
将默认区域设置下的字段提升到
_translations
键下的数据根目录。 -
buildMarshalMap() public
构建一组应该包含在编组过程中的属性。
-
configShallow() public
将提供的配置与现有配置合并。与
config()
对嵌套键进行递归合并不同,此方法执行简单合并。 -
createStrategy() protected
创建策略实例。
-
findTranslations() public
用于检索找到的记录的所有翻译的自定义查找器方法。通过在选项数组中传递
locales
键可以按区域设置过滤获取的翻译。 -
getConfig() public
返回配置。
-
getConfigOrFail() public
返回此特定键的配置。
-
getDefaultStrategyClass() public static
获取默认策略类名称。
-
getLocale() public
返回当前区域设置。
-
getStrategy() public
获取策略类实例。
-
implementedEvents() public
获取此行为感兴趣的模型回调。
-
implementedFinders() public
implementedFinders
-
implementedMethods() public
implementedMethods
-
initialize() public
初始化钩子
-
referenceName() protected
确定要为给定表格使用的引用名称
-
setConfig() public
设置配置。
-
setDefaultStrategyClass() public static
设置默认策略类名称。
-
setLocale() public
设置附加此行为的表格的所有未来查找和保存操作应使用的区域设置。
-
setStrategy() public
设置策略类实例。
-
table() public
获取此行为绑定的表格实例。
-
translationField() public
返回翻译字段的完全别名字段名称。
-
verifyConfig() public
verifyConfig
方法详情
__call() ¶ public
__call(string $method, array $args): mixed
将方法调用代理到策略类实例。
参数
-
string
$method 方法名称。
-
array
$args 方法参数。
返回
mixed
__construct() ¶ public
__construct(Cake\ORM\Table $table, array<string, mixed> $config = [])
构造函数
选项
fields
: 需要翻译的字段列表。在使用EavStrategy
时,提供此字段列表是强制性的。如果在使用ShadowTableStrategy
时字段列表为空,则该列表将根据阴影表格架构自动生成。defaultLocale
: 行为视为默认的区域设置。默认区域设置的字段值将存储在主表格本身中,其余字段值将存储在翻译表格中。如果未明确设置,I18n::getDefaultLocale()
的值将用于获取默认区域设置。如果你不想要任何默认区域设置,并希望所有区域设置的翻译字段都存储在翻译表格中,则将此配置设置为空字符串''
。allowEmptyTranslations
: 默认情况下,如果记录已被翻译并存储为空字符串,则翻译行为将获取并使用此值来覆盖原始字段值。如果你不想要这种行为,则将此选项设置为false
。validator
: 创建/修改翻译记录时应使用的验证器。默认null
。
参数
-
Cake\ORM\Table
$table 附加此行为的表格。
-
array<string, mixed>
$config optional 此行为的配置。
_configDelete() ¶ protected
_configDelete(string $key): void
删除单个配置键。
参数
-
string
$key 要删除的键。
返回
void
抛出
Cake\Core\Exception\CakeException
如果尝试覆盖现有配置
_configRead() ¶ 受保护的
_configRead(string|null $key): mixed
读取配置键。
参数
-
string|null
$key 要读取的键。
返回
mixed
_configWrite() ¶ 受保护的
_configWrite(array<string, mixed>|string $key, mixed $value, string|bool $merge = false): void
写入配置键。
参数
-
array<string, mixed>|string
$key 要写入的键。
-
mixed
$value 要写入的值。
-
string|bool
$merge 可选的 True 表示递归合并,“浅层” 表示简单合并,False 表示覆盖,默认为 False。
返回
void
抛出
Cake\Core\Exception\CakeException
如果尝试覆盖现有配置
_reflectionCache() ¶ 受保护的
_reflectionCache(): array
获取此行为实现的方法
使用 implementedEvents() 方法排除回调方法。以 _
开头的 方法将被忽略,在 Cake\ORM\Behavior 上声明的方法也会被忽略。
返回
数组
抛出
ReflectionException
_resolveMethodAliases() ¶ 受保护的
_resolveMethodAliases(string $key, array<string, mixed> $defaults, array<string, mixed> $config): array
删除别名方法,否则这些方法会因用户端配置而重复。
参数
-
string
$key 要过滤的键。
-
array<string, mixed>
$defaults 默认方法映射。
-
array<string, mixed>
$config 自定义方法映射。
返回
数组
beforeMarshal() ¶ 公共的
beforeMarshal(Cake\Event\EventInterface $event, ArrayObject $data, ArrayObject $options): void
将默认区域设置下的字段提升到_translations
键下的数据根目录。
这允许即使在表单中也使用 _translations.{locale}.field_name
类型命名,即使对于默认区域设置也是如此。
参数
-
Cake\Event\EventInterface
$event -
ArrayObject
$data -
ArrayObject
$options
返回
void
buildMarshalMap() ¶ 公共的
buildMarshalMap(Cake\ORM\Marshaller $marshaller, array $map, array<string, mixed> $options): array
构建一组应该包含在编组过程中的属性。
添加 _translations
编组处理程序。您可以通过在提供给 Table::newEntity()
或 Table::patchEntity()
的选项中设置 'translations' => false
来禁用翻译的编组。
参数
-
Cake\ORM\Marshaller
$marshaller 行为附加到的表的编组程序。
-
array
$map 正在构建的属性映射。
-
array<string, mixed>
$options 编组调用中使用的选项数组。
返回
数组
configShallow() ¶ 公共的
configShallow(array<string, mixed>|string $key, mixed|null $value = null): $this
将提供的配置与现有配置合并。与config()
对嵌套键进行递归合并不同,此方法执行简单合并。
设置特定值
$this->configShallow('key', $value);
设置嵌套值
$this->configShallow('some.nested.key', $value);
同时更新多个配置设置
$this->configShallow(['one' => 'value', 'another' => 'value']);
参数
-
array<string, mixed>|string
$key 要设置的键,或完整的配置数组。
-
mixed|null
$value 可选的 要设置的值。
返回
$this
createStrategy() ¶ 受保护的
createStrategy(): Cake\ORM\Behavior\Translate\TranslateStrategyInterface
创建策略实例。
返回
Cake\ORM\Behavior\Translate\TranslateStrategyInterface
findTranslations() ¶ 公共的
findTranslations(Cake\ORM\Query\SelectQuery $query, list<string> $locales = []): Cake\ORM\Query\SelectQuery
用于检索找到的记录的所有翻译的自定义查找器方法。通过在选项数组中传递locales
键可以按区域设置过滤获取的翻译。
每个实体在 _translations
属性下都会找到翻译后的值,该属性包含一个以区域设置名称为索引的数组。
示例
$article = $articles->find('translations', locales: ['eng', 'deu'])->first();
$englishTranslatedFields = $article->get('_translations')['eng'];
如果没有传递 locales
数组,它将为每条记录带来所有找到的翻译。
参数
-
Cake\ORM\Query\SelectQuery
$query 要修改的原始查询
-
list<string>
$locales 可选的 区域设置列表或包含
locales
键定义的选项
返回
Cake\ORM\Query\SelectQuery
getConfig() ¶ 公共的
getConfig(string|null $key = null, mixed $default = null): mixed
返回配置。
用法
读取整个配置
$this->getConfig();
读取特定值
$this->getConfig('key');
读取嵌套值
$this->getConfig('some.nested.key');
使用默认值读取
$this->getConfig('some-key', 'default-value');
参数
-
string|null
$key 可选的 要获取的键,或整个配置的 null。
-
mixed
$default 可选的 键不存在时的返回值。
返回
mixed
getConfigOrFail() ¶ 公共的
getConfigOrFail(string $key): mixed
返回此特定键的配置。
此键的配置值必须存在,永远不能为 null。
参数
-
string
$key 要获取的键。
返回
mixed
抛出
InvalidArgumentException
getLocale() ¶ 公共的
getLocale(): string
返回当前区域设置。
如果没有通过 setLocale()
显式设置区域设置,此方法将返回当前配置的全局区域设置。
返回
string
另请参阅
\Cake\ORM\Behavior\TranslateBehavior::setLocale()
getStrategy() ¶ 公共的
getStrategy(): Cake\ORM\Behavior\Translate\TranslateStrategyInterface
获取策略类实例。
返回
Cake\ORM\Behavior\Translate\TranslateStrategyInterface
implementedEvents() ¶ 公共的
implementedEvents(): array<string, mixed>
获取此行为感兴趣的模型回调。
通过定义回调方法之一,行为被认为对相关事件感兴趣。
如果您需要添加非传统事件监听器,或者希望您的行为监听非标准事件,请覆盖此方法。
返回
array<string, mixed>
implementedFinders() ¶ 公共的
implementedFinders(): array
implementedFinders
提供行为实现的查找器的别名->方法名映射。例如
[
'this' => 'findThis',
'alias' => 'findMethodName'
]
使用上面的示例,调用 $table->find('this')
将调用 $behavior->findThis()
,而调用 $table->find('alias')
将调用 $behavior->findMethodName()
建议(尽管不是必需的)在子类的配置属性中定义 implementedFinders,这样就不必使用反射来推导出可用的方法列表。查看核心行为以获取示例。
返回
数组
抛出
ReflectionException
implementedMethods() ¶ 公共的
implementedMethods(): array
implementedMethods
提供行为实现的方法的别名->方法名映射。例如
[
'method' => 'method',
'aliasedMethod' => 'somethingElse'
]
使用上面的示例,调用 $table->method()
将调用 $behavior->method()
,而调用 $table->aliasedMethod()
将调用 $behavior->somethingElse()
建议(尽管不是必需的)在子类的配置属性中定义 implementedFinders,这样就不必使用反射来推导出可用的方法列表。查看核心行为以获取示例。
返回
数组
抛出
ReflectionException
initialize() ¶ 公共的
initialize(array<string, mixed> $config): void
初始化钩子
实现此方法以避免覆盖构造函数并调用父类。
参数
-
array<string, mixed>
$config 此行为的配置。
返回
void
referenceName() ¶ 受保护的
referenceName(Cake\ORM\Table $table): string
确定要为给定表格使用的引用名称
引用名称通常从表对象的类名派生(PostsTable -> Posts),但是对于自动表实例,它从对象指向的数据库表派生,或者作为最后的手段,从自动表实例的别名派生。
参数
-
Cake\ORM\Table
$table 要获取引用名称的表类。
返回
string
setConfig() ¶ 公共的
setConfig(array<string, mixed>|string $key, mixed|null $value = null, bool $merge = true): $this
设置配置。
用法
设置特定值
$this->setConfig('key', $value);
设置嵌套值
$this->setConfig('some.nested.key', $value);
同时更新多个配置设置
$this->setConfig(['one' => 'value', 'another' => 'value']);
参数
-
array<string, mixed>|string
$key 要设置的键,或完整的配置数组。
-
mixed|null
$value 可选的 要设置的值。
-
bool
$merge 可选的 是否递归合并或覆盖现有配置,默认为 True。
返回
$this
抛出
Cake\Core\Exception\CakeException
当尝试设置无效的键时。
setDefaultStrategyClass() ¶ 公共的 静态的
setDefaultStrategyClass(string $class): void
设置默认策略类名称。
参数
-
string
$class 类名。
返回
void
setLocale() ¶ 公共的
setLocale(string|null $locale): $this
设置附加此行为的表格的所有未来查找和保存操作应使用的区域设置。
获取记录时,行为将包含通过此方法设置的区域设置的内容,同样,保存数据时,它将以该区域设置保存数据。
请注意,如果实体具有设置的 _locale
属性,则该区域设置将优先于通过此方法设置的区域设置(以及全局配置的区域设置)!
参数
-
string|null
$locale 用于获取和保存记录的区域设置。传递
null
以取消设置当前区域设置,并使行为回退到使用全局配置的区域设置。
返回
$this
另请参阅
链接
https://book.cakephp.com.cn/5/en/orm/behaviors/translate.html#saving-in-another-language
setStrategy() ¶ 公共的
setStrategy(Cake\ORM\Behavior\Translate\TranslateStrategyInterface $strategy): $this
设置策略类实例。
参数
-
Cake\ORM\Behavior\Translate\TranslateStrategyInterface
$strategy 策略类实例。
返回
$this
translationField() ¶ 公共的
translationField(string $field): string
返回翻译字段的完全别名字段名称。
如果请求的字段被配置为翻译字段,则返回具有相应关联别名的 content
字段。对于所有其他字段,返回表别名字段名。
参数
-
string
$field 要添加别名的字段名。
返回
string
verifyConfig() ¶ 公共的
verifyConfig(): void
verifyConfig
检查实现的键是否包含指向可调用函数的值。
返回
void
抛出
Cake\Core\Exception\CakeException
如果配置无效
属性详细信息
$_reflectionCache ¶ 受保护的 静态的
行为的反射方法缓存。
存储每个类的反射方法和查找方法。这可以避免在同一个进程中多次反射同一个类。
类型
array<string, array>