r18n-core 0.4.10 → 0.4.11
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +5 -0
- data/Gemfile.lock +1 -1
- data/README.rdoc +25 -25
- data/Rakefile +0 -1
- data/lib/r18n-core.rb +5 -5
- data/lib/r18n-core/filters.rb +45 -45
- data/lib/r18n-core/helpers.rb +4 -4
- data/lib/r18n-core/i18n.rb +30 -30
- data/lib/r18n-core/locale.rb +26 -26
- data/lib/r18n-core/translated.rb +23 -23
- data/lib/r18n-core/translated_string.rb +4 -4
- data/lib/r18n-core/translation.rb +10 -10
- data/lib/r18n-core/unsupported_locale.rb +6 -6
- data/lib/r18n-core/untranslated.rb +13 -13
- data/lib/r18n-core/utils.rb +4 -4
- data/lib/r18n-core/version.rb +1 -1
- data/lib/r18n-core/yaml_loader.rb +13 -11
- data/locales/bg.rb +3 -3
- data/locales/ca.rb +6 -5
- data/locales/cs.rb +5 -5
- data/locales/da.rb +4 -4
- data/locales/de.rb +4 -4
- data/locales/en-us.rb +1 -1
- data/locales/en.rb +6 -6
- data/locales/eo.rb +4 -4
- data/locales/es.rb +4 -4
- data/locales/fi.rb +5 -5
- data/locales/fr.rb +6 -6
- data/locales/hu.rb +1 -1
- data/locales/it.rb +5 -5
- data/locales/ja.rb +5 -4
- data/locales/kk.rb +4 -4
- data/locales/lv.rb +5 -5
- data/locales/nl.rb +5 -5
- data/locales/pl.rb +5 -5
- data/locales/pt.rb +4 -4
- data/locales/ru.rb +5 -5
- data/locales/sk.rb +5 -5
- data/locales/sv-se.rb +4 -4
- data/locales/th.rb +7 -4
- data/locales/zh.rb +6 -5
- data/r18n-core.gemspec +0 -1
- data/spec/filters_spec.rb +48 -48
- data/spec/i18n_spec.rb +32 -32
- data/spec/locale_spec.rb +20 -20
- data/spec/locales/cs_spec.rb +2 -2
- data/spec/locales/hu_spec.rb +1 -1
- data/spec/locales/it_spec.rb +1 -1
- data/spec/locales/pl_spec.rb +2 -2
- data/spec/locales/ru_spec.rb +3 -3
- data/spec/locales/sk_spec.rb +2 -2
- data/spec/r18n_spec.rb +21 -21
- data/spec/spec_helper.rb +3 -3
- data/spec/translated_spec.rb +24 -24
- data/spec/translation_spec.rb +10 -10
- data/spec/yaml_loader_spec.rb +10 -10
- metadata +24 -26
@@ -23,10 +23,10 @@ module R18n
|
|
23
23
|
class TranslatedString < String
|
24
24
|
# String locale
|
25
25
|
attr_reader :locale
|
26
|
-
|
26
|
+
|
27
27
|
# Path for this translation.
|
28
28
|
attr_reader :path
|
29
|
-
|
29
|
+
|
30
30
|
# Returns a new string object containing a copy of +str+, which translated
|
31
31
|
# for +path+ to +locale+
|
32
32
|
def initialize(str, locale, path)
|
@@ -34,12 +34,12 @@ module R18n
|
|
34
34
|
@locale = locale
|
35
35
|
@path = path
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
# Return self for translated string.
|
39
39
|
def |(default)
|
40
40
|
self
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
# Return true for translated strings.
|
44
44
|
def translated?
|
45
45
|
true
|
@@ -23,7 +23,7 @@ require 'pathname'
|
|
23
23
|
module R18n
|
24
24
|
# Struct to containt translation with some type for filter.
|
25
25
|
Typed = Struct.new(:type, :value, :locale, :path)
|
26
|
-
|
26
|
+
|
27
27
|
# Translation is container of translated messages.
|
28
28
|
#
|
29
29
|
# You can load several locales and if translation willn’t be found in first,
|
@@ -46,11 +46,11 @@ module R18n
|
|
46
46
|
#
|
47
47
|
# one: One
|
48
48
|
# two: Two
|
49
|
-
#
|
49
|
+
#
|
50
50
|
# entry:
|
51
51
|
# between: Between %1 and %2
|
52
52
|
# methods: Is %1 method
|
53
|
-
#
|
53
|
+
#
|
54
54
|
# comments: !!pl
|
55
55
|
# 0: no comments
|
56
56
|
# 1: one comment
|
@@ -60,13 +60,13 @@ module R18n
|
|
60
60
|
#
|
61
61
|
# i18n.one #=> "Один"
|
62
62
|
# i18n.two #=> "Two"
|
63
|
-
#
|
63
|
+
#
|
64
64
|
# i18n.two.locale.code #=> "en"
|
65
65
|
# i18n.two.locale.ltr? #=> "ltr"
|
66
66
|
#
|
67
67
|
# i18n.entry.between(2, 3) #=> "between 2 and 3"
|
68
68
|
# i18n['methods', 'object'] #=> "Is object method"
|
69
|
-
#
|
69
|
+
#
|
70
70
|
# i18n.comments(0) #=> "no comments"
|
71
71
|
# i18n.comments(10) #=> "10 comments"
|
72
72
|
class Translation
|
@@ -80,7 +80,7 @@ module R18n
|
|
80
80
|
@locale = main_locale
|
81
81
|
merge! data, locale unless data.empty?
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
# Add another hash with +translations+ for some +locale+. Current data is
|
85
85
|
# more priority, that new one in +translations+.
|
86
86
|
def merge!(translations, locale)
|
@@ -108,23 +108,23 @@ module R18n
|
|
108
108
|
end
|
109
109
|
end
|
110
110
|
end
|
111
|
-
|
111
|
+
|
112
112
|
# Use untranslated filter to print path.
|
113
113
|
def to_s
|
114
114
|
Filters.process(Filters.enabled, Untranslated, @path, @locale, @path,
|
115
115
|
[@path, '', @path])
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
118
|
# Return current translation keys.
|
119
119
|
def _keys
|
120
120
|
@data.keys
|
121
121
|
end
|
122
|
-
|
122
|
+
|
123
123
|
# Return +default+.
|
124
124
|
def |(default)
|
125
125
|
default
|
126
126
|
end
|
127
|
-
|
127
|
+
|
128
128
|
# Return translation with special +name+.
|
129
129
|
#
|
130
130
|
# Translation can contain variable part. Just set is as <tt>%1</tt>,
|
@@ -24,29 +24,29 @@ module R18n
|
|
24
24
|
class UnsupportedLocale
|
25
25
|
# Locale, to get data and pluralization for unsupported locale.
|
26
26
|
attr_accessor :base
|
27
|
-
|
27
|
+
|
28
28
|
# Create object for unsupported locale with +code+ and load other locale
|
29
29
|
# data from +base+ locale.
|
30
30
|
def initialize(code, base = nil)
|
31
31
|
@code = code
|
32
32
|
@base = Locale.load(I18n.default) if @code != I18n.default
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
# Is locale has information file. In this class always return false.
|
36
36
|
def supported?
|
37
37
|
false
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
# Human readable locale code and title.
|
41
41
|
def inspect
|
42
42
|
"Unsupported locale #{@code}"
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
# Locale RFC 3066 code.
|
46
46
|
def code
|
47
47
|
@code
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
# Locale code as title.
|
51
51
|
def title
|
52
52
|
@code
|
@@ -56,7 +56,7 @@ module R18n
|
|
56
56
|
def ==(locale)
|
57
57
|
@code.downcase == locale.code.downcase
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
# Proxy to default locale object.
|
61
61
|
def method_missing(name, *params)
|
62
62
|
@base.send(name, *params)
|
@@ -26,54 +26,54 @@ module R18n
|
|
26
26
|
#
|
27
27
|
# You can set format to print untranslated string by filters. For example:
|
28
28
|
# Disable standart output:
|
29
|
-
#
|
29
|
+
#
|
30
30
|
# R18n::Filters.off(:untranslated)
|
31
|
-
#
|
31
|
+
#
|
32
32
|
# For development environment:
|
33
|
-
#
|
33
|
+
#
|
34
34
|
# R18n::Filters.add(R18n::Untranslated, :untranslated_html) do
|
35
35
|
# |content, config, translated_path, untranslated_path, path|
|
36
36
|
# "#{translated_path}<span style='color: red'>#{untranslated_path}</span>"
|
37
37
|
# end
|
38
|
-
#
|
38
|
+
#
|
39
39
|
# For production environment:
|
40
|
-
#
|
40
|
+
#
|
41
41
|
# R18n::Filters.add(R18n::Untranslated, :hide_untranslated) { '' }
|
42
42
|
class Untranslated
|
43
43
|
# Path, that isn’t in translation.
|
44
44
|
attr_reader :untranslated_path
|
45
|
-
|
45
|
+
|
46
46
|
# Path, that exists in translation.
|
47
47
|
attr_reader :translated_path
|
48
|
-
|
48
|
+
|
49
49
|
def initialize(translated_path, untranslated_path, locale)
|
50
50
|
@translated_path = translated_path
|
51
51
|
@untranslated_path = untranslated_path
|
52
52
|
@locale = locale
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
# Path to translation.
|
56
56
|
def path
|
57
57
|
"#{@translated_path}#{@untranslated_path}"
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def translated?
|
61
61
|
false
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
def method_missing(*params)
|
65
65
|
self[params.first]
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
def [](*params)
|
69
69
|
Untranslated.new(translated_path, "#{@untranslated_path}.#{params.first}",
|
70
70
|
@locale)
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
def |(default)
|
74
74
|
default
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
def to_s
|
78
78
|
Filters.process(Filters.enabled, Untranslated, path, @locale, path,
|
79
79
|
[@translated_path, @untranslated_path, path])
|
data/lib/r18n-core/utils.rb
CHANGED
@@ -26,9 +26,9 @@ module R18n
|
|
26
26
|
jd = Date.send(:civil_to_jd, time.year, time.mon, time.mday, Date::ITALY)
|
27
27
|
Date.new!(Date.send(:jd_to_ajd, jd, 0, 0), 0, Date::ITALY)
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
HTML_ENTRIES = { '&' => '&', '<' => '<', '>' => '>' }
|
31
|
-
|
31
|
+
|
32
32
|
# Escape HTML entries (<, >, &). Copy from HAML helper.
|
33
33
|
def self.escape_html(content)
|
34
34
|
content.to_s.gsub(/[><&]/) { |s| HTML_ENTRIES[s] }
|
@@ -44,7 +44,7 @@ module R18n
|
|
44
44
|
end
|
45
45
|
result
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
# Recursively hash merge.
|
49
49
|
def self.deep_merge!(a, b)
|
50
50
|
b.each_pair do |key, value|
|
@@ -57,7 +57,7 @@ module R18n
|
|
57
57
|
end
|
58
58
|
a
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
# Call +block+ with Syck yamler. It used to load RedCloth, which isn’t
|
62
62
|
# support Psych.
|
63
63
|
def self.use_syck(&block)
|
data/lib/r18n-core/version.rb
CHANGED
@@ -26,34 +26,36 @@ module R18n
|
|
26
26
|
# Loader for translations in YAML format. Them should have name like
|
27
27
|
# +en.yml+ (English) or en-US.yml (USA English dialect) with
|
28
28
|
# language/country code (RFC 3066).
|
29
|
-
#
|
29
|
+
#
|
30
30
|
# R18n::I18n.new('en', R18n::Loader::YAML.new('dir/with/translations'))
|
31
|
-
#
|
31
|
+
#
|
32
32
|
# YAML loader is default loader, so you can just set constructor parameter
|
33
33
|
# to <tt>R18n::I18n.new</tt>:
|
34
|
-
#
|
34
|
+
#
|
35
35
|
# R18n::I18n.new('en', 'dir/with/translations')
|
36
36
|
class YAML
|
37
37
|
# Dir with translations.
|
38
38
|
attr_reader :dir
|
39
|
-
|
39
|
+
|
40
40
|
# Create new loader for +dir+ with YAML translations.
|
41
41
|
def initialize(dir)
|
42
42
|
@dir = File.expand_path(dir)
|
43
|
-
@private_type_class = if
|
43
|
+
@private_type_class = if defined?(JRUBY_VERSION)
|
44
|
+
::YAML::Yecht::PrivateType
|
45
|
+
elsif '1.8.' == RUBY_VERSION[0..3]
|
44
46
|
::YAML::PrivateType
|
45
47
|
else
|
46
48
|
::Syck::PrivateType
|
47
49
|
end
|
48
50
|
end
|
49
|
-
|
51
|
+
|
50
52
|
# Array of locales, which has translations in +dir+.
|
51
53
|
def available
|
52
54
|
Dir.glob(File.join(@dir, '**/*.yml')).
|
53
55
|
map { |i| File.basename(i, '.yml') }.uniq.
|
54
56
|
map { |i| R18n::Locale.load(i) }
|
55
57
|
end
|
56
|
-
|
58
|
+
|
57
59
|
# Return Hash with translations for +locale+.
|
58
60
|
def load(locale)
|
59
61
|
if '1.8.' != RUBY_VERSION[0..3] and 'psych' == ::YAML::ENGINE.yamler
|
@@ -66,24 +68,24 @@ module R18n
|
|
66
68
|
end
|
67
69
|
end
|
68
70
|
end
|
69
|
-
|
71
|
+
|
70
72
|
translations = {}
|
71
73
|
Dir.glob(File.join(@dir, "**/#{locale.code.downcase}.yml")).each do |file_name|
|
72
74
|
Utils.deep_merge!(translations, ::YAML::load_file(file_name) || {})
|
73
75
|
end
|
74
76
|
transform(translations)
|
75
77
|
end
|
76
|
-
|
78
|
+
|
77
79
|
# YAML loader with same +dir+ will be have same +hash+.
|
78
80
|
def hash
|
79
81
|
self.class.hash + @dir.hash
|
80
82
|
end
|
81
|
-
|
83
|
+
|
82
84
|
# Is another +loader+ load YAML translations from same +dir+.
|
83
85
|
def ==(loader)
|
84
86
|
self.class == loader.class and self.dir == loader.dir
|
85
87
|
end
|
86
|
-
|
88
|
+
|
87
89
|
# Wrap YAML private types to Typed.
|
88
90
|
def transform(a_hash)
|
89
91
|
R18n::Utils.hash_map(a_hash) do |key, value|
|
data/locales/bg.rb
CHANGED
@@ -2,18 +2,18 @@
|
|
2
2
|
module R18n
|
3
3
|
class Locales::Bg < Locale
|
4
4
|
set :title => 'Български',
|
5
|
-
|
5
|
+
|
6
6
|
:wday_names => %w{Неделя Понеделник Вторник Сряда Четвъртък Петък
|
7
7
|
Събота},
|
8
8
|
:wday_abbrs => %w{Нед Пон Вто Сря Чет Пет Съб},
|
9
|
-
|
9
|
+
|
10
10
|
:month_names => %w{Януари Февруари Март Април Май Юни Юли Август
|
11
11
|
Септември Октомври Ноември Декември},
|
12
12
|
:month_abbrs => %w{Яну Фев Мар Апр Май Юни Юли Авг Сеп Окт Ное Дек},
|
13
13
|
:month_standalone => %w{Януари Февруари Март Април Май Юни Юли Август
|
14
14
|
Септември Октомври Ноември Декември},
|
15
15
|
:date_format => '%d.%m.%Y',
|
16
|
-
|
16
|
+
|
17
17
|
:number_decimal => ",",
|
18
18
|
:number_group => " "
|
19
19
|
end
|
data/locales/ca.rb
CHANGED
@@ -2,18 +2,19 @@
|
|
2
2
|
module R18n
|
3
3
|
class Locales::Ca < Locale
|
4
4
|
set :title => 'Català',
|
5
|
-
|
6
|
-
:wday_names => %w{diumenge dilluns dimarts dimecres dijous divendres
|
5
|
+
|
6
|
+
:wday_names => %w{diumenge dilluns dimarts dimecres dijous divendres
|
7
|
+
dissabte},
|
7
8
|
:wday_abbrs => %w{dg dl dm dc dj dv ds},
|
8
|
-
|
9
|
+
|
9
10
|
:month_names => %w{Gener Febrer Març Abril Maig Juny Juliol Agost
|
10
11
|
Setembre Octubre Novembre Desembre},
|
11
12
|
:month_abbrs => %w{gen feb mar abr mai jun jul ago set oct nov des},
|
12
|
-
|
13
|
+
|
13
14
|
:date_format => '%d/%m/%Y',
|
14
15
|
:full_format => '%d de %B',
|
15
16
|
:year_format => '_ de %Y',
|
16
|
-
|
17
|
+
|
17
18
|
:number_decimal => ",",
|
18
19
|
:number_group => "."
|
19
20
|
end
|
data/locales/cs.rb
CHANGED
@@ -3,24 +3,24 @@ module R18n
|
|
3
3
|
class Locales::Cs < Locale
|
4
4
|
set :title => 'Český',
|
5
5
|
:sublocales => %w{cz sk en},
|
6
|
-
|
6
|
+
|
7
7
|
:wday_names => %w{Neděle Pondělí Úterý Středa Čtvrtek Pátek Sobota},
|
8
8
|
:wday_abbrs => %w{Ne Po Út St Čt Pá So},
|
9
|
-
|
9
|
+
|
10
10
|
:month_names => %w{ledna února března dubna května června července srpna
|
11
11
|
září října listopadu prosince},
|
12
12
|
:month_abbrs => %w{led úno bře dub kvě čer čvc srp zář říj lis pro},
|
13
13
|
:month_standalone => %w{Leden Únor Březen Duben Květen Červen Červenec
|
14
14
|
Srpen Září Říjen Listopad Prosinec},
|
15
|
-
|
15
|
+
|
16
16
|
:time_am => 'dop.',
|
17
17
|
:time_pm => 'odp.',
|
18
18
|
:date_format => '%e. %m. %Y',
|
19
19
|
:full_format => '%e. %B',
|
20
|
-
|
20
|
+
|
21
21
|
:number_decimal => ",",
|
22
22
|
:number_group => " "
|
23
|
-
|
23
|
+
|
24
24
|
def pluralize(n)
|
25
25
|
case n
|
26
26
|
when 0
|
data/locales/da.rb
CHANGED
@@ -2,21 +2,21 @@
|
|
2
2
|
module R18n
|
3
3
|
class Locales::Da < Locale
|
4
4
|
set :title => 'Dansk',
|
5
|
-
|
5
|
+
|
6
6
|
:wday_names => %w{søndag mandag tirsdag onsdag torsdag fredag
|
7
7
|
lørdag},
|
8
8
|
:wday_abbrs => %w{søn man tir ons tor fre lør},
|
9
|
-
|
9
|
+
|
10
10
|
:month_names => %w{januar februar marts april Maj juni juli august
|
11
11
|
september oktober november december},
|
12
12
|
:month_abbrs => %w{jan. feb. mar. apr. maj jun. jul. aug. sep. okt.
|
13
13
|
nov. dec.},
|
14
|
-
|
14
|
+
|
15
15
|
:time_am => 'om formiddagen',
|
16
16
|
:time_pm => 'om eftermiddagen',
|
17
17
|
:date_format => '%d.%m.%Y',
|
18
18
|
:full_format => '%d. %B %Y',
|
19
|
-
|
19
|
+
|
20
20
|
:number_decimal => ",",
|
21
21
|
:number_group => "."
|
22
22
|
end
|
data/locales/de.rb
CHANGED
@@ -2,21 +2,21 @@
|
|
2
2
|
module R18n
|
3
3
|
class Locales::De < Locale
|
4
4
|
set :title => 'Deutsch',
|
5
|
-
|
5
|
+
|
6
6
|
:wday_names => %w{Sonntag Montag Dienstag Mittwoch Donnerstag Freitag
|
7
7
|
Samstag},
|
8
8
|
:wday_abbrs => %w{So Mo Di Mi Do Fr Sa},
|
9
|
-
|
9
|
+
|
10
10
|
:month_names => %w{Januar Februar März April Mai Juni Juli August
|
11
11
|
September Oktober November Dezember},
|
12
12
|
:month_abbrs => %w{Jan. Feb. Mär. Apr. Mai. Jun. Jul. Aug. Sep. Okt.
|
13
13
|
Nov. Dez.},
|
14
|
-
|
14
|
+
|
15
15
|
:time_am => 'vormittags',
|
16
16
|
:time_pm => 'nachmittags',
|
17
17
|
:date_format => '%d.%m.%Y',
|
18
18
|
:full_format => '%e. %B',
|
19
|
-
|
19
|
+
|
20
20
|
:number_decimal => ",",
|
21
21
|
:number_group => "."
|
22
22
|
end
|