tr8n_core 4.0.7 → 4.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/lib/tr8n/api_client.rb +28 -18
- data/lib/tr8n/application.rb +37 -64
- data/lib/tr8n/cache.rb +8 -41
- data/lib/tr8n/cache_adapters/file.rb +1 -2
- data/lib/tr8n/cache_adapters/memcache.rb +2 -2
- data/lib/tr8n/cache_adapters/redis.rb +2 -2
- data/lib/tr8n/config.rb +48 -13
- data/lib/tr8n/decorators/html.rb +3 -10
- data/lib/tr8n/language.rb +25 -112
- data/lib/tr8n/language_case.rb +1 -1
- data/lib/tr8n/session.rb +2 -9
- data/lib/tr8n/source.rb +12 -44
- data/lib/tr8n/{tokens/data_tokenizer.rb → tokenizers/data.rb} +4 -3
- data/lib/tr8n/{tokens/decoration_tokenizer.rb → tokenizers/decoration.rb} +6 -5
- data/lib/tr8n/tokenizers/dom.rb +346 -0
- data/lib/tr8n/tokens/data.rb +15 -22
- data/lib/tr8n/tokens/transform.rb +24 -12
- data/lib/tr8n/translation_key.rb +6 -29
- data/lib/tr8n/utils.rb +5 -0
- data/lib/tr8n_core/version.rb +1 -1
- data/lib/tr8n_core.rb +7 -26
- metadata +30 -100
- data/lib/tr8n/cache_adapters/cdb.rb +0 -87
- data/lib/tr8n/tokens/hidden.rb +0 -57
- data/spec/application_spec.rb +0 -52
- data/spec/base_spec.rb +0 -19
- data/spec/cache/adapters/file_spec.rb +0 -32
- data/spec/cache/adapters/memcache_spec.rb +0 -15
- data/spec/cache/generators/file_generator_spec.rb +0 -30
- data/spec/config_spec.rb +0 -32
- data/spec/decorator_spec.rb +0 -12
- data/spec/decorators/base_spec.rb +0 -14
- data/spec/decorators/default_spec.rb +0 -12
- data/spec/decorators/html_spec.rb +0 -50
- data/spec/ext/array_spec.rb +0 -12
- data/spec/ext/hash_spec.rb +0 -15
- data/spec/ext/string_spec.rb +0 -10
- data/spec/fixtures/application.json +0 -112
- data/spec/fixtures/languages/en-US.json +0 -1424
- data/spec/fixtures/languages/es.json +0 -291
- data/spec/fixtures/languages/ru.json +0 -582
- data/spec/fixtures/translations/ru/basic.json +0 -56
- data/spec/fixtures/translations/ru/counters.json +0 -43
- data/spec/fixtures/translations/ru/genders.json +0 -171
- data/spec/fixtures/translations/ru/last_names.txt +0 -200
- data/spec/fixtures/translations/ru/names.json +0 -1
- data/spec/fixtures/translations/ru/names.txt +0 -458
- data/spec/language_case_rule_spec.rb +0 -57
- data/spec/language_case_spec.rb +0 -58
- data/spec/language_context_rule_spec.rb +0 -75
- data/spec/language_context_spec.rb +0 -333
- data/spec/language_spec.rb +0 -615
- data/spec/logger_spec.rb +0 -15
- data/spec/rules_engine/evaluator_spec.rb +0 -150
- data/spec/rules_engine/parser_spec.rb +0 -31
- data/spec/source_spec.rb +0 -13
- data/spec/spec_helper.rb +0 -101
- data/spec/tokens/data_spec.rb +0 -114
- data/spec/tokens/data_tokenizer_spec.rb +0 -29
- data/spec/tokens/decoration_tokenizer_spec.rb +0 -81
- data/spec/tokens/hidden_spec.rb +0 -24
- data/spec/tokens/method_spec.rb +0 -84
- data/spec/tokens/transform_spec.rb +0 -50
- data/spec/translation_key_spec.rb +0 -96
- data/spec/translation_spec.rb +0 -24
- data/spec/utils_spec.rb +0 -62
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5d6598f1871117da1975503815421dff165daf9
|
4
|
+
data.tar.gz: e60f6a755c7fede60e1b47daf39ff93e0145636f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccdd9f1b867a34c5bd87f195f57983606b18bacf0f65a0d227637fb761fd40d9a0050744d617d5d2a422be2c9fb4001f6dd7790a5fc406114716ccb68814a367
|
7
|
+
data.tar.gz: 0c718d53381c1ae518576653bd3db3c7a0c57834e2f38593f39c7ab87f66801b000f1cfc13cc0279f2142768c151abc92168ecbd0bcd26888d586088e88a6b8f
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ Tr8n Core Library For Ruby
|
|
7
7
|
[![Build Status](https://travis-ci.org/tr8n/tr8n_ruby_core.png?branch=master)](https://travis-ci.org/tr8n/tr8n_ruby_core)
|
8
8
|
[![Coverage Status](https://coveralls.io/repos/tr8n/tr8n_ruby_core/badge.png?branch=master)](https://coveralls.io/r/tr8n/tr8n_ruby_core?branch=master)
|
9
9
|
[![Gem Version](https://badge.fury.io/rb/tr8n_core.png)](http://badge.fury.io/rb/tr8n_core)
|
10
|
-
[![Dependency Status](https://www.versioneye.com/user/projects/
|
10
|
+
[![Dependency Status](https://www.versioneye.com/user/projects/53cda688225426d5d500015b/badge.svg?style=flat)](https://www.versioneye.com/user/projects/53cda688225426d5d500015b)
|
11
11
|
[![Project status](http://stillmaintained.com/tr8n/tr8n_ruby_core.png)](http://stillmaintained.com/tr8n/tr8n_ruby_core.png)
|
12
12
|
|
13
13
|
Tr8n core library for Ruby is a set of classes that provide translation functionality for any Ruby based application.
|
@@ -210,9 +210,9 @@ Links
|
|
210
210
|
|
211
211
|
* Register on TranslationExchange.com: https://translationexchange.com
|
212
212
|
|
213
|
-
* Read TranslationExchange's documentation: http://wiki.
|
213
|
+
* Read TranslationExchange's documentation: http://wiki.tr8nhub.com
|
214
214
|
|
215
|
-
* Visit TranslationExchange's blog: http://blog.
|
215
|
+
* Visit TranslationExchange's blog: http://blog.tr8nhub.com
|
216
216
|
|
217
217
|
* Follow TranslationExchange on Twitter: https://twitter.com/translationx
|
218
218
|
|
data/lib/tr8n/api_client.rb
CHANGED
@@ -55,7 +55,7 @@ class Tr8n::ApiClient < Tr8n::Base
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def get(path, params = {}, opts = {})
|
58
|
-
api(path, params.merge(:
|
58
|
+
api(path, params.merge(:client_id => application.key, :t => Time.now.to_i), opts.merge(:method => :get))
|
59
59
|
end
|
60
60
|
|
61
61
|
def post(path, params = {}, opts = {})
|
@@ -70,28 +70,37 @@ class Tr8n::ApiClient < Tr8n::Base
|
|
70
70
|
application.host || API_HOST
|
71
71
|
end
|
72
72
|
|
73
|
+
def connection
|
74
|
+
@connection ||= Faraday.new(:url => host) do |faraday|
|
75
|
+
faraday.request(:url_encoded) # form-encode POST params
|
76
|
+
# faraday.response :logger # log requests to STDOUT
|
77
|
+
faraday.adapter(Faraday.default_adapter) # make requests with Net::HTTP
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
73
81
|
def api(path, params = {}, opts = {})
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
# faraday.response :logger # log requests to STDOUT
|
78
|
-
faraday.adapter(Faraday.default_adapter) # make requests with Net::HTTP
|
82
|
+
if opts[:method] == :get and opts[:cache_key]
|
83
|
+
data = Tr8n.cache.fetch(opts[:cache_key]) do
|
84
|
+
execute_request(path, params, opts)
|
79
85
|
end
|
86
|
+
process_response(data, opts)
|
87
|
+
else
|
88
|
+
process_response(execute_request(path, params, opts), opts)
|
89
|
+
end
|
90
|
+
end
|
80
91
|
|
92
|
+
def execute_request(path, params = {}, opts = {})
|
93
|
+
response = nil
|
94
|
+
Tr8n.logger.trace_api_call(path, params) do
|
81
95
|
if opts[:method] == :post
|
82
|
-
response =
|
96
|
+
response = connection.post("#{API_PATH}#{path}", params)
|
83
97
|
else
|
84
|
-
response =
|
85
|
-
end
|
86
|
-
|
87
|
-
data = JSON.parse(response.body)
|
88
|
-
|
89
|
-
unless data["error"].nil?
|
90
|
-
raise Tr8n::Exception.new("Error: #{data["error"]}")
|
98
|
+
response = connection.get("#{API_PATH}#{path}", params)
|
91
99
|
end
|
92
|
-
|
93
|
-
process_response(data, opts)
|
94
100
|
end
|
101
|
+
data = JSON.parse(response.body)
|
102
|
+
raise Tr8n::Exception.new("Error: #{data["error"]}") unless data["error"].nil?
|
103
|
+
data
|
95
104
|
end
|
96
105
|
|
97
106
|
def object_class(opts)
|
@@ -101,7 +110,7 @@ class Tr8n::ApiClient < Tr8n::Base
|
|
101
110
|
|
102
111
|
def process_response(data, opts)
|
103
112
|
if data["results"]
|
104
|
-
Tr8n.logger.debug("
|
113
|
+
Tr8n.logger.debug("received #{data["results"].size} result(s)")
|
105
114
|
return data["results"] unless object_class(opts)
|
106
115
|
objects = []
|
107
116
|
data["results"].each do |data|
|
@@ -111,7 +120,8 @@ class Tr8n::ApiClient < Tr8n::Base
|
|
111
120
|
end
|
112
121
|
|
113
122
|
return data unless object_class(opts)
|
114
|
-
Tr8n.logger.debug("constructing #{object_class(opts).name}")
|
123
|
+
#Tr8n.logger.debug("constructing #{object_class(opts).name}")
|
115
124
|
object_class(opts).new(data.merge(opts[:attributes] || {}))
|
116
125
|
end
|
126
|
+
|
117
127
|
end
|
data/lib/tr8n/application.rb
CHANGED
@@ -37,13 +37,14 @@ class Tr8n::Application < Tr8n::Base
|
|
37
37
|
has_many :features, :languages, :featured_locales, :sources, :components, :tokens, :css, :shortcuts
|
38
38
|
|
39
39
|
def fetch
|
40
|
-
update_attributes(api_client.get("application", {:definition => true}))
|
41
|
-
self
|
40
|
+
update_attributes(api_client.get("application", {:definition => true}, {:cache_key => key}))
|
42
41
|
end
|
43
42
|
|
44
43
|
def update_attributes(attrs)
|
45
44
|
super
|
46
45
|
|
46
|
+
self.host ||= "https://translationexchange.com"
|
47
|
+
|
47
48
|
self.attributes[:languages] = []
|
48
49
|
if hash_value(attrs, :languages)
|
49
50
|
self.attributes[:languages] = hash_value(attrs, :languages).collect{ |l| Tr8n::Language.new(l.merge(:application => self)) }
|
@@ -65,60 +66,56 @@ class Tr8n::Application < Tr8n::Base
|
|
65
66
|
|
66
67
|
@languages_by_locale = nil
|
67
68
|
@missing_keys_by_sources = nil
|
69
|
+
|
70
|
+
self
|
68
71
|
end
|
69
72
|
|
70
|
-
def language(locale = nil
|
73
|
+
def language(locale = nil)
|
71
74
|
locale ||= default_locale || Tr8n.config.default_locale
|
72
|
-
|
73
75
|
@languages_by_locale ||= {}
|
74
76
|
return @languages_by_locale[locale] if @languages_by_locale[locale]
|
75
|
-
|
76
|
-
if Tr8n.config.cache[:enabled]
|
77
|
-
language = Tr8n.cache.fetch(Tr8n::Language.cache_key(locale))
|
78
|
-
if language
|
79
|
-
language.application = self
|
80
|
-
@languages_by_locale[locale] = language
|
81
|
-
return language
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
return nil unless fetch
|
86
|
-
|
87
77
|
@languages_by_locale[locale] = Tr8n::Language.new(:locale => locale, :application => self).fetch
|
88
|
-
|
89
|
-
if Tr8n.config.cache[:enabled] and not Tr8n.cache.read_only?
|
90
|
-
Tr8n.cache.store(Tr8n::Language.cache_key(locale), @languages_by_locale[locale])
|
91
|
-
end
|
92
|
-
|
93
|
-
@languages_by_locale[locale]
|
94
|
-
end
|
95
|
-
|
96
|
-
def locales
|
97
|
-
@locales ||= languages.collect{|lang| lang.locale}
|
98
|
-
end
|
99
|
-
|
100
|
-
def url_for(path)
|
101
|
-
"#{host}#{path}"
|
102
78
|
end
|
103
79
|
|
104
80
|
# Mostly used for testing
|
105
81
|
def add_language(new_language)
|
106
|
-
|
107
|
-
return
|
108
|
-
|
82
|
+
@languages_by_locale ||= {}
|
83
|
+
return @languages_by_locale[new_language.locale] if @languages_by_locale[new_language.locale]
|
109
84
|
new_language.application = self
|
110
85
|
self.languages << new_language
|
111
86
|
@languages_by_locale[new_language.locale] = new_language
|
112
87
|
new_language
|
113
88
|
end
|
114
89
|
|
115
|
-
def
|
116
|
-
|
90
|
+
def locales
|
91
|
+
@locales ||= languages.collect{|lang| lang.locale}
|
92
|
+
end
|
117
93
|
|
94
|
+
def url_for(path)
|
95
|
+
"#{host}#{path}"
|
96
|
+
end
|
97
|
+
|
98
|
+
def source(key, locale)
|
99
|
+
@sources_by_key ||= {}
|
118
100
|
return @sources_by_key[key] if @sources_by_key[key]
|
119
|
-
return nil unless register
|
120
101
|
|
121
|
-
|
102
|
+
unless Tr8n.session.current_translator and Tr8n.session.current_translator.inline?
|
103
|
+
cache_key = Tr8n::Source.cache_key(key, locale)
|
104
|
+
end
|
105
|
+
|
106
|
+
begin
|
107
|
+
@sources_by_key[key] ||= api_client.get(
|
108
|
+
"source",
|
109
|
+
{:source => key, :locale => locale, :translations => true},
|
110
|
+
{
|
111
|
+
:class => Tr8n::Source,
|
112
|
+
:attributes => {:application => self},
|
113
|
+
:cache_key => cache_key
|
114
|
+
}
|
115
|
+
)
|
116
|
+
rescue
|
117
|
+
@sources_by_key[key] ||= Tr8n::Source.new(:source => key)
|
118
|
+
end
|
122
119
|
end
|
123
120
|
|
124
121
|
def component(key, register = true)
|
@@ -165,10 +162,10 @@ class Tr8n::Application < Tr8n::Base
|
|
165
162
|
@components_by_key = {}
|
166
163
|
end
|
167
164
|
|
168
|
-
def register_missing_key(
|
165
|
+
def register_missing_key(source_key, tkey)
|
169
166
|
@missing_keys_by_sources ||= {}
|
170
|
-
@missing_keys_by_sources[
|
171
|
-
@missing_keys_by_sources[
|
167
|
+
@missing_keys_by_sources[source_key] ||= {}
|
168
|
+
@missing_keys_by_sources[source_key][tkey.key] ||= tkey
|
172
169
|
submit_missing_keys if Tr8n.config.submit_missing_keys_realtime
|
173
170
|
end
|
174
171
|
|
@@ -214,30 +211,6 @@ class Tr8n::Application < Tr8n::Base
|
|
214
211
|
hash_value(features, key.to_s)
|
215
212
|
end
|
216
213
|
|
217
|
-
#######################################################################################################
|
218
|
-
## Cache Methods
|
219
|
-
#######################################################################################################
|
220
|
-
|
221
|
-
def self.cache_prefix
|
222
|
-
'a@'
|
223
|
-
end
|
224
|
-
|
225
|
-
def self.cache_key(key)
|
226
|
-
"#{cache_prefix}_[#{key}]"
|
227
|
-
end
|
228
|
-
|
229
|
-
def to_cache_hash
|
230
|
-
hash = to_hash(:host, :key, :secret, :access_token,
|
231
|
-
:name, :description, :threshold,
|
232
|
-
:default_locale, :default_level, :features,
|
233
|
-
:tokens, :css, :shortcuts)
|
234
|
-
hash["languages"] = []
|
235
|
-
languages.each do |lang|
|
236
|
-
hash["languages"] << lang.to_hash(:locale, :name, :english_name, :native_name, :right_to_left, :flag_url)
|
237
|
-
end
|
238
|
-
hash
|
239
|
-
end
|
240
|
-
|
241
214
|
#######################################################################################################
|
242
215
|
## API Methods
|
243
216
|
#######################################################################################################
|
data/lib/tr8n/cache.rb
CHANGED
@@ -32,6 +32,8 @@
|
|
32
32
|
|
33
33
|
module Tr8n
|
34
34
|
|
35
|
+
CACHE_VERSION_KEY = "__tr8n_version__"
|
36
|
+
|
35
37
|
def self.cache
|
36
38
|
@cache ||= begin
|
37
39
|
if Tr8n.config.cache[:enabled]
|
@@ -48,13 +50,15 @@ module Tr8n
|
|
48
50
|
|
49
51
|
def version
|
50
52
|
@version ||= begin
|
51
|
-
v = fetch(
|
52
|
-
|
53
|
+
v = fetch(CACHE_VERSION_KEY) do
|
54
|
+
{'version' => Tr8n.config.cache[:version]}
|
55
|
+
end
|
56
|
+
v['version']
|
53
57
|
end
|
54
58
|
end
|
55
59
|
|
56
60
|
def upgrade_version
|
57
|
-
store(
|
61
|
+
store(CACHE_VERSION_KEY, {'version' => version + 1}, :ttl => 0)
|
58
62
|
@version = nil
|
59
63
|
end
|
60
64
|
|
@@ -87,7 +91,7 @@ module Tr8n
|
|
87
91
|
end
|
88
92
|
|
89
93
|
def versioned_key(key, opts = {})
|
90
|
-
return key if
|
94
|
+
return key if CACHE_VERSION_KEY == key
|
91
95
|
"tr8n_rc_v#{version}_#{key}"
|
92
96
|
end
|
93
97
|
|
@@ -112,42 +116,5 @@ module Tr8n
|
|
112
116
|
# do nothing
|
113
117
|
end
|
114
118
|
|
115
|
-
def serialize_object(key, data)
|
116
|
-
if [Tr8n::Application.cache_prefix,
|
117
|
-
Tr8n::Language.cache_prefix,
|
118
|
-
Tr8n::Source.cache_prefix,
|
119
|
-
Tr8n::Component.cache_prefix,
|
120
|
-
Tr8n::TranslationKey.cache_prefix].include?(key[0..1])
|
121
|
-
json_data = data.to_cache_hash.to_json
|
122
|
-
else
|
123
|
-
# the data must be in cacheable form - usually API responses
|
124
|
-
json_data = data.to_json
|
125
|
-
end
|
126
|
-
|
127
|
-
#info(json_data)
|
128
|
-
json_data
|
129
|
-
end
|
130
|
-
|
131
|
-
def deserialize_object(key, data)
|
132
|
-
#info(data.inspect)
|
133
|
-
|
134
|
-
case key[0..1]
|
135
|
-
when Tr8n::Application.cache_prefix
|
136
|
-
return Tr8n::Application.new(JSON.parse(data))
|
137
|
-
when Tr8n::Language.cache_prefix
|
138
|
-
return Tr8n::Language.new(JSON.parse(data).merge(:application => Tr8n.session.application))
|
139
|
-
when Tr8n::Source.cache_prefix
|
140
|
-
return Tr8n::Source.new(JSON.parse(data).merge(:application => Tr8n.session.application))
|
141
|
-
when Tr8n::Component.cache_prefix
|
142
|
-
return Tr8n::Component.new(JSON.parse(data).merge(:application => Tr8n.session.application))
|
143
|
-
when Tr8n::TranslationKey.cache_prefix
|
144
|
-
return Tr8n::TranslationKey.new(JSON.parse(data).merge(:application => Tr8n.session.application))
|
145
|
-
end
|
146
|
-
|
147
|
-
# API response form will be here
|
148
|
-
JSON.parse(data)
|
149
|
-
end
|
150
|
-
|
151
|
-
|
152
119
|
end
|
153
120
|
end
|
@@ -51,7 +51,7 @@ class Tr8n::CacheAdapters::Memcache < Tr8n::Cache
|
|
51
51
|
data = @cache.get(versioned_key(key, opts))
|
52
52
|
if data
|
53
53
|
info("Cache hit: #{key}")
|
54
|
-
return
|
54
|
+
return data
|
55
55
|
end
|
56
56
|
|
57
57
|
info("Cache miss: #{key}")
|
@@ -72,7 +72,7 @@ class Tr8n::CacheAdapters::Memcache < Tr8n::Cache
|
|
72
72
|
def store(key, data, opts = {})
|
73
73
|
info("Cache store: #{key}")
|
74
74
|
ttl = opts[:ttl] || Tr8n.config.cache[:timeout]
|
75
|
-
@cache.set(versioned_key(key, opts),
|
75
|
+
@cache.set(versioned_key(key, opts), data, ttl)
|
76
76
|
data
|
77
77
|
rescue Exception => ex
|
78
78
|
warn("Failed to store data: #{ex.message}")
|
@@ -55,7 +55,7 @@ class Tr8n::CacheAdapters::Redis < Tr8n::Cache
|
|
55
55
|
data = @cache.get(versioned_key(key, opts))
|
56
56
|
if data
|
57
57
|
info("Cache hit: #{key}")
|
58
|
-
return
|
58
|
+
return data
|
59
59
|
end
|
60
60
|
|
61
61
|
info("Cache miss: #{key}")
|
@@ -78,7 +78,7 @@ class Tr8n::CacheAdapters::Redis < Tr8n::Cache
|
|
78
78
|
ttl = opts[:ttl] || Tr8n.config.cache[:timeout]
|
79
79
|
versioned_key = versioned_key(key, opts)
|
80
80
|
|
81
|
-
@cache.set(versioned_key,
|
81
|
+
@cache.set(versioned_key, data)
|
82
82
|
@cache.expire(versioned_key, ttl) if ttl and ttl > 0
|
83
83
|
rescue Exception => ex
|
84
84
|
warn("Failed to store data: #{ex.message}")
|
data/lib/tr8n/config.rb
CHANGED
@@ -78,7 +78,7 @@ module Tr8n
|
|
78
78
|
attr_accessor :enabled, :default_locale, :default_level, :format, :application, :context_rules, :logger, :cache, :default_tokens, :localization
|
79
79
|
|
80
80
|
# Used by Rails and Sinatra extensions
|
81
|
-
attr_accessor :current_locale_method, :current_user_method
|
81
|
+
attr_accessor :current_locale_method, :current_user_method, :translator_options
|
82
82
|
|
83
83
|
# Used for IRB only
|
84
84
|
attr_accessor :submit_missing_keys_realtime
|
@@ -90,19 +90,41 @@ module Tr8n
|
|
90
90
|
@format = :html
|
91
91
|
|
92
92
|
# if running from IRB, make it default to TRUE
|
93
|
-
@submit_missing_keys_realtime = (
|
93
|
+
@submit_missing_keys_realtime = (%w(irb pry).include?($0 || ''))
|
94
94
|
|
95
95
|
@current_locale_method = :current_locale
|
96
96
|
@current_user_method = :current_user
|
97
97
|
|
98
|
-
#@application = {
|
99
|
-
# :host => 'https://localhost:3000',
|
100
|
-
# :key => 'default',
|
101
|
-
# :secret => '12345',
|
102
|
-
#}
|
103
|
-
|
104
98
|
@application = nil
|
105
99
|
|
100
|
+
@translator_options = {
|
101
|
+
debug: false,
|
102
|
+
debug_format_html: "<span style='font-size:20px;color:red;'>{</span> {$0} <span style='font-size:20px;color:red;'>}</span>",
|
103
|
+
debug_format: '{{{{$0}}}}',
|
104
|
+
split_sentences: false,
|
105
|
+
nodes: {
|
106
|
+
ignored: [],
|
107
|
+
scripts: %w(style script),
|
108
|
+
inline: %w(a span i b img strong s em u sub sup),
|
109
|
+
short: %w(i b),
|
110
|
+
splitters: %w(br hr)
|
111
|
+
},
|
112
|
+
attributes: {
|
113
|
+
labels: %w(title alt)
|
114
|
+
},
|
115
|
+
name_mapping: {
|
116
|
+
b: 'bold',
|
117
|
+
i: 'italic',
|
118
|
+
a: 'link',
|
119
|
+
img: 'picture'
|
120
|
+
},
|
121
|
+
data_tokens: {
|
122
|
+
special: false,
|
123
|
+
numeric: false,
|
124
|
+
numeric_name: 'num'
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
106
128
|
@context_rules = {
|
107
129
|
:number => {
|
108
130
|
:variables => {
|
@@ -110,16 +132,16 @@ module Tr8n
|
|
110
132
|
},
|
111
133
|
:gender => {
|
112
134
|
:variables => {
|
113
|
-
|
135
|
+
'@gender' => 'gender',
|
114
136
|
}
|
115
137
|
},
|
116
138
|
:genders => {
|
117
139
|
:variables => {
|
118
|
-
|
119
|
-
|
140
|
+
'@genders' => lambda{|list| list.collect do |u|
|
141
|
+
u.is_a?(Hash) ? (u['gender'] || u[:gender]) : u.gender
|
120
142
|
end
|
121
143
|
},
|
122
|
-
|
144
|
+
'@size' => lambda{ |list| list.size }
|
123
145
|
}
|
124
146
|
},
|
125
147
|
:date => {
|
@@ -132,7 +154,7 @@ module Tr8n
|
|
132
154
|
},
|
133
155
|
:list => {
|
134
156
|
:variables => {
|
135
|
-
|
157
|
+
'@count' => lambda{|list| list.size}
|
136
158
|
}
|
137
159
|
},
|
138
160
|
}
|
@@ -279,6 +301,19 @@ module Tr8n
|
|
279
301
|
not enabled?
|
280
302
|
end
|
281
303
|
|
304
|
+
def nested_value(hash, key, default_value = nil)
|
305
|
+
parts = key.split('.')
|
306
|
+
parts.each do |part|
|
307
|
+
return default_value unless hash[part.to_sym]
|
308
|
+
hash = hash[part.to_sym]
|
309
|
+
end
|
310
|
+
hash
|
311
|
+
end
|
312
|
+
|
313
|
+
def translator_option(key)
|
314
|
+
nested_value(self.translator_options, key)
|
315
|
+
end
|
316
|
+
|
282
317
|
#########################################################
|
283
318
|
## Application
|
284
319
|
#########################################################
|
data/lib/tr8n/decorators/html.rb
CHANGED
@@ -40,15 +40,8 @@ class Tr8n::Decorators::Html < Tr8n::Decorators::Base
|
|
40
40
|
return translated_label unless Tr8n.session.current_translator and Tr8n.session.current_translator.inline?
|
41
41
|
return translated_label if translation_key.locked? and not Tr8n.session.current_translator.manager?
|
42
42
|
|
43
|
-
element = '
|
44
|
-
if options[:use_div]
|
45
|
-
element = 'div'
|
46
|
-
end
|
47
|
-
|
48
|
-
if translation_key.id.nil?
|
49
|
-
return "<#{element} class='tr8n_pending'>#{translated_label}</#{element}>"
|
50
|
-
end
|
51
|
-
|
43
|
+
element = 'tr8n:tr'
|
44
|
+
element = 'div' if options[:use_div]
|
52
45
|
classes = ['tr8n_translatable']
|
53
46
|
|
54
47
|
if translation_key.locked?
|
@@ -63,7 +56,7 @@ class Tr8n::Decorators::Html < Tr8n::Decorators::Base
|
|
63
56
|
classes << 'tr8n_fallback'
|
64
57
|
end
|
65
58
|
|
66
|
-
html = "<#{element} class='#{classes.join(' ')}' data-
|
59
|
+
html = "<#{element} class='#{classes.join(' ')}' data-translation_key='#{translation_key.key}'>"
|
67
60
|
html << translated_label
|
68
61
|
html << "</#{element}>"
|
69
62
|
html
|