2008-08-19 Evi Vanoost <vanooste@rcbi.rochester.edu>

* include/locale.class.php: Locale class for number, time and money 
        formatting. Latest version, much corrections.

        * include/functions_db.php: HTML corrections (close tags)

        * include/config_process.php: Process $config['locale'] and init LOCALE 
        class. Still needs to be implemented in a "userspace" function 

        * general/footer.php: Updated footer to use locale class (not function) 
        to display the date and number. Just an example of the possibility


git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@1011 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
guruevi 2008-08-19 17:09:44 +00:00
parent 5c730afad8
commit 20c7a00281
5 changed files with 999 additions and 15 deletions

View File

@ -1,3 +1,16 @@
2008-08-19 Evi Vanoost <vanooste@rcbi.rochester.edu>
* include/locale.class.php: Locale class for number, time and money
formatting. Latest version, much corrections.
* include/functions_db.php: HTML corrections (close tags)
* include/config_process.php: Process $config['locale'] and init LOCALE
class. Still needs to be implemented in a "userspace" function
* general/footer.php: Updated footer to use locale class (not function)
to display the date and number. Just an example of the possibility
2008-08-18 Esteban Sanchez <estebans@artica.es>
* operation/menu.php: Fixes events submenu and link to CSV exporting.

View File

@ -26,6 +26,6 @@ __('is a <b>OpenSource Software Project, licensed under GPL terms</b>').'</a><br
} else {
$time = time();
}
echo "<a class='white'>".__('Page generated at')." ".date("D F d, Y H:i:s", $time)." - Saved ".$sql_cache["saved"]." Queries</a><br>";
echo "<a class='white'>".__('Page generated at')." ".$LOCALE->fmt_time($time)." - Saved ".$LOCALE->fmt_number($sql_cache["saved"])." Queries</a><br>";
echo "</center>";
?>

View File

@ -113,4 +113,11 @@ if (file_exists ('./include/languages/'.$config["language"].'.mo')) {
$l10n = new gettext_reader (new CachedFileReader ('./include/languages/'.$config["language"].'.mo'));
$l10n->load_tables();
}
require_once ('locale.class.php');
if (empty ($config["locale"])) {
$config["locale"] = "en_US";
}
$LOCALE = new Set_Locale ($config["locale"]);
?>

View File

@ -1772,16 +1772,16 @@ function show_alert_row_mini ($id_combined_alert) {
WHERE tcompound_alert.id_aam = talerta_agente_modulo.id_aam AND tcompound_alert.id = %d",$id_combined_alert);
$result = get_db_all_rows_sql ($sql);
echo "<table width=400 cellpadding=2 cellspacing=2 class='databox'>";
echo "<th>".__('Name');
echo "<th>".__('Oper');
echo "<th>".__('Tt');
echo "<th>".__('Firing');
echo "<th>".__('Time');
echo "<th>".__('Desc');
echo "<th>".__('Recovery');
echo "<th>".__('MinMax.Al');
echo "<th>".__('Days');
echo "<th>".__('Fired');
echo "<th>".__('Name')."</th>";
echo "<th>".__('Oper')."</th>";
echo "<th>".__('Tt')."</th>";
echo "<th>".__('Firing')."</th>";
echo "<th>".__('Time')."</th>";
echo "<th>".__('Desc')."</th>";
echo "<th>".__('Recovery')."</th>";
echo "<th>".__('MinMax.Al')."</th>";
echo "<th>".__('Days')."</th>";
echo "<th>".__('Fired')."</th>";
foreach ($result as $row2) {
if ($color == 1) {
$tdcolor = "datos";
@ -1794,10 +1794,10 @@ function show_alert_row_mini ($id_combined_alert) {
if ($row2["disable"] == 1) {
$tdcolor = "datos3";
}
echo "<td class=$tdcolor>".get_db_sql ("SELECT nombre FROM tagente_modulo WHERE id_agente_modulo =".$row2["id_agente_modulo"]);
echo "<td class=$tdcolor>".$row2["operation"];
echo "<td class=$tdcolor>".get_db_sql ("SELECT nombre FROM tagente_modulo WHERE id_agente_modulo =".$row2["id_agente_modulo"])."</td>";
echo "<td class=$tdcolor>".$row2["operation"]."</td>";
echo "<td class='$tdcolor'>".human_time_description ($row2["time_threshold"]);
echo "<td class='$tdcolor'>".human_time_description ($row2["time_threshold"])."</td>";
if ($row2["dis_min"]!=0) {
$mytempdata = fmod ($row2["dis_min"], 1);
@ -1885,7 +1885,7 @@ function smal_event_table ($filter = "", $limit = 10, $width = 440) {
$sql = sprintf ("SELECT * FROM tevento %s ORDER BY timestamp DESC LIMIT %d",$filter,$limit);
echo "<table cellpadding='4' cellspacing='4' width='$width' border=0 class='databox'>";
echo "<tr>";
echo "<th colspan=6>".__('Latest events');
echo "<th colspan=6>".__('Latest events')."</th>";
echo "<tr>";
echo "<th class='datos3 f9'>".__('St')."</th>";
echo "<th class='datos3 f9'>".__('Type')."</th>";

View File

@ -0,0 +1,964 @@
<?php
// Locale Class - Working number, date and monetary converter
// ------------------------------------------------------------
// Copyright (c) 2008 Evi Vanoost (vanooste@rcbi.rochester.edu)
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation for version 2.
// This program 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 General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// This class should only be used for output, not for the parsing of input nor
// database storage. This class might output UTF-8 codes that might not be
// supported by all output formats. Please format these strings accordingly.
class Set_Locale {
public $localedir = ""; //can be set from outside or you should set it here if it's in an unusual location
protected $locales = array();
public $locale = "";
private $NUMFORMAT;
private $MONFORMAT;
private $TIMEFORMAT;
public $lang_codes = 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; Bangla',
'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' => 'Faeroese',
'fr' => 'French',
'fy' => 'Frisian',
'ga' => 'Irish',
'gd' => 'Scots Gaelic',
'gl' => 'Galician',
'gn' => 'Guarani',
'gu' => 'Gujarati',
'ha' => 'Hausa',
'hi' => 'Hindi',
'hr' => 'Croatian',
'hu' => 'Hungarian',
'hy' => 'Armenian',
'ia' => 'Interlingua',
'ie' => 'Interlingue',
'ik' => 'Inupiak',
'in' => 'Indonesian',
'is' => 'Icelandic',
'it' => 'Italian',
'iw' => 'Hebrew',
'ja' => 'Japanese',
'ji' => 'Yiddish',
'jw' => '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' => 'Kirundi',
'ro' => 'Romanian',
'ru' => 'Russian',
'rw' => 'Kinyarwanda',
'sa' => 'Sanskrit',
'sd' => 'Sindhi',
'sg' => 'Sangro',
'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' => 'Tegulu',
'tg' => 'Tajik',
'th' => 'Thai',
'ti' => 'Tigrinya',
'tk' => 'Turkmen',
'tl' => 'Tagalog',
'tn' => 'Setswana',
'to' => 'Tonga',
'tr' => 'Turkish',
'ts' => 'Tsonga',
'tt' => 'Tatar',
'tw' => 'Twi',
'uk' => 'Ukrainian',
'ur' => 'Urdu',
'uz' => 'Uzbek',
'vi' => 'Vietnamese',
'vo' => 'Volapuk',
'wo' => 'Wolof',
'xh' => 'Xhosa',
'yo' => 'Yoruba',
'zh' => 'Chinese',
'zu' => 'Zulu'
);
public $country_codes = array(
'AF' => 'AFGHANISTAN',
'AL' => 'ALBANIA',
'DZ' => 'ALGERIA',
'AS' => 'AMERICAN SAMOA',
'AD' => 'ANDORRA',
'AO' => 'ANGOLA',
'AI' => 'ANGUILLA',
'AQ' => 'ANTARCTICA',
'AG' => 'ANTIGUA AND BARBUDA',
'AR' => 'ARGENTINA',
'AM' => 'ARMENIA',
'AW' => 'ARUBA',
'AU' => 'AUSTRALIA',
'AT' => 'AUSTRIA',
'AZ' => 'AZERBAIJAN',
'BS' => 'BAHAMAS',
'BH' => 'BAHRAIN',
'BD' => 'BANGLADESH',
'BB' => 'BARBADOS',
'BY' => 'BELARUS',
'BE' => 'BELGIUM',
'BZ' => 'BELIZE',
'BJ' => 'BENIN',
'BM' => 'BERMUDA',
'BT' => 'BHUTAN',
'BO' => 'BOLIVIA',
'BA' => 'BOSNIA AND HERZEGOWINA',
'BW' => 'BOTSWANA',
'BV' => 'BOUVET ISLAND',
'BR' => 'BRAZIL',
'IO' => 'BRITISH INDIAN OCEAN TERRITORY',
'BN' => 'BRUNEI DARUSSALAM',
'BG' => 'BULGARIA',
'BF' => 'BURKINA FASO',
'BI' => 'BURUNDI',
'KH' => 'CAMBODIA',
'CM' => 'CAMEROON',
'CA' => 'CANADA',
'CV' => 'CAPE VERDE',
'KY' => 'CAYMAN ISLANDS',
'CF' => 'CENTRAL AFRICAN REPUBLIC',
'TD' => 'CHAD',
'CL' => 'CHILE',
'CN' => 'CHINA',
'CX' => 'CHRISTMAS ISLAND',
'CC' => 'COCOS (KEELING) ISLANDS',
'CO' => 'COLOMBIA',
'KM' => 'COMOROS',
'CG' => 'CONGO',
'CD' => 'CONGO, THE DEMOCRATIC REPUBLIC OF THE',
'CK' => 'COOK ISLANDS',
'CR' => 'COSTA RICA',
'CI' => 'COTE D\'IVOIRE',
'HR' => 'CROATIA (local name: Hrvatska)',
'CU' => 'CUBA',
'CY' => 'CYPRUS',
'CZ' => 'CZECH REPUBLIC',
'DK' => 'DENMARK',
'DJ' => 'DJIBOUTI',
'DM' => 'DOMINICA',
'DO' => 'DOMINICAN REPUBLIC',
'TP' => 'EAST TIMOR',
'EC' => 'ECUADOR',
'EG' => 'EGYPT',
'SV' => 'EL SALVADOR',
'GQ' => 'EQUATORIAL GUINEA',
'ER' => 'ERITREA',
'EE' => 'ESTONIA',
'ET' => 'ETHIOPIA',
'FK' => 'FALKLAND ISLANDS (MALVINAS)',
'FO' => 'FAROE ISLANDS',
'FJ' => 'FIJI',
'FI' => 'FINLAND',
'FR' => 'FRANCE',
'FX' => 'FRANCE, METROPOLITAN',
'GF' => 'FRENCH GUIANA',
'PF' => 'FRENCH POLYNESIA',
'TF' => 'FRENCH SOUTHERN TERRITORIES',
'GA' => 'GABON',
'GM' => 'GAMBIA',
'GE' => 'GEORGIA',
'DE' => 'GERMANY',
'GH' => 'GHANA',
'GI' => 'GIBRALTAR',
'GR' => 'GREECE',
'GL' => 'GREENLAND',
'GD' => 'GRENADA',
'GP' => 'GUADELOUPE',
'GU' => 'GUAM',
'GT' => 'GUATEMALA',
'GN' => 'GUINEA',
'GW' => 'GUINEA-BISSAU',
'GY' => 'GUYANA',
'HT' => 'HAITI',
'HM' => 'HEARD AND MC DONALD ISLANDS',
'VA' => 'HOLY SEE (VATICAN CITY STATE)',
'HN' => 'HONDURAS',
'HK' => 'HONG KONG',
'HU' => 'HUNGARY',
'IS' => 'ICELAND',
'IN' => 'INDIA',
'ID' => 'INDONESIA',
'IR' => 'IRAN (ISLAMIC REPUBLIC OF)',
'IQ' => 'IRAQ',
'IE' => 'IRELAND',
'IL' => 'ISRAEL',
'IT' => 'ITALY',
'JM' => 'JAMAICA',
'JP' => 'JAPAN',
'JO' => 'JORDAN',
'KZ' => 'KAZAKHSTAN',
'KE' => 'KENYA',
'KI' => 'KIRIBATI',
'KP' => 'KOREA, DEMOCRATIC PEOPLE\'S REPUBLIC OF',
'KR' => 'KOREA, REPUBLIC OF',
'KW' => 'KUWAIT',
'KG' => 'KYRGYZSTAN',
'LA' => 'LAO PEOPLE\'S DEMOCRATIC REPUBLIC',
'LV' => 'LATVIA',
'LB' => 'LEBANON',
'LS' => 'LESOTHO',
'LR' => 'LIBERIA',
'LY' => 'LIBYAN ARAB JAMAHIRIYA',
'LI' => 'LIECHTENSTEIN',
'LT' => 'LITHUANIA',
'LU' => 'LUXEMBOURG',
'MO' => 'MACAU',
'MK' => 'MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF',
'MG' => 'MADAGASCAR',
'MW' => 'MALAWI',
'MY' => 'MALAYSIA',
'MV' => 'MALDIVES',
'ML' => 'MALI',
'MT' => 'MALTA',
'MH' => 'MARSHALL ISLANDS',
'MQ' => 'MARTINIQUE',
'MR' => 'MAURITANIA',
'MU' => 'MAURITIUS',
'YT' => 'MAYOTTE',
'MX' => 'MEXICO',
'FM' => 'MICRONESIA, FEDERATED STATES OF',
'MD' => 'MOLDOVA, REPUBLIC OF',
'MC' => 'MONACO',
'MN' => 'MONGOLIA',
'MS' => 'MONTSERRAT',
'MA' => 'MOROCCO',
'MZ' => 'MOZAMBIQUE',
'MM' => 'MYANMAR',
'NA' => 'NAMIBIA',
'NR' => 'NAURU',
'NP' => 'NEPAL',
'NL' => 'NETHERLANDS',
'AN' => 'NETHERLANDS ANTILLES',
'NC' => 'NEW CALEDONIA',
'NZ' => 'NEW ZEALAND',
'NI' => 'NICARAGUA',
'NE' => 'NIGER',
'NG' => 'NIGERIA',
'NU' => 'NIUE',
'NF' => 'NORFOLK ISLAND',
'MP' => 'NORTHERN MARIANA ISLANDS',
'NO' => 'NORWAY',
'OM' => 'OMAN',
'PK' => 'PAKISTAN',
'PW' => 'PALAU',
'PS' => 'PALESTINIAN TERRITORY, OCCUPIED',
'PA' => 'PANAMA',
'PG' => 'PAPUA NEW GUINEA',
'PY' => 'PARAGUAY',
'PE' => 'PERU',
'PH' => 'PHILIPPINES',
'PN' => 'PITCAIRN',
'PL' => 'POLAND',
'PT' => 'PORTUGAL',
'PR' => 'PUERTO RICO',
'QA' => 'QATAR',
'RE' => 'REUNION',
'RO' => 'ROMANIA',
'RU' => 'RUSSIAN FEDERATION',
'RW' => 'RWANDA',
'KN' => 'SAINT KITTS AND NEVIS',
'LC' => 'SAINT LUCIA',
'VC' => 'SAINT VINCENT AND THE GRENADINES',
'WS' => 'SAMOA',
'SM' => 'SAN MARINO',
'ST' => 'SAO TOME AND PRINCIPE',
'SA' => 'SAUDI ARABIA',
'SN' => 'SENEGAL',
'SC' => 'SEYCHELLES',
'SL' => 'SIERRA LEONE',
'SG' => 'SINGAPORE',
'SK' => 'SLOVAKIA (Slovak Republic)',
'SI' => 'SLOVENIA',
'SB' => 'SOLOMON ISLANDS',
'SO' => 'SOMALIA',
'ZA' => 'SOUTH AFRICA',
'GS' => 'SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS',
'ES' => 'SPAIN',
'LK' => 'SRI LANKA',
'SH' => 'ST. HELENA',
'PM' => 'ST. PIERRE AND MIQUELON',
'SD' => 'SUDAN',
'SR' => 'SURINAME',
'SJ' => 'SVALBARD AND JAN MAYEN ISLANDS',
'SZ' => 'SWAZILAND',
'SE' => 'SWEDEN',
'CH' => 'SWITZERLAND',
'SY' => 'SYRIAN ARAB REPUBLIC',
'TW' => 'TAIWAN, PROVINCE OF CHINA',
'TJ' => 'TAJIKISTAN',
'TZ' => 'TANZANIA, UNITED REPUBLIC OF',
'TH' => 'THAILAND',
'TG' => 'TOGO',
'TK' => 'TOKELAU',
'TO' => 'TONGA',
'TT' => 'TRINIDAD AND TOBAGO',
'TN' => 'TUNISIA',
'TR' => 'TURKEY',
'TM' => 'TURKMENISTAN',
'TC' => 'TURKS AND CAICOS ISLANDS',
'TV' => 'TUVALU',
'UG' => 'UGANDA',
'UA' => 'UKRAINE',
'AE' => 'UNITED ARAB EMIRATES',
'GB' => 'UNITED KINGDOM',
'US' => 'UNITED STATES',
'UM' => 'UNITED STATES MINOR OUTLYING ISLANDS',
'UY' => 'URUGUAY',
'UZ' => 'UZBEKISTAN',
'VU' => 'VANUATU',
'VE' => 'VENEZUELA',
'VN' => 'VIET NAM',
'VG' => 'VIRGIN ISLANDS (BRITISH)',
'VI' => 'VIRGIN ISLANDS (U.S.)',
'WF' => 'WALLIS AND FUTUNA ISLANDS',
'EH' => 'WESTERN SAHARA',
'YE' => 'YEMEN',
'YU' => 'YUGOSLAVIA',
'ZM' => 'ZAMBIA',
'ZW' => 'ZIMBABWE'
);
//ISO-4217 currency codes
public $currency_codes = array (
'ADP' => 'Andorran Peseta',
'AED' => 'UAE Dirham',
'AFA' => 'Afghani',
'ALL' => 'Lek',
'AMD' => 'Armenian Dram',
'ANG' => 'Antillian Guilder',
'AON' => 'New Kwanza',
'AOR' => 'Kwanza Reajustado',
'ARS' => 'Argentine Peso',
'ATS' => 'Schilling',
'AUD' => 'Australian Dollar',
'AWG' => 'Aruban Guilder',
'AZM' => 'Azerbaijanian Manat',
'BAM' => 'Convertible Marks',
'BBD' => 'Barbados Dollar',
'BDT' => 'Taka',
'BEF' => 'Belgian Franc',
'BGL' => 'Lev',
'BGN' => 'Bulgarian LEV',
'BHD' => 'Bahraini Dinar',
'BIF' => 'Burundi Franc',
'BMD' => 'Bermudian Dollar',
'BND' => 'Brunei Dollar',
'BRL' => 'Brazilian Real',
'BSD' => 'Bahamian Dollar',
'BTN' => 'Ngultrum',
'BWP' => 'Pula',
'BYR' => 'Belarussian Ruble',
'BZD' => 'Belize Dollar',
'CAD' => 'Canadian Dollar',
'CDF' => 'Franc Congolais',
'CHF' => 'Swiss Franc',
'CHF' => 'Swiss Franc',
'CLF' => 'Unidades de fomento',
'CLP' => 'Chilean Peso',
'CNY' => 'Yuan Renminbi',
'COP' => 'Colombian Peso',
'CRC' => 'Costa Rican Colon',
'CUP' => 'Cuban Peso',
'CVE' => 'Cape Verde Escudo',
'CYP' => 'Cyprus Pound',
'CZK' => 'Czech Koruna',
'DEM' => 'Deutsche Mark',
'DJF' => 'Djibouti Franc',
'DKK' => 'Danish Krone',
'DOP' => 'Dominican Peso',
'DZD' => 'Algerian Dinar',
'ECS' => 'Sucre',
'ECV' => 'Unidad de Valor Constante (UVC)',
'EEK' => 'Kroon',
'EGP' => 'Egyptian Pound',
'ERN' => 'Nakfa',
'ESP' => 'Spanish Peseta',
'ETB' => 'Ethiopian Birr',
'EUR' => 'Euro',
'FIM' => 'Markka',
'FJD' => 'Fiji Dollar',
'FKP' => 'Pound',
'FRF' => 'French Franc',
'GBP' => 'Pound Sterling',
'GEL' => 'Lari',
'GHC' => 'Cedi',
'GIP' => 'Gibraltar Pound',
'GMD' => 'Dalasi',
'GNF' => 'Guinea Franc',
'GRD' => 'Drachma',
'GTQ' => 'Quetzal',
'GWP' => 'Guinea-Bissau Peso',
'GYD' => 'Guyana Dollar',
'HKD' => 'Hong Kong Dollar',
'HNL' => 'Lempira',
'HRK' => 'Kuna',
'HTG' => 'Gourde',
'HUF' => 'Forint',
'IDR' => 'Rupiah',
'IDR' => 'Rupiah',
'IEP' => 'Irish Pound',
'ILS' => 'New Israeli Sheqel',
'INR' => 'Indian Rupee',
'IQD' => 'Iraqi Dinar',
'IRR' => 'Iranian Rial',
'ISK' => 'Iceland Krona',
'ITL' => 'Italian Lira',
'JMD' => 'Jamaican Dollar',
'JOD' => 'Jordanian Dinar',
'JPY' => 'Yen',
'KES' => 'Kenyan Shilling',
'KGS' => 'Som',
'KHR' => 'Riel',
'KMF' => 'Comoro Franc',
'KPW' => 'North Korean Won',
'KRW' => 'Won',
'KWD' => 'Kuwaiti Dinar',
'KYD' => 'Cayman Islands Dollar',
'KZT' => 'Tenge',
'LAK' => 'Kip',
'LBP' => 'Lebanese Pound',
'LKR' => 'Sri Lanka Rupee',
'LRD' => 'Liberian Dollar',
'LSL' => 'Loti',
'LTL' => 'Lithuanian Litas',
'LUF' => 'Luxembourg Franc',
'LVL' => 'Latvian Lats',
'LYD' => 'Libyan Dinar',
'MAD' => 'Moroccan Dirham',
'MAD' => 'Moroccan Dirham',
'MDL' => 'Moldovan Leu',
'MGF' => 'Malagasy Franc',
'MKD' => 'Denar',
'MMK' => 'Kyat',
'MNT' => 'Tugrik',
'MOP' => 'Pataca',
'MRO' => 'Ouguiya',
'MTL' => 'Maltese Lira',
'MUR' => 'Mauritius Rupee',
'MVR' => 'Rufiyaa',
'MWK' => 'Kwacha',
'MXN' => 'Mexican Peso',
'MXV' => 'Mexican Unidad de Inversion (UDI)',
'MYR' => 'Malaysian Ringgit',
'MZM' => 'Metical',
'NAD' => 'Namibia Dollar',
'NGN' => 'Naira',
'NIO' => 'Cordoba Oro',
'NLG' => 'Netherlands Guilder',
'NOK' => 'Norwegian Krone',
'NPR' => 'Nepalese Rupee',
'NZD' => 'New Zealand Dollar',
'OMR' => 'Rial Omani',
'PAB' => 'Balboa',
'PEN' => 'Nuevo Sol',
'PGK' => 'Kina',
'PHP' => 'Philippine Peso',
'PKR' => 'Pakistan Rupee',
'PLN' => 'Zloty',
'PTE' => 'Portuguese Escudo',
'PYG' => 'Guarani',
'QAR' => 'Qatari Rial',
'ROL' => 'Leu',
'RUB' => 'Russian Ruble',
'RUR' => 'Russian Ruble',
'RWF' => 'Rwanda Franc',
'SAR' => 'Saudi Riyal',
'SBD' => 'Solomon Islands Dollar',
'SCR' => 'Seychelles Rupee',
'SDD' => 'Sudanese Dinar',
'SEK' => 'Swedish Krona',
'SGD' => 'Singapore Dollar',
'SHP' => 'St Helena Pound',
'SIT' => 'Tolar',
'SKK' => 'Slovak Koruna',
'SLL' => 'Leone',
'SOS' => 'Somali Shilling',
'SRG' => 'Surinam Guilder',
'STD' => 'Dobra',
'SVC' => 'El Salvador Colon',
'SYP' => 'Syrian Pound',
'SZL' => 'Lilangeni',
'THB' => 'Baht',
'TJR' => 'Tajik Ruble (old)',
'TJS' => 'Somoni',
'TMM' => 'Manat',
'TND' => 'Tunisian Dinar',
'TOP' => 'Pa\'anga',
'TPE' => 'Timor Escudo',
'TRL' => 'Turkish Lira',
'TTD' => 'Trinidad and Tobago Dollar',
'TWD' => 'New Taiwan Dollar',
'TZS' => 'Tanzanian Shilling',
'UAH' => 'Hryvnia',
'UGX' => 'Uganda Shilling',
'USD' => 'US Dollar',
'USN' => 'US Dollar (Next day)',
'USS' => 'US Dollar (Same day)',
'UYU' => 'Peso Uruguayo',
'UZS' => 'Uzbekistan Sum',
'VEB' => 'Bolivar',
'VND' => 'Dong',
'VUV' => 'Vatu',
'WST' => 'Tala',
'XAF' => 'CFA Franc BEAC',
'XAG' => 'Silver',
'XAU' => 'Gold Bond Markets Units',
'XBA' => 'European Composite Unit (EURCO)',
'XBB' => 'European Monetary Unit (E.M.U.-6)',
'XBC' => 'European Unit of Account 9 (E.U.A.- 9)',
'XBD' => 'European Unit of Account 17 (E.U.A.- 17)',
'XCD' => 'East Caribbean Dollar',
'XDR' => 'SDR',
'XFO' => 'Gold-Franc',
'XFU' => 'UIC-Franc',
'XOF' => 'CFA Franc BCEAO',
'XPD' => 'Palladium',
'XPF' => 'CFP Franc',
'XPT' => 'Platinum',
'XTS' => 'Currency for testing purposes',
'XXX' => 'Transactions without currency involved',
'YER' => 'Yemeni Rial',
'YUM' => 'New Dinar',
'ZAL' => '(financial Rand)',
'ZAR' => 'Rand',
'ZMK' => 'Kwacha',
'ZRN' => 'New Zaire',
'ZWD' => 'Zimbabwe Dollar'
);
//When initializing this and the locale specified cannot be found, the
//system default will be used
//@name = The name of the locale. Must be a locale available on the
//host system
//@cache = (Optional) Whether to use cache or not - will generate a
//file of format Set_Locale_%locale%.cache. Unless otherwise specified,
//this will be put into $_ENV['TMPDIR']. Use only if bash if the
//non-cached way is unusably slow or you have to use a pregenerated
//cache. In case of a pregenerated cache, most likely the date function
//will be unusable as well.
//@cacheloc = (Optional) Where to put the cache (if any). Could be
//useful to specify where to put a pregenerated cache (if locales are
//not available on a system) or if you can't put stuff in $_ENV["TMPDIR"]
function Set_Locale ($name, $cache = false, $cacheloc = false) {
exec("locale -a",$this->locales);
$this->locale = $name;
//Find out the cache location in case none is given
if($cacheloc === false) {
if(!empty($_ENV)) {
$cacheloc = $_ENV["TMPDIR"];
} elseif (ini_get('upload_tmp_dir') != "") {
$cacheloc = ini_get('upload_tmp_dir');
} elseif (is_dir("/tmp") && is_writable("/tmp")) {
$cacheloc = "/tmp";
} else {
$cacheloc = false;
$cache = false;
}
}
if($cache !== false) {
$cache_file = $cacheloc."/Set_Locale_".$name.".cache";
if(file_exists($cache_file)) {
$cacheobj = file_get_contents($cache_file);
$glob = unserialize($cacheobj);
$this->NUMFORMAT = $glob["NUMFORMAT"];
$this->MONFORMAT = $glob["MONFORMAT"];
$this->TIMEFORMAT = $glob["TIMEFORMAT"];
if(!empty($this->NUMFORMAT) && !empty($this->MONFORMAT) && !empty($this->TIMEFORMAT))
return true;
//If any of these is empty, we'll have
//to fill it with something so tthe
//functions goes on
}
}
if (!in_array($name,$this->locales)) {
if(in_array(getenv("LANG"),$this->locales)) {
$backup_locale = getenv("LANG");
} elseif(in_array("en_US",$this->locales)) {
$backup_locale = "en_US";
} elseif(in_array("es_ES",$this->locales)) {
$backup_locale = "es_ES";
}
if($backup_locale == "" || !in_array($backup_locale,$this->locales)) {
trigger_error("Bad locale set (".$name.") and no usable system locale",E_USER_ERROR);
} else {
trigger_error("Bad locale set (".$name."). Falling back to ".$backup_locale,E_USER_NOTICE);
return $this->Set_Locale($backup_locale);
}
}
putenv("LANG=".$name); //Setting variables in the exec line doesn't work in HTTP mode
exec("locale -c -k LC_NUMERIC",$numeric);
exec("locale -c -k LC_MONETARY",$monetary);
exec("locale -c -k LC_TIME",$time);
foreach ($numeric as $value) {
$value = split('=',$value);
if(!empty($value[1])) {
$this->NUMFORMAT[$value[0]] = str_replace('"','',$value[1]);
}
}
foreach ($monetary as $value) {
$value = split('=',$value);
if(!empty($value[1])) {
$this->MONFORMAT[$value[0]] = str_replace('"','',$value[1]);
}
}
foreach ($time as $value) {
$value = split('=',$value);
if(!empty($value[1])) {
$this->TIMEFORMAT[$value[0]] = str_replace('"','',$value[1]);
}
}
if($cache !== false) {
//Apparently we want to cache and we got this far, so
//cache is empty
$glob["NUMFORMAT"] = $this->NUMFORMAT;
$glob["MONFORMAT"] = $this->MONFORMAT;
$glob["TIMEFORMAT"] = $this->TIMEFORMAT;
$cacheobj = serialize($glob);
$fp = fopen($cache_file,'w+');
fwrite($fp,$cacheobj);
fclose($fp);
}
return true;
}
function Get_Locales_Array () {
return $this->locales;
}
function Get_Locales_SelectBox () {
foreach ($this->locales as $iter_locale) {
echo '<select name="'.$iter_locale.'">'.$this->Translate_Locale($iter_locale).'</select>';
}
}
function Translate_Locale ($locale) {
if($locale == "UTF-8" || $locale == "C" || $locale == "POSIX") {
return $locale; //Pure UTF-8, C or POSIX is not localized to a country
}
$lang_cntr = split("_",$langcntr_char[0]);
$lang = $lang_cntr[0];
$cntr = $lang_cntr[1];
$char = $langcntr_char[1];
unset ($langcntr_char, $lang_cntr);
if (in_array($lang,array_keys($this->lang_codes))) {
$lang = $this->lang_codes[$lang];
} else {
// __("Unknown");
$lang = "Unknown";
}
if (in_array($cntr,array_keys($this->country_codes))) {
$cntr = ucwords(strtolower($this->country_codes[$cntr]));
} else {
// __("Unknown");
$cntr = "Unknown";
}
if($char != "") {
$char = " - ".$char;
}
return $lang." (".$cntr.$char.")";
}
function Translate_Currency ($currency) {
$currency = trim($currency);
if(in_array($currency,array_keys($this->currency_codes))) {
return $this->currency_codes[$currency];
}
return "Unknown";
}
//This private function comes back with the precision of a specific
//number. It can parse scientific and should be extended in case other
//types of numbers give parsing problems
private function Parse_Number ($value) {
if(!is_numeric($value))
return false;
(float) $value = $value; //Convert string from something into float
$dot_pos = ltrim(strstr($value,'.'),'.'); //Tests if there is a decimal point in the string, returns the rest of the string, false otherwise
$sci_val = ltrim(stristr($value,'e'),'eE'); //Tests if the string is scientific notated, returns the rest of the string from E, false otherwise
if($sci_val != "") {
preg_match("/[0-9]+[e]/i",$dot_pos,$match);
$dot_pos = strlen($match[0]) - 1;
if($sci_val < 0) {
$precision = ($sci_val * -1) + $dot_pos; //The precision is the exponent + number of digits after comma
} else {
if($dot_pos > $sci_val) {
$precision = $dot_pos - $sci_val; //If the exponent is smaller than the number of digits affter comma, substract
} else {
$precision = 0;
}
}
} elseif($dot_pos != "") {
$precision = strlen($dot_pos);
} else {
$precision = "0";
}
return $precision;
}
// This function should get values as a non-formatted numeric string
// This can accept scientific notation and other forms
// Example: Correct - 1000.00
// Correct - 0.1e16
// Incorrect - 1,000.00
// Returns false if string is not numeric
//
// @value = Value to be formatted
// @precision = Optional - Precision (numbers after the comma). The function will
// automatically figure this out but if you want to force it, set it
function fmt_number ($value, $precision = false) {
if($precision === false) {
$precision = $this->Parse_Number($value);
}
if(empty($this->NUMFORMAT['decimal_point'])) {
$this->NUMFORMAT['decimal_point'] = "";
}
if(empty($this->NUMFORMAT['thousands_sep'])) {
$this->NUMFORMAT['thousands_sep'] = "";
}
return number_format($value,$precision,$this->NUMFORMAT['decimal_point'],$this->NUMFORMAT['thousands_sep']);
}
// This function should get values as a non formatted numeric string
// This cannot reliably accept scientific notations and other forms
// Example: Correct - 1000.00
// Incorrect - 1,000.00
// Undefined - 1e-15
// Returns false if string is not numeric
//
// @value = Value to be formatted
// @out = Optional - If you want to output the currency in SHORT ($),
// LONG (United States Dollars) or INTERNATIONAL (USD, EUR)
// @currency = Optional - If you want to output in another currency
// than the locale setting. Specify a string (eg. "$" or "USD").
// Specify the ISO string (USD, EUR) if you specify @out to be LONG.
// @precision = Optional - Precision (numbers after the comma). The function will
// automatically figure this out but if you want to force it, set it
function fmt_money ($value, $out = "INTERNATIONAL", $currency = false, $precision = false) {
//Calculate the precision
if($precision === false) {
if ($out == "SHORT") {
$precision = $this->MONFORMAT['frac_digits']; //Means we're local if we're outputting short
} else {
$precision = $this->MONFORMAT['int_frac_digits']; //Otherwise we're international and adhere to it
}
}
//Calculate the currency
if($currency !== false) {
if($out == "LONG") {
$currency = $this->Translate_Currency($currency);
}
} elseif($out == "SHORT") {
$currency = $this->MONFORMAT['currency_symbol'];
} elseif($out == "LONG") {
$currency = $this->Translate_Currency($currency);
} else {
$currency = $this->MONFORMAT['int_curr_symbol'];
}
//Find out the negativity sign
if($value < 0) {
$signed = $this->MONFORMAT['negative_sign'];
$value = $value * -1;
} else {
$signed = $this->MONFORMAT['positive_sign'];
}
$value = number_format($value,$precision,$this->MONFORMAT['mon_decimal_point'],$this->MONFORMAT['mon_thousands_sep']);
if($out == "LONG") {
//If output is long, then the currency comes after the
//value.
return $signed.$value." ".$currency;
}
return trim($currency)." ".$signed.$value; //This output should be universally (ISO) acceptable
}
//This function gets a non-formatted or formatted time string and
//converts it into a locale formatted timestring
// @utc: Set to 1 if the output should be UTC. Otherwise local timezone
// will be used. Unless Timezone offset is specified in the timestring
// (eg. UNIXTIME, ATOM or RFC) the local timezone will be used for input.
// @out: Specify the OUTPUT, according to locale can be
// DATETIME (Date and Time eg. Thu Aug 14 15:31:45 2008) -
// some/most systems will have translated output
// LONGTIME (Long Time output eg. 03:33:20 PM) - seems to be
// always American-style notation but localized
// DATE (Date output eg. 08/14/08)
// TIME (Time output eg. 15:33:20) - seems to be always
// international-style notation but localized
// string $format (A format that can be understood by PHP date)
// These are the safest definitions. Others can be used, but might not
// be defined across all locales and all systems
// @type: Specify the INPUT. Can be
// UNIXTIME for integer unix timeformat (default)
// MYSQL for MySQL format (2000-07-01 00:00)
// ATOM for strings like 2000-07-01T00:00:00+00:00
// RFC822 for RFC822 formatted strings
// ENGLISH A US English time string understood by strtotime()
// If an integer is sent as value, it will default to UNIXTIME
// @return: Comes back with a (possible UTF-8) string. Can contain
// UTF-8 characters which might have to be converted to HTML.
function fmt_time ($value, $type = "UNIXTIME", $out = "DATETIME", $utc = 0) {
if(!is_int($value) && $type != "UNIXTIME") {
switch ($type) {
case "MYSQL":
$value = preg_split('/[-:\s]+/i',$value);
$value = mktime($value[3],$value[4],$value[5],$value[1],$value[2],$value[0]);
break;
default:
$value = strtotime($value);
}
} elseif (!is_numeric($value)) {
trigger_error("Value given to fmt_time is not Unix Timestamp although it is specified");
return false;
}
if($utc == 1) {
$utc = "-u";
} else {
$utc = "";
}
//Command line processing is the safest
switch ($out) {
case "DATETIME":
$output = exec('LANGTEMP=\$LANG; LANG='.$this->locale.'; date '.$utc.' -r '.$value.' +"'.$this->TIMEFORMAT['d_t_fmt'].'"; LANG=\$LANGTEMP');
break;
case "LONGTIME":
$output = exec('LANGTEMP=\$LANG; LANG='.$this->locale.'; date '.$utc.' -r '.$value.' +"'.$this->TIMEFORMAT['t_fmt_ampm'].'"; LANG=\$LANGTEMP');
break;
case "DATE":
$output = exec('LANGTEMP=\$LANG; LANG='.$this->locale.'; date '.$utc.' -r '.$value.' +"'.$this->TIMEFORMAT['d_fmt'].'"; LANG=\$LANGTEMP');
break;
case "TIME":
$output = exec('LANGTEMP=\$LANG; LANG='.$this->locale.'; date '.$utc.' -r '.$value.' +"'.$this->TIMEFORMAT['t_fmt'].'"; LANG=\$LANGTEMP');
break;
default:
//This part cannot be safely localized (see
//warning with setlocale)
$output = date($out,$value);
}
return $output;
}
}
?>