ruby-cldr 0.0.1

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.
Files changed (80) hide show
  1. data/LICENSE +20 -0
  2. data/README.textile +104 -0
  3. data/Rakefile +18 -0
  4. data/TODO +68 -0
  5. data/VERSION +1 -0
  6. data/cldr.thor +5 -0
  7. data/lib/cldr/data/base.rb +66 -0
  8. data/lib/cldr/data/calendars/gregorian.rb +124 -0
  9. data/lib/cldr/data/calendars.rb +12 -0
  10. data/lib/cldr/data/currencies.rb +26 -0
  11. data/lib/cldr/data/delimiters.rb +21 -0
  12. data/lib/cldr/data/languages.rb +17 -0
  13. data/lib/cldr/data/numbers.rb +60 -0
  14. data/lib/cldr/data/plurals/cldr_grammar.treetop +50 -0
  15. data/lib/cldr/data/plurals/grammar.rb +536 -0
  16. data/lib/cldr/data/plurals/rules.rb +113 -0
  17. data/lib/cldr/data/plurals.rb +39 -0
  18. data/lib/cldr/data/territories.rb +17 -0
  19. data/lib/cldr/data/timezones.rb +25 -0
  20. data/lib/cldr/data/units.rb +25 -0
  21. data/lib/cldr/data.rb +34 -0
  22. data/lib/cldr/download.rb +20 -0
  23. data/lib/cldr/export/ruby.rb +16 -0
  24. data/lib/cldr/export/yaml.rb +39 -0
  25. data/lib/cldr/export.rb +69 -0
  26. data/lib/cldr/format/currency.rb +11 -0
  27. data/lib/cldr/format/date.rb +144 -0
  28. data/lib/cldr/format/datetime/base.rb +32 -0
  29. data/lib/cldr/format/datetime.rb +28 -0
  30. data/lib/cldr/format/decimal/base.rb +18 -0
  31. data/lib/cldr/format/decimal/fraction.rb +28 -0
  32. data/lib/cldr/format/decimal/integer.rb +46 -0
  33. data/lib/cldr/format/decimal/number.rb +44 -0
  34. data/lib/cldr/format/decimal.rb +32 -0
  35. data/lib/cldr/format/percent.rb +11 -0
  36. data/lib/cldr/format/time.rb +71 -0
  37. data/lib/cldr/format.rb +113 -0
  38. data/lib/cldr/thor.rb +33 -0
  39. data/lib/cldr.rb +7 -0
  40. data/lib/core_ext/hash/deep_merge.rb +7 -0
  41. data/lib/core_ext/hash/deep_stringify_keys.rb +11 -0
  42. data/lib/core_ext/hash/symbolize_keys.rb +10 -0
  43. data/lib/core_ext/string/camelize.rb +5 -0
  44. data/lib/core_ext/string/underscore.rb +9 -0
  45. data/test/all.rb +3 -0
  46. data/test/data/all.rb +3 -0
  47. data/test/data/calendars_test.rb +149 -0
  48. data/test/data/currencies_test.rb +47 -0
  49. data/test/data/delimiters_test.rb +31 -0
  50. data/test/data/languages_test.rb +67 -0
  51. data/test/data/numbers_test.rb +61 -0
  52. data/test/data/plurals_test.rb +132 -0
  53. data/test/data/territories_test.rb +51 -0
  54. data/test/data/timezones_test.rb +56 -0
  55. data/test/data/units_test.rb +36 -0
  56. data/test/export_test.rb +57 -0
  57. data/test/formats/all.rb +3 -0
  58. data/test/formats/datetime/all.rb +3 -0
  59. data/test/formats/datetime/date_test.rb +31 -0
  60. data/test/formats/datetime/datetime_test.rb +18 -0
  61. data/test/formats/datetime/day_test.rb +41 -0
  62. data/test/formats/datetime/hour_test.rb +79 -0
  63. data/test/formats/datetime/minute_test.rb +25 -0
  64. data/test/formats/datetime/month_test.rb +76 -0
  65. data/test/formats/datetime/period_test.rb +20 -0
  66. data/test/formats/datetime/quarter_test.rb +118 -0
  67. data/test/formats/datetime/second_test.rb +80 -0
  68. data/test/formats/datetime/time_test.rb +33 -0
  69. data/test/formats/datetime/timezone_test.rb +23 -0
  70. data/test/formats/datetime/year_test.rb +57 -0
  71. data/test/formats/decimal/fraction_test.rb +17 -0
  72. data/test/formats/decimal/integer_test.rb +67 -0
  73. data/test/formats/decimal/number_test.rb +77 -0
  74. data/test/formats/decimal_test.rb +19 -0
  75. data/test/formats/format_test.rb +66 -0
  76. data/test/formats/rails_compat/all.rb +3 -0
  77. data/test/formats/rails_compat/format_integer_test.rb +56 -0
  78. data/test/formats/rails_compat/format_number_test.rb +134 -0
  79. data/test/test_helper.rb +5 -0
  80. metadata +169 -0
@@ -0,0 +1,71 @@
1
+ class Cldr
2
+ module Format
3
+ class Time < Datetime::Base
4
+ PATTERN = /a{1}|h{1,2}|H{1,2}|K{1,2}|k{1,2}|m{1,2}|s{1,2}|S+|z{1,4}|Z{1,4}/
5
+ METHODS = { # ignoring u, l, g, j, A
6
+ 'a' => :period,
7
+ 'h' => :hour,
8
+ 'H' => :hour,
9
+ 'K' => :hour,
10
+ 'k' => :hour,
11
+ 'm' => :minute,
12
+ 's' => :second,
13
+ 'S' => :second_fraction,
14
+ 'z' => :timezone,
15
+ 'Z' => :timezone,
16
+ 'v' => :timezone_generic_non_location,
17
+ 'V' => :timezone_metazone
18
+ }
19
+
20
+ def period(time, pattern, length)
21
+ calendar[:periods][time.strftime('%p').downcase.to_sym]
22
+ end
23
+
24
+ def hour(time, pattern, length)
25
+ hour = time.hour
26
+ hour = case pattern[0, 1]
27
+ when 'h' # [1-12]
28
+ hour > 12 ? (hour - 12) : (hour == 0 ? 12 : hour)
29
+ when 'H' # [0-23]
30
+ hour
31
+ when 'K' # [0-11]
32
+ hour > 11 ? hour - 12 : hour
33
+ when 'k' # [1-24]
34
+ hour == 0 ? 24 : hour
35
+ end
36
+ length == 1 ? hour.to_s : hour.to_s.rjust(length, '0')
37
+ end
38
+
39
+ def minute(time, pattern, length)
40
+ length == 1 ? time.min.to_s : time.min.to_s.rjust(length, '0')
41
+ end
42
+
43
+ def second(time, pattern, length)
44
+ length == 1 ? time.sec.to_s : time.sec.to_s.rjust(length, '0')
45
+ end
46
+
47
+ def second_fraction(time, pattern, length)
48
+ raise 'can not use the S format with more than 6 digits' if length > 6
49
+ (time.usec.to_f / 10 ** (6 - length)).round.to_s.rjust(length, '0')
50
+ end
51
+
52
+ def timezone(time, pattern, length)
53
+ case length
54
+ when 1..3
55
+ time.zone
56
+ else
57
+ raise 'not yet implemented (requires timezone translation data")'
58
+ end
59
+ end
60
+
61
+ def timezone_generic_non_location(time, pattern, length)
62
+ raise 'not yet implemented (requires timezone translation data")'
63
+ end
64
+
65
+ def round_to(number, precision)
66
+ factor = 10 ** precision
67
+ (number * factor).round.to_f / factor
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,113 @@
1
+ # encoding: utf-8
2
+ require 'core_ext/string/camelize'
3
+
4
+ class Cldr
5
+ module Format
6
+ autoload :Base, 'cldr/format/base'
7
+ autoload :Currency, 'cldr/format/currency'
8
+ autoload :Fraction, 'cldr/format/fraction'
9
+ autoload :Integer, 'cldr/format/integer'
10
+ autoload :Date, 'cldr/format/date'
11
+ autoload :Datetime, 'cldr/format/datetime'
12
+ autoload :Decimal, 'cldr/format/decimal'
13
+ autoload :Numeric, 'cldr/format/numeric'
14
+ autoload :Percent, 'cldr/format/percent'
15
+ autoload :Time, 'cldr/format/time'
16
+
17
+ def format(locale, object, options = {})
18
+ type = options.has_key?(:currency) ? :currency : options.delete(:as)
19
+ type ||= guess_type(object)
20
+
21
+ send(:"format_#{type}", locale, object, options)
22
+ end
23
+
24
+ def format_decimal(locale, number, options = {})
25
+ formatter(locale, :decimal, options.delete(:format)).apply(number, options)
26
+ end
27
+ alias :format_number :format_decimal
28
+
29
+ def format_integer(locale, number, options = {})
30
+ format_number(number, options.merge(:precision => 0))
31
+ end
32
+ alias :format_int :format_integer
33
+
34
+ def format_currency(locale, number, options = {})
35
+ if options[:currency].is_a?(Symbol)
36
+ options.merge!(:currency => lookup_currency(locale, options[:currency], number))
37
+ end
38
+ formatter(locale, :currency, options.delete(:format)).apply(number, options)
39
+ end
40
+
41
+ def format_percent(locale, number, options = {})
42
+ formatter(locale, :percent, options.delete(:format)).apply(number, options)
43
+ end
44
+
45
+ def format_date(locale, date, options = {})
46
+ formatter(locale, :date, options.delete(:format)).apply(date, options)
47
+ end
48
+
49
+ def format_time(locale, time, options = {})
50
+ formatter(locale, :time, options.delete(:format)).apply(time, options)
51
+ end
52
+
53
+ def format_datetime(locale, datetime, options = {})
54
+ format = options.delete(:format) || :default
55
+ (@formatters ||= {})[:"#{locale}.datetime.#{format}"] ||= begin
56
+ date = formatter(locale, :date, options.delete(:date_format) || format)
57
+ time = formatter(locale, :time, options.delete(:time_format) || format)
58
+ format = lookup_format(locale, :datetime, format)
59
+ Cldr::Format::Datetime.new(format, date, time).apply(datetime, options)
60
+ end
61
+ end
62
+
63
+ protected
64
+
65
+ def guess_type(object)
66
+ case object
67
+ when ::Numeric
68
+ :number
69
+ when ::Date, ::DateTime, ::Time
70
+ object.class.name.downcase
71
+ else
72
+ raise_unspecified_format_type!
73
+ end
74
+ end
75
+
76
+ def formatter(locale, type, format)
77
+ (@formatters ||= {})[:"#{locale}.#{type}.#{format}"] ||= begin
78
+ format = lookup_format(locale, type, format)
79
+ data = lookup_format_data(locale, type)
80
+ Cldr::Format.const_get(type.to_s.camelize).new(format, data)
81
+ end
82
+ end
83
+
84
+ def lookup_format(locale, type, format)
85
+ # Lookup the format string for the given type (e.g. :number).
86
+ raise_abstract!
87
+ end
88
+
89
+ def lookup_format_data(locale, type)
90
+ # Lookup the format data required for the given type (e.g. number
91
+ # symbols for type :number, calendar data for type :date etc.).
92
+ raise_abstract!
93
+ end
94
+
95
+ def lookup_currency(locale, currency, count)
96
+ # Lookup the currency representation for the given locale and amount.
97
+ # This might be a translation.
98
+ raise_abstract!
99
+ end
100
+
101
+ def raise_unspecified_format_type!
102
+ raise ArgumentError.new("You have to specify a format type, e.g. :as => :number.")
103
+ end
104
+
105
+ def raise_unspecified_currency!
106
+ raise ArgumentError.new("You have to specify a currency, e.g. :currency => 'EUR'.")
107
+ end
108
+
109
+ def raise_abstract!
110
+ raise "you have to implement this method"
111
+ end
112
+ end
113
+ end
data/lib/cldr/thor.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'thor'
2
+ require 'cldr'
3
+
4
+ class Cldr
5
+ class Thor < ::Thor
6
+ namespace 'cldr'
7
+
8
+ desc "download [--source=http://unicode.org/Public/cldr/1.7.2/core.zip] [--target=./vendor]",
9
+ "Download and extract CLDR data from source to target dir"
10
+ method_options %w(source -s) => :string,
11
+ %w(target -t) => :string
12
+
13
+ def download
14
+ require 'cldr/download'
15
+ Cldr.download(options['source'], options['target'])
16
+ end
17
+
18
+ desc "export [--locales=de fr en] [--components=numbers plurals] [--target=./data] [--merge]",
19
+ "Export CLDR data by locales and components to target dir"
20
+ method_options %w(locales -l) => :array,
21
+ %w(components -l) => :array,
22
+ %w(target -t) => :string,
23
+ %w(merge -m) => :boolean
24
+
25
+ def export
26
+ $stdout.sync
27
+ Cldr::Export.export(options.dup.symbolize_keys) { putc '.' }
28
+ puts
29
+ end
30
+
31
+ # TODO flatten task, e.g. flatten all plural locale files into one big file
32
+ end
33
+ end
data/lib/cldr.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'core_ext/hash/symbolize_keys'
2
+
3
+ class Cldr
4
+ autoload :Data, 'cldr/data'
5
+ autoload :Export, 'cldr/export'
6
+ autoload :Format, 'cldr/format'
7
+ end
@@ -0,0 +1,7 @@
1
+ class Hash
2
+ def deep_merge(other)
3
+ merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : (v2 || v1) }
4
+ merge(other, &merger)
5
+ end
6
+ end
7
+
@@ -0,0 +1,11 @@
1
+ class Hash
2
+ def deep_stringify_keys
3
+ inject({}) { |result, (key, value)|
4
+ value = value.deep_stringify_keys if value.is_a?(Hash)
5
+ key = key.to_s if key.is_a?(Symbol)
6
+ result[key] = value
7
+ result
8
+ }
9
+ end
10
+ end
11
+
@@ -0,0 +1,10 @@
1
+ class Hash
2
+ def symbolize_keys
3
+ inject({}) { |result, (key, value)|
4
+ key = key.to_sym if key.respond_to?(:to_sym)
5
+ result[key] = value
6
+ result
7
+ }
8
+ end
9
+ end
10
+
@@ -0,0 +1,5 @@
1
+ class String
2
+ def camelize
3
+ self.gsub(/(^.{1}|[^a-z0-9])/) { $1.capitalize }
4
+ end
5
+ end unless String.new.respond_to?(:camelize)
@@ -0,0 +1,9 @@
1
+ class String
2
+ def underscore
3
+ to_s.gsub(/::/, '/').
4
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
5
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
6
+ tr("-", "_").
7
+ downcase
8
+ end
9
+ end unless String.new.respond_to?(:underscore)
data/test/all.rb ADDED
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/**/*_test.rb"].each do |filename|
2
+ require filename
3
+ end
data/test/data/all.rb ADDED
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/**/*_test.rb"].each do |filename|
2
+ require filename
3
+ end
@@ -0,0 +1,149 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../test_helper.rb'
4
+ require 'core_ext/hash/deep_stringify_keys'
5
+
6
+ class TestCldrDataCalendars < Test::Unit::TestCase
7
+ def gregorian(options = {})
8
+ locale = options[:locale] || :de
9
+ Cldr::Export.data(:calendars, locale, options)[:calendars][:gregorian]
10
+ end
11
+
12
+ define_method 'test: calendars months :de' do
13
+ months = {
14
+ :format => {
15
+ :wide => { 1 => 'Januar', 2 => 'Februar', 3 => 'März', 4 => 'April', 5 => 'Mai', 6 => 'Juni', 7 => 'Juli', 8 => 'August', 9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'Dezember' },
16
+ :abbreviated => { 1 => 'Jan', 2 => 'Feb', 3 => 'Mär', 4 => 'Apr', 5 => 'Mai', 6 => 'Jun', 7 => 'Jul', 8 => 'Aug', 9 => 'Sep', 10 => 'Okt', 11 => 'Nov', 12 => 'Dez' },
17
+ :narrow => :"calendars.gregorian.months.stand-alone.narrow"
18
+ },
19
+ :'stand-alone' => {
20
+ :abbreviated => { 3 => 'Mär', 7 => 'Jul', 8 => 'Aug', 9 => 'Sep', 10 => 'Okt', 11 => 'Nov', 12 => 'Dez' },
21
+ :narrow => { 1 => 'J', 2 => 'F', 3 => 'M', 4 => 'A', 5 => 'M', 6 => 'J', 7 => 'J', 8 => 'A', 9 => 'S', 10 => 'O', 11 => 'N', 12 => 'D' },
22
+ :wide => :"calendars.gregorian.months.format.wide"
23
+ }
24
+ }
25
+ assert_equal months, gregorian[:months]
26
+ end
27
+
28
+ define_method 'test: calendars days :de' do
29
+ days = {
30
+ :format => {
31
+ :wide => { :sun => 'Sonntag', :mon => 'Montag', :tue => 'Dienstag', :wed => 'Mittwoch', :thu => 'Donnerstag', :fri => 'Freitag', :sat => 'Samstag' },
32
+ :abbreviated => { :sun => 'So.', :mon => 'Mo.', :tue => 'Di.', :wed => 'Mi.', :thu => 'Do.', :fri => 'Fr.', :sat => 'Sa.' },
33
+ :narrow => :"calendars.gregorian.days.stand-alone.narrow"
34
+ },
35
+ :'stand-alone' => {
36
+ :abbreviated => :"calendars.gregorian.days.format.abbreviated",
37
+ :narrow => { :sun => 'S', :mon => 'M', :tue => 'D', :wed => 'M', :thu => 'D', :fri => 'F', :sat => 'S' },
38
+ :wide => :"calendars.gregorian.days.format.wide"
39
+ }
40
+ }
41
+ assert_equal days, gregorian[:days]
42
+ end
43
+
44
+ define_method 'test: calendars quarters :de' do
45
+ quarters = {
46
+ :format => {
47
+ :wide => { 1 => "1. Quartal", 2 => "2. Quartal", 3 => "3. Quartal", 4 => "4. Quartal" },
48
+ :narrow => :"calendars.gregorian.quarters.stand-alone.narrow",
49
+ :abbreviated => { 1 => "Q1", 2 => "Q2", 3 => "Q3", 4 => "Q4" }
50
+ },
51
+ :"stand-alone" => {
52
+ :abbreviated => :"calendars.gregorian.quarters.format.abbreviated",
53
+ :narrow => { 1 => "1", 2 => "2", 3 => "3", 4 => "4" },
54
+ :wide =>:"calendars.gregorian.quarters.format.wide"
55
+ }
56
+ }
57
+ assert_equal quarters, gregorian[:quarters]
58
+ end
59
+
60
+ define_method 'test: calendars periods :de' do
61
+ periods = {
62
+ :am => 'vorm.',
63
+ :pm => 'nachm.',
64
+ }
65
+ assert_equal periods, gregorian[:periods]
66
+ end
67
+
68
+ # root.xml
69
+ # <eras>
70
+ # <eraNames>
71
+ # <alias source="locale" path="../eraAbbr"/>
72
+ # </eraNames>
73
+ # <eraAbbr>
74
+ # <era type="0">BCE</era>
75
+ # <era type="1">CE</era>
76
+ # </eraAbbr>
77
+ # <eraNarrow>
78
+ # <alias source="locale" path="../eraAbbr"/>
79
+ # </eraNarrow>
80
+ # </eras>
81
+ # define_method 'test: calendars eras :de' do
82
+ # eras = {
83
+ # 0 => { :abbr => "v. Chr.", :name => "v. Chr." },
84
+ # 1 => { :abbr => "n. Chr.", :name => "n. Chr." }
85
+ # }
86
+ # assert_equal eras, gregorian[:eras]
87
+ # end
88
+
89
+ define_method 'test: calendars date formats :de' do
90
+ formats = {
91
+ :default => :"calendars.gregorian.formats.date.medium",
92
+ :full => { :pattern => "EEEE, d. MMMM y" },
93
+ :long => { :pattern => "d. MMMM y" },
94
+ :medium => { :pattern => "dd.MM.yyyy" },
95
+ :short => { :pattern => "dd.MM.yy" }
96
+ }
97
+ assert_equal formats, gregorian[:formats][:date]
98
+ end
99
+
100
+ define_method 'test: calendars time formats :de' do
101
+ formats = {
102
+ :default => :"calendars.gregorian.formats.time.medium",
103
+ :full => { :pattern => "HH:mm:ss zzzz" },
104
+ :long => { :pattern => "HH:mm:ss z" },
105
+ :medium => { :pattern => "HH:mm:ss" },
106
+ :short => { :pattern => "HH:mm" }
107
+ }
108
+ assert_equal formats, gregorian[:formats][:time]
109
+ end
110
+
111
+ define_method 'test: calendars datetime formats :de' do
112
+ formats = {
113
+ :default => :"calendars.gregorian.formats.datetime.medium",
114
+ :full => { :pattern => "{1} {0}"},
115
+ :long => { :pattern => "{1} {0}"},
116
+ :medium => { :pattern => "{1} {0}"},
117
+ :short => { :pattern => "{1} {0}"}
118
+ }
119
+ assert_equal formats, gregorian[:formats][:datetime]
120
+ end
121
+
122
+ define_method 'test: calendars fields :de' do
123
+ fields = {
124
+ :hour => "Stunde",
125
+ :minute => "Minute",
126
+ :second => "Sekunde",
127
+ :day => "Tag",
128
+ :month => "Monat",
129
+ :year => "Jahr",
130
+ :week => "Woche",
131
+ :weekday => "Wochentag",
132
+ :dayperiod => "Tageshälfte",
133
+ :era => "Epoche",
134
+ :zone => "Zone"
135
+ }
136
+ assert_equal fields, gregorian[:fields]
137
+ end
138
+
139
+ define_method 'test: merged calendars for de-AT contains all date format and stand-alone name types' do
140
+ assert_equal %w(abbreviated narrow wide), gregorian(:merged => true)[:months][:format].keys.map { |key| key.to_s }.sort
141
+ assert_equal %w(abbreviated narrow wide), gregorian(:merged => true)[:months][:"stand-alone"].keys.map { |key| key.to_s }.sort
142
+ end
143
+
144
+ # Cldr::Data.locales.each do |locale|
145
+ # define_method "test: extract calendars for #{locale}" do
146
+ # Cldr::Data::Calendars.new(locale)
147
+ # end
148
+ # end
149
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../test_helper.rb'
4
+
5
+ class TestCldrCurrencies < Test::Unit::TestCase
6
+ define_method 'test: currencies :de' do
7
+ codes = [:ADP, :AED, :AFA, :AFN, :ALL, :AMD, :ANG, :AOA, :AOK, :AON, :AOR,
8
+ :ARA, :ARP, :ARS, :ATS, :AUD, :AWG, :AZM, :AZN, :BAD, :BAM, :BBD,
9
+ :BDT, :BEC, :BEF, :BEL, :BGL, :BGN, :BHD, :BIF, :BMD, :BND, :BOB,
10
+ :BOP, :BOV, :BRB, :BRC, :BRE, :BRL, :BRN, :BRR, :BSD, :BTN, :BUK,
11
+ :BWP, :BYB, :BYR, :BZD, :CAD, :CDF, :CHE, :CHF, :CHW, :CLF, :CLP,
12
+ :CNY, :COP, :COU, :CRC, :CSD, :CSK, :CUP, :CVE, :CYP, :CZK, :DDM,
13
+ :DEM, :DJF, :DKK, :DOP, :DZD, :ECS, :ECV, :EEK, :EGP, :ERN, :ESA,
14
+ :ESB, :ESP, :ETB, :EUR, :FIM, :FJD, :FKP, :FRF, :GBP, :GEK, :GEL,
15
+ :GHC, :GHS, :GIP, :GMD, :GNF, :GNS, :GQE, :GRD, :GTQ, :GWE, :GWP,
16
+ :GYD, :HKD, :HNL, :HRD, :HRK, :HTG, :HUF, :IDR, :IEP, :ILP, :ILS,
17
+ :INR, :IQD, :IRR, :ISK, :ITL, :JMD, :JOD, :JPY, :KES, :KGS, :KHR,
18
+ :KMF, :KPW, :KRW, :KWD, :KYD, :KZT, :LAK, :LBP, :LKR, :LRD, :LSL,
19
+ :LTL, :LTT, :LUC, :LUF, :LUL, :LVL, :LVR, :LYD, :MAD, :MAF, :MDL,
20
+ :MGA, :MGF, :MKD, :MLF, :MMK, :MNT, :MOP, :MRO, :MTL, :MTP, :MUR,
21
+ :MVR, :MWK, :MXN, :MXP, :MXV, :MYR, :MZE, :MZM, :MZN, :NAD, :NGN,
22
+ :NIC, :NIO, :NLG, :NOK, :NPR, :NZD, :OMR, :PAB, :PEI, :PEN, :PES,
23
+ :PGK, :PHP, :PKR, :PLN, :PLZ, :PTE, :PYG, :QAR, :RHD, :ROL, :RON,
24
+ :RSD, :RUB, :RUR, :RWF, :SAR, :SBD, :SCR, :SDD, :SDG, :SDP, :SEK,
25
+ :SGD, :SHP, :SIT, :SKK, :SLL, :SOS, :SRD, :SRG, :STD, :SUR, :SVC,
26
+ :SYP, :SZL, :THB, :TJR, :TJS, :TMM, :TND, :TOP, :TPE, :TRL, :TRY,
27
+ :TTD, :TWD, :TZS, :UAH, :UAK, :UGS, :UGX, :USD, :USN, :USS, :UYI,
28
+ :UYP, :UYU, :UZS, :VEB, :VEF, :VND, :VUV, :WST, :XAF, :XAG, :XAU,
29
+ :XBA, :XBB, :XBC, :XBD, :XCD, :XDR, :XEU, :XFO, :XFU, :XOF, :XPD,
30
+ :XPF, :XPT, :XRE, :XTS, :XXX, :YDD, :YER, :YUD, :YUM, :YUN, :ZAL,
31
+ :ZAR, :ZMK, :ZRN, :ZRZ, :ZWD]
32
+
33
+ currencies = Cldr::Data::Currencies.new('de')[:currencies]
34
+ assert (currencies.keys - codes).empty? && (codes - currencies.keys).empty?
35
+ assert_equal({ :one => 'Euro', :other => 'Euro' }, currencies[:EUR])
36
+ end
37
+
38
+ # Cldr::Data.locales.each do |locale|
39
+ # define_method "test: extract currencies for #{locale}" do
40
+ # assert_nothing_raised do
41
+ # Cldr::Data::Currencies.new(locale)
42
+ # end
43
+ # end
44
+ # end
45
+ end
46
+
47
+
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../test_helper.rb'
4
+
5
+ class TestCldrDataDelimiters < Test::Unit::TestCase
6
+ define_method 'test: delimiters :de' do
7
+ expected = {
8
+ :delimiters => {
9
+ :quotes => {
10
+ :default => {
11
+ :start => '„',
12
+ :end => '“'
13
+ },
14
+ :alternate => {
15
+ :start => '‚',
16
+ :end => '‘'
17
+ }
18
+ }
19
+ }
20
+ }
21
+ assert_equal expected, Cldr::Data::Delimiters.new('de')
22
+ end
23
+
24
+ # Cldr::Data.locales.each do |locale|
25
+ # define_method "test: extract delimiters for #{locale}" do
26
+ # assert_nothing_raised do
27
+ # Cldr::Data::Delimiters.new(locale)
28
+ # end
29
+ # end
30
+ # end
31
+ end
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../test_helper.rb'
4
+
5
+ class TestCldrDataLanguages < Test::Unit::TestCase
6
+ define_method 'test: languages :de' do
7
+ codes = [:aa, :ab, :ace, :ach, :ada, :ady, :ae, :af, :afa, :afh, :ain,
8
+ :ak, :akk, :ale, :alg, :alt, :am, :an, :ang, :anp, :apa, :ar,
9
+ :arc, :arn, :arp, :art, :arw, :as, :ast, :ath, :aus, :av, :awa,
10
+ :ay, :az, :ba, :bad, :bai, :bal, :ban, :bas, :bat, :be, :bej,
11
+ :bem, :ber, :bg, :bh, :bho, :bi, :bik, :bin, :bla, :bm, :bn, :bnt,
12
+ :bo, :br, :bra, :bs, :btk, :bua, :bug, :byn, :ca, :cad, :cai,
13
+ :car, :cau, :cch, :ce, :ceb, :cel, :ch, :chb, :chg, :chk, :chm,
14
+ :chn, :cho, :chp, :chr, :chy, :cmc, :co, :cop, :cpe, :cpf, :cpp,
15
+ :cr, :crh, :crp, :cs, :csb, :cu, :cus, :cv, :cy, :da, :dak, :dar,
16
+ :day, :de, :"de-AT", :"de-CH", :del, :den, :dgr, :din, :doi, :dra,
17
+ :dsb, :dua, :dum, :dv, :dyu, :dz, :ee, :efi, :egy, :eka, :el,
18
+ :elx, :en, :"en-AU", :"en-CA", :"en-GB", :"en-US", :enm, :eo, :es,
19
+ :"es-419", :"es-ES", :et, :eu, :ewo, :fa, :fan, :fat, :ff, :fi,
20
+ :fil, :fiu, :fj, :fo, :fon, :fr, :"fr-CA", :"fr-CH", :frm, :fro,
21
+ :frr, :frs, :fur, :fy, :ga, :gaa, :gay, :gba, :gd, :gem, :gez,
22
+ :gil, :gl, :gmh, :gn, :goh, :gon, :gor, :got, :grb, :grc, :gsw,
23
+ :gu, :gv, :gwi, :ha, :hai, :haw, :he, :hi, :hil, :him, :hit, :hmn,
24
+ :ho, :hr, :hsb, :ht, :hu, :hup, :hy, :hz, :ia, :iba, :id, :ie,
25
+ :ig, :ii, :ijo, :ik, :ilo, :inc, :ine, :inh, :io, :ira, :iro, :is,
26
+ :it, :iu, :ja, :jbo, :jpr, :jrb, :jv, :ka, :kaa, :kab, :kac, :kaj,
27
+ :kam, :kar, :kaw, :kbd, :kcg, :kfo, :kg, :kha, :khi, :kho, :ki,
28
+ :kj, :kk, :kl, :km, :kmb, :kn, :ko, :kok, :kos, :kpe, :kr, :krc,
29
+ :krl, :kro, :kru, :ks, :ku, :kum, :kut, :kv, :kw, :ky, :la, :lad,
30
+ :lah, :lam, :lb, :lez, :lg, :li, :ln, :lo, :lol, :loz, :lt, :lu,
31
+ :lua, :lui, :lun, :luo, :lus, :lv, :mad, :mag, :mai, :mak, :man,
32
+ :map, :mas, :mdf, :mdr, :men, :mg, :mga, :mh, :mi, :mic, :min,
33
+ :mis, :mk, :mkh, :ml, :mn, :mnc, :mni, :mno, :mo, :moh, :mos, :mr,
34
+ :ms, :mt, :mul, :mun, :mus, :mwl, :mwr, :my, :myn, :myv, :na,
35
+ :nah, :nai, :nap, :nb, :nd, :nds, :ne, :new, :ng, :nia, :nic,
36
+ :niu, :nl, :"nl-BE", :nn, :no, :nog, :non, :nqo, :nr, :nso, :nub,
37
+ :nv, :nwc, :ny, :nym, :nyn, :nyo, :nzi, :oc, :oj, :om, :or, :os,
38
+ :osa, :ota, :oto, :pa, :paa, :pag, :pal, :pam, :pap, :pau, :peo,
39
+ :phi, :phn, :pi, :pl, :pon, :pra, :pro, :ps, :pt, :"pt-BR",
40
+ :"pt-PT", :qu, :raj, :rap, :rar, :rm, :rn, :ro, :roa, :rom, :root,
41
+ :ru, :rup, :rw, :sa, :sad, :sah, :sai, :sal, :sam, :sas, :sat,
42
+ :sc, :scn, :sco, :sd, :se, :sel, :sem, :sg, :sga, :sgn, :sh, :shn,
43
+ :si, :sid, :sio, :sit, :sk, :sl, :sla, :sm, :sma, :smi, :smj,
44
+ :smn, :sms, :sn, :snk, :so, :sog, :son, :sq, :sr, :srn, :srr, :ss,
45
+ :ssa, :st, :su, :suk, :sus, :sux, :sv, :sw, :syc, :syr, :ta, :tai,
46
+ :te, :tem, :ter, :tet, :tg, :th, :ti, :tig, :tiv, :tk, :tkl, :tl,
47
+ :tlh, :tli, :tmh, :tn, :to, :tog, :tpi, :tr, :ts, :tsi, :tt, :tum,
48
+ :tup, :tut, :tvl, :tw, :ty, :tyv, :udm, :ug, :uga, :uk, :umb,
49
+ :und, :ur, :uz, :vai, :ve, :vi, :vo, :vot, :wa, :wak, :wal, :war,
50
+ :was, :wen, :wo, :xal, :xh, :yao, :yap, :yi, :yo, :ypk, :za, :zap,
51
+ :zbl, :zen, :zh, :"zh-Hans", :"zh-Hant", :znd, :zu, :zun, :zxx, :zza]
52
+
53
+ languages = Cldr::Data::Languages.new('de')[:languages]
54
+
55
+ assert (languages.keys - codes).empty? && (codes - languages.keys).empty?
56
+ assert_equal('Deutsch', languages[:de])
57
+ end
58
+
59
+ # Cldr::Data.locales.each do |locale|
60
+ # define_method "test: extract languages for #{locale}" do
61
+ # assert_nothing_raised do
62
+ # Cldr::Data::Languages.new(locale)
63
+ # end
64
+ # end
65
+ # end
66
+ end
67
+
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../test_helper.rb'
4
+
5
+ class TestCldrDataNumbers < Test::Unit::TestCase
6
+ define_method "test: number symbols :de" do
7
+ expected = {
8
+ :nan => "NaN",
9
+ :decimal => ",",
10
+ :plus_sign => "+",
11
+ :minus_sign => "-",
12
+ :group => ".",
13
+ :exponential => "E",
14
+ :percent_sign => "%",
15
+ :list => ";",
16
+ :per_mille => "‰",
17
+ :native_zero_digit => "0",
18
+ :infinity => "∞",
19
+ :pattern_digit => "#"
20
+ }
21
+ assert_equal expected, Cldr::Data::Numbers.new('de')[:numbers][:symbols]
22
+ end
23
+
24
+ define_method "test: number formats :de" do
25
+ expected = {
26
+ :decimal => {
27
+ :patterns => {
28
+ :default => "#,##0.###"
29
+ }
30
+ },
31
+ :scientific => {
32
+ :patterns => {
33
+ :default => "#E0"
34
+ }
35
+ },
36
+ :percent => {
37
+ :patterns => {
38
+ :default => "#,##0 %" # includes a non-breaking space (\302\240)
39
+ }
40
+ },
41
+ :currency => {
42
+ :patterns => {
43
+ :default => "#,##0.00 ¤", # includes a non-breaking space (\302\240)
44
+ },
45
+ :unit => {
46
+ "one" => "{0} {1}",
47
+ "other" => "{0} {1}"
48
+ }
49
+ }
50
+ }
51
+ assert_equal expected, Cldr::Data::Numbers.new('de')[:numbers][:formats]
52
+ end
53
+
54
+ # Cldr::Data.locales.each do |locale|
55
+ # define_method "test: extract number_symbols for #{locale}" do
56
+ # assert_nothing_raised do
57
+ # Cldr::Data::Numbers.new(locale)
58
+ # end
59
+ # end
60
+ # end
61
+ end