Correção de mensagem no depurador
[gestor.git] / tradutor.lua
blob5e1e26bcf3a60df596b788d6b53942b97d89c262
1 --[[
2 Mod Gestor para Minetest
3 Copyright (C) 2018 BrunoMine (https://github.com/BrunoMine)
5 Recebeste uma cópia da GNU Lesser General
6 Public License junto com esse software,
7 se não, veja em <http://www.gnu.org/licenses/>.
9 Sistema de tradução
12 -- Modpath
13 local modpath = minetest.get_modpath("gestor")
15 -- Tradução intllib
16 gestor.intllib = {}
17 gestor.intllib.S, gestor.intllib.NS = dofile(modpath.."/lib/intllib.lua")
19 -- Configura tradutor opicional
20 gestor.S = gestor.intllib.S
21 gestor.NS = gestor.intllib.NS
24 -- Ajustes devido ao bug de tradutor ler apenas traduzir do ingles
27 -- Strings para repassar textos em ingles
28 local pt_to_en = {}
30 -- Gera arquivos de tradução gestor.*.tr
32 local file_to_tb = function(file)
33 local msgid = nil
34 local msgstr = nil
35 local tb = {}
36 for line in io.lines(file) do
38 -- Iniciando 'msgid'
39 if string.sub(line, 1, 5) == "msgid" then
41 -- Escrever no catalogo a anterior
42 if msgid ~= nil and msgstr ~= nil then
43 if msgid ~= "" then
44 tb[msgid] = msgstr
45 end
46 msgid = nil
47 msgstr = nil
48 end
50 if line == "msgid \"\"" then
51 msgid = ""
52 else
53 msgid = string.sub(line, 8, (string.len(line)-1))
54 end
56 -- Continuando 'msgid'
57 elseif string.sub(line, 1, 1) == "\"" and msgstr == nil and msgid ~= nil then
58 msgid = msgid .. string.sub(line, 2, (string.len(line)-1))
60 -- Iniciando 'msgstr'
61 elseif string.sub(line, 1, 6) == "msgstr" then
63 if line == "msgstr \"\"" then
64 msgstr = ""
65 else
66 msgstr = string.sub(line, 9, (string.len(line)-1))
67 end
69 -- Continuando 'msgstr'
70 elseif string.sub(line, 1, 1) == "\"" and msgstr ~= nil then
71 msgstr = msgstr .. string.sub(line, 2, (string.len(line)-1))
73 end
76 end
78 -- Escrever ultima
79 if msgid ~= nil and msgstr ~= nil then
80 if msgid ~= "" then
81 tb[msgid] = msgstr
82 end
83 msgid = nil
84 msgstr = nil
85 end
87 return tb
88 end
90 -- Pegar strings principais en-pt para realizar as trocas
91 pt_to_en = file_to_tb(modpath.."/locale/en.po")
93 --minetest.log("error", "pt_to_en = "..dump(pt_to_en))
95 local list = minetest.get_dir_list(modpath.."/locale")
96 for _,file in ipairs(list) do
98 if string.match(file, "~") == nil then
100 -- Traduções ".po"
101 if string.match(file, ".pot") == nil and string.match(file, ".po") then
103 local lang_code = string.gsub(file, ".po", "")
105 local pt_to_lang = file_to_tb(modpath.."/locale/"..file)
107 -- tabela desejada
108 local en_to_lang = {}
109 for pt,en in pairs(pt_to_en) do
110 en_to_lang[en] = pt_to_lang[pt]
113 -- Novo arquivo
114 local new_file = "### Arquivo gerado por gestor apartir de "..file.."\n# textdomain: gestor\n"
115 for en,lang in pairs(en_to_lang) do
116 new_file = new_file .. en .. "=" .. lang .. "\n"
118 -- Escrever arquivo
119 local saida = io.open(modpath.."/locale/gestor."..lang_code..".tr", "w")
120 saida:write(new_file)
121 io.close(saida)
127 -- Ajuste para repassar termos em ingles
128 local s
129 if minetest.get_translator ~= nil then
130 s = minetest.get_translator("gestor")
131 else
132 s = gestor.intllib.S
135 gestor.s = function(...)
136 local args = { ... }
137 if pt_to_en[args[1]] ~= nil then
138 return s(pt_to_en[args[1]], unpack(args, 2))
140 minetest.log("error", "[gestor] String "..dump(args[1]).." nao catalogada")
141 return s(...)
144 -- Não troca string caso esteja trabalhando com intllib
145 if minetest.get_modpath("intllib") ~= nil
146 and minetest.get_translator == nil
147 then
148 gestor.s = s
151 gestor.S = function(...)
152 local args = { ... }
153 if type(args[1]) == "table" then
154 local r = {}
155 for n,a in ipairs(args[1]) do
156 if n ~= 1 then -- Não traduz o primeiro
157 table.insert(r, gestor.S(a))
158 else
159 table.insert(r, a)
163 return gestor.s(unpack(r))
165 elseif type(args[1]) == "string" then
166 -- Não traduz caso faltem argumentos (devido strings ilustrativas)
167 return gestor.s(...)
169 else
170 return args[1]
174 -- Função que retorna a string inalterada para passar pela checagem
175 gestor.Sfake = function(s) return s end