aboutsummaryrefslogtreecommitdiffstats
path: root/library/intl/src/Language/LanguageRepository.php
diff options
context:
space:
mode:
authorRedMatrix <info@friendica.com>2015-01-01 21:23:48 +1100
committerRedMatrix <info@friendica.com>2015-01-01 21:23:48 +1100
commit93b94704878c1b66ee95987de2b24dc39163763a (patch)
tree10629014e807e94da785fcf51fcf54137c03e66c /library/intl/src/Language/LanguageRepository.php
parent26069e6ca189533152c825a96755f7ef31cb28a8 (diff)
parent127527f9e9e02adb77a282c71bdd41525c859c45 (diff)
downloadvolse-hubzilla-93b94704878c1b66ee95987de2b24dc39163763a.tar.gz
volse-hubzilla-93b94704878c1b66ee95987de2b24dc39163763a.tar.bz2
volse-hubzilla-93b94704878c1b66ee95987de2b24dc39163763a.zip
Merge pull request #800 from pafcu/lang
Language names
Diffstat (limited to 'library/intl/src/Language/LanguageRepository.php')
-rw-r--r--library/intl/src/Language/LanguageRepository.php96
1 files changed, 96 insertions, 0 deletions
diff --git a/library/intl/src/Language/LanguageRepository.php b/library/intl/src/Language/LanguageRepository.php
new file mode 100644
index 000000000..50335cdc0
--- /dev/null
+++ b/library/intl/src/Language/LanguageRepository.php
@@ -0,0 +1,96 @@
+<?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 = array();
+
+ /**
+ * 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($definitions[$languageCode], $locale);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getAll($locale = null, $fallbackLocale = null)
+ {
+ $locale = $this->resolveLocale($locale, $fallbackLocale);
+ $definitions = $this->loadDefinitions($locale);
+ $languages = array();
+ foreach ($definitions as $languageCode => $definition) {
+ $languages[$languageCode] = $this->createLanguageFromDefinition($definition, $locale);
+ }
+
+ return $languages;
+ }
+
+ /**
+ * 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 array $definition The language definition.
+ * @param string $locale The locale of the language definition.
+ *
+ * @return Language
+ */
+ protected function createLanguageFromDefinition(array $definition, $locale)
+ {
+ $language = new Language();
+ $language->setLanguageCode($definition['code']);
+ $language->setName($definition['name']);
+ $language->setLocale($locale);
+
+ return $language;
+ }
+}