From ec17468f637517fb3c9db59d3ab555e8cbe126c1 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Thu, 23 Feb 2012 23:02:45 +0100 Subject: [PATCH] Allow switching of timezone string to messages locale, too. * adjust POSIX locale backend to redirect the timezone string through the messages/time-locale indirection --- headers/private/libroot/locale/ICUTimeData.h | 2 ++ .../libroot/add-ons/icu/ICUTimeConversion.cpp | 2 +- .../libroot/add-ons/icu/ICUTimeData.cpp | 30 +++++++++++-------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/headers/private/libroot/locale/ICUTimeData.h b/headers/private/libroot/locale/ICUTimeData.h index c06fc0a4df..aa1cbf315a 100644 --- a/headers/private/libroot/locale/ICUTimeData.h +++ b/headers/private/libroot/locale/ICUTimeData.h @@ -37,6 +37,8 @@ public: const char* GetLanginfo(int index); + const Locale& ICULocaleForStrings() const; + private: status_t _SetLCTimeEntries(const UnicodeString* strings, char* destination, int entrySize, diff --git a/src/system/libroot/add-ons/icu/ICUTimeConversion.cpp b/src/system/libroot/add-ons/icu/ICUTimeConversion.cpp index 64a3db86c9..9307caaf76 100644 --- a/src/system/libroot/add-ons/icu/ICUTimeConversion.cpp +++ b/src/system/libroot/add-ons/icu/ICUTimeConversion.cpp @@ -123,7 +123,7 @@ ICUTimeConversion::TZSet(const char* timeZoneID, const char* tz) } else { UnicodeString icuString; fTimeZone->getDisplayName(i == 1, TimeZone::SHORT, - fTimeData.ICULocale(), icuString); + fTimeData.ICULocaleForStrings(), icuString); CheckedArrayByteSink byteSink(fDataBridge->addrOfTZName[i], sizeof(fTimeZoneID)); icuString.toUTF8(byteSink); diff --git a/src/system/libroot/add-ons/icu/ICUTimeData.cpp b/src/system/libroot/add-ons/icu/ICUTimeData.cpp index da756d63e7..c1a28dc8b2 100644 --- a/src/system/libroot/add-ons/icu/ICUTimeData.cpp +++ b/src/system/libroot/add-ons/icu/ICUTimeData.cpp @@ -69,19 +69,7 @@ ICUTimeData::SetTo(const Locale& locale, const char* posixLocaleName) return result; UErrorCode icuStatus = U_ZERO_ERROR; - - // check if the date strings should be taken from the messages-locale - // or from the time-locale (default) - const Locale* symbolsLocale = &fLocale; - char stringsValue[16]; - fLocale.getKeywordValue("strings", stringsValue, sizeof(stringsValue), - icuStatus); - if (U_SUCCESS(icuStatus) && strcasecmp(stringsValue, "messages") == 0) - symbolsLocale = &fMessagesData.ICULocale(); - else - icuStatus = U_ZERO_ERROR; - - DateFormatSymbols formatSymbols(*symbolsLocale, icuStatus); + DateFormatSymbols formatSymbols(ICULocaleForStrings(), icuStatus); if (!U_SUCCESS(icuStatus)) return B_UNSUPPORTED; @@ -270,6 +258,22 @@ ICUTimeData::GetLanginfo(int index) } +const Locale& +ICUTimeData::ICULocaleForStrings() const +{ + // check if the date strings should be taken from the messages-locale + // or from the time-locale (default) + UErrorCode icuStatus = U_ZERO_ERROR; + char stringsValue[16]; + fLocale.getKeywordValue("strings", stringsValue, sizeof(stringsValue), + icuStatus); + if (U_SUCCESS(icuStatus) && strcasecmp(stringsValue, "messages") == 0) + return fMessagesData.ICULocale(); + else + return fLocale; +} + + status_t ICUTimeData::_SetLCTimeEntries(const UnicodeString* strings, char* destination, int entrySize, int count, int maxCount)