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