Sha256: 0584b4e7f2fab45aadca64b27a08ea6eae9c08c269d7e85fb21e734fe3b40d2c

Contents?: true

Size: 1.73 KB

Versions: 1

Compression:

Stored size: 1.73 KB

Contents

class Knj::Gettext_threadded
	attr_reader :langs, :args
	
	def initialize(args = {})
		@args = args
		@langs = {}
		@dirs = []
		load_dir(@args["dir"]) if @args["dir"]
	end
	
	def load_dir(dir)
		@dirs << dir
		check_folders = ["LC_MESSAGES", "LC_ALL"]
		
		Dir.new(dir).each 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)
						Dir.new(fpath).each do |pofile|
							if pofile.match(/\.po$/)
								pofn = "#{dir}/#{file}/#{fname}/#{pofile}"
								cont = File.read(pofn)
								cont.scan(/msgid\s+\"(.+)\"\nmsgstr\s+\"(.+)\"\n\n/) do |match|
									@langs[file][match[0]] = match[1]
								end
							end
						end
					end
				end
			end
		end
	end
	
	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)
					title = File.read(title_file_path).to_s.strip
				else
					title = lang.to_s.strip
				end
				
				break if title
			end
			
			langs[lang] = title
		end
		
		return langs
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
knjrbfw-0.0.8 lib/knj/gettext_threadded.rb