Mercurial > hg > isophonics-drupal-site
comparison core/modules/locale/src/LocaleTranslation.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\locale; | |
4 | |
5 use Drupal\Core\Cache\CacheBackendInterface; | |
6 use Drupal\Core\Config\ConfigFactoryInterface; | |
7 use Drupal\Core\DestructableInterface; | |
8 use Drupal\Core\Language\LanguageInterface; | |
9 use Drupal\Core\Language\LanguageManagerInterface; | |
10 use Drupal\Core\Lock\LockBackendInterface; | |
11 use Drupal\Core\StringTranslation\Translator\TranslatorInterface; | |
12 use Symfony\Component\HttpFoundation\RequestStack; | |
13 | |
14 /** | |
15 * String translator using the locale module. | |
16 * | |
17 * Full featured translation system using locale's string storage and | |
18 * database caching. | |
19 */ | |
20 class LocaleTranslation implements TranslatorInterface, DestructableInterface { | |
21 | |
22 /** | |
23 * Storage for strings. | |
24 * | |
25 * @var \Drupal\locale\StringStorageInterface | |
26 */ | |
27 protected $storage; | |
28 | |
29 /** | |
30 * The configuration factory. | |
31 * | |
32 * @var \Drupal\Core\Config\ConfigFactoryInterface | |
33 */ | |
34 protected $configFactory; | |
35 | |
36 /** | |
37 * Cached translations. | |
38 * | |
39 * @var array | |
40 * Array of \Drupal\locale\LocaleLookup objects indexed by language code | |
41 * and context. | |
42 */ | |
43 protected $translations = []; | |
44 | |
45 /** | |
46 * The cache backend that should be used. | |
47 * | |
48 * @var \Drupal\Core\Cache\CacheBackendInterface | |
49 */ | |
50 protected $cache; | |
51 | |
52 /** | |
53 * The lock backend that should be used. | |
54 * | |
55 * @var \Drupal\Core\Lock\LockBackendInterface | |
56 */ | |
57 protected $lock; | |
58 | |
59 /** | |
60 * The translate english configuration value. | |
61 * | |
62 * @var bool | |
63 */ | |
64 protected $translateEnglish; | |
65 | |
66 /** | |
67 * The language manager. | |
68 * | |
69 * @var \Drupal\Core\Language\LanguageManagerInterface | |
70 */ | |
71 protected $languageManager; | |
72 | |
73 /** | |
74 * The request stack. | |
75 * | |
76 * @var \Symfony\Component\HttpFoundation\RequestStack | |
77 */ | |
78 protected $requestStack; | |
79 | |
80 /** | |
81 * Constructs a translator using a string storage. | |
82 * | |
83 * @param \Drupal\locale\StringStorageInterface $storage | |
84 * Storage to use when looking for new translations. | |
85 * @param \Drupal\Core\Cache\CacheBackendInterface $cache | |
86 * The cache backend. | |
87 * @param \Drupal\Core\Lock\LockBackendInterface $lock | |
88 * The lock backend. | |
89 * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
90 * The config factory. | |
91 * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
92 * The language manager. | |
93 * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack | |
94 * The request stack. | |
95 */ | |
96 public function __construct(StringStorageInterface $storage, CacheBackendInterface $cache, LockBackendInterface $lock, ConfigFactoryInterface $config_factory, LanguageManagerInterface $language_manager, RequestStack $request_stack) { | |
97 $this->storage = $storage; | |
98 $this->cache = $cache; | |
99 $this->lock = $lock; | |
100 $this->configFactory = $config_factory; | |
101 $this->languageManager = $language_manager; | |
102 $this->requestStack = $request_stack; | |
103 } | |
104 | |
105 /** | |
106 * {@inheritdoc} | |
107 */ | |
108 public function getStringTranslation($langcode, $string, $context) { | |
109 // If the language is not suitable for locale module, just return. | |
110 if ($langcode == LanguageInterface::LANGCODE_SYSTEM || ($langcode == 'en' && !$this->canTranslateEnglish())) { | |
111 return FALSE; | |
112 } | |
113 // Strings are cached by langcode, context and roles, using instances of the | |
114 // LocaleLookup class to handle string lookup and caching. | |
115 if (!isset($this->translations[$langcode][$context])) { | |
116 $this->translations[$langcode][$context] = new LocaleLookup($langcode, $context, $this->storage, $this->cache, $this->lock, $this->configFactory, $this->languageManager, $this->requestStack); | |
117 } | |
118 $translation = $this->translations[$langcode][$context]->get($string); | |
119 return $translation === TRUE ? FALSE : $translation; | |
120 } | |
121 | |
122 /** | |
123 * Gets translate english configuration value. | |
124 * | |
125 * @return bool | |
126 * TRUE if english should be translated, FALSE if not. | |
127 */ | |
128 protected function canTranslateEnglish() { | |
129 if (!isset($this->translateEnglish)) { | |
130 $this->translateEnglish = $this->configFactory->get('locale.settings')->get('translate_english'); | |
131 } | |
132 return $this->translateEnglish; | |
133 } | |
134 | |
135 /** | |
136 * {@inheritdoc} | |
137 */ | |
138 public function reset() { | |
139 unset($this->translateEnglish); | |
140 $this->translations = []; | |
141 } | |
142 | |
143 /** | |
144 * {@inheritdoc} | |
145 */ | |
146 public function destruct() { | |
147 foreach ($this->translations as $context) { | |
148 foreach ($context as $lookup) { | |
149 if ($lookup instanceof DestructableInterface) { | |
150 $lookup->destruct(); | |
151 } | |
152 } | |
153 } | |
154 } | |
155 | |
156 } |