1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
5: *
6: * Licensed under The MIT License
7: * For full copyright and license information, please see the LICENSE.txt
8: * Redistributions of files must retain the above copyright notice.
9: *
10: * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11: * @link https://cakephp.org CakePHP(tm) Project
12: * @since 3.0.0
13: * @license https://opensource.org/licenses/mit-license.php MIT License
14: */
15: namespace Cake\ORM\Behavior\Translate;
16:
17: use Cake\Datasource\EntityInterface;
18:
19: /**
20: * Contains a translation method aimed to help managing multiple translations
21: * for an entity.
22: */
23: trait TranslateTrait
24: {
25: /**
26: * Returns the entity containing the translated fields for this object and for
27: * the specified language. If the translation for the passed language is not
28: * present, a new empty entity will be created so that values can be added to
29: * it.
30: *
31: * @param string $language Language to return entity for.
32: * @return $this|\Cake\Datasource\EntityInterface
33: */
34: public function translation($language)
35: {
36: if ($language === $this->get('_locale')) {
37: return $this;
38: }
39:
40: $i18n = $this->get('_translations');
41: $created = false;
42:
43: if (empty($i18n)) {
44: $i18n = [];
45: $created = true;
46: }
47:
48: if ($created || empty($i18n[$language]) || !($i18n[$language] instanceof EntityInterface)) {
49: $className = get_class($this);
50:
51: $i18n[$language] = new $className();
52: $created = true;
53: }
54:
55: if ($created) {
56: $this->set('_translations', $i18n);
57: }
58:
59: // Assume the user will modify any of the internal translations, helps with saving
60: $this->setDirty('_translations', true);
61:
62: return $i18n[$language];
63: }
64: }
65: