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

Reply via email to