# Copyrights 2007-2013 by [Mark Overmeer].
# For other contributors see ChangeLog.
# See the manual pages for details on the licensing terms.
# Pod stripped from pm file by OODoc 2.01.
use warnings;
use strict;
package Log::Report::Win32Locale;
use vars '$VERSION';
$VERSION = '0.993';
use base 'Exporter';
our @EXPORT = qw/codepage_to_iso iso_to_codepage
iso_locale charset_encoding
ms_codepage_id ms_install_codepage_id ms_locale/;
use Win32::TieRegistry;
my %codepage2iso;
my %localewin2iso;
my %charsetwin;
while(<DATA>)
{ my ($codepage, $iso, $localewin, $charsetwin, $name) = split /\,\s*/, $_, 5;
defined $name or die "Missing field in '$_'";
$codepage2iso{hex $codepage} = $iso;
$localewin2iso{$localewin} = $iso;
$charsetwin{$localewin} = $charsetwin;
}
my %iso2codepage = reverse %codepage2iso;
close DATA;
sub codepage_to_iso($)
{ my $cp = shift;
defined $cp ? $codepage2iso{$cp =~ m/^0x/i ? hex($cp) : $cp} : ();
}
sub iso_to_codepage($)
{ my $iso = shift;
return $iso2codepage{$iso}
if $iso2codepage{$iso};
my ($lang) = split $iso, /\_/;
$iso2codepage{$lang};
}
sub iso_locale(;$)
{ my $locale = shift;
if(defined $locale)
{ my $iso = $localewin2iso{$locale} || $codepage2iso{$locale};
return $iso if $iso;
}
codepage_to_iso(ms_codepage_id())
|| codepage_to_iso(ms_locale());
}
# the following functions are rewrites of Win32::Codepage version 1.00
# Copyright 2005 Clotho Advanced Media, Inc. Under perl license.
# Win32 does not nicely export the functions.
my $nls = 'HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Nls';
my $del = {Access => Win32::TieRegistry::KEY_READ(), Delimiter => '/'};
my $codepages = Win32::TieRegistry->new("$nls/CodePage", $del);
my $languages = Win32::TieRegistry->new("$nls/Language", $del);
sub charset_encoding
{ my $charset = $codepages->GetValue("ACP") || $codepages->GetValue("OEMCP");
$charset && $charset =~ m/^[0-9a-fA-F]+$/ ? "cp".lc($charset) : undef;
}
sub ms_codepage_id
{ my $id = $languages->GetValue("Default");
$id && $id =~ m/^[0-9a-fA-F]+$/ ? hex($id) : undef;
}
sub ms_install_codepage_id
{ my $id = $languages->GetValue("InstallLanguage");
$id && $id =~ m/^[0-9a-fA-F]+$/ ? hex($id) : undef;
}
# the following functions are rewrites of Win32::Locale version 0.04
# Copyright (c) 2001,2003 Sean M. Burke, Under perl license.
# The module seems unmaintained, and treating the 'region' in the ISO
# code as lower-case is a mistake.
my $i18n = Win32::TieRegistry->new
("HKEY_CURRENT_USER/Control Panel/International", $del);
sub ms_locale
{ my $locale = $i18n->GetValue("Locale");
$locale =~ m/^[0-9a-fA-F]+$/ ? hex($locale) : undef;
}
1;
# taken from http://www.microsoft.com/globaldev/nlsweb on 2007/10/22
# merged with http://docs.moodle.org/en/Table_of_locales
# columns: codepage,ISO,localewin,localewincharset,language name
# use a wide terminal and tabstop=8
# After changes, sort with :.,$!sort -t, -k2,2
__DATA__
0x0036, af, , , Afrikaans
0x0436, af_ZA, Afrikaans_South Africa.1252, WINDOWS-1252, Afrikaans (South Africa)
0x045E, am_ET, , , Amharic (Ethiopia)
0x0001, ar, , , Arabic
0x3801, ar_AE, , , Arabic (U.A.E.)
0x3C01, ar_BH, , , Arabic (Bahrain)
0x1401, ar_DZ, , , Arabic (Algeria)
0x0C01, ar_EG, , , Arabic (Egypt)
0x0801, ar_IQ, , , Arabic (Iraq)
0x2C01, ar_JO, , , Arabic (Jordan)
0x3401, ar_KW, , , Arabic (Kuwait)
0x3001, ar_LB, , , Arabic (Lebanon)
0x1001, ar_LY, , , Arabic (Libya)
0x1801, ar_MA, , , Arabic (Morocco)
0x047A, arn_CL, , , Mapudungun (Chile)
0x2001, ar_OM, , , Arabic (Oman)
0x4001, ar_QA, , , Arabic (Qatar)
0x0401, ar_SA, Arabic_Saudi Arabia.1256, WINDOWS-1256, Arabic (Saudi Arabia)
0x2801, ar_SY, , , Arabic (Syria)
0x1C01, ar_TN, , , Arabic (Tunisia)
0x2401, ar_YE, , , Arabic (Yemen)
0x044D, as_IN, , , Assamese (India)
0x002C, az, , , Azeri
0x082C, az_Cyrl_AZ, , , Azeri (Cyrillic, Azerbaijan)
0x042C, az_Latn_AZ, , , Azeri (Latin, Azerbaijan)
0x046D, ba_RU, , , Bashkir (Russia)
0x0023, be, , , Belarusian
0x0423, be_BY, Belarusian_Belarus.1251, WINDOWS-1251, Belarusian (Belarus)
0x0002, bg, Bulgarian_Bulgaria.1251, WINDOWS-1251, Bulgarian
0x0402, bg_BG, , , Bulgarian (Bulgaria)
0x0845, bn_BD, , , Bengali (Bangladesh)
0x0445, bn_IN, Bengali (India), , Bengali (India)
0x0451, bo_CN, , , Tibetan (PRC)
0x047E, br_FR, , , Breton (France)
0x201A, bs_Cyrl_BA, , , Bosnian (Cyrillic, Bosnia and Herzegovina)
0x141A, bs_Latn_BA, Serbian (Latin), WINDOWS-1250, Bosnian (Latin, Bosnia and Herzegovina)
0x0003, ca, , , Catalan
0x0403, ca_ES, Catalan_Spain.1252, WINDOWS-1252, Catalan (Catalan)
0x0483, co_FR, , , Corsican (France)
0x0005, cs, , , Czech
0x0405, cs_CZ, Czech_Czech Republic.1250, WINDOWS-1250, Czech (Czech Republic)
0x0452, cy_GB, , , Welsh (United Kingdom)
0x0006, da, , , Danish
0x0406, da_DK, Danish_Denmark.1252, WINDOWS-1252, Danish (Denmark)
0x0007, de, , , German
0x0C07, de_AT, , , German (Austria)
0x0807, de_CH, , , German (Switzerland)
0x0407, de_DE, German_Germany.1252, WINDOWS-1252, German (Germany)
0x1407, de_LI, , , German (Liechtenstein)
0x1007, de_LU, , , German (Luxembourg)
0x0065, div, , , Divehi
0x0465, div_MV, , , Divehi (Maldives)
0x0008, el, , , Greek
0x0408, el_GR, Greek_Greece.1253, WINDOWS-1253, Greek (Greece)
0x0009, en, , , English
0x2409, en_029, , , English (Caribbean)
0x0C09, en_AU, English_Australia.1252, , English (Australia)
0x2809, en_BZ, , , English (Belize)
0x1009, en_CA, , , English (Canada)
0x0809, en_GB, , , English (United Kingdom)
0x1809, en_IE, , , English (Ireland)
0x4009, en_IN, , , English (India)
0x2009, en_JM, , , English (Jamaica)
0x4409, en_MY, , , English (Malaysia)
0x1409, en_NZ, , , English (New Zealand)
0x3409, en_PH, , , English (Republic of the Philippines)
0x4809, en_SG, , , English (Singapore)
0x2C09, en_TT, , , English (Trinidad and Tobago)
0x0409, en_US, , , English (United States)
0x1C09, en_ZA, , , English (South Africa)
0x3009, en_ZW, , , English (Zimbabwe)
0x000A, es, , , Spanish
0x2C0A, es_AR, , , Spanish (Argentina)
0x400A, es_BO, , , Spanish (Bolivia)
0x340A, es_CL, , , Spanish (Chile)
0x240A, es_CO, , , Spanish (Colombia)
0x140A, es_CR, , , Spanish (Costa Rica)
0x1C0A, es_DO, , , Spanish (Dominican Republic)
0x300A, es_EC, , , Spanish (Ecuador)
0x0C0A, es_ES, Spanish_Spain.1252, WINDOWS-1252, Spanish (Spain)
0x100A, es_GT, , , Spanish (Guatemala)
0x480A, es_HN, , , Spanish (Honduras)
0x080A, es_MX, , , Spanish (Mexico)
0x4C0A, es_NI, , , Spanish (Nicaragua)
0x180A, es_PA, , , Spanish (Panama)
0x280A, es_PE, , , Spanish (Peru)
0x500A, es_PR, , , Spanish (Puerto Rico)
0x3C0A, es_PY, , , Spanish (Paraguay)
0x440A, es_SV, , , Spanish (El Salvador)
0x540A, es_US, , , Spanish (United States)
0x380A, es_UY, , , Spanish (Uruguay)
0x200A, es_VE, , , Spanish (Venezuela)
0x0025, et, , , Estonian
0x0425, et_EE, Estonian_Estonia.1257, WINDOWS-1257, Estonian (Estonia)
0x002D, eu, , , Basque
0x042D, eu_ES, Basque_Spain.1252, WINDOWS-1252, Basque (Basque)
0x0029, fa, , , Persian
0x0429, fa_IR, , , Persian
, fa_IR, Farsi_Iran.1256, WINDOWS-1256, Farsi (Iran)
0x000B, fi, , , Finnish
0x040B, fi_FI, Finnish_Finland.1252, WINDOWS-1252, Finnish (Finland)
0x0464, fil_PH, Filipino_Philippines.1252, WINDOWS-1252, Filipino (Philippines)
0x0038, fo, , , Faroese
0x0438, fo_FO, , , Faroese (Faroe Islands)
0x000C, fr, , , French
0x080C, fr_BE, , , French (Belgium)
0x0C0C, fr_CA, , , French (Canada)
0x100C, fr_CH, , , French (Switzerland)
0x040C, fr_FR, French_France.1252, WINDOWS-1252, French (France)
0x140C, fr_LU, , , French (Luxembourg)
0x180C, fr_MC, , , French (Principality of Monaco)
0x0462, fy_NL, , , Frisian (Netherlands)
, ga, , WINDOWS-1252, Gaelic; Scottish Gaelic
0x083C, ga_IE, , , Irish (Ireland)
0x0056, gl, , , Galician
0x0456, gl_ES, , , Galician (Galician)
, gl_ES, Galician_Spain.1252, WINDOWS-1252, Gallego
0x0484, gsw_FR, , , Alsatian (France)
0x0047, gu, , , Gujarati
0x0447, gu_IN, Gujarati_India.0, , Gujarati (India)
0x0468, ha_Latn_NG, , , Hausa (Latin, Nigeria)
0x000D, he, , , Hebrew
0x040D, he_IL, Hebrew_Israel.1255, WINDOWS-1255, Hebrew (Israel)
0x0039, hi, Hindi.65001, , Hindi
0x0439, hi_IN, , , Hindi (India)
0x001A, hr, , , Croatian
0x101A, hr_BA, , , Croatian (Latin, Bosnia and Herzegovina)
0x041A, hr_HR, Croatian_Croatia.1250, WINDOWS-1250, Croatian (Croatia)
0x000E, hu, , , Hungarian
0x040E, hu_HU, Hungarian_Hungary.1250, WINDOWS-1250, Hungarian (Hungary)
0x002B, hy, , , Armenian
0x042B, hy_AM, , , Armenian (Armenia)
0x0021, id, , , Indonesian
0x0421, id_ID, Indonesian_indonesia.1252, WINDOWS-1252, Indonesian (Indonesia)
0x0470, ig_NG, , , Igbo (Nigeria)
0x0478, ii_CN, , , Yi (PRC)
0x000F, is, , , Icelandic
0x040F, is_IS, Icelandic_Iceland.1252, WINDOWS-1252, Icelandic (Iceland)
0x0010, it, , , Italian
0x0810, it_CH, , , Italian (Switzerland)
0x0410, it_IT, Italian_Italy.1252, WINDOWS-1252, Italian (Italy)
0x045D, iu_Cans_CA, , , Inuktitut (Syllabics, Canada)
0x085D, iu_Latn_CA, , , Inuktitut (Latin, Canada)
0x0011, ja, , , Japanese
0x0411, ja_JP, Japanese_Japan.932, CP932, Japanese (Japan)
0x0037, ka, , , Georgian
0x0437, ka_GE, , , Georgian (Georgia)
, ka_GE, Georgian_Georgia.65001, , Georgian
0x003F, kk, , , Kazakh
0x043F, kk_KZ, , , Kazakh (Kazakhstan)
0x046F, kl_GL, , , Greenlandic (Greenland)
, km, Khmer.65001, , Khmer
0x0453, km_KH, , , Khmer (Cambodia)
0x004B, kn, , , Kannada
0x044B, kn_IN, kn_IN.UTF-8, Kannada.65001, Kannada (India)
0x0012, ko, , , Korean
0x0057, kok, , , Konkani
0x0457, kok_IN, , , Konkani (India)
0x0412, ko_KR, Korean_Korea.949, EUC-KR, Korean (Korea)
0x0040, ky, , , Kyrgyz
0x0440, ky_KG, , , Kyrgyz (Kyrgyzstan)
0x046E, lb_LU, , , Luxembourgish (Luxembourg)
0x0454, lo_LA, Lao_Laos.UTF-8, WINDOWS-1257, Lao (Lao P.D.R.)
0x0027, lt, , , Lithuanian
0x0427, lt_LT, Lithuanian_Lithuania.1257, WINDOWS-1257, Lithuanian (Lithuania)
0x0026, lv, , , Latvian
0x0426, lv_LV, Latvian_Latvia.1257, WINDOWS-1257, Latvian (Latvia)
0x0481, mi_NZ, Maori.1252, WINDOWS-1252, Maori (New Zealand)
0x002F, mk, , , Macedonian
0x042F, mk_MK, , , Macedonian (Former Yugoslav Republic of Macedonia)
0x044C, ml_IN, Malayalam_India.x-iscii-ma, x-iscii-ma, Malayalam (India)
0x0050, mn, , , Mongolian
0x0450, mn_MN, Cyrillic_Mongolian.1251, , Mongolian (Cyrillic, Mongolia)
0x0850, mn_Mong_CN, , , Mongolian (Traditional Mongolian, PRC)
0x047C, moh_CA, , , Mohawk (Mohawk)
0x004E, mr, , , Marathi
0x044E, mr_IN, , , Marathi (India)
0x003E, ms, , , Malay
0x083E, ms_BN, , , Malay (Brunei Darussalam)
0x043E, ms_MY, , , Malay (Malaysia)
0x043A, mt_MT, , , Maltese (Malta)
0x0461, ne_NP, , , Nepali (Nepal)
0x0013, nl, , , Dutch
0x0813, nl_BE, , , Dutch (Belgium)
0x0413, nl_NL, Dutch_Netherlands.1252, WINDOWS-1252, Dutch (Netherlands)
0x0814, nn_NO, Norwegian-Nynorsk_Norway.1252, WINDOWS-1252, Norwegian, Nynorsk (Norway)
0x0014, no, , , Norwegian
0x0414, no_NO, Norwegian_Norway.1252, WINDOWS-1252, Norwegian, Bokmål (Norway)
0x046C, nso_ZA, , , Sesotho sa Leboa (South Africa)
0x0482, oc_FR, , , Occitan (France)
0x0448, or_IN, , , Oriya (India)
0x0046, pa, , , Punjabi
0x0446, pa_IN, , , Punjabi (India)
0x0015, pl, , , Polish
0x0415, pl_PL, Polish_Poland.1250, WINDOWS-1250, Polish (Poland)
0x048C, prs_AF, , , Dari (Afghanistan)
0x0463, ps_AF, , , Pashto (Afghanistan)
0x0016, pt, , , Portuguese
0x0416, pt_BR, Portuguese_Brazil.1252, WINDOWS-1252, Portuguese (Brazil)
0x0816, pt_PT, Portuguese_Portugal.1252, WINDOWS-1252, Portuguese (Portugal)
0x0486, qut_GT, , , K'iche (Guatemala)
0x046B, quz_BO, , , Quechua (Bolivia)
0x086B, quz_EC, , , Quechua (Ecuador)
0x0C6B, quz_PE, , , Quechua (Peru)
0x0417, rm_CH, , , Romansh (Switzerland)
0x0018, ro, , , Romanian
0x0418, ro_RO, Romanian_Romania.1250, WINDOWS-1250, Romanian (Romania)
0x0019, ru, , , Russian
0x0419, ru_RU, Russian_Russia.1251, WINDOWS-1251, Russian (Russia)
0x0487, rw_RW, , , Kinyarwanda (Rwanda)
0x004F, sa, , , Sanskrit
0x0485, sah_RU, , , Yakut (Russia)
0x044F, sa_IN, , , Sanskrit (India)
0x0C3B, se_FI, , , Sami, Northern (Finland)
0x043B, se_NO, , , Sami, Northern (Norway)
0x083B, se_SE, , , Sami, Northern (Sweden)
0x045B, si_LK, , , Sinhala (Sri Lanka)
0x001B, sk, , , Slovak
0x041B, sk_SK, Slovak_Slovakia.1250, WINDOWS-1250, Slovak (Slovakia)
0x0024, sl, , , Slovenian
0x0424, sl_SI, Slovenian_Slovenia.1250, WINDOWS-1250, Slovenian (Slovenia)
0x183B, sma_NO, , , Sami, Southern (Norway)
0x1C3B, sma_SE, , , Sami, Southern (Sweden)
0x103B, smj_NO, , , Sami, Lule (Norway)
0x143B, smj_SE, , , Sami, Lule (Sweden)
0x243B, smn_FI, , , Sami, Inari (Finland)
0x203B, sms_FI, , , Sami, Skolt (Finland)
, so_SO, , , Somali (Somalia)
0x001C, sq, , , Albanian
0x041C, sq_AL, Albanian_Albania.1250, WINDOWS-1250, Albanian (Albania)
0x7C1A, sr, , , Serbian
0x1C1A, sr_Cyrl_BA,Serbian (Cyrillic)_Serbia and Montenegro.1251,WINDOWS-1251,Serbian (Cyrillic, Bosnia and Herzegovina)
0x0C1A, sr_Cyrl_SP, , , Serbian (Cyrillic, Serbia)
0x181A, sr_Latn_BA, , , Serbian (Latin, Bosnia and Herzegovina)
0x081A, sr_Latn_SP, , , Serbian (Latin, Serbia)
0x001D, sv, , , Swedish
0x081D, sv_FI, , , Swedish (Finland)
0x041D, sv_SE, Swedish_Sweden.1252, WINDOWS-1252, Swedish (Sweden)
0x0041, sw, , , Kiswahili
0x0441, sw_KE, , , Kiswahili (Kenya)
0x005A, syr, , , Syriac
0x045A, syr_SY, , , Syriac (Syria)
0x0049, ta, , , Tamil
0x0449, ta_IN, , , Tamil (India)
0x004A, te, , , Telugu
0x044A, te_IN, , , Telugu (India)
0x0428, tg_Cyrl_TJ, , , Tajik (Cyrillic, Tajikistan)
0x001E, th, , , Thai
0x041E, th_TH, Thai_Thailand.874, WINDOWS-874, Thai (Thailand)
0x0442, tk_TM, , , Turkmen (Turkmenistan)
0x085F, tmz_Latn_DZ, , , Tamazight (Latin, Algeria)
0x0432, tn_ZA, , , Setswana (South Africa)
0x001F, tr, , , Turkish
0x041F, tr_TR, Turkish_Turkey.1254, WINDOWS-1254, Turkish (Turkey)
0x0044, tt, , , Tatar
0x0444, tt_RU, , , Tatar (Russia)
0x0480, ug_CN, , , Uighur (PRC)
0x0022, uk, , , Ukrainian
0x0422, uk_UA, Ukrainian_Ukraine.1251, WINDOWS-1251, Ukrainian (Ukraine)
0x0020, ur, , , Urdu
0x0420, ur_PK, , , Urdu (Islamic Republic of Pakistan)
0x0043, uz, , , Uzbek
0x0843, uz_Cyrl_UZ, , , Uzbek (Cyrillic, Uzbekistan)
0x0443, uz_Latn_UZ, , , Uzbek (Latin, Uzbekistan)
0x002A, vi, , , Vietnamese
0x042A, vi_VN, Vietnamese_Viet Nam.1258, WINDOWS-1258, Vietnamese (Vietnam)
0x082E, wee_DE, , , Lower Sorbian (Germany)
0x042E, wen_DE, , , Upper Sorbian (Germany)
0x0488, wo_SN, , , Wolof (Senegal)
0x0434, xh_ZA, , , isiXhosa (South Africa)
0x046A, yo_NG, , , Yoruba (Nigeria)
0x0804, zh_CN, Chinese_China.936, CP936, Chinese (People's Republic of China)
0x0004, zh_Hans,, , Chinese (Simplified)
0x7C04, zh_Hant,, , Chinese (Traditional)
0x0C04, zh_HK, , , Chinese (Hong Kong S.A.R.)
0x1404, zh_MO, , , Chinese (Macao S.A.R.)
0x1004, zh_SG, , , Chinese (Singapore)
0x0404, zh_TW, Chinese_Taiwan.950, CP950, Chinese (Taiwan)
0x0435, zu_ZA, , , siZulu (South Africa)