Revert "Revert "Language names via intl library.""
This reverts commit 4f35efa0ba.
This commit is contained in:
168
library/intl/src/Country/Country.php
Normal file
168
library/intl/src/Country/Country.php
Normal file
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
|
||||
namespace CommerceGuys\Intl\Country;
|
||||
|
||||
class Country implements CountryInterface
|
||||
{
|
||||
/**
|
||||
* 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 telephone code.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $telephoneCode;
|
||||
|
||||
/**
|
||||
* 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 getTelephoneCode()
|
||||
{
|
||||
return $this->telephoneCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setTelephoneCode($telephoneCode)
|
||||
{
|
||||
$this->telephoneCode = $telephoneCode;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getLocale()
|
||||
{
|
||||
return $this->locale;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setLocale($locale)
|
||||
{
|
||||
$this->locale = $locale;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
99
library/intl/src/Country/CountryInterface.php
Normal file
99
library/intl/src/Country/CountryInterface.php
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
|
||||
namespace CommerceGuys\Intl\Country;
|
||||
|
||||
interface CountryInterface
|
||||
{
|
||||
/**
|
||||
* Gets the two-letter country code.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getCountryCode();
|
||||
|
||||
/**
|
||||
* Sets the two-letter country code.
|
||||
*
|
||||
* @param string $countryCode The two-letter country code.
|
||||
*/
|
||||
public function setCountryCode($countryCode);
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
||||
/**
|
||||
* Sets the country name.
|
||||
*
|
||||
* @param string $name The country name.
|
||||
*/
|
||||
public function setName($name);
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
||||
/**
|
||||
* Sets the three-letter country code.
|
||||
*
|
||||
* @param string $threeLetterCode The three-letter country code.
|
||||
*/
|
||||
public function setThreeLetterCode($threeLetterCode);
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
||||
/**
|
||||
* Sets the numeric country code.
|
||||
*
|
||||
* @param string $numericCode The numeric country code.
|
||||
*/
|
||||
public function setNumericCode($numericCode);
|
||||
|
||||
/**
|
||||
* Gets the country telephone code.
|
||||
*
|
||||
* Also known as the calling code.
|
||||
*
|
||||
* Note that not every country has a telephone code.
|
||||
* Right now Tristan da Cunha (TI) is the only such example.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTelephoneCode();
|
||||
|
||||
/**
|
||||
* Sets the country telephone code.
|
||||
*
|
||||
* @param string $telephoneCode The telephone code.
|
||||
*/
|
||||
public function setTelephoneCode($telephoneCode);
|
||||
}
|
||||
124
library/intl/src/Country/CountryRepository.php
Normal file
124
library/intl/src/Country/CountryRepository.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<?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, telephone codes.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $baseDefinitions = array();
|
||||
|
||||
/**
|
||||
* Per-locale country definitions.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $definitions = array();
|
||||
|
||||
/**
|
||||
* 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($definitions[$countryCode], $locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getAll($locale = null, $fallbackLocale = null)
|
||||
{
|
||||
$locale = $this->resolveLocale($locale, $fallbackLocale);
|
||||
$definitions = $this->loadDefinitions($locale);
|
||||
$countries = array();
|
||||
foreach ($definitions as $countryCode => $definition) {
|
||||
$countries[$countryCode] = $this->createCountryFromDefinition($definition, $locale);
|
||||
}
|
||||
|
||||
return $countries;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 array $definition The country definition.
|
||||
* @param string $locale The locale of the country definition.
|
||||
*
|
||||
* @return Country
|
||||
*/
|
||||
protected function createCountryFromDefinition(array $definition, $locale)
|
||||
{
|
||||
$country = new Country();
|
||||
$country->setCountryCode($definition['code']);
|
||||
$country->setName($definition['name']);
|
||||
$country->setLocale($locale);
|
||||
if (isset($definition['three_letter_code'])) {
|
||||
$country->setThreeLetterCode($definition['three_letter_code']);
|
||||
}
|
||||
if (isset($definition['numeric_code'])) {
|
||||
$country->setNumericCode($definition['numeric_code']);
|
||||
}
|
||||
if (isset($definition['telephone_code'])) {
|
||||
$country->setTelephoneCode($definition['telephone_code']);
|
||||
}
|
||||
|
||||
return $country;
|
||||
}
|
||||
}
|
||||
31
library/intl/src/Country/CountryRepositoryInterface.php
Normal file
31
library/intl/src/Country/CountryRepositoryInterface.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?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 available 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);
|
||||
}
|
||||
Reference in New Issue
Block a user