В общих чертах .po-файл представляет собой текст вида
#коммент
msgid "Оригинал"
msgstr "Перевод"
Накидал на скорую руку пару простых скриптов на Lua. Если нет строк с несколькими формами множественного числа, вроде работают. Язык в свойствах файла после конвертации менять вручную (ну или скрипты дополнить). Использовать типа
lua poinvert.lua in.po out.popoinvert.lua - меняет оригинал<->перевод местами
Lua
if arg[1] == nil then
print "Usage: lua poinvert.lua input.po [output.po]"
os.exit()
end
po = {}
i = 1
for line in io.lines(arg[1]) do
if line:sub(1, 5) == "msgid" then
po[i + 1] = "msgstr" .. line:sub(6)
elseif line:sub(1, 6) == "msgstr" then
po[i - 1] = "msgid" .. line:sub(7)
else
po[i] = line
end
i = i + 1;
end
if arg[2] then f = io.open(arg[2], "w") else f = io.stdout end
for _, line in pairs(po) do f:write(line, "\n") end
f:close()
invtemplate.lua - то же самое, только перевод будет пустой.
Lua
if arg[1] == nil then
print "Usage: lua invtemplate.lua input.po [output.po]"
os.exit()
end
if arg[2] then f = io.open(arg[2], "w") else f = io.stdout end
for line in io.lines(arg[1]) do
if line:sub(1, 6) == "msgstr" then
f:write("msgid ", line:sub(7), "\nmsgstr \"\"\n")
elseif line:sub(1, 5) ~= "msgid" then
f:write(line, "\n")
end
end
f:close()
Интерпретатор под винду в аттаче со скриптами, под другие платформы - см.
Lua Binaries и
Lua.org.