Module: Tcl::Msgcat

Defined in:
lib/tcl/msgcat.rb,
lib/tcl/msgcat/parser.rb,
lib/tcl/msgcat/catalog.rb,
lib/tcl/msgcat/version.rb,
lib/tcl/msgcat/renderer.rb,
lib/tcl/msgcat/paddable_string.rb

Defined Under Namespace

Modules: PaddableString Classes: Catalog, Parser, Renderer

Constant Summary collapse

VERSION =
"1.2.3"

Class Method Summary collapse

Class Method Details

.compile(source, target) ⇒ Object

Raises:

  • (ArgumentError)


53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/tcl/msgcat.rb', line 53

def compile(source, target)
  raise ArgumentError, "Not a directory: #{source}" unless File.directory? source
  raise ArgumentError, "Not a directory: #{target}" unless File.directory? target

  Dir["#{source}/*.json"].each do |src|
    dst = File.basename(src, ".json")+".msg"
    print "Compiling #{src} to #{target}/#{dst}... "
    begin
      File.open("#{target}/#{dst}", "w") {|f| f.write render(src) }
      puts "done"
    rescue ArgumentError => e
      puts e.message
    end
  end
end

.merge(root_file, translation_files = []) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/tcl/msgcat.rb', line 28

def merge(root_file, translation_files=[])
  if translation_files.is_a? String
    translation_files = Dir[translation_files]
  end

  begin
    root = Tcl::Msgcat::Catalog.load(root_file)
  rescue MultiJson::ParseError => e
    raise MultiJson::ParseError, "Failed to parse #{root_file}: #{e.message}"
  end

  translation_files.each do |file|
    begin
      next if File.basename(file) == File.basename(root_file)
      print "Merging new translations into #{file}... "
      catalog = Tcl::Msgcat::Catalog.load(file)
      catalog.merge!(root)
      File.open(file, "w") {|f| f.write catalog.to_json }
      puts "done"
    rescue MultiJson::ParseError => e
      raise MultiJson::ParseError, "Failed to parse #{file}: #{e.message}"
    end
  end
end

.parse(msgcat_file) ⇒ Object



17
18
19
# File 'lib/tcl/msgcat.rb', line 17

def parse(msgcat_file)
  Tcl::Msgcat::Parser.new(msgcat_file).parse
end

.render(json_file) ⇒ Object

Raises:

  • (ArgumentError)


21
22
23
24
25
26
# File 'lib/tcl/msgcat.rb', line 21

def render(json_file)
  raise ArgumentError, "File not found: #{json_file}" unless File.exist? json_file
  msgs = MultiJson.load(File.read(json_file))
  lang = File.basename(json_file, File.extname(json_file))
  Tcl::Msgcat::Renderer.new(msgs, lang).render
end