Commit 00f42579723e8fd5e3debe3a9fe9eb1def8d7da7

Authored by Antonio Terceiro
1 parent 26db3c33

Remove I18N local hacks

Internationalization of the ActiveRecord error messages do not work yet.
app/controllers/application_controller.rb
... ... @@ -46,7 +46,7 @@ class ApplicationController < ActionController::Base
46 46 def set_locale
47 47 FastGettext.available_locales = Noosfero.available_locales
48 48 FastGettext.default_locale = Noosfero.default_locale
49   - FastGettext.set_locale(params[:lang] || session[:lang] || Noosfero.default_locale || request.env['HTTP_ACCEPT_LANGUAGE'] || 'en')
  49 + I18n.locale = FastGettext.locale = (params[:lang] || session[:lang] || Noosfero.default_locale || request.env['HTTP_ACCEPT_LANGUAGE'] || 'en')
50 50 if params[:lang]
51 51 session[:lang] = params[:lang]
52 52 end
... ...
lib/noosfero/i18n.rb
... ... @@ -6,153 +6,6 @@ class Object
6 6 alias :ngettext :n_
7 7 end
8 8  
9   -class ActiveRecord::Errors
10   - default_error_messages.update(
11   - :inclusion => "%{fn} is not included in the list",
12   - :exclusion => "%{fn} is reserved",
13   - :invalid => "%{fn} is invalid",
14   - :confirmation => "%{fn} doesn't match confirmation",
15   - :accepted => "%{fn} must be accepted",
16   - :empty => "%{fn} can't be empty",
17   - :blank => "%{fn} can't be blank",
18   - :too_long => "%{fn} is too long (maximum is %d characters)",
19   - :too_short => "%{fn} is too short (minimum is %d characters)",
20   - :wrong_length => "%{fn} is the wrong length (should be %d characters)",
21   - :taken => "%{fn} has already been taken",
22   - :not_a_number => "%{fn} is not a number"
23   - )
24   -
25   - def localize_error_messages
26   - errors = {}
27   - each do |attr,msg|
28   - next if msg.nil?
29   - errors[attr] ||= []
30   - errors[attr] << _(msg).sub('%{fn}', @base.class.human_attribute_name(attr))
31   - end
32   - errors
33   - end
34   - def on_with_gettext(attribute)
35   - errors = localize_error_messages[attribute.to_s]
36   - return nil if errors.nil?
37   - errors.size == 1 ? errors.first : errors
38   - end
39   - alias_method_chain :on, :gettext
40   -
41   - def full_messages_with_gettext
42   - full_messages = []
43   - errors = localize_error_messages
44   - errors.each_key do |attr|
45   - errors[attr].each do |msg|
46   - next if msg.nil?
47   - full_messages << msg
48   - end
49   - end
50   - full_messages
51   - end
52   - alias_method_chain :full_messages, :gettext
53   -end
54   -
55   -
56   -module ActionView::Helpers::ActiveRecordHelper
57   - module L10n
58   - @error_message_title = ["%{num} error prohibited this %{record} from being saved", "%{num} errors prohibited this %{record} from being saved"]
59   - @error_message_explanation = ["There was a problem with the following field:", "There were problems with the following fields:"]
60   - module_function
61   - def error_messages_for(instance, objects, object_names, count, options)
62   - record = _(options[:object_name] || object_names[0].to_s)
63   -
64   - html = {}
65   - [:id, :class].each do |key|
66   - if options.include?(key)
67   - value = options[key]
68   - html[key] = value unless value.blank?
69   - else
70   - html[key] = 'errorExplanation'
71   - end
72   - end
73   -
74   - if options[:message_title]
75   - header_message = instance.error_message(options[:message_title], count) % {:num => count, :record => record}
76   - else
77   - header_message = ((count == 1) ? _(@error_message_title[0]) : _(@error_message_title[1])) % {:num => count, :record => record}
78   - end
79   - if options[:message_explanation]
80   - message_explanation = instance.error_message(options[:message_explanation], count) % {:num => count}
81   - else
82   - message_explanation = (count == 1 ? _(@error_message_explanation[0]) : _(@error_message_explanation[1])) % {:num => count}
83   - end
84   -
85   - error_messages = objects.map {|object| object.errors.full_messages.map {|msg| instance.content_tag(:li, msg) } }
86   -
87   - instance.content_tag(
88   - :div,
89   - instance.content_tag(options[:header_tag] || :h2, header_message) <<
90   - instance.content_tag(:p, message_explanation) <<
91   - instance.content_tag(:ul, error_messages),
92   - html
93   - )
94   - end
95   - end
96   -
97   - alias error_messages_for_without_localize error_messages_for #:nodoc:
98   -
99   - # error_messages_for overrides original method with localization.
100   - # And also it extends to be able to replace the title/explanation of the header of the error dialog. (Since 1.90)
101   - # If you want to override these messages in the whole application,
102   - # use ActionView::Helpers::ActiveRecordHelper::L10n.set_error_message_(title|explanation) instead.
103   - # * :message_title - the title of message. Use Nn_() to path the strings for singular/plural.
104   - # e.g. Nn_("%{num} error prohibited this %{record} from being saved",
105   - # "%{num} errors prohibited this %{record} from being saved")
106   - # * :message_explanation - the explanation of message
107   - # e.g. Nn_("There was a problem with the following field:",
108   - # "There were %{num} problems with the following fields:")
109   - def error_messages_for(*params)
110   - options = params.last.is_a?(Hash) ? params.pop.symbolize_keys : {}
111   - objects = params.collect {|object_name| instance_variable_get("@#{object_name}") }.compact
112   - object_names = params.dup
113   - count = objects.inject(0) {|sum, object| sum + object.errors.count }
114   - if count.zero?
115   - ''
116   - else
117   - L10n.error_messages_for(self, objects, object_names, count, options)
118   - end
119   - end
120   -
121   -end
122   -
123   -module ActionController::Caching::Fragments
124   - def fragment_cache_key_with_fast_gettext(name)
125   - ret = fragment_cache_key_without_fast_gettext(name)
126   - if ret.is_a? String
127   - ret.gsub(/:/, ".") << "_#{FastGettext.locale}"
128   - else
129   - ret
130   - end
131   - end
132   - alias_method_chain :fragment_cache_key, :fast_gettext
133   -
134   - def expire_fragment_with_fast_gettext(name, options = nil)
135   - return unless perform_caching
136   -
137   - key = fragment_cache_key_without_fast_gettext(name)
138   - if key.is_a?(Regexp)
139   - self.class.benchmark "Expired fragments matching: #{key.source}" do
140   - cache_store.delete_matched(key, options)
141   - end
142   - else
143   - key = key.gsub(/:/, ".")
144   - self.class.benchmark "Expired fragment: #{key}, lang = #{FastGettext.available_locales.inspect}" do
145   - if FastGettext.available_locales
146   - FastGettext.available_locales.each do |lang|
147   - cache_store.delete("#{key}_#{lang}", options)
148   - end
149   - end
150   - end
151   - end
152   - end
153   - alias_method_chain :expire_fragment, :fast_gettext
154   -end
155   -
156 9 # translations in place?
157 10 locale_dir = Rails.root.join('locale')
158 11 if File.exists?(locale_dir)
... ...
lib/tasks/gettext.rake
... ... @@ -39,23 +39,12 @@ end
39 39  
40 40 desc "Update pot/po files to match new version."
41 41 task :updatepo do
42   - require 'gettext'
43   - require 'gettext/rails'
44   - require 'gettext/utils'
  42 + require 'gettext_rails/tools'
45 43 GetText::RubyParser::ID << '__'
46 44 GetText::RubyParser::PLURAL_ID << 'n__'
47 45 GetText::ActiveRecordParser.init(:use_classname => false)
48 46  
49   - module GetText
50   - module_function
51   - def update_pofiles(textdomain, files, app_version, po_root = "po", refpot = "tmp.pot")
52   - rgettext(files, refpot)
53   - system("mv tmp.pot tmp2.pot; msguniq -o tmp.pot tmp2.pot; rm -f tmp2.pot")
54   - msgmerge_all(textdomain, app_version, po_root, refpot)
55   - File.delete(refpot)
56   - end
57   - end
58   -
  47 + puts 'Extracting strings from source. This may take a while ...'
59 48 sources =
60 49 Dir.glob("{app,lib}/**/*.{rb,rhtml,erb}") +
61 50 Dir.glob('config/initializers/*.rb') +
... ...