[Libreoffice-commits] .: 4 commits - basctl/source basic/source chart2/source codemaker/inc codemaker/source connectivity/Library_flat.mk connectivity/source cui/source dbaccess/source editeng/source extensions/source forms/source framework/source l10ntools/inc l10ntools/source lingucomponent/source linguistic/source oox/inc oox/source reportdesign/source sc/source sd/source sfx2/source slideshow/source sot/Library_sot.mk sot/source starmath/source svl/inc svl/Library_svl.mk svl/source svtools/source svx/source sw/source toolkit/source unotools/inc unotools/source unusedcode.easy vcl/inc vcl/source xmloff/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Nov 23 14:09:41 PST 2012


 basctl/source/basicide/baside2b.cxx                                   |    2 
 basctl/source/basicide/scriptdocument.cxx                             |    2 
 basic/source/comp/basiccharclass.cxx                                  |    2 
 basic/source/runtime/methods.cxx                                      |    6 
 chart2/source/tools/DiagramHelper.cxx                                 |    6 
 codemaker/inc/codemaker/global.hxx                                    |    2 
 codemaker/source/codemaker/global.cxx                                 |   16 --
 connectivity/Library_flat.mk                                          |    1 
 connectivity/source/drivers/flat/ETable.cxx                           |    6 
 cui/source/options/optasian.cxx                                       |    3 
 cui/source/options/optdict.cxx                                        |    2 
 cui/source/options/optgdlg.cxx                                        |    3 
 cui/source/tabpages/autocdlg.cxx                                      |   12 -
 dbaccess/source/core/api/RowSet.cxx                                   |    6 
 dbaccess/source/core/api/SingleSelectQueryComposer.cxx                |    2 
 dbaccess/source/ui/app/AppView.cxx                                    |    2 
 dbaccess/source/ui/control/ColumnControlWindow.cxx                    |    2 
 dbaccess/source/ui/misc/DExport.cxx                                   |    4 
 dbaccess/source/ui/misc/TokenWriter.cxx                               |    4 
 dbaccess/source/ui/querydesign/QueryDesignView.cxx                    |    2 
 dbaccess/source/ui/tabledesign/TableDesignView.cxx                    |    2 
 editeng/source/editeng/editeng.cxx                                    |    6 
 editeng/source/items/svxfont.cxx                                      |    4 
 editeng/source/misc/forbiddencharacterstable.cxx                      |    2 
 editeng/source/misc/hangulhanja.cxx                                   |    2 
 editeng/source/misc/svxacorr.cxx                                      |   18 +-
 extensions/source/propctrlr/standardcontrol.cxx                       |    3 
 extensions/source/propctrlr/xsdvalidationhelper.cxx                   |    2 
 forms/source/component/FormattedField.cxx                             |    4 
 framework/source/uielement/toolbarsmenucontroller.cxx                 |    2 
 l10ntools/inc/helpmerge.hxx                                           |    4 
 l10ntools/source/helpmerge.cxx                                        |   64 --------
 lingucomponent/source/hyphenator/altlinuxhyph/hyphen/hyphenimp.cxx    |    5 
 lingucomponent/source/thesaurus/libnth/nthesimp.cxx                   |    5 
 linguistic/source/misc.cxx                                            |   20 +-
 oox/inc/oox/ole/vbacontrol.hxx                                        |    6 
 oox/source/ole/vbacontrol.cxx                                         |    5 
 reportdesign/source/core/sdr/formatnormalizer.cxx                     |    2 
 reportdesign/source/ui/dlg/DateTime.cxx                               |    2 
 sc/source/core/data/global.cxx                                        |    2 
 sc/source/core/data/globalx.cxx                                       |    2 
 sc/source/core/tool/compiler.cxx                                      |    7 
 sc/source/filter/xml/xmlimprt.cxx                                     |    4 
 sd/source/core/drawdoc.cxx                                            |    5 
 sfx2/source/appl/linkmgr2.cxx                                         |    3 
 sfx2/source/dialog/templdlg.cxx                                       |    2 
 sfx2/source/view/orgmgr.cxx                                           |    2 
 slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionImpl.cxx      |    5 
 slideshow/source/engine/OGLTrans/unx/OGLTrans_TransitionImpl.hxx      |    2 
 sot/Library_sot.mk                                                    |    1 
 sot/source/sdstor/stgelem.cxx                                         |    9 -
 starmath/source/parse.cxx                                             |    8 -
 svl/Library_svl.mk                                                    |    1 
 svl/inc/svl/ondemand.hxx                                              |   27 +--
 svl/inc/svl/zforlist.hxx                                              |    4 
 svl/source/items/ctypeitm.cxx                                         |    3 
 svl/source/items/dateitem.cxx                                         |    2 
 svl/source/items/style.cxx                                            |    2 
 svl/source/numbers/supservs.cxx                                       |    2 
 svl/source/numbers/zforfind.cxx                                       |    4 
 svl/source/numbers/zforlist.cxx                                       |   46 +++--
 svl/source/numbers/zformat.cxx                                        |   17 +-
 svl/source/numbers/zforscan.cxx                                       |    7 
 svtools/source/contnr/fileview.cxx                                    |    2 
 svtools/source/control/calendar.cxx                                   |   12 -
 svtools/source/control/ctrlbox.cxx                                    |    2 
 svtools/source/control/fmtfield.cxx                                   |   18 +-
 svtools/source/edit/syntaxhighlight.cxx                               |    2 
 svx/source/dialog/simptabl.cxx                                        |    2 
 svx/source/form/ParseContext.cxx                                      |    2 
 svx/source/form/fmcontrollayout.cxx                                   |    4 
 svx/source/form/fmsrcimp.cxx                                          |    8 -
 svx/source/form/formcontrolfactory.cxx                                |    2 
 svx/source/svdraw/svdattr.cxx                                         |    2 
 svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx |    2 
 sw/source/core/bastyp/breakit.cxx                                     |    2 
 sw/source/core/bastyp/calc.cxx                                        |   16 +-
 sw/source/core/bastyp/init.cxx                                        |    2 
 sw/source/core/doc/docsort.cxx                                        |    2 
 sw/source/core/edit/autofmt.cxx                                       |    2 
 sw/source/core/fields/docufld.cxx                                     |    4 
 sw/source/core/fields/expfld.cxx                                      |    2 
 sw/source/core/fields/fldbas.cxx                                      |    2 
 sw/source/core/fields/reffld.cxx                                      |    2 
 sw/source/core/tox/txmsrt.cxx                                         |    2 
 sw/source/core/txtnode/txtedt.cxx                                     |    6 
 sw/source/filter/ww8/ww8atr.cxx                                       |    2 
 sw/source/filter/ww8/ww8scan.cxx                                      |    4 
 sw/source/ui/app/docstyle.cxx                                         |    2 
 sw/source/ui/fldui/fldmgr.cxx                                         |    2 
 sw/source/ui/fldui/inpdlg.cxx                                         |    2 
 sw/source/ui/utlui/attrdesc.cxx                                       |    2 
 sw/source/ui/utlui/numfmtlb.cxx                                       |    2 
 toolkit/source/controls/unocontrolmodel.cxx                           |   14 -
 unotools/inc/unotools/charclass.hxx                                   |   15 +
 unotools/inc/unotools/intlwrapper.hxx                                 |   11 -
 unotools/inc/unotools/localedatawrapper.hxx                           |   16 +-
 unotools/source/i18n/charclass.cxx                                    |   57 ++++---
 unotools/source/i18n/intlwrapper.cxx                                  |   23 --
 unotools/source/i18n/localedatawrapper.cxx                            |   78 +++++-----
 unotools/source/i18n/textsearch.cxx                                   |    2 
 unotools/source/misc/syslocale.cxx                                    |   10 -
 unusedcode.easy                                                       |    6 
 vcl/inc/vcl/field.hxx                                                 |    2 
 vcl/inc/vcl/i18nhelp.hxx                                              |    6 
 vcl/source/app/i18nhelp.cxx                                           |    9 -
 vcl/source/app/settings.cxx                                           |    8 -
 vcl/source/control/field.cxx                                          |   33 +++-
 vcl/source/control/field2.cxx                                         |    8 -
 vcl/source/edit/texteng.cxx                                           |    2 
 xmloff/source/style/xmlnumfe.cxx                                      |   28 +--
 xmloff/source/style/xmlnumfi.cxx                                      |    4 
 112 files changed, 374 insertions(+), 484 deletions(-)

New commits:
commit af60316514f3ae3d4c475819bf86f2af837171e3
Author: Eike Rathke <erack at redhat.com>
Date:   Fri Nov 23 23:06:10 2012 +0100

    some i18n wrappers with LanguageTag
    
    Change-Id: I2ceaa3159e8669c2c569fa8559c1e061dcad399d

diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx
index c95ac09..7d0e7b4 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -279,7 +279,7 @@ String EditorWindow::GetWordAtCursor()
             const TextPaM& rSelStart = rSelection.GetStart();
             const TextPaM& rSelEnd = rSelection.GetEnd();
             String aText = pTextEngine->GetText( rSelEnd.GetPara() );
-            CharClass aClass( ::comphelper::getProcessComponentContext() , Application::GetSettings().GetLanguageTag().getLocale() );
+            CharClass aClass( ::comphelper::getProcessComponentContext() , Application::GetSettings().GetLanguageTag() );
             xub_StrLen nSelStart = static_cast< xub_StrLen >( rSelStart.GetIndex() );
             xub_StrLen nSelEnd = static_cast< xub_StrLen >( rSelEnd.GetIndex() );
             xub_StrLen nLength = static_cast< xub_StrLen >( aText.Len() );
diff --git a/basctl/source/basicide/scriptdocument.cxx b/basctl/source/basicide/scriptdocument.cxx
index 3826f5a..644b816 100644
--- a/basctl/source/basicide/scriptdocument.cxx
+++ b/basctl/source/basicide/scriptdocument.cxx
@@ -1194,7 +1194,7 @@ namespace basctl
         if ( _eListType == DocumentsSorted )
         {
             CollatorWrapper aCollator( ::comphelper::getProcessServiceFactory() );
-            aCollator.loadDefaultCollator( SvtSysLocale().GetLocaleData().getLocale(), 0 );
+            aCollator.loadDefaultCollator( SvtSysLocale().GetLanguageTag().getLocale(), 0 );
             ::std::sort( aScriptDocs.begin(), aScriptDocs.end(), DocumentTitleLess( aCollator ) );
         }
 
diff --git a/basic/source/comp/basiccharclass.cxx b/basic/source/comp/basiccharclass.cxx
index 4b905d7..23d8144 100644
--- a/basic/source/comp/basiccharclass.cxx
+++ b/basic/source/comp/basiccharclass.cxx
@@ -100,7 +100,7 @@ bool BasicCharClass::isLetterUnicode( sal_Unicode c )
 {
   static CharClass* pCharClass = NULL;
   if( pCharClass == NULL )
-    pCharClass = new CharClass( Application::GetSettings().GetLanguageTag().getLocale() );
+    pCharClass = new CharClass( Application::GetSettings().GetLanguageTag() );
   // can we get pCharClass to accept a sal_Unicode instead of this waste?
   return pCharClass->isLetter( rtl::OUString(c), 0 );
 }
diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx
index 27ba48f..8f1ac5d 100644
--- a/basic/source/runtime/methods.cxx
+++ b/basic/source/runtime/methods.cxx
@@ -133,13 +133,13 @@ static long GetDayDiff( const Date& rDate );
 static const CharClass& GetCharClass( void )
 {
     static bool bNeedsInit = true;
-    static lang::Locale aLocale;
+    static LanguageTag aLanguageTag( LANGUAGE_SYSTEM);
     if( bNeedsInit )
     {
         bNeedsInit = false;
-        aLocale = Application::GetSettings().GetLanguageTag().getLocale();
+        aLanguageTag = Application::GetSettings().GetLanguageTag();
     }
-    static CharClass aCharClass( aLocale );
+    static CharClass aCharClass( aLanguageTag );
     return aCharClass;
 }
 
diff --git a/chart2/source/tools/DiagramHelper.cxx b/chart2/source/tools/DiagramHelper.cxx
index a30e6aa..6d2fcb8 100644
--- a/chart2/source/tools/DiagramHelper.cxx
+++ b/chart2/source/tools/DiagramHelper.cxx
@@ -1081,7 +1081,7 @@ void lcl_switchToDateCategories( const Reference< XChartDocument >& xChartDoc, c
                     //set a date format to the axis
                     sal_Bool bCreate = sal_True;
                     const LocaleDataWrapper& rLocaleDataWrapper = Application::GetSettings().GetLocaleDataWrapper();
-                    Sequence<sal_Int32> aKeySeq = xNumberFormats->queryKeys( util::NumberFormat::DATE,  rLocaleDataWrapper.getLocale(), bCreate );
+                    Sequence<sal_Int32> aKeySeq = xNumberFormats->queryKeys( util::NumberFormat::DATE,  rLocaleDataWrapper.getLanguageTag().getLocale(), bCreate );
                     if( aKeySeq.getLength() )
                     {
                         xAxisProps->setPropertyValue( C2U("NumberFormat"), uno::makeAny(aKeySeq[0]) );
@@ -1176,7 +1176,7 @@ sal_Int32 DiagramHelper::getDateNumberFormat( const Reference< util::XNumberForm
         sal_Bool bCreate = sal_True;
         const LocaleDataWrapper& rLocaleDataWrapper = Application::GetSettings().GetLocaleDataWrapper();
         Sequence<sal_Int32> aKeySeq = xNumberFormats->queryKeys( util::NumberFormat::DATE,
-            rLocaleDataWrapper.getLocale(), bCreate );
+            rLocaleDataWrapper.getLanguageTag().getLocale(), bCreate );
         if( aKeySeq.getLength() )
         {
             nRet = aKeySeq[0];
@@ -1204,7 +1204,7 @@ sal_Int32 DiagramHelper::getPercentNumberFormat( const Reference< util::XNumberF
         sal_Bool bCreate = sal_True;
         const LocaleDataWrapper& rLocaleDataWrapper = Application::GetSettings().GetLocaleDataWrapper();
         Sequence<sal_Int32> aKeySeq = xNumberFormats->queryKeys( util::NumberFormat::PERCENT,
-            rLocaleDataWrapper.getLocale(), bCreate );
+            rLocaleDataWrapper.getLanguageTag().getLocale(), bCreate );
         if( aKeySeq.getLength() )
         {
             nRet = aKeySeq[0];
diff --git a/connectivity/Library_flat.mk b/connectivity/Library_flat.mk
index 32e4644..23e9117 100644
--- a/connectivity/Library_flat.mk
+++ b/connectivity/Library_flat.mk
@@ -43,6 +43,7 @@ $(eval $(call gb_Library_use_libraries,flat,\
 	tl \
 	svl \
 	utl \
+	i18nisolang1 \
 	sal \
 	salhelper \
 	dbtools \
diff --git a/connectivity/source/drivers/flat/ETable.cxx b/connectivity/source/drivers/flat/ETable.cxx
index 0d57cb1..9fe48f0 100644
--- a/connectivity/source/drivers/flat/ETable.cxx
+++ b/connectivity/source/drivers/flat/ETable.cxx
@@ -39,7 +39,7 @@
 #include <com/sun/star/util/NumberFormat.hpp>
 #include <com/sun/star/util/NumberFormatter.hpp>
 #include <unotools/configmgr.hxx>
-#include <i18npool/mslangid.hxx>
+#include <i18npool/languagetag.hxx>
 #include "connectivity/dbconversion.hxx"
 #include "file/quotedstring.hxx"
 #include <unotools/syslocale.hxx>
@@ -109,7 +109,7 @@ void OFlatTable::fillColumns(const ::com::sun::star::lang::Locale& _aLocale)
     m_aScales.assign(nFieldCount+1,-1);
 
     const sal_Bool bCase = m_pConnection->getMetaData()->supportsMixedCaseQuotedIdentifiers();
-    CharClass aCharClass( comphelper::getComponentContext(pConnection->getDriver()->getFactory()), _aLocale);
+    CharClass aCharClass( comphelper::getComponentContext(pConnection->getDriver()->getFactory()), LanguageTag( _aLocale));
     // read description
     const sal_Unicode cDecimalDelimiter  = pConnection->getDecimalDelimiter();
     const sal_Unicode cThousandDelimiter = pConnection->getThousandDelimiter();
@@ -418,7 +418,7 @@ void OFlatTable::construct()
 {
     RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "flat", "Ocke.Janssen at sun.com", "OFlatTable::construct" );
     SvtSysLocale aLocale;
-    ::com::sun::star::lang::Locale aAppLocale(aLocale.GetLocaleDataPtr()->getLocale());
+    ::com::sun::star::lang::Locale aAppLocale(aLocale.GetLanguageTag().getLocale());
     Sequence< ::com::sun::star::uno::Any > aArg(1);
     aArg[0] <<= aAppLocale;
 
diff --git a/cui/source/options/optasian.cxx b/cui/source/options/optasian.cxx
index ed20545..9a0819d 100644
--- a/cui/source/options/optasian.cxx
+++ b/cui/source/options/optasian.cxx
@@ -306,6 +306,7 @@ IMPL_LINK_NOARG(SvxAsianLayoutPage, LanguageHdl)
     Locale aLocale;
     LanguageType eSelectLanguage = aLanguageLB.GetSelectLanguage();
     SvxLanguageToLocale(aLocale, eSelectLanguage );
+    LanguageTag aLanguageTag( aLocale);
 
     OUString sStart, sEnd;
     sal_Bool bAvail;
@@ -349,7 +350,7 @@ IMPL_LINK_NOARG(SvxAsianLayoutPage, LanguageHdl)
     }
     if(!bAvail)
     {
-        LocaleDataWrapper aWrap( aLocale );
+        LocaleDataWrapper aWrap( aLanguageTag );
         ForbiddenCharacters aForbidden = aWrap.getForbiddenCharacters();
         sStart = aForbidden.beginLine;
         sEnd = aForbidden.endLine;
diff --git a/cui/source/options/optdict.cxx b/cui/source/options/optdict.cxx
index 091e166..b18c8bb 100644
--- a/cui/source/options/optdict.cxx
+++ b/cui/source/options/optdict.cxx
@@ -376,7 +376,7 @@ sal_uInt16 SvxEditDictionaryDialog::GetLBInsertPos(const String &rDicWord)
 {
     sal_uInt16 nPos = USHRT_MAX;
 
-    IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag().getLocale() );
+    IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag() );
     const CollatorWrapper* pCollator = aIntlWrapper.getCollator();
     sal_uInt16 j;
     for( j = 0; j < aWordsLB.GetEntryCount(); j++ )
diff --git a/cui/source/options/optgdlg.cxx b/cui/source/options/optgdlg.cxx
index f4d8aba..eeb29f1 100644
--- a/cui/source/options/optgdlg.cxx
+++ b/cui/source/options/optgdlg.cxx
@@ -1893,7 +1893,8 @@ IMPL_LINK( OfaLanguagesTabPage, LocaleSettingHdl, SvxLanguageBox*, pBox )
     // obtain corresponding locale data
     Locale aTempLocale;
     SvxLanguageToLocale( aTempLocale, eLang );
-    LocaleDataWrapper aLocaleWrapper( aTempLocale );
+    LanguageTag aLanguageTag( aTempLocale);
+    LocaleDataWrapper aLocaleWrapper( aLanguageTag );
 
     // update the decimal separator key of the related CheckBox
     String sTempLabel(sDecimalSeparatorLabel);
diff --git a/cui/source/tabpages/autocdlg.cxx b/cui/source/tabpages/autocdlg.cxx
index 3aa7112..e5d53ea 100644
--- a/cui/source/tabpages/autocdlg.cxx
+++ b/cui/source/tabpages/autocdlg.cxx
@@ -884,10 +884,10 @@ OfaAutocorrReplacePage::OfaAutocorrReplacePage( Window* pParent,
     SfxModule *pMod = *(SfxModule**)GetAppData(SHL_WRITER);
     bSWriter = pMod == SfxModule::GetActiveModule();
 
-    ::com::sun::star::lang::Locale aLocale( SvxCreateLocale(eLastDialogLanguage ));
+    LanguageTag aLanguageTag( SvxCreateLocale(eLastDialogLanguage ));
     pCompareClass = new CollatorWrapper( GetProcessFact() );
-    pCompareClass->loadDefaultCollator( aLocale, 0 );
-    pCharClass = new CharClass( aLocale );
+    pCompareClass->loadDefaultCollator( aLanguageTag.getLocale(), 0 );
+    pCharClass = new CharClass( aLanguageTag );
 
     static long nTabs[] = { 2 /* Tab-Count */, 1, 61 };
     aReplaceTLB.SetTabs( &nTabs[0], MAP_APPFONT );
@@ -1087,10 +1087,10 @@ void OfaAutocorrReplacePage::SetLanguage(LanguageType eSet)
         delete pCompareClass;
         delete pCharClass;
 
-        ::com::sun::star::lang::Locale aLocale( SvxCreateLocale(eLastDialogLanguage ));
+        LanguageTag aLanguageTag( SvxCreateLocale(eLastDialogLanguage ));
         pCompareClass = new CollatorWrapper( GetProcessFact() );
-        pCompareClass->loadDefaultCollator( aLocale, 0 );
-        pCharClass = new CharClass( aLocale );
+        pCompareClass->loadDefaultCollator( aLanguageTag.getLocale(), 0 );
+        pCharClass = new CharClass( aLanguageTag );
         ModifyHdl(&aShortED);
     }
 }
diff --git a/dbaccess/source/core/api/RowSet.cxx b/dbaccess/source/core/api/RowSet.cxx
index 1042d84..04c531e 100644
--- a/dbaccess/source/core/api/RowSet.cxx
+++ b/dbaccess/source/core/api/RowSet.cxx
@@ -1714,7 +1714,7 @@ void ORowSet::impl_initializeColumnSettings_nothrow( const Reference< XPropertyS
             bHaveAnyColumnSetting = true;
         }
         if ( !nFormatKey && m_xNumberFormatTypes.is() )
-            nFormatKey = ::dbtools::getDefaultNumberFormat( _rxTemplateColumn, m_xNumberFormatTypes, SvtSysLocale().GetLocaleData().getLocale() );
+            nFormatKey = ::dbtools::getDefaultNumberFormat( _rxTemplateColumn, m_xNumberFormatTypes, SvtSysLocale().GetLanguageTag().getLocale() );
         _rxRowSetColumn->setPropertyValue( PROPERTY_NUMBERFORMAT, makeAny( nFormatKey ) );
     }
     catch(Exception&)
@@ -1809,7 +1809,7 @@ void ORowSet::execute_NoApprove_NoNewConn(ResettableMutexGuard& _rClearForNotifi
         }
 
         // get the locale
-        Locale aLocale = SvtSysLocale().GetLocaleData().getLocale();
+        Locale aLocale = SvtSysLocale().GetLanguageTag().getLocale();
 
         // get the numberformatTypes
         OSL_ENSURE(m_xActiveConnection.is(),"No ActiveConnection");
@@ -2746,7 +2746,7 @@ ORowSetClone::ORowSetClone( const ::comphelper::ComponentContext& _rContext, ORo
     ::std::vector< ::rtl::OUString> aNames;
 
     ::rtl::OUString aDescription;
-    Locale aLocale = SvtSysLocale().GetLocaleData().getLocale();
+    Locale aLocale = SvtSysLocale().GetLanguageTag().getLocale();
 
     if ( rParent.m_pColumns )
     {
diff --git a/dbaccess/source/core/api/SingleSelectQueryComposer.cxx b/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
index e078e1e..837836d 100644
--- a/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
+++ b/dbaccess/source/core/api/SingleSelectQueryComposer.cxx
@@ -256,7 +256,7 @@ OSingleSelectQueryComposer::OSingleSelectQueryComposer(const Reference< XNameAcc
 
     m_aCurrentColumns.resize(4);
 
-    m_aLocale = SvtSysLocale().GetLocaleData().getLocale();
+    m_aLocale = SvtSysLocale().GetLanguageTag().getLocale();
     m_xNumberFormatsSupplier = dbtools::getNumberFormats( m_xConnection, sal_True, m_aContext.getLegacyServiceFactory() );
     Reference< XLocaleData4 > xLocaleData( LocaleData::create(m_aContext.getUNOContext()) );
     LocaleDataItem aData = xLocaleData->getLocaleItem(m_aLocale);
diff --git a/dbaccess/source/ui/app/AppView.cxx b/dbaccess/source/ui/app/AppView.cxx
index 3e3469d..a57b03d 100644
--- a/dbaccess/source/ui/app/AppView.cxx
+++ b/dbaccess/source/ui/app/AppView.cxx
@@ -212,7 +212,7 @@ OApplicationView::OApplicationView( Window* pParent
 
     try
     {
-        m_aLocale = SvtSysLocale().GetLocaleData().getLocale();
+        m_aLocale = SvtSysLocale().GetLanguageTag().getLocale();
     }
     catch(Exception&)
     {
diff --git a/dbaccess/source/ui/control/ColumnControlWindow.cxx b/dbaccess/source/ui/control/ColumnControlWindow.cxx
index ca661bc..2c12e84 100644
--- a/dbaccess/source/ui/control/ColumnControlWindow.cxx
+++ b/dbaccess/source/ui/control/ColumnControlWindow.cxx
@@ -50,7 +50,7 @@ OColumnControlWindow::OColumnControlWindow(Window* pParent
     DBG_CTOR(OColumnControlWindow,NULL);
 
     setRightAligned();
-    m_aLocale = SvtSysLocale().GetLocaleData().getLocale();
+    m_aLocale = SvtSysLocale().GetLanguageTag().getLocale();
 }
 // -----------------------------------------------------------------------------
 OColumnControlWindow::~OColumnControlWindow()
diff --git a/dbaccess/source/ui/misc/DExport.cxx b/dbaccess/source/ui/misc/DExport.cxx
index 09092f2..eb3a755 100644
--- a/dbaccess/source/ui/misc/DExport.cxx
+++ b/dbaccess/source/ui/misc/DExport.cxx
@@ -135,7 +135,7 @@ ODatabaseExport::ODatabaseExport(sal_Int32 nRows,
     try
     {
         SvtSysLocale aSysLocale;
-        m_aLocale = aSysLocale.GetLocaleData().getLocale();
+        m_aLocale = aSysLocale.GetLanguageTag().getLocale();
     }
     catch(Exception&)
     {
@@ -177,7 +177,7 @@ ODatabaseExport::ODatabaseExport(const SharedConnection& _rxConnection,
     try
     {
         SvtSysLocale aSysLocale;
-        m_aLocale = aSysLocale.GetLocaleData().getLocale();
+        m_aLocale = aSysLocale.GetLanguageTag().getLocale();
     }
     catch(Exception&)
     {
diff --git a/dbaccess/source/ui/misc/TokenWriter.cxx b/dbaccess/source/ui/misc/TokenWriter.cxx
index e414c9c..ab1db7f 100644
--- a/dbaccess/source/ui/misc/TokenWriter.cxx
+++ b/dbaccess/source/ui/misc/TokenWriter.cxx
@@ -142,7 +142,7 @@ ODatabaseImportExport::ODatabaseImportExport( const ::dbtools::SharedConnection&
     try
     {
         SvtSysLocale aSysLocale;
-        m_aLocale = aSysLocale.GetLocaleData().getLocale();
+        m_aLocale = aSysLocale.GetLanguageTag().getLocale();
     }
     catch(Exception&)
     {
@@ -260,7 +260,7 @@ void ODatabaseImportExport::impl_initFromDescriptor( const ODataAccessDescriptor
     try
     {
         SvtSysLocale aSysLocale;
-        m_aLocale = aSysLocale.GetLocaleData().getLocale();
+        m_aLocale = aSysLocale.GetLanguageTag().getLocale();
     }
     catch(Exception&)
     {
diff --git a/dbaccess/source/ui/querydesign/QueryDesignView.cxx b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
index 13446b2..cf4fc38 100644
--- a/dbaccess/source/ui/querydesign/QueryDesignView.cxx
+++ b/dbaccess/source/ui/querydesign/QueryDesignView.cxx
@@ -2514,7 +2514,7 @@ OQueryDesignView::OQueryDesignView( OQueryContainerWindow* _pParent,
     try
     {
         SvtSysLocale aSysLocale;
-        m_aLocale = aSysLocale.GetLocaleData().getLocale();
+        m_aLocale = aSysLocale.GetLanguageTag().getLocale();
         m_sDecimalSep = aSysLocale.GetLocaleData().getNumDecimalSep();
     }
     catch(Exception&)
diff --git a/dbaccess/source/ui/tabledesign/TableDesignView.cxx b/dbaccess/source/ui/tabledesign/TableDesignView.cxx
index f6b3124..499d214 100644
--- a/dbaccess/source/ui/tabledesign/TableDesignView.cxx
+++ b/dbaccess/source/ui/tabledesign/TableDesignView.cxx
@@ -198,7 +198,7 @@ OTableDesignView::OTableDesignView( Window* pParent,
 
     try
     {
-        m_aLocale = SvtSysLocale().GetLocaleData().getLocale();
+        m_aLocale = SvtSysLocale().GetLanguageTag().getLocale();
     }
     catch(Exception&)
     {
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index 8b191ea..6a42c91 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -1362,12 +1362,12 @@ sal_Bool EditEngine::PostKeyEvent( const KeyEvent& rKeyEvent, EditView* pEditVie
                                 String aComplete;
 
                                 LanguageType eLang = pImpEditEngine->GetLanguage( EditPaM( aStart.GetNode(), aStart.GetIndex()+1));
-                                lang::Locale aLocale( LanguageTag( eLang).getLocale());
+                                LanguageTag aLanguageTag( eLang);
 
                                 if (!pImpEditEngine->xLocaleDataWrapper.isInitialized())
-                                    pImpEditEngine->xLocaleDataWrapper.init( SvtSysLocale().GetLocaleData().getComponentContext(), aLocale, eLang);
+                                    pImpEditEngine->xLocaleDataWrapper.init( SvtSysLocale().GetLocaleData().getComponentContext(), aLanguageTag);
                                 else
-                                    pImpEditEngine->xLocaleDataWrapper.changeLocale( aLocale, eLang);
+                                    pImpEditEngine->xLocaleDataWrapper.changeLocale( aLanguageTag);
 
                                 if (!pImpEditEngine->xTransliterationWrapper.isInitialized())
                                     pImpEditEngine->xTransliterationWrapper.init( SvtSysLocale().GetLocaleData().getComponentContext(), eLang, i18n::TransliterationModules_IGNORE_CASE);
diff --git a/editeng/source/items/svxfont.cxx b/editeng/source/items/svxfont.cxx
index 7077905..61cf0db 100644
--- a/editeng/source/items/svxfont.cxx
+++ b/editeng/source/items/svxfont.cxx
@@ -110,7 +110,7 @@ OUString SvxFont::CalcCaseMap(const OUString &rTxt) const
     const LanguageType eLng = LANGUAGE_DONTKNOW == eLang
                             ? LANGUAGE_SYSTEM : eLang;
 
-    CharClass aCharClass( SvxCreateLocale( eLng ) );
+    CharClass aCharClass( LanguageTag( SvxCreateLocale( eLng )) );
 
     switch( eCaseMap )
     {
@@ -221,7 +221,7 @@ void SvxFont::DoOnCapitals(SvxDoCapitals &rDo, const xub_StrLen nPartLen) const
     const LanguageType eLng = LANGUAGE_DONTKNOW == eLang
                             ? LANGUAGE_SYSTEM : eLang;
 
-    CharClass   aCharClass( SvxCreateLocale( eLng ) );
+    CharClass   aCharClass( LanguageTag( SvxCreateLocale( eLng )) );
     String      aCharString;
 
     while( nPos < nTxtLen )
diff --git a/editeng/source/misc/forbiddencharacterstable.cxx b/editeng/source/misc/forbiddencharacterstable.cxx
index 5c4f3c8..8365f32 100644
--- a/editeng/source/misc/forbiddencharacterstable.cxx
+++ b/editeng/source/misc/forbiddencharacterstable.cxx
@@ -38,7 +38,7 @@ const com::sun::star::i18n::ForbiddenCharacters* SvxForbiddenCharactersTable::Ge
         pForbiddenCharacters = &(it->second);
     else if ( bGetDefault && m_xContext.is() )
     {
-        LocaleDataWrapper aWrapper( m_xContext, SvxCreateLocale( nLanguage ) );
+        LocaleDataWrapper aWrapper( m_xContext, LanguageTag( SvxCreateLocale( nLanguage )) );
         maMap[ nLanguage ] = aWrapper.getForbiddenCharacters();
         pForbiddenCharacters = &maMap[ nLanguage ];
     }
diff --git a/editeng/source/misc/hangulhanja.cxx b/editeng/source/misc/hangulhanja.cxx
index c515196..4083d6b 100644
--- a/editeng/source/misc/hangulhanja.cxx
+++ b/editeng/source/misc/hangulhanja.cxx
@@ -607,7 +607,7 @@ namespace editeng
                 {   // found asian text
 
                     // determine if it's Hangul
-                    CharClass aCharClassificaton( m_xContext, m_aSourceLocale );
+                    CharClass aCharClassificaton( m_xContext, LanguageTag( m_aSourceLocale) );
                     sal_Int16 nScript = aCharClassificaton.getScript( m_sCurrentPortion, sal::static_int_cast< sal_uInt16 >(nNextAsianScript) );
                     if  (   ( UnicodeScript_kHangulJamo == nScript )
                         ||  ( UnicodeScript_kHangulCompatibilityJamo == nScript )
diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx
index 9bce449..7a322f3 100644
--- a/editeng/source/misc/svxacorr.cxx
+++ b/editeng/source/misc/svxacorr.cxx
@@ -202,13 +202,11 @@ static sal_uInt16 GetAppLang()
 }
 static LocaleDataWrapper& GetLocaleDataWrapper( sal_uInt16 nLang )
 {
-    static LocaleDataWrapper aLclDtWrp(  SvxCreateLocale( GetAppLang() ) );
-    ::com::sun::star::lang::Locale aLcl( SvxCreateLocale( nLang ));
-    const ::com::sun::star::lang::Locale& rLcl = aLclDtWrp.getLoadedLocale();
-    if( aLcl.Language != rLcl.Language ||
-        aLcl.Country != rLcl.Country ||
-        aLcl.Variant != rLcl.Variant )
-        aLclDtWrp.setLocale( aLcl );
+    static LocaleDataWrapper aLclDtWrp(  LanguageTag( SvxCreateLocale( GetAppLang() )) );
+    LanguageTag aLcl( LanguageTag( SvxCreateLocale( nLang )));
+    const LanguageTag& rLcl = aLclDtWrp.getLoadedLanguageTag();
+    if( aLcl != rLcl )
+        aLclDtWrp.setLanguageTag( aLcl );
     return aLclDtWrp;
 }
 static TransliterationWrapper& GetIgnoreTranslWrapper()
@@ -339,7 +337,7 @@ SvxAutoCorrect::~SvxAutoCorrect()
 void SvxAutoCorrect::_GetCharClass( LanguageType eLang )
 {
     delete pCharClass;
-    pCharClass = new CharClass( SvxCreateLocale( eLang ));
+    pCharClass = new CharClass( LanguageTag( SvxCreateLocale( eLang )));
     eCharClassLang = eLang;
 }
 
@@ -468,7 +466,7 @@ sal_Bool SvxAutoCorrect::FnChgOrdinalNumber(
 
         if ( xOrdSuffix.is( ) )
         {
-            uno::Sequence< rtl::OUString > aSuffixes = xOrdSuffix->getOrdinalSuffix( nNum, rCC.getLocale( ) );
+            uno::Sequence< rtl::OUString > aSuffixes = xOrdSuffix->getOrdinalSuffix( nNum, rCC.getLanguageTag().getLocale( ) );
             for ( sal_Int32 nSuff = 0; nSuff < aSuffixes.getLength(); nSuff++ )
             {
                 String sSuffix( aSuffixes[ nSuff ] );
@@ -611,7 +609,7 @@ sal_Bool SvxAutoCorrect::FnAddNonBrkSpace(
     bool bRet = false;
 
     CharClass& rCC = GetCharClass( eLang );
-    const lang::Locale rLocale = rCC.getLocale( );
+    const lang::Locale rLocale = rCC.getLanguageTag().getLocale( );
 
     if ( rLocale.Language == OUString( "fr" ) )
     {
diff --git a/extensions/source/propctrlr/standardcontrol.cxx b/extensions/source/propctrlr/standardcontrol.cxx
index 8d57aeb..a9f6f9b 100644
--- a/extensions/source/propctrlr/standardcontrol.cxx
+++ b/extensions/source/propctrlr/standardcontrol.cxx
@@ -261,8 +261,7 @@ namespace pcr
         getTypedControlWindow()->EnableEmptyField( sal_True );
 
         // determine a default format
-        Locale aSysLocale = SvtSysLocale().GetLocaleData().getLocale();
-        LanguageType eSysLanguage = LanguageTag( aSysLocale ).getLanguageType( false);
+        LanguageType eSysLanguage = SvtSysLocale().GetLanguageTag().getLanguageType( false);
 
         getTypedControlWindow()->SetFormatter( getTypedControlWindow()->StandardFormatter() );
         SvNumberFormatter* pFormatter = getTypedControlWindow()->GetFormatter();
diff --git a/extensions/source/propctrlr/xsdvalidationhelper.cxx b/extensions/source/propctrlr/xsdvalidationhelper.cxx
index 26137db..bca2aee 100644
--- a/extensions/source/propctrlr/xsdvalidationhelper.cxx
+++ b/extensions/source/propctrlr/xsdvalidationhelper.cxx
@@ -353,7 +353,7 @@ namespace pcr
                     return;
 
                 // and the standard format for the given NumberFormat type
-                sal_Int32 nDesiredFormat = xFormatTypes->getStandardFormat( nNumberFormatType, SvtSysLocale().GetLocaleData().getLocale() );
+                sal_Int32 nDesiredFormat = xFormatTypes->getStandardFormat( nNumberFormatType, SvtSysLocale().GetLanguageTag().getLocale() );
 
                 // set this at the introspectee
                 m_xControlModel->setPropertyValue( PROPERTY_FORMATKEY, makeAny( nDesiredFormat ) );
diff --git a/forms/source/component/FormattedField.cxx b/forms/source/component/FormattedField.cxx
index b66a397..e6d598a 100644
--- a/forms/source/component/FormattedField.cxx
+++ b/forms/source/component/FormattedField.cxx
@@ -148,9 +148,7 @@ Reference< XNumberFormatsSupplier > StandardFormatsSupplier::get( const Referenc
             return xSupplier;
 
         // get the Office's locale
-        const Locale& rSysLocale = SvtSysLocale().GetLocaleData().getLocale();
-        // translate
-        eSysLanguage = LanguageTag( rSysLocale ).getLanguageType( false);
+        eSysLanguage = SvtSysLocale().GetLanguageTag().getLanguageType( false);
     }
 
     StandardFormatsSupplier* pSupplier = new StandardFormatsSupplier( _rxORB, eSysLanguage );
diff --git a/framework/source/uielement/toolbarsmenucontroller.cxx b/framework/source/uielement/toolbarsmenucontroller.cxx
index b95af5f..2a6a9d8 100644
--- a/framework/source/uielement/toolbarsmenucontroller.cxx
+++ b/framework/source/uielement/toolbarsmenucontroller.cxx
@@ -141,7 +141,7 @@ ToolbarsMenuController::ToolbarsMenuController( const ::com::sun::star::uno::Ref
     m_aPropResourceURL( "ResourceURL" ),
     m_bModuleIdentified( sal_False ),
     m_bResetActive( sal_False ),
-    m_aIntlWrapper( xServiceManager, Application::GetSettings().GetLanguageTag().getLocale() )
+    m_aIntlWrapper( xServiceManager, Application::GetSettings().GetLanguageTag() )
 {
 }
 
diff --git a/lingucomponent/source/hyphenator/altlinuxhyph/hyphen/hyphenimp.cxx b/lingucomponent/source/hyphenator/altlinuxhyph/hyphen/hyphenimp.cxx
index 4582a66..91bdfe4 100644
--- a/lingucomponent/source/hyphenator/altlinuxhyph/hyphen/hyphenimp.cxx
+++ b/lingucomponent/source/hyphenator/altlinuxhyph/hyphen/hyphenimp.cxx
@@ -202,10 +202,11 @@ Sequence< Locale > SAL_CALL Hyphenator::getLocales()
                     // Once for each of it's supported locales.
                     for (sal_Int32 i = 0;  i < nLocales;  ++i)
                     {
+                        LanguageTag aLanguageTag( aDictIt->aLocaleNames[i] );
                         aDicts[k].aPtr = NULL;
                         aDicts[k].eEnc = RTL_TEXTENCODING_DONTKNOW;
-                        aDicts[k].aLoc = LanguageTag( aDictIt->aLocaleNames[i] ).getLocale();
-                        aDicts[k].apCC = new CharClass( aDicts[k].aLoc );
+                        aDicts[k].aLoc = aLanguageTag.getLocale();
+                        aDicts[k].apCC = new CharClass( aLanguageTag );
                         // also both files have to be in the same directory and the
                         // file names must only differ in the extension (.aff/.dic).
                         // Thus we use the first location only and strip the extension part.
diff --git a/lingucomponent/source/thesaurus/libnth/nthesimp.cxx b/lingucomponent/source/thesaurus/libnth/nthesimp.cxx
index 22c9622..5adc007 100644
--- a/lingucomponent/source/thesaurus/libnth/nthesimp.cxx
+++ b/lingucomponent/source/thesaurus/libnth/nthesimp.cxx
@@ -231,10 +231,11 @@ Sequence< Locale > SAL_CALL Thesaurus::getLocales()
                     // Once for each of it's supported locales.
                     for (sal_Int32 i = 0;  i < nLocales;  ++i)
                     {
+                        LanguageTag aLanguageTag( aDictIt->aLocaleNames[i] );
                         aThes[k]  = NULL;
                         aTEncs[k]  = RTL_TEXTENCODING_DONTKNOW;
-                        aTLocs[k]  = LanguageTag( aDictIt->aLocaleNames[i] ).getLocale();
-                        aCharSetInfo[k] = new CharClass( aTLocs[k] );
+                        aTLocs[k]  = aLanguageTag.getLocale();
+                        aCharSetInfo[k] = new CharClass( aLanguageTag );
                         // also both files have to be in the same directory and the
                         // file names must only differ in the extension (.aff/.dic).
                         // Thus we use the first location only and strip the extension part.
diff --git a/linguistic/source/misc.cxx b/linguistic/source/misc.cxx
index 53afb41..542a823 100644
--- a/linguistic/source/misc.cxx
+++ b/linguistic/source/misc.cxx
@@ -77,14 +77,12 @@ osl::Mutex &    GetLinguMutex()
 LocaleDataWrapper & GetLocaleDataWrapper( sal_Int16 nLang )
 {
     static LocaleDataWrapper aLclDtaWrp(
-                CreateLocale( SvtSysLocale().GetLanguageTag().getLanguageType() ) );
-
-    const Locale &rLcl = aLclDtaWrp.getLoadedLocale();
-    Locale aLcl( CreateLocale( nLang ) );
-    if (aLcl.Language != rLcl.Language ||
-        aLcl.Country  != rLcl.Country  ||
-        aLcl.Variant  != rLcl.Variant)
-        aLclDtaWrp.setLocale( aLcl );
+                LanguageTag( CreateLocale( SvtSysLocale().GetLanguageTag().getLanguageType() )) );
+
+    const LanguageTag &rLcl = aLclDtaWrp.getLoadedLanguageTag();
+    LanguageTag aLcl( CreateLocale( nLang ) );
+    if (aLcl != rLcl)
+        aLclDtaWrp.setLanguageTag( aLcl );
     return aLclDtaWrp;
 }
 
@@ -600,7 +598,7 @@ uno::Reference< XHyphenatedWord > RebuildHyphensAndControlChars(
 
 static CharClass & lcl_GetCharClass()
 {
-    static CharClass aCC( CreateLocale( LANGUAGE_ENGLISH_US ) );
+    static CharClass aCC( LanguageTag( CreateLocale( LANGUAGE_ENGLISH_US )) );
     return aCC;
 }
 
@@ -617,7 +615,7 @@ sal_Bool IsUpper( const String &rText, xub_StrLen nPos, xub_StrLen nLen, sal_Int
     MutexGuard  aGuard( lcl_GetCharClassMutex() );
 
     CharClass &rCC = lcl_GetCharClass();
-    rCC.setLocale( CreateLocale( nLanguage ) );
+    rCC.setLanguageTag( LanguageTag( CreateLocale( nLanguage )) );
     sal_Int32 nFlags = rCC.getStringType( rText, nPos, nLen );
     return      (nFlags & KCharacterType::UPPER)
             && !(nFlags & KCharacterType::LOWER);
@@ -629,7 +627,7 @@ String ToLower( const String &rText, sal_Int16 nLanguage )
     MutexGuard  aGuard( lcl_GetCharClassMutex() );
 
     CharClass &rCC = lcl_GetCharClass();
-    rCC.setLocale( CreateLocale( nLanguage ) );
+    rCC.setLanguageTag( LanguageTag( CreateLocale( nLanguage )) );
     return rCC.lowercase( rText );
 }
 
diff --git a/reportdesign/source/core/sdr/formatnormalizer.cxx b/reportdesign/source/core/sdr/formatnormalizer.cxx
index b4258e7..118ef50 100644
--- a/reportdesign/source/core/sdr/formatnormalizer.cxx
+++ b/reportdesign/source/core/sdr/formatnormalizer.cxx
@@ -251,7 +251,7 @@ namespace rptui
             Reference< XNumberFormatTypes > xNumFmtTypes( xSuppNumFmts->getNumberFormats(), UNO_QUERY_THROW );
 
             nFormatKey = ::dbtools::getDefaultNumberFormat( field->nDataType, field->nScale, field->bIsCurrency, xNumFmtTypes,
-                SvtSysLocale().GetLocaleData().getLocale() );
+                SvtSysLocale().GetLanguageTag().getLocale() );
             _rxFormatted->setFormatKey( nFormatKey );
         }
         catch( const Exception& )
diff --git a/reportdesign/source/ui/dlg/DateTime.cxx b/reportdesign/source/ui/dlg/DateTime.cxx
index 22aaa32..38e2ec5 100644
--- a/reportdesign/source/ui/dlg/DateTime.cxx
+++ b/reportdesign/source/ui/dlg/DateTime.cxx
@@ -74,7 +74,7 @@ ODateTimeDialog::ODateTimeDialog( Window* _pParent
     try
     {
         SvtSysLocale aSysLocale;
-        m_nLocale = aSysLocale.GetLocaleData().getLocale();
+        m_nLocale = aSysLocale.GetLanguageTag().getLocale();
         // Fill listbox with all well known date types
         InsertEntry(util::NumberFormat::DATE);
         InsertEntry(util::NumberFormat::TIME);
diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx
index 3b6e40c..4d314ce 100644
--- a/sc/source/core/data/global.cxx
+++ b/sc/source/core/data/global.cxx
@@ -1174,7 +1174,7 @@ IntlWrapper*         ScGlobal::GetScIntlWrapper()
 {
     if ( !pScIntlWrapper )
     {
-        pScIntlWrapper = new IntlWrapper( ::comphelper::getProcessServiceFactory(), *GetLocale() );
+        pScIntlWrapper = new IntlWrapper( ::comphelper::getProcessServiceFactory(), LanguageTag( *GetLocale()) );
     }
     return pScIntlWrapper;
 }
diff --git a/sc/source/core/data/globalx.cxx b/sc/source/core/data/globalx.cxx
index 5c00e72..c081f1c 100644
--- a/sc/source/core/data/globalx.cxx
+++ b/sc/source/core/data/globalx.cxx
@@ -153,7 +153,7 @@ String ScGlobal::GetOrdinalSuffix( sal_Int32 nNumber)
         try
         {
             uno::Sequence< rtl::OUString > aSuffixes = xOrdinalSuffix->getOrdinalSuffix( nNumber,
-                    ScGlobal::pLocaleData->getLocale());
+                    ScGlobal::pLocaleData->getLanguageTag().getLocale());
             if ( aSuffixes.getLength() > 0 )
                 return aSuffixes[0];
             else
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 9771136..0264862 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -211,12 +211,9 @@ bool ScCompiler::IsEnglishSymbol( const String& rName )
 
 void ScCompiler::InitCharClassEnglish()
 {
-    ::com::sun::star::lang::Locale aLocale(
-            OUString( RTL_CONSTASCII_USTRINGPARAM( "en")),
-            OUString( RTL_CONSTASCII_USTRINGPARAM( "US")),
-            OUString());
+    ::com::sun::star::lang::Locale aLocale( "en", "US", "");
     pCharClassEnglish = new CharClass(
-            ::comphelper::getProcessComponentContext(), aLocale);
+            ::comphelper::getProcessComponentContext(), LanguageTag( aLocale));
 }
 
 
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
index b16dba4..8f5a24e 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -2301,7 +2301,7 @@ void ScXMLImport::ExamineDefaultStyle()
                 else
                 {
                     LocaleDataWrapper aLocaleData( comphelper::getComponentContext(pDoc->GetServiceManager()),
-                        LanguageTag( nFormatLang ).getLocale() );
+                        LanguageTag( nFormatLang ) );
                     aDecSep = aLocaleData.getNumDecimalSep();
                 }
 
@@ -2520,7 +2520,7 @@ sal_Int32 ScXMLImport::SetCurrencySymbol(const sal_Int32 nKey, const rtl::OUStri
                     {
                         {
                             ScXMLImport::MutexGuard aGuard(*this);
-                            LocaleDataWrapper aLocaleData( comphelper::getComponentContext(GetDocument()->GetServiceManager()), aLocale );
+                            LocaleDataWrapper aLocaleData( comphelper::getComponentContext(GetDocument()->GetServiceManager()), LanguageTag( aLocale) );
                             rtl::OUStringBuffer aBuffer(15);
                             aBuffer.appendAscii("#");
                             aBuffer.append( aLocaleData.getNumThousandSep() );
diff --git a/sd/source/core/drawdoc.cxx b/sd/source/core/drawdoc.cxx
index c35464f..387d156 100644
--- a/sd/source/core/drawdoc.cxx
+++ b/sd/source/core/drawdoc.cxx
@@ -232,8 +232,9 @@ SdDrawDocument::SdDrawDocument(DocumentType eType, SfxObjectShell* pDrDocSh)
     }
 
     LanguageType eRealLanguage = MsLangId::getRealLanguage( meLanguage );
-    mpLocale = new ::com::sun::star::lang::Locale( LanguageTag( eRealLanguage ).getLocale());
-    mpCharClass = new CharClass( *mpLocale );
+    LanguageTag aLanguageTag( eRealLanguage);
+    mpLocale = new ::com::sun::star::lang::Locale( aLanguageTag.getLocale());
+    mpCharClass = new CharClass( aLanguageTag );
 
     // If the current application language is a language that uses right-to-left text...
     LanguageType eRealCTLLanguage = Application::GetSettings().GetLanguageTag().getLanguageType();
diff --git a/sfx2/source/appl/linkmgr2.cxx b/sfx2/source/appl/linkmgr2.cxx
index 4f8a7a2..08ff451 100644
--- a/sfx2/source/appl/linkmgr2.cxx
+++ b/sfx2/source/appl/linkmgr2.cxx
@@ -608,8 +608,7 @@ sal_Bool SvxInternalLink::Connect( sfx2::SvBaseLink* pLink )
     {
         // first only loop over the DocumentShells the shells and find those
         // with the name:
-        com::sun::star::lang::Locale aLocale( LanguageTag( LANGUAGE_SYSTEM).getLocale());
-        CharClass aCC( aLocale );
+        CharClass aCC( LanguageTag( LANGUAGE_SYSTEM) );
 
         TypeId aType( TYPE(SfxObjectShell) );
 
diff --git a/sfx2/source/dialog/templdlg.cxx b/sfx2/source/dialog/templdlg.cxx
index 86002c5..daf2ed4 100644
--- a/sfx2/source/dialog/templdlg.cxx
+++ b/sfx2/source/dialog/templdlg.cxx
@@ -537,7 +537,7 @@ sal_Bool StyleTreeListBox_Impl::NotifyMoving(SvTreeListEntry*  pTarget,
     const sal_Bool bRet = (sal_Bool)aDropLink.Call(this);
     rpNewParent = pTarget;
     lPos=0;
-    IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag().getLocale() );
+    IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag() );
     const CollatorWrapper* pCollator = aIntlWrapper.getCaseCollator();
     for(SvTreeListEntry *pTmpEntry=FirstChild(pTarget);
         pTmpEntry && COMPARE_LESS==pCollator->compareString(
diff --git a/sfx2/source/view/orgmgr.cxx b/sfx2/source/view/orgmgr.cxx
index 4ba59d6..3b3f8ed 100644
--- a/sfx2/source/view/orgmgr.cxx
+++ b/sfx2/source/view/orgmgr.cxx
@@ -217,7 +217,7 @@ SfxOrganizeMgr::SfxOrganizeMgr( SfxOrganizeListBox_Impl *pLeft,
 */
 {
     pImpl->pDocList = new SfxObjectList;
-    pImpl->pIntlWrapper = new IntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag().getLocale() );
+    pImpl->pIntlWrapper = new IntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag() );
     const CollatorWrapper* pCollator = pImpl->pIntlWrapper->getCaseCollator();
     for ( SfxObjectShell* pTmp = SfxObjectShell::GetFirst(); pTmp; pTmp = SfxObjectShell::GetNext(*pTmp) )
     {
diff --git a/sot/Library_sot.mk b/sot/Library_sot.mk
index 36b4e19..dd0723c 100644
--- a/sot/Library_sot.mk
+++ b/sot/Library_sot.mk
@@ -47,6 +47,7 @@ $(eval $(call gb_Library_use_libraries,sot,\
     cppu \
     cppuhelper \
     sal \
+	i18nisolang1 \
     tl \
     ucbhelper \
     utl \
diff --git a/sot/source/sdstor/stgelem.cxx b/sot/source/sdstor/stgelem.cxx
index d36eb2f..66734bc 100644
--- a/sot/source/sdstor/stgelem.cxx
+++ b/sot/source/sdstor/stgelem.cxx
@@ -283,14 +283,7 @@ sal_Bool StgEntry::Init()
 static String ToUpperUnicode( const String & rStr )
 {
     // I don't know the locale, so en_US is hopefully fine
-    /*
-    com.sun.star.lang.Locale aLocale;
-    aLocale.Language = OUString("en");
-    aLocale.Country  = OUString("US");
-    */
-    static rtl::OUString aEN("en");
-    static rtl::OUString aUS("US");
-    static CharClass aCC( com::sun::star::lang::Locale( aEN, aUS, rtl::OUString() ) );
+    static CharClass aCC( LanguageTag( com::sun::star::lang::Locale( "en", "US", "" )) );
     return aCC.uppercase( rStr );
 }
 
diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx
index e8aecc1..fa7f9f1 100644
--- a/starmath/source/parse.cxx
+++ b/starmath/source/parse.cxx
@@ -416,7 +416,7 @@ void SmParser::NextToken()
     xub_StrLen  nRealStart;
     bool        bCont;
     bool        bNumStart = false;
-    CharClass   aCC(SM_MOD()->GetSysLocale().GetCharClass().getLocale());
+    CharClass   aCC(SM_MOD()->GetSysLocale().GetLanguageTag());
     do
     {
         // skip white spaces
@@ -437,14 +437,14 @@ void SmParser::NextToken()
         if ((aRes.TokenType & KParseType::IDENTNAME) && IsDigit( cFirstChar ))
         {
             ParseResult aTmpRes;
-            lang::Locale aOldLoc( aCC.getLocale() );
-            aCC.setLocale( m_aDotLoc );
+            LanguageTag aOldLoc( aCC.getLanguageTag() );
+            aCC.setLanguageTag( LanguageTag( m_aDotLoc ));
             aTmpRes = aCC.parsePredefinedToken(
                             KParseType::ASC_NUMBER,
                             m_aBufferString, m_nBufferIndex,
                             KParseTokens::ASC_DIGIT, aEmptyStr,
                             KParseTokens::ASC_DIGIT | KParseTokens::ASC_DOT, aEmptyStr );
-            aCC.setLocale( aOldLoc );
+            aCC.setLanguageTag( aOldLoc );
             if (aTmpRes.TokenType & KParseType::ASC_NUMBER)
                 aRes.TokenType = aTmpRes.TokenType;
         }
diff --git a/svl/inc/svl/ondemand.hxx b/svl/inc/svl/ondemand.hxx
index f724cca..70c028f 100644
--- a/svl/inc/svl/ondemand.hxx
+++ b/svl/inc/svl/ondemand.hxx
@@ -76,8 +76,7 @@ public:
                                     }
                                 OnDemandLocaleDataWrapper(
                                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext,
-                                    ::com::sun::star::lang::Locale& rLocale,
-                                    LanguageType eLang
+                                    const LanguageTag& rLanguageTag
                                     )
                                     : pEnglish(0)
                                     , pAny(0)
@@ -85,7 +84,7 @@ public:
                                     , bInitialized(false)
                                     {
                                         pSystem = aSysLocale.GetLocaleDataPtr();
-                                        init( rxContext, rLocale, eLang );
+                                        init( rxContext, rLanguageTag );
                                     }
                                 ~OnDemandLocaleDataWrapper()
                                     {
@@ -99,17 +98,17 @@ public:
 
             void                init(
                                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext,
-                                    ::com::sun::star::lang::Locale& rLocale,
-                                    LanguageType eLang
+                                    const LanguageTag& rLanguageTag
                                     )
                                     {
                                         m_xContext = rxContext;
-                                        changeLocale( rLocale, eLang );
+                                        changeLocale( rLanguageTag );
                                         bInitialized = true;
                                     }
 
-            void                changeLocale( ::com::sun::star::lang::Locale& rLocale, LanguageType eLang )
+            void                changeLocale( const LanguageTag& rLanguageTag )
                                     {
+                                        LanguageType eLang = rLanguageTag.getLanguageType( false);
                                         switch ( eLang )
                                         {
                                             case LANGUAGE_SYSTEM :
@@ -117,18 +116,18 @@ public:
                                             break;
                                             case LANGUAGE_ENGLISH_US :
                                                 if ( !pEnglish )
-                                                    pEnglish = new LocaleDataWrapper( m_xContext, rLocale );
+                                                    pEnglish = new LocaleDataWrapper( m_xContext, rLanguageTag );
                                                 pCurrent = pEnglish;
                                             break;
                                             default:
                                                 if ( !pAny )
                                                 {
-                                                    pAny = new LocaleDataWrapper( m_xContext, rLocale );
+                                                    pAny = new LocaleDataWrapper( m_xContext, rLanguageTag );
                                                     eLastAnyLanguage = eLang;
                                                 }
                                                 else if ( eLastAnyLanguage != eLang )
                                                 {
-                                                    pAny->setLocale( rLocale );
+                                                    pAny->setLanguageTag( rLanguageTag );
                                                     eLastAnyLanguage = eLang;
                                                 }
                                                 pCurrent = pAny;
@@ -143,12 +142,12 @@ public:
                                     {
                                         if ( !pAny )
                                         {
-                                            pAny = new LocaleDataWrapper( m_xContext, pCurrent->getLocale() );
+                                            pAny = new LocaleDataWrapper( m_xContext, pCurrent->getLanguageTag() );
                                             eLastAnyLanguage = eCurrentLanguage;
                                         }
                                         else if ( pCurrent != pAny )
                                         {
-                                            pAny->setLocale( pCurrent->getLocale() );
+                                            pAny->setLanguageTag( pCurrent->getLanguageTag() );
                                             eLastAnyLanguage = eCurrentLanguage;
                                         }
                                         return pAny;
@@ -198,7 +197,7 @@ public:
 
             void                init(
                                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext,
-                                    ::com::sun::star::lang::Locale& rLocale
+                                    const ::com::sun::star::lang::Locale& rLocale
                                     )
                                     {
                                         m_xContext = rxContext;
@@ -211,7 +210,7 @@ public:
                                         bInitialized = true;
                                     }
 
-            void                changeLocale( ::com::sun::star::lang::Locale& rLocale )
+            void                changeLocale( const ::com::sun::star::lang::Locale& rLocale )
                                     {
                                         bValid = false;
                                         aLocale = rLocale;
diff --git a/svl/inc/svl/zforlist.hxx b/svl/inc/svl/zforlist.hxx
index 71e6bba..175e404 100644
--- a/svl/inc/svl/zforlist.hxx
+++ b/svl/inc/svl/zforlist.hxx
@@ -795,7 +795,7 @@ public:
 
 private:
     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceManager;
-    ::com::sun::star::lang::Locale aLocale;
+    LanguageTag maLanguageTag;
     SvNumberFormatTable aFTable;            // Table of format keys to format entries
     typedef std::map<sal_uInt32, sal_uInt32> DefaultFormatKeysMap;
     DefaultFormatKeysMap aDefaultFormatKeys; // Table of default standard to format keys
@@ -965,7 +965,7 @@ public:
     //! public for the InputScanner and FormatScanner.
 
     // return current (!) Locale
-    inline const ::com::sun::star::lang::Locale& GetLocale() const { return aLocale; }
+    inline const LanguageTag& GetLanguageTag() const { return maLanguageTag; }
 
     // return corresponding Transliteration wrapper
     inline const ::utl::TransliterationWrapper* GetTransliteration() const
diff --git a/svl/source/items/ctypeitm.cxx b/svl/source/items/ctypeitm.cxx
index dc15162..32944b5 100644
--- a/svl/source/items/ctypeitm.cxx
+++ b/svl/source/items/ctypeitm.cxx
@@ -157,8 +157,7 @@ SfxItemPresentation CntContentTypeItem::GetPresentation(
         if (pIntlWrapper)
             (const_cast< CntContentTypeItem * >(this))->_aPresentation
              = INetContentTypes::GetPresentation(GetEnumValue(),
-                                                 pIntlWrapper->
-                                                  getLocale());
+                     pIntlWrapper->getLanguageTag().getLocale());
     }
     if (!_aPresentation.isEmpty())
     {
diff --git a/svl/source/items/dateitem.cxx b/svl/source/items/dateitem.cxx
index a4fd0d8..bbe8e38 100644
--- a/svl/source/items/dateitem.cxx
+++ b/svl/source/items/dateitem.cxx
@@ -139,7 +139,7 @@ SfxItemPresentation SfxDateTimeItem::GetPresentation
             DBG_WARNING("SfxDateTimeItem::GetPresentation():"
                          " Using default en_US IntlWrapper");
             const IntlWrapper aIntlWrapper(
-                ::comphelper::getProcessServiceFactory(), LANGUAGE_ENGLISH_US );
+                ::comphelper::getProcessServiceFactory(), LanguageTag( LANGUAGE_ENGLISH_US) );
             rText = aIntlWrapper.getLocaleData()->getDate(aDateTime);
             rText.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
             rText += aIntlWrapper.getLocaleData()->getTime(aDateTime);
diff --git a/svl/source/items/style.cxx b/svl/source/items/style.cxx
index 1bc6d17..2eb0b83 100644
--- a/svl/source/items/style.cxx
+++ b/svl/source/items/style.cxx
@@ -334,7 +334,7 @@ XubString SfxStyleSheetBase::GetDescription( SfxMapUnit eMetric )
     const SfxPoolItem* pItem = aIter.FirstItem();
 
     IntlWrapper aIntlWrapper(comphelper::getProcessServiceFactory(),
-            SvtSysLocale().GetLanguageTag().getLocale());
+            SvtSysLocale().GetLanguageTag());
     while ( pItem )
     {
         XubString aItemPresentation;
diff --git a/svl/source/numbers/supservs.cxx b/svl/source/numbers/supservs.cxx
index 1edfbdf..905f2a0 100644
--- a/svl/source/numbers/supservs.cxx
+++ b/svl/source/numbers/supservs.cxx
@@ -206,7 +206,7 @@ void SvNumberFormatsSupplierServiceObject::implEnsureFormatter()
     {
         // get the office's UI locale
         SvtSysLocale aSysLocale;
-        Locale aOfficeLocale = aSysLocale.GetLocaleData().getLocale();
+        Locale aOfficeLocale = aSysLocale.GetLocaleData().getLanguageTag().getLocale();
 
         // initi with this locale
         Sequence< Any > aFakedInitProps( 1 );
diff --git a/svl/source/numbers/zforfind.cxx b/svl/source/numbers/zforfind.cxx
index 9c22398..250b89b 100644
--- a/svl/source/numbers/zforfind.cxx
+++ b/svl/source/numbers/zforfind.cxx
@@ -166,7 +166,7 @@ void ImpSvNumberInputScan::TransformInput( String& rStr )
     }
     if ( nPos < nLen )
         rStr = pFormatter->GetNatNum()->getNativeNumberString( rStr,
-                pFormatter->GetLocale(), 0 );
+                pFormatter->GetLanguageTag().getLocale(), 0 );
 }
 
 
@@ -1751,7 +1751,7 @@ input for the following reasons:
             res = false;
 
         if ( aOrgCalendar.Len() )
-            pCal->loadCalendar( aOrgCalendar, pLoc->getLocale() );  // restore calendar
+            pCal->loadCalendar( aOrgCalendar, pLoc->getLanguageTag().getLocale() );  // restore calendar
 
 #if NF_TEST_CALENDAR
 {
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 6082067..a8bc1ca 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -193,7 +193,8 @@ SvNumberFormatter::SvNumberFormatter(
             const Reference< XMultiServiceFactory >& xSMgr,
             LanguageType eLang )
         :
-        xServiceManager( xSMgr )
+        xServiceManager( xSMgr ),
+        maLanguageTag( eLang)
 {
     ImpConstruct( eLang );
 }
@@ -233,10 +234,10 @@ void SvNumberFormatter::ImpConstruct( LanguageType eLang )
     eEvalDateFormat = NF_EVALDATEFORMAT_INTL;
     nDefaultSystemCurrencyFormat = NUMBERFORMAT_ENTRY_NOT_FOUND;
 
-    aLocale = LanguageTag( eLang ).getLocale();
-    pCharClass = new CharClass( comphelper::getComponentContext(xServiceManager), aLocale );
-    xLocaleData.init( comphelper::getComponentContext(xServiceManager), aLocale, eLang );
-    xCalendar.init( comphelper::getComponentContext(xServiceManager), aLocale );
+    maLanguageTag.reset( eLang );
+    pCharClass = new CharClass( comphelper::getComponentContext(xServiceManager), maLanguageTag );
+    xLocaleData.init( comphelper::getComponentContext(xServiceManager), maLanguageTag );
+    xCalendar.init( comphelper::getComponentContext(xServiceManager), maLanguageTag.getLocale() );
     xTransliteration.init( comphelper::getComponentContext(xServiceManager), eLang,
         ::com::sun::star::i18n::TransliterationModules_IGNORE_CASE );
     xNatNum.init( xServiceManager );
@@ -266,10 +267,10 @@ void SvNumberFormatter::ChangeIntl(LanguageType eLnge)
     {
         ActLnge = eLnge;
 
-        aLocale = LanguageTag( eLnge ).getLocale();
-        pCharClass->setLocale( aLocale );
-        xLocaleData.changeLocale( aLocale, eLnge );
-        xCalendar.changeLocale( aLocale );
+        maLanguageTag.reset( eLnge );
+        pCharClass->setLanguageTag( maLanguageTag );
+        xLocaleData.changeLocale( maLanguageTag );
+        xCalendar.changeLocale( maLanguageTag.getLocale() );
         xTransliteration.changeLocale( eLnge );
 
         // cached locale data items, initialize BEFORE calling ChangeIntl below
@@ -459,7 +460,8 @@ void SvNumberFormatter::ReplaceSystemCL( LanguageType eOldLanguage )
     pStdFormat->SetLastInsertKey( sal_uInt16(nLastKey - nCLOffset) );
 
     // append new system additional formats
-    NumberFormatCodeWrapper aNumberFormatCode( comphelper::getComponentContext(xServiceManager), GetLocale() );
+    NumberFormatCodeWrapper aNumberFormatCode( comphelper::getComponentContext(xServiceManager),
+            GetLanguageTag().getLocale() );
     ImpGenerateAdditionalFormats( nCLOffset, aNumberFormatCode, true );
 }
 
@@ -781,7 +783,8 @@ bool SvNumberFormatter::Load( SvStream& rStream )
 
     // generate additional i18n standard formats for all used locales
     LanguageType eOldLanguage = ActLnge;
-    NumberFormatCodeWrapper aNumberFormatCode( comphelper::getComponentContext(xServiceManager), GetLocale() );
+    NumberFormatCodeWrapper aNumberFormatCode( comphelper::getComponentContext(xServiceManager),
+            GetLanguageTag().getLocale() );
     std::vector<sal_uInt16> aList;
     GetUsedLanguages( aList );
     for ( std::vector<sal_uInt16>::const_iterator it(aList.begin()); it != aList.end(); ++it )
@@ -962,9 +965,8 @@ sal_uInt32 SvNumberFormatter::ImpGenerateCL( LanguageType eLnge, bool bNoAdditio
     {   // new CL combination
         if (LocaleDataWrapper::areChecksEnabled())
         {
-            Locale aLoadedLocale = xLocaleData->getLoadedLocale();
-            if ( aLoadedLocale.Language != aLocale.Language ||
-                    aLoadedLocale.Country != aLocale.Country )
+            const LanguageTag& rLoadedLocale = xLocaleData->getLoadedLanguageTag();
+            if ( rLoadedLocale != maLanguageTag )
             {
                 OUString aMsg("SvNumerFormatter::ImpGenerateCL: locales don't match:");
                 LocaleDataWrapper::outputCheckMessage( xLocaleData->appendLocaleInfo( aMsg ));
@@ -1963,11 +1965,10 @@ String SvNumberFormatter::GetFormatDecimalSep( sal_uInt32 nFormat ) const
         aRet = xLocaleData->getNumDecimalSep();
     else
     {
-        ::com::sun::star::lang::Locale aSaveLocale( xLocaleData->getLocale() );
-        ::com::sun::star::lang::Locale aTmpLocale( LanguageTag( pFormat->GetLanguage()).getLocale());
-        ((SvNumberFormatter*)this)->xLocaleData.changeLocale(aTmpLocale, pFormat->GetLanguage() );
+        LanguageTag aSaveLocale( xLocaleData->getLanguageTag() );
+        ((SvNumberFormatter*)this)->xLocaleData.changeLocale( LanguageTag( pFormat->GetLanguage()) );
         aRet = xLocaleData->getNumDecimalSep();
-        ((SvNumberFormatter*)this)->xLocaleData.changeLocale( aSaveLocale, eSaveLang );
+        ((SvNumberFormatter*)this)->xLocaleData.changeLocale( aSaveLocale );
     }
     return aRet;
 }
@@ -2214,7 +2215,8 @@ void SvNumberFormatter::ImpGenerateFormats( sal_uInt32 CLOffset, bool bNoAdditio
         pFormatScanner->SetConvertMode(false);      // switch off for this function
     }
 
-    NumberFormatCodeWrapper aNumberFormatCode( comphelper::getComponentContext(xServiceManager), GetLocale() );
+    NumberFormatCodeWrapper aNumberFormatCode( comphelper::getComponentContext(xServiceManager),
+            GetLanguageTag().getLocale() );
     SvNumberformat* pNewFormat = NULL;
     sal_Int32 nIdx;
     bool bDefault;
@@ -2665,7 +2667,7 @@ void SvNumberFormatter::ImpGenerateAdditionalFormats( sal_uInt32 CLOffset,
         return ;
     }
     sal_uInt32 nPos = CLOffset + pStdFormat->GetLastInsertKey();
-    rNumberFormatCode.setLocale( GetLocale() );
+    rNumberFormatCode.setLocale( GetLanguageTag().getLocale() );
     sal_Int32 j;
 
     // All currencies, this time with [$...] which was stripped in
@@ -3604,7 +3606,7 @@ void SvNumberFormatter::ImpInitCurrencyTable()
     LanguageType eSysLang = SvtSysLocale().GetLanguageTag().getLanguageType();
     LocaleDataWrapper* pLocaleData = new LocaleDataWrapper(
         ::comphelper::getProcessComponentContext(),
-        SvtSysLocale().GetLanguageTag().getLocale() );
+        SvtSysLocale().GetLanguageTag() );
     // get user configured currency
     String aConfiguredCurrencyAbbrev;
     LanguageType eConfiguredCurrencyLanguage = LANGUAGE_SYSTEM;
@@ -3632,7 +3634,7 @@ void SvNumberFormatter::ImpInitCurrencyTable()
     {
         LanguageType eLang = LanguageTag( pLocales[nLocale]).getLanguageType( false);
         rInstalledLocales.insert( eLang);
-        pLocaleData->setLocale( pLocales[nLocale] );
+        pLocaleData->setLanguageTag( LanguageTag( pLocales[nLocale]) );
         Sequence< Currency2 > aCurrSeq = pLocaleData->getAllCurrencies();
         sal_Int32 nCurrencyCount = aCurrSeq.getLength();
         Currency2 const * const pCurrencies = aCurrSeq.getConstArray();
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index b7facc0..3ca66ef 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -3341,7 +3341,8 @@ void SvNumberformat::SwitchToOtherCalendar( OUString& rOrgCalendar,
     if ( rCal.getUniqueID() == rGregorian )
     {
         using namespace ::com::sun::star::i18n;
-        ::com::sun::star::uno::Sequence< ::rtl::OUString > xCals = rCal.getAllCalendars( rLoc().getLocale() );
+        ::com::sun::star::uno::Sequence< ::rtl::OUString > xCals = rCal.getAllCalendars(
+                rLoc().getLanguageTag().getLocale() );
         sal_Int32 nCnt = xCals.getLength();
         if ( nCnt > 1 )
         {
@@ -3354,7 +3355,7 @@ void SvNumberformat::SwitchToOtherCalendar( OUString& rOrgCalendar,
                         rOrgCalendar = rCal.getUniqueID();
                         fOrgDateTime = rCal.getDateTime();
                     }
-                    rCal.loadCalendar( xCals[j], rLoc().getLocale() );
+                    rCal.loadCalendar( xCals[j], rLoc().getLanguageTag().getLocale() );
                     rCal.setDateTime( fOrgDateTime );
                     break;  // for
                 }
@@ -3370,7 +3371,7 @@ void SvNumberformat::SwitchToGregorianCalendar( const OUString& rOrgCalendar,
     const rtl::OUString &rGregorian = Gregorian::get();
     if ( rOrgCalendar.getLength() && rCal.getUniqueID() != rGregorian )
     {
-        rCal.loadCalendar( rGregorian, rLoc().getLocale() );
+        rCal.loadCalendar( rGregorian, rLoc().getLanguageTag().getLocale() );
         rCal.setDateTime( fOrgDateTime );
     }
 }
@@ -3394,7 +3395,7 @@ bool SvNumberformat::ImpFallBackToGregorianCalendar( OUString& rOrgCalendar, dou
             {
                 rOrgCalendar = "";
             }
-            rCal.loadCalendar( rGregorian, rLoc().getLocale() );
+            rCal.loadCalendar( rGregorian, rLoc().getLanguageTag().getLocale() );
             rCal.setDateTime( fOrgDateTime );
             return true;
         }
@@ -3596,7 +3597,7 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber,
                 aOrgCalendar = rCal.getUniqueID();
                 fOrgDateTime = rCal.getDateTime();
             }
-            rCal.loadCalendar( rInfo.sStrArray[i], rLoc().getLocale() );
+            rCal.loadCalendar( rInfo.sStrArray[i], rLoc().getLanguageTag().getLocale() );
             rCal.setDateTime( fOrgDateTime );
             ImpFallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime );
             break;
@@ -3746,7 +3747,7 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber,
     }
     if ( aOrgCalendar.getLength() )
     {
-        rCal.loadCalendar( aOrgCalendar, rLoc().getLocale() );  // restore calendar
+        rCal.loadCalendar( aOrgCalendar, rLoc().getLanguageTag().getLocale() );  // restore calendar
     }
     return bRes;
 }
@@ -3889,7 +3890,7 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber,
                 aOrgCalendar = rCal.getUniqueID();
                 fOrgDateTime = rCal.getDateTime();
             }
-            rCal.loadCalendar( rInfo.sStrArray[i], rLoc().getLocale() );
+            rCal.loadCalendar( rInfo.sStrArray[i], rLoc().getLanguageTag().getLocale() );
             rCal.setDateTime( fOrgDateTime );
             ImpFallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime );
             break;
@@ -4092,7 +4093,7 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber,
     }
     if ( aOrgCalendar.getLength() )
     {
-        rCal.loadCalendar( aOrgCalendar, rLoc().getLocale() );  // restore calendar
+        rCal.loadCalendar( aOrgCalendar, rLoc().getLanguageTag().getLocale() );  // restore calendar
     }
     return bRes;
 }
diff --git a/svl/source/numbers/zforscan.cxx b/svl/source/numbers/zforscan.cxx
index e82eaa0..0b88129 100644
--- a/svl/source/numbers/zforscan.cxx
+++ b/svl/source/numbers/zforscan.cxx
@@ -223,9 +223,10 @@ void ImpSvNumberformatScan::SetDependentKeywords()
     const LocaleDataWrapper* pLocaleData = pFormatter->GetLocaleData();
     // #80023# be sure to generate keywords for the loaded Locale, not for the
     // requested Locale, otherwise number format codes might not match
-    lang::Locale aLoadedLocale = pLocaleData->getLoadedLocale();
-    LanguageType eLang = LanguageTag( aLoadedLocale ).getLanguageType( false);
-    NumberFormatCodeWrapper aNumberFormatCode( comphelper::getComponentContext(pFormatter->GetServiceManager()), aLoadedLocale );
+    const LanguageTag& rLoadedLocale = pLocaleData->getLoadedLanguageTag();
+    LanguageType eLang = rLoadedLocale.getLanguageType( false);
+    NumberFormatCodeWrapper aNumberFormatCode( comphelper::getComponentContext(pFormatter->GetServiceManager()),
+            rLoadedLocale.getLocale() );
 
     i18n::NumberFormatCode aFormat = aNumberFormatCode.getFormatCode( NF_NUMBER_STANDARD );
     sNameStandardFormat = lcl_extractStandardGeneralName( aFormat.Code);
diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx
index 1f02aff..9888277 100644
--- a/svtools/source/contnr/fileview.cxx
+++ b/svtools/source/contnr/fileview.cxx
@@ -1710,7 +1710,7 @@ SvtFileView_Impl::SvtFileView_Impl( SvtFileView* pAntiImpl, Reference < XCommand
     ,mbReplaceNames             ( sal_False )
     ,mnSuspendSelectCallback    ( 0 )
     ,mbIsFirstResort            ( sal_True )
-    ,aIntlWrapper               ( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag().getLocale() )
+    ,aIntlWrapper               ( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag() )
     ,maFolderImage              ( SvtResId( IMG_SVT_FOLDER ) )
     ,mxCmdEnv ( xEnv )
 
diff --git a/svtools/source/control/calendar.cxx b/svtools/source/control/calendar.cxx
index 907ff5b..2712871 100644
--- a/svtools/source/control/calendar.cxx
+++ b/svtools/source/control/calendar.cxx
@@ -195,24 +195,18 @@ void Calendar::ImplInit( WinBits nWinStyle )
 
     ::rtl::OUString aGregorian( RTL_CONSTASCII_USTRINGPARAM( "gregorian"));
     maCalendarWrapper.loadCalendar( aGregorian,
-            Application::GetAppLocaleDataWrapper().getLocale());
+            Application::GetAppLocaleDataWrapper().getLanguageTag().getLocale());
     if (maCalendarWrapper.getUniqueID() != aGregorian)
     {
-#ifdef SAL_LOG_WARN
-        lang::Locale aLoc( Application::GetAppLocaleDataWrapper().getLocale() );
         SAL_WARN( "svtools.control", "Calendar::ImplInit: No ``gregorian'' calendar available for locale ``"
-            << aLoc.Language << "-" << aLoc.Country
+            << Application::GetAppLocaleDataWrapper().getLanguageTag().getBcp47()
             << "'' and other calendars aren't supported. Using en-US fallback." );
-#endif
 
         /* If we ever wanted to support other calendars than Gregorian a lot of
          * rewrite would be necessary to internally replace use of class Date
          * with proper class CalendarWrapper methods, get rid of fixed 12
          * months, fixed 7 days, ... */
-        maCalendarWrapper.loadCalendar( aGregorian, lang::Locale(
-                    ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "en")),
-                    ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "US")),
-                    ::rtl::OUString()));
+        maCalendarWrapper.loadCalendar( aGregorian, lang::Locale( "en", "US", ""));
     }
 
     SetFirstDate( maCurDate );
diff --git a/svtools/source/control/ctrlbox.cxx b/svtools/source/control/ctrlbox.cxx
index 4a2c156..017422f 100644
--- a/svtools/source/control/ctrlbox.cxx
+++ b/svtools/source/control/ctrlbox.cxx
@@ -1460,7 +1460,7 @@ void FontStyleBox::LoseFocus()
 void FontStyleBox::Modify()
 {
     CharClass   aChrCls( ::comphelper::getProcessComponentContext(),
-                        GetSettings().GetLanguageTag().getLocale() );
+                        GetSettings().GetLanguageTag() );
     XubString   aStr = GetText();
     sal_uInt16      nEntryCount = GetEntryCount();
 
diff --git a/svtools/source/control/fmtfield.cxx b/svtools/source/control/fmtfield.cxx
index cf73f48..375a3f6 100644
--- a/svtools/source/control/fmtfield.cxx
+++ b/svtools/source/control/fmtfield.cxx
@@ -284,8 +284,7 @@ SvNumberFormatter* FormattedField::StaticFormatter::GetFormatter()
     if (!s_cFormatter)
     {
         // get the Office's locale and translate
-        LanguageType eSysLanguage = LanguageTag(
-                SvtSysLocale().GetLocaleData().getLocale()).getLanguageType( false);
+        LanguageType eSysLanguage = SvtSysLocale().GetLanguageTag().getLanguageType( false);
         s_cFormatter = new SvNumberFormatter(
             ::comphelper::getProcessServiceFactory(),
             eSysLanguage);
@@ -618,8 +617,7 @@ void FormattedField::SetFormatter(SvNumberFormatter* pFormatter, sal_Bool bReset
         if ( m_pFormatter )
         {
             // get the Office's locale and translate
-            LanguageType eSysLanguage = LanguageTag(
-                    SvtSysLocale().GetLocaleData().getLocale()).getLanguageType( false);
+            LanguageType eSysLanguage = SvtSysLocale().GetLanguageTag().getLanguageType( false);
             // get the standard numeric format for this language
             m_nFormatKey = m_pFormatter->GetStandardFormat( NUMBERFORMAT_NUMBER, eSysLanguage );
         }
@@ -1152,8 +1150,7 @@ void DoubleNumericField::ResetConformanceTester()
     sal_Unicode cSeparatorDecimal = '.';
     if (pFormatEntry)
     {
-        Locale aLocale( LanguageTag( pFormatEntry->GetLanguage()).getLocale());
-        LocaleDataWrapper aLocaleInfo( aLocale );
+        LocaleDataWrapper aLocaleInfo( LanguageTag( pFormatEntry->GetLanguage()) );
 
         String sSeparator = aLocaleInfo.getNumThousandSep();
         if (sSeparator.Len())
@@ -1243,8 +1240,13 @@ void DoubleCurrencyField::UpdateCurrencyFormat()
     sal_uInt16 nDigits = GetDecimalDigits();
 
     // build a new format string with the base class' and my own settings
-    Locale aLocale( LanguageTag( eLanguage).getLocale());
-    LocaleDataWrapper aLocaleInfo( aLocale );
+
+    /* Strangely with gcc 4.6.3 this needs a temporary LanguageTag, otherwise
+     * there's
+     * error: request for member ‘getNumThousandSep’ in ‘aLocaleInfo’, which is
+     * of non-class type ‘LocaleDataWrapper(LanguageTag)’ */
+    LanguageTag aLanguageTag( eLanguage);
+    LocaleDataWrapper aLocaleInfo( aLanguageTag );
 
     XubString sNewFormat;
     if (bThSep)
diff --git a/svtools/source/edit/syntaxhighlight.cxx b/svtools/source/edit/syntaxhighlight.cxx
index 2efa5a9..7db7b72 100644
--- a/svtools/source/edit/syntaxhighlight.cxx
+++ b/svtools/source/edit/syntaxhighlight.cxx
@@ -330,7 +330,7 @@ bool LetterTable::isLetterUnicode( sal_Unicode c )
 {
     static CharClass* pCharClass = NULL;
     if( pCharClass == NULL )
-        pCharClass = new CharClass( Application::GetSettings().GetLanguageTag().getLocale() );
+        pCharClass = new CharClass( Application::GetSettings().GetLanguageTag() );
     rtl::OUString aStr( c );
     bool bRet = pCharClass->isLetter( aStr, 0 );
     return bRet;
diff --git a/svx/source/dialog/simptabl.cxx b/svx/source/dialog/simptabl.cxx
index bb20aee..5440742 100644
--- a/svx/source/dialog/simptabl.cxx
+++ b/svx/source/dialog/simptabl.cxx
@@ -458,7 +458,7 @@ StringCompare SvxSimpleTable::ColCompare(SvTreeListEntry* pLeft,SvTreeListEntry*
         if(nRightKind == SV_ITEM_ID_LBOXSTRING &&
             nLeftKind == SV_ITEM_ID_LBOXSTRING )
         {
-            IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag().getLocale() );
+            IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag() );
             const CollatorWrapper* pCollator = aIntlWrapper.getCaseCollator();
 
             eCompare=(StringCompare)pCollator->compareString( ((SvLBoxString*)pLeftItem)->GetText(),
diff --git a/svx/source/form/ParseContext.cxx b/svx/source/form/ParseContext.cxx
index 4455233..0456a44 100644
--- a/svx/source/form/ParseContext.cxx
+++ b/svx/source/form/ParseContext.cxx
@@ -64,7 +64,7 @@ OSystemParseContext::~OSystemParseContext()
 //-----------------------------------------------------------------------------
 ::com::sun::star::lang::Locale OSystemParseContext::getPreferredLocale( ) const
 {
-    return SvtSysLocale().GetLocaleData().getLocale();
+    return SvtSysLocale().GetLanguageTag().getLocale();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/svx/source/form/fmcontrollayout.cxx b/svx/source/form/fmcontrollayout.cxx
index 06e34f9..05292ac 100644
--- a/svx/source/form/fmcontrollayout.cxx
+++ b/svx/source/form/fmcontrollayout.cxx
@@ -143,7 +143,7 @@ namespace svxform
                 // determine the script type associated with the system locale
                 const SvtSysLocale aSysLocale;
                 const LocaleDataWrapper& rSysLocaleData = aSysLocale.GetLocaleData();
-                const sal_Int16 eSysLocaleScriptType = MsLangId::getScriptType( LanguageTag( rSysLocaleData.getLocale() ).getLanguageType() );
+                const sal_Int16 eSysLocaleScriptType = MsLangId::getScriptType( rSysLocaleData.getLanguageTag().getLanguageType() );
 
                 // depending on this script type, use the right property from the document's style which controls the
                 // default locale for document content
@@ -182,7 +182,7 @@ namespace svxform
                 // fall back to the system locale
                 if ( aDocumentCharLocale.Language.isEmpty() )
                 {
-                    aDocumentCharLocale = rSysLocaleData.getLocale();
+                    aDocumentCharLocale = rSysLocaleData.getLanguageTag().getLocale();
                 }
 
                 // retrieve a default font for this locale, and set it at the control
diff --git a/svx/source/form/fmsrcimp.cxx b/svx/source/form/fmsrcimp.cxx
index 14fb1fc..006a6de 100644
--- a/svx/source/form/fmsrcimp.cxx
+++ b/svx/source/form/fmsrcimp.cxx
@@ -585,7 +585,7 @@ FmSearchEngine::SEARCH_RESULT FmSearchEngine::SearchRegularApprox(const ::rtl::O
         aParam.insertedChars = m_nLevLonger;
     }
     aParam.searchString = strExpression;
-    aParam.Locale = SvtSysLocale().GetLocaleData().getLocale();
+    aParam.Locale = SvtSysLocale().GetLanguageTag().getLocale();
     ::utl::TextSearch aLocalEngine(aParam);
 
     // --------------------------------------------------------------
@@ -686,7 +686,7 @@ FmSearchEngine::FmSearchEngine(const Reference< XMultiServiceFactory >& _rxORB,
 
     :m_xSearchCursor(xCursor)
     ,m_xFormatSupplier(xFormatSupplier)
-    ,m_aCharacterClassficator( comphelper::getComponentContext(_rxORB), SvtSysLocale().GetLocaleData().getLocale() )
+    ,m_aCharacterClassficator( comphelper::getComponentContext(_rxORB), SvtSysLocale().GetLanguageTag() )
     ,m_aStringCompare( _rxORB )
     ,m_nCurrentFieldIndex(-2)   // -1 hat schon eine Bedeutung, also nehme ich -2 fuer 'ungueltig'
     ,m_bUsingTextComponents(sal_False)
@@ -723,7 +723,7 @@ FmSearchEngine::FmSearchEngine(const Reference< XMultiServiceFactory >& _rxORB,
         const Reference< XResultSet > & xCursor, const ::rtl::OUString& sVisibleFields,
         const InterfaceArray& arrFields, FMSEARCH_MODE eMode)
     :m_xSearchCursor(xCursor)
-    ,m_aCharacterClassficator( comphelper::getComponentContext(_rxORB), SvtSysLocale().GetLocaleData().getLocale() )
+    ,m_aCharacterClassficator( comphelper::getComponentContext(_rxORB), SvtSysLocale().GetLanguageTag() )
     ,m_aStringCompare( _rxORB )
     ,m_nCurrentFieldIndex(-2)   // -1 hat schon eine Bedeutung, also nehme ich -2 fuer 'ungueltig'
     ,m_bUsingTextComponents(sal_True)
@@ -872,7 +872,7 @@ void FmSearchEngine::Init(const ::rtl::OUString& sVisibleFields)
         bCaseSensitiveIdentifiers = xMeta->supportsMixedCaseQuotedIdentifiers();
 
     // now that we have this information, we need a collator which is able to case (in)sentively compare strings
-    m_aStringCompare.loadDefaultCollator( SvtSysLocale().GetLocaleData().getLocale(),
+    m_aStringCompare.loadDefaultCollator( SvtSysLocale().GetLanguageTag().getLocale(),
         bCaseSensitiveIdentifiers ? 0 : ::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE );
 
     try
diff --git a/svx/source/form/formcontrolfactory.cxx b/svx/source/form/formcontrolfactory.cxx
index 5cf18fe..f47cf33 100644
--- a/svx/source/form/formcontrolfactory.cxx
+++ b/svx/source/form/formcontrolfactory.cxx
@@ -586,7 +586,7 @@ namespace svxform
                     nFormatKey = OStaticDataAccessTools().getDefaultNumberFormat(
                         _rxDatabaseField,
                         Reference< XNumberFormatTypes >( _rxNumberFormats, UNO_QUERY ),
-                        SvtSysLocale().GetLocaleData().getLocale()
+                        SvtSysLocale().GetLanguageTag().getLocale()
                     );
                 }
 
diff --git a/svx/source/svdraw/svdattr.cxx b/svx/source/svdraw/svdattr.cxx
index 8e711f0..9c3ebf9 100644
--- a/svx/source/svdraw/svdattr.cxx
+++ b/svx/source/svdraw/svdattr.cxx
@@ -878,7 +878,7 @@ SfxItemPresentation SdrAngleItem::GetPresentation(
         if(!pIntlWrapper)
             pIntlWrapper = pMyIntlWrapper = new IntlWrapper(
                 ::comphelper::getProcessServiceFactory(),
-                Application::GetSettings().GetLanguageTag().getLanguageType() );
+                Application::GetSettings().GetLanguageTag() );
 
         if(pIntlWrapper->getLocaleData()->isNumLeadingZero())
             nAnz++;
diff --git a/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx b/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx
index c4710ab..03da42e 100644
--- a/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx
+++ b/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx
@@ -396,7 +396,7 @@ StringCompare DictionaryList::ColumnCompare( SvTreeListEntry* pLeft, SvTreeListE
         if(nRightKind == SV_ITEM_ID_LBOXSTRING &&
             nLeftKind == SV_ITEM_ID_LBOXSTRING )
         {
-            IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag().getLocale() );
+            IntlWrapper aIntlWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLanguageTag() );
             const CollatorWrapper* pCollator = aIntlWrapper.getCaseCollator();
 
             eCompare=(StringCompare)pCollator->compareString( ((SvLBoxString*)pLeftItem)->GetText(),
diff --git a/sw/source/core/bastyp/breakit.cxx b/sw/source/core/bastyp/breakit.cxx
index b4c4275..643ec11 100644
--- a/sw/source/core/bastyp/breakit.cxx
+++ b/sw/source/core/bastyp/breakit.cxx
@@ -89,7 +89,7 @@ void SwBreakIt::_GetLocale( const LanguageType aLang )
 
 void SwBreakIt::_GetForbidden( const LanguageType aLang )
 {
-    LocaleDataWrapper aWrap( m_xContext, GetLocale( aLang ) );
+    LocaleDataWrapper aWrap( m_xContext, LanguageTag( GetLocale( aLang )) );
 
     aForbiddenLang = aLang;
     delete m_pForbidden;
diff --git a/sw/source/core/bastyp/calc.cxx b/sw/source/core/bastyp/calc.cxx
index b484381..27e6642 100644
--- a/sw/source/core/bastyp/calc.cxx
+++ b/sw/source/core/bastyp/calc.cxx
@@ -254,12 +254,12 @@ SwCalc::SwCalc( SwDoc& rD )
     memset( VarTable, 0, sizeof(VarTable) );
     LanguageType eLang = GetDocAppScriptLang( rDoc );
 
-    if( eLang != SvxLocaleToLanguage( pLclData->getLocale() ) ||
-        eLang != SvxLocaleToLanguage( pCharClass->getLocale() ) )
+    if( eLang != SvxLocaleToLanguage( pLclData->getLanguageTag().getLocale() ) ||
+        eLang != SvxLocaleToLanguage( pCharClass->getLanguageTag().getLocale() ) )
     {
-        ::com::sun::star::lang::Locale aLocale( SvxCreateLocale( eLang ));
-        pCharClass = new CharClass( ::comphelper::getProcessComponentContext(), aLocale );
-        pLclData = new LocaleDataWrapper( aLocale );
+        LanguageTag aLanguageTag( SvxCreateLocale( eLang ));
+        pCharClass = new CharClass( ::comphelper::getProcessComponentContext(), aLanguageTag );
+        pLclData = new LocaleDataWrapper( aLanguageTag );
     }
 
     sCurrSym = comphelper::string::strip(pLclData->getCurrSymbol(), ' ');
@@ -560,7 +560,7 @@ SwCalcExp* SwCalc::VarLook( const String& rStr, sal_uInt16 ins )
             rtl::OUString sResult;
             double nNumber = DBL_MAX;
 
-            long nLang = SvxLocaleToLanguage( pLclData->getLocale() );
+            long nLang = SvxLocaleToLanguage( pLclData->getLanguageTag().getLocale() );
             if(pMgr->GetColumnCnt( sSourceName, sTableName, sColumnName,
                                     nTmpRec, nLang, sResult, &nNumber ))
             {
@@ -1539,9 +1539,9 @@ bool SwCalc::Str2Double( const String& rCommand, xub_StrLen& rCommandPos,
     {
         LanguageType eLang = GetDocAppScriptLang( *pDoc );
         if (eLang !=
-                SvxLocaleToLanguage(aSysLocale.GetLocaleData().getLocale()))
+                SvxLocaleToLanguage(aSysLocale.GetLanguageTag().getLocale()))
         {
-            pLclD.reset( new LocaleDataWrapper( SvxCreateLocale( eLang ) ) );
+            pLclD.reset( new LocaleDataWrapper( LanguageTag( SvxCreateLocale( eLang )) ) );
         }
     }
 
diff --git a/sw/source/core/bastyp/init.cxx b/sw/source/core/bastyp/init.cxx
index 678e074..3f67271 100644
--- a/sw/source/core/bastyp/init.cxx
+++ b/sw/source/core/bastyp/init.cxx
@@ -810,7 +810,7 @@ CharClass& GetAppCharClass()
     {
         pAppCharClass = new CharClass(
             ::comphelper::getProcessComponentContext(),
-            SwBreakIt::Get()->GetLocale( (LanguageType)GetAppLanguage() ));
+            LanguageTag( SwBreakIt::Get()->GetLocale( (LanguageType)GetAppLanguage() )));
     }
     return *pAppCharClass;
 }
diff --git a/sw/source/core/doc/docsort.cxx b/sw/source/core/doc/docsort.cxx
index 363594b..6932f5b 100644
--- a/sw/source/core/doc/docsort.cxx
+++ b/sw/source/core/doc/docsort.cxx
@@ -117,7 +117,7 @@ SwSortElement::~SwSortElement()
 double SwSortElement::StrToDouble( const String& rStr ) const
 {
     if( !pLclData )
-        pLclData = new LocaleDataWrapper( *pLocale );
+        pLclData = new LocaleDataWrapper( LanguageTag( *pLocale ));
 
     rtl_math_ConversionStatus eStatus;
     sal_Int32 nEnd;
diff --git a/sw/source/core/edit/autofmt.cxx b/sw/source/core/edit/autofmt.cxx
index 8c3096b..a1ed01e 100644
--- a/sw/source/core/edit/autofmt.cxx
+++ b/sw/source/core/edit/autofmt.cxx
@@ -274,7 +274,7 @@ SwTxtFrm* SwAutoFormat::GetFrm( const SwTxtNode& rTxtNd ) const
 void SwAutoFormat::_GetCharClass( LanguageType eLang )
 {
     delete pCharClass;
-    pCharClass = new CharClass( SvxCreateLocale( eLang ));
+    pCharClass = new CharClass( LanguageTag( SvxCreateLocale( eLang )));
     eCharClassLang = eLang;
 }
 
diff --git a/sw/source/core/fields/docufld.cxx b/sw/source/core/fields/docufld.cxx
index c0c88e9..d434a7a 100644
--- a/sw/source/core/fields/docufld.cxx
+++ b/sw/source/core/fields/docufld.cxx
@@ -893,9 +893,9 @@ static void lcl_GetLocalDataWrapper( sal_uLong nLang,
     SvtSysLocale aLocale;
     *ppAppLocalData = &aLocale.GetLocaleData();
     *ppLocalData = *ppAppLocalData;
-    if( nLang != SvxLocaleToLanguage( (*ppLocalData)->getLocale() ) )
+    if( nLang != SvxLocaleToLanguage( (*ppLocalData)->getLanguageTag().getLocale() ) )
         *ppLocalData = new LocaleDataWrapper(
-                        SvxCreateLocale( static_cast<LanguageType>(nLang) ) );
+                        LanguageTag( SvxCreateLocale( static_cast<LanguageType>(nLang) )) );
 }
 
 String SwDocInfoFieldType::Expand( sal_uInt16 nSub, sal_uInt32 nFormat,
diff --git a/sw/source/core/fields/expfld.cxx b/sw/source/core/fields/expfld.cxx
index 0e11e27..eb491ec 100644
--- a/sw/source/core/fields/expfld.cxx
+++ b/sw/source/core/fields/expfld.cxx
@@ -927,7 +927,7 @@ xub_StrLen SwGetExpField::GetReferenceTextPos( const SwFmtFld& rFmt, SwDoc& rDoc
         {
             LanguageType eLang = ((SvxLanguageItem&)aSet.Get(
                 GetWhichOfScript( RES_CHRATR_LANGUAGE, nSrcpt )) ).GetLanguage();
-            CharClass aCC( SvxCreateLocale( eLang ));
+            CharClass aCC( LanguageTag( SvxCreateLocale( eLang )));
             sal_Unicode c0 = sNodeText.GetChar(0);
             sal_Bool bIsAlphaNum = aCC.isAlphaNumeric( sNodeText, 0 );
             if( !bIsAlphaNum ||
diff --git a/sw/source/core/fields/fldbas.cxx b/sw/source/core/fields/fldbas.cxx
index f2439f1..be7934f 100644
--- a/sw/source/core/fields/fldbas.cxx
+++ b/sw/source/core/fields/fldbas.cxx
@@ -597,7 +597,7 @@ SwFieldType* SwValueField::ChgTyp( SwFieldType* pNewType )
 sal_uInt32 SwValueField::GetSystemFormat(SvNumberFormatter* pFormatter, sal_uInt32 nFmt)
 {
     const SvNumberformat* pEntry = pFormatter->GetEntry(nFmt);
-    sal_uInt16 nLng = SvxLocaleToLanguage( SvtSysLocale().GetLocaleData().getLocale() );
+    sal_uInt16 nLng = SvxLocaleToLanguage( SvtSysLocale().GetLanguageTag().getLocale() );
 
     if (pEntry && nLng != pEntry->GetLanguage())
     {
diff --git a/sw/source/core/fields/reffld.cxx b/sw/source/core/fields/reffld.cxx
index 6690cea..bec55fb 100644
--- a/sw/source/core/fields/reffld.cxx
+++ b/sw/source/core/fields/reffld.cxx
@@ -470,7 +470,7 @@ void SwGetRefField::UpdateField( const SwTxtFld* pFldTxtAttr )
             if( !pFldTxtAttr || !pFldTxtAttr->GetpTxtNode() )
                 break;
 
-            LocaleDataWrapper aLocaleData( SvxCreateLocale( GetLanguage() ) );
+            LocaleDataWrapper aLocaleData( LanguageTag( SvxCreateLocale( GetLanguage() )) );
 
             // erstmal ein "Kurz" - Test - falls beide im selben
             // Node stehen!
diff --git a/sw/source/core/tox/txmsrt.cxx b/sw/source/core/tox/txmsrt.cxx
index 135572f..0e2cb2a 100644
--- a/sw/source/core/tox/txmsrt.cxx
+++ b/sw/source/core/tox/txmsrt.cxx
@@ -100,7 +100,7 @@ void SwTOXInternational::Init()
     else
         pIndexWrapper->LoadAlgorithm( aLcl, sSortAlgorithm, SW_COLLATOR_IGNORES );
 
-    pCharClass = new CharClass( aLcl );
+    pCharClass = new CharClass( LanguageTag( aLcl ));
 
 }
 
diff --git a/sw/source/core/txtnode/txtedt.cxx b/sw/source/core/txtnode/txtedt.cxx
index f0d6980..c9a13b3 100644
--- a/sw/source/core/txtnode/txtedt.cxx
+++ b/sw/source/core/txtnode/txtedt.cxx
@@ -750,7 +750,7 @@ sal_Bool SwScanner::NextWord()
     Boundary aBound;
 
     CharClass& rCC = GetAppCharClass();
-    lang::Locale aOldLocale = rCC.getLocale();
+    LanguageTag aOldLanguageTag = rCC.getLanguageTag();
 
     while ( true )
     {
@@ -769,7 +769,7 @@ sal_Bool SwScanner::NextWord()
 
                 if ( nWordType != i18n::WordType::WORD_COUNT )
                 {
-                    rCC.setLocale( pBreakIt->GetLocale( aCurrLang ) );
+                    rCC.setLanguageTag( LanguageTag( pBreakIt->GetLocale( aCurrLang )) );
                     if ( rCC.isLetterNumeric(rtl::OUString(aText[nBegin])) )
                         break;
                 }
@@ -802,7 +802,7 @@ sal_Bool SwScanner::NextWord()
             break;
     } // end while( true )
 
-    rCC.setLocale( aOldLocale );
+    rCC.setLanguageTag( aOldLanguageTag );
 
     // #i89042, as discussed with HDU: don't evaluate script changes for word count. Use whole word.
     if ( nWordType == i18n::WordType::WORD_COUNT )
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index 1c520aa..632a569 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -2343,7 +2343,7 @@ bool MSWordExportBase::GetNumberFmt(const SwField& rFld, String& rStr)
     {
         sal_uInt16 nLng = rFld.GetLanguage();
         LocaleDataWrapper aLocDat(comphelper::getComponentContext(pNFmtr->GetServiceManager()),
-                                  LanguageTag(nLng).getLocale());
+                                  LanguageTag(nLng));
 
         String sFmt(pNumFmt->GetMappedFormatstring(GetNfKeywordTable(),
             aLocDat));
diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx
index 925543b..c00338e 100644
--- a/sw/source/filter/ww8/ww8scan.cxx
+++ b/sw/source/filter/ww8/ww8scan.cxx
@@ -5589,8 +5589,8 @@ WW8Fib::WW8Fib(sal_uInt8 nVer)
         lidFE = lid;
 
     Locale aTempLocale;
-    SvxLanguageToLocale( aTempLocale, lid );
-    LocaleDataWrapper aLocaleWrapper( aTempLocale );
+    LanguageTag aLanguageTag( SvxLanguageToLocale( aTempLocale, lid ));
+    LocaleDataWrapper aLocaleWrapper( aLanguageTag );
     nNumDecimalSep = aLocaleWrapper.getNumDecimalSep()[0];
 }
 
diff --git a/sw/source/ui/app/docstyle.cxx b/sw/source/ui/app/docstyle.cxx
index ca7e2ac..e86b6dd 100644
--- a/sw/source/ui/app/docstyle.cxx
+++ b/sw/source/ui/app/docstyle.cxx
@@ -584,7 +584,7 @@ String  SwDocStyleSheet::GetDescription(SfxMapUnit eUnit)
 {
     IntlWrapper aIntlWrapper(
         ::comphelper::getProcessServiceFactory(),
-        SvtSysLocale().GetLocaleData().getLocale());
+        SvtSysLocale().GetLanguageTag());
 
     rtl::OUString sPlus(" + ");
     if ( SFX_STYLE_FAMILY_PAGE == nFamily )
diff --git a/sw/source/ui/fldui/fldmgr.cxx b/sw/source/ui/fldui/fldmgr.cxx
index bd5df73..e5ad5db 100644
--- a/sw/source/ui/fldui/fldmgr.cxx
+++ b/sw/source/ui/fldui/fldmgr.cxx
@@ -1605,7 +1605,7 @@ sal_uInt16 SwFldMgr::GetCurrLanguage() const
     SwWrtShell* pSh = pWrtShell ? pWrtShell : ::lcl_GetShell();
     if( pSh )
         return pSh->GetCurLang();
-    return SvxLocaleToLanguage( SvtSysLocale().GetLocaleData().getLocale() );
+    return SvxLocaleToLanguage( SvtSysLocale().GetLanguageTag().getLocale() );
 }
 
 void SwFieldType::_GetFldName()
diff --git a/sw/source/ui/fldui/inpdlg.cxx b/sw/source/ui/fldui/inpdlg.cxx
index 1716206..e71b646 100644
--- a/sw/source/ui/fldui/inpdlg.cxx
+++ b/sw/source/ui/fldui/inpdlg.cxx
@@ -111,7 +111,7 @@ SwFldInputDlg::SwFldInputDlg( Window *pParent, SwWrtShell &rS,
         pSetFld = (SwSetExpField*)pField;
         String sFormula(pSetFld->GetFormula());
         //values are formatted - formulas are not
-        CharClass aCC( SvxCreateLocale( pSetFld->GetLanguage() ));
+        CharClass aCC( LanguageTag( SvxCreateLocale( pSetFld->GetLanguage() )));
         if( aCC.isNumeric( sFormula ))
         {
             aStr = pSetFld->ExpandField(true);
diff --git a/sw/source/ui/utlui/attrdesc.cxx b/sw/source/ui/utlui/attrdesc.cxx
index 2bcc852..ef37907 100644
--- a/sw/source/ui/utlui/attrdesc.cxx
+++ b/sw/source/ui/utlui/attrdesc.cxx
@@ -83,7 +83,7 @@ void SwAttrSet::GetPresentation(
     {
         SfxItemIter aIter( *this );
         const IntlWrapper rInt( ::comphelper::getProcessServiceFactory(),
-                                    GetAppLanguage() );
+                                    LanguageTag( GetAppLanguage()) );
         while( sal_True )
         {
             aIter.GetCurItem()->GetPresentation( ePres, eCoreMetric,
diff --git a/sw/source/ui/utlui/numfmtlb.cxx b/sw/source/ui/utlui/numfmtlb.cxx
index 71def9e..430ab33 100644
--- a/sw/source/ui/utlui/numfmtlb.cxx
+++ b/sw/source/ui/utlui/numfmtlb.cxx
@@ -103,7 +103,7 @@ void NumFormatListBox::Init(short nFormatType, sal_Bool bUsrFmts)
     if (pView)
         eCurLanguage = pView->GetWrtShell().GetCurLang();
     else
-        eCurLanguage = SvxLocaleToLanguage( SvtSysLocale().GetLocaleData().getLocale() );
+        eCurLanguage = SvxLocaleToLanguage( SvtSysLocale().GetLanguageTag().getLocale() );
 
     if (bUsrFmts == sal_False)
        {
diff --git a/toolkit/source/controls/unocontrolmodel.cxx b/toolkit/source/controls/unocontrolmodel.cxx
index 94ad6cb..4bff901 100644
--- a/toolkit/source/controls/unocontrolmodel.cxx
+++ b/toolkit/source/controls/unocontrolmodel.cxx
@@ -328,17 +328,9 @@ sal_Bool UnoControlModel::ImplHasProperty( sal_uInt16 nPropId ) const
                     sDefaultCurrency = sDefaultCurrency.copy( nSepPos + 1 );
                 }
 
-                // the remaming is the locale
-                /* FIXME-BCP47: handle language tags! */
-                Locale aLocale;
-                nSepPos = sDefaultCurrency.indexOf( '-' );
-                if ( nSepPos >= 0 )
-                {
-                    aLocale.Language = sDefaultCurrency.copy( 0, nSepPos );
-                    aLocale.Country = sDefaultCurrency.copy( nSepPos + 1 );
-                }
-
-                LocaleDataWrapper aLocaleInfo( maContext.getUNOContext(), aLocale );
+                // the remaining is the locale
+                LanguageTag aLanguageTag( sDefaultCurrency);
+                LocaleDataWrapper aLocaleInfo( maContext.getUNOContext(), aLanguageTag );
                 if ( sBankSymbol.isEmpty() )
                     sBankSymbol = aLocaleInfo.getCurrBankSymbol();
 
diff --git a/unotools/inc/unotools/charclass.hxx b/unotools/inc/unotools/charclass.hxx
index 7443210..c08e84c 100644
--- a/unotools/inc/unotools/charclass.hxx
+++ b/unotools/inc/unotools/charclass.hxx
@@ -23,6 +23,7 @@
 
 #include <ctype.h>      // isdigit(), isalpha()
 #include <boost/noncopyable.hpp>
+#include <i18npool/languagetag.hxx>
 #include <tools/string.hxx>
 #include <tools/solar.h>
 #include <com/sun/star/i18n/KCharacterType.hpp>
@@ -68,7 +69,7 @@ const sal_Int32 nCharClassNumericTypeMask =
 
 class UNOTOOLS_DLLPUBLIC CharClass : private boost::noncopyable
 {
-    ::com::sun::star::lang::Locale  aLocale;
+    LanguageTag                 maLanguageTag;
     ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCharacterClassification >    xCC;
     mutable ::osl::Mutex        aMutex;
 
@@ -76,19 +77,19 @@ public:
     /// Preferred ctor with service manager specified
     CharClass(
         const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & rxContext,
-        const ::com::sun::star::lang::Locale& rLocale);
+        const LanguageTag& rLanguageTag );
 
     /// Depricated ctor, tries to get a process service manager or to load the
     /// library directly.
-    CharClass(const ::com::sun::star::lang::Locale& rLocale);
+    CharClass( const LanguageTag& rLanguageTag );
 
     ~CharClass();
 
     /// set a new Locale
-    void setLocale( const ::com::sun::star::lang::Locale& rLocale );
+    void setLanguageTag( const LanguageTag& rLanguageTag );
 
     /// get current Locale
-    const ::com::sun::star::lang::Locale& getLocale() const;
+    const LanguageTag& getLanguageTag() const;
 
 
     /// isdigit() on ascii values
@@ -213,6 +214,10 @@ public:
     sal_Bool isNumeric( const String& rStr ) const;
     sal_Bool isAlphaNumeric( const String& rStr ) const;
     sal_Bool isLetterNumeric( const String& rStr ) const;
+
+private:
+
+    const ::com::sun::star::lang::Locale &  getMyLocale() const;
 };
 
 #endif // _UNOTOOLS_CHARCLASS_HXX
diff --git a/unotools/inc/unotools/intlwrapper.hxx b/unotools/inc/unotools/intlwrapper.hxx
index fa26250..7d16652 100644
--- a/unotools/inc/unotools/intlwrapper.hxx
+++ b/unotools/inc/unotools/intlwrapper.hxx
@@ -48,7 +48,7 @@ class UNOTOOLS_DLLPUBLIC IntlWrapper
 {
 private:
 
-            LanguageTag         aLanguageTag;
+            LanguageTag         maLanguageTag;
     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMgr;
 
             LocaleDataWrapper*  pLocaleData;
@@ -62,16 +62,11 @@ private:
 public:
                                 IntlWrapper(
                                     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & xSF,
-                                    const ::com::sun::star::lang::Locale& rLocale
-                                    );
-                                IntlWrapper(
-                                    const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & xSF,
-                                    LanguageType eLang
+                                    const LanguageTag& rLanguageTag
                                     );
                                 ~IntlWrapper();
 
-    LanguageType                getLanguage() const { return aLanguageTag.getLanguageType(); }
-    const ::com::sun::star::lang::Locale&   getLocale() const { return aLanguageTag.getLocale(); }
+    const LanguageTag&          getLanguageTag() const { return maLanguageTag; }
 
     const LocaleDataWrapper*    getLocaleData() const
                                     {
diff --git a/unotools/inc/unotools/localedatawrapper.hxx b/unotools/inc/unotools/localedatawrapper.hxx
index 1198895..1db497a 100644
--- a/unotools/inc/unotools/localedatawrapper.hxx
+++ b/unotools/inc/unotools/localedatawrapper.hxx
@@ -26,6 +26,7 @@
 #include <com/sun/star/i18n/LocaleItem.hpp>
 #include <com/sun/star/i18n/reservedWords.hpp>
 #include <rtl/ustring.hxx>
+#include <i18npool/languagetag.hxx>
 #include <unotools/readwritemutexguard.hxx>
 #include "unotools/unotoolsdllapi.h"
 
@@ -58,7 +59,7 @@ class UNOTOOLS_DLLPUBLIC LocaleDataWrapper : private boost::noncopyable
 
     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >        m_xContext;
     ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XLocaleData4 >            xLD;
-    ::com::sun::star::lang::Locale                                                      aLocale;
+    LanguageTag                                                                         maLanguageTag;
     ::boost::shared_ptr< ::com::sun::star::i18n::Calendar2 >                            xDefaultCalendar;
     ::com::sun::star::i18n::LocaleDataItem                                              aLocaleDataItem;
     ::com::sun::star::uno::Sequence< ::rtl::OUString >                                  aReservedWordSeq;
@@ -112,10 +113,10 @@ class UNOTOOLS_DLLPUBLIC LocaleDataWrapper : private boost::noncopyable
 public:
                                 LocaleDataWrapper(
                                     const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & rxContext,
-                                    const ::com::sun::star::lang::Locale& rLocale
+                                    const LanguageTag& rLanguageTag
                                     );
                                 LocaleDataWrapper(
-                                    const ::com::sun::star::lang::Locale& rLocale
+                                    const LanguageTag& rLanguageTag
                                     );
                                 ~LocaleDataWrapper();
 
@@ -129,13 +130,13 @@ public:
         const { return m_xContext; }
 
     /// set a new Locale to request
-            void                setLocale( const ::com::sun::star::lang::Locale& rLocale );
+            void                setLanguageTag( const LanguageTag& rLanguageTag );
 
     /// get current requested Locale
-    const ::com::sun::star::lang::Locale& getLocale() const;
+    const   LanguageTag&        getLanguageTag() const;
 
     /// get current loaded Locale, which might differ from the requested Locale
-    ::com::sun::star::lang::Locale getLoadedLocale() const;
+    LanguageTag                 getLoadedLanguageTag() const;
 
 
     // Wrapper implementations of service LocaleData
@@ -349,6 +350,9 @@ public:
     static  void                outputCheckMessage( const char* pStr);
 
 private:
+
+    const ::com::sun::star::lang::Locale &  getMyLocale() const;
+
     static  void                evaluateLocaleDataChecking();
 };
 
diff --git a/unotools/source/i18n/charclass.cxx b/unotools/source/i18n/charclass.cxx
index fa718cb..bfa85dc 100644
--- a/unotools/source/i18n/charclass.cxx
+++ b/unotools/source/i18n/charclass.cxx
@@ -32,18 +32,20 @@ using namespace ::com::sun::star::uno;
 
 CharClass::CharClass(
             const Reference< uno::XComponentContext > & rxContext,
-            const lang::Locale& rLocale
+            const LanguageTag& rLanguageTag
             )
+    :
+        maLanguageTag( rLanguageTag)
 {
-    setLocale( rLocale );
     xCC = CharacterClassification::create( rxContext );
 }
 
 
 CharClass::CharClass(
-            const ::com::sun::star::lang::Locale& rLocale )
+            const LanguageTag& rLanguageTag )
+    :
+        maLanguageTag( rLanguageTag)
 {
-    setLocale( rLocale );
     xCC = CharacterClassification::create( comphelper::getProcessComponentContext() );
 }
 
@@ -53,19 +55,24 @@ CharClass::~CharClass()
 }
 
 
-void CharClass::setLocale( const ::com::sun::star::lang::Locale& rLocale )
+void CharClass::setLanguageTag( const LanguageTag& rLanguageTag )
 {
     ::osl::MutexGuard aGuard( aMutex );
-    aLocale.Language = rLocale.Language;
-    aLocale.Country = rLocale.Country;
-    aLocale.Variant = rLocale.Variant;
+    maLanguageTag = rLanguageTag;
 }
 
 
-const ::com::sun::star::lang::Locale& CharClass::getLocale() const

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list