# File lib/gettext/task.rb, line 28 def initialize(spec) @spec = spec @locales = [] @po_base_directory = "po" @mo_base_directory = "." @files = target_files @domain = @spec.name @namespace_prefix = nil yield(self) if block_given? @locales = detect_locales if @locales.empty? raise("must set locales: #{inspect}") if @locales.empty? define end
# File lib/gettext/task.rb, line 187 def current_scope Rake.application.current_scope end
# File lib/gettext/task.rb, line 43 def define define_file_tasks if namespace_prefix namespace_recursive namespace_prefix do define_named_tasks end else define_named_tasks end end
# File lib/gettext/task.rb, line 54 def define_file_tasks unless files.empty? pot_dependencies = files.dup unless File.exist?(po_base_directory) directory po_base_directory pot_dependencies << po_base_directory end file pot_file => pot_dependencies do GetText::Tools::XGetText.run("--package-name", @spec.name, "--package-version", @spec.version.to_s, "--output", pot_file, *files) end end locales.each do |locale| _po_file = po_file(locale) unless files.empty? po_dependencies = [pot_file] _po_directory = po_directory(locale) unless File.exist?(_po_directory) directory _po_directory po_dependencies << _po_directory end file _po_file => po_dependencies do if File.exist?(_po_file) GetText::Tools::MsgMerge.run(po_file(locale), pot_file, "--output", _po_file) else GetText::Tools::MsgInit.run("--input", pot_file, "--output", _po_file, "--locale", locale.to_s) end end end mo_dependencies = [_po_file] _mo_directory = mo_directory(locale) unless File.exist?(_mo_directory) directory _mo_directory mo_dependencies << _mo_directory end _mo_file = mo_file(locale) file _mo_file => mo_dependencies do GetText::Tools::MsgFmt.run(_po_file, "--output", _mo_file) end end end
# File lib/gettext/task.rb, line 103 def define_named_tasks namespace :gettext do namespace :pot do desc "Create #{pot_file}" task :create => pot_file end namespace :po do update_tasks = [] @locales.each do |locale| namespace locale do desc "Update #{po_file(locale)}" task :update => po_file(locale) update_tasks << (current_scope + ["update"]).join(":") end end desc "Update *.po" task :update => update_tasks end namespace :mo do update_tasks = [] @locales.each do |locale| namespace locale do desc "Update #{mo_file(locale)}" task :update => mo_file(locale) update_tasks << (current_scope + ["update"]).join(":") end end desc "Update *.mo" task :update => update_tasks end end desc "Update *.mo" task :gettext => (current_scope + ["gettext", "mo", "update"]).join(":") end
# File lib/gettext/task.rb, line 173 def detect_locales locales = [] return locales unless File.exist?(po_base_directory) Dir.open(po_base_directory) do |dir| dir.each do |entry| next unless /\A[a-z]{2}(?:_[A-Z]{2})?\z/ =~ entry next unless File.directory?(File.join(dir.path, entry)) locales << entry end end locales end
# File lib/gettext/task.rb, line 155 def mo_directory(locale) File.join(mo_base_directory, "locale", locale.to_s, "LC_MESSAGES") end
# File lib/gettext/task.rb, line 159 def mo_file(locale) File.join(mo_directory(locale), "#{domain}.mo") end
# File lib/gettext/task.rb, line 191 def namespace_recursive(namespace_spec, &block) first, rest = namespace_spec.split(/:/, 2) namespace first do if rest.nil? block.call else namespace_recursive(rest, &block) end end end
# File lib/gettext/task.rb, line 147 def po_directory(locale) File.join(po_base_directory, locale.to_s) end
# File lib/gettext/task.rb, line 151 def po_file(locale) File.join(po_directory(locale), "#{domain}.po") end
# File lib/gettext/task.rb, line 143 def pot_file File.join(po_base_directory, "#{domain}.pot") end
# File lib/gettext/task.rb, line 163 def target_files files = @spec.files.find_all do |file| /\.(?:rb|erb|glade)/ =~ File.extname(file) end files += @spec.executables.collect do |executable| "bin/#{executable}" end files end