ruby-cldr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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