From 81336c4a87b8651b37523fef74ea0f819eea35fa Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Fri, 31 Aug 2012 11:51:58 +0100 Subject: [PATCH] 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. --- config/initializers/i18n.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) 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) -- 2.43.2