/mvc/components/l10n
[return to app]1
<?php
/**
* Localization
*
* This is CakePHP's l10n class updated to PHP5 syntax for Vork
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @package cake
* @subpackage cake.cake.libs
* @since CakePHP(tm) v 1.2.0.4116
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
/**
* Localization
*
* @package cake
* @subpackage cake.cake.libs
*/
class l10nComponent {
/**
* The language for current locale
*
* @var string
* @access public
*/
public $language = 'English (United States)';
/**
* Locale search paths
*
* @var array
* @access public
*/
public $languagePath = array('eng');
/**
* ISO 639-3 for current locale
*
* @var string
* @access public
*/
public $lang = 'eng';
/**
* Locale
*
* @var string
* @access public
*/
public $locale = 'en_us';
/**
* Default ISO 639-3 language.
*
* DEFAULT_LANGUAGE is defined in an application this will be set as a fall back
*
* @var string
* @access public
*/
public $default = null;
/**
* Encoding used for current locale
*
* @var string
* @access public
*/
public $charset = 'utf-8';
/**
* Text direction for current locale
*
* @var string
* @access public
*/
public $direction = 'ltr';
/**
* Set to true if a locale is found
*
* @var string
* @access public
*/
public $found = false;
/**
* Maps ISO 639-3 to I10n::_l10nCatalog
*
* @var array
* @access private
*/
protected $_l10nMap = array(/* Afrikaans */ 'afr' => 'af',
/* Albanian */ 'alb' => 'sq',
/* Arabic */ 'ara' => 'ar',
/* Armenian - Armenia */ 'hye' => 'hy',
/* Basque */ 'baq' => 'eu',
/* Bosnian */ 'bos' => 'bs',
/* Bulgarian */ 'bul' => 'bg',
/* Byelorussian */ 'bel' => 'be',
/* Catalan */ 'cat' => 'ca',
/* Chinese */ 'chi' => 'zh',
/* Chinese */ 'zho' => 'zh',
/* Croatian */ 'hrv' => 'hr',
/* Czech */ 'cze' => 'cs',
/* Czech */ 'ces' => 'cs',
/* Danish */ 'dan' => 'da',
/* Dutch (Standard) */ 'dut' => 'nl',
/* Dutch (Standard) */ 'nld' => 'nl',
/* English */ 'eng' => 'en',
/* Estonian */ 'est' => 'et',
/* Faeroese */ 'fao' => 'fo',
/* Farsi */ 'fas' => 'fa',
/* Farsi */ 'per' => 'fa',
/* Finnish */ 'fin' => 'fi',
/* French (Standard) */ 'fre' => 'fr',
/* French (Standard) */ 'fra' => 'fr',
/* Gaelic (Scots) */ 'gla' => 'gd',
/* Galician */ 'glg' => 'gl',
/* German (Standard) */ 'deu' => 'de',
/* German (Standard) */ 'ger' => 'de',
/* Greek */ 'gre' => 'el',
/* Greek */ 'ell' => 'el',
/* Hebrew */ 'heb' => 'he',
/* Hindi */ 'hin' => 'hi',
/* Hungarian */ 'hun' => 'hu',
/* Icelandic */ 'ice' => 'is',
/* Icelandic */ 'isl' => 'is',
/* Indonesian */ 'ind' => 'id',
/* Irish */ 'gle' => 'ga',
/* Italian */ 'ita' => 'it',
/* Japanese */ 'jpn' => 'ja',
/* Korean */ 'kor' => 'ko',
/* Latvian */ 'lav' => 'lv',
/* Lithuanian */ 'lit' => 'lt',
/* Macedonian */ 'mac' => 'mk',
/* Macedonian */ 'mkd' => 'mk',
/* Malaysian */ 'may' => 'ms',
/* Malaysian */ 'msa' => 'ms',
/* Maltese */ 'mlt' => 'mt',
/* Norwegian */ 'nor' => 'no',
/* Norwegian Bokmal */ 'nob' => 'nb',
/* Norwegian Nynorsk */ 'nno' => 'nn',
/* Polish */ 'pol' => 'pl',
/* Portuguese (Portugal) */ 'por' => 'pt',
/* Rhaeto-Romanic */ 'roh' => 'rm',
/* Romanian */ 'rum' => 'ro',
/* Romanian */ 'ron' => 'ro',
/* Russian */ 'rus' => 'ru',
/* Sami (Lappish) */ 'smi' => 'sz',
/* Serbian */ 'scc' => 'sr',
/* Serbian */ 'srp' => 'sr',
/* Slovak */ 'slo' => 'sk',
/* Slovak */ 'slk' => 'sk',
/* Slovenian */ 'slv' => 'sl',
/* Sorbian */ 'wen' => 'sb',
/* Spanish (Spain - Traditional) */ 'spa' => 'es',
/* Swedish */ 'swe' => 'sv',
/* Thai */ 'tha' => 'th',
/* Tsonga */ 'tso' => 'ts',
/* Tswana */ 'tsn' => 'tn',
/* Turkish */ 'tur' => 'tr',
/* Ukrainian */ 'ukr' => 'uk',
/* Urdu */ 'urd' => 'ur',
/* Venda */ 'ven' => 've',
/* Vietnamese */ 'vie' => 'vi',
/* Welsh */ 'cym' => 'cy',
/* Xhosa */ 'xho' => 'xh',
/* Yiddish */ 'yid' => 'yi',
/* Zulu */ 'zul' => 'zu');
/**
* HTTP_ACCEPT_LANGUAGE catalog
*
* holds all information related to a language
*
* @var array
* @access private
*/
protected $_l10nCatalog = array(
'ar-dz' => array('language' => 'Arabic (Algeria)',
'locale' => 'ar_dz',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-eg' => array('language' => 'Arabic (Egypt)',
'locale' => 'ar_eg',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-iq' => array('language' => 'Arabic (Iraq)',
'locale' => 'ar_iq',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-jo' => array('language' => 'Arabic (Jordan)',
'locale' => 'ar_jo',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-kw' => array('language' => 'Arabic (Kuwait)',
'locale' => 'ar_kw',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-lb' => array('language' => 'Arabic (Lebanon)',
'locale' => 'ar_lb',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-ly' => array('language' => 'Arabic (Libya)',
'locale' => 'ar_ly',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-ma' => array('language' => 'Arabic (Morocco)',
'locale' => 'ar_ma',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-om' => array('language' => 'Arabic (Oman)',
'locale' => 'ar_om',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-qa' => array('language' => 'Arabic (Qatar)',
'locale' => 'ar_qa',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-sa' => array('language' => 'Arabic (Saudi Arabia)',
'locale' => 'ar_sa',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-sy' => array('language' => 'Arabic (Syria)',
'locale' => 'ar_sy',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-tn' => array('language' => 'Arabic (Tunisia)',
'locale' => 'ar_tn',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'ar-ye' => array('language' => 'Arabic (Yemen)',
'locale' => 'ar_ye',
'localeFallback' => 'ara',
'charset' => 'utf-8',
'direction' => 'rtl'),
'be' => array('language' => 'Byelorussian',
'locale' => 'bel',
'localeFallback' => 'bel',
'charset' => 'utf-8',
'direction' => 'ltr'),
'bg' => array('language' => 'Bulgarian',
'locale' => 'bul',
'localeFallback' => 'bul',
'charset' => 'utf-8',
'direction' => 'ltr'),
'bs' => array('language' => 'Bosnian',
'locale' => 'bos',
'localeFallback' => 'bos',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ca' => array('language' => 'Catalan',
'locale' => 'cat',
'localeFallback' => 'cat',
'charset' => 'utf-8',
'direction' => 'ltr'),
'cs' => array('language' => 'Czech',
'locale' => 'cze',
'localeFallback' => 'cze',
'charset' => 'utf-8',
'direction' => 'ltr'),
'da' => array('language' => 'Danish',
'locale' => 'dan',
'localeFallback' => 'dan',
'charset' => 'utf-8',
'direction' => 'ltr'),
'de' => array('language' => 'German (Standard)',
'locale' => 'deu',
'localeFallback' => 'deu',
'charset' => 'utf-8',
'direction' => 'ltr'),
'de-at' => array('language' => 'German (Austria)',
'locale' => 'de_at',
'localeFallback' => 'deu',
'charset' => 'utf-8',
'direction' => 'ltr'),
'de-ch' => array('language' => 'German (Swiss)',
'locale' => 'de_ch',
'localeFallback' => 'deu',
'charset' => 'utf-8',
'direction' => 'ltr'),
'de-de' => array('language' => 'German (Germany)',
'locale' => 'de_de',
'localeFallback' => 'deu',
'charset' => 'utf-8',
'direction' => 'ltr'),
'de-li' => array('language' => 'German (Liechtenstein)',
'locale' => 'de_li',
'localeFallback' => 'deu',
'charset' => 'utf-8',
'direction' => 'ltr'),
'de-lu' => array('language' => 'German (Luxembourg)',
'locale' => 'de_lu',
'localeFallback' => 'deu',
'charset' => 'utf-8',
'direction' => 'ltr'),
'e' => array('language' => 'Greek',
'locale' => 'gre',
'localeFallback' => 'gre',
'charset' => 'utf-8',
'direction' => 'ltr'),
'el' => array('language' => 'Greek',
'locale' => 'gre',
'localeFallback' => 'gre',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en' => array('language' => 'English',
'locale' => 'eng',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-au' => array('language' => 'English (Australian)',
'locale' => 'en_au',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-bz' => array('language' => 'English (Belize)',
'locale' => 'en_bz',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-ca' => array('language' => 'English (Canadian)',
'locale' => 'en_ca',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-gb' => array('language' => 'English (British)',
'locale' => 'en_gb',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-ie' => array('language' => 'English (Ireland)',
'locale' => 'en_ie',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-jm' => array('language' => 'English (Jamaica)',
'locale' => 'en_jm',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-nz' => array('language' => 'English (New Zealand)',
'locale' => 'en_nz',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-tt' => array('language' => 'English (Trinidad)',
'locale' => 'en_tt',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-us' => array('language' => 'English (United States)',
'locale' => 'en_us',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'en-za' => array('language' => 'English (South Africa)',
'locale' => 'en_za',
'localeFallback' => 'eng',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es' => array('language' => 'Spanish (Spain - Traditional)',
'locale' => 'spa',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-ar' => array('language' => 'Spanish (Argentina)',
'locale' => 'es_ar',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-bo' => array('language' => 'Spanish (Bolivia)',
'locale' => 'es_bo',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-cl' => array('language' => 'Spanish (Chile)',
'locale' => 'es_cl',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-co' => array('language' => 'Spanish (Colombia)',
'locale' => 'es_co',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-cr' => array('language' => 'Spanish (Costa Rica)',
'locale' => 'es_cr',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-do' => array('language' => 'Spanish (Dominican Republic)',
'locale' => 'es_do',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-ec' => array('language' => 'Spanish (Ecuador)',
'locale' => 'es_ec',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-es' => array('language' => 'Spanish (Spain)',
'locale' => 'es_es',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-gt' => array('language' => 'Spanish (Guatemala)',
'locale' => 'es_gt',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-hn' => array('language' => 'Spanish (Honduras)',
'locale' => 'es_hn',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-mx' => array('language' => 'Spanish (Mexican)',
'locale' => 'es_mx',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-ni' => array('language' => 'Spanish (Nicaragua)',
'locale' => 'es_ni',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-pa' => array('language' => 'Spanish (Panama)',
'locale' => 'es_pa',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-pe' => array('language' => 'Spanish (Peru)',
'locale' => 'es_pe',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-pr' => array('language' => 'Spanish (Puerto Rico)',
'locale' => 'es_pr',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-py' => array('language' => 'Spanish (Paraguay)',
'locale' => 'es_py',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-sv' => array('language' => 'Spanish (El Salvador)',
'locale' => 'es_sv',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-uy' => array('language' => 'Spanish (Uruguay)',
'locale' => 'es_uy',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'es-ve' => array('language' => 'Spanish (Venezuela)',
'locale' => 'es_ve',
'localeFallback' => 'spa',
'charset' => 'utf-8',
'direction' => 'ltr'),
'et' => array('language' => 'Estonian',
'locale' => 'est',
'localeFallback' => 'est',
'charset' => 'utf-8',
'direction' => 'ltr'),
'eu' => array('language' => 'Basque',
'locale' => 'baq',
'localeFallback' => 'baq',
'charset' => 'utf-8',
'direction' => 'ltr'),
'fa' => array('language' => 'Farsi',
'locale' => 'per',
'localeFallback' => 'per',
'charset' => 'utf-8',
'direction' => 'rtl'),
'fi' => array('language' => 'Finnish',
'locale' => 'fin',
'localeFallback' => 'fin',
'charset' => 'utf-8',
'direction' => 'ltr'),
'fo' => array('language' => 'Faeroese',
'locale' => 'fao',
'localeFallback' => 'fao',
'charset' => 'utf-8',
'direction' => 'ltr'),
'fr' => array('language' => 'French (Standard)',
'locale' => 'fre',
'localeFallback' => 'fre',
'charset' => 'utf-8',
'direction' => 'ltr'),
'fr-be' => array('language' => 'French (Belgium)',
'locale' => 'fr_be',
'localeFallback' => 'fre',
'charset' => 'utf-8',
'direction' => 'ltr'),
'fr-ca' => array('language' => 'French (Canadian)',
'locale' => 'fr_ca',
'localeFallback' => 'fre',
'charset' => 'utf-8',
'direction' => 'ltr'),
'fr-ch' => array('language' => 'French (Swiss)',
'locale' => 'fr_ch',
'localeFallback' => 'fre',
'charset' => 'utf-8',
'direction' => 'ltr'),
'fr-fr' => array('language' => 'French (France)',
'locale' => 'fr_fr',
'localeFallback' => 'fre',
'charset' => 'utf-8',
'direction' => 'ltr'),
'fr-lu' => array('language' => 'French (Luxembourg)',
'locale' => 'fr_lu',
'localeFallback' => 'fre',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ga' => array('language' => 'Irish',
'locale' => 'gle',
'localeFallback' => 'gle',
'charset' => 'utf-8',
'direction' => 'ltr'),
'gd' => array('language' => 'Gaelic (Scots)',
'locale' => 'gla',
'localeFallback' => 'gla',
'charset' => 'utf-8',
'direction' => 'ltr'),
'gd-ie' => array('language' => 'Gaelic (Irish)',
'locale' => 'gd_ie',
'localeFallback' => 'gla',
'charset' => 'utf-8',
'direction' => 'ltr'),
'gl' => array('language' => 'Galician',
'locale' => 'glg',
'localeFallback' => 'glg',
'charset' => 'utf-8',
'direction' => 'ltr'),
'he' => array('language' => 'Hebrew',
'locale' => 'heb',
'localeFallback' => 'heb',
'charset' => 'utf-8',
'direction' => 'rtl'),
'hi' => array('language' => 'Hindi',
'locale' => 'hin',
'localeFallback' => 'hin',
'charset' => 'utf-8',
'direction' => 'ltr'),
'hr' => array('language' => 'Croatian',
'locale' => 'hrv',
'localeFallback' => 'hrv',
'charset' => 'utf-8',
'direction' => 'ltr'),
'hu' => array('language' => 'Hungarian',
'locale' => 'hun',
'localeFallback' => 'hun',
'charset' => 'utf-8',
'direction' => 'ltr'),
'hy' => array('language' => 'Armenian - Armenia',
'locale' => 'hye',
'localeFallback' => 'hye',
'charset' => 'utf-8',
'direction' => 'ltr'),
'id' => array('language' => 'Indonesian',
'locale' => 'ind',
'localeFallback' => 'ind',
'charset' => 'utf-8',
'direction' => 'ltr'),
'in' => array('language' => 'Indonesian',
'locale' => 'ind',
'localeFallback' => 'ind',
'charset' => 'utf-8',
'direction' => 'ltr'),
'is' => array('language' => 'Icelandic',
'locale' => 'ice',
'localeFallback' => 'ice',
'charset' => 'utf-8',
'direction' => 'ltr'),
'it' => array('language' => 'Italian',
'locale' => 'ita',
'localeFallback' => 'ita',
'charset' => 'utf-8',
'direction' => 'ltr'),
'it-ch' => array('language' => 'Italian (Swiss) ',
'locale' => 'it_ch',
'localeFallback' => 'ita',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ja' => array('language' => 'Japanese',
'locale' => 'jpn',
'localeFallback' => 'jpn',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ko' => array('language' => 'Korean',
'locale' => 'kor',
'localeFallback' => 'kor',
'charset' => 'kr',
'direction' => 'ltr'),
'ko-kp' => array('language' => 'Korea (North)',
'locale' => 'ko_kp',
'localeFallback' => 'kor',
'charset' => 'kr',
'direction' => 'ltr'),
'ko-kr' => array('language' => 'Korea (South)',
'locale' => 'ko_kr',
'localeFallback' => 'kor',
'charset' => 'kr',
'direction' => 'ltr'),
'koi8-r' => array('language' => 'Russian',
'locale' => 'koi8_r',
'localeFallback' => 'rus',
'charset' => 'koi8-r',
'direction' => 'ltr'),
'lt' => array('language' => 'Lithuanian',
'locale' => 'lit',
'localeFallback' => 'lit',
'charset' => 'utf-8',
'direction' => 'ltr'),
'lv' => array('language' => 'Latvian',
'locale' => 'lav',
'localeFallback' => 'lav',
'charset' => 'utf-8',
'direction' => 'ltr'),
'mk' => array('language' => 'FYRO Macedonian',
'locale' => 'mk',
'localeFallback' => 'mac',
'charset' => 'utf-8',
'direction' => 'ltr'),
'mk-mk' => array('language' => 'Macedonian',
'locale' => 'mk_mk',
'localeFallback' => 'mac',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ms' => array('language' => 'Malaysian',
'locale' => 'may',
'localeFallback' => 'may',
'charset' => 'utf-8',
'direction' => 'ltr'),
'mt' => array('language' => 'Maltese',
'locale' => 'mlt',
'localeFallback' => 'mlt',
'charset' => 'utf-8',
'direction' => 'ltr'),
'n' => array('language' => 'Dutch (Standard)',
'locale' => 'dut',
'localeFallback' => 'dut',
'charset' => 'utf-8',
'direction' => 'ltr'),
'nb' => array('language' => 'Norwegian Bokmal',
'locale' => 'nob',
'localeFallback' => 'nor',
'charset' => 'utf-8',
'direction' => 'ltr'),
'nl' => array('language' => 'Dutch (Standard)',
'locale' => 'dut',
'localeFallback' => 'dut',
'charset' => 'utf-8',
'direction' => 'ltr'),
'nl-be' => array('language' => 'Dutch (Belgium)',
'locale' => 'nl_be',
'localeFallback' => 'dut',
'charset' => 'utf-8',
'direction' => 'ltr'),
'nn' => array('language' => 'Norwegian Nynorsk',
'locale' => 'nno',
'localeFallback' => 'nor',
'charset' => 'utf-8',
'direction' => 'ltr'),
'no' => array('language' => 'Norwegian',
'locale' => 'nor',
'localeFallback' => 'nor',
'charset' => 'utf-8',
'direction' => 'ltr'),
'p' => array('language' => 'Polish',
'locale' => 'pol',
'localeFallback' => 'pol',
'charset' => 'utf-8',
'direction' => 'ltr'),
'pl' => array('language' => 'Polish',
'locale' => 'pol',
'localeFallback' => 'pol',
'charset' => 'utf-8',
'direction' => 'ltr'),
'pt' => array('language' => 'Portuguese (Portugal)',
'locale' => 'por',
'localeFallback' => 'por',
'charset' => 'utf-8',
'direction' => 'ltr'),
'pt-br' => array('language' => 'Portuguese (Brazil)',
'locale' => 'pt_br',
'localeFallback' => 'por',
'charset' => 'utf-8',
'direction' => 'ltr'),
'rm' => array('language' => 'Rhaeto-Romanic',
'locale' => 'roh',
'localeFallback' => 'roh',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ro' => array('language' => 'Romanian',
'locale' => 'rum',
'localeFallback' => 'rum',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ro-mo' => array('language' => 'Romanian (Moldavia)',
'locale' => 'ro_mo',
'localeFallback' => 'rum',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ru' => array('language' => 'Russian',
'locale' => 'rus',
'localeFallback' => 'rus',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ru-mo' => array('language' => 'Russian (Moldavia)',
'locale' => 'ru_mo',
'localeFallback' => 'rus',
'charset' => 'utf-8',
'direction' => 'ltr'),
'sb' => array('language' => 'Sorbian',
'locale' => 'wen',
'localeFallback' => 'wen',
'charset' => 'utf-8',
'direction' => 'ltr'),
'sk' => array('language' => 'Slovak',
'locale' => 'slo',
'localeFallback' => 'slo',
'charset' => 'utf-8',
'direction' => 'ltr'),
'sl' => array('language' => 'Slovenian',
'locale' => 'slv',
'localeFallback' => 'slv',
'charset' => 'utf-8',
'direction' => 'ltr'),
'sq' => array('language' => 'Albanian',
'locale' => 'alb',
'localeFallback' => 'alb',
'charset' => 'utf-8',
'direction' => 'ltr'),
'sr' => array('language' => 'Serbian',
'locale' => 'scc',
'localeFallback' => 'scc',
'charset' => 'utf-8',
'direction' => 'ltr'),
'sv' => array('language' => 'Swedish',
'locale' => 'swe',
'localeFallback' => 'swe',
'charset' => 'utf-8',
'direction' => 'ltr'),
'sv-fi' => array('language' => 'Swedish (Finland)',
'locale' => 'sv_fi',
'localeFallback' => 'swe',
'charset' => 'utf-8',
'direction' => 'ltr'),
'sx' => array('language' => 'Sutu',
'locale' => 'sx',
'localeFallback' => 'sx',
'charset' => 'utf-8',
'direction' => 'ltr'),
'sz' => array('language' => 'Sami (Lappish)',
'locale' => 'smi',
'localeFallback' => 'smi',
'charset' => 'utf-8',
'direction' => 'ltr'),
'th' => array('language' => 'Thai',
'locale' => 'tha',
'localeFallback' => 'tha',
'charset' => 'utf-8',
'direction' => 'ltr'),
'tn' => array('language' => 'Tswana',
'locale' => 'tsn',
'localeFallback' => 'tsn',
'charset' => 'utf-8',
'direction' => 'ltr'),
'tr' => array('language' => 'Turkish',
'locale' => 'tur',
'localeFallback' => 'tur',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ts' => array('language' => 'Tsonga',
'locale' => 'tso',
'localeFallback' => 'tso',
'charset' => 'utf-8',
'direction' => 'ltr'),
'uk' => array('language' => 'Ukrainian',
'locale' => 'ukr',
'localeFallback' => 'ukr',
'charset' => 'utf-8',
'direction' => 'ltr'),
'ur' => array('language' => 'Urdu',
'locale' => 'urd',
'localeFallback' => 'urd',
'charset' => 'utf-8',
'direction' => 'rtl'),
've' => array('language' => 'Venda',
'locale' => 'ven',
'localeFallback' => 'ven',
'charset' => 'utf-8',
'direction' => 'ltr'),
'vi' => array('language' => 'Vietnamese',
'locale' => 'vie',
'localeFallback' => 'vie',
'charset' => 'utf-8',
'direction' => 'ltr'),
'cy' => array('language' => 'Welsh',
'locale' => 'cym',
'localeFallback' => 'cym',
'charset' => 'utf-8',
'direction' => 'ltr'),
'xh' => array('language' => 'Xhosa',
'locale' => 'xho',
'localeFallback' => 'xho',
'charset' => 'utf-8',
'direction' => 'ltr'),
'yi' => array('language' => 'Yiddish',
'locale' => 'yid',
'localeFallback' => 'yid',
'charset' => 'utf-8',
'direction' => 'ltr'),
'zh' => array('language' => 'Chinese',
'locale' => 'chi',
'localeFallback' => 'chi',
'charset' => 'utf-8',
'direction' => 'ltr'),
'zh-cn' => array('language' => 'Chinese (PRC)',
'locale' => 'zh_cn',
'localeFallback' => 'chi',
'charset' => 'GB2312',
'direction' => 'ltr'),
'zh-hk' => array('language' => 'Chinese (Hong Kong)',
'locale' => 'zh_hk',
'localeFallback' => 'chi',
'charset' => 'utf-8',
'direction' => 'ltr'),
'zh-sg' => array('language' => 'Chinese (Singapore)',
'locale' => 'zh_sg',
'localeFallback' => 'chi',
'charset' => 'utf-8',
'direction' => 'ltr'),
'zh-tw' => array('language' => 'Chinese (Taiwan)',
'locale' => 'zh_tw',
'localeFallback' => 'chi',
'charset' => 'utf-8',
'direction' => 'ltr'),
'zu' => array('language' => 'Zulu',
'locale' => 'zul',
'localeFallback' => 'zul',
'charset' => 'utf-8',
'direction' => 'ltr'));
/**
* Class constructor
*/
public function _construct() {
if (defined('DEFAULT_LANGUAGE')) {
$this->default = DEFAULT_LANGUAGE;
}
}
/**
* Gets the settings for $language.
* If $language is null it attempt to get settings from L10n::_autoLanguage(); if this fails
* the method will get the settings from L10n::_setLanguage();
*
* @param string $language Language (if null will use DEFAULT_LANGUAGE if defined)
* @access public
*/
public function get($language = null) {
if ($language !== null) {
return $this->_setLanguage($language);
} elseif ($this->_autoLanguage() === false) {
return $this->_setLanguage();
}
}
/**
* Sets the class vars to correct values for $language.
* If $language is null it will use the DEFAULT_LANGUAGE if defined
*
* @param string $language Language (if null will use DEFAULT_LANGUAGE if defined)
* @access private
*/
protected function _setLanguage($language = null) {
$langKey = null;
if ($language !== null && isset($this->_l10nMap[$language])
&& isset($this->_l10nCatalog[$this->_l10nMap[$language]])) {
$langKey = $this->_l10nMap[$language];
} else if ($language !== null && isset($this->_l10nCatalog[$language])) {
$langKey = $language;
} else if (defined('DEFAULT_LANGUAGE')) {
$langKey = $language = DEFAULT_LANGUAGE;
}
if ($langKey !== null && isset($this->_l10nCatalog[$langKey])) {
$this->language = $this->_l10nCatalog[$langKey]['language'];
$this->languagePath = array(
$this->_l10nCatalog[$langKey]['locale'],
$this->_l10nCatalog[$langKey]['localeFallback']
);
$this->lang = $language;
$this->locale = $this->_l10nCatalog[$langKey]['locale'];
$this->charset = $this->_l10nCatalog[$langKey]['charset'];
$this->direction = $this->_l10nCatalog[$langKey]['direction'];
} else {
$this->lang = $language;
$this->languagePath = array($language);
}
if ($this->default) {
if (isset($this->_l10nMap[$this->default]) &&
isset($this->_l10nCatalog[$this->_l10nMap[$this->default]])) {
$this->languagePath[] = $this->_l10nCatalog[$this->_l10nMap[$this->default]]['localeFallback'];
} else if (isset($this->_l10nCatalog[$this->default])) {
$this->languagePath[] = $this->_l10nCatalog[$this->default]['localeFallback'];
}
}
$this->found = true;
if ($language) {
return $language;
}
}
/**
* Attempts to find the locale settings based on the HTTP_ACCEPT_LANGUAGE variable
*
* @return boolean Success
* @access private
*/
protected function _autoLanguage() {
$basics = get::helper('cakeBasics');
$_detectableLanguages = preg_split('/[,;]/', $basics->env('HTTP_ACCEPT_LANGUAGE'));
foreach ($_detectableLanguages as $key => $langKey) {
$langKey = strtolower($langKey);
if (strpos($langKey, '_') !== false) {
$langKey = str_replace('_', '-', $langKey);
}
if (isset($this->_l10nCatalog[$langKey])) {
$this->_setLanguage($langKey);
return true;
} else if (strpos($langKey, '-') !== false) {
$langKey = substr($langKey, 0, 2);
if (isset($this->_l10nCatalog[$langKey])) {
$this->_setLanguage($langKey);
return true;
}
}
}
return false;
}
/**
* Attempts to find locale for language, or language for locale
*
* @param mixed $mixed 2/3 char string (language/locale), array of those strings, or null
* @return mixed string language/locale, array of those values, whole map as an array,
* or false when language/locale doesn't exist
* @access public
*/
public function map($mixed = null) {
if (is_array($mixed)) {
$result = array();
foreach ($mixed as $_mixed) {
if ($_result = $this->map($_mixed)) {
$result[$_mixed] = $_result;
}
}
return $result;
} else if (is_string($mixed)) {
if (strlen($mixed) === 2 && in_array($mixed, $this->_l10nMap)) {
return array_search($mixed, $this->_l10nMap);
} else if (isset($this->_l10nMap[$mixed])) {
return $this->_l10nMap[$mixed];
}
return false;
}
return $this->_l10nMap;
}
/**
* Attempts to find catalog record for requested language
*
* @param mixed $language string requested language, array of requested languages, or null for whole catalog
* @return mixed array catalog record for requested language, array of catalog records, whole catalog,
* or false when language doesn't exist
* @access public
*/
public function catalog($language = null) {
if (is_array($language)) {
$result = array();
foreach ($language as $_language) {
if ($_result = $this->catalog($_language)) {
$result[$_language] = $_result;
}
}
return $result;
} else if (is_string($language)) {
if (isset($this->_l10nCatalog[$language])) {
return $this->_l10nCatalog[$language];
} else if (isset($this->_l10nMap[$language]) &&
isset($this->_l10nCatalog[$this->_l10nMap[$language]])) {
return $this->_l10nCatalog[$this->_l10nMap[$language]];
}
return false;
}
return $this->_l10nCatalog;
}
}

