Sha256: ac9243bad041873456fc93cd9fd25142cdd88256f90853ee42993a1b0b6c34fe

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 KB

Contents

require 'fast_gettext/mo_file'
require 'fast_gettext/storage'

module FastGettext
  include FastGettext::Storage
  
  extend self
  def self.included(mod)  #:nodoc:
    mod.extend self
  end

  LOCALE_REX =  /^[a-z]{2}$|^[a-z]{2}_[A-Z]{2}$/
  NAMESPACE_SEPERATOR = '|'

  def _(translate)
    current_mo[translate] || translate
  end

  #translate pluralized
  def n_(singular,plural,count)
    if translation = current_mo.plural(singular,plural,count)
      translation
    else
      count > 1 ? plural : singular
    end
  end

  #translate, but discard namespace if nothing was found
  # Car|Tire -> Tire if no translation could be found
  def s_(translate,seperator=nil)
    if translation = current_mo[translate]
      translation
    else
      translate.split(seperator||NAMESPACE_SEPERATOR).last
    end
  end

  def add_text_domain(name,options)
    self.text_domains ||= {}
    domain = self.text_domains[name] = {:path=>options.delete(:path),:mo_files=>{}}
    
    # parse all .mo files with the right name, that sit in locale/LC_MESSAGES folders
    Dir[File.join(domain[:path],'*')].each do |locale_folder|
      next unless File.basename(locale_folder) =~ LOCALE_REX
      mo_file = File.join(locale_folder,'LC_MESSAGES',"#{name}.mo")
      next unless File.exist? mo_file
      locale = File.basename(locale_folder)
      domain[:mo_files][locale] = MoFile.new(mo_file)
    end
    domain
  end
  
  private

  def current_mo
    mo = text_domains[text_domain][:mo_files][locale] rescue nil
    mo || {}
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
grosser-fast_gettext-0.1.0 lib/fast_gettext.rb