1
0
mirror of https://github.com/nextcloud/ocsms.git synced 2026-08-24 14:45:43 +00:00

Updated phone formatter (#241)

* Add locale and libphonenumber libraries.

* Update country code information

Updated existing country codes, fixed incorrect NANP codes for member countries (as well as several UK based ones).

Also added in Country Name to ISO country code mapping array for use with libphonenumber.

* Convert phone number formatting to use libphonenumber

libphonenumber parses phone number more consistantly than the old regex's that mismatched number on a regular basis.
This commit is contained in:
Greg Ross
2018-06-26 03:49:22 -04:00
committed by Loïc Blot
parent d29e2b1f7f
commit 6e86c48486
1371 changed files with 636043 additions and 284 deletions
+174
View File
@@ -0,0 +1,174 @@
<?php
namespace Giggsey\Locale;
class Locale
{
protected static $dataDir = '../data/';
/**
* Gets the primary language for the input locale
*
* @param string $locale Input locale (e.g. en-GB)
* @return string Primary Language (e.g. en)
*/
public static function getPrimaryLanguage($locale)
{
$parts = explode('-', str_replace('_', '-', $locale));
return strtolower($parts[0]);
}
/**
* Get the region for the input locale
*
* @param string $locale Input locale (e.g. de-CH-1991)
* @return string Region (e.g. CH)
*/
public static function getRegion($locale)
{
$parts = explode('-', str_replace('_', '-', $locale));
if (count($parts) === 1) {
return '';
}
$region = end($parts);
if (strlen($region) === 4) {
return '';
}
if ($region === 'POSIX') {
$region = 'US';
}
return strtoupper($region);
}
/**
* Get the localised display name for the region of the input locale
*
* @param string $locale The locale to return a display region for
* @param string $inLocale Format locale to display the region name
* @return string Display name for the region, or an empty string if no result could be found
*/
public static function getDisplayRegion($locale, $inLocale)
{
$dataDir = __DIR__ . DIRECTORY_SEPARATOR . static::$dataDir;
// Convert $locale into a region
$region = static::getRegion($locale);
$regionList = require $dataDir . '_list.php';
/*
* Loop through each part of the $inLocale, and see if we have data for that locale
*
* E.g zh-Hans-HK will look for zh-Hanks-HK, zh-Hanks, then finally zh
*/
$fallbackParts = explode('-', str_replace('_', '-', $inLocale));
$filesToSearch = array();
$i = count($fallbackParts);
while ($i > 0) {
$searchLocale = strtolower(implode('-', $fallbackParts));
if (isset($regionList[$searchLocale])) {
$filesToSearch[] = $searchLocale;
}
array_pop($fallbackParts);
$i--;
}
/*
* Load data files, and load the region (if it exists) from it
*/
foreach ($filesToSearch as $fileToSearch) {
// Load data file
$data = require $dataDir . $fileToSearch . '.php';
if (isset($data[$region])) {
return $data[$region];
}
}
return '';
}
public static function getVersion()
{
$file = __DIR__ . DIRECTORY_SEPARATOR . static::$dataDir . '_version.php';
return require $file;
}
/**
* Return a list of all the supported locales
*
* @return string[]
*/
public static function getSupportedLocales()
{
$dataDir = __DIR__ . DIRECTORY_SEPARATOR . static::$dataDir;
$regionList = require $dataDir . '_list.php';
return array_keys($regionList);
}
/**
* Load a list of all countries supported by a particular Locale
*
* @param string $locale
* @return string[] Associative array of Country Code => Country Name
* @throws \RuntimeException On an invalid region
*/
public static function getAllCountriesForLocale($locale)
{
$dataDir = __DIR__ . DIRECTORY_SEPARATOR . static::$dataDir;
$regionList = require $dataDir . '_list.php';
if (!isset($regionList[$locale])) {
throw new \RuntimeException("Locale is not supported");
}
/*
* Loop through each part of the $locale, and load data for that locale
*
* E.g zh-Hans-HK will look for zh-Hanks-HK, zh-Hanks, then finally zh
*/
$fallbackParts = explode('-', str_replace('_', '-', $locale));
$filesToSearch = array();
$i = count($fallbackParts);
while ($i > 0) {
$searchLocale = strtolower(implode('-', $fallbackParts));
if (isset($regionList[$searchLocale])) {
$filesToSearch[] = $searchLocale;
}
array_pop($fallbackParts);
$i--;
}
/*
* Load data files, and load the region (if it exists) from it
*/
$returnData = array();
foreach ($filesToSearch as $fileToSearch) {
// Load data file
$data = require $dataDir . $fileToSearch . '.php';
$returnData += $data;
}
ksort($returnData);
return $returnData;
}
}