From: Tom Hughes Date: Fri, 31 Aug 2012 10:51:58 +0000 (+0100) Subject: Monkey patch I18n::JS to ensure translations are in a fixed order X-Git-Tag: live~5412 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/81336c4a87b8651b37523fef74ea0f819eea35fa 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. --- diff --git a/config/initializers/i18n.rb b/config/initializers/i18n.rb index 036de52d1..de44126b0 100644 --- a/config/initializers/i18n.rb +++ b/config/initializers/i18n.rb @@ -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)