lib/knj/gettext_threadded.rb in knjrbfw-0.0.115 vs lib/knj/gettext_threadded.rb in knjrbfw-0.0.116

- old
+ new

@@ -1,98 +1,98 @@ #This class reads .po-files generated by something like POEdit and can be used to run multi-language applications or websites. class Knj::Gettext_threadded #Hash that contains all translations loaded. attr_reader :langs - + #Config-hash that contains encoding and more. attr_reader :args - + #Initializes various data. def initialize(args = {}) @args = { :encoding => "utf-8" }.merge(args) @langs = {} @dirs = [] load_dir(@args["dir"]) if @args["dir"] end - + #Loads a 'locales'-directory with .mo- and .po-files and fills the '@langs'-hash. #===Examples # gtext.load_dir("#{File.dirname(__FILE__)}/../locales") def load_dir(dir) @dirs << dir check_folders = ["LC_MESSAGES", "LC_ALL"] - + Dir.foreach(dir) do |file| fn = "#{dir}/#{file}" if File.directory?(fn) and file.match(/^[a-z]{2}_[A-Z]{2}$/) @langs[file] = {} if !@langs[file] - + check_folders.each do |fname| fpath = "#{dir}/#{file}/#{fname}" - - if File.exists?(fpath) and File.directory?(fpath) + + if File.exist?(fpath) and File.directory?(fpath) Dir.foreach(fpath) do |pofile| if pofile.match(/\.po$/) pofn = "#{dir}/#{file}/#{fname}/#{pofile}" - + cont = nil File.open(pofn, "r", {:encoding => @args[:encoding]}) do |fp| cont = fp.read.encode("utf-8") end - + cont.scan(/msgid\s+\"(.+)\"(\r|)\nmsgstr\s+\"(.+)\"(\r|)\n(\r|)\n/) do |match| @langs[file][match[0]] = match[2].to_s.encode("utf-8") end end end end end end end end - + #Translates a given string to a given locale from the read .po-files. #===Examples # str = "Hello" #=> "Hello" # gtext.trans("da_DK", str) #=> "Hej" def trans(locale, str) locale = locale.to_s str = str.to_s - + if !@langs.key?(locale) raise "Locale was not found: '#{locale}' in '#{@langs.keys.join(", ")}'." end - + return str if !@langs[locale].key?(str) return @langs[locale][str] end - + #This function can be used to make your string be recognized by gettext tools. def gettext(str, locale) return trans(locale, str) end - + #Returns a hash with the language ID string as key and the language human-readable-title as value. def lang_opts langs = {} @langs.keys.sort.each do |lang| title = nil - + @dirs.each do |dir| title_file_path = "#{dir}/#{lang}/title.txt" - if File.exists?(title_file_path) + if File.exist?(title_file_path) title = File.read(title_file_path, {:encoding => @args[:encoding]}).to_s.strip else title = lang.to_s.strip end - + break if title end - + langs[lang] = title end - + return langs end end \ No newline at end of file