twitter_cldr 3.3.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/History.txt +3 -1
- data/README.md +44 -10
- data/lib/twitter_cldr/data_readers/timespan_data_reader.rb +6 -4
- data/lib/twitter_cldr/localized/localized_number.rb +5 -1
- data/lib/twitter_cldr/localized/localized_object.rb +1 -7
- data/lib/twitter_cldr/localized/localized_string.rb +1 -1
- data/lib/twitter_cldr/shared.rb +1 -0
- data/lib/twitter_cldr/shared/unit.rb +126 -0
- data/lib/twitter_cldr/version.rb +1 -1
- data/resources/custom/locales/af/fields.yml +19 -0
- data/resources/custom/locales/ar/fields.yml +35 -0
- data/resources/custom/locales/be/fields.yml +27 -0
- data/resources/custom/locales/bg/fields.yml +19 -0
- data/resources/custom/locales/bn/fields.yml +15 -0
- data/resources/custom/locales/ca/fields.yml +19 -0
- data/resources/custom/locales/cs/fields.yml +23 -0
- data/resources/custom/locales/cy/fields.yml +35 -0
- data/resources/custom/locales/da/fields.yml +19 -0
- data/resources/custom/locales/de/fields.yml +19 -0
- data/resources/custom/locales/el/fields.yml +19 -0
- data/resources/custom/locales/en-GB/fields.yml +19 -0
- data/resources/custom/locales/en/fields.yml +19 -0
- data/resources/custom/locales/es/fields.yml +19 -0
- data/resources/custom/locales/eu/fields.yml +19 -0
- data/resources/custom/locales/fa/fields.yml +15 -0
- data/resources/custom/locales/fi/fields.yml +19 -0
- data/resources/custom/locales/fil/fields.yml +19 -0
- data/resources/custom/locales/fr/fields.yml +19 -0
- data/resources/custom/locales/ga/fields.yml +24 -0
- data/resources/custom/locales/gl/fields.yml +19 -0
- data/resources/custom/locales/he/fields.yml +164 -0
- data/resources/custom/locales/hi/fields.yml +19 -0
- data/resources/custom/locales/hr/fields.yml +9 -0
- data/resources/custom/locales/hu/fields.yml +19 -0
- data/resources/custom/locales/id/{units.yml → fields.yml} +5 -5
- data/resources/custom/locales/it/fields.yml +19 -0
- data/resources/custom/locales/ja/{units.yml → fields.yml} +5 -5
- data/resources/custom/locales/ko/{units.yml → fields.yml} +5 -5
- data/resources/custom/locales/lv/fields.yml +23 -0
- data/resources/custom/locales/ms/{units.yml → fields.yml} +5 -5
- data/resources/custom/locales/nb/fields.yml +19 -0
- data/resources/custom/locales/nl/fields.yml +19 -0
- data/resources/custom/locales/pl/fields.yml +27 -0
- data/resources/custom/locales/pt/fields.yml +19 -0
- data/resources/custom/locales/ro/fields.yml +23 -0
- data/resources/custom/locales/ru/fields.yml +27 -0
- data/resources/custom/locales/sk/fields.yml +23 -0
- data/resources/custom/locales/sr/fields.yml +27 -0
- data/resources/custom/locales/sv/{units.yml → fields.yml} +9 -9
- data/resources/custom/locales/ta/fields.yml +11 -0
- data/resources/custom/locales/th/fields.yml +15 -0
- data/resources/custom/locales/tr/{units.yml → fields.yml} +5 -5
- data/resources/custom/locales/uk/fields.yml +27 -0
- data/resources/custom/locales/ur/fields.yml +19 -0
- data/resources/custom/locales/vi/{units.yml → fields.yml} +5 -5
- data/resources/custom/locales/zh-Hant/{units.yml → fields.yml} +5 -5
- data/resources/custom/locales/zh/{units.yml → fields.yml} +5 -5
- data/resources/locales/af/fields.yml +108 -0
- data/resources/locales/af/units.yml +855 -104
- data/resources/locales/ar/fields.yml +220 -0
- data/resources/locales/ar/units.yml +1975 -216
- data/resources/locales/be/fields.yml +122 -0
- data/resources/locales/be/units.yml +284 -118
- data/resources/locales/bg/fields.yml +108 -0
- data/resources/locales/bg/units.yml +855 -104
- data/resources/locales/bn/fields.yml +108 -0
- data/resources/locales/bn/units.yml +855 -104
- data/resources/locales/ca/fields.yml +108 -0
- data/resources/locales/ca/units.yml +879 -104
- data/resources/locales/cs/fields.yml +136 -0
- data/resources/locales/cs/units.yml +1822 -132
- data/resources/locales/cy/fields.yml +108 -0
- data/resources/locales/cy/units.yml +1193 -104
- data/resources/locales/da/fields.yml +108 -0
- data/resources/locales/da/units.yml +883 -104
- data/resources/locales/de-CH/fields.yml +108 -0
- data/resources/locales/de-CH/units.yml +1096 -104
- data/resources/locales/de/fields.yml +108 -0
- data/resources/locales/de/units.yml +1096 -104
- data/resources/locales/el/fields.yml +108 -0
- data/resources/locales/el/units.yml +855 -104
- data/resources/locales/en-150/fields.yml +108 -0
- data/resources/locales/en-150/units.yml +1090 -104
- data/resources/locales/en-AU/fields.yml +108 -0
- data/resources/locales/en-AU/units.yml +1090 -104
- data/resources/locales/en-CA/fields.yml +108 -0
- data/resources/locales/en-CA/units.yml +1090 -104
- data/resources/locales/en-GB/fields.yml +108 -0
- data/resources/locales/en-GB/units.yml +1090 -104
- data/resources/locales/en-IE/fields.yml +108 -0
- data/resources/locales/en-IE/units.yml +1090 -104
- data/resources/locales/en-SG/fields.yml +108 -0
- data/resources/locales/en-SG/units.yml +1090 -104
- data/resources/locales/en-ZA/fields.yml +108 -0
- data/resources/locales/en-ZA/units.yml +1090 -104
- data/resources/locales/en/fields.yml +108 -0
- data/resources/locales/en/units.yml +1090 -104
- data/resources/locales/es-419/fields.yml +108 -0
- data/resources/locales/es-419/units.yml +855 -104
- data/resources/locales/es-CO/fields.yml +108 -0
- data/resources/locales/es-CO/units.yml +855 -104
- data/resources/locales/es-MX/fields.yml +108 -0
- data/resources/locales/es-MX/units.yml +855 -104
- data/resources/locales/es-US/fields.yml +108 -0
- data/resources/locales/es-US/units.yml +855 -104
- data/resources/locales/es/fields.yml +108 -0
- data/resources/locales/es/units.yml +855 -104
- data/resources/locales/eu/fields.yml +108 -0
- data/resources/locales/eu/units.yml +855 -104
- data/resources/locales/fa/fields.yml +108 -0
- data/resources/locales/fa/units.yml +865 -104
- data/resources/locales/fi/fields.yml +108 -0
- data/resources/locales/fi/units.yml +1096 -104
- data/resources/locales/fil/fields.yml +108 -0
- data/resources/locales/fil/units.yml +855 -104
- data/resources/locales/fr-BE/fields.yml +108 -0
- data/resources/locales/fr-BE/units.yml +944 -104
- data/resources/locales/fr-CA/fields.yml +108 -0
- data/resources/locales/fr-CA/units.yml +944 -104
- data/resources/locales/fr-CH/fields.yml +108 -0
- data/resources/locales/fr-CH/units.yml +944 -104
- data/resources/locales/fr/fields.yml +108 -0
- data/resources/locales/fr/units.yml +944 -104
- data/resources/locales/ga/fields.yml +108 -0
- data/resources/locales/ga/units.yml +2013 -104
- data/resources/locales/gl/fields.yml +108 -0
- data/resources/locales/gl/units.yml +774 -104
- data/resources/locales/gu/fields.yml +108 -0
- data/resources/locales/gu/units.yml +855 -104
- data/resources/locales/he/fields.yml +164 -0
- data/resources/locales/he/units.yml +1420 -160
- data/resources/locales/hi/fields.yml +108 -0
- data/resources/locales/hi/units.yml +855 -104
- data/resources/locales/hr/fields.yml +164 -0
- data/resources/locales/hr/units.yml +1459 -160
- data/resources/locales/hu/fields.yml +108 -0
- data/resources/locales/hu/units.yml +855 -104
- data/resources/locales/id/fields.yml +108 -0
- data/resources/locales/id/units.yml +575 -104
- data/resources/locales/is/fields.yml +108 -0
- data/resources/locales/is/units.yml +854 -104
- data/resources/locales/it-CH/fields.yml +108 -0
- data/resources/locales/it-CH/units.yml +855 -104
- data/resources/locales/it/fields.yml +108 -0
- data/resources/locales/it/units.yml +855 -104
- data/resources/locales/ja/fields.yml +108 -0
- data/resources/locales/ja/units.yml +733 -104
- data/resources/locales/kn/fields.yml +108 -0
- data/resources/locales/kn/units.yml +855 -104
- data/resources/locales/ko/fields.yml +108 -0
- data/resources/locales/ko/units.yml +575 -104
- data/resources/locales/lv/fields.yml +136 -0
- data/resources/locales/lv/units.yml +1135 -132
- data/resources/locales/mr/fields.yml +108 -0
- data/resources/locales/mr/units.yml +855 -104
- data/resources/locales/ms/fields.yml +108 -0
- data/resources/locales/ms/units.yml +575 -104
- data/resources/locales/nb/fields.yml +108 -0
- data/resources/locales/nb/units.yml +886 -104
- data/resources/locales/nl/fields.yml +108 -0
- data/resources/locales/nl/units.yml +1096 -104
- data/resources/locales/pl/fields.yml +164 -0
- data/resources/locales/pl/units.yml +1415 -160
- data/resources/locales/pt/fields.yml +108 -0
- data/resources/locales/pt/units.yml +855 -104
- data/resources/locales/ro/fields.yml +136 -0
- data/resources/locales/ro/units.yml +1135 -132
- data/resources/locales/ru/fields.yml +164 -0
- data/resources/locales/ru/units.yml +1415 -160
- data/resources/locales/sk/fields.yml +136 -0
- data/resources/locales/sk/units.yml +1635 -132
- data/resources/locales/sq/fields.yml +108 -0
- data/resources/locales/sq/units.yml +870 -104
- data/resources/locales/sr/fields.yml +164 -0
- data/resources/locales/sr/units.yml +1135 -160
- data/resources/locales/sv/fields.yml +108 -0
- data/resources/locales/sv/units.yml +1081 -104
- data/resources/locales/ta/fields.yml +108 -0
- data/resources/locales/ta/units.yml +855 -104
- data/resources/locales/th/fields.yml +108 -0
- data/resources/locales/th/units.yml +575 -104
- data/resources/locales/tr/fields.yml +108 -0
- data/resources/locales/tr/units.yml +1096 -104
- data/resources/locales/uk/fields.yml +164 -0
- data/resources/locales/uk/units.yml +1425 -160
- data/resources/locales/ur/fields.yml +108 -0
- data/resources/locales/ur/units.yml +855 -104
- data/resources/locales/vi/fields.yml +108 -0
- data/resources/locales/vi/units.yml +575 -104
- data/resources/locales/zh-Hant/fields.yml +108 -0
- data/resources/locales/zh-Hant/units.yml +733 -104
- data/resources/locales/zh/fields.yml +108 -0
- data/resources/locales/zh/units.yml +575 -104
- data/spec/resources/loader_spec.rb +4 -4
- data/spec/shared/unit_spec.rb +283 -0
- data/twitter_cldr.gemspec +1 -1
- metadata +124 -54
- data/resources/custom/locales/af/units.yml +0 -19
- data/resources/custom/locales/ar/units.yml +0 -35
- data/resources/custom/locales/be/units.yml +0 -27
- data/resources/custom/locales/bg/units.yml +0 -19
- data/resources/custom/locales/bn/units.yml +0 -15
- data/resources/custom/locales/ca/units.yml +0 -19
- data/resources/custom/locales/cs/units.yml +0 -23
- data/resources/custom/locales/cy/units.yml +0 -35
- data/resources/custom/locales/da/units.yml +0 -19
- data/resources/custom/locales/de/units.yml +0 -19
- data/resources/custom/locales/el/units.yml +0 -19
- data/resources/custom/locales/en-GB/units.yml +0 -19
- data/resources/custom/locales/en/units.yml +0 -19
- data/resources/custom/locales/es/units.yml +0 -19
- data/resources/custom/locales/eu/units.yml +0 -19
- data/resources/custom/locales/fa/units.yml +0 -15
- data/resources/custom/locales/fi/units.yml +0 -19
- data/resources/custom/locales/fil/units.yml +0 -19
- data/resources/custom/locales/fr/units.yml +0 -19
- data/resources/custom/locales/ga/units.yml +0 -24
- data/resources/custom/locales/gl/units.yml +0 -19
- data/resources/custom/locales/he/units.yml +0 -164
- data/resources/custom/locales/hi/units.yml +0 -19
- data/resources/custom/locales/hr/units.yml +0 -9
- data/resources/custom/locales/hu/units.yml +0 -19
- data/resources/custom/locales/it/units.yml +0 -19
- data/resources/custom/locales/lv/units.yml +0 -23
- data/resources/custom/locales/nb/units.yml +0 -19
- data/resources/custom/locales/nl/units.yml +0 -19
- data/resources/custom/locales/pl/units.yml +0 -27
- data/resources/custom/locales/pt/units.yml +0 -19
- data/resources/custom/locales/ro/units.yml +0 -23
- data/resources/custom/locales/ru/units.yml +0 -27
- data/resources/custom/locales/sk/units.yml +0 -23
- data/resources/custom/locales/sr/units.yml +0 -27
- data/resources/custom/locales/ta/units.yml +0 -11
- data/resources/custom/locales/th/units.yml +0 -15
- data/resources/custom/locales/uk/units.yml +0 -27
- data/resources/custom/locales/ur/units.yml +0 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 24c9124b0a865bb5129c1ee452c64523388c511c
|
|
4
|
+
data.tar.gz: b4dcd2273f4220961ef9cb0f08e028003e3d859a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4c0cb24e46abd72a293cba324d00e03b973cdf00f40ba3f11fccd44fe71e378ab9d5a06a03acb4f6a71aeb3f60f1e91a1da714caae2e52afafeeebd97f6c6cbf
|
|
7
|
+
data.tar.gz: c7f81da3faeb01ab877a54fe66e7bcb68117dc015d321d84592dd79303f1407386cc3a413095f53d8ed3bf72821168ce52e74b17600489525e500cbe6ac23206
|
data/History.txt
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
== 3.
|
|
1
|
+
== 3.4.0
|
|
2
|
+
* Add units support, eg. "12 degrees Celsius", etc.
|
|
2
3
|
|
|
4
|
+
== 3.3.0
|
|
3
5
|
* Added `#as_territory` convenience method to LocalizedSymbol (@Anthony-Gaudino).
|
|
4
6
|
* Improved documentation for world territories (@Anthony-Gaudino).
|
|
5
7
|
* Fixed issues with Unicode regular expressions
|
data/README.md
CHANGED
|
@@ -86,6 +86,31 @@ In addition to formatting regular decimals, TwitterCLDR supports short and long
|
|
|
86
86
|
1337123.localize.to_long_decimal.to_s # "1 million"
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
+
### Units
|
|
90
|
+
|
|
91
|
+
TwitterCLDR supports formatting numbers with an attached unit, for example "12 degrees Celsius". It's easy to make use of this functionality via the `#to_unit` method:
|
|
92
|
+
|
|
93
|
+
```ruby
|
|
94
|
+
12.localize.to_unit.length_mile # "12 miles"
|
|
95
|
+
12.localize(:ru).to_unit.length_mile # "12 миль"
|
|
96
|
+
```
|
|
97
|
+
Units support a few different forms, long, short, and narrow:
|
|
98
|
+
|
|
99
|
+
```ruby
|
|
100
|
+
12.localize.to_unit.mass_kilogram(form: :short) # "12 kg"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
To get a list of all available unit types, use the `#unit_types` method:
|
|
104
|
+
|
|
105
|
+
```ruby
|
|
106
|
+
unit = 12.localize.to_unit
|
|
107
|
+
unit.unit_types # => [:length_mile, :temperature_celsius, :mass_kilogram, ...]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
89
114
|
### Number Spellout, Ordinalization, and More
|
|
90
115
|
|
|
91
116
|
TwitterCLDR's rule-based number formatters are capable of transforming integers into their written equivalents. Note that rule-based formatting of decimal numbers is currently not supported for languages other than English.
|
|
@@ -290,6 +315,15 @@ TwitterCldr::Localized::LocalizedTimespan.new(45).to_s(:approximate => true) #
|
|
|
290
315
|
TwitterCldr::Localized::LocalizedTimespan.new(52).to_s(:approximate => true) # "In 1 minute"
|
|
291
316
|
```
|
|
292
317
|
|
|
318
|
+
### Calendar Data
|
|
319
|
+
|
|
320
|
+
CLDR contains a trove of calendar data, much of which can be accessed. One example is names of months, days, years.
|
|
321
|
+
|
|
322
|
+
```ruby
|
|
323
|
+
TwitterCldr::Shared::Calendar.new(:sv).months.take(3) # ["Januari", "Februari", "Mars"]
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
|
|
293
327
|
### Lists
|
|
294
328
|
|
|
295
329
|
TwitterCLDR supports formatting lists of strings as you might do in English by using commas, eg: "Apples, cherries, and oranges". Use the `localize` method on an array followed by a call to `to_sentence`:
|
|
@@ -450,10 +484,10 @@ In addition to translating territory codes, TwitterCLDR provides access to the f
|
|
|
450
484
|
|
|
451
485
|
```ruby
|
|
452
486
|
# get all territories for the default locale
|
|
453
|
-
TwitterCldr::Shared::Territories.all # { ... :tl=>"East Timor", :tm=>"Turkmenistan" ... }
|
|
487
|
+
TwitterCldr::Shared::Territories.all # { ... :tl => "East Timor", :tm => "Turkmenistan" ... }
|
|
454
488
|
|
|
455
489
|
# get all territories for a specific locale
|
|
456
|
-
TwitterCldr::Shared::Territories.all_for(:pt) # { ... :tl=>"República Democrática de Timor-Leste", :tm=>"Turcomenistão" ... }
|
|
490
|
+
TwitterCldr::Shared::Territories.all_for(:pt) # { ... :tl => "República Democrática de Timor-Leste", :tm => "Turcomenistão" ... }
|
|
457
491
|
|
|
458
492
|
# get a territory by its code for the default locale
|
|
459
493
|
TwitterCldr::Shared::Territories.from_territory_code(:'gb') # "U.K."
|
|
@@ -514,7 +548,7 @@ postal_code.regexp # /(\d{5})(?:[ \-](\d{4}))?/
|
|
|
514
548
|
Get a sample of valid postal codes with the `#sample` method:
|
|
515
549
|
|
|
516
550
|
```ruby
|
|
517
|
-
postal_code.sample(5) # ["
|
|
551
|
+
postal_code.sample(5) # ["04937-1403", "24033-3284", "40707-3618", "56564", "53993"]
|
|
518
552
|
```
|
|
519
553
|
|
|
520
554
|
### Phone Codes
|
|
@@ -668,7 +702,7 @@ You can break a string into sentences using the `LocalizedString#each_sentence`
|
|
|
668
702
|
|
|
669
703
|
```ruby
|
|
670
704
|
"The. Quick. Brown. Fox.".localize.each_sentence do |sentence|
|
|
671
|
-
puts sentence.to_s # "The.", "
|
|
705
|
+
puts sentence.to_s # "The. ", "Quick. ", "Brown. ", "Fox."
|
|
672
706
|
end
|
|
673
707
|
```
|
|
674
708
|
|
|
@@ -676,9 +710,9 @@ Under the hood, text segmentation is performed by the `BreakIterator` class (nam
|
|
|
676
710
|
|
|
677
711
|
```ruby
|
|
678
712
|
|
|
679
|
-
iterator = TwitterCldr::
|
|
713
|
+
iterator = TwitterCldr::Segmentation::BreakIterator.new(:en)
|
|
680
714
|
iterator.each_sentence("The. Quick. Brown. Fox.") do |sentence|
|
|
681
|
-
puts sentence # "The.", "
|
|
715
|
+
puts sentence # "The. ", "Quick. ", "Brown. ", "Fox."
|
|
682
716
|
end
|
|
683
717
|
```
|
|
684
718
|
|
|
@@ -686,9 +720,9 @@ To improve segmentation accuracy, a list of special segmentation exceptions have
|
|
|
686
720
|
|
|
687
721
|
```ruby
|
|
688
722
|
|
|
689
|
-
iterator = TwitterCldr::
|
|
723
|
+
iterator = TwitterCldr::Segmentation::BreakIterator.new(:en, :use_uli_exceptions => false)
|
|
690
724
|
iterator.each_sentence("I like Ms. Murphy, she's nice.") do |sentence|
|
|
691
|
-
puts sentence # "I like Ms.", "
|
|
725
|
+
puts sentence # "I like Ms. ", "Murphy, she's nice."
|
|
692
726
|
end
|
|
693
727
|
```
|
|
694
728
|
|
|
@@ -700,7 +734,7 @@ Retrieve data for code points:
|
|
|
700
734
|
|
|
701
735
|
```ruby
|
|
702
736
|
|
|
703
|
-
code_point = TwitterCldr::Shared::CodePoint.
|
|
737
|
+
code_point = TwitterCldr::Shared::CodePoint.get(0x1F3E9)
|
|
704
738
|
code_point.name # "LOVE HOTEL"
|
|
705
739
|
code_point.bidi_mirrored # "N"
|
|
706
740
|
code_point.category # "So"
|
|
@@ -901,6 +935,6 @@ TwitterCLDR currently supports localization of certain textual objects in JavaSc
|
|
|
901
935
|
|
|
902
936
|
## License
|
|
903
937
|
|
|
904
|
-
Copyright
|
|
938
|
+
Copyright 2016 Twitter, Inc.
|
|
905
939
|
|
|
906
940
|
Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
|
|
@@ -9,8 +9,8 @@ module TwitterCldr
|
|
|
9
9
|
|
|
10
10
|
DEFAULT_DIRECTION = :none
|
|
11
11
|
DEFAULT_TYPE = :default
|
|
12
|
-
|
|
13
|
-
BASE_PATH = [:
|
|
12
|
+
VALID_FIELDS = [:second, :minute, :hour, :day, :week, :month, :year]
|
|
13
|
+
BASE_PATH = [:fields]
|
|
14
14
|
|
|
15
15
|
PATHS = {
|
|
16
16
|
ago: {
|
|
@@ -23,6 +23,7 @@ module TwitterCldr
|
|
|
23
23
|
month: :'month-past',
|
|
24
24
|
year: :'year-past'
|
|
25
25
|
},
|
|
26
|
+
|
|
26
27
|
until: {
|
|
27
28
|
default: :'hour-future',
|
|
28
29
|
second: :'second-future',
|
|
@@ -33,6 +34,7 @@ module TwitterCldr
|
|
|
33
34
|
month: :'month-future',
|
|
34
35
|
year: :'year-future'
|
|
35
36
|
},
|
|
37
|
+
|
|
36
38
|
none: {
|
|
37
39
|
default: :second,
|
|
38
40
|
second: :second,
|
|
@@ -113,9 +115,9 @@ module TwitterCldr
|
|
|
113
115
|
|
|
114
116
|
def resource_for_locale(locale)
|
|
115
117
|
@resources ||= {}
|
|
116
|
-
@resources[locale] ||= TwitterCldr.get_locale_resource(locale, :
|
|
118
|
+
@resources[locale] ||= TwitterCldr.get_locale_resource(locale, :fields)[TwitterCldr.convert_locale(locale)]
|
|
117
119
|
end
|
|
118
120
|
end
|
|
119
121
|
end
|
|
120
122
|
end
|
|
121
|
-
end
|
|
123
|
+
end
|
|
@@ -55,7 +55,11 @@ module TwitterCldr
|
|
|
55
55
|
@rbnf ||= TwitterCldr::Formatters::Rbnf::RbnfFormatter.new(locale)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
def to_unit
|
|
59
|
+
TwitterCldr::Shared::Unit.create(base_obj, locale)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
59
63
|
|
|
60
64
|
def to_type(target_type)
|
|
61
65
|
self.class.new(base_obj, locale, {
|
|
@@ -17,14 +17,8 @@ module TwitterCldr
|
|
|
17
17
|
|
|
18
18
|
options = options.dup
|
|
19
19
|
options[:locale] = @locale
|
|
20
|
-
|
|
21
|
-
# @formatter = formatter_const.new(options) if formatter_const
|
|
22
20
|
end
|
|
23
21
|
|
|
24
|
-
# def formatter_const
|
|
25
|
-
# raise NotImplementedError
|
|
26
|
-
# end
|
|
27
|
-
|
|
28
22
|
def self.localize(klass)
|
|
29
23
|
klass.class_eval <<-LOCALIZE, __FILE__, __LINE__ + 1
|
|
30
24
|
def localize(locale = TwitterCldr.locale, options = {})
|
|
@@ -35,4 +29,4 @@ module TwitterCldr
|
|
|
35
29
|
end
|
|
36
30
|
|
|
37
31
|
end
|
|
38
|
-
end
|
|
32
|
+
end
|
|
@@ -151,7 +151,7 @@ module TwitterCldr
|
|
|
151
151
|
protected
|
|
152
152
|
|
|
153
153
|
def escape_plural_interpolation(string)
|
|
154
|
-
# escape
|
|
154
|
+
# escape plural interpolation patterns (see PluralFormatter)
|
|
155
155
|
string.gsub(TwitterCldr::Formatters::PluralFormatter::PLURALIZATION_REGEXP, '%\0')
|
|
156
156
|
end
|
|
157
157
|
|
data/lib/twitter_cldr/shared.rb
CHANGED
|
@@ -30,5 +30,6 @@ module TwitterCldr
|
|
|
30
30
|
autoload :TerritoriesContainment, 'twitter_cldr/shared/territories_containment'
|
|
31
31
|
autoload :Territory, 'twitter_cldr/shared/territory'
|
|
32
32
|
autoload :UnicodeRegex, 'twitter_cldr/shared/unicode_regex'
|
|
33
|
+
autoload :Unit, 'twitter_cldr/shared/unit'
|
|
33
34
|
end
|
|
34
35
|
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
# Copyright 2012 Twitter, Inc
|
|
4
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
|
|
6
|
+
require 'set'
|
|
7
|
+
|
|
8
|
+
module TwitterCldr
|
|
9
|
+
module Shared
|
|
10
|
+
class Unit
|
|
11
|
+
class << self
|
|
12
|
+
def create(value, locale = TwitterCldr.locale)
|
|
13
|
+
subtype_for(locale).new(value, locale)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def reader_for(locale)
|
|
19
|
+
readers[locale] ||= TwitterCldr::DataReaders::NumberDataReader.new(locale)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def resource_for(locale)
|
|
23
|
+
TwitterCldr.get_locale_resource(locale, :units)[locale][:units]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def subtype_for(locale)
|
|
27
|
+
subtypes[locale] ||= begin
|
|
28
|
+
klass = Class.new(Unit)
|
|
29
|
+
|
|
30
|
+
all_unit_types_for(locale).each do |unit_type|
|
|
31
|
+
method_name = unit_type_to_method_name(unit_type)
|
|
32
|
+
klass.send(:define_method, method_name) do |*args|
|
|
33
|
+
format(unit_type, *args)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
klass
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def all_unit_types_for(locale)
|
|
42
|
+
unit_types[locale] ||= begin
|
|
43
|
+
resource = resource_for(locale)
|
|
44
|
+
lengths = resource[:unitLength].keys
|
|
45
|
+
|
|
46
|
+
lengths.each_with_object(Set.new) do |length, ret|
|
|
47
|
+
ret.merge(resource[:unitLength][length].keys)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def all_unit_methods_for(locale)
|
|
53
|
+
unit_methods[locale] ||= all_unit_types_for(locale).map do |unit_type|
|
|
54
|
+
unit_type_to_method_name(unit_type).to_sym
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def unit_type_to_method_name(unit_type)
|
|
59
|
+
unit_type.to_s.gsub('-', '_')
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def subtypes
|
|
63
|
+
@subtypes ||= {}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def unit_types
|
|
67
|
+
@unit_types ||= {}
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def unit_methods
|
|
71
|
+
@unit_methods ||= {}
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def readers
|
|
75
|
+
@readers ||= {}
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
DEFAULT_FORM = :long
|
|
80
|
+
|
|
81
|
+
attr_reader :value, :locale
|
|
82
|
+
|
|
83
|
+
def initialize(value, locale = TwitterCldr.locale)
|
|
84
|
+
@value = value
|
|
85
|
+
@locale = locale
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def unit_types
|
|
89
|
+
self.class.send(:all_unit_methods_for, locale)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
private
|
|
93
|
+
|
|
94
|
+
def format(unit_type, options = {})
|
|
95
|
+
form = options.fetch(:form, DEFAULT_FORM)
|
|
96
|
+
|
|
97
|
+
if variant = variant_for(form, unit_type)
|
|
98
|
+
variant.sub('{0}', formatted_value)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def formatted_value
|
|
103
|
+
if value.is_a?(Numeric)
|
|
104
|
+
self.class.send(:reader_for, locale).format_number(value)
|
|
105
|
+
else
|
|
106
|
+
value
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def variant_for(form, unit_type)
|
|
111
|
+
variant = resource[:unitLength]
|
|
112
|
+
.fetch(form, {})
|
|
113
|
+
.fetch(unit_type, {})
|
|
114
|
+
.fetch(plural_rule.to_sym, nil)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def plural_rule
|
|
118
|
+
TwitterCldr::Formatters::Plurals::Rules.rule_for(value, locale)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def resource
|
|
122
|
+
@resource ||= self.class.send(:resource_for, locale)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
data/lib/twitter_cldr/version.rb
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
:af:
|
|
3
|
+
:fields:
|
|
4
|
+
:day:
|
|
5
|
+
:abbreviated:
|
|
6
|
+
:one: "{0}d"
|
|
7
|
+
:other: "{0}d"
|
|
8
|
+
:hour:
|
|
9
|
+
:abbreviated:
|
|
10
|
+
:one: "{0}h"
|
|
11
|
+
:other: "{0}h"
|
|
12
|
+
:minute:
|
|
13
|
+
:abbreviated:
|
|
14
|
+
:one: "{0}m"
|
|
15
|
+
:other: "{0}m"
|
|
16
|
+
:second:
|
|
17
|
+
:abbreviated:
|
|
18
|
+
:one: "{0}s"
|
|
19
|
+
:other: "{0}s"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
:ar:
|
|
3
|
+
:fields:
|
|
4
|
+
:day:
|
|
5
|
+
:abbreviated:
|
|
6
|
+
:zero: "{0}يومًا"
|
|
7
|
+
:one: "{0}يومًا"
|
|
8
|
+
:two: "{0}يومًا"
|
|
9
|
+
:few: "{0}يومًا"
|
|
10
|
+
:many: "{0}يومًا"
|
|
11
|
+
:other: "{0}يومًا"
|
|
12
|
+
:hour:
|
|
13
|
+
:abbreviated:
|
|
14
|
+
:zero: "{0} ساعة"
|
|
15
|
+
:one: "{0} ساعة"
|
|
16
|
+
:two: "{0} ساعة"
|
|
17
|
+
:few: "{0} ساعة"
|
|
18
|
+
:many: "{0} ساعة"
|
|
19
|
+
:other: "{0} ساعة"
|
|
20
|
+
:minute:
|
|
21
|
+
:abbreviated:
|
|
22
|
+
:zero: "{0} دقيقة"
|
|
23
|
+
:one: "{0} دقيقة"
|
|
24
|
+
:two: "{0} دقيقة"
|
|
25
|
+
:few: "{0} دقيقة"
|
|
26
|
+
:many: "{0} دقيقة"
|
|
27
|
+
:other: "{0} دقيقة"
|
|
28
|
+
:second:
|
|
29
|
+
:abbreviated:
|
|
30
|
+
:zero: "{0} ثانية"
|
|
31
|
+
:one: "{0} ثانية"
|
|
32
|
+
:two: "{0} ثانية"
|
|
33
|
+
:few: "{0} ثانية"
|
|
34
|
+
:many: "{0} ثانية"
|
|
35
|
+
:other: "{0} ثانية"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
:be:
|
|
3
|
+
:fields:
|
|
4
|
+
:day:
|
|
5
|
+
:abbreviated:
|
|
6
|
+
:one: "{0} дн"
|
|
7
|
+
:few: "{0} дн"
|
|
8
|
+
:many: "{0} дн"
|
|
9
|
+
:other: "{0} дн"
|
|
10
|
+
:hour:
|
|
11
|
+
:abbreviated:
|
|
12
|
+
:one: "{0} г"
|
|
13
|
+
:few: "{0} г"
|
|
14
|
+
:many: "{0} г"
|
|
15
|
+
:other: "{0} г"
|
|
16
|
+
:minute:
|
|
17
|
+
:abbreviated:
|
|
18
|
+
:one: "{0} мін"
|
|
19
|
+
:few: "{0} мін"
|
|
20
|
+
:many: "{0} мін"
|
|
21
|
+
:other: "{0} мін"
|
|
22
|
+
:second:
|
|
23
|
+
:abbreviated:
|
|
24
|
+
:one: "{0} сэк"
|
|
25
|
+
:few: "{0} сэк"
|
|
26
|
+
:many: "{0} сэк"
|
|
27
|
+
:other: "{0} сэк"
|