25 CPLocaleIdentifier =
@"CPLocaleIdentifier";
26 CPLocaleLanguageCode =
@"CPLocaleLanguageCode";
27 CPLocaleCountryCode =
@"CPLocaleCountryCode";
28 CPLocaleScriptCode =
@"CPLocaleScriptCode";
29 CPLocaleVariantCode =
@"CPLocaleVariantCode";
30 CPLocaleExemplarCharacterSet =
@"CPLocaleExemplarCharacterSet";
31 CPLocaleCalendar =
@"CPLocaleCalendar";
32 CPLocaleCollationIdentifier =
@"CPLocaleCollationIdentifier";
33 CPLocaleUsesMetricSystem =
@"CPLocaleUsesMetricSystem";
34 CPLocaleMeasurementSystem =
@"CPLocaleMeasurementSystem";
35 CPLocaleDecimalSeparator =
@"CPLocaleDecimalSeparator";
36 CPLocaleGroupingSeparator =
@"CPLocaleGroupingSeparator";
37 CPLocaleCurrencySymbol =
@"CPLocaleCurrencySymbol";
38 CPLocaleCurrencyCode =
@"CPLocaleCurrencyCode";
39 CPLocaleCollatorIdentifier =
@"CPLocaleCollatorIdentifier";
40 CPLocaleQuotationBeginDelimiterKey =
@"CPLocaleQuotationBeginDelimiterKey";
41 CPLocaleQuotationEndDelimiterKey =
@"CPLocaleQuotationEndDelimiterKey";
42 CPLocaleAlternateQuotationBeginDelimiterKey =
@"CPLocaleAlternateQuotationBeginDelimiterKey";
43 CPLocaleAlternateQuotationEndDelimiterKey =
@"CPLocaleAlternateQuotationEndDelimiterKey";
45 CPGregorianCalendar =
@"CPGregorianCalendar";
46 CPBuddhistCalendar =
@"CPBuddhistCalendar";
47 CPChineseCalendar =
@"CPChineseCalendar";
48 CPHebrewCalendar =
@"CPHebrewCalendar";
49 CPIslamicCalendar =
@"CPIslamicCalendar";
50 CPIslamicCivilCalendar =
@"CPIslamicCivilCalendar";
51 CPJapaneseCalendar =
@"CPJapaneseCalendar";
52 CPRepublicOfChinaCalendar =
@"CPRepublicOfChinaCalendar";
53 CPPersianCalendar =
@"CPPersianCalendar";
54 CPIndianCalendar =
@"CPIndianCalendar";
55 CPISO8601Calendar =
@"CPISO8601Calendar";
57 CPLocaleLanguageDirectionUnknown =
@"CPLocaleLanguageDirectionUnknown";
58 CPLocaleLanguageDirectionLeftToRight =
@"CPLocaleLanguageDirectionLeftToRight";
59 CPLocaleLanguageDirectionRightToLeft =
@"CPLocaleLanguageDirectionRightToLeft";
60 CPLocaleLanguageDirectionTopToBottom =
@"CPLocaleLanguageDirectionTopToBottom";
61 CPLocaleLanguageDirectionBottomToTop =
@"CPLocaleLanguageDirectionBottomToTop";
63 var countryCodes = [
@"DE",
@"FR",
@"ES",
@"GB",
@"US"],
64 languageCodes = [
@"en",
@"de",
@"es",
@"fr"],
65 availableLocaleIdentifiers = [
@"de_DE",
@"en_GB",
@"en_US",
@"es_ES",
@"fr_FR"];
67 var sharedSystemLocale = nil,
68 sharedCurrentLocale = nil;
79 if (!sharedSystemLocale)
80 sharedSystemLocale = [[
CPLocale alloc] initWithLocaleIdentifier:@"en_US"];
82 return sharedSystemLocale;
89 if (!sharedCurrentLocale)
91 var localeIdentifier =
@"en_US",
94 if (typeof navigator !==
"undefined")
97 language = (typeof navigator.language !==
"undefined") ? navigator.language : navigator.userLanguage;
102 language = language.replace(
"-",
"_").substring(0, 5);
104 language = language.substring(0, 3).toLowerCase() + language.substring(3, 5).toUpperCase();
106 if ([availableLocaleIdentifiers indexOfObject:language] !==
CPNotFound)
107 localeIdentifier = language;
111 sharedCurrentLocale = [[
CPLocale alloc] initWithLocaleIdentifier:localeIdentifier];
114 return sharedCurrentLocale;
119 + (CPArray)availableLocaleIdentifiers
121 return availableLocaleIdentifiers;
126 + (CPArray)ISOCountryCodes
139 + (CPArray)ISOLanguageCodes
141 return languageCodes;
154 - (id)initWithLocaleIdentifier:(
CPString)anIdentifier
156 if (
self == [super init])
158 var parts = [anIdentifier componentsSeparatedByString:@"_"],
159 language = [parts objectAtIndex:0],
162 if ([parts count] > 1)
163 country = [parts objectAtIndex:1];
165 country = anIdentifier;
168 [_locale setObject:anIdentifier forKey:CPLocaleIdentifier];
169 [_locale setObject:language forKey:CPLocaleLanguageCode];
170 [_locale setObject:country forKey:CPLocaleCountryCode];
172 if ([[
self class] respondsToSelector:
@selector(_platformLocaleAdditionalDescriptionForIdentifier:)])
175 var info = [[
self class] performSelector:@selector(_platformLocaleAdditionalDescriptionForIdentifier:) withObject:anIdentifier];
176 [_locale addEntriesFromDictionary:info];
180 [_locale setObject:CPGregorianCalendar forKey:CPLocaleCalendar];
197 return [_locale objectForKey:CPLocaleIdentifier];
204 - (id)objectForKey:(
id)aKey
206 return [_locale objectForKey:aKey];
212 var CPLocaleIdentifierLocaleKey =
@"CPLocaleIdentifierLocaleKey";
214 @implementation CPLocale (CPCoding)
216 - (id)initWithCoder:(
CPCoder)aCoder
220 _locale = [aCoder decodeObjectForKey:CPLocaleIdentifierLocaleKey];
226 - (void)encodeWithCoder:(
CPCoder)aCoder
230 [aCoder encodeObject:_locale forKey:CPLocaleIdentifierLocaleKey];