2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file FLcl_LocaleImpl.cpp
19 * @brief This is the implementation file for _LocaleImpl class.
22 #include <unicode/errorcode.h>
23 #include <unicode/ustring.h>
25 #include <FBaseSysLog.h>
26 #include <FLclLocale.h>
28 #include "FLcl_LocaleImpl.h"
29 #include "FLcl_LocaleData.h"
30 #include "FLcl_LocaleManagerImpl.h"
32 using namespace Tizen::Base;
34 namespace Tizen { namespace Locales
37 _LocaleImpl::_LocaleImpl(void)
42 _LocaleImpl::_LocaleImpl(const char* pLocaleCode)
43 : __icuLocale(pLocaleCode)
45 if (pLocaleCode == null || *pLocaleCode == '\0')
47 __icuLocale.setToBogus();
51 _LocaleImpl::_LocaleImpl(const char* pLanguage, const char* pCountry, const char* pVariant)
52 : __icuLocale(pLanguage, pCountry, pVariant)
54 if (pLanguage == null || *pLanguage == '\0' || pCountry == null || *pCountry == '\0')
56 __icuLocale.setToBogus();
60 _LocaleImpl::_LocaleImpl(const U_ICU_NAMESPACE::Locale& icuLocale)
61 : __icuLocale(icuLocale)
65 _LocaleImpl::~_LocaleImpl(void)
70 _LocaleImpl::CloneN(void)
72 return new (std::nothrow) _LocaleImpl(__icuLocale);
75 U_ICU_NAMESPACE::Locale
76 _LocaleImpl::GetIcuLocale (void) const
82 _LocaleImpl::GetOspLocale(void)
84 LanguageCode languageCode = Locale::StringToLanguageCode(GetLanguageCodeString(false));
85 CountryCode countryCode = Locale::StringToCountryCode(Get2LetterCountryCodeString());
86 String variant(GetVariantCodeString());
87 return Locale(languageCode, countryCode, &variant);
91 _LocaleImpl::operator ==(const _LocaleImpl& otherLocale) const
93 return __icuLocale == otherLocale.__icuLocale;
97 _LocaleImpl::operator !=(const _LocaleImpl& otherLocale) const
99 return !(*this == otherLocale);
103 _LocaleImpl::Equals(const Object& obj) const
105 const _LocaleImpl* pOtherLocale = dynamic_cast< const _LocaleImpl* >(&obj);
108 return *this == *pOtherLocale;
114 _LocaleImpl::GetHashCode(void) const
116 return __icuLocale.hashCode();
120 _LocaleImpl::GetLanguageCodeString(bool isTwoLetter)
122 String languageCode((isTwoLetter ? __icuLocale.getLanguage() : __icuLocale.getISO3Language()));
123 String languageScriptTmp(__icuLocale.getScript());
125 if (!languageScriptTmp.IsEmpty())
127 String languageScript;
128 languageScriptTmp.ToLowerCase(languageScript);
129 languageCode.Append(L"-");
130 languageCode.Append(languageScript);
136 _LocaleImpl::GetLanguageName(String& languageName) const
138 Locale loc = _LocaleManagerImpl::GetSystemLocale();
139 return GetLanguageName(*loc.__pLocaleImpl, languageName);
143 _LocaleImpl::GetLanguageName(const _LocaleImpl& otherLocale, String& languageName) const
145 U_ICU_NAMESPACE::UnicodeString icuStr;
146 languageName = _LocaleData::GetOspString(__icuLocale.getDisplayLanguage(otherLocale.__icuLocale, icuStr));
147 if (!languageName.IsEmpty())
149 String languageScriptTmp(__icuLocale.getScript());
151 if (!languageScriptTmp.IsEmpty())
153 U_ICU_NAMESPACE::UnicodeString icuScriptStr;
154 String languageScriptName = _LocaleData::GetOspString(__icuLocale.getDisplayScript(otherLocale.__icuLocale, icuScriptStr));
155 languageName.Insert(L" (", languageName.GetLength());
156 languageName.Insert(languageScriptName, languageName.GetLength());
157 languageName.Insert(L")", languageName.GetLength());
161 return E_UNSUPPORTED_OPERATION;
165 _LocaleImpl::Get2LetterCountryCodeString(void) const
167 return __icuLocale.getCountry();
171 _LocaleImpl::Get3LetterCountryCodeString(void) const
173 return __icuLocale.getISO3Country();
177 _LocaleImpl::GetCountryName(String& countryName) const
179 Locale loc = _LocaleManagerImpl::GetSystemLocale();
180 return GetCountryName(*loc.__pLocaleImpl, countryName);
184 _LocaleImpl::GetCountryName(const _LocaleImpl& otherLocale, String& countryName) const
186 U_ICU_NAMESPACE::UnicodeString icuStr;
187 countryName = _LocaleData::GetOspString(__icuLocale.getDisplayCountry(otherLocale.__icuLocale, icuStr));
188 if (!countryName.IsEmpty())
192 return E_UNSUPPORTED_OPERATION;
197 _LocaleImpl::GetVariantCodeString(void) const
199 return (IsSupported() == true) ? __icuLocale.getVariant() : null;
203 _LocaleImpl::SetVariantCodeString(const char* pVariantCode)
205 __icuLocale = U_ICU_NAMESPACE::Locale(__icuLocale.getLanguage(), __icuLocale.getCountry(), pVariantCode);
209 _LocaleImpl::GetLocaleCodeString(void) const
211 return __icuLocale.getName();
215 _LocaleImpl::IsSupported(void) const
217 return !__icuLocale.isBogus();
221 _LocaleImpl::IsSupported(const Locale& ospLocale)
223 return !ospLocale.__pLocaleImpl->__icuLocale.isBogus();
227 _LocaleImpl::GetLocaleImpl(const Locale& ospLocale)
229 return ospLocale.__pLocaleImpl;
233 _LocaleImpl::Get2LetterLanguageCodeString(const char* pLanguageCodeString)
235 if (pLanguageCodeString)
237 _LocaleImpl localeImpl(pLanguageCodeString, "US", null);
238 return localeImpl.GetLanguageCodeString(true);
244 _LocaleImpl::Get3LetterLanguageCodeString(const char* pLanguageCodeString)
246 if (pLanguageCodeString)
248 _LocaleImpl localeImpl(pLanguageCodeString, "US", null);
249 return localeImpl.GetLanguageCodeString(false);
255 _LocaleImpl::Get2LetterCountryCodeString(const char* pCountryCodeString)
257 if (pCountryCodeString && strlen(pCountryCodeString) == 3)
259 _LocaleImpl localeImpl("en", pCountryCodeString, null);
260 return localeImpl.Get2LetterCountryCodeString();
266 _LocaleImpl::Get3LetterCountryCodeString(const char* pCountryCodeString)
268 if (pCountryCodeString)
270 _LocaleImpl localeImpl("en", pCountryCodeString, null);
271 return localeImpl.Get3LetterCountryCodeString();