forked from a64f7bb4-7358-4778-9fbe-3b882c34cc1d/v1
81 lines
2.7 KiB
PHP
81 lines
2.7 KiB
PHP
<?php
|
|
|
|
require __DIR__ . '/../vendor/autoload.php';
|
|
|
|
// Downloaded from http://www.currency-iso.org/en/home/tables/table-a1.html
|
|
$isoCurrencies = __DIR__ . '/assets/c2.xml';
|
|
// Downloaded from https://github.com/unicode-org/cldr-json.git
|
|
$currencyData = __DIR__ . '/assets/cldr/cldr-json/cldr-core/supplemental/currencyData.json';
|
|
$localeDirectory = __DIR__ . '/assets/cldr/cldr-json/cldr-localenames-modern/main/';
|
|
$numbersDirectory = __DIR__ . '/assets/cldr/cldr-json/cldr-numbers-modern/main/';
|
|
|
|
// Preflight checks.
|
|
if (!file_exists($currencyData)) {
|
|
die("The $currencyData file was not found");
|
|
}
|
|
if (!file_exists($isoCurrencies)) {
|
|
die("The $isoCurrencies file was not found");
|
|
}
|
|
if (!is_dir($localeDirectory)) {
|
|
die("The $localeDirectory directory was not found");
|
|
}
|
|
if (!is_dir($numbersDirectory)) {
|
|
die("The $numbersDirectory directory was not found");
|
|
}
|
|
if (!function_exists('collator_create')) {
|
|
// Reimplementing intl's collator would be a huge undertaking, so we
|
|
// use it instead to presort the generated locale specific data.
|
|
die('The intl extension was not found.');
|
|
}
|
|
|
|
// Locales listed without a "-" match all variants.
|
|
// Locales listed with a "-" match only those exact ones.
|
|
$ignoredLocales = [
|
|
// English is our fallback, we don't need another.
|
|
"und",
|
|
// Esperanto, Interlingua, Volapuk are made up languages.
|
|
"eo", "ia", "vo",
|
|
// Belarus (Classical orthography), Church Slavic, Manx,
|
|
// Prussian are historical.
|
|
"be-tarask", "cu", "gv", "prg",
|
|
// Valencian differs from its parent only by a single character (è/é).
|
|
"ca-ES-valencia",
|
|
// Africa secondary languages.
|
|
// Not present in "modern" data, just listed in parentLocales.
|
|
"bm", "byn", "dje", "dyo", "ff", "ha", "shi", "vai", "wo", "yo",
|
|
// Infrequently used locales.
|
|
"jv", "kn", "ml", "row", "sat", "sd", "to",
|
|
];
|
|
|
|
/**
|
|
* Converts the provided data into json and writes it to the disk.
|
|
*/
|
|
function file_put_json($filename, $data)
|
|
{
|
|
$data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
|
// Indenting with tabs instead of 4 spaces gives us 20% smaller files.
|
|
$data = str_replace(' ', "\t", $data);
|
|
file_put_contents($filename, $data);
|
|
}
|
|
|
|
/**
|
|
* Creates a list of available locales.
|
|
*/
|
|
function discover_locales()
|
|
{
|
|
global $localeDirectory, $ignoredLocales;
|
|
|
|
// Gather available locales.
|
|
$locales = [];
|
|
foreach (scandir($localeDirectory) as $entry) {
|
|
if (substr($entry, 0, 1) != '.') {
|
|
$entryParts = explode('-', $entry);
|
|
if (!in_array($entry, $ignoredLocales) && !in_array($entryParts[0], $ignoredLocales)) {
|
|
$locales[] = $entry;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $locales;
|
|
}
|