icu 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +21 -0
- data/ext/extconf.rb +31 -0
- data/ext/icu.c +111 -0
- data/ext/icu.h +17 -0
- data/ext/icu_locale.c +313 -0
- data/ext/icu_locale_country.c +82 -0
- data/ext/icu_locale_language.c +82 -0
- data/ext/icu_numeric.c +175 -0
- data/ext/icu_time.c +374 -0
- data/lib/icu.rb +1 -0
- data/test/test_locale.rb +73 -0
- data/test/test_numeric.rb +78 -0
- data/test/test_time.rb +75 -0
- metadata +67 -0
data/lib/icu.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'icu.so'))
|
data/test/test_locale.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'icu'))
|
3
|
+
|
4
|
+
class TestLocale < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
ICU::Locale.default = 'en_US'
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_default
|
10
|
+
ICU::Locale.default = 'es_ES'
|
11
|
+
assert_equal('es_ES', ICU::Locale.default.locale_id)
|
12
|
+
ICU::Locale.default = ICU::Locale.get('en_US')
|
13
|
+
assert_equal('en_US', ICU::Locale.default.locale_id)
|
14
|
+
assert_raise(ArgumentError) { ICU::Locale.default = 'worg locale' }
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_get
|
18
|
+
assert_equal(ICU::Locale.get('es_ES').object_id, ICU::Locale.get('es_ES').object_id)
|
19
|
+
assert_equal(ICU::Locale.get('en_US').object_id, ICU::Locale.get('en_US').object_id)
|
20
|
+
assert_raise(ArgumentError) { ICU::Locale.get('worg locale') }
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_parent
|
24
|
+
locale = ICU::Locale.get('es_ES').parent
|
25
|
+
assert_equal('es', locale.locale_id)
|
26
|
+
locale = locale.parent
|
27
|
+
assert_equal(nil, locale)
|
28
|
+
|
29
|
+
assert_equal(nil, ICU::Locale.get('es_ES').parent.parent)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_country
|
33
|
+
country = ICU::Locale.get('es_ES').country
|
34
|
+
assert_equal(ICU::Locale::Country.get('ES').object_id, country.object_id)
|
35
|
+
assert_equal('ES', country.code)
|
36
|
+
assert_equal('Spain', country.name)
|
37
|
+
assert_equal('España', country.name('es_ES'))
|
38
|
+
assert_equal('España', country.name(ICU::Locale.get('es_ES')))
|
39
|
+
assert_nil(ICU::Locale.get('es').country)
|
40
|
+
assert_raise(ArgumentError) { ICU::Locale::Country.get('worg country') }
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_language
|
44
|
+
language = ICU::Locale.get('es_ES').language
|
45
|
+
assert_equal(ICU::Locale::Language.get('es').object_id, language.object_id)
|
46
|
+
assert_equal('es', language.code)
|
47
|
+
assert_equal('Spanish', language.name)
|
48
|
+
assert_equal('español', language.name('es_ES'))
|
49
|
+
assert_equal('español', language.name(ICU::Locale.get('es_ES')))
|
50
|
+
assert_nil(ICU::Locale.get('_ES').language)
|
51
|
+
assert_raise(ArgumentError) { ICU::Locale::Language.get('worg language') }
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_available
|
55
|
+
assert_equal(["Afrikaans", "af"], ICU::Locale.available[0])
|
56
|
+
assert_equal(["afrikaans (Afrique du Sud)", "af_ZA"], ICU::Locale.available(:locale => 'fr_FR')[1])
|
57
|
+
assert_equal(["albanski (Albanija)", "sq_AL"], ICU::Locale.available(:locale => ICU::Locale.get('hr_HR'))[3])
|
58
|
+
|
59
|
+
assert_equal([["English (United States)", "en_US"], ["Spanish (Spain)", "es_ES"]], ICU::Locale.available(:allowed => ['es_ES', 'en_US']))
|
60
|
+
assert_equal(["English", "en"], ICU::Locale.available(:languages => ['es', 'en'])[0])
|
61
|
+
assert_equal(["Basque (Spain)", "eu_ES"], ICU::Locale.available(:countries => ['ES', 'US'])[0])
|
62
|
+
assert_equal(
|
63
|
+
[["Spanish (Spain)", "es_ES"], ["Spanish (United States)", "es_US"]],
|
64
|
+
ICU::Locale.available(:allowed => ['es_ES', 'ca_ES', 'en_US', 'en_GB', 'es_US'], :languages => ['es'], :countries => ['ES', 'US'])
|
65
|
+
)
|
66
|
+
|
67
|
+
assert_equal(["Albanian", [["Albanian", "sq"], ["Albanian (Albania)", "sq_AL"]]], ICU::Locale.available(:group => true)[1])
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_determine
|
71
|
+
assert_equal('es_ES', ICU::Locale.determine_from_http('es_ES,us_US'))
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'icu'))
|
3
|
+
|
4
|
+
class TestNumeric < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
ICU::Locale.default = 'en_US'
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_types
|
10
|
+
assert_raise(TypeError) { 13243412.233.localize(false) }
|
11
|
+
assert_raise(TypeError) { 13243412.233.localize(:currency, false) }
|
12
|
+
assert_raise(TypeError) { 13243412.233.localize(:currency, :locale => false) }
|
13
|
+
assert_raise(TypeError) { 13243412.233.localize(:currency, :round_increment => false) }
|
14
|
+
assert_raise(TypeError) { 13243412.233.localize(:currency, :round_mode => false) }
|
15
|
+
assert_raise(TypeError) { 13243412.233.localize(:currency, :precision => false) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_limits
|
19
|
+
# Fixnum
|
20
|
+
assert_equal('1,073,741,823', 1073741823.localize)
|
21
|
+
assert_equal('-1,073,741,823', -1073741823.localize)
|
22
|
+
# Bignum
|
23
|
+
assert_equal('9,223,372,036,854,775,807', 9223372036854775807.localize)
|
24
|
+
assert_equal('-9,223,372,036,854,775,807', -9223372036854775807.localize)
|
25
|
+
assert_raise(RangeError) { 9223372036854775808.localize }
|
26
|
+
# Float
|
27
|
+
assert_equal('13,243,412.233', 13243412.233.localize)
|
28
|
+
assert_equal('-13,243,412.233', -13243412.233.localize)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_decimal
|
32
|
+
assert_equal('3,490,835,234.656', 3490835234.6556.localize)
|
33
|
+
assert_equal('3.490.835.234,656', 3490835234.6556.localize(:decimal, :locale => 'es_ES'))
|
34
|
+
assert_equal('٣٤٩٠٨٣٥٢٣٤٫٦٥٦', 3490835234.6556.localize(:decimal, :locale => ICU::Locale.get('ar_SY')))
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_currency
|
38
|
+
assert_equal('$1,073,741,823.32', 1073741823.323.localize(:currency))
|
39
|
+
assert_equal('($1,073,741,823.32)', -1073741823.323.localize(:currency))
|
40
|
+
assert_equal('€1,073,741,823.32', 1073741823.323.localize(:currency, :currency => 'EUR'))
|
41
|
+
|
42
|
+
assert_equal('1.073.741.823,32 €', 1073741823.323.localize(:currency, :locale => 'es_ES'))
|
43
|
+
assert_equal('-1.073.741.823,32 €', -1073741823.323.localize(:currency, :locale => 'es_ES'))
|
44
|
+
assert_equal('1.073.741.823,32 US$', 1073741823.323.localize(:currency, :locale => 'es_ES', :currency => 'USD'))
|
45
|
+
|
46
|
+
assert_equal('1,073,741,823.32 ₪', 1073741823.323.localize(:currency, :locale => 'he_IL'))
|
47
|
+
assert_equal('-1,073,741,823.32 ₪', -1073741823.323.localize(:currency, :locale => 'he_IL'))
|
48
|
+
assert_equal('1,073,741,823.32 $', 1073741823.323.localize(:currency, :locale => 'he_IL', :currency => 'USD'))
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_rounding
|
52
|
+
assert_equal('$2,314.30', 2314.3289.localize(:currency, :round_increment => 0.1))
|
53
|
+
assert_equal('$2,314.40', 2314.3289.localize(:currency, :round_increment => 0.1, :round_mode => :ceil))
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_precision
|
57
|
+
assert_equal('$2,314.3290', 2314.32896.localize(:currency, :precision => 4))
|
58
|
+
assert_equal('$1,234.674', 1234.67433.localize(:currency, :precision => 3))
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_percent
|
62
|
+
assert_equal('12%', 0.12.localize(:percent))
|
63
|
+
assert_equal('1,200%', 12.localize(:percent))
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_scientific
|
67
|
+
assert_equal('4.3289E4', 43289.localize(:scientific))
|
68
|
+
assert_equal('1.1239087212E0', 1.1239087212.localize(:scientific))
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_spellout
|
72
|
+
assert_equal('forty-three thousand two hundred and eighty-nine', 43289.localize(:spellout))
|
73
|
+
assert_equal('one point one two three nine', 1.1239.localize(:spellout))
|
74
|
+
|
75
|
+
assert_equal('cuarenta y tres mil doscientos ochenta y nueve', 43289.localize(:spellout, :locale => 'es_ES'))
|
76
|
+
assert_equal('uno punto uno dos tres nueve', 1.1239.localize(:spellout, :locale => 'es_ES'))
|
77
|
+
end
|
78
|
+
end
|
data/test/test_time.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'icu'))
|
3
|
+
|
4
|
+
class TestTime < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
ICU::Locale.default = 'en_US'
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_localize_zone
|
10
|
+
Time.default_zone = 'Europe/Paris'
|
11
|
+
assert_equal('10:31:34 AM CEDT', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full))
|
12
|
+
assert_equal('8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full, :zone => 'GMT'))
|
13
|
+
assert_equal('3:31:34 AM GMT-05:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full, :zone => 'GMT-05:00'))
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_localize_style
|
17
|
+
assert_equal('Monday, May 8, 2006 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :full))
|
18
|
+
assert_equal('May 8, 2006 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :long))
|
19
|
+
assert_equal('May 8, 2006 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :medium))
|
20
|
+
assert_equal('5/8/06 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :short))
|
21
|
+
assert_equal('8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false))
|
22
|
+
assert_equal('May 8, 2006 8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => :full))
|
23
|
+
assert_equal('May 8, 2006 8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => :long))
|
24
|
+
assert_equal('May 8, 2006 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => :medium))
|
25
|
+
assert_equal('May 8, 2006 8:31 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => :short))
|
26
|
+
assert_equal('May 8, 2006', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => false))
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_localize_locale
|
30
|
+
assert_equal('lunes 8 de mayo de 2006 8:31:34', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :full, :locale => 'es_ES'))
|
31
|
+
assert_equal('08:31:34 8 מאי 2006', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :long, :locale => ICU::Locale.get('he_IL')))
|
32
|
+
assert_equal('2006. svibnja 08 08:31:34', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :long, :locale => 'hr_HR'))
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_zones
|
36
|
+
assert_instance_of(Array, Time.zones)
|
37
|
+
assert_equal(["Africa/Ceuta", "Atlantic/Canary", "Europe/Madrid"], Time.zones(:countries => ['ES']))
|
38
|
+
assert_equal(
|
39
|
+
[["Central European Standard Time", "ECT"], ["Central European Standard Time", "Europe/Paris"], ["Greenwich Mean Time", "Europe/London"], ["Greenwich Mean Time", "Europe/Belfast"], ["Greenwich Mean Time", "GB"], ["Greenwich Mean Time", "GB-Eire"]],
|
40
|
+
Time.zones(:countries => ['FR', 'GB'], :type => :standard)
|
41
|
+
)
|
42
|
+
assert_equal([["Spain", ["Africa/Ceuta", "Atlantic/Canary", "Europe/Madrid"]]], Time.zones(:countries => ['ES'], :group => true))
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_default_zone
|
46
|
+
Time.default_zone = 'Europe/Paris'
|
47
|
+
assert_equal('Europe/Paris', Time.default_zone)
|
48
|
+
assert_equal('10:31:34 AM CEDT', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full))
|
49
|
+
Time.default_zone = 'UTC'
|
50
|
+
assert_equal('UTC', Time.default_zone)
|
51
|
+
assert_equal('8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full))
|
52
|
+
Time.default_zone = 'worg time zone'
|
53
|
+
assert_equal('GMT', Time.default_zone)
|
54
|
+
assert_equal('8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full))
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_pattern
|
58
|
+
assert_equal("EEEE d' de 'MMMM' de 'yyyy H:mm:ss", Time.pattern(:date => :full, :locale => 'es_ES'))
|
59
|
+
assert_equal('yyyy. MMMM dd HH:mm:ss', Time.pattern(:date => :long, :locale => ICU::Locale.get('hr_HR')))
|
60
|
+
assert_equal('HH:mm:ss dd/MM/yyyy', Time.pattern(:date => :medium, :locale => 'he_IL'))
|
61
|
+
assert_equal('M/d/yy h:mm:ss a', Time.pattern(:date => :short))
|
62
|
+
assert_equal('h:mm:ss a', Time.pattern(:date => false))
|
63
|
+
assert_equal("dd/MM/yyyy HH'H'mm''ss\" z", Time.pattern(:time => :full, :locale => 'es_ES'))
|
64
|
+
assert_equal('yyyy.MM.dd HH:mm:ss z', Time.pattern(:time => :long, :locale => 'hr_HR'))
|
65
|
+
assert_equal('HH:mm:ss dd/MM/yyyy', Time.pattern(:time => :medium, :locale => 'he_IL'))
|
66
|
+
assert_equal('MMM d, yyyy h:mm a', Time.pattern(:time => :short))
|
67
|
+
assert_equal('MMM d, yyyy', Time.pattern(:time => false))
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_week_start
|
71
|
+
assert_equal(1, Time.week_start)
|
72
|
+
assert_equal(2, Time.week_start(:locale => 'hr_HR'))
|
73
|
+
assert_equal(2, Time.week_start(:locale => ICU::Locale.get('hr_HR')))
|
74
|
+
end
|
75
|
+
end
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: icu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Joshua Llorach
|
8
|
+
autorequire: icu
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2007-12-07 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: josh@vectrice.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions:
|
21
|
+
- ext/extconf.rb
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
files:
|
25
|
+
- ext/icu_locale_language.c
|
26
|
+
- ext/icu_locale_country.c
|
27
|
+
- ext/icu_time.c
|
28
|
+
- ext/icu.h
|
29
|
+
- ext/extconf.rb
|
30
|
+
- ext/icu_locale.c
|
31
|
+
- ext/icu.c
|
32
|
+
- ext/icu_numeric.c
|
33
|
+
- lib/icu.rb
|
34
|
+
- test/test_time.rb
|
35
|
+
- test/test_numeric.rb
|
36
|
+
- test/test_locale.rb
|
37
|
+
- README
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: http://vectrice.com/
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
56
|
+
version:
|
57
|
+
requirements: []
|
58
|
+
|
59
|
+
rubyforge_project: icu
|
60
|
+
rubygems_version: 0.9.5
|
61
|
+
signing_key:
|
62
|
+
specification_version: 2
|
63
|
+
summary: International Components for Unicode for Ruby
|
64
|
+
test_files:
|
65
|
+
- test/test_time.rb
|
66
|
+
- test/test_numeric.rb
|
67
|
+
- test/test_locale.rb
|