msgmerge (GetText)

    # File lib/gettext/utils.rb, line 60
      def msgmerge(defpo, refpo, app_version)
        $stderr.print defpo + " "
        cmd = ENV["MSGMERGE_PATH"] || "msgmerge"

        cont = ""
        if FileTest.exist? defpo
          `#{cmd} --help`
          unless $? && $?.success?
            raise _("`%{cmd}' may not be found. \nInstall GNU Gettext then set PATH or MSGMERGE_PATH correctly.") % {:cmd => cmd}
          end
          remove_bom(defpo)
          cont = `#{cmd} #{defpo} #{refpo}`
        else
          File.open(refpo) do |io|
            cont = io.read
          end
        end
        if cont.empty?
          failed_filename = refpo + "~"
          FileUtils.cp(refpo, failed_filename)
          $stderr.puts _("Failed to merge with %{defpo}") % {:defpo => defpo}
          $stderr.puts _("New .pot was copied to %{failed_filename}") %{:failed_filename => failed_filename}
          raise _("Check these po/pot-files. It may have syntax errors or something wrong.")
        else
          cont.sub!(/(Project-Id-Version\:).*$/, "\\1 #{app_version}\\n\"")
          File.open(defpo, "w") do |out|
            out.write(cont)
          end
        end
        self
      end