defaultLocale = $defaultLocale; $this->fallbackLocale = $fallbackLocale; $this->definitionPath = $definitionPath ? $definitionPath : __DIR__ . '/../../resources/language/'; } /** * {@inheritdoc} */ public function get($languageCode, $locale = null) { $locale = $locale ?: $this->defaultLocale; $locale = Locale::resolve($this->availableLocales, $locale, $this->fallbackLocale); $definitions = $this->loadDefinitions($locale); $languageCode = Locale::canonicalize($languageCode); if (!isset($definitions[$languageCode])) { throw new UnknownLanguageException($languageCode); } $language = new Language([ 'language_code' => $languageCode, 'name' => $definitions[$languageCode], 'locale' => $locale, ]); return $language; } /** * {@inheritdoc} */ public function getAll($locale = null) { $locale = $locale ?: $this->defaultLocale; $locale = Locale::resolve($this->availableLocales, $locale, $this->fallbackLocale); $definitions = $this->loadDefinitions($locale); $languages = []; foreach ($definitions as $languageCode => $languageName) { $languages[$languageCode] = new Language([ 'language_code' => $languageCode, 'name' => $languageName, 'locale' => $locale, ]); } return $languages; } /** * {@inheritdoc} */ public function getList($locale = null) { $locale = $locale ?: $this->defaultLocale; $locale = Locale::resolve($this->availableLocales, $locale, $this->fallbackLocale); $definitions = $this->loadDefinitions($locale); $list = []; foreach ($definitions as $languageCode => $languageName) { $list[$languageCode] = $languageName; } return $list; } /** * Loads the language definitions for the provided locale. * * @param string $locale The desired locale. * * @return array */ protected function loadDefinitions($locale) { if (!isset($this->definitions[$locale])) { $filename = $this->definitionPath . $locale . '.json'; $this->definitions[$locale] = json_decode(file_get_contents($filename), true); } return $this->definitions[$locale]; } }