Commit 00f42579723e8fd5e3debe3a9fe9eb1def8d7da7
1 parent
26db3c33
Exists in
master
and in
29 other branches
Remove I18N local hacks
Internationalization of the ActiveRecord error messages do not work yet.
Showing
3 changed files
with
3 additions
and
161 deletions
Show diff stats
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') + | ... | ... |