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.
- data/LICENSE +20 -0
- data/README.textile +104 -0
- data/Rakefile +18 -0
- data/TODO +68 -0
- data/VERSION +1 -0
- data/cldr.thor +5 -0
- data/lib/cldr/data/base.rb +66 -0
- data/lib/cldr/data/calendars/gregorian.rb +124 -0
- data/lib/cldr/data/calendars.rb +12 -0
- data/lib/cldr/data/currencies.rb +26 -0
- data/lib/cldr/data/delimiters.rb +21 -0
- data/lib/cldr/data/languages.rb +17 -0
- data/lib/cldr/data/numbers.rb +60 -0
- data/lib/cldr/data/plurals/cldr_grammar.treetop +50 -0
- data/lib/cldr/data/plurals/grammar.rb +536 -0
- data/lib/cldr/data/plurals/rules.rb +113 -0
- data/lib/cldr/data/plurals.rb +39 -0
- data/lib/cldr/data/territories.rb +17 -0
- data/lib/cldr/data/timezones.rb +25 -0
- data/lib/cldr/data/units.rb +25 -0
- data/lib/cldr/data.rb +34 -0
- data/lib/cldr/download.rb +20 -0
- data/lib/cldr/export/ruby.rb +16 -0
- data/lib/cldr/export/yaml.rb +39 -0
- data/lib/cldr/export.rb +69 -0
- data/lib/cldr/format/currency.rb +11 -0
- data/lib/cldr/format/date.rb +144 -0
- data/lib/cldr/format/datetime/base.rb +32 -0
- data/lib/cldr/format/datetime.rb +28 -0
- data/lib/cldr/format/decimal/base.rb +18 -0
- data/lib/cldr/format/decimal/fraction.rb +28 -0
- data/lib/cldr/format/decimal/integer.rb +46 -0
- data/lib/cldr/format/decimal/number.rb +44 -0
- data/lib/cldr/format/decimal.rb +32 -0
- data/lib/cldr/format/percent.rb +11 -0
- data/lib/cldr/format/time.rb +71 -0
- data/lib/cldr/format.rb +113 -0
- data/lib/cldr/thor.rb +33 -0
- data/lib/cldr.rb +7 -0
- data/lib/core_ext/hash/deep_merge.rb +7 -0
- data/lib/core_ext/hash/deep_stringify_keys.rb +11 -0
- data/lib/core_ext/hash/symbolize_keys.rb +10 -0
- data/lib/core_ext/string/camelize.rb +5 -0
- data/lib/core_ext/string/underscore.rb +9 -0
- data/test/all.rb +3 -0
- data/test/data/all.rb +3 -0
- data/test/data/calendars_test.rb +149 -0
- data/test/data/currencies_test.rb +47 -0
- data/test/data/delimiters_test.rb +31 -0
- data/test/data/languages_test.rb +67 -0
- data/test/data/numbers_test.rb +61 -0
- data/test/data/plurals_test.rb +132 -0
- data/test/data/territories_test.rb +51 -0
- data/test/data/timezones_test.rb +56 -0
- data/test/data/units_test.rb +36 -0
- data/test/export_test.rb +57 -0
- data/test/formats/all.rb +3 -0
- data/test/formats/datetime/all.rb +3 -0
- data/test/formats/datetime/date_test.rb +31 -0
- data/test/formats/datetime/datetime_test.rb +18 -0
- data/test/formats/datetime/day_test.rb +41 -0
- data/test/formats/datetime/hour_test.rb +79 -0
- data/test/formats/datetime/minute_test.rb +25 -0
- data/test/formats/datetime/month_test.rb +76 -0
- data/test/formats/datetime/period_test.rb +20 -0
- data/test/formats/datetime/quarter_test.rb +118 -0
- data/test/formats/datetime/second_test.rb +80 -0
- data/test/formats/datetime/time_test.rb +33 -0
- data/test/formats/datetime/timezone_test.rb +23 -0
- data/test/formats/datetime/year_test.rb +57 -0
- data/test/formats/decimal/fraction_test.rb +17 -0
- data/test/formats/decimal/integer_test.rb +67 -0
- data/test/formats/decimal/number_test.rb +77 -0
- data/test/formats/decimal_test.rb +19 -0
- data/test/formats/format_test.rb +66 -0
- data/test/formats/rails_compat/all.rb +3 -0
- data/test/formats/rails_compat/format_integer_test.rb +56 -0
- data/test/formats/rails_compat/format_number_test.rb +134 -0
- data/test/test_helper.rb +5 -0
- 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
|
data/lib/cldr/format.rb
ADDED
@@ -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
data/test/all.rb
ADDED
data/test/data/all.rb
ADDED
@@ -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
|