This is a followup to my locale questions from the other day.
Please let me know if I've taken the wrong approach.
Andrew.
--
http://linguaphile.sourceforge.net
? src/af/util/win/ut_Win32Locale.h
? src/af/util/win/ut_Win32Locale.cpp
Index: src/af/util/Makefile
===================================================================
RCS file: /cvsroot/abi/src/af/util/Makefile,v
retrieving revision 1.50
diff -u -r1.50 Makefile
--- src/af/util/Makefile 2001/05/25 05:52:08 1.50
+++ src/af/util/Makefile 2001/05/26 05:54:40
@@ -50,6 +50,7 @@
$(OBJDIR)/ut_$(ABI_FE)OS.$(OBJ_SUFFIX) \
$(OBJDIR)/ut_$(ABI_FE)String.$(OBJ_SUFFIX) \
$(OBJDIR)/ut_$(ABI_FE)Timer.$(OBJ_SUFFIX) \
+ $(OBJDIR)/ut_$(ABI_FE)Locale.$(OBJ_SUFFIX) \
$(OBJDIR)/ut_iconv.$(OBJ_SUFFIX) \
$(OBJDIR)/ut_Xpm2Bmp.$(OBJ_SUFFIX)
endif
Index: src/af/util/win/Makefile
===================================================================
RCS file: /cvsroot/abi/src/af/util/win/Makefile,v
retrieving revision 1.13
diff -u -r1.13 Makefile
--- src/af/util/win/Makefile 2000/02/14 11:24:49 1.13
+++ src/af/util/win/Makefile 2001/05/26 05:54:41
@@ -27,6 +27,7 @@
ut_Win32OS.cpp \
ut_Win32String.cpp \
ut_Win32Timer.cpp \
+ ut_Win32Locale.cpp \
ut_Xpm2Bmp.cpp
INCLUDES= -I$(ABI_XX_ROOT)/../libiconv/include
Index: src/af/xap/win/xap_Win32EncodingManager.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/xap/win/xap_Win32EncodingManager.cpp,v
retrieving revision 1.3
diff -u -r1.3 xap_Win32EncodingManager.cpp
--- src/af/xap/win/xap_Win32EncodingManager.cpp 2001/05/25 18:12:44 1.3
+++ src/af/xap/win/xap_Win32EncodingManager.cpp 2001/05/26 05:54:44
@@ -2,12 +2,9 @@
#include <windows.h>
#include "ut_assert.h"
#include "ut_debugmsg.h"
+#include "ut_Win32Locale.h"
#include "xap_Win32EncodingManager.h"
-// TODO This data is defined in ap_Win32Prefs.cpp
-
-extern char s_ISO3166_2_and_3[1190];
-
/************************************************************/
XAP_EncodingManager *XAP_EncodingManager::get_instance()
@@ -46,11 +43,12 @@
void XAP_Win32EncodingManager::initialize()
{
char szLocaleInfo[64];
+ static char szCodepage[64];
static char szLanguage[64];
static char szTerritory[64];
bool bNorwaySpecialCase = false;
- NativeEncodingName = "ISO-8859-1";
+ NativeEncodingName = "CP1252";
LanguageISOName = "en";
LanguageISOTerritory = NULL;
@@ -60,42 +58,32 @@
// Windows Unicode locale?
if (!strcmp(szLocaleInfo,"0"))
{
- NativeEncodingName = "UCS-2-INTERNAL"; // As in
ev_Win32Keyboard.cpp
+ // As in ev_Win32Keyboard.cpp
+ // TODO Would UCS-2-LE / UCS-2-BE be preferable?
+ // TODO Does NT use UCS-2-BE internally on non-Intel CPUs?
+ NativeEncodingName = "UCS-2-INTERNAL";
m_bIsUnicodeLocale = true;
}
else
{
- NativeEncodingName = charsetFromCodepage(atoi(szLocaleInfo));
+ szCodepage[0] = 'C';
+ szCodepage[1] = 'P';
+ strcpy(szCodepage+2,szLocaleInfo);
+ NativeEncodingName = szCodepage;
m_bIsUnicodeLocale = false;
}
}
- // Language
- if
(GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SABBREVLANGNAME,szLanguage,sizeof(szLanguage)/sizeof(szLanguage[0])))
+ if (UT_getISO639Language(szLanguage))
{
- if (!strcmp(szLanguage,"Non")) // Special case: Nynorsk in
Norway
- bNorwaySpecialCase = true; // As in
ap_Win32Prefs.cpp
-
- szLanguage[0] = tolower(szLanguage[0]);
- szLanguage[1] = tolower(szLanguage[1]);
- szLanguage[2] = '\0';
LanguageISOName = szLanguage;
}
-
- // Territory
- if (bNorwaySpecialCase == true) // Special case: Nynorsk in
Norway
- LanguageISOTerritory = "NYNORSK"; // As in ap_Win32Prefs.cpp
- else if
(GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SABBREVCTRYNAME,szLocaleInfo,sizeof(szLocaleInfo)/sizeof(szLocaleInfo[0])))
+ else
{
- // TODO This code is copied from ap_Win32Prefs.cpp
- char *psz;
-
- for (psz = s_ISO3166_2_and_3; *psz != '\0'; psz += 5 )
- if (!strncmp(&psz[2],szLocaleInfo,3))
- break;
-
- strncpy(szTerritory, psz, 2 );
- szTerritory[2] = '\0';
+ UT_ASSERT(UT_SHOULD_NOT_HAPPEN);
+ }
+ if (UT_getISO3166Country(szTerritory))
+ {
LanguageISOTerritory = szTerritory;
}
Index: src/wp/ap/win/ap_Win32Prefs.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/win/ap_Win32Prefs.cpp,v
retrieving revision 1.10
diff -u -r1.10 ap_Win32Prefs.cpp
--- src/wp/ap/win/ap_Win32Prefs.cpp 2001/02/06 22:54:55 1.10
+++ src/wp/ap/win/ap_Win32Prefs.cpp 2001/05/26 05:55:34
@@ -26,31 +26,10 @@
#include "ut_units.h"
#include "ut_debugmsg.h"
+#include "ut_Win32Locale.h"
#include "ap_Win32Prefs.h"
-// Codes from ISO 3166
-// Very compressed form. Two char code folowed by tree char code.
-
-char s_ISO3166_2_and_3[] =
-"AFAFGALALBDZDZAASASMADANDAOAGOAIAIAAQATAAGATGARARGAMARMAWABWAUAUSATAUT"
-"AZAZEBSBHSBHBHRBDBGDBBBRBBYBLRBEBELBZBLZBJBENBMBMUBTBTNBOBOLBABIHBWBWA"
-"BVBVTBRBRAIOIOTBNBRNBGBGRBFBFABIBDIKHKHMCMCMRCACANCVCPVKYCYMCFCAFTDTCD"
-"CLCHLCNCHNCXCXRCCCCKCOCOLKMCOMCGCOGCKCOKCRCRICICIVHRHRVCUCUBCYCYPCZCZE"
-"DKDNKDJDJIDMDMADODOMTPTMPECECUEGEGYSVSLVGQGNQERERIEEESTETETHFKFLKFOFRO"
-"FJFJIFIFINFRFRAFXFXXGFGUFPFPYFTFATFGAGABGMGMBGEGEODEDEUGHGHAGIGIBGRGRC"
-"GLGRLGDGRDGPGLPGUGUMGTGTMGNGINGWGNBGYGUYHTHTIHMHMDHNHNDHKHKGHUHUNISISL"
-"ININDIDIDNIRIRNIQIRQIEIRLILISRITITAJMJAMJPJPNJOJORKZKAZKEKENKIKIRKPPRK"
-"KRKORKWKWTKGKGZLALAOLVLVALBLBNLSLSOLRLBRLYLBYLILIELTLTULULUXMOMACMKMKD"
-"MGMDGMWMWIMYMYSMVMDVMLMLIMTMLTMHMHLMQMTQMRMRTMUMUSYTMYTMXMEXFMFSMMDMDA"
-"MCMCOMNMNGMSMSRMAMARMZMOZMMMMRNANAMNRNRUNPNPLNLNLDANANTNCNCLNZNZLNINIC"
-"NENERNGNGANUNIUNFNFKMPMNPNONOROMOMNPKPAKPWPLWPAPANPGPNGPYPRYPEPERPHPHL"
-"PNPCNPLPOLPTPRTPRPRIQAQATREREUROROMRURUSRWRWAKNKNALCLCAVCVCTWSWSMSMSMR"
-"STSTPSASAUSNSENSCSYCSLSLESGSGPSKSVKSISVNSBSLBSOSOMZAZAFESESPLKLKASHSHN"
-"PMSPMSDSDNSRSURSJSJMSZSWZSESWECHCHESYSYRTWTWNTJTJKTZTZATHTHATGTGOTKTKL"
-"TOTONTTTTOTNTUNTRTURTMTKMTCTCATVTUVUGUGAUAUKRAEAREGBGBRUSUSAUMUMIUYURY"
-"UZUZBVUVUTVAVATVEVENVNVNMVGVGBVIVIRWFWLFEHESHYEYEMYUYUGZRZARZMZMBZWZWE";
-
/*****************************************************************/
AP_Win32Prefs::AP_Win32Prefs(XAP_App * pApp)
@@ -73,41 +52,20 @@
m_builtinScheme->setValue( AP_PREF_KEY_RulerUnits, UT_dimensionName(
szLocaleInfo[0] == '0' ? DIM_CM : DIM_IN ) );
}
- if( GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME, szLocaleInfo,
sizeof( szLocaleInfo ) / sizeof( szLocaleInfo[0] ) ) )
+ if (UT_getISO639Language(szLocaleInfo))
{
- char szTmp[64];
-
- if( !strcmp( szLocaleInfo, "Non" ) ) // Special case: Nynorsk in Norway
- {
- strcpy( szLocaleInfo, "no-NYNORSK" );
- }
- else if( GetLocaleInfo( LOCALE_USER_DEFAULT, LOCALE_SABBREVCTRYNAME,
szTmp, sizeof( szTmp ) / sizeof( szTmp[0] ) ) )
- {
- char *psz;
-
- szLocaleInfo[0] = tolower( szLocaleInfo[0] );
- szLocaleInfo[1] = tolower( szLocaleInfo[1] );
- szLocaleInfo[2] = '-';
-
- for( psz = s_ISO3166_2_and_3; *psz != '\0'; psz += 5 )
- if( !strncmp( &psz[2], szTmp, 3 ) )
- break;
-
- strncpy( &szLocaleInfo[3], psz, 2 );
- szLocaleInfo[5] = '\0';
- }
- else
- {
- szLocaleInfo[0] = tolower( szLocaleInfo[0] );
- szLocaleInfo[1] = tolower( szLocaleInfo[1] );
- szLocaleInfo[2] = '\0';
- }
+ if (UT_getISO3166Country(&szLocaleInfo[3]))
+ szLocaleInfo[2] = '-';
UT_DEBUGMSG(("Prefs: Using LOCALE info from environment [%s]\n",
szLocaleInfo));
m_builtinScheme->setValue( AP_PREF_KEY_MenuLabelSet, szLocaleInfo );
m_builtinScheme->setValue( AP_PREF_KEY_ToolbarLabelSet, szLocaleInfo );
m_builtinScheme->setValue( AP_PREF_KEY_StringSet, szLocaleInfo );
+ }
+ else
+ {
+ UT_ASSERT(UT_SHOULD_NOT_HAPPEN);
}
return ret;
ut_Win32Locale.h
ut_Win32Locale.cpp