Monkey patch I18n::JS to ensure translations are in a fixed order

Without this the result of converting the hash to JSON can vary
which causes different hashes for the result JS asset.

This is only an issue with ruby 1.8 as ruby 1.9 hashes behave like
the ActiveSupport::OrderedHash and enumerate in insertion order.
This commit is contained in:
Tom Hughes 2012-08-31 11:51:58 +01:00
parent 815c98c977
commit 81336c4a87

View file

@ -16,6 +16,32 @@ module I18n
end
end
end
module JS
class << self
def make_ordered(unordered)
ordered = ActiveSupport::OrderedHash.new
unordered.keys.sort { |a,b| a.to_s <=> b.to_s }.each do |key|
value = unordered[key]
if value.is_a?(Hash)
ordered[key] = make_ordered(value)
else
ordered[key] = value
end
end
ordered
end
def filtered_translations_with_order
make_ordered(filtered_translations_without_order)
end
alias_method_chain :filtered_translations, :order
end
end
end
I18n::Backend::Simple.include(I18n::Backend::PluralizationFallback)