twitter_cldr 2.2.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -2
- data/History.txt +11 -0
- data/README.md +2 -2
- data/Rakefile +1 -1
- data/lib/twitter_cldr.rb +1 -0
- data/lib/twitter_cldr/core_ext.rb +1 -1
- data/lib/twitter_cldr/formatters/base.rb +3 -3
- data/lib/twitter_cldr/formatters/calendars/datetime_formatter.rb +32 -23
- data/lib/twitter_cldr/formatters/numbers/abbreviated/abbreviated_number_formatter.rb +3 -2
- data/lib/twitter_cldr/localized/localized_date.rb +32 -13
- data/lib/twitter_cldr/localized/localized_datetime.rb +24 -6
- data/lib/twitter_cldr/localized/localized_time.rb +12 -3
- data/lib/twitter_cldr/resources/download.rb +7 -1
- data/lib/twitter_cldr/resources/language_codes_importer.rb +8 -8
- data/lib/twitter_cldr/resources/loader.rb +1 -1
- data/lib/twitter_cldr/resources/tailoring_importer.rb +1 -3
- data/lib/twitter_cldr/shared/languages.rb +1 -1
- data/lib/twitter_cldr/tokenizers/calendars/datetime_tokenizer.rb +2 -1
- data/lib/twitter_cldr/version.rb +1 -1
- data/resources/collation/tailoring/af.yml +0 -1
- data/resources/collation/tailoring/ar.yml +3 -12
- data/resources/collation/tailoring/be.yml +4 -5
- data/resources/collation/tailoring/bg.yml +1 -2
- data/resources/collation/tailoring/bn.yml +3 -5
- data/resources/collation/tailoring/ca.yml +3 -6
- data/resources/collation/tailoring/cs.yml +3 -14
- data/resources/collation/tailoring/cy.yml +3 -26
- data/resources/collation/tailoring/da.yml +3 -31
- data/resources/collation/tailoring/de.yml +0 -1
- data/resources/collation/tailoring/el.yml +0 -1
- data/resources/collation/tailoring/en.yml +0 -1
- data/resources/collation/tailoring/es.yml +3 -4
- data/resources/collation/tailoring/eu.yml +0 -1
- data/resources/collation/tailoring/fa.yml +3 -38
- data/resources/collation/tailoring/fi.yml +3 -24
- data/resources/collation/tailoring/fil.yml +3 -7
- data/resources/collation/tailoring/fr.yml +0 -1
- data/resources/collation/tailoring/ga.yml +0 -1
- data/resources/collation/tailoring/gl.yml +0 -1
- data/resources/collation/tailoring/he.yml +3 -2
- data/resources/collation/tailoring/hi.yml +3 -5
- data/resources/collation/tailoring/hu.yml +3 -64
- data/resources/collation/tailoring/id.yml +0 -1
- data/resources/collation/tailoring/it.yml +0 -1
- data/resources/collation/tailoring/ja.yml +55 -7429
- data/resources/collation/tailoring/ko.yml +3 -7478
- data/resources/collation/tailoring/lv.yml +3 -18
- data/resources/collation/tailoring/ms.yml +0 -1
- data/resources/collation/tailoring/nb.yml +3 -31
- data/resources/collation/tailoring/nl.yml +0 -1
- data/resources/collation/tailoring/pl.yml +3 -20
- data/resources/collation/tailoring/pt.yml +0 -1
- data/resources/collation/tailoring/ro.yml +3 -16
- data/resources/collation/tailoring/ru.yml +1 -2
- data/resources/collation/tailoring/sk.yml +3 -18
- data/resources/collation/tailoring/sq.yml +3 -33
- data/resources/collation/tailoring/sr.yml +1 -2
- data/resources/collation/tailoring/sv.yml +3 -30
- data/resources/collation/tailoring/ta.yml +3 -29
- data/resources/collation/tailoring/th.yml +3 -11
- data/resources/collation/tailoring/tr.yml +3 -15
- data/resources/collation/tailoring/uk.yml +4 -5
- data/resources/collation/tailoring/ur.yml +3 -83
- data/resources/collation/tailoring/vi.yml +3 -20
- data/resources/collation/tailoring/zh-Hant.yml +14 -75240
- data/resources/collation/tailoring/zh.yml +44 -41897
- data/resources/collation/tries/af.dump +0 -0
- data/resources/collation/tries/ar.dump +0 -0
- data/resources/collation/tries/be.dump +0 -0
- data/resources/collation/tries/bg.dump +0 -0
- data/resources/collation/tries/bn.dump +0 -0
- data/resources/collation/tries/ca.dump +0 -0
- data/resources/collation/tries/cs.dump +0 -0
- data/resources/collation/tries/cy.dump +0 -0
- data/resources/collation/tries/da.dump +0 -0
- data/resources/collation/tries/de.dump +0 -0
- data/resources/collation/tries/default.dump +0 -0
- data/resources/collation/tries/el.dump +0 -0
- data/resources/collation/tries/en.dump +0 -0
- data/resources/collation/tries/es.dump +0 -0
- data/resources/collation/tries/eu.dump +0 -0
- data/resources/collation/tries/fa.dump +0 -0
- data/resources/collation/tries/fi.dump +0 -0
- data/resources/collation/tries/fil.dump +0 -0
- data/resources/collation/tries/fr.dump +0 -0
- data/resources/collation/tries/ga.dump +0 -0
- data/resources/collation/tries/gl.dump +0 -0
- data/resources/collation/tries/he.dump +0 -0
- data/resources/collation/tries/hi.dump +0 -0
- data/resources/collation/tries/hu.dump +0 -0
- data/resources/collation/tries/id.dump +0 -0
- data/resources/collation/tries/it.dump +0 -0
- data/resources/collation/tries/ja.dump +0 -0
- data/resources/collation/tries/ko.dump +0 -0
- data/resources/collation/tries/lv.dump +0 -0
- data/resources/collation/tries/ms.dump +0 -0
- data/resources/collation/tries/nb.dump +0 -0
- data/resources/collation/tries/nl.dump +0 -0
- data/resources/collation/tries/pl.dump +0 -0
- data/resources/collation/tries/pt.dump +0 -0
- data/resources/collation/tries/ro.dump +0 -0
- data/resources/collation/tries/ru.dump +0 -0
- data/resources/collation/tries/sk.dump +0 -0
- data/resources/collation/tries/sq.dump +0 -0
- data/resources/collation/tries/sr.dump +0 -0
- data/resources/collation/tries/sv.dump +0 -0
- data/resources/collation/tries/ta.dump +0 -0
- data/resources/collation/tries/th.dump +0 -0
- data/resources/collation/tries/tr.dump +0 -0
- data/resources/collation/tries/uk.dump +0 -0
- data/resources/collation/tries/ur.dump +0 -0
- data/resources/collation/tries/vi.dump +0 -0
- data/resources/collation/tries/zh-Hant.dump +0 -0
- data/resources/collation/tries/zh.dump +0 -0
- data/resources/locales/af/calendars.yml +5 -4
- data/resources/locales/af/currencies.yml +2 -0
- data/resources/locales/af/layout.yml +2 -1
- data/resources/locales/ar/calendars.yml +10 -10
- data/resources/locales/ar/currencies.yml +7 -0
- data/resources/locales/ar/layout.yml +1 -1
- data/resources/locales/be/calendars.yml +9 -9
- data/resources/locales/be/currencies.yml +1 -2
- data/resources/locales/be/layout.yml +2 -1
- data/resources/locales/bg/calendars.yml +8 -11
- data/resources/locales/bg/currencies.yml +3 -0
- data/resources/locales/bg/layout.yml +2 -1
- data/resources/locales/bg/territories.yml +1 -1
- data/resources/locales/bn/calendars.yml +6 -7
- data/resources/locales/bn/currencies.yml +2 -0
- data/resources/locales/bn/layout.yml +2 -1
- data/resources/locales/bn/territories.yml +1 -1
- data/resources/locales/ca/calendars.yml +8 -7
- data/resources/locales/ca/currencies.yml +3 -0
- data/resources/locales/ca/layout.yml +2 -1
- data/resources/locales/cs/calendars.yml +10 -11
- data/resources/locales/cs/currencies.yml +4 -0
- data/resources/locales/cs/layout.yml +2 -1
- data/resources/locales/cs/territories.yml +1 -1
- data/resources/locales/cy/calendars.yml +22 -12
- data/resources/locales/cy/currencies.yml +1080 -3
- data/resources/locales/cy/languages.yml +107 -23
- data/resources/locales/cy/layout.yml +2 -1
- data/resources/locales/cy/lists.yml +1 -1
- data/resources/locales/cy/numbers.yml +16 -4
- data/resources/locales/cy/territories.yml +257 -1
- data/resources/locales/cy/units.yml +175 -28
- data/resources/locales/da/calendars.yml +6 -9
- data/resources/locales/da/currencies.yml +3 -0
- data/resources/locales/da/layout.yml +2 -1
- data/resources/locales/da/territories.yml +1 -1
- data/resources/locales/de/calendars.yml +8 -11
- data/resources/locales/de/currencies.yml +3 -0
- data/resources/locales/de/layout.yml +2 -1
- data/resources/locales/de/territories.yml +1 -1
- data/resources/locales/el/calendars.yml +9 -11
- data/resources/locales/el/currencies.yml +3 -0
- data/resources/locales/el/layout.yml +2 -1
- data/resources/locales/el/numbers.yml +1 -0
- data/resources/locales/el/territories.yml +1 -1
- data/resources/locales/en/calendars.yml +8 -5
- data/resources/locales/en/currencies.yml +3 -0
- data/resources/locales/en/languages.yml +2 -1
- data/resources/locales/en/layout.yml +2 -1
- data/resources/locales/en/territories.yml +3 -3
- data/resources/locales/es/calendars.yml +6 -7
- data/resources/locales/es/currencies.yml +3 -0
- data/resources/locales/es/layout.yml +2 -1
- data/resources/locales/es/territories.yml +2 -2
- data/resources/locales/eu/calendars.yml +5 -4
- data/resources/locales/eu/currencies.yml +2 -0
- data/resources/locales/eu/layout.yml +2 -1
- data/resources/locales/eu/territories.yml +1 -1
- data/resources/locales/fa/calendars.yml +6 -8
- data/resources/locales/fa/currencies.yml +2 -0
- data/resources/locales/fa/layout.yml +1 -1
- data/resources/locales/fa/territories.yml +1 -1
- data/resources/locales/fi/calendars.yml +11 -14
- data/resources/locales/fi/currencies.yml +3 -0
- data/resources/locales/fi/layout.yml +2 -1
- data/resources/locales/fil/calendars.yml +5 -5
- data/resources/locales/fil/currencies.yml +2 -0
- data/resources/locales/fil/layout.yml +2 -1
- data/resources/locales/fil/territories.yml +1 -1
- data/resources/locales/fr/calendars.yml +9 -16
- data/resources/locales/fr/currencies.yml +3 -1
- data/resources/locales/fr/layout.yml +2 -1
- data/resources/locales/fr/territories.yml +2 -2
- data/resources/locales/ga/calendars.yml +13 -12
- data/resources/locales/ga/currencies.yml +2 -0
- data/resources/locales/ga/layout.yml +2 -1
- data/resources/locales/gl/calendars.yml +6 -6
- data/resources/locales/gl/currencies.yml +2 -0
- data/resources/locales/gl/layout.yml +2 -1
- data/resources/locales/gl/territories.yml +1 -1
- data/resources/locales/he/calendars.yml +8 -16
- data/resources/locales/he/currencies.yml +2 -0
- data/resources/locales/he/layout.yml +1 -1
- data/resources/locales/he/territories.yml +1 -1
- data/resources/locales/hi/calendars.yml +8 -10
- data/resources/locales/hi/currencies.yml +2 -0
- data/resources/locales/hi/languages.yml +64 -74
- data/resources/locales/hi/layout.yml +2 -1
- data/resources/locales/hi/territories.yml +32 -32
- data/resources/locales/hr/calendars.yml +6 -7
- data/resources/locales/hr/currencies.yml +5 -0
- data/resources/locales/hr/layout.yml +2 -1
- data/resources/locales/hr/territories.yml +1 -1
- data/resources/locales/hu/calendars.yml +9 -11
- data/resources/locales/hu/currencies.yml +2 -0
- data/resources/locales/hu/layout.yml +2 -1
- data/resources/locales/hu/territories.yml +1 -1
- data/resources/locales/id/calendars.yml +7 -6
- data/resources/locales/id/currencies.yml +2 -0
- data/resources/locales/id/languages.yml +9 -9
- data/resources/locales/id/layout.yml +2 -1
- data/resources/locales/id/territories.yml +1 -1
- data/resources/locales/is/calendars.yml +7 -8
- data/resources/locales/is/currencies.yml +2 -0
- data/resources/locales/is/layout.yml +2 -1
- data/resources/locales/is/territories.yml +1 -1
- data/resources/locales/it/calendars.yml +5 -8
- data/resources/locales/it/currencies.yml +3 -0
- data/resources/locales/it/layout.yml +2 -1
- data/resources/locales/it/territories.yml +1 -1
- data/resources/locales/ja/calendars.yml +12 -12
- data/resources/locales/ja/currencies.yml +2 -0
- data/resources/locales/ja/layout.yml +2 -1
- data/resources/locales/ko/calendars.yml +12 -11
- data/resources/locales/ko/currencies.yml +2 -0
- data/resources/locales/ko/layout.yml +2 -1
- data/resources/locales/ko/territories.yml +1 -1
- data/resources/locales/lv/calendars.yml +6 -6
- data/resources/locales/lv/currencies.yml +4 -0
- data/resources/locales/lv/layout.yml +2 -1
- data/resources/locales/ms/calendars.yml +5 -4
- data/resources/locales/ms/currencies.yml +2 -0
- data/resources/locales/ms/layout.yml +2 -1
- data/resources/locales/ms/territories.yml +1 -1
- data/resources/locales/nb/calendars.yml +7 -7
- data/resources/locales/nb/currencies.yml +3 -0
- data/resources/locales/nb/layout.yml +2 -1
- data/resources/locales/nb/territories.yml +1 -1
- data/resources/locales/nl/calendars.yml +5 -8
- data/resources/locales/nl/currencies.yml +3 -0
- data/resources/locales/nl/layout.yml +2 -1
- data/resources/locales/nl/territories.yml +1 -1
- data/resources/locales/pl/calendars.yml +9 -10
- data/resources/locales/pl/currencies.yml +5 -0
- data/resources/locales/pl/layout.yml +2 -1
- data/resources/locales/pl/territories.yml +1 -1
- data/resources/locales/pt/calendars.yml +9 -14
- data/resources/locales/pt/currencies.yml +3 -0
- data/resources/locales/pt/layout.yml +2 -1
- data/resources/locales/pt/territories.yml +1 -1
- data/resources/locales/ro/calendars.yml +10 -12
- data/resources/locales/ro/currencies.yml +4 -0
- data/resources/locales/ro/layout.yml +2 -1
- data/resources/locales/ro/territories.yml +1 -1
- data/resources/locales/ru/calendars.yml +8 -13
- data/resources/locales/ru/currencies.yml +5 -0
- data/resources/locales/ru/languages.yml +1 -1
- data/resources/locales/ru/layout.yml +2 -1
- data/resources/locales/ru/territories.yml +15 -15
- data/resources/locales/sk/calendars.yml +23 -48
- data/resources/locales/sk/currencies.yml +5 -1
- data/resources/locales/sk/layout.yml +2 -1
- data/resources/locales/sk/territories.yml +1 -1
- data/resources/locales/sq/calendars.yml +9 -9
- data/resources/locales/sq/layout.yml +2 -1
- data/resources/locales/sr/calendars.yml +7 -12
- data/resources/locales/sr/currencies.yml +5 -0
- data/resources/locales/sr/languages.yml +4 -4
- data/resources/locales/sr/layout.yml +2 -1
- data/resources/locales/sr/territories.yml +1 -1
- data/resources/locales/sv/calendars.yml +53 -57
- data/resources/locales/sv/currencies.yml +4 -2
- data/resources/locales/sv/layout.yml +2 -1
- data/resources/locales/sv/numbers.yml +0 -1
- data/resources/locales/sv/territories.yml +1 -1
- data/resources/locales/ta/calendars.yml +6 -5
- data/resources/locales/ta/currencies.yml +2 -0
- data/resources/locales/ta/layout.yml +2 -1
- data/resources/locales/ta/territories.yml +1 -1
- data/resources/locales/th/calendars.yml +7 -8
- data/resources/locales/th/currencies.yml +2 -0
- data/resources/locales/th/layout.yml +2 -1
- data/resources/locales/tr/calendars.yml +8 -11
- data/resources/locales/tr/currencies.yml +3 -1
- data/resources/locales/tr/layout.yml +2 -1
- data/resources/locales/tr/territories.yml +1 -1
- data/resources/locales/uk/calendars.yml +8 -10
- data/resources/locales/uk/currencies.yml +5 -0
- data/resources/locales/uk/layout.yml +2 -1
- data/resources/locales/ur/calendars.yml +8 -7
- data/resources/locales/ur/currencies.yml +3 -1
- data/resources/locales/ur/layout.yml +1 -1
- data/resources/locales/ur/territories.yml +1 -1
- data/resources/locales/vi/calendars.yml +19 -19
- data/resources/locales/vi/currencies.yml +2 -0
- data/resources/locales/vi/layout.yml +2 -1
- data/resources/locales/vi/territories.yml +1 -1
- data/resources/locales/zh-Hant/calendars.yml +7 -10
- data/resources/locales/zh-Hant/currencies.yml +2 -0
- data/resources/locales/zh-Hant/layout.yml +2 -1
- data/resources/locales/zh/calendars.yml +7 -10
- data/resources/locales/zh/currencies.yml +2 -0
- data/resources/locales/zh/layout.yml +2 -1
- data/resources/locales/zh/territories.yml +4 -4
- data/resources/shared/currency_digits_and_rounding.yml +4 -1
- data/resources/shared/language_codes_table.dump +0 -0
- data/resources/shared/phone_codes.yml +1 -0
- data/resources/shared/postal_codes.yml +159 -159
- data/resources/unicode_data/blocks/alphabetic_presentation_forms.yml +23 -23
- data/resources/unicode_data/blocks/arabic.yml +4 -4
- data/resources/unicode_data/blocks/arabic_mathematical_alphabetic_symbols.yml +141 -141
- data/resources/unicode_data/blocks/arabic_presentation_forms_a.yml +593 -593
- data/resources/unicode_data/blocks/arabic_presentation_forms_b.yml +139 -139
- data/resources/unicode_data/blocks/armenian.yml +1 -1
- data/resources/unicode_data/blocks/basic_latin.yml +33 -33
- data/resources/unicode_data/blocks/cjk_compatibility.yml +256 -256
- data/resources/unicode_data/blocks/cjk_compatibility_forms.yml +30 -30
- data/resources/unicode_data/blocks/cjk_radicals_supplement.yml +2 -2
- data/resources/unicode_data/blocks/cjk_symbols_and_punctuation.yml +5 -5
- data/resources/unicode_data/blocks/cjk_unified_ideographs.yml +2 -2
- data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_a.yml +2 -2
- data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_b.yml +2 -2
- data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_c.yml +2 -2
- data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_d.yml +2 -2
- data/resources/unicode_data/blocks/cuneiform_numbers_and_punctuation.yml +4 -4
- data/resources/unicode_data/blocks/currency_symbols.yml +17 -1
- data/resources/unicode_data/blocks/enclosed_alphanumeric_supplement.yml +77 -77
- data/resources/unicode_data/blocks/enclosed_alphanumerics.yml +139 -139
- data/resources/unicode_data/blocks/enclosed_cjk_letters_and_months.yml +245 -245
- data/resources/unicode_data/blocks/enclosed_ideographic_supplement.yml +57 -57
- data/resources/unicode_data/blocks/general_punctuation.yml +26 -26
- data/resources/unicode_data/blocks/georgian.yml +1 -1
- data/resources/unicode_data/blocks/greek_and_coptic.yml +13 -13
- data/resources/unicode_data/blocks/greek_extended.yml +4 -4
- data/resources/unicode_data/blocks/halfwidth_and_fullwidth_forms.yml +225 -225
- data/resources/unicode_data/blocks/hangul_compatibility_jamo.yml +94 -94
- data/resources/unicode_data/blocks/hangul_syllables.yml +2 -2
- data/resources/unicode_data/blocks/high_private_use_surrogates.yml +2 -2
- data/resources/unicode_data/blocks/high_surrogates.yml +2 -2
- data/resources/unicode_data/blocks/hiragana.yml +3 -3
- data/resources/unicode_data/blocks/kanbun.yml +14 -14
- data/resources/unicode_data/blocks/kangxi_radicals.yml +214 -214
- data/resources/unicode_data/blocks/katakana.yml +1 -1
- data/resources/unicode_data/blocks/lao.yml +3 -3
- data/resources/unicode_data/blocks/latin_1_supplement.yml +46 -46
- data/resources/unicode_data/blocks/latin_extended_a.yml +6 -6
- data/resources/unicode_data/blocks/latin_extended_additional.yml +1 -1
- data/resources/unicode_data/blocks/latin_extended_b.yml +12 -12
- data/resources/unicode_data/blocks/latin_extended_c.yml +2 -2
- data/resources/unicode_data/blocks/latin_extended_d.yml +3 -3
- data/resources/unicode_data/blocks/letterlike_symbols.yml +53 -53
- data/resources/unicode_data/blocks/low_surrogates.yml +2 -2
- data/resources/unicode_data/blocks/mathematical_alphanumeric_symbols.yml +996 -996
- data/resources/unicode_data/blocks/mathematical_operators.yml +4 -4
- data/resources/unicode_data/blocks/number_forms.yml +49 -49
- data/resources/unicode_data/blocks/phonetic_extensions.yml +61 -61
- data/resources/unicode_data/blocks/phonetic_extensions_supplement.yml +37 -37
- data/resources/unicode_data/blocks/private_use_area.yml +2 -2
- data/resources/unicode_data/blocks/small_form_variants.yml +26 -26
- data/resources/unicode_data/blocks/spacing_modifier_letters.yml +20 -20
- data/resources/unicode_data/blocks/superscripts_and_subscripts.yml +42 -42
- data/resources/unicode_data/blocks/supplemental_mathematical_operators.yml +4 -4
- data/resources/unicode_data/blocks/supplementary_private_use_area_a.yml +2 -2
- data/resources/unicode_data/blocks/supplementary_private_use_area_b.yml +2 -2
- data/resources/unicode_data/blocks/thai.yml +1 -1
- data/resources/unicode_data/blocks/tibetan.yml +4 -4
- data/resources/unicode_data/blocks/tifinagh.yml +1 -1
- data/resources/unicode_data/blocks/vertical_forms.yml +10 -10
- data/spec/collation/trie_dumps_spec.rb +1 -1
- data/spec/core_ext_spec.rb +1 -1
- data/spec/formatters/calendars/datetime_formatter_spec.rb +1 -1
- data/spec/formatters/numbers/abbreviated/long_decimal_formatter_spec.rb +4 -0
- data/spec/formatters/numbers/abbreviated/short_decimal_formatter_spec.rb +4 -0
- data/spec/formatters/numbers/currency_formatter_spec.rb +5 -3
- data/spec/localized/localized_date_spec.rb +36 -27
- data/spec/localized/localized_datetime_spec.rb +10 -1
- data/spec/localized/localized_time_spec.rb +11 -1
- data/spec/readme_spec.rb +10 -11
- data/spec/resources/loader_spec.rb +18 -8
- data/spec/shared/currencies_spec.rb +1 -1
- data/spec/tokenizers/calendars/datetime_tokenizer_spec.rb +2 -2
- data/twitter_cldr.gemspec +1 -0
- metadata +56 -49
data/Gemfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
@@ -10,7 +10,7 @@ end
|
|
10
10
|
|
11
11
|
group :development do
|
12
12
|
gem 'nokogiri'
|
13
|
-
gem 'ruby-cldr', :github => '
|
13
|
+
gem 'ruby-cldr', :github => 'camertron/ruby-cldr'
|
14
14
|
end
|
15
15
|
|
16
16
|
group :test do
|
data/History.txt
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== 2.4.0
|
2
|
+
|
3
|
+
* Upgrade to CLDR v23.
|
4
|
+
* Ability to disable loading of any custom locale resources.
|
5
|
+
* Long and short decimal formatters now respect the :precision option.
|
6
|
+
|
7
|
+
== 2.3.0
|
8
|
+
|
9
|
+
* Adding timezone support to date/time formatting.
|
10
|
+
* Removing the localize method from Date objects. Call to_date on a LocalizedDateTime or LocalizedTime object instead.
|
11
|
+
|
1
12
|
== 2.2.0
|
2
13
|
|
3
14
|
* Relaxing JSON dependency to give users more version flexibility. JSON gem now has no version number in twitter-cldr-rb.
|
data/README.md
CHANGED
@@ -89,8 +89,8 @@ In addition to formatting regular decimals, TwitterCLDR supports short and long
|
|
89
89
|
`Date`, `Time`, and `DateTime` objects are supported:
|
90
90
|
|
91
91
|
```ruby
|
92
|
-
DateTime.now.localize(:es).to_full_s # "lunes, 12 de diciembre de 2011 21:44:57 UTC -
|
93
|
-
DateTime.now.localize(:es).to_long_s # "12 de diciembre de 2011 21:44:57
|
92
|
+
DateTime.now.localize(:es).to_full_s # "lunes, 12 de diciembre de 2011 21:44:57 UTC -08:00"
|
93
|
+
DateTime.now.localize(:es).to_long_s # "12 de diciembre de 2011 21:44:57 UTC"
|
94
94
|
DateTime.now.localize(:es).to_medium_s # "12/12/2011 21:44:57"
|
95
95
|
DateTime.now.localize(:es).to_short_s # "12/12/11 21:44"
|
96
96
|
|
data/Rakefile
CHANGED
@@ -80,7 +80,7 @@ namespace :update do
|
|
80
80
|
TwitterCldr::Resources::TailoringImporter.new(
|
81
81
|
args[:cldr_path] || './vendor/cldr',
|
82
82
|
'./resources/collation/tailoring',
|
83
|
-
args[:icu4j_jar_path] ||'./vendor/icu4j-
|
83
|
+
args[:icu4j_jar_path] ||'./vendor/icu4j-50_1_1.jar'
|
84
84
|
).import(TwitterCldr.supported_locales)
|
85
85
|
end
|
86
86
|
|
data/lib/twitter_cldr.rb
CHANGED
@@ -7,6 +7,6 @@
|
|
7
7
|
TwitterCldr::Localized::LocalizedNumber.localize(klass)
|
8
8
|
end
|
9
9
|
|
10
|
-
[Array,
|
10
|
+
[Array, DateTime, String, Symbol, Time, Hash].each do |klass|
|
11
11
|
TwitterCldr::Localized::const_get("Localized#{klass}").localize(klass)
|
12
12
|
end
|
@@ -9,12 +9,12 @@ module TwitterCldr
|
|
9
9
|
attr_reader :tokenizer
|
10
10
|
|
11
11
|
def format(obj, options = {})
|
12
|
-
process_tokens(self.get_tokens(obj, options), obj)
|
12
|
+
process_tokens(self.get_tokens(obj, options), obj, options)
|
13
13
|
end
|
14
14
|
|
15
15
|
protected
|
16
16
|
|
17
|
-
def process_tokens(tokens, obj)
|
17
|
+
def process_tokens(tokens, obj, options = {})
|
18
18
|
result = ""
|
19
19
|
|
20
20
|
tokens.each_with_index do |token, index|
|
@@ -22,7 +22,7 @@ module TwitterCldr
|
|
22
22
|
when :composite
|
23
23
|
result << eval(process_tokens(token.tokens, obj)).to_s
|
24
24
|
when :pattern
|
25
|
-
result << self.result_for_token(token, index, obj)
|
25
|
+
result << self.result_for_token(token, index, obj, options)
|
26
26
|
else
|
27
27
|
if token.value.size > 0 && token.value[0].chr == "'" && token.value[-1].chr == "'"
|
28
28
|
result << token.value[1..-2]
|
@@ -6,6 +6,8 @@
|
|
6
6
|
# This class has been adapted from Sven Fuch's ruby-cldr gem
|
7
7
|
# See LICENSE for the accompanying license for his contributions
|
8
8
|
|
9
|
+
require 'tzinfo'
|
10
|
+
|
9
11
|
module TwitterCldr
|
10
12
|
module Formatters
|
11
13
|
class DateTimeFormatter < Base
|
@@ -49,8 +51,8 @@ module TwitterCldr
|
|
49
51
|
)
|
50
52
|
end
|
51
53
|
|
52
|
-
def result_for_token(token, index, date)
|
53
|
-
self.send(METHODS[token.value[0].chr], date, token.value, token.value.size)
|
54
|
+
def result_for_token(token, index, date, options = {})
|
55
|
+
self.send(METHODS[token.value[0].chr], date, token.value, token.value.size, options)
|
54
56
|
end
|
55
57
|
|
56
58
|
def additional_format_selector
|
@@ -69,7 +71,7 @@ module TwitterCldr
|
|
69
71
|
|
70
72
|
# there is incomplete era data in CLDR for certain locales like Hindi
|
71
73
|
# fall back if that happens
|
72
|
-
def era(date, pattern, length)
|
74
|
+
def era(date, pattern, length, options = {})
|
73
75
|
choices = case length
|
74
76
|
when 0
|
75
77
|
["", ""]
|
@@ -86,22 +88,22 @@ module TwitterCldr
|
|
86
88
|
end
|
87
89
|
end
|
88
90
|
|
89
|
-
def year(date, pattern, length)
|
91
|
+
def year(date, pattern, length, options = {})
|
90
92
|
year = date.year.to_s
|
91
93
|
year = year.length == 1 ? year : year[-2, 2] if length == 2
|
92
94
|
year = year.rjust(length, '0') if length > 1
|
93
95
|
year
|
94
96
|
end
|
95
97
|
|
96
|
-
def year_of_week_of_year(date, pattern, length)
|
98
|
+
def year_of_week_of_year(date, pattern, length, options = {})
|
97
99
|
raise NotImplementedError
|
98
100
|
end
|
99
101
|
|
100
|
-
def day_of_week_in_month(date, pattern, length) # e.g. 2nd Wed in July
|
102
|
+
def day_of_week_in_month(date, pattern, length, options = {}) # e.g. 2nd Wed in July
|
101
103
|
raise NotImplementedError
|
102
104
|
end
|
103
105
|
|
104
|
-
def quarter(date, pattern, length)
|
106
|
+
def quarter(date, pattern, length, options = {})
|
105
107
|
quarter = (date.month.to_i - 1) / 3 + 1
|
106
108
|
case length
|
107
109
|
when 1
|
@@ -115,7 +117,7 @@ module TwitterCldr
|
|
115
117
|
end
|
116
118
|
end
|
117
119
|
|
118
|
-
def quarter_stand_alone(date, pattern, length)
|
120
|
+
def quarter_stand_alone(date, pattern, length, options = {})
|
119
121
|
quarter = (date.month.to_i - 1) / 3 + 1
|
120
122
|
case length
|
121
123
|
when 1
|
@@ -133,7 +135,7 @@ module TwitterCldr
|
|
133
135
|
end
|
134
136
|
end
|
135
137
|
|
136
|
-
def month(date, pattern, length)
|
138
|
+
def month(date, pattern, length, options = {})
|
137
139
|
case length
|
138
140
|
when 1
|
139
141
|
date.month.to_s
|
@@ -151,7 +153,7 @@ module TwitterCldr
|
|
151
153
|
end
|
152
154
|
end
|
153
155
|
|
154
|
-
def month_stand_alone(date, pattern, length)
|
156
|
+
def month_stand_alone(date, pattern, length, options = {})
|
155
157
|
case length
|
156
158
|
when 1
|
157
159
|
date.month.to_s
|
@@ -168,7 +170,7 @@ module TwitterCldr
|
|
168
170
|
end
|
169
171
|
end
|
170
172
|
|
171
|
-
def day(date, pattern, length)
|
173
|
+
def day(date, pattern, length, options = {})
|
172
174
|
case length
|
173
175
|
when 1
|
174
176
|
date.day.to_s
|
@@ -177,7 +179,7 @@ module TwitterCldr
|
|
177
179
|
end
|
178
180
|
end
|
179
181
|
|
180
|
-
def weekday(date, pattern, length)
|
182
|
+
def weekday(date, pattern, length, options = {})
|
181
183
|
key = WEEKDAY_KEYS[date.wday]
|
182
184
|
case length
|
183
185
|
when 1..3
|
@@ -189,7 +191,7 @@ module TwitterCldr
|
|
189
191
|
end
|
190
192
|
end
|
191
193
|
|
192
|
-
def weekday_local(date, pattern, length)
|
194
|
+
def weekday_local(date, pattern, length, options = {})
|
193
195
|
# "Like E except adds a numeric value depending on the local starting day of the week"
|
194
196
|
# CLDR does not contain data as to which day is the first day of the week, so we will assume Monday (Ruby default)
|
195
197
|
case length
|
@@ -200,7 +202,7 @@ module TwitterCldr
|
|
200
202
|
end
|
201
203
|
end
|
202
204
|
|
203
|
-
def weekday_local_stand_alone(date, pattern, length)
|
205
|
+
def weekday_local_stand_alone(date, pattern, length, options = {})
|
204
206
|
case length
|
205
207
|
when 1
|
206
208
|
weekday_local(date, pattern, length)
|
@@ -209,14 +211,14 @@ module TwitterCldr
|
|
209
211
|
end
|
210
212
|
end
|
211
213
|
|
212
|
-
def period(time, pattern, length)
|
214
|
+
def period(time, pattern, length, options = {})
|
213
215
|
# Always use :wide form. Day-period design was changed in CLDR -
|
214
216
|
# http://cldr.unicode.org/development/development-process/design-proposals/day-period-design that means some
|
215
217
|
# major changes are required for a full support of day periods.
|
216
218
|
@tokenizer.calendar[:periods][:format][:wide][time.strftime('%p').downcase.to_sym]
|
217
219
|
end
|
218
220
|
|
219
|
-
def hour(time, pattern, length)
|
221
|
+
def hour(time, pattern, length, options = {})
|
220
222
|
hour = time.hour
|
221
223
|
hour = case pattern[0, 1]
|
222
224
|
when 'h' # [1-12]
|
@@ -231,29 +233,36 @@ module TwitterCldr
|
|
231
233
|
length == 1 ? hour.to_s : hour.to_s.rjust(length, '0')
|
232
234
|
end
|
233
235
|
|
234
|
-
def minute(time, pattern, length)
|
236
|
+
def minute(time, pattern, length, options = {})
|
235
237
|
length == 1 ? time.min.to_s : time.min.to_s.rjust(length, '0')
|
236
238
|
end
|
237
239
|
|
238
|
-
def second(time, pattern, length)
|
240
|
+
def second(time, pattern, length, options = {})
|
239
241
|
length == 1 ? time.sec.to_s : time.sec.to_s.rjust(length, '0')
|
240
242
|
end
|
241
243
|
|
242
|
-
def second_fraction(time, pattern, length)
|
244
|
+
def second_fraction(time, pattern, length, options = {})
|
243
245
|
raise ArgumentError.new('can not use the S format with more than 6 digits') if length > 6
|
244
246
|
(time.usec.to_f / 10 ** (6 - length)).round.to_s.rjust(length, '0')
|
245
247
|
end
|
246
248
|
|
247
|
-
def timezone(time, pattern, length)
|
249
|
+
def timezone(time, pattern, length, options = {})
|
250
|
+
# ruby is dumb and doesn't let you set non-UTC timezones in dates/times, so we have to pass it as an option instead
|
251
|
+
timezone_info = TZInfo::Timezone.get(options[:timezone] || "UTC")
|
252
|
+
|
248
253
|
case length
|
249
254
|
when 1..3
|
250
|
-
|
255
|
+
timezone_info.current_period.abbreviation.to_s
|
251
256
|
else
|
252
|
-
|
257
|
+
hours = (timezone_info.current_period.utc_offset.to_f / 60 ** 2).abs
|
258
|
+
divisor = hours.to_i
|
259
|
+
minutes = (hours % (divisor == 0 ? 1 : divisor)) * 60
|
260
|
+
sign = timezone_info.current_period.utc_offset < 0 ? "-" : "+"
|
261
|
+
"UTC #{sign}#{divisor.to_s.rjust(2, "0")}:#{minutes.floor.to_s.rjust(2, "0")}"
|
253
262
|
end
|
254
263
|
end
|
255
264
|
|
256
|
-
def timezone_generic_non_location(time, pattern, length)
|
265
|
+
def timezone_generic_non_location(time, pattern, length, options = {})
|
257
266
|
raise NotImplementedError, 'requires timezone translation data'
|
258
267
|
end
|
259
268
|
end
|
@@ -36,8 +36,9 @@ module TwitterCldr
|
|
36
36
|
|
37
37
|
def transform_number(number)
|
38
38
|
if (number < NUMBER_MAX) && (number >= NUMBER_MIN)
|
39
|
-
|
40
|
-
|
39
|
+
power = (((number.to_s.length - 1) / 3) * 3).floor
|
40
|
+
factor = (10 ** power).to_f
|
41
|
+
number / factor
|
41
42
|
else
|
42
43
|
number
|
43
44
|
end
|
@@ -7,26 +7,45 @@ module TwitterCldr
|
|
7
7
|
module Localized
|
8
8
|
|
9
9
|
class LocalizedDate < LocalizedDateTime
|
10
|
-
def to_datetime(time)
|
11
|
-
|
12
|
-
LocalizedDateTime.new(
|
10
|
+
def to_datetime(time = Time.now)
|
11
|
+
dt = DateTime.parse("#{@base_obj.strftime("%Y-%m-%d")}T#{unwrap_time_obj(time).strftime("%H:%M:%S%z")}")
|
12
|
+
LocalizedDateTime.new(dt, @locale, chain_params)
|
13
13
|
end
|
14
14
|
|
15
15
|
def to_time(base = Time.now)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
case @base_obj
|
17
|
+
when Time
|
18
|
+
LocalizedTime.new(@base_obj, @locale, chain_params)
|
19
|
+
when DateTime
|
20
|
+
utc_dt = @base_obj.new_offset(0)
|
21
|
+
|
22
|
+
time = Time.gm(
|
23
|
+
utc_dt.year,
|
24
|
+
utc_dt.month,
|
25
|
+
utc_dt.day,
|
26
|
+
utc_dt.hour,
|
27
|
+
utc_dt.min,
|
28
|
+
utc_dt.sec,
|
29
|
+
utc_dt.sec_fraction * (RUBY_VERSION < '1.9' ? 86400000000 : 1000000)
|
30
|
+
)
|
31
|
+
|
32
|
+
LocalizedTime.new(time, @locale, chain_params)
|
33
|
+
else
|
34
|
+
nil
|
35
|
+
end
|
26
36
|
end
|
27
37
|
|
28
38
|
protected
|
29
39
|
|
40
|
+
def unwrap_time_obj(time)
|
41
|
+
time.is_a?(LocalizedTime) ? time.base_obj : time
|
42
|
+
end
|
43
|
+
|
44
|
+
def base_in_timezone
|
45
|
+
time = unwrap_time_obj(to_time)
|
46
|
+
timezone_info.utc_to_local(time.is_a?(DateTime) ? time.new_offset(0) : time.utc)
|
47
|
+
end
|
48
|
+
|
30
49
|
def formatter_const
|
31
50
|
TwitterCldr::Formatters::DateFormatter
|
32
51
|
end
|
@@ -3,20 +3,23 @@
|
|
3
3
|
# Copyright 2012 Twitter, Inc
|
4
4
|
# http://www.apache.org/licenses/LICENSE-2.0
|
5
5
|
|
6
|
+
require 'tzinfo'
|
7
|
+
|
6
8
|
module TwitterCldr
|
7
9
|
module Localized
|
8
10
|
|
9
11
|
class LocalizedDateTime < LocalizedObject
|
10
|
-
attr_reader :calendar_type
|
12
|
+
attr_reader :calendar_type, :timezone
|
11
13
|
|
12
14
|
def initialize(obj, locale, options = {})
|
13
15
|
super
|
14
16
|
@calendar_type = options[:calendar_type] || TwitterCldr::DEFAULT_CALENDAR_TYPE
|
17
|
+
@timezone = options[:timezone] || "UTC"
|
15
18
|
end
|
16
19
|
|
17
20
|
TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES.each do |format_type|
|
18
21
|
define_method "to_#{format_type}_s" do
|
19
|
-
@formatter.format(
|
22
|
+
@formatter.format(base_in_timezone, chain_params.merge(:type => format_type.to_sym))
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
@@ -42,15 +45,14 @@ module TwitterCldr
|
|
42
45
|
|
43
46
|
def to_s(options = {})
|
44
47
|
if options[:format]
|
45
|
-
@formatter.format(
|
48
|
+
@formatter.format(base_in_timezone, options.merge(:type => :additional))
|
46
49
|
else
|
47
50
|
to_default_s
|
48
51
|
end
|
49
52
|
end
|
50
53
|
|
51
54
|
def to_date
|
52
|
-
|
53
|
-
LocalizedDate.new(date, @locale, :calendar_type => @calendar_type)
|
55
|
+
LocalizedDate.new(@base_obj, @locale, chain_params)
|
54
56
|
end
|
55
57
|
|
56
58
|
def to_time(base = Time.now)
|
@@ -66,14 +68,30 @@ module TwitterCldr
|
|
66
68
|
utc_dt.sec_fraction * (RUBY_VERSION < '1.9' ? 86400000000 : 1000000)
|
67
69
|
)
|
68
70
|
|
69
|
-
LocalizedTime.new(time, @locale,
|
71
|
+
LocalizedTime.new(time, @locale, chain_params)
|
72
|
+
end
|
73
|
+
|
74
|
+
def with_timezone(timezone)
|
75
|
+
self.class.new(@base_obj, @locale, chain_params.merge(:timezone => timezone))
|
70
76
|
end
|
71
77
|
|
72
78
|
protected
|
73
79
|
|
80
|
+
def chain_params
|
81
|
+
{ :calendar_type => @calendar_type, :timezone => @timezone }
|
82
|
+
end
|
83
|
+
|
84
|
+
def base_in_timezone
|
85
|
+
timezone_info.utc_to_local(@base_obj.new_offset(0))
|
86
|
+
end
|
87
|
+
|
74
88
|
def formatter_const
|
75
89
|
TwitterCldr::Formatters::DateTimeFormatter
|
76
90
|
end
|
91
|
+
|
92
|
+
def timezone_info
|
93
|
+
(@@timezone_info ||= {})[@timezone] ||= TZInfo::Timezone.get(@timezone)
|
94
|
+
end
|
77
95
|
end
|
78
96
|
|
79
97
|
end
|
@@ -9,23 +9,32 @@ module TwitterCldr
|
|
9
9
|
class LocalizedTime < LocalizedDateTime
|
10
10
|
def to_datetime(date)
|
11
11
|
date_obj = date.is_a?(LocalizedDate) ? date.base_obj : date
|
12
|
-
|
12
|
+
dt = DateTime.parse("#{date_obj.strftime("%Y-%m-%d")}T#{@base_obj.strftime("%H:%M:%S%z")}")
|
13
|
+
LocalizedDateTime.new(dt, @locale, chain_params)
|
13
14
|
end
|
14
15
|
|
15
16
|
def to_time(base_time = Time.now)
|
16
17
|
self
|
17
18
|
end
|
18
19
|
|
20
|
+
def to_date
|
21
|
+
LocalizedDate.new(@base_obj, @locale, chain_params)
|
22
|
+
end
|
23
|
+
|
19
24
|
def gmtime
|
20
|
-
LocalizedTime.new(@base_obj.gmtime, @locale,
|
25
|
+
LocalizedTime.new(@base_obj.gmtime, @locale, chain_params)
|
21
26
|
end
|
22
27
|
|
23
28
|
def localtime
|
24
|
-
LocalizedTime.new(@base_obj.localtime, @locale,
|
29
|
+
LocalizedTime.new(@base_obj.localtime, @locale, chain_params)
|
25
30
|
end
|
26
31
|
|
27
32
|
protected
|
28
33
|
|
34
|
+
def base_in_timezone
|
35
|
+
timezone_info.utc_to_local(@base_obj.utc)
|
36
|
+
end
|
37
|
+
|
29
38
|
def formatter_const
|
30
39
|
TwitterCldr::Formatters::TimeFormatter
|
31
40
|
end
|