diff options
author | git-marijus <mario@mariovavti.com> | 2017-11-04 10:22:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-04 10:22:58 +0100 |
commit | cfbeb1655daba511f4843b8ba070a247e233fb29 (patch) | |
tree | 8ef7bf1e06a5d223228b370121bda97695af7d0e /vendor/commerceguys/intl/src/Language/LanguageRepository.php | |
parent | 1a737be2b408135177a9e94dcffd0f68c0aca90b (diff) | |
parent | 39c194c5c32e49f461b8b42a3f4e411a3a5cde3c (diff) | |
download | volse-hubzilla-cfbeb1655daba511f4843b8ba070a247e233fb29.tar.gz volse-hubzilla-cfbeb1655daba511f4843b8ba070a247e233fb29.tar.bz2 volse-hubzilla-cfbeb1655daba511f4843b8ba070a247e233fb29.zip |
Merge branch 'dev' into docu
Diffstat (limited to 'vendor/commerceguys/intl/src/Language/LanguageRepository.php')
-rw-r--r-- | vendor/commerceguys/intl/src/Language/LanguageRepository.php | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/vendor/commerceguys/intl/src/Language/LanguageRepository.php b/vendor/commerceguys/intl/src/Language/LanguageRepository.php new file mode 100644 index 000000000..4fc02f2ff --- /dev/null +++ b/vendor/commerceguys/intl/src/Language/LanguageRepository.php @@ -0,0 +1,115 @@ +<?php + +namespace CommerceGuys\Intl\Language; + +use CommerceGuys\Intl\LocaleResolverTrait; +use CommerceGuys\Intl\Exception\UnknownLanguageException; + +/** + * Manages languages based on JSON definitions. + */ +class LanguageRepository implements LanguageRepositoryInterface +{ + use LocaleResolverTrait; + + /** + * Per-locale language definitions. + * + * @var array + */ + protected $definitions = []; + + /** + * Creates a LanguageRepository instance. + * + * @param string $definitionPath The path to the currency definitions. + * Defaults to 'resources/language'. + */ + public function __construct($definitionPath = null) + { + $this->definitionPath = $definitionPath ? $definitionPath : __DIR__ . '/../../resources/language/'; + } + + /** + * {@inheritdoc} + */ + public function get($languageCode, $locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + if (!isset($definitions[$languageCode])) { + throw new UnknownLanguageException($languageCode); + } + + return $this->createLanguageFromDefinition($languageCode, $definitions[$languageCode], $locale); + } + + /** + * {@inheritdoc} + */ + public function getAll($locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + $languages = []; + foreach ($definitions as $languageCode => $definition) { + $languages[$languageCode] = $this->createLanguageFromDefinition($languageCode, $definition, $locale); + } + + return $languages; + } + + /** + * {@inheritdoc} + */ + public function getList($locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + $list = []; + foreach ($definitions as $languageCode => $definition) { + $list[$languageCode] = $definition['name']; + } + + 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]; + } + + /** + * Creates a language object from the provided definition. + * + * @param string $languageCode The language code. + * @param array $definition The language definition. + * @param string $locale The locale of the language definition. + * + * @return Language + */ + protected function createLanguageFromDefinition($languageCode, array $definition, $locale) + { + $language = new Language(); + $setValues = \Closure::bind(function ($languageCode, $definition, $locale) { + $this->languageCode = $languageCode; + $this->name = $definition['name']; + $this->locale = $locale; + }, $language, '\CommerceGuys\Intl\Language\Language'); + $setValues($languageCode, $definition, $locale); + + return $language; + } +} |