tr8n_core 4.0.1 → 4.0.2
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.
- checksums.yaml +4 -4
- data/README.md +163 -33
- data/lib/tr8n/application.rb +29 -27
- data/lib/tr8n/base.rb +2 -22
- data/lib/tr8n/cache.rb +9 -9
- data/lib/tr8n/cache_adapters/cdb.rb +2 -2
- data/lib/tr8n/cache_adapters/file.rb +2 -2
- data/lib/tr8n/cache_adapters/memcache.rb +3 -3
- data/lib/tr8n/cache_adapters/redis.rb +3 -3
- data/lib/tr8n/component.rb +1 -1
- data/lib/tr8n/config.rb +256 -202
- data/lib/tr8n/decorators/base.rb +1 -1
- data/lib/tr8n/decorators/default.rb +1 -1
- data/lib/tr8n/decorators/html.rb +4 -4
- data/lib/tr8n/exception.rb +1 -1
- data/lib/tr8n/language.rb +17 -27
- data/lib/tr8n/language_case.rb +4 -3
- data/lib/tr8n/language_case_rule.rb +1 -1
- data/lib/tr8n/language_context.rb +4 -2
- data/lib/tr8n/language_context_rule.rb +1 -1
- data/lib/tr8n/logger.rb +8 -3
- data/lib/tr8n/rules_engine/evaluator.rb +4 -7
- data/lib/tr8n/rules_engine/parser.rb +1 -28
- data/lib/tr8n/session.rb +87 -0
- data/lib/tr8n/source.rb +1 -1
- data/lib/tr8n/tokens/data.rb +2 -2
- data/lib/tr8n/tokens/data_tokenizer.rb +1 -1
- data/lib/tr8n/tokens/decoration_tokenizer.rb +1 -1
- data/lib/tr8n/tokens/hidden.rb +1 -1
- data/lib/tr8n/tokens/method.rb +1 -1
- data/lib/tr8n/tokens/transform.rb +2 -2
- data/lib/tr8n/translation.rb +2 -2
- data/lib/tr8n/translation_key.rb +4 -4
- data/lib/tr8n/translator.rb +1 -1
- data/lib/tr8n/utils.rb +1 -1
- data/lib/tr8n_core/ext/array.rb +4 -4
- data/lib/tr8n_core/ext/date.rb +38 -13
- data/lib/tr8n_core/ext/fixnum.rb +3 -3
- data/lib/tr8n_core/ext/hash.rb +1 -1
- data/lib/tr8n_core/ext/string.rb +3 -3
- data/lib/tr8n_core/ext/time.rb +30 -24
- data/lib/tr8n_core/generators/cache/base.rb +4 -4
- data/lib/tr8n_core/generators/cache/cdb.rb +1 -1
- data/lib/tr8n_core/generators/cache/file.rb +4 -3
- data/lib/tr8n_core/version.rb +2 -2
- data/lib/tr8n_core.rb +1 -1
- data/spec/application_spec.rb +5 -192
- data/spec/base_spec.rb +1 -1
- data/spec/config_spec.rb +21 -5
- data/spec/decorator_spec.rb +1 -1
- data/spec/decorators/base_spec.rb +1 -1
- data/spec/decorators/default_spec.rb +1 -1
- data/spec/decorators/html_spec.rb +8 -8
- data/spec/fixtures/languages/ru.json +36 -4
- data/spec/language_case_rule_spec.rb +1 -1
- data/spec/language_case_spec.rb +1 -1
- data/spec/language_context_rule_spec.rb +1 -1
- data/spec/language_context_spec.rb +1 -1
- data/spec/language_spec.rb +603 -4
- data/spec/rules_engine/evaluator_spec.rb +1 -1
- data/spec/rules_engine/parser_spec.rb +1 -1
- data/spec/{helper.rb → spec_helper.rb} +15 -7
- data/spec/tokens/data_spec.rb +2 -2
- data/spec/tokens/data_tokenizer_spec.rb +1 -1
- data/spec/tokens/decoration_tokenizer_spec.rb +1 -1
- data/spec/tokens/hidden_spec.rb +1 -1
- data/spec/tokens/method_spec.rb +1 -1
- data/spec/tokens/transform_spec.rb +1 -1
- data/spec/translation_key_spec.rb +1 -1
- data/spec/translation_spec.rb +1 -1
- data/spec/utils_spec.rb +1 -3
- metadata +5 -8
- data/config/config.yml +0 -34
- data/config/tokens/data.yml +0 -45
- data/config/tokens/decorations.yml +0 -37
- data/lib/tr8n_core/modules/logger.rb +0 -43
data/lib/tr8n_core/ext/time.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2014 Michael Berkovich, tr8nhub.com
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -23,16 +23,22 @@
|
|
23
23
|
|
24
24
|
class Time
|
25
25
|
|
26
|
-
def translate(format = :default, language = Tr8n.
|
26
|
+
def translate(format = :default, language = Tr8n.session.current_language, options = {})
|
27
27
|
label = (format.is_a?(String) ? format.clone : Tr8n.config.default_date_formats[format].clone)
|
28
28
|
symbols = label.scan(/(%\w)/).flatten.uniq
|
29
29
|
|
30
30
|
selected_tokens = []
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
selected_tokens
|
35
|
-
|
31
|
+
using_tokens = label.index('{')
|
32
|
+
|
33
|
+
if using_tokens
|
34
|
+
selected_tokens = Tr8n::Tokens::Data.parse(label).collect{ |token| token.name(:parens => true) }
|
35
|
+
else
|
36
|
+
symbols.each do |symbol|
|
37
|
+
token = Tr8n.config.strftime_symbol_to_token(symbol)
|
38
|
+
next unless token
|
39
|
+
selected_tokens << token
|
40
|
+
label.gsub!(symbol, token)
|
41
|
+
end
|
36
42
|
end
|
37
43
|
|
38
44
|
tokens = {}
|
@@ -41,22 +47,22 @@ class Time
|
|
41
47
|
when "{days}" then tokens[:days] = options[:with_leading_zero] ? day.with_leading_zero : day.to_s
|
42
48
|
when "{year_days}" then tokens[:year_days] = options[:with_leading_zero] ? yday.with_leading_zero : yday.to_s
|
43
49
|
when "{months}" then tokens[:months] = options[:with_leading_zero] ? month.with_leading_zero : month.to_s
|
44
|
-
when "{week_num}"
|
45
|
-
when "{week_days}"
|
46
|
-
when "{short_years}"
|
47
|
-
when "{years}"
|
48
|
-
when "{short_week_day_name}"
|
49
|
-
when "{week_day_name}"
|
50
|
-
when "{short_month_name}"
|
51
|
-
when "{month_name}"
|
52
|
-
when "{am_pm}"
|
53
|
-
when "{full_hours}"
|
54
|
-
when "{short_hours}"
|
55
|
-
when "{trimed_hour}"
|
56
|
-
when "{minutes}"
|
57
|
-
when "{seconds}"
|
58
|
-
when "{since_epoch}"
|
59
|
-
when "{day_of_month}"
|
50
|
+
when "{week_num}" then tokens[:week_num] = wday
|
51
|
+
when "{week_days}" then tokens[:week_days] = strftime("%w")
|
52
|
+
when "{short_years}" then tokens[:short_years] = strftime("%y")
|
53
|
+
when "{years}" then tokens[:years] = year
|
54
|
+
when "{short_week_day_name}" then tokens[:short_week_day_name] = language.tr(Tr8n.config.default_abbr_day_name(wday), "Short name for a day of a week", {}, options)
|
55
|
+
when "{week_day_name}" then tokens[:week_day_name] = language.tr(Tr8n.config.default_day_name(wday), "Day of a week", {}, options)
|
56
|
+
when "{short_month_name}" then tokens[:short_month_name] = language.tr(Tr8n.config.default_abbr_month_name(month - 1), "Short month name", {}, options)
|
57
|
+
when "{month_name}" then tokens[:month_name] = language.tr(Tr8n.config.default_month_name(month - 1), "Month name", {}, options)
|
58
|
+
when "{am_pm}" then tokens[:am_pm] = language.tr(strftime("%p"), "Meridian indicator", {}, options)
|
59
|
+
when "{full_hours}" then tokens[:full_hours] = hour
|
60
|
+
when "{short_hours}" then tokens[:short_hours] = strftime("%I")
|
61
|
+
when "{trimed_hour}" then tokens[:trimed_hour] = strftime("%l")
|
62
|
+
when "{minutes}" then tokens[:minutes] = strftime("%M")
|
63
|
+
when "{seconds}" then tokens[:seconds] = strftime("%S")
|
64
|
+
when "{since_epoch}" then tokens[:since_epoch] = strftime("%s")
|
65
|
+
when "{day_of_month}" then tokens[:day_of_month] = strftime("%e")
|
60
66
|
end
|
61
67
|
end
|
62
68
|
|
@@ -64,7 +70,7 @@ class Time
|
|
64
70
|
end
|
65
71
|
alias :tr :translate
|
66
72
|
|
67
|
-
def trl(format = :default, language = Tr8n.
|
73
|
+
def trl(format = :default, language = Tr8n.session.current_language, options = {})
|
68
74
|
tr(format, language, options.merge!(:skip_decorations => true))
|
69
75
|
end
|
70
76
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2014 Michael Berkovich, tr8nhub.com
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -24,7 +24,7 @@
|
|
24
24
|
class Tr8nCore::Generators::Cache::Base
|
25
25
|
|
26
26
|
def log(msg)
|
27
|
-
|
27
|
+
puts("#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}: #{msg}\n")
|
28
28
|
end
|
29
29
|
|
30
30
|
def cache_path
|
@@ -58,7 +58,7 @@ class Tr8nCore::Generators::Cache::Base
|
|
58
58
|
|
59
59
|
def cache_application
|
60
60
|
log("Downloading application...")
|
61
|
-
app = Tr8n.
|
61
|
+
app = Tr8n.session.application.get("application", :definition => true)
|
62
62
|
cache(Tr8n::Application.cache_key(app["key"]), app)
|
63
63
|
log("Application has been cached.")
|
64
64
|
app
|
@@ -66,7 +66,7 @@ class Tr8nCore::Generators::Cache::Base
|
|
66
66
|
|
67
67
|
def cache_languages
|
68
68
|
log("Downloading languages...")
|
69
|
-
languages = Tr8n.
|
69
|
+
languages = Tr8n.session.application.get("application/languages", :definition => true)
|
70
70
|
languages.each do |lang|
|
71
71
|
cache(Tr8n::Language.cache_key(lang["locale"]), lang)
|
72
72
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2014 Michael Berkovich, tr8nhub.com
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -25,7 +25,7 @@ class Tr8nCore::Generators::Cache::File < Tr8nCore::Generators::Cache::Base
|
|
25
25
|
|
26
26
|
def cache_path
|
27
27
|
@cache_path ||= begin
|
28
|
-
path = "#{Tr8n.config.
|
28
|
+
path = "#{Tr8n.config.cache[:path]}/files/tr8n_#{Tr8n.session.application.key}_#{@started_at.strftime('%Y_%m_%d_%H_%M_%S')}"
|
29
29
|
pp "Cache will be stored in #{path}"
|
30
30
|
FileUtils.mkdir_p(path)
|
31
31
|
FileUtils.chmod(0777, path)
|
@@ -43,6 +43,7 @@ class Tr8nCore::Generators::Cache::File < Tr8nCore::Generators::Cache::Base
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def execute
|
46
|
+
Tr8n.session.init_application
|
46
47
|
cache_application
|
47
48
|
@languages = cache_languages
|
48
49
|
cache_translations
|
@@ -59,7 +60,7 @@ class Tr8nCore::Generators::Cache::File < Tr8nCore::Generators::Cache::Base
|
|
59
60
|
|
60
61
|
sources.each do |source|
|
61
62
|
log("Downloading #{source["source"]} in #{language["locale"]}...")
|
62
|
-
translation_keys = Tr8n.
|
63
|
+
translation_keys = Tr8n.session.application.get("source/translations", {:source => source["source"], :locale => language["locale"]})
|
63
64
|
data = {:source => source["source"], :translation_keys => translation_keys}
|
64
65
|
cache(Tr8n::Source.cache_key(source["source"], language["locale"]), data)
|
65
66
|
end
|
data/lib/tr8n_core/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2014 Michael Berkovich, tr8nhub.com
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -23,5 +23,5 @@
|
|
23
23
|
|
24
24
|
|
25
25
|
module Tr8nCore
|
26
|
-
VERSION = "4.0.
|
26
|
+
VERSION = "4.0.2"
|
27
27
|
end
|
data/lib/tr8n_core.rb
CHANGED
data/spec/application_spec.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Tr8n::Application do
|
6
6
|
describe "#configuration" do
|
7
7
|
it "sets class attributes" do
|
8
|
-
expect(Tr8n::Application.attributes).to eq([:host, :key, :secret, :access_token,
|
8
|
+
expect(Tr8n::Application.attributes).to eq([:host, :key, :secret, :access_token,
|
9
|
+
:name, :description, :threshold, :default_locale, :default_level,
|
10
|
+
:features, :languages, :featured_locales, :sources, :components, :tokens,
|
11
|
+
:css, :shortcuts])
|
9
12
|
end
|
10
13
|
end
|
11
14
|
|
@@ -35,194 +38,4 @@ describe Tr8n::Application do
|
|
35
38
|
end
|
36
39
|
end
|
37
40
|
|
38
|
-
describe "#translation" do
|
39
|
-
before do
|
40
|
-
@app = init_application
|
41
|
-
@english = @app.language('en-US')
|
42
|
-
@russian = @app.language('ru')
|
43
|
-
end
|
44
|
-
|
45
|
-
it "translates with fallback to English" do
|
46
|
-
Tr8n.config.with_block_options(:dry => true) do
|
47
|
-
#expect(@russian.translate("{count||message}", {:count => 1})).to eq("1 message")
|
48
|
-
#expect(@russian.translate("{count||message}", {:count => 5})).to eq("5 messages")
|
49
|
-
#expect(@russian.translate("{count||message}", {:count => 0})).to eq("0 messages")
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# it "translates basic phrases to Russian" do
|
54
|
-
# load_translation_keys_from_file(@app, 'translations/ru/basic.json')
|
55
|
-
# Tr8n.config.with_block_options(:dry => true) do
|
56
|
-
# expect(@russian.translate("Hello World")).to eq("Привет Мир")
|
57
|
-
# expect(@russian.translate("Hello World", "Wrong context")).to eq("Hello World")
|
58
|
-
# expect(@russian.translate("Hello World", "Greeting context")).to eq("Привет Мир")
|
59
|
-
# expect(@russian.translate("Hello world")).to eq("Hello world")
|
60
|
-
# expect(@russian.translate("Hello {user}", nil, :user => "Михаил")).to eq("Привет Михаил")
|
61
|
-
# end
|
62
|
-
# end
|
63
|
-
#
|
64
|
-
# it "translates basic phrases with data tokens to Russian" do
|
65
|
-
# load_translation_keys_from_file(@app, 'translations/ru/basic.json')
|
66
|
-
# Tr8n.config.with_block_options(:dry => true) do
|
67
|
-
# expect(@russian.translate("Hello {user}", nil, :user => "Михаил")).to eq("Привет Михаил")
|
68
|
-
# end
|
69
|
-
# end
|
70
|
-
#
|
71
|
-
# it "uses default data tokens" do
|
72
|
-
# Tr8n.config.with_block_options(:dry => true) do
|
73
|
-
# expect(@english.translate("He said: {quot}Hello{quot}", nil)).to eq("He said: "Hello"")
|
74
|
-
# expect(@english.translate("Code sample: {lbrace}a:'b'{rbrace}", nil)).to eq("Code sample: {a:'b'}")
|
75
|
-
# end
|
76
|
-
# end
|
77
|
-
#
|
78
|
-
# it "uses basic decoration tokens" do
|
79
|
-
# Tr8n.config.with_block_options(:dry => true) do
|
80
|
-
# expect(@english.translate("Hello [decor: World]", nil, :decor => lambda{|text| "''#{text}''"})).to eq("Hello ''World''")
|
81
|
-
# end
|
82
|
-
# end
|
83
|
-
#
|
84
|
-
# it "uses default decoration tokens" do
|
85
|
-
# load_translation_keys_from_file(@app, 'translations/ru/basic.json')
|
86
|
-
# Tr8n.config.with_block_options(:dry => true) do
|
87
|
-
# expect(@english.translate("Hello [i: World]")).to eq("Hello <i>World</i>")
|
88
|
-
# expect(@russian.translate("Hello [i: World]")).to eq("Привет <i>Мир</i>")
|
89
|
-
# end
|
90
|
-
# end
|
91
|
-
#
|
92
|
-
# it "uses mixed tokens" do
|
93
|
-
# load_translation_keys_from_file(@app, 'translations/ru/basic.json')
|
94
|
-
# Tr8n.config.with_block_options(:dry => true) do
|
95
|
-
# expect(@english.translate("Hello [i: {user}]", nil, :user => "Michael")).to eq("Hello <i>Michael</i>")
|
96
|
-
# expect(@russian.translate("Hello [i: {user}]", nil, :user => "Michael")).to eq("Привет <i>Michael</i>")
|
97
|
-
# end
|
98
|
-
# end
|
99
|
-
#
|
100
|
-
# it "uses method tokens" do
|
101
|
-
# load_translation_keys_from_file(@app, 'translations/ru/basic.json')
|
102
|
-
# Tr8n.config.with_block_options(:dry => true) do
|
103
|
-
# expect(@russian.translate("Hello {user.first_name} [i: {user.last_name}]", nil,
|
104
|
-
# :user => stub_object({:first_name => "Tom", :last_name => "Anderson"}))).to eq("Привет Tom <i>Anderson</i>")
|
105
|
-
# end
|
106
|
-
# end
|
107
|
-
#
|
108
|
-
# it "translates phrases with numeric rules to Russian" do
|
109
|
-
# load_translation_keys_from_file(@app, 'translations/ru/counters.json')
|
110
|
-
# trn = @russian.translate("{count||message}", nil, {:count => 1})
|
111
|
-
# expect(trn).to eq("1 сообщение")
|
112
|
-
# trn = @russian.translate("{count||message}", nil, {:count => 2})
|
113
|
-
# expect(trn).to eq("2 сообщения")
|
114
|
-
# trn = @russian.translate("{count||message}", nil, {:count => 5})
|
115
|
-
# expect(trn).to eq("5 сообщений")
|
116
|
-
# trn = @russian.translate("{count||message}", nil, {:count => 15})
|
117
|
-
# expect(trn).to eq("15 сообщений")
|
118
|
-
# end
|
119
|
-
#
|
120
|
-
# it "translates phrases with gender rules to Russian" do
|
121
|
-
# #load_translation_key_from_hash(@app, {
|
122
|
-
# # "label" => "{actor} sent {target} a gift.",
|
123
|
-
# # "translations" => {
|
124
|
-
# # "ru" => [
|
125
|
-
# # {
|
126
|
-
# # "label"=> "{actor} послал подарок {target::dat}.",
|
127
|
-
# # "locale"=> "ru",
|
128
|
-
# # "context"=> {
|
129
|
-
# # "actor"=> [{ "type"=> "gender", "key"=> "male"}]
|
130
|
-
# # }
|
131
|
-
# # },
|
132
|
-
# # {
|
133
|
-
# # "label"=> "{actor} послала подарок {target::dat}.",
|
134
|
-
# # "locale"=> "ru",
|
135
|
-
# # "context"=> {
|
136
|
-
# # "actor"=> [{ "type"=> "gender", "key"=> "female"}]
|
137
|
-
# # },
|
138
|
-
# # },
|
139
|
-
# # {
|
140
|
-
# # "label"=> "{actor} послал/а подарок {target::dat}.",
|
141
|
-
# # "locale"=> "ru",
|
142
|
-
# # "context"=> {
|
143
|
-
# # "actor"=> [{ "type"=> "gender", "key"=> "unknown"}]
|
144
|
-
# # },
|
145
|
-
# # }
|
146
|
-
# # ]
|
147
|
-
# # }
|
148
|
-
# #});
|
149
|
-
#
|
150
|
-
# load_translation_keys_from_file(@app, "translations/ru/genders.json")
|
151
|
-
#
|
152
|
-
# actor = {'gender' => 'female', 'name' => 'Таня'}
|
153
|
-
# target = {'gender' => 'male', 'name' => 'Михаил'}
|
154
|
-
#
|
155
|
-
# Tr8n.config.with_block_options(:dry => true) do
|
156
|
-
# expect(@russian.translate(
|
157
|
-
# '{actor} sent {target} a gift.', nil,
|
158
|
-
# :actor => {:object => actor, :attribute => 'name'},
|
159
|
-
# :target => {:object => target, :attribute => 'name'})
|
160
|
-
# ).to eq("Таня послала подарок Михаилу.")
|
161
|
-
#
|
162
|
-
# expect(@russian.translate(
|
163
|
-
# '{actor} sent {target} a gift.', nil,
|
164
|
-
# :actor => {:object => target, :attribute => 'name'},
|
165
|
-
# :target => {:object => actor, :attribute => 'name'})
|
166
|
-
# ).to eq("Михаил послал подарок Тане.")
|
167
|
-
#
|
168
|
-
# expect(@russian.translate(
|
169
|
-
# '{actor} loves {target}.', nil,
|
170
|
-
# :actor => {:object => actor, :attribute => 'name'},
|
171
|
-
# :target => {:object => target, :attribute => 'name'})
|
172
|
-
# ).to eq("Таня любит Михаила.")
|
173
|
-
#
|
174
|
-
# expect(@russian.translate(
|
175
|
-
# '{actor} saw {target} {count||day} ago.', nil,
|
176
|
-
# :actor => {:object => actor, :attribute => 'name'},
|
177
|
-
# :target => {:object => target, :attribute => 'name'},
|
178
|
-
# :count => 2)
|
179
|
-
# ).to eq("Таня видела Михаила 2 дня назад.")
|
180
|
-
#
|
181
|
-
# expect(@russian.translate(
|
182
|
-
# '{actor} saw {target} {count||day} ago.', nil,
|
183
|
-
# :actor => {:object => target, :attribute => 'name'},
|
184
|
-
# :target => {:object => actor, :attribute => 'name'},
|
185
|
-
# :count => 2)
|
186
|
-
# ).to eq("Михаил видел Таню 2 дня назад.")
|
187
|
-
#
|
188
|
-
# end
|
189
|
-
#
|
190
|
-
# # trn = @russian.translate("{count||message}", nil, {:count => 1})
|
191
|
-
# # expect(trn).to eq("1 сообщение")
|
192
|
-
# end
|
193
|
-
#
|
194
|
-
end
|
195
|
-
|
196
|
-
#describe "#integration" do
|
197
|
-
# # before do
|
198
|
-
# # # @app = Tr8n::Application.init("http://geni.berkovich.net", "29adc3257b6960703", "abcdefg")
|
199
|
-
# # end
|
200
|
-
#
|
201
|
-
# # it "returns cached language by locale" do
|
202
|
-
# # # russian = @app.language("ru")
|
203
|
-
# # # pp russian.translate("{count||message,messages}", nil, :count => 3)
|
204
|
-
# # end
|
205
|
-
#
|
206
|
-
# # it "returns new language by locale" do
|
207
|
-
# # # french = @app.language("fr")
|
208
|
-
# # # pp french
|
209
|
-
# # end
|
210
|
-
#
|
211
|
-
# # it "returns translators" do
|
212
|
-
# # # translators = @app.translators
|
213
|
-
# # # pp french
|
214
|
-
# # end
|
215
|
-
#
|
216
|
-
# # it "returns featured languages" do
|
217
|
-
# # # featured_languages = @app.featured_languages
|
218
|
-
# # # pp french
|
219
|
-
# # end
|
220
|
-
#
|
221
|
-
# # it "returns source by key" do
|
222
|
-
# # # source = @app.source_by_key("/")
|
223
|
-
# # # pp source.to_api_hash
|
224
|
-
# # end
|
225
|
-
#
|
226
|
-
#end
|
227
|
-
|
228
41
|
end
|
data/spec/base_spec.rb
CHANGED
data/spec/config_spec.rb
CHANGED
@@ -1,16 +1,32 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Tr8n::Config do
|
6
6
|
describe "loading defaults" do
|
7
7
|
it "should load correct values" do
|
8
|
-
expect(Tr8n.config.
|
8
|
+
expect(Tr8n.config.logger[:enabled]).to be_false
|
9
9
|
expect(Tr8n.config.enabled?).to be_true
|
10
10
|
expect(Tr8n.config.default_locale).to eq("en-US")
|
11
|
-
expect(Tr8n.config.
|
12
|
-
expect(Tr8n.config.
|
13
|
-
expect(Tr8n.config.
|
11
|
+
expect(Tr8n.config.cache[:enabled]).to be_false
|
12
|
+
expect(Tr8n.config.logger[:path]).to eq("./log/tr8n.log")
|
13
|
+
expect(Tr8n.config.cache[:adapter]).to eq("memcache")
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
describe "configuring settings" do
|
18
|
+
it "should preserve changes" do
|
19
|
+
expect(Tr8n.config.default_locale).to eq("en-US")
|
20
|
+
Tr8n.configure do |config|
|
21
|
+
config.default_locale= 'ru'
|
22
|
+
end
|
23
|
+
expect(Tr8n.config.default_locale).to eq("ru")
|
24
|
+
|
25
|
+
Tr8n.configure do |config|
|
26
|
+
config.default_locale= 'en-US'
|
27
|
+
end
|
28
|
+
expect(Tr8n.config.default_locale).to eq("en-US")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
16
32
|
end
|
data/spec/decorator_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Tr8n::Decorators::Html do
|
6
6
|
describe "html decorator" do
|
@@ -19,16 +19,16 @@ describe Tr8n::Decorators::Html do
|
|
19
19
|
})
|
20
20
|
|
21
21
|
expect(decor.decorate("Hello World", en, en, tkey, {:skip_decorations => true})).to eq("Hello World")
|
22
|
-
Tr8n.
|
22
|
+
Tr8n.session.current_translator = nil
|
23
23
|
expect(decor.decorate("Hello World", en, en, tkey)).to eq("Hello World")
|
24
24
|
|
25
|
-
Tr8n.
|
25
|
+
Tr8n.session.current_translator = Tr8n::Translator.new
|
26
26
|
expect(decor.decorate("Hello World", en, en, tkey)).to eq("Hello World")
|
27
27
|
|
28
|
-
Tr8n.
|
29
|
-
Tr8n.
|
28
|
+
Tr8n.session.current_translator = Tr8n::Translator.new
|
29
|
+
Tr8n.session.current_translator.inline = false
|
30
30
|
expect(decor.decorate("Hello World", en, en, tkey)).to eq("Hello World")
|
31
|
-
Tr8n.
|
31
|
+
Tr8n.session.current_translator.inline = true
|
32
32
|
expect(decor.decorate("Hello World", en, en, tkey)).to eq("Hello World")
|
33
33
|
expect(decor.decorate("Privet Mir", ru, ru, tkey)).to eq("<span class='tr8n_pending'>Privet Mir</span>")
|
34
34
|
expect(decor.decorate("Privet Mir", ru, ru, tkey, {:use_div => true})).to eq("<div class='tr8n_pending'>Privet Mir</div>")
|
@@ -42,8 +42,8 @@ describe Tr8n::Decorators::Html do
|
|
42
42
|
tkey.locked = true
|
43
43
|
expect(decor.decorate("Privet Mir", ru, ru, tkey)).to eq("Privet Mir")
|
44
44
|
|
45
|
-
Tr8n.
|
46
|
-
Tr8n.
|
45
|
+
Tr8n.session.current_translator.features = {"show_locked_keys" => true}
|
46
|
+
Tr8n.session.current_translator.manager = true
|
47
47
|
expect(decor.decorate("Privet Mir", ru, ru, tkey)).to eq("<span class='tr8n_translatable tr8n_locked' data-translation_key_id='5'>Privet Mir</span>")
|
48
48
|
end
|
49
49
|
end
|
@@ -268,13 +268,13 @@
|
|
268
268
|
{
|
269
269
|
"one":"{$0}",
|
270
270
|
"few":"{$1}",
|
271
|
-
"many":"$
|
271
|
+
"many":"{$2}",
|
272
272
|
"other":"{$2}"
|
273
273
|
},
|
274
274
|
{
|
275
275
|
"one":"{$0}",
|
276
276
|
"few":"{$1}",
|
277
|
-
"many":"$
|
277
|
+
"many":"{$2}",
|
278
278
|
"other":"{$3}"
|
279
279
|
}
|
280
280
|
],
|
@@ -496,10 +496,42 @@
|
|
496
496
|
"operations":"(append 'a' @value)",
|
497
497
|
"operations_expression":[
|
498
498
|
"append",
|
499
|
-
"
|
499
|
+
"а",
|
500
500
|
"@value"
|
501
501
|
]
|
502
|
-
}
|
502
|
+
},
|
503
|
+
{
|
504
|
+
"id":929,
|
505
|
+
"conditions":"(match '/[а]$/' @value)",
|
506
|
+
"conditions_expression":[
|
507
|
+
"match",
|
508
|
+
"/[а]$/",
|
509
|
+
"@value"
|
510
|
+
],
|
511
|
+
"operations":"(replace 'a' 'ы' @value)",
|
512
|
+
"operations_expression":[
|
513
|
+
"replace",
|
514
|
+
"а",
|
515
|
+
"ы",
|
516
|
+
"@value"
|
517
|
+
]
|
518
|
+
},
|
519
|
+
{
|
520
|
+
"id":930,
|
521
|
+
"conditions":"(match '/[ь]$/' @value)",
|
522
|
+
"conditions_expression":[
|
523
|
+
"match",
|
524
|
+
"/[ь]$/",
|
525
|
+
"@value"
|
526
|
+
],
|
527
|
+
"operations":"(replace 'ь' 'я' @value)",
|
528
|
+
"operations_expression":[
|
529
|
+
"replace",
|
530
|
+
"ь",
|
531
|
+
"я",
|
532
|
+
"@value"
|
533
|
+
]
|
534
|
+
}
|
503
535
|
]
|
504
536
|
},
|
505
537
|
"ins":{
|
data/spec/language_case_spec.rb
CHANGED