corrade-nucleus-nucleons

Subversion Repositories:
Compare Path: Rev
With Path: Rev
?path1? @ 19  →  ?path2? @ 20
/pack-rat/003_pack_rat/pack-rat/node_modules/bootstrap-table/docs/_plugins/multiple-languages.rb
@@ -0,0 +1,153 @@
module Jekyll
@parsedlangs = {}
def self.langs
@parsedlangs
end
def self.setlangs(l)
@parsedlangs = l
end
class Site
alias :process_org :process
def process
if !self.config['baseurl']
self.config['baseurl'] = ""
end
#Variables
config['baseurl_root'] = self.config['baseurl']
baseurl_org = self.config['baseurl']
languages = self.config['languages']
exclude_org = self.exclude
dest_org = self.dest
 
#Loop
self.config['lang'] = self.config['default_lang'] = languages.first
puts
puts "Building site for default language: \"#{self.config['lang']}\" to: #{self.dest}"
process_org
languages.drop(1).each do |lang|
 
# Build site for language lang
@dest = @dest + "/" + lang
self.config['baseurl'] = self.config['baseurl'] + "/" + lang
self.config['lang'] = lang
# exclude folders or files from beeing copied to all the language folders
exclude_from_localizations = self.config['exclude_from_localizations'] || []
@exclude = @exclude + exclude_from_localizations
 
puts "Building site for language: \"#{self.config['lang']}\" to: #{self.dest}"
process_org
 
#Reset variables for next language
@dest = dest_org
@exclude = exclude_org
 
self.config['baseurl'] = baseurl_org
end
Jekyll.setlangs({})
puts 'Build complete'
end
 
alias :read_posts_org :read_posts
def read_posts(dir)
if dir == ''
read_posts("_i18n/#{self.config['lang']}/")
else
read_posts_org(dir)
end
end
end
 
class LocalizeTag < Liquid::Tag
 
def initialize(tag_name, key, tokens)
super
@key = key.strip
end
 
def render(context)
if "#{context[@key]}" != "" #Check for page variable
key = "#{context[@key]}"
else
key = @key
end
lang = context.registers[:site].config['lang']
unless Jekyll.langs.has_key?(lang)
puts "Loading translation from file #{context.registers[:site].source}/_i18n/#{lang}.yml"
Jekyll.langs[lang] = YAML.load_file("#{context.registers[:site].source}/_i18n/#{lang}.yml")
end
translation = Jekyll.langs[lang].access(key) if key.is_a?(String)
if translation.nil? or translation.empty?
translation = Jekyll.langs[context.registers[:site].config['default_lang']].access(key)
puts "Missing i18n key: #{lang}:#{key}"
puts "Using translation '%s' from default language: %s" %[translation, context.registers[:site].config['default_lang']]
end
translation
end
end
 
module Tags
class LocalizeInclude < IncludeTag
def render(context)
if "#{context[@file]}" != "" #Check for page variable
file = "#{context[@file]}"
else
file = @file
end
 
includes_dir = File.join(context.registers[:site].source, '_i18n/' + context.registers[:site].config['lang'])
 
if File.symlink?(includes_dir)
return "Includes directory '#{includes_dir}' cannot be a symlink"
end
if file !~ /^[a-zA-Z0-9_\/\.-]+$/ || file =~ /\.\// || file =~ /\/\./
return "Include file '#{file}' contains invalid characters or sequences"
end
 
Dir.chdir(includes_dir) do
choices = Dir['**/*'].reject { |x| File.symlink?(x) }
if choices.include?(file)
source = File.read(file)
partial = Liquid::Template.parse(source)
 
context.stack do
context['include'] = parse_params(context) if @params
contents = partial.render(context)
site = context.registers[:site]
ext = File.extname(file)
 
converter = site.converters.find { |c| c.matches(ext) }
contents = converter.convert(contents) unless converter.nil?
 
contents
end
else
"Included file '#{file}' not found in #{includes_dir} directory"
end
end
end
end
end
end
 
unless Hash.method_defined? :access
class Hash
def access(path)
ret = self
path.split('.').each do |p|
if p.to_i.to_s == p
ret = ret[p.to_i]
else
ret = ret[p.to_s] || ret[p.to_sym]
end
break unless ret
end
ret
end
end
end
 
Liquid::Template.register_tag('t', Jekyll::LocalizeTag)
Liquid::Template.register_tag('translate', Jekyll::LocalizeTag)
Liquid::Template.register_tag('tf', Jekyll::Tags::LocalizeInclude)
Liquid::Template.register_tag('translate_file', Jekyll::Tags::LocalizeInclude)