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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +163 -33
  3. data/lib/tr8n/application.rb +29 -27
  4. data/lib/tr8n/base.rb +2 -22
  5. data/lib/tr8n/cache.rb +9 -9
  6. data/lib/tr8n/cache_adapters/cdb.rb +2 -2
  7. data/lib/tr8n/cache_adapters/file.rb +2 -2
  8. data/lib/tr8n/cache_adapters/memcache.rb +3 -3
  9. data/lib/tr8n/cache_adapters/redis.rb +3 -3
  10. data/lib/tr8n/component.rb +1 -1
  11. data/lib/tr8n/config.rb +256 -202
  12. data/lib/tr8n/decorators/base.rb +1 -1
  13. data/lib/tr8n/decorators/default.rb +1 -1
  14. data/lib/tr8n/decorators/html.rb +4 -4
  15. data/lib/tr8n/exception.rb +1 -1
  16. data/lib/tr8n/language.rb +17 -27
  17. data/lib/tr8n/language_case.rb +4 -3
  18. data/lib/tr8n/language_case_rule.rb +1 -1
  19. data/lib/tr8n/language_context.rb +4 -2
  20. data/lib/tr8n/language_context_rule.rb +1 -1
  21. data/lib/tr8n/logger.rb +8 -3
  22. data/lib/tr8n/rules_engine/evaluator.rb +4 -7
  23. data/lib/tr8n/rules_engine/parser.rb +1 -28
  24. data/lib/tr8n/session.rb +87 -0
  25. data/lib/tr8n/source.rb +1 -1
  26. data/lib/tr8n/tokens/data.rb +2 -2
  27. data/lib/tr8n/tokens/data_tokenizer.rb +1 -1
  28. data/lib/tr8n/tokens/decoration_tokenizer.rb +1 -1
  29. data/lib/tr8n/tokens/hidden.rb +1 -1
  30. data/lib/tr8n/tokens/method.rb +1 -1
  31. data/lib/tr8n/tokens/transform.rb +2 -2
  32. data/lib/tr8n/translation.rb +2 -2
  33. data/lib/tr8n/translation_key.rb +4 -4
  34. data/lib/tr8n/translator.rb +1 -1
  35. data/lib/tr8n/utils.rb +1 -1
  36. data/lib/tr8n_core/ext/array.rb +4 -4
  37. data/lib/tr8n_core/ext/date.rb +38 -13
  38. data/lib/tr8n_core/ext/fixnum.rb +3 -3
  39. data/lib/tr8n_core/ext/hash.rb +1 -1
  40. data/lib/tr8n_core/ext/string.rb +3 -3
  41. data/lib/tr8n_core/ext/time.rb +30 -24
  42. data/lib/tr8n_core/generators/cache/base.rb +4 -4
  43. data/lib/tr8n_core/generators/cache/cdb.rb +1 -1
  44. data/lib/tr8n_core/generators/cache/file.rb +4 -3
  45. data/lib/tr8n_core/version.rb +2 -2
  46. data/lib/tr8n_core.rb +1 -1
  47. data/spec/application_spec.rb +5 -192
  48. data/spec/base_spec.rb +1 -1
  49. data/spec/config_spec.rb +21 -5
  50. data/spec/decorator_spec.rb +1 -1
  51. data/spec/decorators/base_spec.rb +1 -1
  52. data/spec/decorators/default_spec.rb +1 -1
  53. data/spec/decorators/html_spec.rb +8 -8
  54. data/spec/fixtures/languages/ru.json +36 -4
  55. data/spec/language_case_rule_spec.rb +1 -1
  56. data/spec/language_case_spec.rb +1 -1
  57. data/spec/language_context_rule_spec.rb +1 -1
  58. data/spec/language_context_spec.rb +1 -1
  59. data/spec/language_spec.rb +603 -4
  60. data/spec/rules_engine/evaluator_spec.rb +1 -1
  61. data/spec/rules_engine/parser_spec.rb +1 -1
  62. data/spec/{helper.rb → spec_helper.rb} +15 -7
  63. data/spec/tokens/data_spec.rb +2 -2
  64. data/spec/tokens/data_tokenizer_spec.rb +1 -1
  65. data/spec/tokens/decoration_tokenizer_spec.rb +1 -1
  66. data/spec/tokens/hidden_spec.rb +1 -1
  67. data/spec/tokens/method_spec.rb +1 -1
  68. data/spec/tokens/transform_spec.rb +1 -1
  69. data/spec/translation_key_spec.rb +1 -1
  70. data/spec/translation_spec.rb +1 -1
  71. data/spec/utils_spec.rb +1 -3
  72. metadata +5 -8
  73. data/config/config.yml +0 -34
  74. data/config/tokens/data.yml +0 -45
  75. data/config/tokens/decorations.yml +0 -37
  76. data/lib/tr8n_core/modules/logger.rb +0 -43
data/lib/tr8n/config.rb CHANGED
@@ -1,5 +1,7 @@
1
+ #!ruby19
2
+ # encoding: utf-8
1
3
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
4
+ # Copyright (c) 2014 Michael Berkovich, tr8nhub.com
3
5
  #
4
6
  # Permission is hereby granted, free of charge, to any person obtaining
5
7
  # a copy of this software and associated documentation files (the
@@ -23,268 +25,320 @@
23
25
 
24
26
  module Tr8n
25
27
 
28
+ class << self
29
+ attr_accessor :config
30
+ end
31
+
32
+ # Initializes default config
33
+
26
34
  def self.config
27
35
  @config ||= Tr8n::Config.new
28
36
  end
29
37
 
30
- # config class can be set
31
- def self.config=(config)
32
- @config = config
38
+ # Allows you to configure Tr8n
39
+ #
40
+ # Tr8n.configure do |config|
41
+ # config.application = {:key => "", :secret => ""}
42
+ #
43
+ # end
44
+ #
45
+
46
+ def self.configure
47
+ yield(self.config)
48
+ end
49
+
50
+ # Allows you to create a block to perform something on adjusted config settings
51
+ # Once the block exists, the config will be reset back to what it was before:
52
+ #
53
+ # Tr8n.with_config_settings do |config|
54
+ # config.format = :text
55
+ #
56
+ # Do something....
57
+ #
58
+ # end
59
+ #
60
+
61
+ def with_config_settings
62
+ old_config = @config.dup
63
+ yield(@config)
64
+ @config = old_config
33
65
  end
34
66
 
35
67
  # Acts as a global singleton that holds all Tr8n configuration
36
68
  # The class can be extended with a different implementation, as long as the interface is supported
37
- class Config < Tr8n::Base
38
- thread_safe_attributes :application, :current_user, :current_language, :current_translator, :current_source, :current_component
39
- thread_safe_attributes :block_options
69
+ class Config
70
+ # Configuration Attributes
71
+ attr_accessor :enabled, :default_locale, :default_level, :format, :application, :context_rules, :logger, :cache, :default_tokens, :localization
40
72
 
41
- def root
42
- @root ||= File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
43
- end
73
+ # Used by Rails and Sinatra extensions
74
+ attr_accessor :current_locale_method, :current_user_method
44
75
 
45
- def env
46
- 'defaults'
47
- end
76
+ # Used for IRB only
77
+ attr_accessor :submit_missing_keys_realtime
48
78
 
49
- def defaults
50
- @defaults ||= Tr8n::Utils.load_yaml("#{root}/config/config.yml", env)
51
- end
79
+ def initialize
80
+ @enabled = true
81
+ @default_locale = 'en-US'
82
+ @default_level = 0
83
+ @format = :html
52
84
 
53
- def enabled?
54
- hash_value(defaults, "enabled")
55
- end
85
+ # if running from IRB, make it default to TRUE
86
+ @submit_missing_keys_realtime = (['irb', 'pry'].include?($0 || ''))
56
87
 
57
- def disabled?
58
- not enabled?
59
- end
88
+ @current_locale_method = :current_locale
89
+ @current_user_method = :current_user
60
90
 
61
- #########################################################
62
- ## Application
63
- #########################################################
64
-
65
- def host
66
- hash_value(defaults, "application.host")
67
- end
91
+ @application = {
92
+ :host => 'http://localhost:3000',
93
+ :key => 'default',
94
+ :secret => '12345',
95
+ }
68
96
 
69
- def app_key
70
- hash_value(defaults, "application.key")
71
- end
97
+ @context_rules = {
98
+ :number => {
99
+ :variables => {
100
+ }
101
+ },
102
+ :gender => {
103
+ :variables => {
104
+ "@gender" => "gender",
105
+ }
106
+ },
107
+ :genders => {
108
+ :variables => {
109
+ "@genders" => lambda{|list| list.collect do |u|
110
+ u.is_a?(Hash) ? (u["gender"] || u[:gender]) : u.gender
111
+ end
112
+ },
113
+ "@size" => lambda{|list| list.size}
114
+ }
115
+ },
116
+ :date => {
117
+ :variables => {
118
+ }
119
+ },
120
+ :time => {
121
+ :variables => {
122
+ }
123
+ },
124
+ :list => {
125
+ :variables => {
126
+ "@count" => lambda{|list| list.size}
127
+ }
128
+ },
129
+ }
72
130
 
73
- def app_secret
74
- hash_value(defaults, "application.secret")
75
- end
131
+ @logger = {
132
+ :enabled => false,
133
+ :path => './log/tr8n.log',
134
+ :level => 'debug'
135
+ }
76
136
 
77
- def init_application
78
- Tr8n::Application.init(host, app_key, app_secret)
79
- self.current_source = "/tr8n/core"
80
- end
137
+ @cache = {
138
+ :enabled => false,
139
+ :host => 'localhost:11211',
140
+ :adapter => 'memcache',
141
+ :version => 1,
142
+ :timeout => 3600
143
+ }
81
144
 
82
- def default_locale
83
- return application.default_locale if application
84
- hash_value(defaults, "default_locale")
85
- end
145
+ @default_tokens = {
146
+ :html => {
147
+ :data => {
148
+ :ndash => "&ndash;", # –
149
+ :mdash => "&mdash;", # —
150
+ :iexcl => "&iexcl;", # ¡
151
+ :iquest => "&iquest;", # ¿
152
+ :quot => "&quot;", # "
153
+ :ldquo => "&ldquo;", # “
154
+ :rdquo => "&rdquo;", # ”
155
+ :lsquo => "&lsquo;", # ‘
156
+ :rsquo => "&rsquo;", # ’
157
+ :laquo => "&laquo;", # «
158
+ :raquo => "&raquo;", # »
159
+ :nbsp => "&nbsp;", # space
160
+ :lsaquo => "&lsaquo;", # ‹
161
+ :rsaquo => "&rsaquo;", # ›
162
+ :br => "<br/>", # line break
163
+ :lbrace => "{",
164
+ :rbrace => "}",
165
+ :trade => "&trade;", # TM
166
+ },
167
+ :decoration => {
168
+ :strong => "<strong>{$0}</strong>",
169
+ :bold => "<strong>{$0}</strong>",
170
+ :b => "<strong>{$0}</strong>",
171
+ :em => "<em>{$0}</em>",
172
+ :italic => "<i>{$0}</i>",
173
+ :i => "<i>{$0}</i>",
174
+ :link => "<a href='{$href}'>{$0}</a>",
175
+ :br => "<br>{$0}",
176
+ :strike => "<strike>{$0}</strike>",
177
+ :div => "<div id='{$id}' class='{$class}' style='{$style}'>{$0}</div>",
178
+ :span => "<span id='{$id}' class='{$class}' style='{$style}'>{$0}</span>",
179
+ :h1 => "<h1>{$0}</h1>",
180
+ :h2 => "<h2>{$0}</h2>",
181
+ :h3 => "<h3>{$0}</h3>",
182
+ }
183
+ },
184
+ :text => {
185
+ :data => {
186
+ :ndash => "–",
187
+ :mdash => "-",
188
+ :iexcl => "¡",
189
+ :iquest => "¿",
190
+ :quot => '"',
191
+ :ldquo => "“",
192
+ :rdquo => "”",
193
+ :lsquo => "‘",
194
+ :rsquo => "’",
195
+ :laquo => "«",
196
+ :raquo => "»",
197
+ :nbsp => " ",
198
+ :lsaquo => "‹",
199
+ :rsaquo => "›",
200
+ :br => "\n",
201
+ :lbrace => "{",
202
+ :rbrace => "}",
203
+ :trade => "™",
204
+ },
205
+ :decoration => {
206
+ :strong => "{$0}",
207
+ :bold => "{$0}",
208
+ :b => "{$0}",
209
+ :em => "{$0}",
210
+ :italic => "{$0}",
211
+ :i => "{$0}",
212
+ :link => "{$0}:{$1}",
213
+ :br => "\n{$0}",
214
+ :strike => "{$0}",
215
+ :div => "{$0}",
216
+ :span => "{$0}",
217
+ :h1 => "{$0}",
218
+ :h2 => "{$0}",
219
+ :h3 => "{$0}",
220
+ }
221
+ }
222
+ }
86
223
 
87
- def default_language
88
- return Tr8n::Language.new(:locale => default_locale, :default => true) if disabled?
89
- application.language(default_locale)
224
+ @localization = {
225
+ :default_day_names => ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
226
+ :default_abbr_day_names => ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
227
+ :default_month_names => ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
228
+ :default_abbr_month_names => ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
229
+ :custom_date_formats => {
230
+ :default => '%m/%d/%Y', # 07/4/2008
231
+ :short_numeric => '%m/%d', # 07/4
232
+ :short_numeric_year => '%m/%d/%y', # 07/4/08
233
+ :long_numeric => '%m/%d/%Y', # 07/4/2008
234
+ :verbose => '%A, %B %d, %Y', # Friday, July 4, 2008
235
+ :monthname => '%B %d', # July 4
236
+ :monthname_year => '%B %d, %Y', # July 4, 2008
237
+ :monthname_abbr => '%b %d', # Jul 4
238
+ :monthname_abbr_year => '%b %d, %Y', # Jul 4, 2008
239
+ :date_time => '%m/%d/%Y at %H:%M', # 01/03/1010 at 5:30
240
+ },
241
+ :token_mapping => {
242
+ "%a" => "{short_week_day_name}",
243
+ "%A" => "{week_day_name}",
244
+ "%b" => "{short_month_name}",
245
+ "%B" => "{month_name}",
246
+ "%p" => "{am_pm}",
247
+ "%d" => "{days}",
248
+ "%e" => "{day_of_month}",
249
+ "%j" => "{year_days}",
250
+ "%m" => "{months}",
251
+ "%W" => "{week_num}",
252
+ "%w" => "{week_days}",
253
+ "%y" => "{short_years}",
254
+ "%Y" => "{years}",
255
+ "%l" => "{trimed_hour}",
256
+ "%H" => "{full_hours}",
257
+ "%I" => "{short_hours}",
258
+ "%M" => "{minutes}",
259
+ "%S" => "{seconds}",
260
+ "%s" => "{since_epoch}"
261
+ }
262
+ }
90
263
  end
91
264
 
92
- def default_level
93
- return application.default_level if application
94
- hash_value(defaults, "default_level")
265
+ def enabled?
266
+ enabled
95
267
  end
96
268
 
97
- def reset
98
- self.application = nil
99
- self.current_user = nil
100
- self.current_language = nil
101
- self.current_translator = nil
102
- self.current_source = nil
103
- self.current_component = nil
104
- self.block_options = nil
269
+ def disabled?
270
+ not enabled?
105
271
  end
106
272
 
107
273
  #########################################################
108
- ## Logger
274
+ ## Application
109
275
  #########################################################
110
276
 
111
- def logger_enabled?
112
- hash_value(defaults, "logger.enabled")
113
- end
114
-
115
- def log_path
116
- ".#{hash_value(defaults, "logger.path")}"
117
- end
277
+ #def default_locale
278
+ # return Tr8n.session.application.default_locale if Tr8n.session.application
279
+ # @default_locale
280
+ #end
281
+ #
282
+ #def default_level
283
+ # return Tr8n.session.application.default_level if Tr8n.session.application
284
+ # @default_level
285
+ #end
118
286
 
119
287
  #########################################################
120
- ## Cache
288
+ ## Decorations
121
289
  #########################################################
122
290
 
123
- def cache_enabled?
124
- hash_value(defaults, "cache.enabled")
125
- end
126
-
127
- def cache_path
128
- "#{root}#{hash_value(defaults, "cache.path")}"
129
- end
130
-
131
- def cache_adapter
132
- hash_value(defaults, "cache.adapter")
133
- end
134
-
135
- def cache_version
136
- hash_value(defaults, "cache.version")
137
- end
138
-
139
- def cache_host
140
- hash_value(defaults, "cache.host")
141
- end
142
-
143
- def cache_timeout
144
- hash_value(defaults, 'cache.timeout')
145
- end
146
-
147
- #########################################################
148
- ## Rules Engine
149
- #########################################################
150
-
151
- def context_rules
152
- @context_rules ||= {
153
- "number" => {
154
- "variables" => {
155
- }
156
- },
157
- "gender" => {
158
- "variables" => {
159
- "@gender" => "gender",
160
- }
161
- },
162
- "genders" => {
163
- "variables" => {
164
- "@genders" => lambda{|list| list.collect do |u|
165
- u.is_a?(Hash) ? (u["gender"] || u[:gender]) : u.gender
166
- end
167
- },
168
- "@size" => lambda{|list| list.size}
169
- }
170
- },
171
- "date" => {
172
- "variables" => {
173
- }
174
- },
175
- "time" => {
176
- "variables" => {
177
- }
178
- },
179
- "list" => {
180
- "variables" => {
181
- "@count" => lambda{|list| list.size}
182
- }
183
- },
184
- }
185
- end
186
-
187
291
  def decorator_class
292
+ return Tr8n::Decorators::Html if @format == :html
188
293
  Tr8n::Decorators::Default
189
294
  end
190
295
 
191
- def default_data_tokens
192
- @default_data_tokens ||= Tr8n::Utils.load_yaml("#{root}/config/tokens/data.yml")
193
- end
194
-
195
- def default_decoration_tokens
196
- @default_decoration_tokens ||= Tr8n::Utils.load_yaml("#{root}/config/tokens/decorations.yml")
197
- end
198
-
199
296
  def default_token_value(token_name, type = :data, format = :html)
200
- return default_data_tokens[format.to_s][token_name.to_s] if type.to_sym == :data
201
- return default_decoration_tokens[format.to_s][token_name.to_s] if type.to_sym == :decoration
297
+ default_tokens[format.to_sym][type.to_sym][token_name.to_sym]
202
298
  end
203
299
 
204
300
  #########################################################
205
- ## Block Options
301
+ ## Localization
206
302
  #########################################################
207
303
 
208
- def block_options
209
- (Thread.current[:block_options] ||= []).last || {}
210
- end
211
-
212
- def with_block_options(opts)
213
- Thread.current[:block_options] ||= []
214
- Thread.current[:block_options].push(opts)
215
- if block_given?
216
- ret = yield
217
- end
218
- Thread.current[:block_options].pop
219
- ret
304
+ def strftime_symbol_to_token(symbol)
305
+ localization[:token_mapping][symbol]
220
306
  end
221
307
 
222
- def current_source_from_block_options
223
- arr = Thread.current[:block_options] || []
224
- arr.reverse.each do |opts|
225
- return application.source_by_key(opts[:source]) unless opts[:source].blank?
226
- end
227
- nil
308
+ def default_day_names
309
+ localization[:default_day_names]
228
310
  end
229
311
 
230
- def current_component_from_block_options
231
- arr = Thread.current[:block_options] || []
232
- arr.reverse.each do |opts|
233
- return application.component_by_key(opts[:component]) unless opts[:component].blank?
234
- end
235
- Tr8n.config.current_component
312
+ def default_day_name(index)
313
+ "" + default_day_names[index]
236
314
  end
237
315
 
238
- #########################################################
239
- ## Localization
240
- #########################################################
241
-
242
- def localization
243
- hash_value(defaults, "localization")
316
+ def default_abbr_day_names
317
+ localization[:default_abbr_day_names]
244
318
  end
245
319
 
246
- def strftime_symbol_to_token(symbol)
247
- {
248
- "%a" => "{short_week_day_name}",
249
- "%A" => "{week_day_name}",
250
- "%b" => "{short_month_name}",
251
- "%B" => "{month_name}",
252
- "%p" => "{am_pm}",
253
- "%d" => "{days}",
254
- "%e" => "{day_of_month}",
255
- "%j" => "{year_days}",
256
- "%m" => "{months}",
257
- "%W" => "{week_num}",
258
- "%w" => "{week_days}",
259
- "%y" => "{short_years}",
260
- "%Y" => "{years}",
261
- "%l" => "{trimed_hour}",
262
- "%H" => "{full_hours}",
263
- "%I" => "{short_hours}",
264
- "%M" => "{minutes}",
265
- "%S" => "{seconds}",
266
- "%s" => "{since_epoch}"
267
- }[symbol]
320
+ def default_abbr_day_name(index)
321
+ "" + default_abbr_day_names[index]
268
322
  end
269
323
 
270
- def default_day_names
271
- hash_value(defaults, "localization.default_day_names")
324
+ def default_month_names
325
+ localization[:default_month_names]
272
326
  end
273
327
 
274
- def default_abbr_day_names
275
- hash_value(defaults, "localization.default_abbr_day_names")
328
+ def default_month_name(index)
329
+ "" + default_month_names[index]
276
330
  end
277
331
 
278
- def default_month_names
279
- hash_value(defaults, "localization.default_month_names")
332
+ def default_abbr_month_names
333
+ localization[:default_abbr_month_names]
280
334
  end
281
335
 
282
- def default_abbr_month_names
283
- hash_value(defaults, "localization.default_abbr_month_names")
336
+ def default_abbr_month_name(index)
337
+ "" + default_abbr_month_names[index]
284
338
  end
285
339
 
286
340
  def default_date_formats
287
- hash_value(defaults, "localization.custom_date_formats")
341
+ localization[:custom_date_formats]
288
342
  end
289
343
 
290
344
  end
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
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
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
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
@@ -28,8 +28,8 @@ class Tr8n::Decorators::Html < Tr8n::Decorators::Base
28
28
  return translated_label if options[:skip_decorations]
29
29
  # if translation key language is the same as target language - skip decorations
30
30
  return translated_label if translation_key.language == target_language
31
- return translated_label unless Tr8n.config.current_translator and Tr8n.config.current_translator.inline?
32
- return translated_label if translation_key.locked? and not Tr8n.config.current_translator.manager?
31
+ return translated_label unless Tr8n.session.current_translator and Tr8n.session.current_translator.inline?
32
+ return translated_label if translation_key.locked? and not Tr8n.session.current_translator.manager?
33
33
 
34
34
  element = 'span'
35
35
  if options[:use_div]
@@ -44,7 +44,7 @@ class Tr8n::Decorators::Html < Tr8n::Decorators::Base
44
44
 
45
45
  if translation_key.locked?
46
46
  # must be a manager and enabling locking feature
47
- return translated_label unless Tr8n.config.current_translator.feature_enabled?(:show_locked_keys)
47
+ return translated_label unless Tr8n.session.current_translator.feature_enabled?(:show_locked_keys)
48
48
  classes << 'tr8n_locked'
49
49
  elsif translation_language == translation_key.language
50
50
  classes << 'tr8n_not_translated'
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
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
data/lib/tr8n/language.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2013 Michael Berkovich, tr8nhub.com
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
@@ -80,7 +80,7 @@ class Tr8n::Language < Tr8n::Base
80
80
  end
81
81
 
82
82
  def current_source(options)
83
- options[:source] || Tr8n.config.block_options[:source] || Tr8n.config.current_source
83
+ options[:source] || Tr8n.session.block_options[:source] || Tr8n.session.current_source || 'undefined'
84
84
  end
85
85
 
86
86
  #######################################################################################################
@@ -104,8 +104,8 @@ class Tr8n::Language < Tr8n::Base
104
104
  return label if label.tr8n_translated?
105
105
 
106
106
  params = Tr8n::Utils.normalize_tr_params(label, description, tokens, options)
107
- key_locale = hash_value(params[:options], :locale) || hash_value(Tr8n.config.block_options, :locale) || Tr8n.config.default_locale
108
- key_level = hash_value(params[:options], :level) || hash_value(Tr8n.config.block_options, :level) || Tr8n.config.default_level
107
+ key_locale = hash_value(params[:options], :locale) || hash_value(Tr8n.session.block_options, :locale) || Tr8n.config.default_locale
108
+ key_level = hash_value(params[:options], :level) || hash_value(Tr8n.session.block_options, :level) || Tr8n.config.default_level
109
109
 
110
110
  temp_key = Tr8n::TranslationKey.new({
111
111
  :application => application,
@@ -118,7 +118,7 @@ class Tr8n::Language < Tr8n::Base
118
118
 
119
119
  #Tr8n.logger.info("Translating " + params[:label] + " from: " + key_locale.inspect + " to " + locale.inspect)
120
120
 
121
- params[:tokens].merge!(:viewing_user => Tr8n.config.current_user)
121
+ params[:tokens].merge!(:viewing_user => Tr8n.session.current_user)
122
122
 
123
123
  if Tr8n.config.disabled? or locale == key_locale
124
124
  return temp_key.substitute_tokens(params[:label], params[:tokens], self, params[:options]).tr8n_translated
@@ -130,15 +130,15 @@ class Tr8n::Language < Tr8n::Base
130
130
  end
131
131
 
132
132
  # no cache or translator is using inline mode - use service, otherwise load from cache
133
- if not Tr8n.config.cache_enabled? or (Tr8n.config.current_translator and Tr8n.config.current_translator.inline?)
133
+ if not Tr8n.config.cache[:enabled] or (Tr8n.session.current_translator and Tr8n.session.current_translator.inline?)
134
134
  return translate_from_service(temp_key, params[:tokens], params[:options]).tr8n_translated
135
135
  end
136
136
 
137
137
  translate_from_cache(temp_key, params[:tokens], params[:options]).tr8n_translated
138
- rescue Exception => ex
139
- Tr8n.logger.error("Failed to translate: #{params[:label]} : #{ex.message}")
140
- Tr8n.logger.error(ex.backtrace)
141
- params[:label]
138
+ #rescue Exception => ex
139
+ # Tr8n.logger.error("Failed to translate: #{params[:label]} : #{ex.message}")
140
+ # Tr8n.logger.error(ex.backtrace)
141
+ # params[:label]
142
142
  end
143
143
  alias :tr :translate
144
144
 
@@ -199,24 +199,14 @@ class Tr8n::Language < Tr8n::Base
199
199
  def translate_from_service(translation_key, tokens, options)
200
200
  source_key = current_source(options)
201
201
 
202
- if source_key
203
- source = application.source(source_key)
204
- source_translation_keys = source.fetch_translations_for_language(self, options)
205
- if source_translation_keys[translation_key.key]
206
- translation_key = source_translation_keys[translation_key.key]
207
- else
208
- application.register_missing_key(translation_key, source)
209
- end
210
-
211
- return translation_key.translate(self, tokens, options)
212
- end
213
-
214
- # all translations are cached in memory as the second level cache
215
- memory_cached_translation_key = application.translation_key(translation_key.key)
216
- if memory_cached_translation_key
217
- translation_key = memory_cached_translation_key
202
+ source = application.source(source_key)
203
+ source_translation_keys = source.fetch_translations_for_language(self, options)
204
+ if source_translation_keys[translation_key.key]
205
+ translation_key = source_translation_keys[translation_key.key]
218
206
  else
219
- translation_key = translation_key.fetch_translations(self, options)
207
+ application.register_missing_key(translation_key, source)
208
+ memory_cached_translation_key = application.translation_key(translation_key.key)
209
+ translation_key = memory_cached_translation_key if memory_cached_translation_key
220
210
  end
221
211
 
222
212
  translation_key.translate(self, tokens, options)