HOWTO write your own message parsers(old)

ruby-gettext-howto-poparser-old

Since Ruby-GetText-1.8.0 to 2.0.x

[Go newest version]

You can add your own message parsers to extract msgid and create a po-file. In this article, I introduce how write the parser and how use it.

Write a parser

Define a parser module which includes two methods(target?, parser), then add the parser to GetText::RGetText.

require 'gettext/rgettext'
module TestParser
  module_function
  # If the file is the target of your parser, then return true, otherwise false.
  def target?(file)
    File.extname(file) == ".csv"  # This parser targets csv files only.
  end
  # Parse a file and return the array of [msgid, file1, file2, ...].
  # ary includes the result of other parsers. The new results should be
  # added to this ary.
  # And this method is required to keep a msgid as unique. Check the
  # msgid becomes unique before adding the msgid to ary. 
  #
  # Return value format is:
  #          [["msgid1", "file1:line1", "file2:line2",...],
  #           ["msgid2", "file3:line3",...]]
  # 
  def parse(file, ary)
          :
          :
          :
    ary << ['apple', 'foo.rb:200']
    ary << ['orange', 'bar.rb:300', 'baz.rb:400']
    ary << ['apple\norange', 'bar.rb:302']
    ary << ["apple\000apples", 'bar.rb:304']  # plural msgid.
    ary << ["fruits\004apple", 'bar.rb:304']   # msgctxt
    ary << ["fruits\004apple\000apples", 'bar.rb:304']   # plural msgid with msgctxt.
    ary
  end
end
# Add this parser to GetText::RGetText
GetText::RGetText.add_parser(TestParser)

Save this code as testparser.rb for the next step.

How to use testparser.rb

With rgettext

$ rgettext -rtestparser targetfiles1.rb targetfiles2.rb ....
-o foo.pot

With Rake

Only add "require 'testparser'" to the updatepo task.

desc "Update pot/po files."
task :updatepo do
  require 'gettext/utils' #It may be better to move this into testparser.rb
  require 'testparser'
  GetText.update_pofiles("myapp", Dir.glob("app/**/*.{rb,rhtml}"), "myapp 0.0.1")
end

ChangeLog

  • 2006-12-19 Created - Masao
Last modified:2010/01/02 00:25:42
Keyword(s):
References:[Ruby-GetText-Package document for Developers]