diff options
author | RedMatrix <info@friendica.com> | 2014-12-31 10:21:53 +1100 |
---|---|---|
committer | RedMatrix <info@friendica.com> | 2014-12-31 10:21:53 +1100 |
commit | 7b0b0dd76f97118e5cae64c2d444d9343da7074c (patch) | |
tree | 895de27ff85b372fd9bbb5f829942e329001a7ef /library/intl/src/Currency/CurrencyRepository.php | |
parent | 4a82967639e662821de177e3bd829b735b4eb24e (diff) | |
parent | b54bbf0fb8af72bd5273597f564f084aa1c1ac79 (diff) | |
download | volse-hubzilla-7b0b0dd76f97118e5cae64c2d444d9343da7074c.tar.gz volse-hubzilla-7b0b0dd76f97118e5cae64c2d444d9343da7074c.tar.bz2 volse-hubzilla-7b0b0dd76f97118e5cae64c2d444d9343da7074c.zip |
Merge pull request #794 from pafcu/lang
Language names via intl library.
Diffstat (limited to 'library/intl/src/Currency/CurrencyRepository.php')
-rw-r--r-- | library/intl/src/Currency/CurrencyRepository.php | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/library/intl/src/Currency/CurrencyRepository.php b/library/intl/src/Currency/CurrencyRepository.php new file mode 100644 index 000000000..84d0d4522 --- /dev/null +++ b/library/intl/src/Currency/CurrencyRepository.php @@ -0,0 +1,122 @@ +<?php + +namespace CommerceGuys\Intl\Currency; + +use CommerceGuys\Intl\LocaleResolverTrait; +use CommerceGuys\Intl\Exception\UnknownCurrencyException; + +/** + * Manages currencies based on JSON definitions. + */ +class CurrencyRepository implements CurrencyRepositoryInterface +{ + use LocaleResolverTrait; + + /** + * Base currency definitions. + * + * Contains data common to all locales, such as the currency numeric + * code, number of fraction digits. + * + * @var array + */ + protected $baseDefinitions = array(); + + /** + * Per-locale currency definitions. + * + * @var array + */ + protected $definitions = array(); + + /** + * Creates a CurrencyRepository instance. + * + * @param string $definitionPath The path to the currency definitions. + * Defaults to 'resources/currency'. + */ + public function __construct($definitionPath = null) + { + $this->definitionPath = $definitionPath ? $definitionPath : __DIR__ . '/../../resources/currency/'; + } + + /** + * {@inheritdoc} + */ + public function get($currencyCode, $locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + if (!isset($definitions[$currencyCode])) { + throw new UnknownCurrencyException($currencyCode); + } + + return $this->createCurrencyFromDefinition($definitions[$currencyCode], $locale); + } + + /** + * {@inheritdoc} + */ + public function getAll($locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + $currencies = array(); + foreach ($definitions as $currencyCode => $definition) { + $currencies[$currencyCode] = $this->createCurrencyFromDefinition($definition, $locale); + } + + return $currencies; + } + + /** + * Loads the currency 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); + + // Make sure the base definitions have been loaded. + if (empty($this->baseDefinitions)) { + $this->baseDefinitions = json_decode(file_get_contents($this->definitionPath . 'base.json'), true); + } + // Merge-in base definitions. + foreach ($this->definitions[$locale] as $currencyCode => $definition) { + $this->definitions[$locale][$currencyCode] += $this->baseDefinitions[$currencyCode]; + } + } + + return $this->definitions[$locale]; + } + + /** + * Creates a currency object from the provided definition. + * + * @param array $definition The currency definition. + * @param string $locale The locale of the currency definition. + * + * @return Currency + */ + protected function createCurrencyFromDefinition(array $definition, $locale) + { + if (!isset($definition['fraction_digits'])) { + $definition['fraction_digits'] = 2; + } + + $currency = new Currency(); + $currency->setCurrencyCode($definition['code']); + $currency->setName($definition['name']); + $currency->setNumericCode($definition['numeric_code']); + $currency->setFractionDigits($definition['fraction_digits']); + $currency->setSymbol($definition['symbol']); + $currency->setLocale($locale); + + return $currency; + } +} |