comparison core/lib/Drupal/Core/Language/Language.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\Core\Language;
4
5 use Drupal\Core\StringTranslation\TranslatableMarkup;
6
7 /**
8 * An object containing the information for an interface language.
9 *
10 * @see \Drupal\Core\Language\LanguageManager::getLanguage()
11 */
12 class Language implements LanguageInterface {
13
14 /**
15 * The values to use to instantiate the default language.
16 *
17 * @var array
18 */
19 public static $defaultValues = [
20 'id' => 'en',
21 'name' => 'English',
22 'direction' => self::DIRECTION_LTR,
23 'weight' => 0,
24 'locked' => FALSE,
25 ];
26
27 // Properties within the Language are set up as the default language.
28
29 /**
30 * The human readable English name.
31 *
32 * @var string
33 */
34 protected $name = '';
35
36 /**
37 * The ID, langcode.
38 *
39 * @var string
40 */
41 protected $id = '';
42
43 /**
44 * The direction, left-to-right, or right-to-left.
45 *
46 * Defined using constants, either self::DIRECTION_LTR or self::DIRECTION_RTL.
47 *
48 * @var int
49 */
50 protected $direction = self::DIRECTION_LTR;
51
52 /**
53 * The weight, used for ordering languages in lists, like selects or tables.
54 *
55 * @var int
56 */
57 protected $weight = 0;
58
59 /**
60 * Locked indicates a language used by the system, not an actual language.
61 *
62 * Examples of locked languages are, LANGCODE_NOT_SPECIFIED, und, and
63 * LANGCODE_NOT_APPLICABLE, zxx, which are usually shown in language selects
64 * but hidden in places like the Language configuration and cannot be deleted.
65 *
66 * @var bool
67 */
68 protected $locked = FALSE;
69
70 /**
71 * Constructs a new class instance.
72 *
73 * @param array $values
74 * An array of property values, keyed by property name, used to construct
75 * the language.
76 */
77 public function __construct(array $values = []) {
78 // Set all the provided properties for the language.
79 foreach ($values as $key => $value) {
80 if (property_exists($this, $key)) {
81 $this->{$key} = $value;
82 }
83 }
84 // If some values were not set, set sane defaults of a predefined language.
85 if (!isset($values['name']) || !isset($values['direction'])) {
86 $predefined = LanguageManager::getStandardLanguageList();
87 if (isset($predefined[$this->id])) {
88 if (!isset($values['name'])) {
89 $this->name = $predefined[$this->id][0];
90 }
91 if (!isset($values['direction']) && isset($predefined[$this->id][2])) {
92 $this->direction = $predefined[$this->id][2];
93 }
94 }
95 }
96 }
97
98 /**
99 * {@inheritdoc}
100 */
101 public function getName() {
102 return $this->name;
103 }
104
105 /**
106 * {@inheritdoc}
107 */
108 public function getId() {
109 return $this->id;
110 }
111
112 /**
113 * {@inheritdoc}
114 */
115 public function getDirection() {
116 return $this->direction;
117 }
118
119 /**
120 * {@inheritdoc}
121 */
122 public function getWeight() {
123 return $this->weight;
124 }
125
126 /**
127 * {@inheritdoc}
128 */
129 public function isDefault() {
130 return static::getDefaultLangcode() == $this->getId();
131 }
132
133 /**
134 * {@inheritdoc}
135 */
136 public function isLocked() {
137 return (bool) $this->locked;
138 }
139
140 /**
141 * Sort language objects.
142 *
143 * @param \Drupal\Core\Language\LanguageInterface[] $languages
144 * The array of language objects keyed by langcode.
145 */
146 public static function sort(&$languages) {
147 uasort($languages, function (LanguageInterface $a, LanguageInterface $b) {
148 $a_weight = $a->getWeight();
149 $b_weight = $b->getWeight();
150 if ($a_weight == $b_weight) {
151 $a_name = $a->getName();
152 $b_name = $b->getName();
153 // If either name is a TranslatableMarkup object it can not be converted
154 // to a string. This is because translation requires a sorted list of
155 // languages thereby causing an infinite loop. Determine the order based
156 // on ID if this is the case.
157 if ($a_name instanceof TranslatableMarkup || $b_name instanceof TranslatableMarkup) {
158 $a_name = $a->getId();
159 $b_name = $b->getId();
160 }
161 return strnatcasecmp($a_name, $b_name);
162 }
163 return ($a_weight < $b_weight) ? -1 : 1;
164 });
165 }
166
167 /**
168 * Gets the default langcode.
169 *
170 * @return string
171 * The current default langcode.
172 */
173 protected static function getDefaultLangcode() {
174 $language = \Drupal::service('language.default')->get();
175 return $language->getId();
176 }
177
178 }