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: /**
27: * Returns the entity containing the translated fields for this object and for
28: * the specified language. If the translation for the passed language is not
29: * present, a new empty entity will be created so that values can be added to
30: * it.
31: *
32: * @param string $language Language to return entity for.
33: * @return $this|\Cake\Datasource\EntityInterface
34: */
35: public function translation($language)
36: {
37: if ($language === $this->get('_locale')) {
38: return $this;
39: }
40:
41: $i18n = $this->get('_translations');
42: $created = false;
43:
44: if (empty($i18n)) {
45: $i18n = [];
46: $created = true;
47: }
48:
49: if ($created || empty($i18n[$language]) || !($i18n[$language] instanceof EntityInterface)) {
50: $className = get_class($this);
51:
52: $i18n[$language] = new $className();
53: $created = true;
54: }
55:
56: if ($created) {
57: $this->set('_translations', $i18n);
58: }
59:
60: // Assume the user will modify any of the internal translations, helps with saving
61: $this->setDirty('_translations', true);
62:
63: return $i18n[$language];
64: }
65: }
66: