diff options
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/i18n.rb')
| -rw-r--r-- | vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/i18n.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/i18n.rb b/vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/i18n.rb new file mode 100644 index 0000000..2671507 --- /dev/null +++ b/vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/i18n.rb @@ -0,0 +1,39 @@ +require 'yaml' + +module Liquid + class I18n + DEFAULT_LOCALE = File.join(File.expand_path(__dir__), "locales", "en.yml") + + TranslationError = Class.new(StandardError) + + attr_reader :path + + def initialize(path = DEFAULT_LOCALE) + @path = path + end + + def translate(name, vars = {}) + interpolate(deep_fetch_translation(name), vars) + end + alias_method :t, :translate + + def locale + @locale ||= YAML.load_file(@path) + end + + private + + def interpolate(name, vars) + name.gsub(/%\{(\w+)\}/) do + # raise TranslationError, "Undefined key #{$1} for interpolation in translation #{name}" unless vars[$1.to_sym] + (vars[$1.to_sym]).to_s + end + end + + def deep_fetch_translation(name) + name.split('.'.freeze).reduce(locale) do |level, cur| + level[cur] or raise TranslationError, "Translation for #{name} does not exist in locale #{path}" + end + end + end +end |
