rpms/openoffice.org/devel workspace.defaultdoclang.patch, NONE, 1.1 openoffice.org.spec, 1.1991, 1.1992 planned.workspace.defaultdoclang.patch, 1.10, NONE

Caolan McNamara caolanm at fedoraproject.org
Mon Aug 24 14:50:36 UTC 2009


Author: caolanm

Update of /cvs/pkgs/rpms/openoffice.org/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv12740

Modified Files:
	openoffice.org.spec 
Added Files:
	workspace.defaultdoclang.patch 
Removed Files:
	planned.workspace.defaultdoclang.patch 
Log Message:
workspace no longer planned, now ready for qa

workspace.defaultdoclang.patch:
 chart2/source/tools/CharacterProperties.cxx      |   15 ++-
 desktop/source/app/langselect.cxx                |   97 ++++-------------------
 desktop/source/app/langselect.hxx                |    2 
 i18npool/inc/i18npool/mslangid.hxx               |   10 ++
 i18npool/source/isolang/mslangid.cxx             |   55 +++++++++++++
 linguistic/source/lngopt.cxx                     |   18 ++--
 linguistic/source/lngopt.hxx                     |    2 
 reportdesign/source/core/api/ReportComponent.cxx |   10 +-
 reportdesign/util/makefile.mk                    |    1 
 sc/source/ui/app/scmod2.cxx                      |    9 +-
 sd/source/core/drawdoc.cxx                       |   10 +-
 sd/source/ui/notes/EditWindow.cxx                |    8 +
 sd/source/ui/presenter/PresenterTextView.cxx     |    9 +-
 svtools/source/config/lingucfg.cxx               |   78 +++++-------------
 svx/inc/svx/langbox.hxx                          |    2 
 svx/source/dialog/langbox.cxx                    |   28 ++++++
 svx/source/dialog/optgdlg.cxx                    |   76 +++++++++++++-----
 sw/source/ui/app/appopt.cxx                      |   18 +++-
 sw/source/ui/app/docshini.cxx                    |    8 +
 sw/source/ui/config/fontcfg.cxx                  |   31 ++++---
 sw/source/ui/dialog/ascfldlg.cxx                 |    8 +
 sw/source/ui/lingu/olmenu.cxx                    |    3 
 sw/util/makefile.mk                              |    1 
 23 files changed, 292 insertions(+), 207 deletions(-)

--- NEW FILE workspace.defaultdoclang.patch ---
Index: reportdesign/source/core/api/ReportComponent.cxx
===================================================================
--- reportdesign/source/core/api/ReportComponent.cxx	(revision 267481)
+++ reportdesign/source/core/api/ReportComponent.cxx	(working copy)
@@ -41,10 +41,12 @@
 #include "ReportControlModel.hxx"
 #include <com/sun/star/reflection/XProxyFactory.hpp>
 #include <com/sun/star/text/ParagraphVertAlign.hpp>
+#include <com/sun/star/i18n/ScriptType.hpp>
 // #include <svx/unoshape.hxx>
 #include <svx/unolingu.hxx>
 #include <svtools/syslocale.hxx>
 #include <svtools/lingucfg.hxx>
+#include <i18npool/mslangid.hxx>
 // =============================================================================
 namespace reportdesign
 {
@@ -96,12 +98,14 @@
     try
     {
         SvtLinguConfig aLinguConfig;
+        using namespace ::com::sun::star::i18n::ScriptType;
+
         aLinguConfig.GetProperty(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultLocale"))) >>= aCharLocale;
-        LanguageType eCurLang = SvxLocaleToLanguage( aCharLocale );
+        LanguageType eCurLang = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage(aCharLocale), LATIN);
         aLinguConfig.GetProperty(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultLocale_CJK")))  >>= aCharLocaleAsian;
-        LanguageType eCurLangCJK = SvxLocaleToLanguage( aCharLocaleAsian );
+        LanguageType eCurLangCJK = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage(aCharLocaleAsian), ASIAN);
         aLinguConfig.GetProperty(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultLocale_CTL")))  >>= aCharLocaleComplex;
-        LanguageType eCurLangCTL = SvxLocaleToLanguage( aCharLocaleComplex );
+        LanguageType eCurLangCTL = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage(aCharLocaleComplex), COMPLEX);
 
         Font aLatin,aCJK,aCTL;
         lcl_getDefaultFonts(aLatin,aCJK,aCTL,eCurLang,eCurLangCJK,eCurLangCTL);
Index: linguistic/source/lngopt.cxx
===================================================================
--- linguistic/source/lngopt.cxx	(revision 267481)
+++ linguistic/source/lngopt.cxx	(working copy)
@@ -46,7 +46,9 @@
 #include <com/sun/star/registry/XSimpleRegistry.hpp>
 #include <com/sun/star/registry/XRegistryKey.hpp>
 #include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/i18n/ScriptType.hpp>
 #include <unotools/processfactory.hxx>
+#include <i18npool/mslangid.hxx>
 
 using namespace utl;
 using namespace osl;
@@ -100,13 +102,13 @@
 }
 
 
-BOOL LinguOptions::SetLocale_Impl( INT16 &rLanguage, Any &rOld, const Any &rVal)
+BOOL LinguOptions::SetLocale_Impl( INT16 &rLanguage, Any &rOld, const Any &rVal, sal_Int16 nType)
 {
 	BOOL bRes = FALSE;
 
 	Locale	aNew;
 	rVal >>= aNew;
-	INT16 nNew = LocaleToLanguage( aNew );
+        INT16 nNew = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage(aNew), nType);
 	if (nNew != rLanguage)
 	{
 		Locale	aLocale( CreateLocale( rLanguage ) );
@@ -149,17 +151,17 @@
 		case WID_HYPH_MIN_WORD_LENGTH :		pnVal = &pData->nHyphMinWordLength;	break;
 		case WID_DEFAULT_LOCALE :
 		{
-			bRes = SetLocale_Impl( pData->nDefaultLanguage, rOld, rVal );
+			bRes = SetLocale_Impl( pData->nDefaultLanguage, rOld, rVal, ::com::sun::star::i18n::ScriptType::LATIN );
 			break;
 		}
 		case WID_DEFAULT_LOCALE_CJK :
 		{
-			bRes = SetLocale_Impl( pData->nDefaultLanguage_CJK, rOld, rVal );
+			bRes = SetLocale_Impl( pData->nDefaultLanguage_CJK, rOld, rVal, ::com::sun::star::i18n::ScriptType::ASIAN );
 			break;
 		}
 		case WID_DEFAULT_LOCALE_CTL :
 		{
-			bRes = SetLocale_Impl( pData->nDefaultLanguage_CTL, rOld, rVal );
+			bRes = SetLocale_Impl( pData->nDefaultLanguage_CTL, rOld, rVal, ::com::sun::star::i18n::ScriptType::COMPLEX );
 			break;
 		}
 		default :
@@ -226,19 +228,19 @@
 		case WID_HYPH_MIN_WORD_LENGTH :		pnVal = &pData->nHyphMinWordLength;	break;
 		case WID_DEFAULT_LOCALE :
 		{
-			Locale aLocale( CreateLocale( pData->nDefaultLanguage ) );
+			Locale aLocale( MsLangId::convertLanguageToLocale( pData->nDefaultLanguage ) );
 			rVal.setValue( &aLocale, ::getCppuType((Locale*)0 ));
 			break;
 		}
 		case WID_DEFAULT_LOCALE_CJK :
 		{
-			Locale aLocale( CreateLocale( pData->nDefaultLanguage_CJK ) );
+			Locale aLocale( MsLangId::convertLanguageToLocale( pData->nDefaultLanguage_CJK ) );
 			rVal.setValue( &aLocale, ::getCppuType((Locale*)0 ));
 			break;
 		}
 		case WID_DEFAULT_LOCALE_CTL :
 		{
-			Locale aLocale( CreateLocale( pData->nDefaultLanguage_CTL ) );
+			Locale aLocale( MsLangId::convertLanguageToLocale( pData->nDefaultLanguage_CTL ) );
 			rVal.setValue( &aLocale, ::getCppuType((Locale*)0 ));
 			break;
 		}
Index: linguistic/source/lngopt.hxx
===================================================================
--- linguistic/source/lngopt.hxx	(revision 267481)
+++ linguistic/source/lngopt.hxx	(working copy)
@@ -77,7 +77,7 @@
 
 	BOOL SetLocale_Impl( INT16 &rLanguage,
 			::com::sun::star::uno::Any &rOld,
-			const ::com::sun::star::uno::Any &rVal);
+			const ::com::sun::star::uno::Any &rVal, sal_Int16 nType );
 
 public:
 	LinguOptions();
Index: sc/source/ui/app/scmod2.cxx
===================================================================
--- sc/source/ui/app/scmod2.cxx	(revision 267481)
+++ sc/source/ui/app/scmod2.cxx	(working copy)
@@ -37,7 +37,8 @@
 
 #include <svx/unolingu.hxx>
 #include <svtools/lingucfg.hxx>
-
+#include <i18npool/mslangid.hxx>
+#include <com/sun/star/i18n/ScriptType.hpp>
 #include <com/sun/star/linguistic2/XThesaurus.hpp>
 #include <com/sun/star/lang/Locale.hpp>
 
@@ -62,9 +63,9 @@
 	SvtLinguOptions aOptions;
 	aConfig.GetOptions( aOptions );
 
-	rDefLang = aOptions.nDefaultLanguage;
-	rCjkLang = aOptions.nDefaultLanguage_CJK;
-	rCtlLang = aOptions.nDefaultLanguage_CTL;
+	rDefLang = MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN);
+	rCjkLang = MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN);
+	rCtlLang = MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
 	rAutoSpell = aOptions.bIsSpellAuto;
 }
 
Index: sd/source/core/drawdoc.cxx
===================================================================
--- sd/source/core/drawdoc.cxx	(revision 267481)
+++ sd/source/core/drawdoc.cxx	(working copy)
@@ -34,6 +34,7 @@
 #include "PageListWatcher.hxx"
 #include <com/sun/star/text/WritingMode.hpp>
 #include <com/sun/star/document/PrinterIndependentLayout.hpp>
+#include <com/sun/star/i18n/ScriptType.hpp>
 #include <svx/forbiddencharacterstable.hxx>
 
 #include <svx/svxids.hrc>
@@ -230,9 +231,12 @@
 		SvtLinguOptions			aOptions;
 		aLinguConfig.GetOptions( aOptions );
 
-		SetLanguage( aOptions.nDefaultLanguage, EE_CHAR_LANGUAGE );
-		SetLanguage( aOptions.nDefaultLanguage_CJK, EE_CHAR_LANGUAGE_CJK );
-		SetLanguage( aOptions.nDefaultLanguage_CTL, EE_CHAR_LANGUAGE_CTL );
+		SetLanguage( MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage, 
+            ::com::sun::star::i18n::ScriptType::LATIN), EE_CHAR_LANGUAGE );
+		SetLanguage( MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage_CJK,
+            ::com::sun::star::i18n::ScriptType::ASIAN), EE_CHAR_LANGUAGE_CJK );
+		SetLanguage( MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage_CTL, 
+            ::com::sun::star::i18n::ScriptType::COMPLEX), EE_CHAR_LANGUAGE_CTL );
 
 		mbOnlineSpell = aOptions.bIsSpellAuto;
 	}
Index: sd/source/ui/notes/EditWindow.cxx
===================================================================
--- sd/source/ui/notes/EditWindow.cxx	(revision 267481)
+++ sd/source/ui/notes/EditWindow.cxx	(working copy)
@@ -34,6 +34,8 @@
 #include "EditWindow.hxx"
 
 #include "sdmod.hxx"
+#include <i18npool/mslangid.hxx>
+#include <com/sun/star/i18n/ScriptType.hpp>
 #include <svx/editeng.hxx>
 #include <svx/editview.hxx>
 #include <vcl/scrbar.hxx>
@@ -174,9 +176,9 @@
             {   LANGUAGE_ARABIC_SAUDI_ARABIA,  LANGUAGE_NONE,
                 DEFAULTFONT_CTL_TEXT,   EE_CHAR_FONTINFO_CTL }
         };
-        aTable[0].nLang = aOpt.nDefaultLanguage;
-        aTable[1].nLang = aOpt.nDefaultLanguage_CJK;
-        aTable[2].nLang = aOpt.nDefaultLanguage_CTL;
+        aTable[0].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN);
+        aTable[1].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN);
+        aTable[2].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
         //
         for (int i = 0;  i < 3;  ++i)
         {
Index: sd/source/ui/presenter/PresenterTextView.cxx
===================================================================
--- sd/source/ui/presenter/PresenterTextView.cxx	(revision 267481)
+++ sd/source/ui/presenter/PresenterTextView.cxx	(working copy)
@@ -33,6 +33,7 @@
 
 #include "PresenterTextView.hxx"
 
+#include <i18npool/mslangid.hxx>
 #include <cppcanvas/vclfactory.hxx>
 #include <svtools/itempool.hxx>
 #include <svtools/itemset.hxx>
@@ -52,7 +53,9 @@
 #include <com/sun/star/awt/Size.hpp>
 #include <com/sun/star/rendering/XSpriteCanvas.hpp>
 #include <com/sun/star/util/Color.hpp>
+#include <com/sun/star/i18n/ScriptType.hpp>
 
+
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::lang;
@@ -381,9 +384,9 @@
             {   LANGUAGE_ARABIC_SAUDI_ARABIA,  LANGUAGE_NONE,
                 DEFAULTFONT_CTL_TEXT,   EE_CHAR_FONTINFO_CTL }
         };
-        aTable[0].nLang = aOpt.nDefaultLanguage;
-        aTable[1].nLang = aOpt.nDefaultLanguage_CJK;
-        aTable[2].nLang = aOpt.nDefaultLanguage_CTL;
+        aTable[0].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN);
+        aTable[1].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN);
+        aTable[2].nLang = MsLangId::resolveSystemLanguageByScriptType(aOpt.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
         //
         for (int i = 0;  i < 3;  ++i)
         {
Index: i18npool/source/isolang/mslangid.cxx
===================================================================
--- i18npool/source/isolang/mslangid.cxx	(revision 267481)
+++ i18npool/source/isolang/mslangid.cxx	(working copy)
@@ -41,6 +41,9 @@
 LanguageType MsLangId::nConfiguredSystemLanguage   = LANGUAGE_SYSTEM;
 LanguageType MsLangId::nConfiguredSystemUILanguage = LANGUAGE_SYSTEM;
 
+LanguageType MsLangId::nConfiguredWesternFallback  = LANGUAGE_SYSTEM;
+LanguageType MsLangId::nConfiguredAsianFallback    = LANGUAGE_SYSTEM;
+LanguageType MsLangId::nConfiguredComplexFallback  = LANGUAGE_SYSTEM;
 
 // static
 void MsLangId::setConfiguredSystemLanguage( LanguageType nLang )
@@ -55,8 +58,25 @@
     nConfiguredSystemUILanguage = nLang;
 }
 
+// static
+void MsLangId::setConfiguredWesternFallback( LanguageType nLang )
+{
+    nConfiguredWesternFallback = nLang;
+}
 
 // static
+void MsLangId::setConfiguredAsianFallback( LanguageType nLang )
+{
+    nConfiguredAsianFallback = nLang;
+}
+
+// static
+void MsLangId::setConfiguredComplexFallback( LanguageType nLang )
+{
+    nConfiguredComplexFallback = nLang;
+}
+
+// static
 inline LanguageType MsLangId::simplifySystemLanguages( LanguageType nLang )
 {
     switch (nLang)
@@ -120,6 +140,41 @@
 
 
 // static
+LanguageType MsLangId::resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType )
+{
+    if (nLang == LANGUAGE_NONE)
+        return nLang;
+
+    nLang = getRealLanguage(nLang);
+    if (nType != ::com::sun::star::i18n::ScriptType::WEAK && getScriptType(nLang) != nType)
+    {
+        switch(nType)
+        {
+            case ::com::sun::star::i18n::ScriptType::ASIAN:
+                if (nConfiguredAsianFallback == LANGUAGE_SYSTEM)
+                    nLang = LANGUAGE_CHINESE_SIMPLIFIED;
+                else
+                    nLang = nConfiguredComplexFallback;
+                break;
+            case ::com::sun::star::i18n::ScriptType::COMPLEX:
+                if (nConfiguredComplexFallback == LANGUAGE_SYSTEM)
+                    nLang = LANGUAGE_HINDI;
+                else
+                    nLang = nConfiguredComplexFallback;
+                break;
+            default:
+                if (nConfiguredWesternFallback == LANGUAGE_SYSTEM)
+                    nLang = LANGUAGE_ENGLISH_US;
+                else
+                    nLang = nConfiguredWesternFallback;
+                break;
+                break;
+        }
+    }
+    return nLang;
+}
+
+// static
 void MsLangId::convertLanguageToLocale( LanguageType nLang,
         ::com::sun::star::lang::Locale & rLocale )
 {
Index: i18npool/inc/i18npool/mslangid.hxx
===================================================================
--- i18npool/inc/i18npool/mslangid.hxx	(revision 267481)
+++ i18npool/inc/i18npool/mslangid.hxx	(working copy)
@@ -216,6 +216,9 @@
     static LanguageType getRealLanguageWithoutConfig( LanguageType nLang );
 
 
+    static LanguageType resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType );
+
+
     /** Whether locale has a Right-To-Left orientation. */
     static bool isRightToLeft( LanguageType nLang );
 
@@ -246,6 +249,9 @@
         configuration! */
     static void setConfiguredSystemLanguage( LanguageType nLang );
     static void setConfiguredSystemUILanguage( LanguageType nLang );
+    static void setConfiguredWesternFallback( LanguageType nLang );
+    static void setConfiguredComplexFallback( LanguageType nLang );
+    static void setConfiguredAsianFallback( LanguageType nLang );
 
 // ---------------------------------------------------------------------------
 
@@ -274,6 +280,10 @@
     static LanguageType         nConfiguredSystemLanguage;
     static LanguageType         nConfiguredSystemUILanguage;
 
+    static LanguageType         nConfiguredWesternFallback;
+    static LanguageType         nConfiguredAsianFallback;
+    static LanguageType         nConfiguredComplexFallback;
+
     static LanguageType getPlatformSystemLanguage();
     static LanguageType getPlatformSystemUILanguage();
 
Index: sw/source/ui/app/docshini.cxx
===================================================================
--- sw/source/ui/app/docshini.cxx	(revision 267481)
+++ sw/source/ui/app/docshini.cxx	(working copy)
@@ -37,6 +37,7 @@
 #ifndef _SVX_DIALOGS_HRC
 #include <svx/dialogs.hrc>
 #endif
+#include <i18npool/mslangid.hxx>
 #include <sot/storinfo.hxx>
 #include <sot/storage.hxx>
 #include <svtools/zforlist.hxx>
@@ -58,6 +59,7 @@
 #endif
 #include <linguistic/lngprops.hxx>
 #include <com/sun/star/document/UpdateDocMode.hpp>
+#include <com/sun/star/i18n/ScriptType.hpp>
 #include <rtl/logfile.hxx>
 #include <sfx2/docfilt.hxx>
 #include <svx/xtable.hxx>
@@ -791,9 +793,9 @@
 
     SvtLinguConfig().GetOptions( aLinguOpt );
 
-    sal_Int16   nVal = aLinguOpt.nDefaultLanguage,
-                eCJK = aLinguOpt.nDefaultLanguage_CJK,
-                eCTL = aLinguOpt.nDefaultLanguage_CTL;
+    sal_Int16   nVal = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN),
+                eCJK = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN),
+                eCTL = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
 	aDfltSet.Put( SvxLanguageItem( nVal, RES_CHRATR_LANGUAGE ) );
     aDfltSet.Put( SvxLanguageItem( eCJK, RES_CHRATR_CJK_LANGUAGE ) );
     aDfltSet.Put( SvxLanguageItem( eCTL, RES_CHRATR_CTL_LANGUAGE ) );
Index: sw/source/ui/app/appopt.cxx
===================================================================
--- sw/source/ui/app/appopt.cxx	(revision 267481)
+++ sw/source/ui/app/appopt.cxx	(working copy)
@@ -35,6 +35,8 @@
 #include <cmdid.h>		  	// Funktion-Ids
 #endif
 
+#include <com/sun/star/i18n/ScriptType.hpp>
+
 #define _SVSTDARR_STRINGSDTOR
 #include <svtools/svstdarr.hxx>
 
@@ -54,6 +56,7 @@
 #include <svx/optgrid.hxx>
 #include <svx/svxdlg.hxx>
 #include <svx/dialogs.hrc>
+#include <i18npool/mslangid.hxx>
 #include <fontcfg.hxx>
 #include <optload.hxx>
 #include <optcomp.hxx>
@@ -191,16 +194,25 @@
 		pRet->Put(SwPtrItem(FN_PARAM_PRINTER, pPrt));*/
 
         SvtLinguConfig aLinguCfg;
+        Locale aLocale;
+        LanguageType nLang;
 
+        using namespace ::com::sun::star::i18n::ScriptType;
+
         Any aLang = aLinguCfg.GetProperty(C2U("DefaultLocale"));
-        Locale aLocale;
         aLang >>= aLocale;
-        pRet->Put(SvxLanguageItem(SvxLocaleToLanguage( aLocale ), SID_ATTR_LANGUAGE));
+        nLang = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage(aLocale), LATIN);
+        pRet->Put(SvxLanguageItem(nLang, SID_ATTR_LANGUAGE));
 
         aLang = aLinguCfg.GetProperty(C2U("DefaultLocale_CJK"));
         aLang >>= aLocale;
-        pRet->Put(SvxLanguageItem(SvxLocaleToLanguage( aLocale ), SID_ATTR_CHAR_CJK_LANGUAGE));
+        nLang = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage(aLocale), ASIAN);
+        pRet->Put(SvxLanguageItem(nLang, SID_ATTR_CHAR_CJK_LANGUAGE));
 
+        aLang = aLinguCfg.GetProperty(C2U("DefaultLocale_CTL"));
+        aLang >>= aLocale;
+        nLang = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage(aLocale), COMPLEX);
+        pRet->Put(SvxLanguageItem(nLang, SID_ATTR_CHAR_CTL_LANGUAGE));
     }
 	if(bTextDialog)
 		pRet->Put(SwPtrItem(FN_PARAM_STDFONTS, GetStdFontConfig()));
Index: sw/source/ui/dialog/ascfldlg.cxx
===================================================================
--- sw/source/ui/dialog/ascfldlg.cxx	(revision 267481)
+++ sw/source/ui/dialog/ascfldlg.cxx	(working copy)
@@ -35,6 +35,8 @@
 #endif
 #include <hintids.hxx>
 #include <rtl/textenc.h>
+#include <i18npool/mslangid.hxx>
+#include <com/sun/star/i18n/ScriptType.hpp>
 #include <svtools/lingucfg.hxx>
 #include <fontcfg.hxx>
 #include <swmodule.hxx>
@@ -234,14 +236,14 @@
                     switch(nAppScriptType)
                     {
                         case SCRIPTTYPE_ASIAN:
-                            aOpt.SetLanguage(aLinguOpt.nDefaultLanguage_CJK);
+                            aOpt.SetLanguage(MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CJK, SCRIPTTYPE_ASIAN));
                         break;
                         case SCRIPTTYPE_COMPLEX:
-                            aOpt.SetLanguage(aLinguOpt.nDefaultLanguage_CTL);
+                            aOpt.SetLanguage(MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CTL, SCRIPTTYPE_COMPLEX));
                         break;
                         //SCRIPTTYPE_LATIN:
                         default:
-                            aOpt.SetLanguage(aLinguOpt.nDefaultLanguage);
+                            aOpt.SetLanguage(MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage, SCRIPTTYPE_LATIN));
                     }
                 }
 			}
Index: sw/source/ui/config/fontcfg.cxx
===================================================================
--- sw/source/ui/config/fontcfg.cxx	(revision 267481)
+++ sw/source/ui/config/fontcfg.cxx	(working copy)
@@ -33,10 +33,12 @@
 
 
 #include <fontcfg.hxx>
+#include <i18npool/mslangid.hxx>
 #include <vcl/outdev.hxx>
 #include <svtools/lingucfg.hxx>
 #include <com/sun/star/uno/Any.hxx>
 #include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/i18n/ScriptType.hpp>
 #include <swtypes.hxx>
 
 #include <unomid.h>
@@ -116,9 +118,10 @@
 
     SvtLinguConfig().GetOptions( aLinguOpt );
 
-	sal_Int16   eWestern = aLinguOpt.nDefaultLanguage,
-                eCJK = aLinguOpt.nDefaultLanguage_CJK,
-                eCTL = aLinguOpt.nDefaultLanguage_CTL;
+    sal_Int16   eWestern = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN),
+                eCJK = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN),
+                eCTL = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
+
     for(sal_Int16 i = 0; i < DEF_FONT_COUNT; i++)
     {
         sDefaultFonts[i] = GetDefaultFor(i,
@@ -163,9 +166,10 @@
 
     SvtLinguConfig().GetOptions( aLinguOpt );
 
-	sal_Int16   eWestern = aLinguOpt.nDefaultLanguage,
-                eCJK = aLinguOpt.nDefaultLanguage_CJK,
-                eCTL = aLinguOpt.nDefaultLanguage_CTL;
+    sal_Int16   eWestern = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN),
+                eCJK = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN),
+                eCTL = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
+
     for(sal_uInt16 nProp = 0;
         nProp < sal::static_int_cast< sal_uInt16, sal_Int32 >( aNames.getLength() );
             nProp++)
@@ -198,9 +202,10 @@
 
     SvtLinguConfig().GetOptions( aLinguOpt );
 
-	sal_Int16   eWestern = aLinguOpt.nDefaultLanguage,
-                eCJK = aLinguOpt.nDefaultLanguage_CJK,
-                eCTL = aLinguOpt.nDefaultLanguage_CTL;
+    sal_Int16   eWestern = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN),
+                eCJK = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN),
+                eCTL = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
+
     String sDefFont(GetDefaultFor(FONT_STANDARD, eWestern));
     String sDefFontCJK(GetDefaultFor(FONT_STANDARD_CJK, eCJK));
     String sDefFontCTL(GetDefaultFor(FONT_STANDARD_CTL, eCTL));
@@ -320,9 +325,11 @@
     {
         SvtLinguOptions aLinguOpt;
         SvtLinguConfig().GetOptions( aLinguOpt );
-        sal_Int16   eWestern = aLinguOpt.nDefaultLanguage,
-                    eCJK = aLinguOpt.nDefaultLanguage_CJK,
-                    eCTL = aLinguOpt.nDefaultLanguage_CTL;
+
+        sal_Int16 eWestern = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN),
+                  eCJK = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN),
+                  eCTL = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
+
         // #i92090# default height value sets back to -1
         const sal_Int32 nDefaultHeight = GetDefaultHeightFor(nFontType, lcl_LanguageOfType(nFontType, eWestern, eCJK, eCTL));
         const bool bIsDefaultHeight = nHeight == nDefaultHeight;
Index: sw/source/ui/lingu/olmenu.cxx
===================================================================
--- sw/source/ui/lingu/olmenu.cxx	(revision 267481)
+++ sw/source/ui/lingu/olmenu.cxx	(working copy)
@@ -62,6 +62,7 @@
 #include <com/sun/star/container/XNameAccess.hpp>
 #include <com/sun/star/frame/XModuleManager.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/i18n/ScriptType.hpp>
 #include <svx/dlgutil.hxx>
 #include <svtools/itemset.hxx>
 #include <svx/langitem.hxx>
@@ -168,7 +169,7 @@
 		SvtLinguOptions aLinguOpt;
 		SvtLinguConfig().GetOptions( aLinguOpt );
 		// The default document language from "Tools/Options - Language Settings - Languages: Western"
-		aLangList[0] = aLinguOpt.nDefaultLanguage;
+		aLangList[0] = MsLangId::resolveSystemLanguageByScriptType(aLinguOpt.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN);
 		// The one from "Tools/Options - Language Settings - Languages: User interface"
 		aLangList[1] = rSettings.GetUILanguage();
 		// The one from "Tools/Options - Language Settings - Languages: Locale setting"
Index: sw/util/makefile.mk
===================================================================
--- sw/util/makefile.mk	(revision 267481)
+++ sw/util/makefile.mk	(working copy)
@@ -190,6 +190,7 @@
 			$(SVLLIB) \
 			$(UNOTOOLSLIB) \
             $(TOOLSLIB) \
+			$(I18NISOLANGLIB) \
 			$(COMPHELPERLIB) \
 			$(UCBHELPERLIB)	\
 			$(CPPUHELPERLIB)	\
Index: chart2/source/tools/CharacterProperties.cxx
===================================================================
--- chart2/source/tools/CharacterProperties.cxx	(revision 267481)
+++ chart2/source/tools/CharacterProperties.cxx	(working copy)
@@ -51,9 +51,11 @@
 #include <com/sun/star/text/RubyAdjust.hpp>
 #include <com/sun/star/awt/FontStrikeout.hpp>
 #include <com/sun/star/text/WritingMode2.hpp>
+#include <com/sun/star/i18n/ScriptType.hpp>
 
 #include <comphelper/InlineContainer.hxx>
 
+
 // header for struct SvtLinguConfig
 #ifndef _SVTOOLS_LINGUCFG_HXX_
 #include <svtools/lingucfg.hxx>
@@ -471,16 +473,21 @@
     const float fDefaultFontHeight = 13.0;
 
     SvtLinguConfig aLinguConfig;
-    lang::Locale aDefaultLocale( C2U( "en" ), C2U( "US" ), OUString() );
+    lang::Locale aDefaultLocale;
     aLinguConfig.GetProperty(C2U("DefaultLocale")) >>= aDefaultLocale;
     lang::Locale aDefaultLocale_CJK;
     aLinguConfig.GetProperty(C2U("DefaultLocale_CJK")) >>= aDefaultLocale_CJK;
     lang::Locale aDefaultLocale_CTL;
     aLinguConfig.GetProperty(C2U("DefaultLocale_CTL")) >>= aDefaultLocale_CTL;
 
-    Font aFont = OutputDevice::GetDefaultFont( DEFAULTFONT_LATIN_SPREADSHEET, MsLangId::convertLocaleToLanguage( aDefaultLocale ), DEFAULTFONT_FLAGS_ONLYONE, 0 );   
-    Font aFontCJK = OutputDevice::GetDefaultFont( DEFAULTFONT_CJK_SPREADSHEET, MsLangId::convertLocaleToLanguage( aDefaultLocale_CJK ), DEFAULTFONT_FLAGS_ONLYONE, 0 );
-    Font aFontCTL = OutputDevice::GetDefaultFont( DEFAULTFONT_CTL_SPREADSHEET, MsLangId::convertLocaleToLanguage( aDefaultLocale_CTL ), DEFAULTFONT_FLAGS_ONLYONE, 0 );
+    using namespace ::com::sun::star::i18n::ScriptType;
+    LanguageType nLang;
+    nLang = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage(aDefaultLocale), LATIN);
+    Font aFont = OutputDevice::GetDefaultFont( DEFAULTFONT_LATIN_SPREADSHEET, nLang, DEFAULTFONT_FLAGS_ONLYONE, 0 );   
+    nLang = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage( aDefaultLocale_CJK), ASIAN);
+    Font aFontCJK = OutputDevice::GetDefaultFont( DEFAULTFONT_CJK_SPREADSHEET, nLang, DEFAULTFONT_FLAGS_ONLYONE, 0 );
+    nLang = MsLangId::resolveSystemLanguageByScriptType(MsLangId::convertLocaleToLanguage( aDefaultLocale_CTL), COMPLEX);
+    Font aFontCTL = OutputDevice::GetDefaultFont( DEFAULTFONT_CTL_SPREADSHEET, nLang, DEFAULTFONT_FLAGS_ONLYONE, 0 );
 
     ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_CHAR_FONT_NAME, OUString( aFont.GetName() ) );
     ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_CHAR_FONT_STYLE_NAME, OUString(aFont.GetStyleName()) );
Index: desktop/source/app/langselect.cxx
===================================================================
--- desktop/source/app/langselect.cxx	(revision 267481)
+++ desktop/source/app/langselect.cxx	(working copy)
@@ -104,7 +104,7 @@
         ::rtl::OUString sWin16SysLocale;
         aWin16SysLocale >>= sWin16SysLocale;
         if( sWin16SysLocale.getLength())
-            setDefaultLocale(sWin16SysLocale);
+            setDefaultLanguage(sWin16SysLocale);
     }
     catch(const Exception&)
     {
@@ -116,9 +116,8 @@
         OUString usLocale;
         Reference< XPropertySet > xLocaleProp(getConfigAccess(
             "org.openoffice.System/L10N", sal_True), UNO_QUERY_THROW);
-           // "org.openoffice.Office.Linguistic/General", sal_True), UNO_QUERY_THROW);
         xLocaleProp->getPropertyValue(OUString::createFromAscii("Locale")) >>= usLocale;     
-            setDefaultLocale(usLocale);
+            setDefaultLanguage(usLocale);
     } 
     catch (Exception&) 
     {
@@ -160,89 +159,33 @@
 
     // #i32939# setting of default document locale
     // #i32939# this should not be based on the UI language
-    setDefaultLocale(aLocaleString);
+    setDefaultLanguage(aLocaleString);
 
-    // fallback: set en-US as default Western locale if no Western locale is set
-    OUString usWesternName = OUString::createFromAscii("DefaultLocale");
-    try
-    {       
-        Reference< XPropertySet > xProp(getConfigAccess(
-            "org.openoffice.Office.Linguistic/General/", sal_True), UNO_QUERY_THROW);
-        OUString usValue;
-        xProp->getPropertyValue(usWesternName) >>= usValue;
-        if (usValue.getLength() == 0)
-        {
-            // there is no western document language selected
-            // if the selected locale is a western locale, this
-            // will become the default western docuemnt language
-            // otherwise, fall back to en-US
-            OUString usDefault = OUString::createFromAscii("en-US");
-            try
-            {
-                xProp->setPropertyValue(usWesternName, makeAny(usDefault));
-                Reference< XChangesBatch >(xProp,UNO_QUERY_THROW)->commitChanges();
-            }
-            catch ( PropertyVetoException )
-            {
-                // we are not allowed to change this
-            }
-        }
-    }
-    catch ( Exception& )
-    {
-    }
-
     return bSuccess;
 }
 
-void LanguageSelection::setDefaultLocale(const OUString& usUILocale)
+void LanguageSelection::setDefaultLanguage(const OUString& sLocale)
 {
-    // #i32939# setting of default document locale
-    // org.openoffice.Office.Linguistic/General/DefaultLocale
-    // org.openoffice.Office.Linguistic/General/DefaultLocale_CJK
-    // org.openoffice.Office.Linguistic/General/DefaultLocale_CTL
+    // #i32939# setting of default document language
+    //
+    // See #i42730# for rules for determining source of settings
 
-    // determine script type of UI locale
-    LanguageType ltUILocale = MsLangId::convertIsoStringToLanguage(usUILocale);
-    sal_uInt16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage(ltUILocale);
+    // determine script type of locale
+    LanguageType nLang = MsLangId::convertIsoStringToLanguage(sLocale);
+    sal_uInt16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage(nLang);
 
-    try
+    switch (nScriptType)
     {
-        Reference< XPropertySet > xProp(getConfigAccess(
-                                            "org.openoffice.Office.Linguistic/General/", sal_True), UNO_QUERY_THROW);
-        OUString usName = OUString::createFromAscii("DefaultLocale");
-        switch (nScriptType)
-        {
-            case SCRIPTTYPE_ASIAN:
-                usName = OUString::createFromAscii("DefaultLocale_CJK");
-                break;
-            case SCRIPTTYPE_COMPLEX:
-                usName = OUString::createFromAscii("DefaultLocale_CTL");
-                break;
-        }
-        OUString usValue;
-        xProp->getPropertyValue(usName) >>= usValue;
-        if (usValue.getLength() == 0)
-        {
-            // there is no document language set, for the script type selected
-            // in the UI
-            // covert the LanguageType we've got from the LanguageTable back to
-            // an iso string and store it
-            OUString usDefault = MsLangId::convertLanguageToIsoString(ltUILocale);
-            try
-            {
-                xProp->setPropertyValue(usName, makeAny(usDefault));
-                Reference< XChangesBatch >(xProp, UNO_QUERY_THROW)->commitChanges();
-            }
-            catch ( PropertyVetoException )
-            {
-                // we are not allowed to change this
-            }
-        }
+        case SCRIPTTYPE_ASIAN:
+            MsLangId::setConfiguredAsianFallback( nLang );
+            break;
+        case SCRIPTTYPE_COMPLEX:
+            MsLangId::setConfiguredComplexFallback( nLang );
+            break;
+        default:
+            MsLangId::setConfiguredWesternFallback( nLang );
+            break;
     }
-    catch ( Exception& )
-    {
-    }
 }
 
 OUString LanguageSelection::getLanguageString()
Index: desktop/source/app/langselect.hxx
===================================================================
--- desktop/source/app/langselect.hxx	(revision 267481)
+++ desktop/source/app/langselect.hxx	(working copy)
@@ -60,7 +60,7 @@
     static rtl::OUString getUserLanguage();
     static rtl::OUString getSystemLanguage();
     static void resetUserLanguage();
-    static void setDefaultLocale(const rtl::OUString&);
+    static void setDefaultLanguage(const rtl::OUString&);
 
 public:
     static com::sun::star::lang::Locale IsoStringToLocale(const rtl::OUString& str);
Index: svx/source/dialog/optgdlg.cxx
===================================================================
--- svx/source/dialog/optgdlg.cxx	(revision 267481)
+++ svx/source/dialog/optgdlg.cxx	(working copy)
@@ -103,6 +103,7 @@
 #include <com/sun/star/uno/Any.hxx>
 #include <com/sun/star/container/XContentEnumerationAccess.hpp>
 #include <com/sun/star/container/XSet.hpp>
+#include <com/sun/star/i18n/ScriptType.hpp>
 
 #include <vcl/svapp.hxx>
 
@@ -1201,8 +1202,13 @@
 
     // initialize user interface language selection
     SvtLanguageTable* pLanguageTable = new SvtLanguageTable;
-    String aStr( pLanguageTable->GetString( LANGUAGE_SYSTEM ) );
-    aUserInterfaceLB.InsertEntry(aStr);
+    const String aStr( pLanguageTable->GetString( LANGUAGE_SYSTEM ) );
+
+    String aUILang(aStr);
+    aUILang += String::CreateFromAscii(" - ");
+    aUILang += pLanguageTable->GetString( Application::GetSettings().GetUILanguage() );
+
+    aUserInterfaceLB.InsertEntry(aUILang);
     aUserInterfaceLB.SetEntryData(0, 0);
     aUserInterfaceLB.SelectEntryPos(0);
     try
@@ -1264,16 +1270,24 @@
     }
 
     aWesternLanguageLB.SetLanguageList( LANG_LIST_WESTERN | LANG_LIST_ONLY_KNOWN, TRUE,  FALSE, TRUE );
-    aAsianLanguageLB  .SetLanguageList( LANG_LIST_CJK     | LANG_LIST_ONLY_KNOWN, TRUE,  FALSE, TRUE );
+    aWesternLanguageLB.InsertDefaultLanguage( ::com::sun::star::i18n::ScriptType::LATIN );
+    aAsianLanguageLB.SetLanguageList( LANG_LIST_CJK     | LANG_LIST_ONLY_KNOWN, TRUE,  FALSE, TRUE );
+    aAsianLanguageLB.InsertDefaultLanguage( ::com::sun::star::i18n::ScriptType::ASIAN );
     aComplexLanguageLB.SetLanguageList( LANG_LIST_CTL     | LANG_LIST_ONLY_KNOWN, TRUE,  FALSE, TRUE );
-    aLocaleSettingLB  .SetLanguageList( LANG_LIST_ALL     | LANG_LIST_ONLY_KNOWN, FALSE, FALSE, FALSE);
-    aLocaleSettingLB.InsertLanguage( LANGUAGE_SYSTEM );
+    aComplexLanguageLB.InsertDefaultLanguage( ::com::sun::star::i18n::ScriptType::COMPLEX );
 
-    // insert SYSTEM entry, no specific currency
-    aCurrencyLB.InsertEntry( aStr );
+    aLocaleSettingLB.SetLanguageList( LANG_LIST_ALL     | LANG_LIST_ONLY_KNOWN, FALSE, FALSE, FALSE);
+    aLocaleSettingLB.InsertDefaultLanguage( ::com::sun::star::i18n::ScriptType::WEAK );
+
+    const NfCurrencyTable& rCurrTab = SvNumberFormatter::GetTheCurrencyTable();
+    const NfCurrencyEntry& rCurr = SvNumberFormatter::GetCurrencyEntry( LANGUAGE_SYSTEM );
+    // insert SYSTEM entry
+    String aDefaultCurr(aStr);
+    aDefaultCurr += String::CreateFromAscii(" - ");
+    aDefaultCurr += rCurr.GetBankSymbol();
+    aCurrencyLB.InsertEntry( aDefaultCurr );
     // all currencies
     String aTwoSpace( RTL_CONSTASCII_USTRINGPARAM( "  " ) );
-    const NfCurrencyTable& rCurrTab = SvNumberFormatter::GetTheCurrencyTable();
     USHORT nCurrCount = rCurrTab.Count();
     // first entry is SYSTEM, skip it
     for ( USHORT j=1; j < nCurrCount; ++j )
@@ -1282,7 +1296,7 @@
         String aStr_( pCurr->GetBankSymbol() );
         aStr_ += aTwoSpace;
         aStr_ += pCurr->GetSymbol();
-        aStr = ApplyLreOrRleEmbedding( aStr_ );
+        aStr_ = ApplyLreOrRleEmbedding( aStr_ );
         aStr_ += aTwoSpace;
         aStr_ += ApplyLreOrRleEmbedding( pLanguageTable->GetString( pCurr->GetLanguage() ) );
         USHORT nPos = aCurrencyLB.InsertEntry( aStr_ );
@@ -1496,7 +1510,7 @@
 		if(!bCurrentDocCBChecked)
 		{
 			Any aValue;
-			Locale aLocale = SvxCreateLocale( eSelectLang );
+			Locale aLocale = MsLangId::convertLanguageToLocale( eSelectLang, false );
 			aValue <<= aLocale;
 			OUString aPropName( C2U("DefaultLocale") );
             pLangConfig->aLinguConfig.SetProperty( aPropName, aValue );
@@ -1505,7 +1519,8 @@
 		}
 		if(pCurrentDocShell)
 		{
-			rSet.Put(SvxLanguageItem(eSelectLang, SID_ATTR_LANGUAGE));
+			rSet.Put(SvxLanguageItem(MsLangId::resolveSystemLanguageByScriptType(eSelectLang, ::com::sun::star::i18n::ScriptType::LATIN),
+                SID_ATTR_LANGUAGE));
 			bRet = TRUE;
 		}
 	}
@@ -1516,7 +1531,7 @@
 		if(!bCurrentDocCBChecked)
 		{
 			Any aValue;
-			Locale aLocale = SvxCreateLocale( eSelectLang );
+			Locale aLocale = MsLangId::convertLanguageToLocale( eSelectLang, false );
 			aValue <<= aLocale;
 			OUString aPropName( C2U("DefaultLocale_CJK") );
             pLangConfig->aLinguConfig.SetProperty( aPropName, aValue );
@@ -1525,7 +1540,8 @@
 		}
 		if(pCurrentDocShell)
 		{
-			rSet.Put(SvxLanguageItem(eSelectLang, SID_ATTR_CHAR_CJK_LANGUAGE));
+			rSet.Put(SvxLanguageItem(MsLangId::resolveSystemLanguageByScriptType(eSelectLang, ::com::sun::star::i18n::ScriptType::ASIAN),
+                SID_ATTR_CHAR_CJK_LANGUAGE));
 			bRet = TRUE;
 		}
 	}
@@ -1536,7 +1552,7 @@
 		if(!bCurrentDocCBChecked)
 		{
 			Any aValue;
-			Locale aLocale = SvxCreateLocale( eSelectLang );
+			Locale aLocale = MsLangId::convertLanguageToLocale( eSelectLang, false );
 			aValue <<= aLocale;
 			OUString aPropName( C2U("DefaultLocale_CTL") );
             pLangConfig->aLinguConfig.SetProperty( aPropName, aValue );
@@ -1545,7 +1561,8 @@
 		}
 		if(pCurrentDocShell)
 		{
-			rSet.Put(SvxLanguageItem(eSelectLang, SID_ATTR_CHAR_CTL_LANGUAGE));
+			rSet.Put(SvxLanguageItem(MsLangId::resolveSystemLanguageByScriptType(eSelectLang, ::com::sun::star::i18n::ScriptType::COMPLEX),
+                SID_ATTR_CHAR_CTL_LANGUAGE));
 			bRet = TRUE;
 		}
 	}
@@ -1645,13 +1662,18 @@
         aWestLang = pLangConfig->aLinguConfig.GetProperty(C2U("DefaultLocale"));
         Locale aLocale;
         aWestLang >>= aLocale;
-        eCurLang = SvxLocaleToLanguage( aLocale );
+
+        eCurLang = MsLangId::convertLocaleToLanguage( aLocale );
+
         aCJKLang = pLangConfig->aLinguConfig.GetProperty(C2U("DefaultLocale_CJK"));
+        aLocale = Locale();
         aCJKLang >>= aLocale;
-        eCurLangCJK = SvxLocaleToLanguage( aLocale );
+        eCurLangCJK = MsLangId::convertLocaleToLanguage( aLocale );
+
         aCTLLang = pLangConfig->aLinguConfig.GetProperty(C2U("DefaultLocale_CTL"));
+        aLocale = Locale();
         aCTLLang >>= aLocale;
-        eCurLangCTL = SvxLocaleToLanguage( aLocale );
+        eCurLangCTL = MsLangId::convertLocaleToLanguage( aLocale );
     }
     catch(Exception&)
     {
@@ -1663,13 +1685,25 @@
         aCurrentDocCB.Check(bLanguageCurrentDoc_Impl);
 		const SfxPoolItem* pLang;
 		if( SFX_ITEM_SET == rSet.GetItemState(SID_ATTR_LANGUAGE, FALSE, &pLang))
-			eCurLang = ((const SvxLanguageItem*)pLang)->GetValue();
+        {
+	        LanguageType eTempCurLang = ((const SvxLanguageItem*)pLang)->GetValue();
+            if (MsLangId::resolveSystemLanguageByScriptType(eCurLang, ::com::sun::star::i18n::ScriptType::LATIN) != eTempCurLang)
+                eCurLang = eTempCurLang;
+        }
 
 		if( SFX_ITEM_SET == rSet.GetItemState(SID_ATTR_CHAR_CJK_LANGUAGE, FALSE, &pLang))
-			eCurLangCJK = ((const SvxLanguageItem*)pLang)->GetValue();
+        {
+			LanguageType eTempCurLang = ((const SvxLanguageItem*)pLang)->GetValue();
+            if (MsLangId::resolveSystemLanguageByScriptType(eCurLangCJK, ::com::sun::star::i18n::ScriptType::ASIAN) != eTempCurLang)
+                eCurLangCJK = eTempCurLang;
+        }
 
 		if( SFX_ITEM_SET == rSet.GetItemState(SID_ATTR_CHAR_CTL_LANGUAGE, FALSE, &pLang))
-			eCurLangCTL = ((const SvxLanguageItem*)pLang)->GetValue();
+        {
+			LanguageType eTempCurLang = ((const SvxLanguageItem*)pLang)->GetValue();
+            if (MsLangId::resolveSystemLanguageByScriptType(eCurLangCTL, ::com::sun::star::i18n::ScriptType::COMPLEX) != eTempCurLang)
+                eCurLangCTL = eTempCurLang;
+        }
 	}
     if(LANGUAGE_NONE == eCurLang || LANGUAGE_DONTKNOW == eCurLang)
         aWesternLanguageLB.SelectLanguage(LANGUAGE_NONE);
Index: svx/source/dialog/langbox.cxx
===================================================================
--- svx/source/dialog/langbox.cxx	(revision 267481)
+++ svx/source/dialog/langbox.cxx	(working copy)
@@ -37,8 +37,9 @@
 #include <com/sun/star/linguistic2/XLinguServiceManager.hdl>
 #endif
 #include <com/sun/star/linguistic2/XAvailableLocales.hpp>
+#include <com/sun/star/i18n/ScriptType.hpp>
 #include <linguistic/misc.hxx>
-#include<rtl/ustring.hxx>
+#include <rtl/ustring.hxx>
 #include <unotools/localedatawrapper.hxx>
 
 #include <svtools/langtab.hxx>
@@ -315,6 +316,13 @@
 
 USHORT SvxLanguageBox::InsertLanguage( const LanguageType nLangType, USHORT nPos )
 {
+    return ImplInsertLanguage( nLangType, nPos, ::com::sun::star::i18n::ScriptType::WEAK );
+}
+
+//------------------------------------------------------------------------
+
+USHORT SvxLanguageBox::ImplInsertLanguage( const LanguageType nLangType, USHORT nPos, sal_Int16 nType )
+{
     LanguageType nLang = MsLangId::getReplacementForObsoleteLanguage( nLangType);
     // For obsolete and to be replaced languages check whether an entry of the 
     // replacement already exists and if so don't add an entry with identical 
@@ -329,6 +337,15 @@
 	String aStrEntry = m_pLangTable->GetString( nLang );
 	if (LANGUAGE_NONE == nLang && m_bHasLangNone && m_bLangNoneIsLangAll)
 		aStrEntry = m_aAllString;
+
+    LanguageType nRealLang = nLang;
+    if (nRealLang == LANGUAGE_SYSTEM)
+    {
+        nRealLang = MsLangId::resolveSystemLanguageByScriptType(nRealLang, nType);
+        aStrEntry.AppendAscii(" - ");
+        aStrEntry.Append(m_pLangTable->GetString( nRealLang ));
+    }
+
     aStrEntry = ApplyLreOrRleEmbedding( aStrEntry );
 
 	USHORT nAt = 0;
@@ -343,7 +360,7 @@
                 m_pSpellUsedLang = new Sequence< INT16 >( xSpell->getLanguages() );
         }
         bFound = m_pSpellUsedLang ?
-                    lcl_SeqHasLang( *m_pSpellUsedLang, nLang ) : FALSE;
+                    lcl_SeqHasLang( *m_pSpellUsedLang, nRealLang ) : FALSE;
 
         nAt = ImplInsertImgEntry( aStrEntry, nPos, bFound );
 	}
@@ -356,6 +373,13 @@
 
 //------------------------------------------------------------------------
 
+USHORT SvxLanguageBox::InsertDefaultLanguage( sal_Int16 nType, USHORT nPos )
+{
+    return ImplInsertLanguage( LANGUAGE_SYSTEM, nPos, nType );
+}
+
+//------------------------------------------------------------------------
+
 USHORT SvxLanguageBox::InsertLanguage( const LanguageType nLangType,
         BOOL bCheckEntry, USHORT nPos )
 {
Index: svx/inc/svx/langbox.hxx
===================================================================
--- svx/inc/svx/langbox.hxx	(revision 267481)
+++ svx/inc/svx/langbox.hxx	(working copy)
@@ -77,6 +77,7 @@
 
     SVX_DLLPRIVATE void                    Init();
     SVX_DLLPRIVATE USHORT                  ImplInsertImgEntry( const String& rEntry, USHORT nPos, bool bChecked );
+    SVX_DLLPRIVATE USHORT                  ImplInsertLanguage(LanguageType, USHORT, sal_Int16 );
 
 public:
     SvxLanguageBox( Window* pParent, WinBits nWinStyle, BOOL bCheck = FALSE);
@@ -88,6 +89,7 @@
 							BOOL bCheckSpellAvail = FALSE );
 
 	USHORT			InsertLanguage( const LanguageType eLangType, USHORT nPos = LISTBOX_APPEND );
+	USHORT			InsertDefaultLanguage( sal_Int16 nType, USHORT nPos = LISTBOX_APPEND );
     USHORT          InsertLanguage( const LanguageType eLangType,
                             BOOL bCheckEntry, USHORT nPos = LISTBOX_APPEND );
 	void			RemoveLanguage( const LanguageType eLangType );
Index: svtools/source/config/lingucfg.cxx
===================================================================
--- svtools/source/config/lingucfg.cxx	(revision 267481)
+++ svtools/source/config/lingucfg.cxx	(working copy)
@@ -72,69 +72,38 @@
 ///////////////////////////////////////////////////////////////////////////
 
 
-static lang::Locale lcl_CreateLocale( LanguageType eLang )
-{
-    lang::Locale aLocale;
-	if ( eLang != LANGUAGE_NONE )
-		MsLangId::convertLanguageToLocale( eLang, aLocale );
-
-	return aLocale;
-}
-
-
-static INT16 lcl_LocaleToLanguage( const lang::Locale& rLocale )
-{
-	//	empty Locale -> LANGUAGE_NONE
-	if ( rLocale.Language.getLength() == 0 )
-		return LANGUAGE_NONE;
-
-	//	Variant of Locale is ignored
-	return MsLangId::convertLocaleToLanguage( rLocale );
-}
-
-
 static BOOL lcl_SetLocale( INT16 &rLanguage, const uno::Any &rVal )
 {
-	BOOL bSucc = FALSE;
+    BOOL bSucc = FALSE;
 
     lang::Locale aNew;
-	if (rVal >>= aNew)	// conversion successful?
-	{
-		INT16 nNew = lcl_LocaleToLanguage( aNew );
-		if (nNew != rLanguage)
-		{
-			rLanguage = nNew;
-			bSucc = TRUE;
-		}
-	}
-
-	return bSucc;
+    if (rVal >>= aNew)	// conversion successful?
+    {
+        INT16 nNew = MsLangId::convertLocaleToLanguage( aNew );
+        if (nNew != rLanguage)
+        {
+            rLanguage = nNew;
+            bSucc = TRUE;
+        }
+    }
+    return bSucc;
 }
 
 
-static inline INT16 lcl_CfgLocaleStrToLanguage( const OUString &rCfgLocaleStr )
-{
-	INT16 nRes = LANGUAGE_NONE;
-    if (0 != rCfgLocaleStr.getLength())
-        nRes = MsLangId::convertIsoStringToLanguage( rCfgLocaleStr );
-    return nRes;
-}
-
-
 static inline const OUString lcl_LanguageToCfgLocaleStr( INT16 nLanguage )
 {
     OUString aRes;
-    if (LANGUAGE_NONE != nLanguage)
+    if (LANGUAGE_SYSTEM != nLanguage)
         aRes = MsLangId::convertLanguageToIsoString( nLanguage );
     return aRes;
 }
 
 
-static void lcl_CfgAnyToLanguage( const uno::Any &rVal, INT16& rLanguage )
+static INT16 lcl_CfgAnyToLanguage( const uno::Any &rVal )
 {
-	OUString aTmp;
-    if ((rVal >>= aTmp)  &&  0 != aTmp.getLength())
-       rLanguage = MsLangId::convertIsoStringToLanguage( aTmp );
+    OUString aTmp;
+    rVal >>= aTmp;
+    return (aTmp.getLength() == 0) ? LANGUAGE_SYSTEM : MsLangId::convertIsoStringToLanguage( aTmp );
 }
 
 
@@ -143,10 +112,9 @@
 SvtLinguOptions::SvtLinguOptions()
 {
     nDefaultLanguage = LANGUAGE_NONE;
-
 	nDefaultLanguage_CJK = LANGUAGE_NONE;
 	nDefaultLanguage_CTL = LANGUAGE_NONE;
-
+    
 	// general options
 	bIsUseDictionaryList	=
 	bIsIgnoreControlCharacters	= TRUE;
@@ -428,19 +396,19 @@
         }
         case UPH_DEFAULT_LOCALE :
         {
-            lang::Locale aLocale( lcl_CreateLocale( rOpt.nDefaultLanguage ) );
+            lang::Locale aLocale( MsLangId::convertLanguageToLocale( rOpt.nDefaultLanguage, false ) );
             aRes.setValue( &aLocale, ::getCppuType((lang::Locale*)0 ));
             break;
         }
         case UPH_DEFAULT_LOCALE_CJK :
         {
-            lang::Locale aLocale( lcl_CreateLocale( rOpt.nDefaultLanguage_CJK ) );
+            lang::Locale aLocale( MsLangId::convertLanguageToLocale( rOpt.nDefaultLanguage_CJK, false ) );
             aRes.setValue( &aLocale, ::getCppuType((lang::Locale*)0 ));
             break;
         }
         case UPH_DEFAULT_LOCALE_CTL :
         {
-            lang::Locale aLocale( lcl_CreateLocale( rOpt.nDefaultLanguage_CTL ) );
+            lang::Locale aLocale( MsLangId::convertLanguageToLocale( rOpt.nDefaultLanguage_CTL, false ) );
             aRes.setValue( &aLocale, ::getCppuType((lang::Locale*)0 ));
             break;
         }
@@ -654,7 +622,7 @@
             switch ( nPropertyHandle )
             {
                 case UPH_DEFAULT_LOCALE : 
-                    { rOpt.bRODefaultLanguage = pROStates[i]; lcl_CfgAnyToLanguage( rVal, rOpt.nDefaultLanguage ); } break;
+                    { rOpt.bRODefaultLanguage = pROStates[i]; rOpt.nDefaultLanguage = lcl_CfgAnyToLanguage( rVal ); } break;
                 case UPH_ACTIVE_DICTIONARIES : 
                     { rOpt.bROActiveDics = pROStates[i]; rVal >>= rOpt.aActiveDics;   } break;
                 case UPH_IS_USE_DICTIONARY_LIST : 
@@ -662,9 +630,9 @@
                 case UPH_IS_IGNORE_CONTROL_CHARACTERS : 
                     { rOpt.bROIsIgnoreControlCharacters = pROStates[i]; rVal >>= rOpt.bIsIgnoreControlCharacters;    } break;
                 case UPH_DEFAULT_LOCALE_CJK : 
-                    { rOpt.bRODefaultLanguage_CJK = pROStates[i]; lcl_CfgAnyToLanguage( rVal, rOpt.nDefaultLanguage_CJK );    } break;
+                    { rOpt.bRODefaultLanguage_CJK = pROStates[i]; rOpt.nDefaultLanguage_CJK = lcl_CfgAnyToLanguage( rVal );    } break;
                 case UPH_DEFAULT_LOCALE_CTL : 
-                    { rOpt.bRODefaultLanguage_CTL = pROStates[i]; lcl_CfgAnyToLanguage( rVal, rOpt.nDefaultLanguage_CTL );    } break;
+                    { rOpt.bRODefaultLanguage_CTL = pROStates[i]; rOpt.nDefaultLanguage_CTL = lcl_CfgAnyToLanguage( rVal );    } break;
 
                 case UPH_IS_SPELL_UPPER_CASE : 
                     { rOpt.bROIsSpellUpperCase = pROStates[i]; rVal >>= rOpt.bIsSpellUpperCase; } break;
--- reportdesign/util/makefile.mk	2009-03-12 23:12:05.000000000 +0000
+++ reportdesign/util/makefile.mk	2009-03-12 23:10:02.000000000 +0000
@@ -58,6 +58,7 @@
 		$(FWELIB)				\
 		$(SFXLIB)				\
 		$(TOOLSLIB) 			\
+		$(I18NISOLANGLIB) \
 		$(SVLLIB)				\
 		$(SVTOOLLIB)			\
 		$(UNOTOOLSLIB)			\


Index: openoffice.org.spec
===================================================================
RCS file: /cvs/pkgs/rpms/openoffice.org/devel/openoffice.org.spec,v
retrieving revision 1.1991
retrieving revision 1.1992
diff -u -p -r1.1991 -r1.1992
--- openoffice.org.spec	24 Aug 2009 13:03:19 -0000	1.1991
+++ openoffice.org.spec	24 Aug 2009 14:50:36 -0000	1.1992
@@ -72,7 +72,7 @@ BuildRequires:  pentaho-reporting-flow-e
 
 Patch0:  openoffice.org-simple-crash_report.sh
 Patch1:  openoffice.org-multiliblauncher.sh
-Patch2:  planned.workspace.defaultdoclang.patch
+Patch2:  workspace.defaultdoclang.patch
 %if %{gtkprintui}
 Patch3:  openoffice.org-2.0.3.rh127576.gtkunixprintdialog.patch
 %endif


--- planned.workspace.defaultdoclang.patch DELETED ---




More information about the fedora-extras-commits mailing list