Class TranslateBehavior
This behavior provides a way to translate dynamic data by keeping translations in a separate table linked to the original record from another one. Translated fields can be configured to override those in the main table when fetched or put aside into another property for the same entity.
If you wish to override fields, you need to call the locale method in this
behavior for setting the language you want to fetch from the translations table.
If you want to bring all or certain languages for each of the fetched records,
you can use the custom translations finders that is exposed to the table.
Property Summary
- 
        $_config protectedarrayRuntime config 
- 
        $_configInitialized protectedboolWhether the config property has already been configured with defaults 
- 
        $_defaultConfig protectedarrayDefault config 
- 
        $_locale protectedstringThe locale name that will be used to override fields in the bound table from the translations table 
- 
        $_reflectionCache protected staticarrayReflection method cache for behaviors. 
- 
        $_table protectedCake\ORM\TableTable instance 
- 
        $_tableLocator protectedCake\ORM\Locator\LocatorInterfaceTable locator instance 
- 
        $_translationTable protectedCake\ORM\TableInstance of Table responsible for translating 
Method Summary
- 
          __construct() publicConstructor 
- 
          _bundleTranslatedFields() protectedHelper method used to generated multiple translated field entities out of the data found in the _translationsproperty in the passed entity. The result will be put into its_i18nproperty
- 
          _configDelete() protectedDeletes a single config key. 
- 
          _configRead() protectedReads a config key. 
- 
          _configWrite() protectedWrites a config key. 
- 
          _findExistingTranslations() protectedReturns the ids found for each of the condition arrays passed for the translations table. Each records is indexed by the corresponding position to the conditions array 
- 
          _referenceName() protectedDetermine the reference name to use for a given table 
- 
          _reflectionCache() protectedGets the methods implemented by this behavior 
- 
          _resolveMethodAliases() protectedRemoves aliased methods that would otherwise be duplicated by userland configuration. 
- 
          _rowMapper() protectedModifies the results from a table find in order to merge the translated fields into each entity for a given locale. 
- 
          _unsetEmptyFields() protectedUnset empty translations to avoid persistence. 
- 
          afterSave() publicUnsets the temporary _i18nproperty after the entity has been saved
- 
          beforeFind() publicCallback method that listens to the beforeFindevent in the bound table. It modifies the passed query by eager loading the translated fields and adding a formatter to copy the values into the main table records.
- 
          beforeSave() publicModifies the entity before it is saved so that translated fields are persisted in the database too. 
- 
          buildMarshalMap() publicAdd in _translationsmarshalling handlers. You can disable marshalling of translations by setting'translations' => falsein the options provided toTable::newEntity()orTable::patchEntity().
- 
          config() public deprecatedGets/Sets the config. 
- 
          configShallow() publicMerge provided config with existing config. Unlike config()which does a recursive merge for nested keys, this method does a simple merge.
- 
          findTranslations() publicCustom finder method used to retrieve all translations for the found records. Fetched translations can be filtered by locale by passing the localeskey in the options array.
- 
          getConfig() publicReturns the config. 
- 
          getLocale() publicReturns the current locale. 
- 
          getTable() publicGet the table instance this behavior is bound to. 
- 
          getTableLocator() publicGets the table locator. 
- 
          groupTranslations() publicModifies the results from a table find in order to merge full translation records into each entity under the _translationskey
- 
          implementedEvents() publicGets the Model callbacks this behavior is interested in. 
- 
          implementedFinders() publicimplementedFinders 
- 
          implementedMethods() publicimplementedMethods 
- 
          initialize() publicInitialize hook 
- 
          locale() public deprecatedSets all future finds for the bound table to also fetch translated fields for the passed locale. If no value is passed, it returns the currently configured locale 
- 
          setConfig() publicSets the config. 
- 
          setLocale() publicSets the locale that should be used for all future find and save operations on the table where this behavior is attached to. 
- 
          setTableLocator() publicSets the table locator. 
- 
          setupFieldAssociations() publicCreates the associations between the bound table and every field passed to this method. 
- 
          tableLocator() public deprecatedSets the table locator. If no parameters are passed, it will return the currently used locator. 
- 
          translationField() publicReturns a fully aliased field name for translated fields. 
- 
          verifyConfig() publicverifyConfig 
Method Detail
__construct() ¶ public
__construct(Cake\ORM\Table $table, array $config = [])Constructor
Merges config with the default and store in the config property
Parameters
- 
                Cake\ORM\Table$table
- The table this behavior is attached to. 
- 
                array$config optional
- The config for this behavior. 
_bundleTranslatedFields() ¶ protected
_bundleTranslatedFields(Cake\Datasource\EntityInterface $entity): voidHelper method used to generated multiple translated field entities
out of the data found in the _translations property in the passed
entity. The result will be put into its _i18n property
Parameters
- 
                Cake\Datasource\EntityInterface$entity
- Entity 
Returns
void_configDelete() ¶ protected
_configDelete(string $key): voidDeletes a single config key.
Parameters
- 
                string$key
- Key to delete. 
Returns
voidThrows
Cake\Core\Exception\Exceptionif attempting to clobber existing config
_configRead() ¶ protected
_configRead(string|null $key): mixedReads a config key.
Parameters
- 
                string|null$key
- Key to read. 
Returns
mixed_configWrite() ¶ protected
_configWrite(string|array $key, mixed $value, bool|string $merge = false): voidWrites a config key.
Parameters
- 
                string|array$key
- Key to write to. 
- 
                mixed$value
- Value to write. 
- 
                bool|string$merge optional
- True to merge recursively, 'shallow' for simple merge, false to overwrite, defaults to false. 
Returns
voidThrows
Cake\Core\Exception\Exceptionif attempting to clobber existing config
_findExistingTranslations() ¶ protected
_findExistingTranslations(array $ruleSet): arrayReturns the ids found for each of the condition arrays passed for the translations table. Each records is indexed by the corresponding position to the conditions array
Parameters
- 
                array$ruleSet
- an array of arary of conditions to be used for finding each 
Returns
array_referenceName() ¶ protected
_referenceName(Cake\ORM\Table $table): stringDetermine the reference name to use for a given table
The reference name is usually derived from the class name of the table object (PostsTable -> Posts), however for autotable instances it is derived from the database table the object points at - or as a last resort, the alias of the autotable instance.
Parameters
- 
                Cake\ORM\Table$table
- The table class to get a reference name for. 
Returns
string_reflectionCache() ¶ protected
_reflectionCache(): arrayGets the methods implemented by this behavior
Uses the implementedEvents() method to exclude callback methods.
Methods starting with _ will be ignored, as will methods
declared on Cake\ORM\Behavior
Returns
arrayThrows
ReflectionException_resolveMethodAliases() ¶ protected
_resolveMethodAliases(string $key, array $defaults, array $config): arrayRemoves aliased methods that would otherwise be duplicated by userland configuration.
Parameters
- 
                string$key
- The key to filter. 
- 
                array$defaults
- The default method mappings. 
- 
                array$config
- The customized method mappings. 
Returns
arrayA de-duped list of config data.
_rowMapper() ¶ protected
_rowMapper(Cake\Datasource\ResultSetInterface $results, string $locale): Cake\Collection\CollectionInterfaceModifies the results from a table find in order to merge the translated fields into each entity for a given locale.
Parameters
- 
                Cake\Datasource\ResultSetInterface$results
- Results to map. 
- 
                string$locale
- Locale string 
Returns
Cake\Collection\CollectionInterface_unsetEmptyFields() ¶ protected
_unsetEmptyFields(Cake\Datasource\EntityInterface $entity): voidUnset empty translations to avoid persistence.
Should only be called if $this->_config['allowEmptyTranslations'] is false.
Parameters
- 
                Cake\Datasource\EntityInterface$entity
- The entity to check for empty translations fields inside. 
Returns
voidafterSave() ¶ public
afterSave(Cake\Event\Event $event, Cake\Datasource\EntityInterface $entity): voidUnsets the temporary _i18n property after the entity has been saved
Parameters
- 
                Cake\Event\Event$event
- The beforeSave event that was fired 
- 
                Cake\Datasource\EntityInterface$entity
- The entity that is going to be saved 
Returns
voidbeforeFind() ¶ public
beforeFind(Cake\Event\Event $event, Cake\ORM\Query $query, ArrayObject $options): voidCallback method that listens to the beforeFind event in the bound
table. It modifies the passed query by eager loading the translated fields
and adding a formatter to copy the values into the main table records.
Parameters
- 
                Cake\Event\Event$event
- The beforeFind event that was fired. 
- 
                Cake\ORM\Query$query
- Query 
- 
                ArrayObject$options
- The options for the query 
Returns
voidbeforeSave() ¶ public
beforeSave(Cake\Event\Event $event, Cake\Datasource\EntityInterface $entity, ArrayObject $options): voidModifies the entity before it is saved so that translated fields are persisted in the database too.
Parameters
- 
                Cake\Event\Event$event
- The beforeSave event that was fired 
- 
                Cake\Datasource\EntityInterface$entity
- The entity that is going to be saved 
- 
                ArrayObject$options
- the options passed to the save method 
Returns
voidbuildMarshalMap() ¶ public
buildMarshalMap(Cake\ORM\Marshaller $marshaller, array $map, array $options): arrayAdd in _translations marshalling handlers. You can disable marshalling
of translations by setting 'translations' => false in the options
provided to Table::newEntity() or Table::patchEntity().
Parameters
- 
                Cake\ORM\Marshaller$marshaller
- 
                array$map
- 
                array$options
Returns
arrayconfig() ¶ public
config(string|array|null $key = null, mixed|null $value = null, bool $merge = true): mixedGets/Sets the config.
Usage
Reading the whole config:
$this->config();Reading a specific value:
$this->config('key');Reading a nested value:
$this->config('some.nested.key');Setting a specific value:
$this->config('key', $value);Setting a nested value:
$this->config('some.nested.key', $value);Updating multiple config settings at the same time:
$this->config(['one' => 'value', 'another' => 'value']);Parameters
- 
                string|array|null$key optional
- The key to get/set, or a complete array of configs. 
- 
                mixed|null$value optional
- The value to set. 
- 
                bool$merge optional
- Whether to recursively merge or overwrite existing config, defaults to true. 
Returns
mixedConfig value being read, or the object itself on write operations.
Throws
Cake\Core\Exception\ExceptionWhen trying to set a key that is invalid.
configShallow() ¶ public
configShallow(string|array $key, mixed|null $value = null): $thisMerge provided config with existing config. Unlike config() which does
a recursive merge for nested keys, this method does a simple merge.
Setting a specific value:
$this->configShallow('key', $value);Setting a nested value:
$this->configShallow('some.nested.key', $value);Updating multiple config settings at the same time:
$this->configShallow(['one' => 'value', 'another' => 'value']);Parameters
- 
                string|array$key
- The key to set, or a complete array of configs. 
- 
                mixed|null$value optional
- The value to set. 
Returns
$thisfindTranslations() ¶ public
findTranslations(Cake\ORM\Query $query, array $options): Cake\ORM\QueryCustom finder method used to retrieve all translations for the found records.
Fetched translations can be filtered by locale by passing the locales key
in the options array.
Translated values will be found for each entity under the property _translations,
containing an array indexed by locale name.
Example:
$article = $articles->find('translations', ['locales' => ['eng', 'deu'])->first();
$englishTranslatedFields = $article->get('_translations')['eng'];If the locales array is not passed, it will bring all translations found
for each record.
Parameters
- 
                Cake\ORM\Query$query
- The original query to modify 
- 
                array$options
- Options 
Returns
Cake\ORM\QuerygetConfig() ¶ public
getConfig(string|null $key = null, mixed $default = null): mixedReturns the config.
Usage
Reading the whole config:
$this->getConfig();Reading a specific value:
$this->getConfig('key');Reading a nested value:
$this->getConfig('some.nested.key');Reading with default value:
$this->getConfig('some-key', 'default-value');Parameters
- 
                string|null$key optional
- The key to get or null for the whole config. 
- 
                mixed$default optional
- The return value when the key does not exist. 
Returns
mixedConfig value being read.
getLocale() ¶ public
getLocale(): stringReturns the current locale.
If no locale has been explicitly set via setLocale(), this method will return
the currently configured global locale.
Returns
stringSee Also
\Cake\ORM\Behavior\TranslateBehavior::setLocale()
getTable() ¶ public
getTable(): Cake\ORM\TableGet the table instance this behavior is bound to.
Returns
Cake\ORM\TableThe bound table instance.
getTableLocator() ¶ public
getTableLocator(): Cake\ORM\Locator\LocatorInterfaceGets the table locator.
Returns
Cake\ORM\Locator\LocatorInterfacegroupTranslations() ¶ public
groupTranslations(Cake\Datasource\ResultSetInterface $results): Cake\Collection\CollectionInterfaceModifies the results from a table find in order to merge full translation records
into each entity under the _translations key
Parameters
- 
                Cake\Datasource\ResultSetInterface$results
- Results to modify. 
Returns
Cake\Collection\CollectionInterfaceimplementedEvents() ¶ public
implementedEvents(): arrayGets the Model callbacks this behavior is interested in.
By defining one of the callback methods a behavior is assumed to be interested in the related event.
Override this method if you need to add non-conventional event listeners. Or if you want your behavior to listen to non-standard events.
Returns
arrayimplementedFinders() ¶ public
implementedFinders(): arrayimplementedFinders
Provides an alias->methodname map of which finders a behavior implements. Example:
 [
   'this' => 'findThis',
   'alias' => 'findMethodName'
 ]With the above example, a call to $Table->find('this') will call $Behavior->findThis()
and a call to $Table->find('alias') will call $Behavior->findMethodName()
It is recommended, though not required, to define implementedFinders in the config property of child classes such that it is not necessary to use reflections to derive the available method list. See core behaviors for examples
Returns
arrayThrows
ReflectionExceptionimplementedMethods() ¶ public
implementedMethods(): arrayimplementedMethods
Provides an alias->methodname map of which methods a behavior implements. Example:
 [
   'method' => 'method',
   'aliasedmethod' => 'somethingElse'
 ]With the above example, a call to $Table->method() will call $Behavior->method()
and a call to $Table->aliasedmethod() will call $Behavior->somethingElse()
It is recommended, though not required, to define implementedFinders in the config property of child classes such that it is not necessary to use reflections to derive the available method list. See core behaviors for examples
Returns
arrayThrows
ReflectionExceptioninitialize() ¶ public
initialize(array $config): voidInitialize hook
Implement this method to avoid having to overwrite the constructor and call parent.
Parameters
- 
                array$config
- The config for this behavior. 
Returns
voidlocale() ¶ public
locale(string|null $locale = null): stringSets all future finds for the bound table to also fetch translated fields for the passed locale. If no value is passed, it returns the currently configured locale
Parameters
- 
                string|null$locale optional
- The locale to use for fetching translated records 
Returns
stringsetConfig() ¶ public
setConfig(string|array $key, mixed|null $value = null, bool $merge = true): $thisSets the config.
Usage
Setting a specific value:
$this->setConfig('key', $value);Setting a nested value:
$this->setConfig('some.nested.key', $value);Updating multiple config settings at the same time:
$this->setConfig(['one' => 'value', 'another' => 'value']);Parameters
- 
                string|array$key
- The key to set, or a complete array of configs. 
- 
                mixed|null$value optional
- The value to set. 
- 
                bool$merge optional
- Whether to recursively merge or overwrite existing config, defaults to true. 
Returns
$thisThrows
Cake\Core\Exception\ExceptionWhen trying to set a key that is invalid.
setLocale() ¶ public
setLocale(string|null $locale): $thisSets the locale that should be used for all future find and save operations on the table where this behavior is attached to.
When fetching records, the behavior will include the content for the locale set via this method, and likewise when saving data, it will save the data in that locale.
Note that in case an entity has a _locale property set, that locale will win
over the locale set via this method (and over the globally configured one for
that matter)!
Parameters
- 
                string|null$locale
- The locale to use for fetching and saving records. Pass - nullin order to unset the current locale, and to make the behavior fall back to using the globally configured locale.
Returns
$thisSee Also
Links
https://book.cakephp.org/3.0/en/orm/behaviors/translate.html#saving-in-another-language
setTableLocator() ¶ public
setTableLocator(Cake\ORM\Locator\LocatorInterface $tableLocator): $thisSets the table locator.
Parameters
- 
                Cake\ORM\Locator\LocatorInterface$tableLocator
- LocatorInterface instance. 
Returns
$thissetupFieldAssociations() ¶ public
setupFieldAssociations(array $fields, string $table, string $model, string $strategy): voidCreates the associations between the bound table and every field passed to this method.
Additionally it creates a i18n HasMany association that will be
used for fetching all translations for each record in the bound table
Parameters
- 
                array$fields
- list of fields to create associations for 
- 
                string$table
- the table name to use for storing each field translation 
- 
                string$model
- the model field value 
- 
                string$strategy
- the strategy used in the _i18n association 
Returns
voidtableLocator() ¶ public
tableLocator(Cake\ORM\Locator\LocatorInterface|null $tableLocator = null): Cake\ORM\Locator\LocatorInterfaceSets the table locator. If no parameters are passed, it will return the currently used locator.
Parameters
- 
                Cake\ORM\Locator\LocatorInterface|null$tableLocator optional
- LocatorInterface instance. 
Returns
Cake\ORM\Locator\LocatorInterfacetranslationField() ¶ public
translationField(string $field): stringReturns a fully aliased field name for translated fields.
If the requested field is configured as a translation field, the content
field with an alias of a corresponding association is returned. Table-aliased
field name is returned for all other fields.
Parameters
- 
                string$field
- Field name to be aliased. 
Returns
stringverifyConfig() ¶ public
verifyConfig(): voidverifyConfig
Checks that implemented keys contain values pointing at callable.
Returns
voidThrows
Cake\Core\Exception\Exceptionif config are invalid
Property Detail
$_configInitialized ¶ protected
Whether the config property has already been configured with defaults
Type
bool$_defaultConfig ¶ protected
Default config
These are merged with user-provided configuration when the behavior is used.
Type
array$_locale ¶ protected
The locale name that will be used to override fields in the bound table from the translations table
Type
string$_reflectionCache ¶ protected static
Reflection method cache for behaviors.
Stores the reflected method + finder methods per class. This prevents reflecting the same class multiple times in a single process.
Type
array