Newer
Older
<?php
/**
* @file
Dries Buytaert
committed
* Contains \Drupal\Core\Language\LanguageManager.
*/
namespace Drupal\Core\Language;
use Drupal\Component\Utility\String;
use Drupal\Core\StringTranslation\TranslationInterface;
* Class responsible for providing language support on language-unaware sites.
class LanguageManager implements LanguageManagerInterface {
Dries Buytaert
committed
/**
* The string translation service.
Dries Buytaert
committed
*
* @var \Drupal\Core\StringTranslation\TranslationInterface
Dries Buytaert
committed
*/
protected $translation;
/**
* An array of all the available languages keyed by language code.
*
* @var array
*/
protected $languages;
/**
* The default language object.
*
* @var \Drupal\Core\Language\Language
*/
protected $defaultLanguage;
Dries Buytaert
committed
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
function setTranslation(TranslationInterface $translation) {
$this->translation = $translation;
}
Dries Buytaert
committed
/**
* Translates a string to the current language or to a given language.
Dries Buytaert
committed
*
* @see \Drupal\Core\StringTranslation\TranslationInterface()
Dries Buytaert
committed
*/
protected function t($string, array $args = array(), array $options = array()) {
return $this->translation ? $this->translation->translate($string, $args, $options) : String::format($string, $args);
}
Dries Buytaert
committed
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
public function init() {
}
Dries Buytaert
committed
/**
* {@inheritdoc}
*/
public function isMultilingual() {
return FALSE;
}
Dries Buytaert
committed
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
public function getLanguageTypes() {
return array(Language::TYPE_INTERFACE, Language::TYPE_CONTENT, Language::TYPE_URL);
Dries Buytaert
committed
}
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
public function getCurrentLanguage($type = Language::TYPE_INTERFACE) {
return $this->getDefaultLanguage();
Dries Buytaert
committed
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
public function reset($type = NULL) {
}
/**
* {@inheritdoc}
*/
public function getDefaultLanguage() {
if (!isset($this->defaultLanguage)) {
$this->defaultLanguage = new Language(Language::$defaultValues);
Dries Buytaert
committed
}
return $this->defaultLanguage;
Dries Buytaert
committed
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
public function getLanguages($flags = Language::STATE_CONFIGURABLE) {
// Initialize master language list.
if (!isset($this->languages)) {
// No language module, so use the default language only.
$default = $this->getDefaultLanguage();
$this->languages = array($default->id => $default);
// Add the special languages, they will be filtered later if needed.
$this->languages += $this->getDefaultLockedLanguages($default->weight);
Dries Buytaert
committed
}
// Filter the full list of languages based on the value of the $all flag. By
// default we remove the locked languages, but the caller may request for
// those languages to be added as well.
$filtered_languages = array();
// Add the site's default language if flagged as allowed value.
if ($flags & Language::STATE_SITE_DEFAULT) {
$default = isset($default) ? $default : $this->getDefaultLanguage();
// Rename the default language.
$default->name = $this->t("Site's default language (@lang_name)", array('@lang_name' => $default->name));
$filtered_languages['site_default'] = $default;
Dries Buytaert
committed
}
foreach ($this->languages as $id => $language) {
if (($language->locked && ($flags & Language::STATE_LOCKED)) || (!$language->locked && ($flags & Language::STATE_CONFIGURABLE))) {
$filtered_languages[$id] = $language;
}
}
return $filtered_languages;
}
Dries Buytaert
committed
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
public function getLanguage($langcode) {
$languages = $this->getLanguages(Language::STATE_ALL);
return isset($languages[$langcode]) ? $languages[$langcode] : NULL;
Dries Buytaert
committed
}
/**
* {@inheritdoc}
*/
function getLanguageName($langcode) {
if ($langcode == Language::LANGCODE_NOT_SPECIFIED) {
return $this->t('None');
}
if ($language = $this->getLanguage($langcode)) {
return $language->name;
}
if (empty($langcode)) {
return $this->t('Unknown');
}
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
return $this->t('Unknown (@langcode)', array('@langcode' => $langcode));
}
/**
* {@inheritdoc}
*/
public function getDefaultLockedLanguages($weight = 0) {
$languages = array();
$locked_language = array(
'default' => FALSE,
'locked' => TRUE,
);
$languages[Language::LANGCODE_NOT_SPECIFIED] = new Language(array(
'id' => Language::LANGCODE_NOT_SPECIFIED,
'name' => $this->t('Not specified'),
'weight' => ++$weight,
) + $locked_language);
$languages[Language::LANGCODE_NOT_APPLICABLE] = new Language(array(
'id' => Language::LANGCODE_NOT_APPLICABLE,
'name' => $this->t('Not applicable'),
'weight' => ++$weight,
) + $locked_language);
return $languages;
}
/**
* {@inheritdoc}
*/
public function isLanguageLocked($langcode) {
$language = $this->getLanguage($langcode);
return ($language ? $language->locked : FALSE);
}
Dries Buytaert
committed
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
public function getFallbackCandidates($langcode = NULL, array $context = array()) {
return array(Language::LANGCODE_DEFAULT);
Dries Buytaert
committed
}
/**
* {@inheritdoc}
Dries Buytaert
committed
*/
public function getLanguageSwitchLinks($type, $path) {
return array();
Dries Buytaert
committed
}
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
/**
* Some common languages with their English and native names.
*
* Language codes are defined by the W3C language tags document for
* interoperability. Language codes typically have a language and optionally,
* a script or regional variant name. See
* http://www.w3.org/International/articles/language-tags/ for more information.
*
* This list is based on languages available from localize.drupal.org. See
* http://localize.drupal.org/issues for information on how to add languages
* there.
*
* The "Left-to-right marker" comments and the enclosed UTF-8 markers are to
* make otherwise strange looking PHP syntax natural (to not be displayed in
* right to left). See http://drupal.org/node/128866#comment-528929.
*
* @return array
* An array of language code to language name information.
* Language name information itself is an array of English and native names.
*/
public static function getStandardLanguageList() {
return array(
'af' => array('Afrikaans', 'Afrikaans'),
'am' => array('Amharic', 'አማርኛ'),
'ar' => array('Arabic', /* Left-to-right marker "" */ 'العربية', Language::DIRECTION_RTL),
'ast' => array('Asturian', 'Asturianu'),
'az' => array('Azerbaijani', 'Azərbaycanca'),
'be' => array('Belarusian', 'Беларуская'),
'bg' => array('Bulgarian', 'Български'),
'bn' => array('Bengali', 'বাংলা'),
'bo' => array('Tibetan', 'བོད་སྐད་'),
'bs' => array('Bosnian', 'Bosanski'),
'ca' => array('Catalan', 'Català'),
'cs' => array('Czech', 'Čeština'),
'cy' => array('Welsh', 'Cymraeg'),
'da' => array('Danish', 'Dansk'),
'de' => array('German', 'Deutsch'),
'dz' => array('Dzongkha', 'རྫོང་ཁ'),
'el' => array('Greek', 'Ελληνικά'),
'en' => array('English', 'English'),
'eo' => array('Esperanto', 'Esperanto'),
'es' => array('Spanish', 'Español'),
'et' => array('Estonian', 'Eesti'),
'eu' => array('Basque', 'Euskera'),
'fa' => array('Persian, Farsi', /* Left-to-right marker "" */ 'فارسی', Language::DIRECTION_RTL),
'fi' => array('Finnish', 'Suomi'),
'fil' => array('Filipino', 'Filipino'),
'fo' => array('Faeroese', 'Føroyskt'),
'fr' => array('French', 'Français'),
Angie Byron
committed
'fy' => array('Frisian, Western', 'Frysk'),
'ga' => array('Irish', 'Gaeilge'),
'gd' => array('Scots Gaelic', 'Gàidhlig'),
'gl' => array('Galician', 'Galego'),
'gsw-berne' => array('Swiss German', 'Schwyzerdütsch'),
'gu' => array('Gujarati', 'ગુજરાતી'),
'he' => array('Hebrew', /* Left-to-right marker "" */ 'עברית', Language::DIRECTION_RTL),
'hi' => array('Hindi', 'हिन्दी'),
'hr' => array('Croatian', 'Hrvatski'),
'ht' => array('Haitian Creole', 'Kreyòl ayisyen'),
'hu' => array('Hungarian', 'Magyar'),
Angie Byron
committed
'hy' => array('Armenian', 'Հայերեն'),
'id' => array('Indonesian', 'Bahasa Indonesia'),
'is' => array('Icelandic', 'Íslenska'),
'it' => array('Italian', 'Italiano'),
'ja' => array('Japanese', '日本語'),
'jv' => array('Javanese', 'Basa Java'),
'ka' => array('Georgian', 'ქართული ენა'),
'kk' => array('Kazakh', 'Қазақ'),
Angie Byron
committed
'km' => array('Khmer', 'ភាសាខ្មែរ'),
'kn' => array('Kannada', 'ಕನ್ನಡ'),
'ko' => array('Korean', '한국어'),
'ku' => array('Kurdish', 'Kurdî'),
'ky' => array('Kyrgyz', 'Кыргызча'),
'lo' => array('Lao', 'ພາສາລາວ'),
'lt' => array('Lithuanian', 'Lietuvių'),
'lv' => array('Latvian', 'Latviešu'),
'mg' => array('Malagasy', 'Malagasy'),
'mk' => array('Macedonian', 'Македонски'),
'ml' => array('Malayalam', 'മലയാളം'),
'mn' => array('Mongolian', 'монгол'),
'mr' => array('Marathi', 'मराठी'),
Angie Byron
committed
'ms' => array('Bahasa Malaysia', 'بهاس ملايو'),
'my' => array('Burmese', 'ဗမာစကား'),
'ne' => array('Nepali', 'नेपाली'),
'nl' => array('Dutch', 'Nederlands'),
'nb' => array('Norwegian Bokmål', 'Bokmål'),
'nn' => array('Norwegian Nynorsk', 'Nynorsk'),
'oc' => array('Occitan', 'Occitan'),
'pa' => array('Punjabi', 'ਪੰਜਾਬੀ'),
'pl' => array('Polish', 'Polski'),
'pt-pt' => array('Portuguese, Portugal', 'Português, Portugal'),
'pt-br' => array('Portuguese, Brazil', 'Português, Brasil'),
'ro' => array('Romanian', 'Română'),
'ru' => array('Russian', 'Русский'),
'sco' => array('Scots', 'Scots'),
'se' => array('Northern Sami', 'Sámi'),
'si' => array('Sinhala', 'සිංහල'),
'sk' => array('Slovak', 'Slovenčina'),
'sl' => array('Slovenian', 'Slovenščina'),
'sq' => array('Albanian', 'Shqip'),
'sr' => array('Serbian', 'Српски'),
'sv' => array('Swedish', 'Svenska'),
Angie Byron
committed
'sw' => array('Swahili', 'Kiswahili'),
'ta' => array('Tamil', 'தமிழ்'),
'ta-lk' => array('Tamil, Sri Lanka', 'தமிழ், இலங்கை'),
'te' => array('Telugu', 'తెలుగు'),
'th' => array('Thai', 'ภาษาไทย'),
'tr' => array('Turkish', 'Türkçe'),
'tyv' => array('Tuvan', 'Тыва дыл'),
'ug' => array('Uyghur', 'Уйғур'),
'uk' => array('Ukrainian', 'Українська'),
'ur' => array('Urdu', /* Left-to-right marker "" */ 'اردو', Language::DIRECTION_RTL),
'vi' => array('Vietnamese', 'Tiếng Việt'),
'xx-lolspeak' => array('Lolspeak', 'Lolspeak'),
'zh-hans' => array('Chinese, Simplified', '简体中文'),
'zh-hant' => array('Chinese, Traditional', '繁體中文'),
);
}