blob: cd52460544faa8650bb0c27b434c8bc0c423214e [file] [log] [blame]
<?php
/**
* Holds locale data for all the locales we currently support
* If we switch to php5, all of these functions can become static with some tweaking.
*
* @author Wil Clouser <clouserw@mozilla.com>
*/
class localeDetails {
/**
* An array of English and native names of all the locales we support.
*
* @var array
*/
var $languages = array(
'af' => array( 'English' => 'Afrikaans', 'native' => 'Afrikaans'),
'ach' => array( 'English' => 'Acholi', 'native' => 'Acholi'),
'ak' => array( 'English' => 'Akan', 'native' => 'Akan'), // unverified native name
'am-et' => array( 'English' => 'Amharic', 'native' => 'አማርኛ'),
'an' => array( 'English' => 'Aragonese', 'native' => 'aragonés'),
'ar' => array( 'English' => 'Arabic', 'native' => 'عربي'),
'as' => array( 'English' => 'Assamese', 'native' => 'অসমীয়া'),
'ast' => array( 'English' => 'Asturian', 'native' => 'Asturianu'),
'az' => array( 'English' => 'Azerbaijani', 'native' => 'Azərbaycanca'),
'be' => array( 'English' => 'Belarusian', 'native' => 'Беларуская'),
'bg' => array( 'English' => 'Bulgarian', 'native' => 'Български'),
'bn-BD' => array( 'English' => 'Bengali (Bangladesh)', 'native' => 'বাংলা (বাংলাদেশ)'),
'bn-IN' => array( 'English' => 'Bengali (India)', 'native' => 'বাংলা (ভারত)'),
'br' => array( 'English' => 'Breton', 'native' => 'Brezhoneg'),
'bs' => array( 'English' => 'Bosnian', 'native' => 'Bosanski'),
'ca' => array( 'English' => 'Catalan', 'native' => 'Català'),
'ca-valencia'=> array( 'English' => 'Catalan (Valencian)', 'native' => 'català (valencià)'), // not iso-639-1. a=l10n-drivers
'cs' => array( 'English' => 'Czech', 'native' => 'Čeština'),
'csb' => array( 'English' => 'Kashubian', 'native' => 'Kaszëbsczi'),
'cy' => array( 'English' => 'Welsh', 'native' => 'Cymraeg'),
'da' => array( 'English' => 'Danish', 'native' => 'Dansk'),
'dbg' => array( 'English' => 'Debug Robot', 'native' => 'Ḓḗƀŭɠ Řǿƀǿŧ'), # Used for site debugging
'de' => array( 'English' => 'German', 'native' => 'Deutsch'),
'de-AT' => array( 'English' => 'German (Austria)', 'native' => 'Deutsch (Österreich)'),
'de-CH' => array( 'English' => 'German (Switzerland)', 'native' => 'Deutsch (Schweiz)'),
'de-DE' => array( 'English' => 'German (Germany)', 'native' => 'Deutsch (Deutschland)'),
'dsb' => array( 'English' => 'Lower Sorbian', 'native' => 'Dolnoserbšćina'), // iso-639-2
'el' => array( 'English' => 'Greek', 'native' => 'Ελληνικά'),
'en-AU' => array( 'English' => 'English (Australian)', 'native' => 'English (Australian)'),
'en-CA' => array( 'English' => 'English (Canadian)', 'native' => 'English (Canadian)'),
'en-GB' => array( 'English' => 'English (British)', 'native' => 'English (British)'),
'en-NZ' => array( 'English' => 'English (New Zealand)', 'native' => 'English (New Zealand)'),
'en-US' => array( 'English' => 'English (US)', 'native' => 'English (US)'),
'en-ZA' => array( 'English' => 'English (South African)', 'native' => 'English (South African)'),
'eo' => array( 'English' => 'Esperanto', 'native' => 'Esperanto'),
'es' => array( 'English' => 'Spanish', 'native' => 'Español'),
'es-AR' => array( 'English' => 'Spanish (Argentina)', 'native' => 'Español (de Argentina)'),
'es-CL' => array( 'English' => 'Spanish (Chile)', 'native' => 'Español (de Chile)'),
'es-ES' => array( 'English' => 'Spanish (Spain)', 'native' => 'Español (de España)'),
'es-MX' => array( 'English' => 'Spanish (Mexico)', 'native' => 'Español (de México)'),
'et' => array( 'English' => 'Estonian', 'native' => 'Eesti keel'),
'eu' => array( 'English' => 'Basque', 'native' => 'Euskara'),
'fa' => array( 'English' => 'Persian', 'native' => 'فارسی'),
'ff' => array( 'English' => 'Fulah', 'native' => 'Pulaar-Fulfulde'),
'fi' => array( 'English' => 'Finnish', 'native' => 'suomi'),
'fj-FJ' => array( 'English' => 'Fijian', 'native' => 'Vosa vaka-Viti'),
'fr' => array( 'English' => 'French', 'native' => 'Français'),
'fur-IT' => array( 'English' => 'Friulian', 'native' => 'Furlan'),
'fy-NL' => array( 'English' => 'Frisian', 'native' => 'Frysk'),
'ga' => array( 'English' => 'Irish', 'native' => 'Gaeilge'),
'ga-IE' => array( 'English' => 'Irish', 'native' => 'Gaeilge'),
'gd' => array( 'English' => 'Gaelic (Scotland)', 'native' => 'Gàidhlig'),
'gl' => array( 'English' => 'Galician', 'native' => 'Galego'),
'gu' => array( 'English' => 'Gujarati', 'native' => 'ગુજરાતી'),
'gu-IN' => array( 'English' => 'Gujarati (India)', 'native' => 'ગુજરાતી (ભારત)'),
'he' => array( 'English' => 'Hebrew', 'native' => 'עברית'),
'hi' => array( 'English' => 'Hindi', 'native' => 'हिन्दी'),
'hi-IN' => array( 'English' => 'Hindi (India)', 'native' => 'हिन्दी (भारत)'),
'hr' => array( 'English' => 'Croatian', 'native' => 'Hrvatski'),
'hsb' => array( 'English' => 'Upper Sorbian', 'native' => 'Hornjoserbsce'),
'hu' => array( 'English' => 'Hungarian', 'native' => 'magyar'),
'hy-AM' => array( 'English' => 'Armenian', 'native' => 'Հայերեն'),
'id' => array( 'English' => 'Indonesian', 'native' => 'Bahasa Indonesia'),
'is' => array( 'English' => 'Icelandic', 'native' => 'íslenska'),
'it' => array( 'English' => 'Italian', 'native' => 'Italiano'),
'ja' => array( 'English' => 'Japanese', 'native' => '日本語'),
'ja-JP-mac' => array( 'English' => 'Japanese', 'native' => '日本語'), // not iso-639-1
'ka' => array( 'English' => 'Georgian', 'native' => 'ქართული'),
'kk' => array( 'English' => 'Kazakh', 'native' => 'Қазақ'),
'km' => array( 'English' => 'Khmer', 'native' => 'ខ្មែរ'),
'kn' => array( 'English' => 'Kannada', 'native' => 'ಕನ್ನಡ'),
'ko' => array( 'English' => 'Korean', 'native' => '한국어'),
'ku' => array( 'English' => 'Kurdish', 'native' => 'Kurdî'),
'la' => array( 'English' => 'Latin', 'native' => 'Latina'),
'lg' => array( 'English' => 'Luganda', 'native' => 'Luganda'),
'lij' => array( 'English' => 'Ligurian', 'native' => 'Ligure'),
'lo' => array( 'English' => 'Lao', 'native' => 'ພາສາລາວ'),
'lt' => array( 'English' => 'Lithuanian', 'native' => 'lietuvių kalba'),
'lv' => array( 'English' => 'Latvian', 'native' => 'Latviešu'),
'mai' => array( 'English' => 'Maithili', 'native' => 'मैथिली মৈথিলী'),
'mg' => array( 'English' => 'Malagasy', 'native' => 'Malagasy'),
'mi' => array( 'English' => 'Maori (Aotearoa)', 'native' => 'Māori (Aotearoa)'),
'mk' => array( 'English' => 'Macedonian', 'native' => 'Македонски'),
'ml' => array( 'English' => 'Malayalam', 'native' => 'മലയാളം'),
'mn' => array( 'English' => 'Mongolian', 'native' => 'Монгол'),
'mr' => array( 'English' => 'Marathi', 'native' => 'मराठी'),
'ms' => array( 'English' => 'Malay', 'native' => 'Melayu'),
'my' => array( 'English' => 'Burmese', 'native' => 'မြန်မာဘာသာ'),
'nb-NO' => array( 'English' => 'Norwegian (Bokmål)', 'native' => 'Norsk bokmål'),
'ne-NP' => array( 'English' => 'Nepali', 'native' => 'नेपाली'),
'nn-NO' => array( 'English' => 'Norwegian (Nynorsk)', 'native' => 'Norsk nynorsk'),
'nl' => array( 'English' => 'Dutch', 'native' => 'Nederlands'),
'nr' => array( 'English' => 'Ndebele, South', 'native' => 'isiNdebele'),
'nso' => array( 'English' => 'Northern Sotho', 'native' => 'Sepedi'),
'oc' => array( 'English' => 'Occitan (Lengadocian)', 'native' => 'occitan (lengadocian)'),
'or' => array( 'English' => 'Oriya', 'native' => 'ଓଡ଼ିଆ'),
'pa' => array( 'English' => 'Punjabi', 'native' => 'ਪੰਜਾਬੀ'),
'pa-IN' => array( 'English' => 'Punjabi (India)', 'native' => 'ਪੰਜਾਬੀ (ਭਾਰਤ)'),
'pl' => array( 'English' => 'Polish', 'native' => 'Polski'),
'pt-BR' => array( 'English' => 'Portuguese (Brazilian)', 'native' => 'Português (do Brasil)'),
'pt-PT' => array( 'English' => 'Portuguese (Portugal)', 'native' => 'Português (Europeu)'),
'ro' => array( 'English' => 'Romanian', 'native' => 'română'),
'rm' => array( 'English' => 'Romansh', 'native' => 'rumantsch'),
'ru' => array( 'English' => 'Russian', 'native' => 'Русский'),
'rw' => array( 'English' => 'Kinyarwanda', 'native' => 'Ikinyarwanda'),
'sa' => array( 'English' => 'Sanskrit', 'native' => 'संस्कृत'),
'sah' => array( 'English' => 'Sakha', 'native' => 'Сахалыы'),
'si' => array( 'English' => 'Sinhala', 'native' => 'සිංහල'),
'sk' => array( 'English' => 'Slovak', 'native' => 'slovenčina'),
'sl' => array( 'English' => 'Slovenian', 'native' => 'Slovenščina'),
'son' => array( 'English' => 'Songhai', 'native' => 'Soŋay'),
'sq' => array( 'English' => 'Albanian', 'native' => 'Shqip'),
'sr' => array( 'English' => 'Serbian', 'native' => 'Српски'),
'sr-Cyrl' => array( 'English' => 'Serbian', 'native' => 'Српски'), // follows RFC 4646
'sr-Latn' => array( 'English' => 'Serbian', 'native' => 'Srpski'), // follows RFC 4646
'ss' => array( 'English' => 'Siswati', 'native' => 'siSwati'),
'st' => array( 'English' => 'Southern Sotho', 'native' => 'Sesotho'),
'sv-SE' => array( 'English' => 'Swedish', 'native' => 'Svenska'),
'sw' => array( 'English' => 'Swahili', 'native' => 'Kiswahili'),
'ta' => array( 'English' => 'Tamil', 'native' => 'தமிழ்'),
'ta-IN' => array( 'English' => 'Tamil (India)', 'native' => 'தமிழ் (இந்தியா)'),
'ta-LK' => array( 'English' => 'Tamil (Sri Lanka)', 'native' => 'தமிழ் (இலங்கை)'),
'te' => array( 'English' => 'Telugu', 'native' => 'తెలుగు'),
'th' => array( 'English' => 'Thai', 'native' => 'ไทย'),
'tn' => array( 'English' => 'Tswana', 'native' => 'Setswana'),
'tr' => array( 'English' => 'Turkish', 'native' => 'Türkçe'),
'ts' => array( 'English' => 'Tsonga', 'native' => 'Xitsonga'),
'tt-RU' => array( 'English' => 'Tatar', 'native' => 'Tatarça'),
'uk' => array( 'English' => 'Ukrainian', 'native' => 'Українська'),
'ur' => array( 'English' => 'Urdu', 'native' => 'اُردو'),
'uz' => array( 'English' => 'Uzbek', 'native' => 'Oʻzbek tili'),
've' => array( 'English' => 'Venda', 'native' => 'Tshivenḓa'),
'vi' => array( 'English' => 'Vietnamese', 'native' => 'Tiếng Việt'),
'wo' => array( 'English' => 'Wolof', 'native' => 'Wolof'),
'x-testing' => array( 'English' => 'Testing', 'native' => 'Ŧḗşŧīƞɠ'),
'xh' => array( 'English' => 'Xhosa', 'native' => 'isiXhosa'),
'zh-CN' => array( 'English' => 'Chinese (Simplified)', 'native' => '中文 (简体)'),
'zh-TW' => array( 'English' => 'Chinese (Traditional)', 'native' => '正體中文 (繁體)'),
'zu' => array( 'English' => 'Zulu', 'native' => 'isiZulu')
);
/**
* An array of regions/continents and their locales. Specific countries in regions are not documented here.
* Primary locales refers to locales that are used in the region according to United Nations Standard Country
* or Area Codes for Statistical Use. Secondary refers to locales that lack a specific geography or have a small
* population that uses it in the region.
*
* WARNING: This is out of date and unmaintained.
*
* @var array
*/
var $locations = array(
'Northern America' => array(
'primary' => array('en-CA','en-GB','en-US','es-AR','es-ES','es-MX','fr'),
'secondary' => array('da','eo','la','nb-NO','nn-NO')
),
'Central America' => array(
'primary' => array('en-GB','en-US','es-AR','es-ES','es-MX','fr','nl'),
'secondary' => array('eo','la')
),
'Southern America' => array(
'primary' => array('en-GB','en-US','es-AR','es-ES','es-MX','fr','nl','pt-BR','pt-PT'),
'secondary' => array('eo','la')
),
'Northern Europe' => array(
'primary' => array('cy','da','en-GB','en-US','et','fi','ga-IE','is','lt','lv','nb-NO','nn-NO','sv-SE','tt-RU'),
'secondary' => array('eo','la')
),
'Western Europe' => array(
'primary' => array('br-FR','de','de-AT','de-CH','de-DE','fr','fy-NL','gl','nl'),
'secondary' => array('en-GB','en-US','eo','hr','hsb','it','la','sl')
),
'Eastern Europe' => array(
'primary' => array('be','bg','cs','hu','pl','ro','ru','sk','tt-RU','uk'),
'secondary' => array('en-GB','en-US','eo','la','tr')
),
'Southern Europe' => array(
'primary' => array('ast-ES','eu','ca','ca-valencia','el','es-ES','hu','it','la','mk','oc','pt-PT','sq','sr','sr-Latn','tr'),
'secondary' => array('de','en-GB','en-US','eo','fur-IT')
),
'Africa' => array(
'primary' => array('af','ak','ar','en-US','en-GB','en-ZA','es-ES','fr','mg','nr','nso','pt-PT','rw','ss','st','tn','ts','ve','wo','xh','zu'),
'secondary' => array('eo','la')
),
'Western Asia' => array(
'primary' => array('ar','en-GB','en-US','el','he','hy-AM','ka','kk','ku','tr'),
'secondary' => array('eo','la')
),
'South-Central Asia' => array(
'primary' => array('as','bn-BD','bn-IN','en-GB','en-US','fa','gu-IN','hi','hi-IN','kk','kn','ml','mr','ne-NP','pa-IN','ru','si','te','tt-RU','ur'),
'secondary' => array('eo','la')
),
'Eastern Asia' => array(
'primary' => array('en-GB','en-US','ja','ko','mn','zh-CN','zh-TW'),
'secondary' => array('eo','la')
),
'South Eastern Asia' => array(
'primary' => array('en-GB','en-US','es-AR','es-ES','fr','id','pt-PT','ta-IN','ta-LK','th','vi'),
'secondary' => array('eo','la')
),
'Oceania' => array(
'primary' => array('en-AU','en-GB','en-US','en-NZ','fr','ja','mi'),
'secondary' => array('eo','la')
)
);
/**
* Locations by continent
*
* @var array
*/
var $continents = array(
'Africa' => array(
'Africa'
),
'Asia' => array(
'Western Asia', 'South-Central Asia', 'Eastern Asia', 'South Eastern Asia'
),
'Australia & Oceania' => array(
'Oceania'
),
'Europe' => array(
'Northern Europe', 'Western Europe', 'Eastern Europe', 'Southern Europe'
),
'North America' => array(
'Northern America', 'Central America'
),
'South America' => array(
'Southern America'
)
);
/**
* An array of languages that are displayed rtl. This is a separate array
* because there are so few languages.
*
* @var array
*/
var $rtl_languages = array( 'ar', 'fa', 'fa-IR', 'he', 'ur' );
/**
* This is a function for getting the direction a language is displayed in.
* If the locale doesn't exist, a blank string is returned.
*
* @param string locale to lookup
* @return string 'rtl' or 'ltr' for valid locales, or a blank string for unknowns
*/
function getDirectionForLocale($locale) {
if (array_key_exists($locale, $this->languages)) {
if (in_array($locale, $this->rtl_languages)) {
return 'rtl';
} else {
return 'ltr';
}
}
return '';
}
/**
* This is a function for getting a language's native name from a
* locale. If the name is not available, a blank string is returned.
*
* @param string locale to lookup
* @return string native name for locale
*/
function getNativeNameForLocale($locale) {
if (array_key_exists($locale, $this->languages)) {
return $this->languages[$locale]['native'];
}
}
/**
* This is a function for getting a language's English name from a
* locale. If the name is not available, a blank string is returned.
*
* @param string locale to lookup
* @return string native name for locale
*/
function getEnglishNameForLocale($locale) {
if (array_key_exists($locale, $this->languages)) {
return $this->languages[$locale]['English'];
}
}
/**
* This is a function for getting all the locations for a locale (as defined by the array above).
*
* @param string locale to lookup
* @return array of locations in the format:
* array(
* 'primary' => array()
* 'secondary' => array()
* )
*/
function getLocationsForLocale($locale) {
$_result = array('primary' => array(), 'secondary' => array());
foreach ($this->locations as $region => $k) {
if (in_array($locale, $k['primary'])) {
$_result['primary'][] = $region;
}
if (in_array($locale, $k['secondary'])) {
$_result['secondary'][] = $region;
}
}
return $_result;
}
/**
* This function will sort this classes languages array so it's sorted by
* English name instead of locale code.
*
* @return array sorted by English name
*/
function getLanguageArraySortedByEnglishName() {
$_temp = $this->languages;
uasort($_temp, create_function('$a,$b', 'return strcasecmp($a["English"],$b["English"]);'));
return $_temp;
}
}
?>