v1/vendor/commerceguys/intl/scripts/generate_base.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;
}