From 0343f6dc9438573d988d8987895907457365dc2a Mon Sep 17 00:00:00 2001 From: Simon Eskildsen Date: Thu, 15 Aug 2013 11:12:45 -0400 Subject: [PATCH] Add escaping of symbols --- lib/liquid/i18n.rb | 7 ++++--- test/liquid/i18n_test.rb | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/liquid/i18n.rb b/lib/liquid/i18n.rb index 7e0687c3..44641e43 100644 --- a/lib/liquid/i18n.rb +++ b/lib/liquid/i18n.rb @@ -24,9 +24,10 @@ module Liquid private def interpolate(name, vars) - name.gsub(/:(\w+)/) do - vars[$1.to_sym] or raise TranslationError, translate("errors.i18n.undefined_interpolation", :key => $1, :name => name) - end + name.gsub(/([^\\]):(\w+)/) { + raise TranslationError, translate("errors.i18n.undefined_interpolation", :key => $1, :name => name) unless vars[$2.to_sym] + "#{$1}#{vars[$2.to_sym]}" + }.gsub("\\:", ":") end def deep_fetch_translation(name) diff --git a/test/liquid/i18n_test.rb b/test/liquid/i18n_test.rb index e6e0d7ad..76e7fdfa 100644 --- a/test/liquid/i18n_test.rb +++ b/test/liquid/i18n_test.rb @@ -34,4 +34,12 @@ class I18nTest < Test::Unit::TestCase def test_sets_default_path_to_en assert_equal I18n::DEFAULT_LOCALE, I18n.new.path end + + def test_escaping_of_symbols + assert_equal "do replaced! not :gsub", @i18n.send(:interpolate, + 'do :replace not \\:gsub', + { + :replace => "replaced!" + }) + end end