class GetText::Task

Attributes

domain[RW]
files[RW]
locales[RW]
mo_base_directory[RW]
namespace_prefix[RW]
po_base_directory[RW]

Public Class Methods

new(spec) { |self| ... } click to toggle source
# 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

Private Instance Methods

current_scope() click to toggle source
# File lib/gettext/task.rb, line 187
def current_scope
  Rake.application.current_scope
end
define() click to toggle source
# 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
define_file_tasks() click to toggle source
# 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
define_named_tasks() click to toggle source
# 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
detect_locales() click to toggle source
# 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
mo_directory(locale) click to toggle source
# File lib/gettext/task.rb, line 155
def mo_directory(locale)
  File.join(mo_base_directory, "locale", locale.to_s, "LC_MESSAGES")
end
mo_file(locale) click to toggle source
# File lib/gettext/task.rb, line 159
def mo_file(locale)
  File.join(mo_directory(locale), "#{domain}.mo")
end
namespace_recursive(namespace_spec, &block) click to toggle source
# 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
po_directory(locale) click to toggle source
# File lib/gettext/task.rb, line 147
def po_directory(locale)
  File.join(po_base_directory, locale.to_s)
end
po_file(locale) click to toggle source
# File lib/gettext/task.rb, line 151
def po_file(locale)
  File.join(po_directory(locale), "#{domain}.po")
end
pot_file() click to toggle source
# File lib/gettext/task.rb, line 143
def pot_file
  File.join(po_base_directory, "#{domain}.pot")
end
target_files() click to toggle source
# 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