function [locale_short_string LCID_hex_string LCID_value locale_description] = get_system_locale
% function [LOCALE_SHORT_STRING LCID_HEX_STRING LCID_VALUE LOCALE_DESCRIPTION] = GET_SYSTEM_LOCALE
% Returns system locale information. Tested on Windows XP and Linux.
%
% INPUT:
% none
%
% OUTPUT:
% LOCALE_SHORT_STRING - locale short string, in lower case and separated by underscore
% LCID_HEX_STRING - locale ID hexadecimal value string
% LCID_VALUE - locale ID value as a double
% LOCALE_DESCRIPTION - locale description string
%
% EXAMPLE:
% On my laptop
% [locale_short_string LCID_hex_string LCID_value locale_description] = get_system_locale;
% returns
% locale_short_string = 'ru_ru'
% LCID_hex_string = '0419'
% LCID_value = 1049
% locale_description = 'Russian - Russia'
%
% Developed by Nikolay Chumerin
% http://sites.google.com/site/chumerin
%
% Last update: 2009-09-27
LCID_table = {'0401', 'ar_sa', 'Arabic - Saudi Arabia'
'0402', 'bg', 'Bulgarian - Bulgaria'
'0403', 'ca', 'Catalan - Spain'
'0404', 'zh_tw', 'Chinese - Taiwan (Traditional)'
'0405', 'cs', 'Czech - Czech Republic'
'0406', 'da', 'Danish - Denmark'
'0407', 'de_de', 'German - Germany'
'0408', 'el', 'Greek'
'0409', 'en_us', 'English - United States'
'040A', 'es_es', 'Spanish - Spain'
'040A', 'es_es', 'Spanish - Spain'
'040B', 'fi', 'Finnish - Finland'
'040C', 'fr_fr', 'French - France'
'040D', 'he', 'Hebrew - Israel'
'040E', 'hu', 'Hungarian - Hungary'
'040F', 'is', 'Icelandic - Iceland'
'0410', 'it_it', 'Italian - Italy'
'0411', 'ja', 'Japanese - Japan'
'0412', 'ko', 'Korean (Extended Wansung) - Korea'
'0413', 'nl_nl', 'Dutch The Netherlands'
'0414', 'no_no', 'Norwegian - Bokml'
'0415', 'pl', 'Polish - Poland'
'0416', 'pt_br', 'Portuguese - Brazil'
'0417', 'rm', 'Raeto - Romance'
'0418', 'ro', 'Romanian - Romania'
'0419', 'ru_ru', 'Russian - Russia'
'041A', 'hr', 'Croatian - Croatia'
'041B', 'sk', 'Slovak - Slovakia'
'041C', 'sq', 'Albanian'
'041D', 'sv_se', 'Swedish - Sweden'
'041E', 'th', 'Thai - Thailand'
'041F', 'tr', 'Turkish - Turkey'
'0420', 'ur', 'Urdu - Pakistan'
'0421', 'id', 'Indonesian - Indonesia'
'0422', 'uk', 'Ukrainian - Ukraine'
'0423', 'be', 'Belarusian - Belarus'
'0424', 'sl', 'Slovenian - Slovena'
'0425', 'et', 'Estonian - Estonia'
'0426', 'lv', 'Latvian - Latvia'
'0427', 'lt', 'Lithuanian'
'0429', 'fa', 'Farsi - Iran'
'042A', 'vi', 'Vietnamese - Vietnam'
'042B', 'hy', 'Armenian - Armenia'
'042C', 'az_az', 'Azeri Latin'
'042D', 'eu', 'Basque - Spain'
'042E', 'sb', 'Sorbian'
'042F', 'mk', 'F.Y.R.O. Macedonia'
'0430', 'sx', 'Sutu'
'0431', 'ts', 'Tsonga'
'0432', 'tn', 'Setsuana'
'0434', 'xh', 'Xhosa'
'0435', 'zu', 'Zulu'
'0436', 'af', 'Afrikaans - South Africa'
'0438', 'fo', 'Farsi - Iran'
'0439', 'hi', 'Hindi - India'
'043A', 'mt', 'Maltese'
'043C', 'gd', 'Gaelic - Scotland'
'043D', 'yi', 'Yiddish'
'043E', 'ms_my', 'Malay - Malaysia'
'0441', 'sw', 'Swahili - Kenya'
'0443', 'uz_uz', 'Uzbek Uzbekistan (Latin)'
'0444', 'tt', 'Tatar - Tatarstan'
'0449', 'ta', 'Tamil'
'044E', 'mr', 'Marathi - India'
'044F', 'sa', 'Sanskrit - India'
'0801', 'ar_iq', 'Arabic - Iraq'
'0804', 'zh_cn', 'Chinese - China'
'0807', 'de_ch', 'German - Switzerland'
'0809', 'en_gb', 'English - United Kingdom'
'080A', 'es_mx', 'Spanish - Mexico'
'080C', 'fr_be', 'French - Belgium'
'0810', 'it_ch', 'Italian - Switzerland'
'0813', 'nl_be', 'Dutch - Belgium'
'0814', 'no_no', 'Norwegian Norway (Nynorsk)'
'0816', 'pt_pt', 'Portuguese - Portugal'
'0818', 'ro_mo', 'Romanian - Moldova'
'0819', 'ru_mo', 'Russian - Moldova'
'081A', 'sr_sp', 'Serbian Serbia (Latin)'
'081D', 'sv_fi', 'Swedish - Finland'
'082C', 'az_az', 'Azeri Cyrillic'
'083C', 'gd_ie', 'Gaelic Ireland'
'083E', 'ms_bn', 'Malay Brunei Darussalam'
'0843', 'uz_uz', 'Uzbek Uzbekistan (Cyrillic)'
'0C01', 'ar_eg', 'Arabic - Egypt'
'0C04', 'zh_hk', 'Chinese - Hong Kong S.A.R.'
'0C07', 'de_at', 'German - Austria'
'0C09', 'en_au', 'English - Australia'
'0C0C', 'fr_ca', 'French - Canada'
'0C1A', 'sr_sp', 'Serbian - Serbia (Cyrillic)'
'1001', 'ar_ly', 'Arabic - Libya'
'1004', 'zh_sg', 'Chinese - Singapore'
'1007', 'de_lu', 'German - Luxembourg'
'1009', 'en_ca', 'English - Canada'
'100A', 'es_gt', 'Spanish - Guatemala'
'100C', 'fr_ch', 'French - Switzerland'
'1401', 'ar_dz', 'Arabic - Algeria'
'1404', 'zh_mo', 'Chinese Macau S.A.R.'
'1407', 'de_li', 'German - Liechtenstein'
'1409', 'en_nz', 'English - New Zealand'
'140A', 'es_cr', 'Spanish - Costa Rica'
'140C', 'fr_lu', 'French - Luxembourg'
'1801', 'ar_ma', 'Arabic - Morocco'
'1809', 'en_ie', 'English - Ireland'
'180A', 'es_pa', 'Spanish - Panama'
'1C01', 'ar_tn', 'Arabic - Tunisia'
'1C09', 'en_za', 'English - South Africa'
'1C0A', 'es_do', 'Spanish - Dominican Republic'
'2001', 'ar_om', 'Arabic - Oman'
'2009', 'en_jm', 'English - Jamaica'
'200A', 'es_ve', 'Spanish - Venezuela'
'2401', 'ar_ye', 'Arabic - Yemen'
'2409', 'en_cb', 'English Carribbean'
'240A', 'es_co', 'Spanish - Colombia'
'2801', 'ar_sy', 'Arabic - Syria'
'2809', 'en_bz', 'English - Belize'
'280A', 'es_pe', 'Spanish - Peru'
'2C01', 'ar_jo', 'Arabic - Jordan'
'2C09', 'en_tt', 'English - Trinidad'
'2C0A', 'es_ar', 'Spanish - Argentina'
'3001', 'ar_lb', 'Arabic - Lebanon'
'300A', 'es_ec', 'Spanish - Ecuador'
'3401', 'ar_kw', 'Arabic - Kuwait'
'3409', 'en_ph', 'English Phillippines'
'340A', 'es_cl', 'Spanish - Chile'
'3801', 'ar_ae', 'Arabic United Arab Emirates'
'380A', 'es_uy', 'Spanish - Uruguay'
'3C01', 'ar_bh', 'Arabic - Bahrain'
'3C0A', 'es_py', 'Spanish - Paraguay'
'4001', 'ar_qa', 'Arabic - Qatar'
'400A', 'es_bo', 'Spanish - Bolivia'
'440A', 'es_sv', 'Spanish - El Salvador'
'480A', 'es_hn', 'Spanish - Honduras'
'4C0A', 'es_ni', 'Spanish - Nicaragua'
'500A', 'es_pr', 'Spanish - Puerto Rico'
};
if ispc,
[s s] = system('reg query "HKCU\Control Panel\International" /v Locale'); %#ok<*ASGLU>
ind = strfind(s, '0000');
LCID_hex_string = upper(s(ind+4:ind+7));
ind = find(strncmp( LCID_table(:,1), LCID_hex_string, length(LCID_hex_string) ), 1);
locale_short_string = LCID_table{ind,2};
else
[s s] = system('locale | grep LANG');
locale_short_string = lower(s(6:find(s=='.')-1));
ind = find(strncmp( LCID_table(:,2), locale_short_string, length(locale_short_string)), 1);
LCID_hex_string = LCID_table{ind,1};
end
locale_description = LCID_table{ind,3};
LCID_value = hex2dec(LCID_hex_string);
end % of function GET_SYSTEM_LOCALE