Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*
3 : : * This file is part of the LibreOffice project.
4 : : *
5 : : * This Source Code Form is subject to the terms of the Mozilla Public
6 : : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : : *
9 : : * This file incorporates work covered by the following license notice:
10 : : *
11 : : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : : * contributor license agreements. See the NOTICE file distributed
13 : : * with this work for additional information regarding copyright
14 : : * ownership. The ASF licenses this file to you under the Apache
15 : : * License, Version 2.0 (the "License"); you may not use this file
16 : : * except in compliance with the License. You may obtain a copy of
17 : : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : : */
19 : :
20 : : #ifndef _COMPHELPER_LOCALE_HXX_
21 : : #define _COMPHELPER_LOCALE_HXX_
22 : :
23 : : #include <vector>
24 : : #include <rtl/ustring.hxx>
25 : : #include "comphelper/comphelperdllapi.h"
26 : :
27 : : namespace comphelper{
28 : :
29 : : /** @short A Locale object represents a specific geographical, political, or cultural region.
30 : :
31 : : @descr This Locale class can be used to:
32 : : - provide the different parts of a Locale (Language, Country, Variant)
33 : : - converting it from/to ISO formated string values (like e.g. "en-US")
34 : : - provide some predefined (static) Locale objects
35 : : */
36 : 230093 : class COMPHELPER_DLLPUBLIC Locale
37 : : {
38 : : public:
39 : :
40 : : /** @short seperates LANGUAGE and COUNTRY part of an ISO formated Locale. */
41 : : static const sal_Unicode SEPERATOR_LC;
42 : :
43 : : /** @short seperates COUNTRY and VARIANT part of an ISO formated Locale. */
44 : : static const sal_Unicode SEPERATOR_CV;
45 : :
46 : : /** @short seperates COUNTRY and VARIANT part of an ISO formated Locale.
47 : : @descr Its true for some linux derivates only :-( */
48 : : static const sal_Unicode SEPERATOR_CV_LINUX;
49 : :
50 : : /** @short some predefined Locale objects. */
51 : : static const Locale EN_US();
52 : : static const Locale X_DEFAULT();
53 : : static const Locale X_NOTRANSLATE();
54 : :
55 : : //-------------------------------------------
56 : : // types
57 : :
58 : : public:
59 : :
60 : : /** @short will be throw during convertion, if a Locale cant be interpreted. */
61 : : struct MalFormedLocaleException
62 : : {
63 : : public:
64 : : ::rtl::OUString Message;
65 : :
66 : : MalFormedLocaleException()
67 : : {}
68 : :
69 : : MalFormedLocaleException(const ::rtl::OUString& sMessage)
70 : : : Message(sMessage)
71 : : {}
72 : : };
73 : :
74 : : //-------------------------------------------
75 : : // member
76 : :
77 : : private :
78 : :
79 : : //---------------------------------------
80 : : /** @short must be a valid ISO Language Code.
81 : :
82 : : @descr These codes are the lower-case two-letter codes as defined by ISO-639.
83 : : You can find a full list of these codes at a number of sites, such as:
84 : : <BR><a href ="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">
85 : : http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt</a>
86 : : */
87 : : ::rtl::OUString m_sLanguage;
88 : :
89 : : //---------------------------------------
90 : : /** @short must be a valid ISO Country Code.
91 : : @descr These codes are the upper-case two-letter codes as defined by ISO-3166.
92 : : You can find a full list of these codes at a number of sites, such as:
93 : : <BR><a href="http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html">
94 : : http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html</a>
95 : : */
96 : : ::rtl::OUString m_sCountry;
97 : :
98 : : //---------------------------------------
99 : : /** @short Variant codes are vendor and browser-specific.
100 : : @descr For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX.
101 : : Where there are two variants, separate them with an underscore, and
102 : : put the most important one first. For example, a Traditional Spanish collation
103 : : might be referenced, with "ES", "ES", "Traditional_WIN".
104 : : */
105 : : ::rtl::OUString m_sVariant;
106 : :
107 : : //-------------------------------------------
108 : : // interface
109 : :
110 : : public :
111 : :
112 : : //---------------------------------------
113 : : /** @short needed by outside users!
114 : :
115 : : @descr Otherwise it wouldnt be possible to use
116 : : any instance of such Locale static ...
117 : : */
118 : : Locale();
119 : :
120 : : //---------------------------------------
121 : : /** @short construct a Locale from an ISO formated string value.
122 : :
123 : : @seealso fromISO()
124 : :
125 : : @param sISO
126 : : an ISO formated string value, which can be parsed and
127 : : tokenized into a Lamnguage, Country and Variant part.
128 : :
129 : : @throw MalFormedLocaleException
130 : : if conversion failed.
131 : : */
132 : : Locale(const ::rtl::OUString& sISO)
133 : : throw(MalFormedLocaleException);
134 : :
135 : : //---------------------------------------
136 : : /** @short construct a Locale from language, country and variant.
137 : :
138 : : @seealso setLanguage()
139 : : @seealso setCountry()
140 : : @seealso setVariant()
141 : :
142 : : @param sLanguage
143 : : lowercase two-letter ISO-639 code.
144 : :
145 : : @param sCountry
146 : : uppercase two-letter ISO-3166 code.
147 : :
148 : : @param sVariant
149 : : vendor and browser specific code.
150 : : */
151 : : Locale(const ::rtl::OUString& sLanguage ,
152 : : const ::rtl::OUString& sCountry ,
153 : : const ::rtl::OUString& sVariant = ::rtl::OUString());
154 : :
155 : : //---------------------------------------
156 : : /** @short copy constructor.
157 : :
158 : : @param aCopy
159 : : the copy object.
160 : : */
161 : : Locale(const Locale& aCopy);
162 : :
163 : : //---------------------------------------
164 : : /** @short returns the language code for this locale.
165 : :
166 : : @descr That will either be the empty string or
167 : : a lowercase ISO 639 code.
168 : :
169 : : @return [string]
170 : : the language code.
171 : : */
172 : : ::rtl::OUString getLanguage() const;
173 : :
174 : : //---------------------------------------
175 : : /** @short returns the country/region code for this locale.
176 : :
177 : : @descr That will either be the empty string or an
178 : : upercase ISO 3166 2-letter code.
179 : :
180 : : @return [string]
181 : : the country code.
182 : : */
183 : : ::rtl::OUString getCountry() const;
184 : :
185 : : //---------------------------------------
186 : : /** @short returns the variant code for this locale.
187 : :
188 : : @return [string]
189 : : the variant code.
190 : : */
191 : : ::rtl::OUString getVariant() const;
192 : :
193 : : //---------------------------------------
194 : : /** @short set the new language code for this locale.
195 : :
196 : : @descr That will either be the empty string or
197 : : a lowercase ISO 639 code.
198 : :
199 : : @param sLanguage
200 : : the language code.
201 : : */
202 : : void setLanguage(const ::rtl::OUString& sLanguage);
203 : :
204 : : //---------------------------------------
205 : : /** @short set the new country/region code for this locale.
206 : :
207 : : @descr That will either be the empty string or an
208 : : upercase ISO 3166 2-letter code.
209 : :
210 : : @param sCountry
211 : : the country code.
212 : : */
213 : : void setCountry(const ::rtl::OUString& sCountry);
214 : :
215 : : //---------------------------------------
216 : : /** @short set the new variant code for this locale.
217 : :
218 : : @param sVariant
219 : : the variant code.
220 : : */
221 : : void setVariant(const ::rtl::OUString& sVariant);
222 : :
223 : : //---------------------------------------
224 : : /** @short take over new Locale informations.
225 : :
226 : : @seealso Locale(const ::rtl::OUString& sISO)
227 : :
228 : : @param sISO
229 : : an ISO formated string value, which can be parsed and
230 : : tokenized into a Lamnguage, Country and Variant part.
231 : : e.g. "en-US" or "en-US_WIN"
232 : :
233 : : @throw MalFormedLocaleException
234 : : if conversion failed.
235 : : */
236 : : void fromISO(const ::rtl::OUString& sISO)
237 : : throw(MalFormedLocaleException);
238 : :
239 : : //---------------------------------------
240 : : /** @short converts this Locale to an ISO formated string value.
241 : :
242 : : @descr The different parts of this Locale will be assempled
243 : : e.g. to "en-US" or "en-US_WIN"
244 : :
245 : : @return [string]
246 : : the ISO formated string.
247 : : */
248 : : ::rtl::OUString toISO() const;
249 : :
250 : : //---------------------------------------
251 : : /** @short check, if two Locale objects are equals.
252 : :
253 : : @descr All parts of a Locale (means Language, Country and Variant)
254 : : will be checked.
255 : :
256 : : @param aComparable
257 : : the Locale object for compare.
258 : :
259 : : @return [boolean]
260 : : TRUE if both objects uses the same values for
261 : : Language, Country and Variant.
262 : : */
263 : : sal_Bool equals(const Locale& aComparable) const;
264 : :
265 : : //---------------------------------------
266 : : /** @short check, if two Locale objects
267 : : uses the same language.
268 : :
269 : : @descr The Country and Variant parts of a Locale
270 : : wont be checked here.
271 : :
272 : : @return [boolean]
273 : : TRUE if both objects uses the same
274 : : Language value.
275 : : */
276 : : sal_Bool similar(const Locale& aComparable) const;
277 : :
278 : : //---------------------------------------
279 : : /** @short search for an equal or at least for a similar
280 : : Locale in a list of possible ones.
281 : :
282 : : @descr First it searches for a Locale, which is equals
283 : : to the reference Locale.
284 : : (means: same Language, Country, Variant)
285 : :
286 : : If the reference Locale couldnt be located, it will
287 : : tried again - but we are checking for "similar" Locales then.
288 : : (means: same Language)
289 : :
290 : : If no similar Locale could be located, we search
291 : : for a Locale "en-US" inside the given Locale list.
292 : :
293 : : If "en-US" could not be located, we search for
294 : : a Locale "en" inside the given list.
295 : :
296 : : If no "same" nor any "similar" locale could be found,
297 : : we try "x-default" and "x-notranslate" explicitly.
298 : : Sometimes localized variables are optimized and doesnt use
299 : : localzation realy. E.g. in case the localized value is a fix
300 : : product name.
301 : :
302 : : If no locale match till now, we use any other existing
303 : : locale, which exists inside the set of given ones!
304 : :
305 : : @seealso equals()
306 : : @seealso similar()
307 : :
308 : : @param lISOList
309 : : the list of possible Locales
310 : : (as formated ISO strings).
311 : :
312 : : @param sReferenceISO
313 : : the reference Locale, which should be searched
314 : : if its equals or similar to any Locale inside
315 : : the provided Locale list.
316 : :
317 : : @return An iterator, which points to the found element
318 : : inside the given Locale list.
319 : : If no matching Locale could be found, it points
320 : : to the end of the list.
321 : :
322 : : @throw [MalFormedLocaleException]
323 : : if at least one ISO formated string couldnt
324 : : be converted to a valid Locale Object.
325 : : */
326 : : static ::std::vector< ::rtl::OUString >::const_iterator getFallback(const ::std::vector< ::rtl::OUString >& lISOList ,
327 : : const ::rtl::OUString& sReferenceISO)
328 : : throw(MalFormedLocaleException);
329 : :
330 : : //---------------------------------------
331 : : /** @short assign elements of another locale
332 : : to this instance.
333 : :
334 : : @param rCopy
335 : : another locale object.
336 : : */
337 : : void operator=(const Locale& rCopy);
338 : :
339 : : //---------------------------------------
340 : : /** @short check if two Locale objects are equals.
341 : :
342 : : @seealso equals()
343 : :
344 : : @param aComparable
345 : : the Locale object for compare.
346 : :
347 : : @return [boolean]
348 : : TRUE if both objects uses the same values for
349 : : Language, Country and Variant.
350 : : */
351 : : sal_Bool operator==(const Locale& aComparable) const;
352 : :
353 : : //---------------------------------------
354 : : /** @short check if two Locale objects are different.
355 : :
356 : : @param aComparable
357 : : the Locale object for compare.
358 : :
359 : : @return [boolean]
360 : : TRUE if at least one part of such Locale
361 : : isnt the same.
362 : : */
363 : : sal_Bool operator!=(const Locale& aComparable) const;
364 : : };
365 : :
366 : : } // namespace salhelper
367 : :
368 : : #endif // _COMPHELPER_LOCALE_HXX_
369 : :
370 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|