Mercurial > hg > isophonics-drupal-site
comparison core/modules/language/src/EventSubscriber/LanguageRequestSubscriber.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 7a779792577d |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\language\EventSubscriber; | |
4 | |
5 use Drupal\Core\DrupalKernelInterface; | |
6 use Drupal\Core\Session\AccountInterface; | |
7 use Drupal\Core\StringTranslation\Translator\TranslatorInterface; | |
8 use Drupal\language\ConfigurableLanguageManagerInterface; | |
9 use Drupal\language\LanguageNegotiatorInterface; | |
10 use Symfony\Component\HttpKernel\HttpKernelInterface; | |
11 use Symfony\Component\HttpKernel\KernelEvents; | |
12 use Symfony\Component\HttpKernel\Event\GetResponseEvent; | |
13 use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
14 | |
15 /** | |
16 * Sets the $request property on the language manager. | |
17 */ | |
18 class LanguageRequestSubscriber implements EventSubscriberInterface { | |
19 | |
20 /** | |
21 * The language manager service. | |
22 * | |
23 * @var \Drupal\language\ConfigurableLanguageManagerInterface | |
24 */ | |
25 protected $languageManager; | |
26 | |
27 /** | |
28 * The language negotiator. | |
29 * | |
30 * @var \Drupal\language\LanguageNegotiatorInterface | |
31 */ | |
32 protected $negotiator; | |
33 | |
34 /** | |
35 * The translation service. | |
36 * | |
37 * @var \Drupal\Core\StringTranslation\Translator\TranslatorInterface; | |
38 */ | |
39 protected $translation; | |
40 | |
41 /** | |
42 * The current active user. | |
43 * | |
44 * @return \Drupal\Core\Session\AccountInterface | |
45 */ | |
46 protected $currentUser; | |
47 | |
48 /** | |
49 * Constructs a LanguageRequestSubscriber object. | |
50 * | |
51 * @param \Drupal\language\ConfigurableLanguageManagerInterface $language_manager | |
52 * The language manager service. | |
53 * @param \Drupal\language\LanguageNegotiatorInterface $negotiator | |
54 * The language negotiator. | |
55 * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translation | |
56 * The translation service. | |
57 * @param \Drupal\Core\Session\AccountInterface $current_user | |
58 * The current active user. | |
59 */ | |
60 public function __construct(ConfigurableLanguageManagerInterface $language_manager, LanguageNegotiatorInterface $negotiator, TranslatorInterface $translation, AccountInterface $current_user) { | |
61 $this->languageManager = $language_manager; | |
62 $this->negotiator = $negotiator; | |
63 $this->translation = $translation; | |
64 $this->currentUser = $current_user; | |
65 } | |
66 | |
67 /** | |
68 * Initializes the language manager at the beginning of the request. | |
69 * | |
70 * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event | |
71 * The Event to process. | |
72 */ | |
73 public function onKernelRequestLanguage(GetResponseEvent $event) { | |
74 if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) { | |
75 $this->setLanguageOverrides(); | |
76 } | |
77 } | |
78 | |
79 /** | |
80 * Initializes config overrides whenever the service container is rebuilt. | |
81 */ | |
82 public function onContainerInitializeSubrequestFinished() { | |
83 $this->setLanguageOverrides(); | |
84 } | |
85 | |
86 /** | |
87 * Sets the language for config overrides on the language manager. | |
88 */ | |
89 private function setLanguageOverrides() { | |
90 $this->negotiator->setCurrentUser($this->currentUser); | |
91 if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) { | |
92 $this->languageManager->setNegotiator($this->negotiator); | |
93 $this->languageManager->setConfigOverrideLanguage($this->languageManager->getCurrentLanguage()); | |
94 } | |
95 // After the language manager has initialized, set the default langcode for | |
96 // the string translations. | |
97 $langcode = $this->languageManager->getCurrentLanguage()->getId(); | |
98 $this->translation->setDefaultLangcode($langcode); | |
99 } | |
100 | |
101 /** | |
102 * Registers the methods in this class that should be listeners. | |
103 * | |
104 * @return array | |
105 * An array of event listener definitions. | |
106 */ | |
107 public static function getSubscribedEvents() { | |
108 $events[KernelEvents::REQUEST][] = ['onKernelRequestLanguage', 255]; | |
109 $events[DrupalKernelInterface::CONTAINER_INITIALIZE_SUBREQUEST_FINISHED][] = ['onContainerInitializeSubrequestFinished', 255]; | |
110 | |
111 return $events; | |
112 } | |
113 | |
114 } |