module Lola

Attributes

default_language[RW]
default_locale[RW]
excluded_languages[RW]
priority_languages[RW]

Public Class Methods

language_code(language_name, options={}) click to toggle source

Returns the language code corresponding to the supplied language name

Carmen::language_code('English') => 'EN'
# File lib/lola.rb, line 51
def self.language_code(language_name, options={})
  search_collection(languages(options), language_name, 0, 1)
end
language_codes() click to toggle source

Returns an array of all language codes

Carmen::language_codes => ['AA', 'AB', 'AE', ... ]
# File lib/lola.rb, line 57
def self.language_codes
  languages.map {|c| c[1] }
end
language_name(language_code, options={}) click to toggle source

Returns the language name corresponding to the supplied language code, optionally using the specified locale.

Carmen::language_name('EN') => 'English'
Carmen::language_name('ES', :locale => :es) => 'Español'
# File lib/lola.rb, line 45
def self.language_name(language_code, options={})
  search_collection(languages(options), language_code, 1, 0)
end
language_names(options={}) click to toggle source

Returns an array of all language names, optionally using the specified locale.

Carmen::language_names => ['Afar', 'Abkhazian', Avestan', ... ]
Carmen::language_names(:locale => :es) => ['Afrikaans', 'Árabe', 'Bengalí', ... ]
# File lib/lola.rb, line 64
def self.language_names(options={})
  languages(options).map {|c| c[0] }
end
languages(options={}) click to toggle source

Returns a list of all languages

# File lib/lola.rb, line 19
def self.languages(options={})
  # Use specified locale or fall back to default locale
  locale = options.delete(:locale) || @default_locale
  locale = available_locales.include?(locale) ? locale.to_s : @default_locale.to_s

  # Load the country list for the specified locale
  @languages ||= {}
  unless @languages[locale]
    # Check if data in the specified locale is available
    localized_data = File.join(@data_path, "#{locale}.yml")
    unless File.exists?(localized_data)
      raise(UnavailableLocale, "Could not load languages for '#{locale}' locale")
    end

    # As the data exists, load it
    @languages[locale] = YAML.load_file(localized_data)
  end

  # Return data after filtering excluded languages and prepending prepended languages
  result = @languages[locale].reject { |c| excluded_languages.include?( c[1] ) }
  priority_languages.map { |code| [ search_collection(result, code, 1, 0), code ] } + result
end

Protected Class Methods

available_locales() click to toggle source
# File lib/lola.rb, line 69
def self.available_locales
  locales = Array.new
  Dir.glob("#{@data_path}/*.yml") do |filename|
    locales << File.basename(filename, '.yml').to_sym
  end
  locales
end
search_collection(collection, value, index_to_match, index_to_retrieve) click to toggle source
# File lib/lola.rb, line 77
def self.search_collection(collection, value, index_to_match, index_to_retrieve)
  return nil if collection.nil? || value.nil? || value.empty?
  collection.each do |m|
    return m[index_to_retrieve] if m[index_to_match].downcase == value.downcase
  end
  # In case we didn't get any results we'll try a broader search (via Regexp)
  collection.each do |m|
    return m[index_to_retrieve] if m[index_to_match].downcase.match(Regexp.escape(value.downcase))
  end
  nil
end