summaryrefslogtreecommitdiff
path: root/comphelper/inc/comphelper/locale.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'comphelper/inc/comphelper/locale.hxx')
-rw-r--r--comphelper/inc/comphelper/locale.hxx446
1 files changed, 446 insertions, 0 deletions
diff --git a/comphelper/inc/comphelper/locale.hxx b/comphelper/inc/comphelper/locale.hxx
new file mode 100644
index 000000000000..40152555a3d0
--- /dev/null
+++ b/comphelper/inc/comphelper/locale.hxx
@@ -0,0 +1,446 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: locale.hxx,v $
+ * $Revision: 1.8 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _COMPHELPER_LOCALE_HXX_
+#define _COMPHELPER_LOCALE_HXX_
+
+//_______________________________________________
+// includes
+
+#include <vector>
+#include <rtl/ustring.hxx>
+#include "comphelper/comphelperdllapi.h"
+
+//_______________________________________________
+// namespace
+
+namespace comphelper{
+
+//_______________________________________________
+// definitions
+
+/** @short A Locale object represents a specific geographical, political, or cultural region.
+
+ @descr This Locale class can be used to:
+ - provide the different parts of a Locale (Language, Country, Variant)
+ - converting it from/to ISO formated string values (like e.g. "en-US")
+ - provide some predefined (static) Locale objects
+ */
+class COMPHELPER_DLLPUBLIC Locale
+{
+ //-------------------------------------------
+ // const
+
+ public:
+
+ /** @short seperates LANGUAGE and COUNTRY part of an ISO formated Locale. */
+ static const sal_Unicode SEPERATOR_LC;
+
+ /** @short seperates COUNTRY and VARIANT part of an ISO formated Locale. */
+ static const sal_Unicode SEPERATOR_CV;
+
+ /** @short seperates COUNTRY and VARIANT part of an ISO formated Locale.
+ @descr Its true for some linux derivates only :-( */
+ static const sal_Unicode SEPERATOR_CV_LINUX;
+
+ /** @short some predefined Locale objects. */
+ static const Locale EN_US();
+ static const Locale EN();
+ static const Locale DE_DE();
+ static const Locale DE_CH();
+ static const Locale DE_AT();
+ static const Locale AR();
+ static const Locale CA();
+ static const Locale CS();
+ static const Locale DA();
+ static const Locale EL();
+ static const Locale ES();
+ static const Locale FI();
+ static const Locale FR();
+ static const Locale HE();
+ static const Locale HI_IN();
+ static const Locale HU();
+ static const Locale IT();
+ static const Locale JA();
+ static const Locale KO();
+ static const Locale NL();
+ static const Locale PL();
+ static const Locale PT();
+ static const Locale PT_BR();
+ static const Locale RU();
+ static const Locale SK();
+ static const Locale SL();
+ static const Locale SV();
+ static const Locale TH();
+ static const Locale TR();
+ static const Locale X_DEFAULT();
+ static const Locale X_COMMENT();
+ static const Locale X_TRANSLATE();
+ static const Locale X_NOTRANSLATE();
+ static const Locale ZH_CN();
+ static const Locale ZH_TW();
+
+ //-------------------------------------------
+ // types
+
+ public:
+
+ /** @short will be throw during convertion, if a Locale cant be interpreted. */
+ struct MalFormedLocaleException
+ {
+ public:
+ ::rtl::OUString Message;
+
+ MalFormedLocaleException()
+ {}
+
+ MalFormedLocaleException(const ::rtl::OUString& sMessage)
+ : Message(sMessage)
+ {}
+ };
+
+ //-------------------------------------------
+ // member
+
+ private :
+
+ //---------------------------------------
+ /** @short must be a valid ISO Language Code.
+
+ @descr These codes are the lower-case two-letter codes as defined by ISO-639.
+ You can find a full list of these codes at a number of sites, such as:
+ <BR><a href ="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">
+ http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt</a>
+ */
+ ::rtl::OUString m_sLanguage;
+
+ //---------------------------------------
+ /** @short must be a valid ISO Country Code.
+ @descr These codes are the upper-case two-letter codes as defined by ISO-3166.
+ You can find a full list of these codes at a number of sites, such as:
+ <BR><a href="http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html">
+ http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html</a>
+ */
+ ::rtl::OUString m_sCountry;
+
+ //---------------------------------------
+ /** @short Variant codes are vendor and browser-specific.
+ @descr For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX.
+ Where there are two variants, separate them with an underscore, and
+ put the most important one first. For example, a Traditional Spanish collation
+ might be referenced, with "ES", "ES", "Traditional_WIN".
+ */
+ ::rtl::OUString m_sVariant;
+
+ //-------------------------------------------
+ // interface
+
+ public :
+
+ //---------------------------------------
+ /** @short needed by outside users!
+
+ @descr Otherwise it wouldnt be possible to use
+ any instance of such Locale static ...
+ */
+ Locale();
+
+ //---------------------------------------
+ /** @short construct a Locale from an ISO formated string value.
+
+ @seealso fromISO()
+
+ @param sISO
+ an ISO formated string value, which can be parsed and
+ tokenized into a Lamnguage, Country and Variant part.
+
+ @throw MalFormedLocaleException
+ if conversion failed.
+ */
+ Locale(const ::rtl::OUString& sISO)
+ throw(MalFormedLocaleException);
+
+ //---------------------------------------
+ /** @short construct a Locale from language, country and variant.
+
+ @seealso setLanguage()
+ @seealso setCountry()
+ @seealso setVariant()
+
+ @param sLanguage
+ lowercase two-letter ISO-639 code.
+
+ @param sCountry
+ uppercase two-letter ISO-3166 code.
+
+ @param sVariant
+ vendor and browser specific code.
+ */
+ Locale(const ::rtl::OUString& sLanguage ,
+ const ::rtl::OUString& sCountry ,
+ const ::rtl::OUString& sVariant = ::rtl::OUString());
+
+ //---------------------------------------
+ /** @short copy constructor.
+
+ @param aCopy
+ the copy object.
+ */
+ Locale(const Locale& aCopy);
+
+ //---------------------------------------
+ /** @short returns the language code for this locale.
+
+ @descr That will either be the empty string or
+ a lowercase ISO 639 code.
+
+ @return [string]
+ the language code.
+ */
+ ::rtl::OUString getLanguage() const;
+
+ //---------------------------------------
+ /** @short returns the country/region code for this locale.
+
+ @descr That will either be the empty string or an
+ upercase ISO 3166 2-letter code.
+
+ @return [string]
+ the country code.
+ */
+ ::rtl::OUString getCountry() const;
+
+ //---------------------------------------
+ /** @short returns the variant code for this locale.
+
+ @return [string]
+ the variant code.
+ */
+ ::rtl::OUString getVariant() const;
+
+ //---------------------------------------
+ /** @short set the new language code for this locale.
+
+ @descr That will either be the empty string or
+ a lowercase ISO 639 code.
+
+ @param sLanguage
+ the language code.
+ */
+ void setLanguage(const ::rtl::OUString& sLanguage);
+
+ //---------------------------------------
+ /** @short set the new country/region code for this locale.
+
+ @descr That will either be the empty string or an
+ upercase ISO 3166 2-letter code.
+
+ @param sCountry
+ the country code.
+ */
+ void setCountry(const ::rtl::OUString& sCountry);
+
+ //---------------------------------------
+ /** @short set the new variant code for this locale.
+
+ @param sVariant
+ the variant code.
+ */
+ void setVariant(const ::rtl::OUString& sVariant);
+
+ //---------------------------------------
+ /** @short take over new Locale informations.
+
+ @seealso Locale(const ::rtl::OUString& sISO)
+
+ @param sISO
+ an ISO formated string value, which can be parsed and
+ tokenized into a Lamnguage, Country and Variant part.
+ e.g. "en-US" or "en-US_WIN"
+
+ @throw MalFormedLocaleException
+ if conversion failed.
+ */
+ void fromISO(const ::rtl::OUString& sISO)
+ throw(MalFormedLocaleException);
+
+ //---------------------------------------
+ /** @short converts this Locale to an ISO formated string value.
+
+ @descr The different parts of this Locale will be assempled
+ e.g. to "en-US" or "en-US_WIN"
+
+ @return [string]
+ the ISO formated string.
+ */
+ ::rtl::OUString toISO() const;
+
+ //---------------------------------------
+ /** @short check, if two Locale objects are equals.
+
+ @descr All parts of a Locale (means Language, Country and Variant)
+ will be checked.
+
+ @param aComparable
+ the Locale object for compare.
+
+ @return [boolean]
+ TRUE if both objects uses the same values for
+ Language, Country and Variant.
+ */
+ sal_Bool equals(const Locale& aComparable) const;
+
+ //---------------------------------------
+ /** @short check, if two Locale objects
+ uses the same language.
+
+ @descr The Country and Variant parts of a Locale
+ wont be checked here.
+
+ @return [boolean]
+ TRUE if both objects uses the same
+ Language value.
+ */
+ sal_Bool similar(const Locale& aComparable) const;
+
+ //---------------------------------------
+ /** @short search for an equal or at least for a similar
+ Locale in a list of possible ones.
+
+ @descr First it searches for a Locale, which is equals
+ to the reference Locale.
+ (means: same Language, Country, Variant)
+
+ If the reference Locale couldnt be located, it will
+ tried again - but we are checking for "similar" Locales then.
+ (means: same Language)
+
+ If no similar Locale could be located, we search
+ for a Locale "en-US" inside the given Locale list.
+
+ If "en-US" could not be located, we search for
+ a Locale "en" inside the given list.
+
+ If no "same" nor any "similar" locale could be found,
+ we try "x-default" and "x-notranslate" explicitly.
+ Sometimes localized variables are optimized and doesnt use
+ localzation realy. E.g. in case the localized value is a fix
+ product name.
+
+ If no locale match till now, we use any other existing
+ locale, which exists inside the set of given ones!
+
+ @seealso equals()
+ @seealso similar()
+
+ @param lISOList
+ the list of possible Locales
+ (as formated ISO strings).
+
+ @param sReferenceISO
+ the reference Locale, which should be searched
+ if its equals or similar to any Locale inside
+ the provided Locale list.
+
+ @return An iterator, which points to the found element
+ inside the given Locale list.
+ If no matching Locale could be found, it points
+ to the end of the list.
+
+ @throw [MalFormedLocaleException]
+ if at least one ISO formated string couldnt
+ be converted to a valid Locale Object.
+ */
+ static ::std::vector< ::rtl::OUString >::const_iterator getFallback(const ::std::vector< ::rtl::OUString >& lISOList ,
+ const ::rtl::OUString& sReferenceISO)
+ throw(MalFormedLocaleException);
+
+ //---------------------------------------
+ /** @short search for the next possible fallback locale.
+
+ @descr Instead of getFallback(vector<>, string) this method
+ uses the given locale and decide by using an algorithm
+ which locale can be the next possible one.
+
+ Algorithm:
+ - if locale has country return language only
+ - if locale different "en-US" return "en-US"
+ - if locale "en-US" return "en"
+
+ @param aLocale [in/out]!
+ the incoming value will be used to start
+ search for a possible fallback ...
+ and in case such fallback was found this parameter
+ will be used for return too.
+
+ @return TRUE if the parameter aLocale contains a new fallback value;
+ FALSE otherwise.
+ */
+ static sal_Bool getFallback(Locale& aLocale);
+
+ //---------------------------------------
+ /** @short assign elements of another locale
+ to this instance.
+
+ @param rCopy
+ another locale object.
+ */
+ void operator=(const Locale& rCopy);
+
+ //---------------------------------------
+ /** @short check if two Locale objects are equals.
+
+ @seealso equals()
+
+ @param aComparable
+ the Locale object for compare.
+
+ @return [boolean]
+ TRUE if both objects uses the same values for
+ Language, Country and Variant.
+ */
+ sal_Bool operator==(const Locale& aComparable) const;
+
+ //---------------------------------------
+ /** @short check if two Locale objects are different.
+
+ @param aComparable
+ the Locale object for compare.
+
+ @return [boolean]
+ TRUE if at least one part of such Locale
+ isnt the same.
+ */
+ sal_Bool operator!=(const Locale& aComparable) const;
+};
+
+} // namespace salhelper
+
+#endif // _COMPHELPER_LOCALE_HXX_