diff options
author | Elliott Hughes <enh@google.com> | 2014-05-29 17:41:25 -0700 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2014-06-16 11:47:41 +0100 |
commit | a94266074c7b82720fd2cecfb37ab8da85f1b296 (patch) | |
tree | 3a0b903bb2bbaaeb4fb8360deeb35eccabee2e9e /include/ScopedIcuLocale.h | |
parent | f577d7594f3acc1d97e119c508e8e4edfeb1f20b (diff) | |
download | libcore-a94266074c7b82720fd2cecfb37ab8da85f1b296.zip libcore-a94266074c7b82720fd2cecfb37ab8da85f1b296.tar.gz libcore-a94266074c7b82720fd2cecfb37ab8da85f1b296.tar.bz2 |
Pass BCP-47 tags and not Locale.toString results to ICU.
ICU can't handle the new toString forms for scripts etc.
and it's also guaranteed to deal with BCP-47 tags correctly.
Most of the changes in this patch are required to keep
backwards compatibility for getDisplayCountry string etc. in
the face of the transformations toLanguageTag performs.
A few tests were changed, but for the better.
The tagalog -> filipino charlie foxtrot will be dealt with
in a follow up change.
Co-Authored-By: Narayan Kamath <narayan@google.com>
Change-Id: Ia7f26d92a0e38c4bbb1d839c0fbd8ad16a473bf5
Diffstat (limited to 'include/ScopedIcuLocale.h')
-rw-r--r-- | include/ScopedIcuLocale.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/include/ScopedIcuLocale.h b/include/ScopedIcuLocale.h new file mode 100644 index 0000000..2109e03 --- /dev/null +++ b/include/ScopedIcuLocale.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SCOPED_ICU_LOCALE_H_included +#define SCOPED_ICU_LOCALE_H_included + +#include "JNIHelp.h" +#include "ScopedUtfChars.h" +#include "unicode/locid.h" + +class ScopedIcuLocale { + public: + ScopedIcuLocale(JNIEnv* env, jstring javaLocaleName) : mEnv(env) { + mLocale.setToBogus(); + + if (javaLocaleName == NULL) { + jniThrowNullPointerException(mEnv, "javaLocaleName == null"); + return; + } + + const ScopedUtfChars localeName(env, javaLocaleName); + if (localeName.c_str() == NULL) { + return; + } + + mLocale = Locale::createFromName(localeName.c_str()); + } + + ~ScopedIcuLocale() { + } + + bool valid() const { + return !mLocale.isBogus(); + } + + Locale& locale() { + return mLocale; + } + + private: + JNIEnv* const mEnv; + Locale mLocale; + + // Disallow copy and assignment. + ScopedIcuLocale(const ScopedIcuLocale&); + void operator=(const ScopedIcuLocale&); +}; + +#endif // SCOPED_ICU_LOCALE_H_included |