Sha256: f386e23a28d3d8d0ec8361a2d3bc05d535b6f358997dd7e14f82504fd0d2420b

Contents?: true

Size: 1.63 KB

Versions: 3

Compression:

Stored size: 1.63 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.has_key?(locale)
			raise "Locale was not found: '#{locale}' in '#{@langs.keys.join(", ")}'."
		end
		
		return str if !@langs[locale].has_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
	
	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.strip
				end
				
				break if title
			end
			
			langs[lang] = title
		end
		
		return langs
	end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
knjrbfw-0.0.7 lib/knj/gettext_threadded.rb
knjrbfw-0.0.4 lib/knj/gettext_threadded.rb
knjrbfw-0.0.3 lib/knj/gettext_threadded.rb