%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/nextcloud/3rdparty/punic/punic/src/ |
Current File : //www/varak.net/nextcloud.varak.net/nextcloud/3rdparty/punic/punic/src/Script.php |
<?php namespace Punic; /** * Script helper stuff. */ class Script { /** * Script alternative name: secondary. * * @var string */ const ALTERNATIVENAME_SECONDARY = 'secondary'; /** * Script alternative name: variant. * * @var string */ const ALTERNATIVENAME_VARIANT = 'variant'; /** * Script alternative name: short. * * @var string */ const ALTERNATIVENAME_SHORT = 'short'; /** * Script alternative name: stand alone. * * @var string */ const ALTERNATIVENAME_STANDALONE = 'stand-alone'; /** * Get the list of all the script codes. * * @return string[] */ public static function getAllScriptCodes() { return static::getAvailableScriptCodes('en'); } /** * Get the list of all the available script codes that have a translation for a specific language. * * @param string $locale The locale to use. If empty we'll use the default locale set in \Punic\Data * * @return string[] */ public static function getAvailableScriptCodes($locale) { $data = Data::get('scripts', $locale); $scriptCodes = array_keys($data); sort($scriptCodes); return $scriptCodes; } /** * Get the name of a script given its code. * * @param string|mixed $scriptCode the script code * @param string $preferredVariant the preferred variant (valid values are the values of the ALTERNATIVENAME_... constants) * @param bool $fallbackToEnglish some languages may be missing translation for some scripts: should we look for English names in this case? * @param string $locale The locale to use. If empty we'll use the default locale set in \Punic\Data * * @return string empty string if $scriptCode is not a valid script code * * @see \Punic\Script::ALTERNATIVENAME_SECONDARY * @see \Punic\Script::ALTERNATIVENAME_VARIANT * @see \Punic\Script::ALTERNATIVENAME_SHORT * @see \Punic\Script::ALTERNATIVENAME_STANDALONE */ public static function getScriptName($scriptCode, $preferredVariant = '', $fallbackToEnglish = true, $locale = '') { if (!is_string($scriptCode) || $scriptCode === '') { return ''; } $data = Data::get('scripts', $locale); if (!isset($data[$scriptCode])) { if (!$fallbackToEnglish || $locale === 'en') { return ''; } return self::getScriptName($scriptCode, $preferredVariant, false, 'en'); } return self::extractScriptName($data[$scriptCode], $preferredVariant); } /** * Get all the scripts. * * @param string $preferredVariant the preferred variant (valid values are the values of the ALTERNATIVENAME_... constants) * @param bool $fallbackToEnglish some languages may be missing translation for some scripts: should we look for English names in this case? * @param string $locale The locale to use. If empty we'll use the default locale set in \Punic\Data * * @return array Array keys are the script codes, array values are the script names (the array is sorted by the values) * * @see \Punic\Script::ALTERNATIVENAME_SECONDARY * @see \Punic\Script::ALTERNATIVENAME_VARIANT * @see \Punic\Script::ALTERNATIVENAME_SHORT * @see \Punic\Script::ALTERNATIVENAME_STANDALONE */ public static function getAllScripts($preferredVariant = '', $fallbackToEnglish = true, $locale = '') { $data = Data::get('scripts', $locale); if ($fallbackToEnglish) { $data += Data::get('scripts', 'en'); } $result = array(); foreach ($data as $scriptCode => $scriptData) { $result[$scriptCode] = self::extractScriptName($scriptData, $preferredVariant); } $comparer = new Comparer($locale); $comparer->sort($result, true); return $result; } /** * @param string|array $scriptData * @param string|mixed $preferredVariant * * @return string */ private static function extractScriptName($scriptData, $preferredVariant) { if (is_string($scriptData)) { return $scriptData; } if (!is_string($preferredVariant) || $preferredVariant === '' || !isset($scriptData[$preferredVariant])) { return $scriptData['']; } return $scriptData[$preferredVariant][0]; } }