840 lines
32 KiB
PHP
840 lines
32 KiB
PHP
|
<?php
|
|||
|
/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|||
|
/*
|
|||
|
# ***** BEGIN LICENSE BLOCK *****
|
|||
|
# This file is part of Plume Framework, a simple PHP Application Framework.
|
|||
|
# Copyright (C) 2001-2007 Loic d'Anterroches and contributors.
|
|||
|
#
|
|||
|
# Plume Framework is free software; you can redistribute it and/or modify
|
|||
|
# it under the terms of the GNU Lesser General Public License as published by
|
|||
|
# the Free Software Foundation; either version 2.1 of the License, or
|
|||
|
# (at your option) any later version.
|
|||
|
#
|
|||
|
# Plume Framework is distributed in the hope that it will be useful,
|
|||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
|
# GNU Lesser General Public License for more details.
|
|||
|
#
|
|||
|
# You should have received a copy of the GNU Lesser General Public License
|
|||
|
# along with this program; if not, write to the Free Software
|
|||
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|||
|
#
|
|||
|
# ***** END LICENSE BLOCK ***** */
|
|||
|
|
|||
|
/**
|
|||
|
* Localization class.
|
|||
|
*
|
|||
|
* The localization of the code is performed using the __() function call.
|
|||
|
* This function is directly available in the Pluf.php file.
|
|||
|
*
|
|||
|
* The Pluf_L10n class is used to load the localization strings in memory
|
|||
|
* in the $GLOBALS['_PX_locale'] array. All the strings are stored in utf-8
|
|||
|
* as all the applications created with the Plume Framework must use the utf-8
|
|||
|
* encoding.
|
|||
|
* The Pluf locale files are in the Pluf/locale/ folder.
|
|||
|
*
|
|||
|
* The locale files can be optimized and an optimized version of the files
|
|||
|
* stored in the Pluf temp folder. The temp folder is defined in the global
|
|||
|
* configuration as 'tmp_folder'.
|
|||
|
*
|
|||
|
* 2 letter ISO codes from http://www.oasis-open.org/cover/iso639a.html
|
|||
|
*/
|
|||
|
class Pluf_L10n
|
|||
|
{
|
|||
|
/**
|
|||
|
* Folder in which the locale file are available.
|
|||
|
*/
|
|||
|
public $locale_folder = '';
|
|||
|
|
|||
|
/**
|
|||
|
* Constructor.
|
|||
|
*
|
|||
|
* See loadDomain(). If no folder is provided, the default Pluf/locale
|
|||
|
* folder is used to load the locales from.
|
|||
|
*
|
|||
|
* @param string Locale folder without trailing slash ('')
|
|||
|
* @param string Language ('en')
|
|||
|
* @param string Domain ('pluf')
|
|||
|
*/
|
|||
|
function __construct($folder='', $lang='en', $domain='pluf')
|
|||
|
{
|
|||
|
if ('' == $folder) {
|
|||
|
$this->locale_folder = dirname(__FILE__).'/locale';
|
|||
|
}
|
|||
|
$this->loadDomain($lang, $domain);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Load a domain file.
|
|||
|
* A domain file is a .lang file in the main locale folder of plume.
|
|||
|
*
|
|||
|
* @param string Language ('en')
|
|||
|
* @param string Domain, without the .lang ('pluf')
|
|||
|
* @return bool Success
|
|||
|
*/
|
|||
|
function loadDomain($lang='en', $domain='pluf')
|
|||
|
{
|
|||
|
if ('en' == $lang) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
return $this->loadFile($this->locale_folder.$lang.'/'.$domain.'.lang');
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Load a locale file
|
|||
|
*
|
|||
|
* @param string Complete path to the locale file
|
|||
|
* @return bool Success
|
|||
|
*/
|
|||
|
function loadFile($file)
|
|||
|
{
|
|||
|
if (!empty($GLOBALS['_PX_locale_files'][$file])) {
|
|||
|
return true;
|
|||
|
}
|
|||
|
if (!file_exists($file)) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (!isset($GLOBALS['_PX_locale'])) {
|
|||
|
$GLOBALS['_PX_locale'] = array();
|
|||
|
}
|
|||
|
// Load optimized file if available
|
|||
|
if ('' != Pluf::f('tmp_folder')) {
|
|||
|
$phpfile = Pluf::f('tmp_folder').'/Pluf_L10n-'
|
|||
|
.str_replace(DIRECTORY_SEPARATOR, '_', substr($file, 0, -5))
|
|||
|
.'.php';
|
|||
|
if (file_exists($phpfile)
|
|||
|
&& (@filemtime($file) < @filemtime($phpfile))) {
|
|||
|
$l = include $phpfile;
|
|||
|
$GLOBALS['_PX_locale'] = array_merge($GLOBALS['_PX_locale'], $l);
|
|||
|
$GLOBALS['_PX_locale_files'][$file] = 'optimized';
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
$lines = file($file);
|
|||
|
$count = count($lines);
|
|||
|
for ($i=1; $i<$count; $i++) {
|
|||
|
$tmp = (!empty($lines[$i+1])) ? trim($lines[$i+1]) : '';
|
|||
|
if (!empty($tmp) && ';' == substr($lines[$i],0,1)) {
|
|||
|
$GLOBALS['_PX_locale'][trim(substr($lines[$i],1))] = $tmp;
|
|||
|
$i++;
|
|||
|
}
|
|||
|
}
|
|||
|
$GLOBALS['_PX_locale_files'][$file] = true;
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Optimize a locale. Convert the .lang in a .php file
|
|||
|
* ready to be included. The optimized file is encoded
|
|||
|
* with the current encoding.
|
|||
|
*
|
|||
|
* @param string Locale file to optimize
|
|||
|
* @return bool Success
|
|||
|
*/
|
|||
|
function optimizeLocale($file)
|
|||
|
{
|
|||
|
if (!file_exists($file)) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
$phpfile = Pluf::f('tmp_folder').'/Pluf_L10n-'
|
|||
|
.str_replace(DIRECTORY_SEPARATOR, '_', substr($file, 0, -5))
|
|||
|
.'.php';
|
|||
|
$lines = file($file);
|
|||
|
$out = '<?php '."\n".'/* automatically generated file from: '
|
|||
|
.$file.' */'."\n\n";
|
|||
|
$out .= '$l = array();'."\n";
|
|||
|
$count = count($lines);
|
|||
|
for ($i=1; $i<$count; $i++) {
|
|||
|
$tmp = (!empty($lines[$i+1])) ? trim($lines[$i+1]) : '';
|
|||
|
if (!empty($tmp) && ';' == substr($lines[$i],0,1)) {
|
|||
|
$string = '$l[\''
|
|||
|
.str_replace("'", "\\'", trim(substr($lines[$i],1)))
|
|||
|
.'\'] = \''.str_replace("'", "\\'", $tmp).'\';'."\n";
|
|||
|
$out .= $string;
|
|||
|
$i++;
|
|||
|
}
|
|||
|
}
|
|||
|
$out .= 'return $l;'."\n\n".'?>';
|
|||
|
file_put_contents($phpfile, $out, LOCK_EX);
|
|||
|
@chmod($phpfile, 0777);
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get the available locales for a domain.
|
|||
|
*
|
|||
|
* @param string Domain ('')
|
|||
|
* @return array List of 2 letter iso codes
|
|||
|
*/
|
|||
|
function getAvailableLocales($domain='')
|
|||
|
{
|
|||
|
$rootdir = $this->locale_folder.'/';
|
|||
|
$locales = array();
|
|||
|
$locales[] = 'en'; //English is always available
|
|||
|
$current_dir = opendir($rootdir);
|
|||
|
if (!empty($domain)) {
|
|||
|
$domain .= '.lang';
|
|||
|
}
|
|||
|
while($entryname = readdir($current_dir)) {
|
|||
|
if (is_dir($rootdir.$entryname.'/')
|
|||
|
and ($entryname != '.' and $entryname!='..')
|
|||
|
and (2 == strlen($entryname))
|
|||
|
) {
|
|||
|
$entryname = strtolower($entryname);
|
|||
|
if (empty($domain)) {
|
|||
|
$locales[] = $entryname;
|
|||
|
} elseif (is_file($rootdir.$entryname.'/'.$domain)) {
|
|||
|
$locales[] = $entryname;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
closedir($current_dir);
|
|||
|
sort($locales);
|
|||
|
reset($locales);
|
|||
|
return $locales;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Return the "best" accepted language from the list of available
|
|||
|
* languages.
|
|||
|
*
|
|||
|
* Use $_SERVER['HTTP_ACCEPT_LANGUAGE'] if the accepted language is empty
|
|||
|
*
|
|||
|
* @param array Available languages in the system
|
|||
|
* @param string String of comma separated accepted languages ('')
|
|||
|
* @return string Language 2 letter iso code, default is 'en'
|
|||
|
*/
|
|||
|
function getAcceptedLanguage($available, $accepted ='')
|
|||
|
{
|
|||
|
if (empty($accepted)) {
|
|||
|
if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
|
|||
|
$accepted = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
|
|||
|
} else {
|
|||
|
return 'en';
|
|||
|
}
|
|||
|
}
|
|||
|
$acceptedlist = explode(',', $accepted);
|
|||
|
foreach ($acceptedlist as $lang) {
|
|||
|
//for the fr-FR en-US cases
|
|||
|
$lang = strtolower(substr($lang, 0, 2));
|
|||
|
if (in_array($lang, $available)) {
|
|||
|
return $lang;
|
|||
|
}
|
|||
|
}
|
|||
|
//no match found, English
|
|||
|
return 'en';
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Returns iso codes.
|
|||
|
*
|
|||
|
* @param bool Is the language the key in the array (false)
|
|||
|
* @return array The key is either the language or the iso code
|
|||
|
*/
|
|||
|
function getIsoCodes($lang=false)
|
|||
|
{
|
|||
|
$res = array('aa' => 'Afar',
|
|||
|
'ab' => 'Abkhazian',
|
|||
|
'af' => 'Afrikaans',
|
|||
|
'am' => 'Amharic',
|
|||
|
'ar' => 'Arabic',
|
|||
|
'as' => 'Assamese',
|
|||
|
'ay' => 'Aymara',
|
|||
|
'az' => 'Azerbaijani',
|
|||
|
'ba' => 'Bashkir',
|
|||
|
'be' => 'Byelorussian',
|
|||
|
'bg' => 'Bulgarian',
|
|||
|
'bh' => 'Bihari',
|
|||
|
'bi' => 'Bislama',
|
|||
|
'bn' => 'Bengali',
|
|||
|
'bo' => 'Tibetan',
|
|||
|
'br' => 'Breton',
|
|||
|
'ca' => 'Catalan',
|
|||
|
'co' => 'Corsican',
|
|||
|
'cs' => 'Czech',
|
|||
|
'cy' => 'Welsh',
|
|||
|
'da' => 'Danish',
|
|||
|
'de' => 'German',
|
|||
|
'dz' => 'Bhutani',
|
|||
|
'el' => 'Greek',
|
|||
|
'en' => 'English',
|
|||
|
'eo' => 'Esperanto',
|
|||
|
'es' => 'Spanish',
|
|||
|
'et' => 'Estonian',
|
|||
|
'eu' => 'Basque',
|
|||
|
'fa' => 'Persian',
|
|||
|
'fi' => 'Finnish',
|
|||
|
'fj' => 'Fiji',
|
|||
|
'fo' => 'Faroese',
|
|||
|
'fr' => 'French',
|
|||
|
'fy' => 'Frisian',
|
|||
|
'ga' => 'Irish',
|
|||
|
'gd' => 'Scots gaelic',
|
|||
|
'gl' => 'Galician',
|
|||
|
'gn' => 'Guarani',
|
|||
|
'gu' => 'Gujarati',
|
|||
|
'ha' => 'Hausa',
|
|||
|
'he' => 'Hebrew',
|
|||
|
'hi' => 'Hindi',
|
|||
|
'hr' => 'Croatian',
|
|||
|
'hu' => 'Hungarian',
|
|||
|
'hy' => 'Armenian',
|
|||
|
'ia' => 'Interlingua',
|
|||
|
'ie' => 'Interlingue',
|
|||
|
'ik' => 'Inupiak',
|
|||
|
'id' => 'Indonesian',
|
|||
|
'is' => 'Icelandic',
|
|||
|
'it' => 'Italian',
|
|||
|
'iu' => 'Inuktitut',
|
|||
|
'ja' => 'Japanese',
|
|||
|
'jv' => 'Javanese',
|
|||
|
'ka' => 'Georgian',
|
|||
|
'kk' => 'Kazakh',
|
|||
|
'kl' => 'Greenlandic',
|
|||
|
'km' => 'Cambodian',
|
|||
|
'kn' => 'Kannada',
|
|||
|
'ko' => 'Korean',
|
|||
|
'ks' => 'Kashmiri',
|
|||
|
'ku' => 'Kurdish',
|
|||
|
'ky' => 'Kirghiz',
|
|||
|
'la' => 'Latin',
|
|||
|
'ln' => 'Lingala',
|
|||
|
'lo' => 'Laothian',
|
|||
|
'lt' => 'Lithuanian',
|
|||
|
'lv' => 'Latvian;lettish',
|
|||
|
'mg' => 'Malagasy',
|
|||
|
'mi' => 'Maori',
|
|||
|
'mk' => 'Macedonian',
|
|||
|
'ml' => 'Malayalam',
|
|||
|
'mn' => 'Mongolian',
|
|||
|
'mo' => 'Moldavian',
|
|||
|
'mr' => 'Marathi',
|
|||
|
'ms' => 'Malay',
|
|||
|
'mt' => 'Maltese',
|
|||
|
'my' => 'Burmese',
|
|||
|
'na' => 'Nauru',
|
|||
|
'ne' => 'Nepali',
|
|||
|
'nl' => 'Dutch',
|
|||
|
'no' => 'Norwegian',
|
|||
|
'oc' => 'Occitan',
|
|||
|
'om' => 'Afan (oromo)',
|
|||
|
'or' => 'Oriya',
|
|||
|
'pa' => 'Punjabi',
|
|||
|
'pl' => 'Polish',
|
|||
|
'ps' => 'Pashto;pushto',
|
|||
|
'pt' => 'Portuguese',
|
|||
|
'qu' => 'Quechua',
|
|||
|
'rm' => 'Rhaeto-romance',
|
|||
|
'rn' => 'Kurundi',
|
|||
|
'ro' => 'Romanian',
|
|||
|
'ru' => 'Russian',
|
|||
|
'rw' => 'Kinyarwanda',
|
|||
|
'sa' => 'Sanskrit',
|
|||
|
'sd' => 'Sindhi',
|
|||
|
'sg' => 'Sangho',
|
|||
|
'sh' => 'Serbo-croatian',
|
|||
|
'si' => 'Singhalese',
|
|||
|
'sk' => 'Slovak',
|
|||
|
'sl' => 'Slovenian',
|
|||
|
'sm' => 'Samoan',
|
|||
|
'sn' => 'Shona',
|
|||
|
'so' => 'Somali',
|
|||
|
'sq' => 'Albanian',
|
|||
|
'sr' => 'Serbian',
|
|||
|
'ss' => 'Siswati',
|
|||
|
'st' => 'Sesotho',
|
|||
|
'su' => 'Sundanese',
|
|||
|
'sv' => 'Swedish',
|
|||
|
'sw' => 'Swahili',
|
|||
|
'ta' => 'Tamil',
|
|||
|
'te' => 'Telugu',
|
|||
|
'tg' => 'Tajik',
|
|||
|
'th' => 'Thai',
|
|||
|
'ti' => 'Tigrinya',
|
|||
|
'tk' => 'Turkmen',
|
|||
|
'tl' => 'Tagalog',
|
|||
|
'tn' => 'Setswana',
|
|||
|
'to' => 'Tonga',
|
|||
|
'tr' => 'Turkish',
|
|||
|
'ts' => 'Tsonga',
|
|||
|
'tt' => 'Tatar',
|
|||
|
'tw' => 'Twi',
|
|||
|
'ug' => 'Uigur',
|
|||
|
'uk' => 'Ukrainian',
|
|||
|
'ur' => 'Urdu',
|
|||
|
'uz' => 'Uzbek',
|
|||
|
'vi' => 'Vietnamese',
|
|||
|
'vo' => 'Volapuk',
|
|||
|
'wo' => 'Wolof',
|
|||
|
'xh' => 'Xhosa',
|
|||
|
'yi' => 'Yiddish',
|
|||
|
'yo' => 'Yoruba',
|
|||
|
'za' => 'Zhuang',
|
|||
|
'zh' => 'Chinese',
|
|||
|
'zu' => 'Zulu');
|
|||
|
if ($lang) {
|
|||
|
$res = array_flip($res);
|
|||
|
ksort($res); //order by lang
|
|||
|
}
|
|||
|
return $res;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Get the country codes.
|
|||
|
*
|
|||
|
* @param Indexed by code (false)
|
|||
|
* @return array English name indexed country code or reverse
|
|||
|
*/
|
|||
|
public static function getCountryCodes($idx_by_code=false)
|
|||
|
{
|
|||
|
$ctr = array(
|
|||
|
'Andorra' => 'AD',
|
|||
|
'United Arab Emirates' => 'AE',
|
|||
|
'Afghanistan' => 'AF',
|
|||
|
'Antigua & Barbuda' => 'AG',
|
|||
|
'Anguilla' => 'AI',
|
|||
|
'Albania' => 'AL',
|
|||
|
'Armenia' => 'AM',
|
|||
|
'Netherlands Antilles' => 'AN',
|
|||
|
'Angola' => 'AO',
|
|||
|
'Antarctica' => 'AQ',
|
|||
|
'Argentina' => 'AR',
|
|||
|
'American Samoa' => 'AS',
|
|||
|
'Austria' => 'AT',
|
|||
|
'Australia' => 'AU',
|
|||
|
'Aruba' => 'AW',
|
|||
|
'Azerbaijan' => 'AZ',
|
|||
|
'Bosnia and Herzegovina' => 'BA',
|
|||
|
'Barbados' => 'BB',
|
|||
|
'Bangladesh' => 'BD',
|
|||
|
'Belgium' => 'BE',
|
|||
|
'Burkina Faso' => 'BF',
|
|||
|
'Bulgaria' => 'BG',
|
|||
|
'Bahrain' => 'BH',
|
|||
|
'Burundi' => 'BI',
|
|||
|
'Benin' => 'BJ',
|
|||
|
'Bermuda' => 'BM',
|
|||
|
'Brunei Darussalam' => 'BN',
|
|||
|
'Bolivia' => 'BO',
|
|||
|
'Brazil' => 'BR',
|
|||
|
'Bahama' => 'BS',
|
|||
|
'Bhutan' => 'BT',
|
|||
|
'Bouvet Island' => 'BV',
|
|||
|
'Botswana' => 'BW',
|
|||
|
'Belarus' => 'BY',
|
|||
|
'Belize' => 'BZ',
|
|||
|
'Canada' => 'CA',
|
|||
|
'Cocos (Keeling) Islands' => 'CC',
|
|||
|
'Central African Republic' => 'CF',
|
|||
|
'Congo' => 'CG',
|
|||
|
'Switzerland' => 'CH',
|
|||
|
'Côte D\'ivoire (Ivory Coast)' => 'CI',
|
|||
|
'Cook Iislands' => 'CK',
|
|||
|
'Chile' => 'CL',
|
|||
|
'Cameroon' => 'CM',
|
|||
|
'China' => 'CN',
|
|||
|
'Colombia' => 'CO',
|
|||
|
'Costa Rica' => 'CR',
|
|||
|
'Cuba' => 'CU',
|
|||
|
'Cape Verde' => 'CV',
|
|||
|
'Christmas Island' => 'CX',
|
|||
|
'Cyprus' => 'CY',
|
|||
|
'Czech Republic' => 'CZ',
|
|||
|
'Germany' => 'DE',
|
|||
|
'Djibouti' => 'DJ',
|
|||
|
'Denmark' => 'DK',
|
|||
|
'Dominica' => 'DM',
|
|||
|
'Dominican Republic' => 'DO',
|
|||
|
'Algeria' => 'DZ',
|
|||
|
'Ecuador' => 'EC',
|
|||
|
'Estonia' => 'EE',
|
|||
|
'Egypt' => 'EG',
|
|||
|
'Western Sahara' => 'EH',
|
|||
|
'Eritrea' => 'ER',
|
|||
|
'Spain' => 'ES',
|
|||
|
'Ethiopia' => 'ET',
|
|||
|
'Finland' => 'FI',
|
|||
|
'Fiji' => 'FJ',
|
|||
|
'Falkland Islands (Malvinas)' => 'FK',
|
|||
|
'Micronesia' => 'FM',
|
|||
|
'Faroe Islands' => 'FO',
|
|||
|
'France' => 'FR',
|
|||
|
'France, Metropolitan' => 'FX',
|
|||
|
'Gabon' => 'GA',
|
|||
|
'United Kingdom (Great Britain)' => 'GB',
|
|||
|
'Grenada' => 'GD',
|
|||
|
'Georgia' => 'GE',
|
|||
|
'French Guiana' => 'GF',
|
|||
|
'Ghana' => 'GH',
|
|||
|
'Gibraltar' => 'GI',
|
|||
|
'Greenland' => 'GL',
|
|||
|
'Gambia' => 'GM',
|
|||
|
'Guinea' => 'GN',
|
|||
|
'Guadeloupe' => 'GP',
|
|||
|
'Equatorial Guinea' => 'GQ',
|
|||
|
'Greece' => 'GR',
|
|||
|
'South Georgia and the South Sandwich Islands' => 'GS',
|
|||
|
'Guatemala' => 'GT',
|
|||
|
'Guam' => 'GU',
|
|||
|
'Guinea-Bissau' => 'GW',
|
|||
|
'Guyana' => 'GY',
|
|||
|
'Hong Kong' => 'HK',
|
|||
|
'Heard & McDonald Islands' => 'HM',
|
|||
|
'Honduras' => 'HN',
|
|||
|
'Croatia' => 'HR',
|
|||
|
'Haiti' => 'HT',
|
|||
|
'Hungary' => 'HU',
|
|||
|
'Indonesia' => 'ID',
|
|||
|
'Ireland' => 'IE',
|
|||
|
'Israel' => 'IL',
|
|||
|
'India' => 'IN',
|
|||
|
'British Indian Ocean Territory' => 'IO',
|
|||
|
'Iraq' => 'IQ',
|
|||
|
'Iran, Islamic Republic of' => 'IR',
|
|||
|
'Iceland' => 'IS',
|
|||
|
'Italy' => 'IT',
|
|||
|
'Jamaica' => 'JM',
|
|||
|
'Jordan' => 'JO',
|
|||
|
'Japan' => 'JP',
|
|||
|
'Kenya' => 'KE',
|
|||
|
'Kyrgyzstan' => 'KG',
|
|||
|
'Cambodia' => 'KH',
|
|||
|
'Kiribati' => 'KI',
|
|||
|
'Comoros' => 'KM',
|
|||
|
'St. Kitts and Nevis' => 'KN',
|
|||
|
'Korea, Democratic People\'s Republic of' => 'KP',
|
|||
|
'Korea, Republic of' => 'KR',
|
|||
|
'Kuwait' => 'KW',
|
|||
|
'Cayman Islands' => 'KY',
|
|||
|
'Kazakhstan' => 'KZ',
|
|||
|
'Lao People\'s Democratic Republic' => 'LA',
|
|||
|
'Lebanon' => 'LB',
|
|||
|
'Saint Lucia' => 'LC',
|
|||
|
'Liechtenstein' => 'LI',
|
|||
|
'Sri Lanka' => 'LK',
|
|||
|
'Liberia' => 'LR',
|
|||
|
'Lesotho' => 'LS',
|
|||
|
'Lithuania' => 'LT',
|
|||
|
'Luxembourg' => 'LU',
|
|||
|
'Latvia' => 'LV',
|
|||
|
'Libyan Arab Jamahiriya' => 'LY',
|
|||
|
'Morocco' => 'MA',
|
|||
|
'Monaco' => 'MC',
|
|||
|
'Moldova, Republic of' => 'MD',
|
|||
|
'Montenegro' => 'ME',
|
|||
|
'Madagascar' => 'MG',
|
|||
|
'Marshall Islands' => 'MH',
|
|||
|
'Macedonia, Republic of' => 'MK',
|
|||
|
'Mali' => 'ML',
|
|||
|
'Mongolia' => 'MN',
|
|||
|
'Myanmar' => 'MM',
|
|||
|
'Macau' => 'MO',
|
|||
|
'Northern Mariana Islands' => 'MP',
|
|||
|
'Martinique' => 'MQ',
|
|||
|
'Mauritania' => 'MR',
|
|||
|
'Monserrat' => 'MS',
|
|||
|
'Malta' => 'MT',
|
|||
|
'Mauritius' => 'MU',
|
|||
|
'Maldives' => 'MV',
|
|||
|
'Malawi' => 'MW',
|
|||
|
'Mexico' => 'MX',
|
|||
|
'Malaysia' => 'MY',
|
|||
|
'Mozambique' => 'MZ',
|
|||
|
'Namibia' => 'NA',
|
|||
|
'New Caledonia' => 'NC',
|
|||
|
'Niger' => 'NE',
|
|||
|
'Norfolk Island' => 'NF',
|
|||
|
'Nigeria' => 'NG',
|
|||
|
'Nicaragua' => 'NI',
|
|||
|
'Netherlands' => 'NL',
|
|||
|
'Norway' => 'NO',
|
|||
|
'Nepal' => 'NP',
|
|||
|
'Nauru' => 'NR',
|
|||
|
'Niue' => 'NU',
|
|||
|
'New Zealand' => 'NZ',
|
|||
|
'Oman' => 'OM',
|
|||
|
'Panama' => 'PA',
|
|||
|
'Peru' => 'PE',
|
|||
|
'French Polynesia' => 'PF',
|
|||
|
'Papua New Guinea' => 'PG',
|
|||
|
'Philippines' => 'PH',
|
|||
|
'Pakistan' => 'PK',
|
|||
|
'Poland' => 'PL',
|
|||
|
'St. Pierre & Miquelon' => 'PM',
|
|||
|
'Pitcairn' => 'PN',
|
|||
|
'Puerto Rico' => 'PR',
|
|||
|
'Portugal' => 'PT',
|
|||
|
'Palau' => 'PW',
|
|||
|
'Paraguay' => 'PY',
|
|||
|
'Qatar' => 'QA',
|
|||
|
'Réunion' => 'RE',
|
|||
|
'Romania' => 'RO',
|
|||
|
'Serbia' => 'RS',
|
|||
|
'Russian Federation' => 'RU',
|
|||
|
'Rwanda' => 'RW',
|
|||
|
'Saudi Arabia' => 'SA',
|
|||
|
'Solomon Islands' => 'SB',
|
|||
|
'Seychelles' => 'SC',
|
|||
|
'Sudan' => 'SD',
|
|||
|
'Sweden' => 'SE',
|
|||
|
'Singapore' => 'SG',
|
|||
|
'St. Helena' => 'SH',
|
|||
|
'Slovenia' => 'SI',
|
|||
|
'Svalbard & Jan Mayen Islands' => 'SJ',
|
|||
|
'Slovakia' => 'SK',
|
|||
|
'Sierra Leone' => 'SL',
|
|||
|
'San Marino' => 'SM',
|
|||
|
'Senegal' => 'SN',
|
|||
|
'Somalia' => 'SO',
|
|||
|
'Suriname' => 'SR',
|
|||
|
'Sao Tome & Principe' => 'ST',
|
|||
|
'El Salvador' => 'SV',
|
|||
|
'Syrian Arab Republic' => 'SY',
|
|||
|
'Swaziland' => 'SZ',
|
|||
|
'Turks & Caicos Islands' => 'TC',
|
|||
|
'Chad' => 'TD',
|
|||
|
'French Southern Territories' => 'TF',
|
|||
|
'Togo' => 'TG',
|
|||
|
'Thailand' => 'TH',
|
|||
|
'Tajikistan' => 'TJ',
|
|||
|
'Tokelau' => 'TK',
|
|||
|
'Turkmenistan' => 'TM',
|
|||
|
'Tunisia' => 'TN',
|
|||
|
'Tonga' => 'TO',
|
|||
|
'East Timor' => 'TP',
|
|||
|
'Turkey' => 'TR',
|
|||
|
'Trinidad & Tobago' => 'TT',
|
|||
|
'Tuvalu' => 'TV',
|
|||
|
'Taiwan' => 'TW',
|
|||
|
'Tanzania, United Republic of' => 'TZ',
|
|||
|
'Ukraine' => 'UA',
|
|||
|
'Uganda' => 'UG',
|
|||
|
'United States Minor Outlying Islands' => 'UM',
|
|||
|
'United States of America' => 'US',
|
|||
|
'Uruguay' => 'UY',
|
|||
|
'Uzbekistan' => 'UZ',
|
|||
|
'Vatican City State (Holy See)' => 'VA',
|
|||
|
'St. Vincent & the Grenadines' => 'VC',
|
|||
|
'Venezuela' => 'VE',
|
|||
|
'British Virgin Islands' => 'VG',
|
|||
|
'United States Virgin Islands' => 'VI',
|
|||
|
'Viet Nam' => 'VN',
|
|||
|
'Vanuatu' => 'VU',
|
|||
|
'Wallis & Futuna Islands' => 'WF',
|
|||
|
'Samoa' => 'WS',
|
|||
|
'Yemen' => 'YE',
|
|||
|
'Mayotte' => 'YT',
|
|||
|
'South Africa' => 'ZA',
|
|||
|
'Zambia' => 'ZM',
|
|||
|
'Zaire' => 'ZR',
|
|||
|
'Zimbabwe' => 'ZW',
|
|||
|
'Unknown or unspecified country' => 'ZZ'
|
|||
|
);
|
|||
|
if ($idx_by_code) {
|
|||
|
$ctr = array_flip($ctr);
|
|||
|
}
|
|||
|
ksort($ctr);
|
|||
|
return $ctr;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Returns iso codes.
|
|||
|
*
|
|||
|
* @param bool Is the language the key in the array (false)
|
|||
|
* @return array The key is either the language or the iso code
|
|||
|
*/
|
|||
|
public static function getNativeLanguages($lang=false)
|
|||
|
{
|
|||
|
$res = array(
|
|||
|
'ab' => 'Аҧсуа',
|
|||
|
'aa' => 'Afaraf',
|
|||
|
'af' => 'Afrikaans',
|
|||
|
'ak' => 'Akan',
|
|||
|
'am' => 'አማርኛ',
|
|||
|
'ar' => 'العربية',
|
|||
|
'an' => 'Aragonés',
|
|||
|
'as' => 'অসমীয়া',
|
|||
|
'av' => 'авар мацӀ',
|
|||
|
'ae' => 'avesta',
|
|||
|
'ay' => 'aymar aru',
|
|||
|
'az' => 'Azərbaycanca',
|
|||
|
'bm' => 'bamanankan',
|
|||
|
'ba' => 'башҡорт теле',
|
|||
|
'be' => 'Беларуская мова',
|
|||
|
'bn' => 'বাংলা',
|
|||
|
'bh' => 'Bihari',
|
|||
|
'bi' => 'Bislama',
|
|||
|
'bs' => 'bosanski jezik',
|
|||
|
'br' => 'brezhoneg',
|
|||
|
'bg' => 'български език',
|
|||
|
'ca' => 'català',
|
|||
|
'ch' => 'Chamoru',
|
|||
|
'ce' => 'нохчийн мотт',
|
|||
|
'ny' => 'chiCheŵa',
|
|||
|
'cu' => 'чӑваш чӗлхи',
|
|||
|
'kw' => 'Kernewek',
|
|||
|
'co' => 'corsu',
|
|||
|
'cr' => 'ᓀᐦᐃᔭᐍᐏᐣ',
|
|||
|
'hr' => 'hrvatski jezik',
|
|||
|
'cs' => 'čeština',
|
|||
|
'da' => 'dansk',
|
|||
|
'dv' => 'ދިވެހިބަސ',
|
|||
|
'dz' => 'རྫོང་ཁ',
|
|||
|
'en' => 'English',
|
|||
|
'eo' => 'Esperanto',
|
|||
|
'et' => 'eesti keel',
|
|||
|
'ee' => 'Ɛʋɛgbɛ',
|
|||
|
'fo' => 'føroyskt',
|
|||
|
'fj' => 'vosa Vakaviti',
|
|||
|
'fi' => 'suomi',
|
|||
|
'fr' => 'français',
|
|||
|
'fy' => 'frysk',
|
|||
|
'ff' => 'Fulfulde, Pulaar, Pular',
|
|||
|
'gl' => 'Galego',
|
|||
|
'lg' => 'Luganda',
|
|||
|
'ka' => 'ქართული ენა',
|
|||
|
'de' => 'Deutsch',
|
|||
|
'el' => 'Ελληνικά',
|
|||
|
'kl' => 'kalaallisut',
|
|||
|
'gn' => 'Avañe\'ẽ',
|
|||
|
'gu' => 'ગુજરાતી',
|
|||
|
'ht' => 'Kreyòl ayisyen',
|
|||
|
'ha' => 'Hausancī',
|
|||
|
'he' => 'עִבְרִית',
|
|||
|
'hz' => 'Otjiherero',
|
|||
|
'hi' => 'हिन्दी',
|
|||
|
'ho' => 'Hiri Motu',
|
|||
|
'hu' => 'magyar',
|
|||
|
'is' => 'íslenska',
|
|||
|
'io' => 'Ido',
|
|||
|
'ig' => 'Igbo',
|
|||
|
'id' => 'Bahasa Indonesia',
|
|||
|
'ia' => 'interlingua',
|
|||
|
'ie' => 'Interlingue',
|
|||
|
'iu' => 'ᐃᓄᒃᑎᑐᑦ',
|
|||
|
'ik' => 'Iñupiaq',
|
|||
|
'ga' => 'Gaeilge',
|
|||
|
'it' => 'italiano',
|
|||
|
'ja' => '日本語 (にほんご)',
|
|||
|
'jv' => 'basa Jawa',
|
|||
|
'kn' => 'ಕನ್ನಡ',
|
|||
|
'kr' => 'कॉशुर',
|
|||
|
'kk' => 'Қазақ тілі',
|
|||
|
'km' => 'Central Khmer',
|
|||
|
'ki' => 'Gĩkũyũ',
|
|||
|
'rw' => 'kinyaRwanda',
|
|||
|
'ky' => 'кыргыз тили',
|
|||
|
'kv' => 'коми кыв',
|
|||
|
'kg' => 'Kikongo',
|
|||
|
'ko' => '한국어 (韓國語)',
|
|||
|
'kj' => 'Kurdish',
|
|||
|
'lo' => 'ພາສາລາວ',
|
|||
|
'la' => 'latine',
|
|||
|
'lv' => 'latviešu valoda',
|
|||
|
'li' => 'Limburgs',
|
|||
|
'ln' => 'lingala',
|
|||
|
'lt' => 'lietuvių kalba',
|
|||
|
'lu' => 'Luxembourgish',
|
|||
|
'mg' => 'Malagasy fiteny',
|
|||
|
'ms' => 'bahasa Melayu',
|
|||
|
'ml' => 'മലയാളം',
|
|||
|
'mt' => 'Malti',
|
|||
|
'gv' => 'Gaelg',
|
|||
|
'mi' => 'te reo Māori',
|
|||
|
'mr' => 'मराठी',
|
|||
|
'mh' => 'Kajin M̧ajeļ',
|
|||
|
'mn' => 'монгол хэл',
|
|||
|
'na' => 'Ekakairũ Naoero',
|
|||
|
'nv' => 'Diné bizaad',
|
|||
|
'nd' => 'isiNdebele',
|
|||
|
'nr' => 'isiNdebele',
|
|||
|
'ng' => 'Owambo',
|
|||
|
'ne' => 'नेपाली',
|
|||
|
'se' => 'sámi',
|
|||
|
'no' => 'Norsk',
|
|||
|
'nb' => 'Norsk bokmål',
|
|||
|
'nn' => 'Norsk nynorsk',
|
|||
|
'oc' => 'Occitan',
|
|||
|
'oj' => 'ᐊᓂᔑᓇᐯᒧᐏᐣ (Anishinaabemowin)',
|
|||
|
'or' => 'ଓଡ଼ିଆ',
|
|||
|
'om' => 'Afaan Oromoo',
|
|||
|
'os' => 'ирон ӕвзаг',
|
|||
|
'pi' => 'पालि',
|
|||
|
'fa' => 'فارسی',
|
|||
|
'pl' => 'polski',
|
|||
|
'pt' => 'português',
|
|||
|
'pa' => 'ਪੰਜਾਬੀ',
|
|||
|
'ps' => 'پښتو',
|
|||
|
'qu' => 'Runa Simi',
|
|||
|
'rm' => 'rumantsch grischun',
|
|||
|
'rn' => 'kiRundi',
|
|||
|
'ru' => 'русский язык',
|
|||
|
'sm' => 'gagana fa\'a Samoa',
|
|||
|
'sg' => 'yângâ tî sängö',
|
|||
|
'sa' => 'संस्कृतम्',
|
|||
|
'sc' => 'sardu',
|
|||
|
'gd' => 'Gàidhlig',
|
|||
|
'sr' => 'српски језик',
|
|||
|
'sn' => 'chiShona',
|
|||
|
'ii' => 'ꆇꉙ',
|
|||
|
'sd' => 'سنڌي، سندھی',
|
|||
|
'si' => 'සිංහල',
|
|||
|
'sk' => 'slovenčina',
|
|||
|
'sl' => 'slovenščina',
|
|||
|
'so' => 'Soomaaliga',
|
|||
|
'st' => 'Sesotho',
|
|||
|
'es' => 'español',
|
|||
|
'su' => 'basa Sunda',
|
|||
|
'sw' => 'kiswahili',
|
|||
|
'ss' => 'siSwati',
|
|||
|
'sv' => 'Svenska',
|
|||
|
'tl' => 'Tagalog',
|
|||
|
'ty' => 'te reo Tahiti',
|
|||
|
'tg' => 'тоҷикӣ',
|
|||
|
'ta' => 'தமிழ்',
|
|||
|
'tt' => 'татарча',
|
|||
|
'te' => 'తెలుగు',
|
|||
|
'th' => 'ภาษาไทย',
|
|||
|
'bo' => 'བོད་ཡིག',
|
|||
|
'ti' => 'ትግርኛ',
|
|||
|
'to' => 'faka-Tonga',
|
|||
|
'ts' => 'Xitsonga',
|
|||
|
'tn' => 'Setswana',
|
|||
|
'tr' => 'Türkçe',
|
|||
|
'tk' => 'Түркмен',
|
|||
|
'tw' => 'Twi',
|
|||
|
'ug' => 'Uyƣurqə',
|
|||
|
'uk' => 'українська мова',
|
|||
|
'ur' => 'اردو',
|
|||
|
'uz' => 'O\'zbek',
|
|||
|
've' => 'Tshivenḓa',
|
|||
|
'vi' => 'Tiếng Việt',
|
|||
|
'vo' => 'Volapük',
|
|||
|
'wa' => 'walon',
|
|||
|
'cy' => 'Cymraeg',
|
|||
|
'wo' => 'Wolof',
|
|||
|
'xh' => 'isiXhosa',
|
|||
|
'yi' => 'ייִדיש',
|
|||
|
'yo' => 'Yorùbá',
|
|||
|
'za' => 'Saɯ cueŋƅ',
|
|||
|
'zu' => 'isiZulu',
|
|||
|
);
|
|||
|
if ($lang) {
|
|||
|
$res = array_flip($res);
|
|||
|
ksort($res); //order by lang
|
|||
|
}
|
|||
|
return $res;
|
|||
|
}
|
|||
|
|
|||
|
public static function getInstalledLanguages()
|
|||
|
{
|
|||
|
$l = array();
|
|||
|
$nl = self::getNativeLanguages();
|
|||
|
foreach (Pluf::f('languages', array('en')) as $lang) {
|
|||
|
$lang2 = substr($lang, 0, 2);
|
|||
|
$l[mb_convert_case($nl[$lang2], MB_CASE_TITLE, 'UTF-8')] = $lang;
|
|||
|
}
|
|||
|
return $l;
|
|||
|
}
|
|||
|
}
|