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/>.
13 local modpath
= minetest
.get_modpath("gestor")
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
30 -- Gera arquivos de tradução gestor.*.tr
32 local file_to_tb
= function(file
)
36 for line
in io
.lines(file
) do
39 if string.sub(line
, 1, 5) == "msgid" then
41 -- Escrever no catalogo a anterior
42 if msgid
~= nil and msgstr
~= nil then
50 if line
== "msgid \"\"" then
53 msgid
= string.sub(line
, 8, (string.len(line
)-1))
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))
61 elseif string.sub(line
, 1, 6) == "msgstr" then
63 if line
== "msgstr \"\"" then
66 msgstr
= string.sub(line
, 9, (string.len(line
)-1))
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))
79 if msgid
~= nil and msgstr
~= nil then
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
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
)
108 local en_to_lang
= {}
109 for pt
,en
in pairs(pt_to_en
) do
110 en_to_lang
[en
] = pt_to_lang
[pt
]
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"
119 local saida
= io
.open(modpath
.."/locale/gestor."..lang_code
..".tr", "w")
120 saida
:write(new_file
)
127 -- Ajuste para repassar termos em ingles
129 if minetest
.get_translator
~= nil then
130 s
= minetest
.get_translator("gestor")
135 gestor
.s
= function(...)
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")
144 -- Não troca string caso esteja trabalhando com intllib
145 if minetest
.get_modpath("intllib") ~= nil
146 and minetest
.get_translator
== nil
151 gestor
.S
= function(...)
153 if type(args
[1]) == "table" then
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
))
163 return gestor
.s(unpack(r
))
165 elseif type(args
[1]) == "string" then
166 -- Não traduz caso faltem argumentos (devido strings ilustrativas)
174 -- Função que retorna a string inalterada para passar pela checagem
175 gestor
.Sfake
= function(s
) return s
end