twitter_cldr 1.9.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +7 -0
- data/History.txt +11 -0
- data/README.md +93 -13
- data/Rakefile +27 -6
- data/lib/twitter_cldr/formatters.rb +15 -12
- data/lib/twitter_cldr/formatters/base.rb +1 -1
- data/lib/twitter_cldr/formatters/calendars/datetime_formatter.rb +18 -3
- data/lib/twitter_cldr/formatters/calendars/timespan_formatter.rb +24 -26
- data/lib/twitter_cldr/formatters/numbers/abbreviated/abbreviated_number_formatter.rb +47 -0
- data/lib/twitter_cldr/formatters/numbers/abbreviated/long_decimal_formatter.rb +18 -0
- data/lib/twitter_cldr/formatters/numbers/abbreviated/short_decimal_formatter.rb +18 -0
- data/lib/twitter_cldr/formatters/numbers/currency_formatter.rb +22 -17
- data/lib/twitter_cldr/formatters/numbers/decimal_formatter.rb +0 -9
- data/lib/twitter_cldr/formatters/numbers/helpers/base.rb +1 -1
- data/lib/twitter_cldr/formatters/numbers/number_formatter.rb +25 -10
- data/lib/twitter_cldr/formatters/numbers/percent_formatter.rb +9 -6
- data/lib/twitter_cldr/localized/localized_datetime.rb +6 -2
- data/lib/twitter_cldr/localized/localized_number.rb +9 -3
- data/lib/twitter_cldr/localized/localized_timespan.rb +1 -1
- data/lib/twitter_cldr/resources.rb +13 -12
- data/lib/twitter_cldr/resources/custom_locales_resources_importer.rb +1 -1
- data/lib/twitter_cldr/resources/download.rb +1 -1
- data/lib/twitter_cldr/resources/locales_resources_importer.rb +10 -6
- data/lib/twitter_cldr/shared/bidi.rb +27 -27
- data/lib/twitter_cldr/shared/currencies.rb +20 -13
- data/lib/twitter_cldr/tokenizers.rb +10 -9
- data/lib/twitter_cldr/tokenizers/base.rb +33 -21
- data/lib/twitter_cldr/tokenizers/calendars/additional_date_format_selector.rb +86 -0
- data/lib/twitter_cldr/tokenizers/calendars/date_tokenizer.rb +20 -11
- data/lib/twitter_cldr/tokenizers/calendars/datetime_tokenizer.rb +50 -13
- data/lib/twitter_cldr/tokenizers/calendars/time_tokenizer.rb +19 -10
- data/lib/twitter_cldr/tokenizers/calendars/timespan_tokenizer.rb +32 -32
- data/lib/twitter_cldr/tokenizers/numbers/number_tokenizer.rb +45 -22
- data/lib/twitter_cldr/utils.rb +16 -1
- data/lib/twitter_cldr/version.rb +1 -1
- data/resources/collation/tailoring/af.yml +1 -0
- data/resources/collation/tailoring/ar.yml +3 -2
- data/resources/collation/tailoring/be.yml +7 -0
- data/resources/collation/tailoring/bg.yml +5 -0
- data/resources/collation/tailoring/bn.yml +9 -0
- data/resources/collation/tailoring/ca.yml +3 -2
- data/resources/collation/tailoring/cs.yml +3 -2
- data/resources/collation/tailoring/cy.yml +51 -0
- data/resources/collation/tailoring/da.yml +3 -2
- data/resources/collation/tailoring/de.yml +1 -0
- data/resources/collation/tailoring/el.yml +1 -0
- data/resources/collation/tailoring/en.yml +1 -0
- data/resources/collation/tailoring/es.yml +3 -2
- data/resources/collation/tailoring/eu.yml +1 -0
- data/resources/collation/tailoring/fa.yml +3 -2
- data/resources/collation/tailoring/fi.yml +3 -2
- data/resources/collation/tailoring/fil.yml +3 -2
- data/resources/collation/tailoring/fr.yml +1 -0
- data/resources/collation/tailoring/ga.yml +5 -0
- data/resources/collation/tailoring/gl.yml +5 -0
- data/resources/collation/tailoring/he.yml +1 -0
- data/resources/collation/tailoring/hi.yml +3 -2
- data/resources/collation/tailoring/hu.yml +3 -2
- data/resources/collation/tailoring/id.yml +1 -0
- data/resources/collation/tailoring/it.yml +1 -0
- data/resources/collation/tailoring/ja.yml +107 -54
- data/resources/collation/tailoring/ko.yml +3 -2
- data/resources/collation/tailoring/lv.yml +35 -0
- data/resources/collation/tailoring/ms.yml +1 -0
- data/resources/collation/tailoring/nb.yml +3 -2
- data/resources/collation/tailoring/nl.yml +1 -0
- data/resources/collation/tailoring/pl.yml +3 -2
- data/resources/collation/tailoring/pt.yml +1 -0
- data/resources/collation/tailoring/ro.yml +31 -0
- data/resources/collation/tailoring/ru.yml +1 -0
- data/resources/collation/tailoring/sk.yml +35 -0
- data/resources/collation/tailoring/sq.yml +65 -0
- data/resources/collation/tailoring/sr.yml +5 -0
- data/resources/collation/tailoring/sv.yml +3 -2
- data/resources/collation/tailoring/ta.yml +57 -0
- data/resources/collation/tailoring/th.yml +3 -2
- data/resources/collation/tailoring/tr.yml +3 -2
- data/resources/collation/tailoring/uk.yml +3 -2
- data/resources/collation/tailoring/ur.yml +3 -2
- data/resources/collation/tailoring/zh-Hant.yml +3 -2
- data/resources/collation/tailoring/zh.yml +3 -2
- 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/cy.dump +0 -0
- data/resources/collation/tries/ga.dump +0 -0
- data/resources/collation/tries/gl.dump +0 -0
- data/resources/collation/tries/lv.dump +0 -0
- data/resources/collation/tries/ro.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/ta.dump +0 -0
- data/resources/custom/locales/ar/units.yml +6 -6
- data/resources/custom/locales/be/units.yml +27 -0
- data/resources/custom/locales/bg/units.yml +19 -0
- data/resources/custom/locales/bn/units.yml +7 -0
- data/resources/custom/locales/cs/units.yml +3 -3
- data/resources/custom/locales/cy/units.yml +35 -0
- data/resources/custom/locales/fil/units.yml +2 -2
- data/resources/custom/locales/ga/units.yml +24 -0
- data/resources/custom/locales/gl/units.yml +19 -0
- data/resources/custom/locales/hu/plurals.yml +3 -0
- data/resources/custom/locales/hu/units.yml +4 -0
- data/resources/custom/locales/lv/units.yml +23 -0
- data/resources/custom/locales/ms/units.yml +1 -1
- data/resources/custom/locales/ro/units.yml +23 -0
- data/resources/custom/locales/sk/units.yml +23 -0
- data/resources/custom/locales/sr/units.yml +27 -0
- data/resources/custom/locales/ta/units.yml +11 -0
- data/resources/custom/locales/th/calendars.yml +14 -0
- data/resources/locales/af/calendars.yml +56 -0
- data/resources/locales/af/currencies.yml +358 -0
- data/resources/locales/af/languages.yml +23 -3
- data/resources/locales/af/numbers.yml +22 -8
- data/resources/locales/af/units.yml +26 -54
- data/resources/locales/ar/calendars.yml +99 -6
- data/resources/locales/ar/currencies.yml +1491 -0
- data/resources/locales/ar/languages.yml +33 -6
- data/resources/locales/ar/numbers.yml +27 -14
- data/resources/locales/ar/units.yml +31 -31
- data/resources/locales/be/calendars.yml +229 -0
- data/resources/locales/be/currencies.yml +66 -0
- data/resources/locales/be/languages.yml +149 -0
- data/resources/locales/be/layout.yml +4 -0
- data/resources/locales/be/lists.yml +7 -0
- data/resources/locales/be/numbers.yml +43 -0
- data/resources/locales/be/plurals.yml +5 -0
- data/resources/locales/be/units.yml +87 -0
- data/resources/locales/bg/calendars.yml +220 -0
- data/resources/locales/bg/currencies.yml +773 -0
- data/resources/locales/bg/languages.yml +513 -0
- data/resources/locales/bg/layout.yml +4 -0
- data/resources/locales/bg/lists.yml +7 -0
- data/resources/locales/bg/numbers.yml +57 -0
- data/resources/locales/bg/plurals.yml +3 -0
- data/resources/locales/bg/units.yml +108 -0
- data/resources/locales/bn/calendars.yml +205 -0
- data/resources/locales/bn/currencies.yml +564 -0
- data/resources/locales/bn/languages.yml +513 -0
- data/resources/locales/bn/layout.yml +4 -0
- data/resources/locales/bn/lists.yml +7 -0
- data/resources/locales/bn/numbers.yml +57 -0
- data/resources/locales/bn/plurals.yml +3 -0
- data/resources/locales/bn/units.yml +108 -0
- data/resources/locales/ca/calendars.yml +70 -21
- data/resources/locales/ca/currencies.yml +904 -0
- data/resources/locales/ca/languages.yml +70 -5
- data/resources/locales/ca/numbers.yml +19 -6
- data/resources/locales/ca/units.yml +0 -28
- data/resources/locales/cs/calendars.yml +73 -27
- data/resources/locales/cs/currencies.yml +1063 -0
- data/resources/locales/cs/languages.yml +113 -31
- data/resources/locales/cs/numbers.yml +17 -4
- data/resources/locales/cs/units.yml +0 -28
- data/resources/locales/cy/calendars.yml +266 -0
- data/resources/locales/cy/currencies.yml +54 -0
- data/resources/locales/cy/languages.yml +92 -0
- data/resources/locales/cy/layout.yml +4 -0
- data/resources/locales/cy/lists.yml +7 -0
- data/resources/locales/cy/numbers.yml +49 -0
- data/resources/locales/cy/plurals.yml +4 -0
- data/resources/locales/cy/units.yml +73 -0
- data/resources/locales/da/calendars.yml +117 -16
- data/resources/locales/da/currencies.yml +814 -0
- data/resources/locales/da/languages.yml +66 -5
- data/resources/locales/da/numbers.yml +16 -3
- data/resources/locales/da/units.yml +21 -35
- data/resources/locales/de/calendars.yml +115 -17
- data/resources/locales/de/currencies.yml +843 -0
- data/resources/locales/de/languages.yml +5 -3
- data/resources/locales/de/numbers.yml +18 -5
- data/resources/locales/de/units.yml +0 -28
- data/resources/locales/el/calendars.yml +61 -8
- data/resources/locales/el/currencies.yml +866 -0
- data/resources/locales/el/languages.yml +61 -5
- data/resources/locales/el/numbers.yml +18 -5
- data/resources/locales/el/units.yml +7 -42
- data/resources/locales/en/calendars.yml +43 -4
- data/resources/locales/en/currencies.yml +912 -0
- data/resources/locales/en/languages.yml +26 -6
- data/resources/locales/en/numbers.yml +17 -4
- data/resources/locales/es/calendars.yml +60 -0
- data/resources/locales/es/currencies.yml +820 -0
- data/resources/locales/es/languages.yml +66 -1
- data/resources/locales/es/numbers.yml +20 -7
- data/resources/locales/es/units.yml +0 -28
- data/resources/locales/eu/calendars.yml +43 -2
- data/resources/locales/eu/currencies.yml +378 -0
- data/resources/locales/eu/languages.yml +29 -13
- data/resources/locales/eu/numbers.yml +17 -4
- data/resources/locales/eu/units.yml +22 -43
- data/resources/locales/fa/calendars.yml +57 -0
- data/resources/locales/fa/currencies.yml +449 -0
- data/resources/locales/fa/languages.yml +8 -3
- data/resources/locales/fa/numbers.yml +20 -7
- data/resources/locales/fa/units.yml +0 -42
- data/resources/locales/fi/calendars.yml +49 -1
- data/resources/locales/fi/currencies.yml +903 -0
- data/resources/locales/fi/languages.yml +58 -2
- data/resources/locales/fi/numbers.yml +25 -12
- data/resources/locales/fi/units.yml +0 -28
- data/resources/locales/fil/calendars.yml +51 -0
- data/resources/locales/fil/currencies.yml +357 -0
- data/resources/locales/fil/languages.yml +25 -8
- data/resources/locales/fil/numbers.yml +18 -5
- data/resources/locales/fil/units.yml +14 -28
- data/resources/locales/fr/calendars.yml +114 -12
- data/resources/locales/fr/currencies.yml +884 -0
- data/resources/locales/fr/languages.yml +43 -9
- data/resources/locales/fr/numbers.yml +22 -9
- data/resources/locales/fr/units.yml +2 -30
- data/resources/locales/ga/calendars.yml +187 -0
- data/resources/locales/ga/currencies.yml +513 -0
- data/resources/locales/ga/languages.yml +147 -0
- data/resources/locales/ga/layout.yml +4 -0
- data/resources/locales/ga/lists.yml +7 -0
- data/resources/locales/ga/numbers.yml +43 -0
- data/resources/locales/ga/plurals.yml +4 -0
- data/resources/locales/ga/units.yml +66 -0
- data/resources/locales/gl/calendars.yml +216 -0
- data/resources/locales/gl/currencies.yml +476 -0
- data/resources/locales/gl/languages.yml +213 -0
- data/resources/locales/gl/layout.yml +4 -0
- data/resources/locales/gl/lists.yml +7 -0
- data/resources/locales/gl/numbers.yml +57 -0
- data/resources/locales/gl/plurals.yml +3 -0
- data/resources/locales/gl/units.yml +108 -0
- data/resources/locales/he/calendars.yml +70 -18
- data/resources/locales/he/currencies.yml +497 -0
- data/resources/locales/he/languages.yml +301 -7
- data/resources/locales/he/lists.yml +2 -2
- data/resources/locales/he/numbers.yml +23 -8
- data/resources/locales/he/plurals.yml +3 -2
- data/resources/locales/he/units.yml +72 -30
- data/resources/locales/hi/calendars.yml +54 -1
- data/resources/locales/hi/currencies.yml +388 -0
- data/resources/locales/hi/languages.yml +2 -0
- data/resources/locales/hi/numbers.yml +21 -8
- data/resources/locales/hi/units.yml +15 -29
- data/resources/locales/hu/calendars.yml +52 -5
- data/resources/locales/hu/currencies.yml +640 -0
- data/resources/locales/hu/languages.yml +60 -4
- data/resources/locales/hu/numbers.yml +25 -12
- data/resources/locales/hu/units.yml +1 -29
- data/resources/locales/id/calendars.yml +125 -21
- data/resources/locales/id/currencies.yml +603 -0
- data/resources/locales/id/languages.yml +113 -51
- data/resources/locales/id/numbers.yml +16 -3
- data/resources/locales/id/units.yml +0 -28
- data/resources/locales/it/calendars.yml +59 -6
- data/resources/locales/it/currencies.yml +722 -0
- data/resources/locales/it/languages.yml +77 -5
- data/resources/locales/it/numbers.yml +22 -9
- data/resources/locales/it/units.yml +0 -14
- data/resources/locales/ja/calendars.yml +55 -5
- data/resources/locales/ja/currencies.yml +602 -0
- data/resources/locales/ja/languages.yml +103 -43
- data/resources/locales/ja/numbers.yml +18 -5
- data/resources/locales/ja/units.yml +6 -34
- data/resources/locales/ko/calendars.yml +50 -0
- data/resources/locales/ko/currencies.yml +596 -0
- data/resources/locales/ko/languages.yml +75 -8
- data/resources/locales/ko/numbers.yml +17 -4
- data/resources/locales/ko/units.yml +0 -28
- data/resources/locales/lv/calendars.yml +275 -0
- data/resources/locales/lv/currencies.yml +765 -0
- data/resources/locales/lv/languages.yml +576 -0
- data/resources/locales/lv/layout.yml +4 -0
- data/resources/locales/lv/lists.yml +7 -0
- data/resources/locales/lv/numbers.yml +58 -0
- data/resources/locales/lv/plurals.yml +4 -0
- data/resources/locales/lv/units.yml +136 -0
- data/resources/locales/ms/calendars.yml +86 -4
- data/resources/locales/ms/currencies.yml +341 -0
- data/resources/locales/ms/languages.yml +25 -3
- data/resources/locales/ms/numbers.yml +19 -6
- data/resources/locales/ms/units.yml +0 -56
- data/resources/locales/nb/calendars.yml +48 -1
- data/resources/locales/nb/currencies.yml +846 -0
- data/resources/locales/nb/languages.yml +44 -2
- data/resources/locales/nb/numbers.yml +16 -3
- data/resources/locales/nb/units.yml +6 -28
- data/resources/locales/nl/calendars.yml +110 -9
- data/resources/locales/nl/currencies.yml +640 -0
- data/resources/locales/nl/languages.yml +68 -8
- data/resources/locales/nl/numbers.yml +25 -12
- data/resources/locales/nl/units.yml +14 -28
- data/resources/locales/pl/calendars.yml +53 -6
- data/resources/locales/pl/currencies.yml +1100 -0
- data/resources/locales/pl/languages.yml +13 -6
- data/resources/locales/pl/lists.yml +2 -2
- data/resources/locales/pl/numbers.yml +18 -5
- data/resources/locales/pl/units.yml +51 -92
- data/resources/locales/pt/calendars.yml +121 -9
- data/resources/locales/pt/currencies.yml +904 -0
- data/resources/locales/pt/languages.yml +5 -3
- data/resources/locales/pt/numbers.yml +17 -4
- data/resources/locales/pt/units.yml +0 -28
- data/resources/locales/ro/calendars.yml +278 -0
- data/resources/locales/ro/currencies.yml +946 -0
- data/resources/locales/ro/languages.yml +576 -0
- data/resources/locales/ro/layout.yml +4 -0
- data/resources/locales/ro/lists.yml +7 -0
- data/resources/locales/ro/numbers.yml +58 -0
- data/resources/locales/ro/plurals.yml +3 -0
- data/resources/locales/ro/units.yml +136 -0
- data/resources/locales/ru/calendars.yml +72 -12
- data/resources/locales/ru/currencies.yml +1061 -0
- data/resources/locales/ru/languages.yml +51 -6
- data/resources/locales/ru/numbers.yml +21 -5
- data/resources/locales/ru/units.yml +0 -28
- data/resources/locales/sk/calendars.yml +275 -0
- data/resources/locales/sk/currencies.yml +713 -0
- data/resources/locales/sk/languages.yml +576 -0
- data/resources/locales/sk/layout.yml +4 -0
- data/resources/locales/sk/lists.yml +7 -0
- data/resources/locales/sk/numbers.yml +58 -0
- data/resources/locales/sk/plurals.yml +3 -0
- data/resources/locales/sk/units.yml +136 -0
- data/resources/locales/sq/calendars.yml +188 -0
- data/resources/locales/sq/currencies.yml +56 -0
- data/resources/locales/sq/languages.yml +17 -0
- data/resources/locales/sq/layout.yml +4 -0
- data/resources/locales/sq/lists.yml +7 -0
- data/resources/locales/sq/numbers.yml +43 -0
- data/resources/locales/sq/plurals.yml +3 -0
- data/resources/locales/sq/units.yml +73 -0
- data/resources/locales/sr/calendars.yml +285 -0
- data/resources/locales/sr/currencies.yml +1494 -0
- data/resources/locales/sr/languages.yml +513 -0
- data/resources/locales/sr/layout.yml +4 -0
- data/resources/locales/sr/lists.yml +7 -0
- data/resources/locales/sr/numbers.yml +59 -0
- data/resources/locales/sr/plurals.yml +5 -0
- data/resources/locales/sr/units.yml +164 -0
- data/resources/locales/sv/calendars.yml +59 -1
- data/resources/locales/sv/currencies.yml +919 -0
- data/resources/locales/sv/languages.yml +47 -2
- data/resources/locales/sv/numbers.yml +27 -12
- data/resources/locales/sv/units.yml +4 -32
- data/resources/locales/ta/calendars.yml +264 -0
- data/resources/locales/ta/currencies.yml +346 -0
- data/resources/locales/ta/languages.yml +512 -0
- data/resources/locales/ta/layout.yml +4 -0
- data/resources/locales/ta/lists.yml +7 -0
- data/resources/locales/ta/numbers.yml +57 -0
- data/resources/locales/ta/plurals.yml +3 -0
- data/resources/locales/ta/units.yml +108 -0
- data/resources/locales/th/calendars.yml +125 -27
- data/resources/locales/th/currencies.yml +602 -0
- data/resources/locales/th/languages.yml +70 -5
- data/resources/locales/th/numbers.yml +24 -11
- data/resources/locales/th/units.yml +0 -28
- data/resources/locales/tr/calendars.yml +62 -12
- data/resources/locales/tr/currencies.yml +571 -0
- data/resources/locales/tr/languages.yml +94 -29
- data/resources/locales/tr/numbers.yml +19 -6
- data/resources/locales/tr/units.yml +1 -29
- data/resources/locales/uk/calendars.yml +52 -0
- data/resources/locales/uk/currencies.yml +799 -0
- data/resources/locales/uk/languages.yml +57 -2
- data/resources/locales/uk/numbers.yml +18 -5
- data/resources/locales/uk/units.yml +0 -28
- data/resources/locales/ur/calendars.yml +96 -32
- data/resources/locales/ur/currencies.yml +360 -0
- data/resources/locales/ur/languages.yml +49 -32
- data/resources/locales/ur/numbers.yml +13 -13
- data/resources/locales/ur/units.yml +28 -56
- data/resources/locales/zh-Hant/calendars.yml +59 -1
- data/resources/locales/zh-Hant/currencies.yml +602 -0
- data/resources/locales/zh-Hant/languages.yml +74 -8
- data/resources/locales/zh-Hant/numbers.yml +17 -4
- data/resources/locales/zh-Hant/units.yml +0 -28
- data/resources/locales/zh/calendars.yml +95 -35
- data/resources/locales/zh/currencies.yml +602 -0
- data/resources/locales/zh/languages.yml +116 -46
- data/resources/locales/zh/numbers.yml +20 -7
- data/resources/locales/zh/units.yml +6 -34
- data/resources/shared/currency_digits_and_rounding.yml +187 -0
- data/spec/bidi/bidi_spec.rb +1 -1
- data/spec/collation/tailoring_spec.rb +29 -25
- data/spec/formatters/calendars/datetime_formatter_spec.rb +50 -2
- data/spec/formatters/calendars/timespan_formatter_spec.rb +52 -8
- data/spec/formatters/numbers/abbreviated/abbreviated_number_formatter_spec.rb +81 -0
- data/spec/formatters/numbers/abbreviated/long_decimal_formatter_spec.rb +37 -0
- data/spec/formatters/numbers/abbreviated/short_decimal_formatter_spec.rb +37 -0
- data/spec/formatters/numbers/currency_formatter_spec.rb +10 -1
- data/spec/localized/localized_date_spec.rb +11 -11
- data/spec/localized/localized_datetime_spec.rb +27 -3
- data/spec/localized/localized_number_spec.rb +34 -6
- data/spec/localized/localized_time_spec.rb +1 -1
- data/spec/readme_spec.rb +24 -3
- data/spec/shared/currencies_spec.rb +7 -9
- data/spec/spec_helper.rb +7 -0
- data/spec/tokenizers/base_spec.rb +71 -21
- data/spec/tokenizers/calendars/additional_date_format_selector_spec.rb +131 -0
- data/spec/tokenizers/calendars/datetime_tokenizer_spec.rb +54 -27
- data/spec/tokenizers/calendars/time_tokenizer_spec.rb +16 -16
- data/spec/tokenizers/numbers/number_tokenizer_spec.rb +9 -21
- data/spec/utils/yaml/yaml_spec.rb +21 -16
- data/spec/utils_spec.rb +6 -2
- metadata +218 -37
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
module TwitterCldr
|
7
|
+
module Formatters
|
8
|
+
class LongDecimalFormatter < AbbreviatedNumberFormatter
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def get_type
|
13
|
+
:long_decimal
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2012 Twitter, Inc
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
5
|
+
|
6
|
+
module TwitterCldr
|
7
|
+
module Formatters
|
8
|
+
class ShortDecimalFormatter < AbbreviatedNumberFormatter
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def get_type
|
13
|
+
:short_decimal
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -9,27 +9,32 @@ module TwitterCldr
|
|
9
9
|
DEFAULT_CURRENCY_SYMBOL = "$"
|
10
10
|
DEFAULT_PRECISION = 2
|
11
11
|
|
12
|
-
def initialize(options = {})
|
13
|
-
@tokenizer = TwitterCldr::Tokenizers::NumberTokenizer.new(:locale => self.extract_locale(options), :type => :currency)
|
14
|
-
super
|
15
|
-
end
|
16
|
-
|
17
12
|
def format(number, options = {})
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
13
|
+
options[:currency] ||= "USD"
|
14
|
+
currency = TwitterCldr::Shared::Currencies.for_code(options[:currency])
|
15
|
+
currency ||= TwitterCldr::Shared::Currencies.for_country(options[:currency])
|
16
|
+
currency ||= { :symbol => options[:currency], :currency => options[:currency] }
|
17
|
+
|
18
|
+
digits_and_rounding = resource(options[:currency])
|
19
|
+
options[:precision] ||= digits_and_rounding[:digits]
|
20
|
+
options[:rounding] ||= digits_and_rounding[:rounding]
|
21
|
+
|
22
|
+
super(number, options).gsub('¤', (currency[:symbol] || currency[:currency].to_s))
|
23
|
+
end
|
25
24
|
|
26
|
-
|
25
|
+
private
|
26
|
+
def resource(code)
|
27
|
+
@resource ||= TwitterCldr.get_resource(:shared, :currency_digits_and_rounding)
|
28
|
+
@resource[code.to_sym] || @resource[:DEFAULT]
|
27
29
|
end
|
28
30
|
|
29
|
-
def
|
30
|
-
|
31
|
-
|
31
|
+
def get_tokens(obj, options = {})
|
32
|
+
opts = options.dup.merge(
|
33
|
+
:sign => obj.abs == obj ? :positive : :negative,
|
34
|
+
:type => :currency
|
35
|
+
)
|
36
|
+
@tokenizer.tokens(opts)
|
32
37
|
end
|
33
38
|
end
|
34
39
|
end
|
35
|
-
end
|
40
|
+
end
|
@@ -6,20 +6,11 @@
|
|
6
6
|
module TwitterCldr
|
7
7
|
module Formatters
|
8
8
|
class DecimalFormatter < NumberFormatter
|
9
|
-
def initialize(options = {})
|
10
|
-
@tokenizer = TwitterCldr::Tokenizers::NumberTokenizer.new(:locale => self.extract_locale(options), :type => :decimal)
|
11
|
-
super
|
12
|
-
end
|
13
|
-
|
14
9
|
def format(number, options = {})
|
15
10
|
super(number, options)
|
16
11
|
rescue TypeError, ArgumentError
|
17
12
|
number
|
18
13
|
end
|
19
|
-
|
20
|
-
def default_format_options_for(number)
|
21
|
-
{ :precision => precision_from(number) }
|
22
|
-
end
|
23
14
|
end
|
24
15
|
end
|
25
16
|
end
|
@@ -10,7 +10,7 @@ module TwitterCldr
|
|
10
10
|
def interpolate(string, value, orientation = :right)
|
11
11
|
value = value.to_s
|
12
12
|
length = value.length
|
13
|
-
start
|
13
|
+
start = orientation == :left ? 0 : -length
|
14
14
|
|
15
15
|
string = string.dup
|
16
16
|
string = string.ljust(length, '#') if string.length < length
|
@@ -11,13 +11,15 @@ module TwitterCldr
|
|
11
11
|
DEFAULT_SYMBOLS = { :group => ',', :decimal => '.', :plus_sign => '+', :minus_sign => '-' }
|
12
12
|
|
13
13
|
def initialize(options = {})
|
14
|
+
@tokenizer = TwitterCldr::Tokenizers::NumberTokenizer.new(:locale => extract_locale(options))
|
14
15
|
@symbols = DEFAULT_SYMBOLS.merge(tokenizer.symbols)
|
15
16
|
end
|
16
17
|
|
17
|
-
def format(number,
|
18
|
-
opts
|
19
|
-
prefix, suffix, integer_format, fraction_format = *partition_tokens(
|
20
|
-
|
18
|
+
def format(number, opts = {})
|
19
|
+
opts[:precision] ||= precision_from(number)
|
20
|
+
prefix, suffix, integer_format, fraction_format = *partition_tokens(get_tokens(number, opts))
|
21
|
+
number = transform_number(number)
|
22
|
+
|
21
23
|
int, fraction = parse_number(number, opts)
|
22
24
|
result = integer_format.apply(int, opts)
|
23
25
|
result << fraction_format.apply(fraction, opts) if fraction
|
@@ -26,6 +28,10 @@ module TwitterCldr
|
|
26
28
|
|
27
29
|
protected
|
28
30
|
|
31
|
+
def transform_number(number)
|
32
|
+
number # noop for base class
|
33
|
+
end
|
34
|
+
|
29
35
|
def partition_tokens(tokens)
|
30
36
|
[tokens[0] || "",
|
31
37
|
tokens[2] || "",
|
@@ -34,14 +40,22 @@ module TwitterCldr
|
|
34
40
|
end
|
35
41
|
|
36
42
|
def parse_number(number, options = {})
|
37
|
-
precision = options[:precision] ||
|
38
|
-
|
43
|
+
precision = options[:precision] || precision_from(number)
|
44
|
+
rounding = options[:rounding] || 0
|
45
|
+
|
46
|
+
number = "%.#{precision}f" % round_to(number, precision, rounding).abs
|
39
47
|
number.split(".")
|
40
48
|
end
|
41
49
|
|
42
|
-
def round_to(number, precision)
|
50
|
+
def round_to(number, precision, rounding = 0)
|
43
51
|
factor = 10 ** precision
|
44
|
-
(number * factor).round.to_f / factor
|
52
|
+
result = (number * factor).round.to_f / factor
|
53
|
+
if rounding > 0
|
54
|
+
rounding = rounding.to_f / factor
|
55
|
+
result = (result * (1.0 / rounding)).round.to_f / (1.0 / rounding)
|
56
|
+
end
|
57
|
+
|
58
|
+
result
|
45
59
|
end
|
46
60
|
|
47
61
|
def precision_from(num)
|
@@ -50,8 +64,9 @@ module TwitterCldr
|
|
50
64
|
end
|
51
65
|
|
52
66
|
def get_tokens(obj, options = {})
|
53
|
-
obj.abs == obj ?
|
67
|
+
opts = options.dup.merge(:sign => obj.abs == obj ? :positive : :negative)
|
68
|
+
@tokenizer.tokens(opts)
|
54
69
|
end
|
55
70
|
end
|
56
71
|
end
|
57
|
-
end
|
72
|
+
end
|
@@ -8,11 +8,6 @@ module TwitterCldr
|
|
8
8
|
class PercentFormatter < NumberFormatter
|
9
9
|
DEFAULT_PERCENT_SIGN = "%"
|
10
10
|
|
11
|
-
def initialize(options = {})
|
12
|
-
@tokenizer = TwitterCldr::Tokenizers::NumberTokenizer.new(:locale => self.extract_locale(options), :type => :percent)
|
13
|
-
super
|
14
|
-
end
|
15
|
-
|
16
11
|
def format(number, options = {})
|
17
12
|
super(number, options).gsub('¤', @tokenizer.symbols[:percent_sign] || DEFAULT_PERCENT_SIGN)
|
18
13
|
end
|
@@ -20,6 +15,14 @@ module TwitterCldr
|
|
20
15
|
def default_format_options_for(number)
|
21
16
|
{ :precision => 0 }
|
22
17
|
end
|
18
|
+
|
19
|
+
def get_tokens(obj, options = {})
|
20
|
+
opts = options.dup.merge(
|
21
|
+
:sign => obj.abs == obj ? :positive : :negative,
|
22
|
+
:type => :percent
|
23
|
+
)
|
24
|
+
@tokenizer.tokens(opts)
|
25
|
+
end
|
23
26
|
end
|
24
27
|
end
|
25
|
-
end
|
28
|
+
end
|
@@ -40,8 +40,12 @@ module TwitterCldr
|
|
40
40
|
TwitterCldr::Localized::LocalizedTimespan.new(seconds, options.merge(:locale => @locale))
|
41
41
|
end
|
42
42
|
|
43
|
-
def to_s
|
44
|
-
|
43
|
+
def to_s(options = {})
|
44
|
+
if options[:format]
|
45
|
+
@formatter.format(@base_obj, options.merge(:type => :additional))
|
46
|
+
else
|
47
|
+
to_default_s
|
48
|
+
end
|
45
49
|
end
|
46
50
|
|
47
51
|
def to_date
|
@@ -7,8 +7,14 @@ module TwitterCldr
|
|
7
7
|
module Localized
|
8
8
|
|
9
9
|
class LocalizedNumber < LocalizedObject
|
10
|
-
TYPES = [:decimal, :currency, :percent]
|
11
10
|
DEFAULT_TYPE = :decimal
|
11
|
+
TYPES = [
|
12
|
+
:decimal,
|
13
|
+
:short_decimal,
|
14
|
+
:long_decimal,
|
15
|
+
:currency,
|
16
|
+
:percent,
|
17
|
+
]
|
12
18
|
|
13
19
|
attr_reader :type
|
14
20
|
|
@@ -28,7 +34,7 @@ module TwitterCldr
|
|
28
34
|
end
|
29
35
|
|
30
36
|
def to_s(options = {})
|
31
|
-
@formatter.format(@base_obj, options)
|
37
|
+
@formatter.format(@base_obj, options.merge(:type => @type))
|
32
38
|
end
|
33
39
|
|
34
40
|
def plural_rule
|
@@ -38,7 +44,7 @@ module TwitterCldr
|
|
38
44
|
protected
|
39
45
|
|
40
46
|
def formatter_const
|
41
|
-
TwitterCldr::Formatters.const_get("#{@type.to_s.capitalize}Formatter")
|
47
|
+
TwitterCldr::Formatters.const_get("#{@type.to_s.split("_").map(&:capitalize).join}Formatter")
|
42
48
|
end
|
43
49
|
|
44
50
|
def to_type(target_type)
|
@@ -5,17 +5,18 @@
|
|
5
5
|
|
6
6
|
module TwitterCldr
|
7
7
|
module Resources
|
8
|
-
autoload :CanonicalCompositionsUpdater,
|
9
|
-
autoload :CollationTriesDumper,
|
10
|
-
autoload :CompositionExclusionsImporter,
|
11
|
-
autoload :
|
12
|
-
autoload :
|
13
|
-
autoload :
|
14
|
-
autoload :
|
15
|
-
autoload :
|
16
|
-
autoload :
|
17
|
-
autoload :
|
18
|
-
autoload :
|
19
|
-
autoload :
|
8
|
+
autoload :CanonicalCompositionsUpdater, 'twitter_cldr/resources/canonical_compositions_updater'
|
9
|
+
autoload :CollationTriesDumper, 'twitter_cldr/resources/collation_tries_dumper'
|
10
|
+
autoload :CompositionExclusionsImporter, 'twitter_cldr/resources/composition_exclusions_importer'
|
11
|
+
autoload :CurrenciesImporter, 'twitter_cldr/resources/currencies_importer'
|
12
|
+
autoload :CustomLocalesResourcesImporter, 'twitter_cldr/resources/custom_locales_resources_importer'
|
13
|
+
autoload :LanguageCodesImporter, 'twitter_cldr/resources/language_codes_importer'
|
14
|
+
autoload :Loader, 'twitter_cldr/resources/loader'
|
15
|
+
autoload :LocalesResourcesImporter, 'twitter_cldr/resources/locales_resources_importer'
|
16
|
+
autoload :PhoneCodesImporter, 'twitter_cldr/resources/phone_codes_importer'
|
17
|
+
autoload :PostalCodesImporter, 'twitter_cldr/resources/postal_codes_importer'
|
18
|
+
autoload :TailoringImporter, 'twitter_cldr/resources/tailoring_importer'
|
19
|
+
autoload :UnicodeDataImporter, 'twitter_cldr/resources/unicode_data_importer'
|
20
|
+
autoload :BidiTestImporter, 'twitter_cldr/resources/bidi_test_importer'
|
20
21
|
end
|
21
22
|
end
|
@@ -11,7 +11,7 @@ module TwitterCldr
|
|
11
11
|
|
12
12
|
class CustomLocalesResourcesImporter
|
13
13
|
|
14
|
-
API_ENDPOINT = "http://translate.
|
14
|
+
API_ENDPOINT = "http://translate.twitter.com/api/2/twitter/phrase/%s/translations.json"
|
15
15
|
|
16
16
|
TIME_PERIODS = {
|
17
17
|
:day => 19636,
|
@@ -12,7 +12,7 @@ module TwitterCldr
|
|
12
12
|
|
13
13
|
class LocalesResourcesImporter
|
14
14
|
|
15
|
-
COMPONENTS = %w[calendars languages numbers units plurals lists layout]
|
15
|
+
COMPONENTS = %w[calendars languages numbers units plurals lists layout currencies]
|
16
16
|
|
17
17
|
# Arguments:
|
18
18
|
#
|
@@ -39,19 +39,23 @@ module TwitterCldr
|
|
39
39
|
# Copies zh plurals to zh-Hant (they can share, but locale code needs to be different).
|
40
40
|
#
|
41
41
|
def copy_zh_hant_plurals
|
42
|
-
File.open(File.join(@output_path, 'zh-Hant', 'plurals.yml'), 'w:utf-8') do |output|
|
43
|
-
data = YAML.load(File.read(File.join(@output_path, 'zh', 'plurals.yml')))
|
42
|
+
File.open(File.join(@output_path, 'locales', 'zh-Hant', 'plurals.yml'), 'w:utf-8') do |output|
|
43
|
+
data = YAML.load(File.read(File.join(@output_path, 'locales', 'zh', 'plurals.yml')))
|
44
44
|
output.write(YAML.dump(:'zh-Hant' => data[:zh].gsub(':zh', ":'zh-Hant'")))
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
def import_components
|
49
|
-
Cldr::Export.export(:locales => TwitterCldr.supported_locales, :components => COMPONENTS, :target => @output_path) do |component, locale, path|
|
49
|
+
Cldr::Export.export(:locales => TwitterCldr.supported_locales, :components => COMPONENTS, :target => File.join(@output_path, 'locales')) do |component, locale, path|
|
50
50
|
add_buddhist_calendar(component, locale, path)
|
51
51
|
process_plurals(component, locale, path)
|
52
52
|
deep_symbolize(component, locale, path)
|
53
53
|
end
|
54
54
|
|
55
|
+
Cldr::Export.export(:components => ["currency_digits_and_rounding"], :target => File.join(@output_path, 'shared')) do |component, locale, path|
|
56
|
+
deep_symbolize(component, locale, path)
|
57
|
+
end
|
58
|
+
|
55
59
|
copy_zh_hant_plurals
|
56
60
|
end
|
57
61
|
|
@@ -65,7 +69,7 @@ module TwitterCldr
|
|
65
69
|
end
|
66
70
|
|
67
71
|
def process_plurals(component, locale, path)
|
68
|
-
return unless component == '
|
72
|
+
return unless component == 'Plurals'
|
69
73
|
|
70
74
|
plural_rules = File.read(path)
|
71
75
|
|
@@ -79,7 +83,7 @@ module TwitterCldr
|
|
79
83
|
# TODO: export buddhist calendar from CLDR data instead of using BUDDHIST_CALENDAR constant.
|
80
84
|
#
|
81
85
|
def add_buddhist_calendar(component, locale, path)
|
82
|
-
return unless component == '
|
86
|
+
return unless component == 'Calendars' && locale == :th
|
83
87
|
|
84
88
|
data = YAML.load(File.read(path))
|
85
89
|
data['th']['calendars']['buddhist'] = BUDDHIST_CALENDAR
|
@@ -465,36 +465,36 @@ module TwitterCldr
|
|
465
465
|
|
466
466
|
# Process from the end as we are copying the array over itself here.
|
467
467
|
(@formatter_indices.size - 1).downto(0) do |index|
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
468
|
+
next_fmt = @formatter_indices[index]
|
469
|
+
|
470
|
+
# nextFmt points to a location in the original array. So,
|
471
|
+
# nextFmt+1 is the target of our copying. output is the location
|
472
|
+
# to which we last copied, thus we can derive the length of the
|
473
|
+
# copy from it.
|
474
|
+
len = output - next_fmt - 1
|
475
|
+
output = next_fmt
|
476
|
+
input -= len
|
477
|
+
|
478
|
+
# Note that we no longer need 'types' at this point, so we
|
479
|
+
# only edit 'levels'.
|
480
|
+
if next_fmt + 1 < @levels.size
|
481
|
+
arraycopy(@levels, input, @levels, next_fmt + 1, len)
|
482
|
+
end
|
483
483
|
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
484
|
+
# Now set the level at the reinsertion point.
|
485
|
+
right_level = if output == @levels.length - 1
|
486
|
+
@base_embedding
|
487
|
+
else
|
488
|
+
@levels[output + 1] || 0
|
489
|
+
end
|
490
490
|
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
491
|
+
left_level = if input == 0
|
492
|
+
@base_embedding
|
493
|
+
else
|
494
|
+
@levels[input] || 0;
|
495
|
+
end
|
496
496
|
|
497
|
-
|
497
|
+
@levels[output] = [left_level, right_level].max
|
498
498
|
end
|
499
499
|
end
|
500
500
|
|