diff options
Diffstat (limited to 'vendor/commerceguys/intl/src/Country')
5 files changed, 464 insertions, 0 deletions
diff --git a/vendor/commerceguys/intl/src/Country/Country.php b/vendor/commerceguys/intl/src/Country/Country.php new file mode 100644 index 000000000..7063e7d58 --- /dev/null +++ b/vendor/commerceguys/intl/src/Country/Country.php @@ -0,0 +1,168 @@ +<?php + +namespace CommerceGuys\Intl\Country; + +class Country implements CountryEntityInterface +{ + /** + * The two-letter country code. + * + * @var string + */ + protected $countryCode; + + /** + * The country name. + * + * @var string + */ + protected $name; + + /** + * The three-letter country code. + * + * @var string + */ + protected $threeLetterCode; + + /** + * The numeric country code. + * + * @var string + */ + protected $numericCode; + + /** + * The country currency code. + * + * @var string + */ + protected $currencyCode; + + /** + * The country locale (i.e. "en_US"). + * + * The country name is locale specific. + * + * @var string + */ + protected $locale; + + /** + * Returns the string representation of the Country. + * + * @return string + */ + public function __toString() + { + return $this->getCountryCode(); + } + + /** + * {@inheritdoc} + */ + public function getCountryCode() + { + return $this->countryCode; + } + + /** + * {@inheritdoc} + */ + public function setCountryCode($countryCode) + { + $this->countryCode = $countryCode; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function setName($name) + { + $this->name = $name; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getThreeLetterCode() + { + return $this->threeLetterCode; + } + + /** + * {@inheritdoc} + */ + public function setThreeLetterCode($threeLetterCode) + { + $this->threeLetterCode = $threeLetterCode; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getNumericCode() + { + return $this->numericCode; + } + + /** + * {@inheritdoc} + */ + public function setNumericCode($numericCode) + { + $this->numericCode = $numericCode; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getCurrencyCode() + { + return $this->currencyCode; + } + + /** + * {@inheritdoc} + */ + public function setCurrencyCode($currencyCode) + { + $this->currencyCode = $currencyCode; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getLocale() + { + return $this->locale; + } + + /** + * {@inheritdoc} + */ + public function setLocale($locale) + { + $this->locale = $locale; + + return $this; + } +} diff --git a/vendor/commerceguys/intl/src/Country/CountryEntityInterface.php b/vendor/commerceguys/intl/src/Country/CountryEntityInterface.php new file mode 100644 index 000000000..b22bcd42f --- /dev/null +++ b/vendor/commerceguys/intl/src/Country/CountryEntityInterface.php @@ -0,0 +1,51 @@ +<?php + +namespace CommerceGuys\Intl\Country; + +interface CountryEntityInterface extends CountryInterface +{ + /** + * Sets the two-letter country code. + * + * @param string $countryCode The two-letter country code. + * + * @return self + */ + public function setCountryCode($countryCode); + + /** + * Sets the country name. + * + * @param string $name The country name. + * + * @return self + */ + public function setName($name); + + /** + * Sets the three-letter country code. + * + * @param string $threeLetterCode The three-letter country code. + * + * @return self + */ + public function setThreeLetterCode($threeLetterCode); + + /** + * Sets the numeric country code. + * + * @param string $numericCode The numeric country code. + * + * @return self + */ + public function setNumericCode($numericCode); + + /** + * Sets the country currency code. + * + * @param string $currencyCode The currency code. + * + * @return self + */ + public function setCurrencyCode($currencyCode); +} diff --git a/vendor/commerceguys/intl/src/Country/CountryInterface.php b/vendor/commerceguys/intl/src/Country/CountryInterface.php new file mode 100644 index 000000000..f6aaf91b2 --- /dev/null +++ b/vendor/commerceguys/intl/src/Country/CountryInterface.php @@ -0,0 +1,61 @@ +<?php + +namespace CommerceGuys\Intl\Country; + +interface CountryInterface +{ + /** + * Gets the two-letter country code. + * + * @return string + */ + public function getCountryCode(); + + /** + * Gets the country name. + * + * Note that certain locales have incomplete translations, in which + * case the english version of the country name is used instead. + * + * @return string + */ + public function getName(); + + /** + * Gets the three-letter country code. + * + * Note that not every country has a three-letter code. + * CLDR lists "Canary Islands" (IC) and "Ceuta and Melilla" (EA) + * as separate countries, even though they are formally a part of Spain + * and have no three-letter or numeric ISO codes. + * + * @return string|null + */ + public function getThreeLetterCode(); + + /** + * Gets the numeric country code. + * + * The numeric code has three digits, and the first one can be a zero, + * hence the need to pass it around as a string. + * + * Note that not every country has a numeric code. + * CLDR lists "Canary Islands" (IC) and "Ceuta and Melilla" (EA) + * as separate countries, even though they are formally a part of Spain + * and have no three-letter or numeric ISO codes. + * "Ascension Island" (AE) also has no numeric code, even though it has a + * three-letter code. + * + * @return string|null + */ + public function getNumericCode(); + + /** + * Gets the country currency code. + * + * Represents the default currency used in the country, if known. + * + * @return string|null + */ + public function getCurrencyCode(); +} diff --git a/vendor/commerceguys/intl/src/Country/CountryRepository.php b/vendor/commerceguys/intl/src/Country/CountryRepository.php new file mode 100644 index 000000000..fb027dc2f --- /dev/null +++ b/vendor/commerceguys/intl/src/Country/CountryRepository.php @@ -0,0 +1,143 @@ +<?php + +namespace CommerceGuys\Intl\Country; + +use CommerceGuys\Intl\LocaleResolverTrait; +use CommerceGuys\Intl\Exception\UnknownCountryException; + +/** + * Manages countries based on JSON definitions. + */ +class CountryRepository implements CountryRepositoryInterface +{ + use LocaleResolverTrait; + + /** + * Base country definitions. + * + * Contains data common to all locales, such as the country numeric, + * three-letter, currency codes. + * + * @var array + */ + protected $baseDefinitions = []; + + /** + * Per-locale country definitions. + * + * @var array + */ + protected $definitions = []; + + /** + * Creates a CountryRepository instance. + * + * @param string $definitionPath The path to the country definitions. + * Defaults to 'resources/country'. + */ + public function __construct($definitionPath = null) + { + $this->definitionPath = $definitionPath ? $definitionPath : __DIR__ . '/../../resources/country/'; + } + + /** + * {@inheritdoc} + */ + public function get($countryCode, $locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + if (!isset($definitions[$countryCode])) { + throw new UnknownCountryException($countryCode); + } + + return $this->createCountryFromDefinition($countryCode, $definitions[$countryCode], $locale); + } + + /** + * {@inheritdoc} + */ + public function getAll($locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + $countries = []; + foreach ($definitions as $countryCode => $definition) { + $countries[$countryCode] = $this->createCountryFromDefinition($countryCode, $definition, $locale); + } + + return $countries; + } + + /** + * {@inheritdoc} + */ + public function getList($locale = null, $fallbackLocale = null) + { + $locale = $this->resolveLocale($locale, $fallbackLocale); + $definitions = $this->loadDefinitions($locale); + $list = []; + foreach ($definitions as $countryCode => $definition) { + $list[$countryCode] = $definition['name']; + } + + return $list; + } + + /** + * Loads the country 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 $countryCode => $definition) { + $this->definitions[$locale][$countryCode] += $this->baseDefinitions[$countryCode]; + } + } + + return $this->definitions[$locale]; + } + + /** + * Creates a country object from the provided definition. + * + * @param string $countryCode The country code. + * @param array $definition The country definition. + * @param string $locale The locale of the country definition. + * + * @return Country + */ + protected function createCountryFromDefinition($countryCode, array $definition, $locale) + { + $country = new Country(); + $setValues = \Closure::bind(function ($countryCode, $definition, $locale) { + $this->countryCode = $countryCode; + $this->name = $definition['name']; + $this->locale = $locale; + if (isset($definition['three_letter_code'])) { + $this->threeLetterCode = $definition['three_letter_code']; + } + if (isset($definition['numeric_code'])) { + $this->numericCode = $definition['numeric_code']; + } + if (isset($definition['currency_code'])) { + $this->currencyCode = $definition['currency_code']; + } + }, $country, '\CommerceGuys\Intl\Country\Country'); + $setValues($countryCode, $definition, $locale); + + return $country; + } +} diff --git a/vendor/commerceguys/intl/src/Country/CountryRepositoryInterface.php b/vendor/commerceguys/intl/src/Country/CountryRepositoryInterface.php new file mode 100644 index 000000000..fbcd5551e --- /dev/null +++ b/vendor/commerceguys/intl/src/Country/CountryRepositoryInterface.php @@ -0,0 +1,41 @@ +<?php + +namespace CommerceGuys\Intl\Country; + +/** + * Country repository interface. + */ +interface CountryRepositoryInterface +{ + /** + * Returns a country instance matching the provided country code. + * + * @param string $countryCode The country code. + * @param string $locale The locale (i.e. fr-FR). + * @param string $fallbackLocale A fallback locale (i.e "en"). + * + * @return CountryInterface + */ + public function get($countryCode, $locale = null, $fallbackLocale = null); + + /** + * Returns all country instances. + * + * @param string $locale The locale (i.e. fr-FR). + * @param string $fallbackLocale A fallback locale (i.e "en"). + * + * @return array An array of countries implementing the CountryInterface, + * keyed by country code. + */ + public function getAll($locale = null, $fallbackLocale = null); + + /** + * Returns a list of countries. + * + * @param string $locale The locale (i.e. fr-FR). + * @param string $fallbackLocale A fallback locale (i.e "en"). + * + * @return array An array of country names, keyed by country code. + */ + public function getList($locale = null, $fallbackLocale = null); +} |