Module: JekyllLanguagePlugin::LiquidContext

Defined in:
lib/jekyll-language-plugin/liquid_context.rb

Class Method Summary collapse

Class Method Details

.get_language_data(context, keys = nil) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/jekyll-language-plugin/liquid_context.rb', line 3

def self.get_language_data(context, keys = nil)
  site = context.registers[:site]
  language_data = site.config['language_data'].to_s || 'data.lang.%%'

  page_language = context.registers[:page]['language']
  return nil if page_language.to_s.empty?

  keys2 = language_data.gsub("%%", page_language).split('.')
  language_data = site.send(keys2.shift)
  language_data = self.traverse_hash(language_data, keys2)
  raise JekyllLanguagePlugin::PluginError.new('Invalid language data configuration.') if language_data.nil?

  return language_data if keys.to_s.empty? # can also return nil

  language_data = self.traverse_hash(language_data, keys)
  raise JekyllLanguagePlugin::PluginError.new("Language subset #{keys.to_s} not found.") if language_data.nil?
  language_data
end

.get_language_name(context, name) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/jekyll-language-plugin/liquid_context.rb', line 36

def self.get_language_name(context, name)
  translation = self.get_language_data(context, 'lang')

  raise JekyllLanguagePlugin::PluginError.new('Language name not found in translation.') if translation.nil? ||
    !translation.key?(name)

  translation[name]
end

.get_language_string(context, key) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/jekyll-language-plugin/liquid_context.rb', line 22

def self.get_language_string(context, key)
  data = self.get_language_data(context)
  return "" if data.nil?

  language_subset = context.registers[:page]['subset']
  if (!language_subset.to_s.empty? &&
      !(str = traverse_hash(traverse_hash(data, language_subset), key)).to_s.empty?) ||
     !(str = traverse_hash(data, key)).to_s.empty?
    return str
  end

  raise JekyllLanguagePlugin::PluginError.new("Language string #{key} not found.")
end

.traverse_hash(hash, keys) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/jekyll-language-plugin/liquid_context.rb', line 45

def self.traverse_hash(hash, keys)
  return nil if hash.nil? || keys.to_s.empty?
  keys = keys.split('.') if keys.is_a?(String)

  for key in keys
    if !hash.is_a?(Hash)
      return hash
    elsif !hash.key?(key)
      return nil
    end
    hash = hash[key]
  end
  hash
end