class Jekyll::Locale::Handler
Constants
- DEFAULT_CONFIG
Attributes
available_locales[R]
config[R]
content_dirname[R]
current_locale[W]
default_locale[R]
locale_data[R]
locale_dates[R]
site[R]
user_locales[R]
Public Class Methods
new(site)
click to toggle source
# File lib/jekyll/locale/handler.rb, line 18 def initialize(site) @site = site config = site.config["localization"] @config = if config.is_a?(Hash) Jekyll::Utils.deep_merge_hashes(DEFAULT_CONFIG, config) else DEFAULT_CONFIG end initialize_locales @content_dirname = mode == "auto" ? "" : fetch("content_dir") @snakeified_keys = {} end
Public Instance Methods
current_locale()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 51 def current_locale @current_locale ||= default_locale end
data()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 42 def data locale_data[snakeified_keys(current_locale)] || locale_data[snakeified_keys(default_locale)] || {} end
inspect()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 55 def inspect "#<#{self.class} @site=#{site}>" end
read()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 47 def read mode == "auto" ? auto_localization : manual_localization end
reset()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 31 def reset @locale_data = {} @locale_dates = {} @portfolio = nil end
setup()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 37 def setup Locale::DateTimeHandler.bootstrap(self) setup_data if @locale_data.empty? end
Private Instance Methods
append_document(klass, canon_doc, locale)
click to toggle source
# File lib/jekyll/locale/handler.rb, line 176 def append_document(klass, canon_doc, locale) locale_doc = klass.new(canon_doc, locale) return unless locale_doc.publish? canon_doc.locale_pages << locale_doc canon_doc.collection.docs << locale_doc site.docs_to_write << locale_doc site.docs_to_write.uniq! end
append_page(klass, canon_page, locale)
click to toggle source
# File lib/jekyll/locale/handler.rb, line 167 def append_page(klass, canon_page, locale) locale_page = klass.new(canon_page, locale) return unless locale_page.publish? canon_page.locale_pages << locale_page site.pages << locale_page site.pages.uniq! end
auto_localization()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 141 def auto_localization user_locales.each do |locale| portfolio.each do |canon_doc| next if canon_doc.relative_path =~ exclusion_regex append_page(Locale::AutoPage, canon_doc, locale) end end end
configure_locale_date(date_defaults, data)
click to toggle source
# File lib/jekyll/locale/handler.rb, line 120 def configure_locale_date(date_defaults, data) return date_defaults unless data.is_a?(Hash) Jekyll::Utils.deep_merge_hashes( date_defaults, Utils.recursive_symbolize_hash_keys(data) ) end
exclusion_regex()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 206 def exclusion_regex @exclusion_regex ||= Regexp.new("\\A(?:#{Regexp.union(Array(config["exclude_set"]))})") end
fetch(key)
click to toggle source
# File lib/jekyll/locale/handler.rb, line 197 def fetch(key) value = config[key] default = DEFAULT_CONFIG[key] return default unless value.class == default.class return default if value.to_s.empty? value end
initialize_locales()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 76 def initialize_locales default_locale_id = fetch("locale") default_metadata = {} @available_locales = [default_locale_id] @user_locales = [] locales_set_config = @config["locales_set"] locales_set_config = case locales_set_config when Array Hash[locales_set_config.map { |locale| [locale, {}] }] when Hash locales_set_config else {} end locales_set_config.each do |locale_id, metadata| if locale_id == default_locale_id default_metadata = metadata next end @available_locales << locale_id @user_locales << Locale::Identity.new(locale_id, metadata) end @default_locale = Locale::Identity.new(default_locale_id, default_metadata) end
manual_localization()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 150 def manual_localization user_locales.each do |locale| portfolio.each do |canon_doc| loc_page_path = site.in_source_dir(content_dirname, locale.id, canon_doc.relative_path) next unless File.exist?(loc_page_path) next unless Jekyll::Utils.has_yaml_header?(loc_page_path) case canon_doc when Jekyll::Page append_page(Locale::Page, canon_doc, locale) when Jekyll::Document append_document(Locale::Document, canon_doc, locale) end end end end
mode()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 190 def mode @mode ||= begin value = config["mode"] value == "auto" ? value : DEFAULT_CONFIG["mode"] end end
portfolio()
click to toggle source
Instances of Jekyll
class that include `Jekyll::Locale::Support` mixin (which are simply Jekyll::Page and Jekyll::Document)
# File lib/jekyll/locale/handler.rb, line 130 def portfolio @portfolio ||= begin html_pages = site.site_payload["site"]["html_pages"] || [] html_pages.reject! { |page| page.name == "404.html" } (site.docs_to_write + html_pages).select do |doc| doc.is_a?(Jekyll::Locale::Support) end end end
process_locale_data(loc, data_hash)
click to toggle source
# File lib/jekyll/locale/handler.rb, line 105 def process_locale_data(loc, data_hash) locale = snakeified_keys(loc) @locale_data[locale] = {} date_data = Locale::DateTimeHandler::DATETIME_DEFAULTS data_hash.each do |key, value| if key == "locale_date" date_data = configure_locale_date(date_data, value) else @locale_data[locale][snakeified_keys(key)] = value end end @locale_dates[loc] = date_data end
setup_data()
click to toggle source
# File lib/jekyll/locale/handler.rb, line 63 def setup_data locales_dir = fetch("data_dir") base_data = site.site_data[locales_dir] return @locale_data unless base_data.is_a?(Hash) base_data.each do |locale_id, data| next unless data.is_a?(Hash) process_locale_data(locale_id, data) end nil end
snakeified_keys(key)
click to toggle source
# File lib/jekyll/locale/handler.rb, line 186 def snakeified_keys(key) @snakeified_keys[key] ||= Utils.snakeify(key) end