Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #!/usr/bin/env lua5.1
  2.  
  3. local lfs = require "lfs"
  4.  
  5. local en_stat = assert(lfs.attributes "!NetSurf/Resources/en/Messages")
  6. local language = { }
  7. local sorted = { }
  8.  
  9. io.stderr:write("loading non-en languages...\n");
  10.  
  11. for dir in lfs.dir "!NetSurf/Resources" do
  12.    local path = "!NetSurf/Resources/" .. dir
  13.    if dir ~= "en" and lfs.attributes(path .. "/Messages") then
  14.       local f = io.open(path .. "/Messages", "r")
  15.       local c = 0
  16.       io.stderr:write(dir, ":")
  17.       language[dir] = { }
  18.       sorted[#sorted + 1] = dir
  19.       for l in f:lines() do
  20.          if l:sub(1, 1) ~= "#" then
  21.             local tag, msg = l:match "^([^:]*):(.*)$"
  22.             if tag then
  23.                language[dir][tag] = msg
  24.                c = c + 1
  25.             end
  26.          end
  27.       end
  28.       f:close()
  29.       io.stderr:write(tostring(c), " entries.\n")
  30.    end
  31. end
  32.  
  33. table.sort(sorted)
  34.  
  35. io.stderr:write("working through en...\n")
  36.  
  37. local manipulators = {
  38.    { "^(ami.*)", "ami.%1" },
  39.    { "^(gtk.*)", "gtk.%1" },
  40.    { "^(Help.*)", "ro.%1" },
  41.    { "^(ARexx.*)", "ami.%1" },
  42.  
  43.    { "^(.*)$", "all.%1" } -- must be last
  44. }
  45.  
  46. local function manipulate_tag(t)
  47.    for _, m in ipairs(manipulators) do
  48.       local r, s = t:gsub(m[1], m[2])
  49.       if s > 0 then return r end
  50.    end
  51.    return t
  52. end
  53.  
  54. local f = io.open("!NetSurf/Resources/en/Messages", "r")
  55.  
  56. for l in f:lines() do
  57.    if l:sub(1,1) == "#" then
  58.       print(l)
  59.    else
  60.       local tag, msg = l:match "^([^:]*):(.*)$"
  61.       if not tag  then
  62.          print(l)
  63.       else
  64.          local mtag = manipulate_tag(tag)
  65.          io.stdout:write("en.", mtag, ":", msg, "\n")
  66.          for _, langname in ipairs(sorted) do
  67.             local trans = language[langname][tag]
  68.             if not trans then
  69.                io.stderr:write("*** language ", langname, " lacks translation for ", mtag, "/", tag, "\n")
  70.                trans = msg
  71.             end
  72.             io.stdout:write(langname, ".", mtag, ":", trans, "\n")
  73.             language[langname][tag] = nil
  74.          end
  75.       end
  76.    end
  77. end
  78.  
  79. for _, langname in ipairs(sorted) do
  80.    for tag in pairs(language[langname]) do
  81.       io.stderr:write("*** language ", langname, " contains orphan tag ", tag, "\n")
  82.    end
  83. end