diff options
author | Stefan Parviainen <saparvia@caterva.eu> | 2014-12-30 19:57:12 +0100 |
---|---|---|
committer | Stefan Parviainen <saparvia@caterva.eu> | 2014-12-30 20:29:31 +0100 |
commit | 9cab8ae58a29ecf7387e6865aa170715caeabf04 (patch) | |
tree | 97c4791763ecb7c877c13b562a0ad3b80857b9d7 /library/intl/src/Language | |
parent | 8e034a3b6b67a9aaa20fe9db671350e198fe7c42 (diff) | |
download | volse-hubzilla-9cab8ae58a29ecf7387e6865aa170715caeabf04.tar.gz volse-hubzilla-9cab8ae58a29ecf7387e6865aa170715caeabf04.tar.bz2 volse-hubzilla-9cab8ae58a29ecf7387e6865aa170715caeabf04.zip |
Language names via intl library. Fixes #773
Diffstat (limited to 'library/intl/src/Language')
-rw-r--r-- | library/intl/src/Language/Language.php | 91 | ||||
-rw-r--r-- | library/intl/src/Language/LanguageInterface.php | 37 | ||||
-rw-r--r-- | library/intl/src/Language/LanguageRepository.php | 96 | ||||
-rw-r--r-- | library/intl/src/Language/LanguageRepositoryInterface.php | 31 |
4 files changed, 255 insertions, 0 deletions
diff --git a/library/intl/src/Language/Language.php b/library/intl/src/Language/Language.php new file mode 100644 index 000000000..259b57249 --- /dev/null +++ b/library/intl/src/Language/Language.php @@ -0,0 +1,91 @@ +<?php + +namespace CommerceGuys\Intl\Language; + +class Language implements LanguageInterface +{ + /** + * The two-letter language code. + * + * @var string + */ + protected $languageCode; + + /** + * The language name. + * + * @var string + */ + protected $name; + + /** + * The language locale (i.e. "en-US"). + * + * @var string + */ + protected $locale; + + /** + * Returns the string representation of the Language. + * + * @return string + */ + public function __toString() + { + return $this->getLanguageCode(); + } + + /** + * {@inheritdoc} + */ + public function getLanguageCode() + { + return $this->languageCode; + } + + /** + * {@inheritdoc} + */ + public function setLanguageCode($languageCode) + { + $this->languageCode = $languageCode; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function setName($name) + { + $this->name = $name; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getLocale() + { + return $this->locale; + } + + /** + * {@inheritdoc} + */ + public function setLocale($locale) + { + $this->locale = $locale; + + return $this; + } +} diff --git a/library/intl/src/Language/LanguageInterface.php b/library/intl/src/Language/LanguageInterface.php new file mode 100644 index 000000000..612389142 --- /dev/null +++ b/library/intl/src/Language/LanguageInterface.php @@ -0,0 +1,37 @@ +<?php + +namespace CommerceGuys\Intl\Language; + +interface LanguageInterface +{ + /** + * Gets the two-letter language code. + * + * @return string + */ + public function getLanguageCode(); + + /** + * Sets the two-letter language code. + * + * @param string $languageCode The two-letter language code. + */ + public function setLanguageCode($languageCode); + + /** + * Gets the language name. + * + * Note that certain locales have incomplete translations, in which + * case the english version of the language name is used instead. + * + * @return string + */ + public function getName(); + + /** + * Sets the language name. + * + * @param string $name The language name. + */ + public function setName($name); +} 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; + } +} diff --git a/library/intl/src/Language/LanguageRepositoryInterface.php b/library/intl/src/Language/LanguageRepositoryInterface.php new file mode 100644 index 000000000..ebdc0200a --- /dev/null +++ b/library/intl/src/Language/LanguageRepositoryInterface.php @@ -0,0 +1,31 @@ +<?php + +namespace CommerceGuys\Intl\Language; + +/** + * Language repository interface. + */ +interface LanguageRepositoryInterface +{ + /** + * Returns a language instance matching the provided language code. + * + * @param string $languageCode The language code. + * @param string $locale The locale (i.e. fr-FR). + * @param string $fallbackLocale A fallback locale (i.e "en"). + * + * @return LanguageInterface + */ + public function get($languageCode, $locale = null, $fallbackLocale = null); + + /** + * Returns all available language instances. + * + * @param string $locale The locale (i.e. fr-FR). + * @param string $fallbackLocale A fallback locale (i.e "en"). + * + * @return array An array of language implementing the LanguageInterface, + * keyed by language code. + */ + public function getAll($locale = null, $fallbackLocale = null); +} |