diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..65c5ca8
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/README.md b/README.md
index cb10803..bc92189 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,27 @@
-musket
+# Musket v1.0.0
+
+[![download](https://img.shields.io/github/tag/BrunoMine/musket.svg?style=flat-square&label=release)](https://github.com/BrunoMine/musket/archive/master.zip)
+[![git](https://img.shields.io/badge/git-project-green.svg?style=flat-square)](https://github.com/BrunoMine/musket)
+[![forum](https://img.shields.io/badge/minetest-mod-green.svg?style=flat-square)](https://forum.minetest.net)
+[![bower](https://img.shields.io/badge/bower-mod-green.svg?style=flat-square)](https://minetest-bower.herokuapp.com/mods/musket)
+
+## Descrição
+Adicionar o mosquete ao Minetest
+
+## Requisitos _(Requirements)_
+* Minetest 0.4.17 ou superior
+* Mod intllib (opicional)
+
+## Licença
+Veja LICENSE.txt para informações detalhadas da licença LGPL 3.0
+
+### Autores do código fonte
+Originalmente por BrunoMine, Bruno Borges (LGPL 3.0)
+
+### Autores de mídias (texturas, modelos and sons)
+Todos que não estao listados aqui:
+BrunoMine, Bruno Borges (CC BY-SA 3.0)
+
+
+
+
diff --git a/depends.txt b/depends.txt
new file mode 100644
index 0000000..b86e145
--- /dev/null
+++ b/depends.txt
@@ -0,0 +1,2 @@
+shooter
+
diff --git a/description.txt b/description.txt
new file mode 100644
index 0000000..4ec54c2
--- /dev/null
+++ b/description.txt
@@ -0,0 +1 @@
+Adiciona arma mosquetes | Adds musket shooter
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..b29f860
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,134 @@
+--[[
+ Mod Musket para Minetest
+ Copyright (C) 2018 BrunoMine (https://github.com/BrunoMine)
+
+ Recebeste uma cópia da GNU Lesser General
+ Public License junto com esse software,
+ se não, veja em .
+
+ Arma Mosquete
+ ]]
+
+-- Tabela Global
+musket = {}
+
+local modpath = minetest.get_modpath("musket")
+
+dofile(modpath.."/tradutor.lua")
+
+local S = musket.S
+
+-- Arma descarregada
+minetest.register_craftitem("musket:ammo_mosquete_descarregado", {
+ description = "Mosquete Descarregado",
+ inventory_image = "musket_mosquete_descarregado.png",
+
+ on_drop = function(itemstack, dropper, pos)
+ -- Prints a random number and removes one item from the stack
+ minetest.chat_send_all(math.random())
+ itemstack:take_item()
+ return itemstack
+ end,
+})
+
+-- Munição de Mosquete
+minetest.register_craftitem("musket:ammo_mosquete", {
+ description = S("Munição para Mosquete"),
+ inventory_image = "musket_ammo_mosquete.png",
+ wield_image = "musket_ammo_mosquete_na_mao.png",
+ stack_max = 15,
+})
+
+-- Mosquete
+shooter:register_weapon("musket:mosquete", {
+ description = S("Mosquete"),
+ inventory_image = "musket_mosquete.png",
+ rounds = 1.1,
+ ammo = "musket:ammo_mosquete",
+ spec = {
+ range = 20,
+ step = 30,
+ tool_caps = {full_punch_interval=1.2, damage_groups={fleshy=6}},
+ groups = {snappy=3, crumbly=3, choppy=3, fleshy=2, oddly_breakable_by_hand=2},
+ sound = "musket_mosquete",
+ particle = "shooter_bullet.png",
+ },
+})
+
+-- Mosquete Descarregado
+shooter:register_weapon("musket:mosquete_descarregado", {
+ description = S("Mosquete"),
+ inventory_image = "musket_mosquete_descarregado.png",
+ rounds = 1.1,
+ ammo = "musket:ammo_mosquete",
+ spec = {
+ range = 20,
+ step = 30,
+ tool_caps = {full_punch_interval=1.2, damage_groups={fleshy=6}},
+ groups = {snappy=3, crumbly=3, choppy=3, fleshy=2, oddly_breakable_by_hand=2},
+ sound = "musket_mosquete",
+ particle = "shooter_bullet.png",
+ },
+})
+
+
+-- Ajustes
+local old_on_use1 = minetest.registered_tools["musket:mosquete_descarregado"].on_use
+do
+ -- Copiar tabela de definições
+ local def = {}
+ for n,d in pairs(minetest.registered_tools["musket:mosquete_descarregado"]) do
+ def[n] = d
+ end
+ -- Mantem a tabela groups separada
+ def.groups = minetest.deserialize(minetest.serialize(def.groups)) or {}
+
+ -- Altera alguns paremetros
+ def.groups.not_in_creative_inventory = 1
+
+ -- Troca o mosquete
+ def.on_use = function(itemstack, user, pointed_thing)
+ if old_on_use1 then
+ itemstack = old_on_use1(itemstack, user, pointed_thing)
+ end
+
+ -- Verifica se descarregou
+ if itemstack:get_wear() < 500 then
+ itemstack:set_name("musket:mosquete")
+ end
+
+ return itemstack
+ end
+
+ -- Registra o novo node
+ minetest.override_item("musket:mosquete_descarregado", {groups=def.groups, on_use=def.on_use})
+end
+
+local old_on_use2 = minetest.registered_tools["musket:mosquete"].on_use
+do
+ -- Copiar tabela de definições
+ local def = {}
+ for n,d in pairs(minetest.registered_tools["musket:mosquete"]) do
+ def[n] = d
+ end
+ -- Mantem a tabela groups separada
+ def.groups = minetest.deserialize(minetest.serialize(def.groups)) or {}
+
+ -- Altera alguns paremetros
+ -- Troca o mosquete
+ def.on_use = function(itemstack, user, pointed_thing)
+ if old_on_use2 then
+ itemstack = old_on_use2(itemstack, user, pointed_thing)
+ end
+
+ -- Verifica se descarregou
+ if itemstack:get_wear() > 50000 then
+ itemstack:set_name("musket:mosquete_descarregado")
+ end
+
+ return itemstack
+ end
+
+ -- Registra o novo node
+ minetest.override_item("musket:mosquete", {groups=def.groups, on_use=def.on_use})
+end
diff --git a/lib/intllib.lua b/lib/intllib.lua
new file mode 100644
index 0000000..6669d72
--- /dev/null
+++ b/lib/intllib.lua
@@ -0,0 +1,45 @@
+
+-- Fallback functions for when `intllib` is not installed.
+-- Code released under Unlicense .
+
+-- Get the latest version of this file at:
+-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
+
+local function format(str, ...)
+ local args = { ... }
+ local function repl(escape, open, num, close)
+ if escape == "" then
+ local replacement = tostring(args[tonumber(num)])
+ if open == "" then
+ replacement = replacement..close
+ end
+ return replacement
+ else
+ return "@"..open..num..close
+ end
+ end
+ return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
+end
+
+local gettext, ngettext
+if minetest.get_modpath("intllib") then
+ if intllib.make_gettext_pair then
+ -- New method using gettext.
+ gettext, ngettext = intllib.make_gettext_pair()
+ else
+ -- Old method using text files.
+ gettext = intllib.Getter()
+ end
+end
+
+-- Fill in missing functions.
+
+gettext = gettext or function(msgid, ...)
+ return format(msgid, ...)
+end
+
+ngettext = ngettext or function(msgid, msgid_plural, n, ...)
+ return format(n==1 and msgid or msgid_plural, ...)
+end
+
+return gettext, ngettext
diff --git a/locale/Arquivos para traduzir.txt b/locale/Arquivos para traduzir.txt
new file mode 100644
index 0000000..dd23724
--- /dev/null
+++ b/locale/Arquivos para traduzir.txt
@@ -0,0 +1 @@
+init.lua
diff --git a/locale/en.mo b/locale/en.mo
new file mode 100644
index 0000000..cc6244e
Binary files /dev/null and b/locale/en.mo differ
diff --git a/locale/en.po b/locale/en.po
new file mode 100644
index 0000000..cb59995
--- /dev/null
+++ b/locale/en.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-08-18 22:50-0300\n"
+"PO-Revision-Date: 2018-08-18 22:52-0300\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.6\n"
+"Last-Translator: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: en\n"
+
+#: init.lua
+msgid "Munição para Mosquete"
+msgstr "Musket Ammo"
+
+#: init.lua
+msgid "Mosquete"
+msgstr "Musket"
diff --git a/locale/musket.en.tr b/locale/musket.en.tr
new file mode 100644
index 0000000..a2513ab
--- /dev/null
+++ b/locale/musket.en.tr
@@ -0,0 +1,4 @@
+### Arquivo gerado por musket apartir de en.po
+# textdomain: musket
+Musket Ammo=Musket Ammo
+Musket=Musket
diff --git a/locale/musket.pt.tr b/locale/musket.pt.tr
new file mode 100644
index 0000000..6770911
--- /dev/null
+++ b/locale/musket.pt.tr
@@ -0,0 +1,4 @@
+### Arquivo gerado por musket apartir de pt.po
+# textdomain: musket
+Musket Ammo=Munição para Mosquete
+Musket=Mosquete
diff --git a/locale/pt.mo b/locale/pt.mo
new file mode 100644
index 0000000..228e6a2
Binary files /dev/null and b/locale/pt.mo differ
diff --git a/locale/pt.po b/locale/pt.po
new file mode 100644
index 0000000..d51d4e3
--- /dev/null
+++ b/locale/pt.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-08-18 22:50-0300\n"
+"PO-Revision-Date: 2018-08-18 22:53-0300\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.6\n"
+"Last-Translator: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: pt\n"
+
+#: init.lua
+msgid "Munição para Mosquete"
+msgstr "Munição para Mosquete"
+
+#: init.lua
+msgid "Mosquete"
+msgstr "Mosquete"
diff --git a/locale/template.pot b/locale/template.pot
new file mode 100644
index 0000000..0e221e3
--- /dev/null
+++ b/locale/template.pot
@@ -0,0 +1,26 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR , YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-08-18 22:50-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: init.lua
+msgid "Munição para Mosquete"
+msgstr ""
+
+#: init.lua
+msgid "Mosquete"
+msgstr ""
diff --git a/sounds/musket_mosquete.1.ogg b/sounds/musket_mosquete.1.ogg
new file mode 100644
index 0000000..958cd9b
Binary files /dev/null and b/sounds/musket_mosquete.1.ogg differ
diff --git a/sounds/musket_mosquete.2.ogg b/sounds/musket_mosquete.2.ogg
new file mode 100644
index 0000000..835c374
Binary files /dev/null and b/sounds/musket_mosquete.2.ogg differ
diff --git a/sounds/musket_mosquete.ogg b/sounds/musket_mosquete.ogg
new file mode 100644
index 0000000..b0aec5b
Binary files /dev/null and b/sounds/musket_mosquete.ogg differ
diff --git a/textures/musket_ammo_mosquete.png b/textures/musket_ammo_mosquete.png
new file mode 100644
index 0000000..7491b99
Binary files /dev/null and b/textures/musket_ammo_mosquete.png differ
diff --git a/textures/musket_ammo_mosquete_na_mao.png b/textures/musket_ammo_mosquete_na_mao.png
new file mode 100644
index 0000000..aa6739a
Binary files /dev/null and b/textures/musket_ammo_mosquete_na_mao.png differ
diff --git a/textures/musket_mosquete.png b/textures/musket_mosquete.png
new file mode 100644
index 0000000..1a08941
Binary files /dev/null and b/textures/musket_mosquete.png differ
diff --git a/textures/musket_mosquete_descarregado.png b/textures/musket_mosquete_descarregado.png
new file mode 100644
index 0000000..1a91e22
Binary files /dev/null and b/textures/musket_mosquete_descarregado.png differ
diff --git a/tools/xgettext.bat b/tools/xgettext.bat
new file mode 100644
index 0000000..18403db
--- /dev/null
+++ b/tools/xgettext.bat
@@ -0,0 +1,33 @@
+@echo off
+setlocal
+
+set me=%~n0
+
+rem # Uncomment the following line if gettext is not in your PATH.
+rem # Value must be absolute and end in a backslash.
+rem set gtprefix=C:\path\to\gettext\bin\
+
+if "%1" == "" (
+ echo Usage: %me% FILE... 1>&2
+ exit 1
+)
+
+set xgettext=%gtprefix%xgettext.exe
+set msgmerge=%gtprefix%msgmerge.exe
+
+md locale > nul 2>&1
+echo Generating template... 1>&2
+echo %xgettext% --from-code=UTF-8 -kS -kNS:1,2 -k_ -o locale/template.pot %*
+%xgettext% --from-code=UTF-8 -kS -kNS:1,2 -k_ -o locale/template.pot %*
+if %ERRORLEVEL% neq 0 goto done
+
+cd locale
+
+for %%f in (*.po) do (
+ echo Updating %%f... 1>&2
+ %msgmerge% --update %%f template.pot
+)
+
+echo DONE! 1>&2
+
+:done
diff --git a/tools/xgettext.sh b/tools/xgettext.sh
new file mode 100755
index 0000000..1504f42
--- /dev/null
+++ b/tools/xgettext.sh
@@ -0,0 +1,27 @@
+#! /bin/bash
+
+me=$(basename "${BASH_SOURCE[0]}");
+
+if [[ $# -lt 1 ]]; then
+ echo "Usage: $me FILE..." >&2;
+ exit 1;
+fi
+
+mkdir -p locale;
+echo "Generating template..." >&2;
+xgettext --from-code=UTF-8 \
+ --keyword=S \
+ --keyword=NS:1,2 \
+ --keyword=N_ \
+ --add-comments='Translators:' \
+ --add-location=file \
+ -o locale/template.pot \
+ "$@" \
+ || exit;
+
+find locale -name '*.po' -type f | while read -r file; do
+ echo "Updating $file..." >&2;
+ msgmerge --update "$file" locale/template.pot;
+done
+
+echo "DONE!" >&2;
diff --git a/tradutor.lua b/tradutor.lua
new file mode 100644
index 0000000..4ac4e4e
--- /dev/null
+++ b/tradutor.lua
@@ -0,0 +1,177 @@
+--[[
+ Mod musket para Minetest
+ Copyright (C) 2018 BrunoMine (https://github.com/BrunoMine)
+
+ Recebeste uma cópia da GNU Lesser General
+ Public License junto com esse software,
+ se não, veja em .
+
+ Sistema de tradução
+ ]]
+
+-- Modpath
+local modpath = minetest.get_modpath("musket")
+
+-- Tradução intllib
+musket.intllib = {}
+musket.intllib.S, musket.intllib.NS = dofile(modpath.."/lib/intllib.lua")
+
+-- Configura tradutor opicional
+musket.S = musket.intllib.S
+musket.NS = musket.intllib.NS
+
+--
+-- Ajustes devido ao bug de tradutor ler apenas traduzir do ingles
+--
+
+-- Strings para repassar textos em ingles
+local pt_to_en = {}
+
+-- Gera arquivos de tradução musket.*.tr
+do
+ local file_to_tb = function(file)
+ local msgid = nil
+ local msgstr = nil
+ local tb = {}
+ for line in io.lines(file) do
+
+ -- Iniciando 'msgid'
+ if string.sub(line, 1, 5) == "msgid" then
+
+ -- Escrever no catalogo a anterior
+ if msgid ~= nil and msgstr ~= nil then
+ if msgid ~= "" then
+ tb[msgid] = msgstr
+ end
+ msgid = nil
+ msgstr = nil
+ end
+
+ if line == "msgid \"\"" then
+ msgid = ""
+ else
+ msgid = string.sub(line, 8, (string.len(line)-1))
+ end
+
+ -- Continuando 'msgid'
+ elseif string.sub(line, 1, 1) == "\"" and msgstr == nil and msgid ~= nil then
+ msgid = msgid .. string.sub(line, 2, (string.len(line)-1))
+
+ -- Iniciando 'msgstr'
+ elseif string.sub(line, 1, 6) == "msgstr" then
+
+ if line == "msgstr \"\"" then
+ msgstr = ""
+ else
+ msgstr = string.sub(line, 9, (string.len(line)-1))
+ end
+
+ -- Continuando 'msgstr'
+ elseif string.sub(line, 1, 1) == "\"" and msgstr ~= nil then
+ msgstr = msgstr .. string.sub(line, 2, (string.len(line)-1))
+
+ end
+
+
+ end
+
+ -- Escrever ultima
+ if msgid ~= nil and msgstr ~= nil then
+ if msgid ~= "" then
+ tb[msgid] = msgstr
+ end
+ msgid = nil
+ msgstr = nil
+ end
+
+ return tb
+ end
+
+ -- Pegar strings principais en-pt para realizar as trocas
+ pt_to_en = file_to_tb(modpath.."/locale/en.po")
+
+ --minetest.log("error", "pt_to_en = "..dump(pt_to_en))
+
+ local list = minetest.get_dir_list(modpath.."/locale")
+ for _,file in ipairs(list) do
+
+ if string.match(file, "~") == nil then
+
+ -- Traduções ".po"
+ if string.match(file, ".pot") == nil and string.match(file, ".po") then
+
+ local lang_code = string.gsub(file, ".po", "")
+
+ local pt_to_lang = file_to_tb(modpath.."/locale/"..file)
+
+ -- tabela desejada
+ local en_to_lang = {}
+ for pt,en in pairs(pt_to_en) do
+ en_to_lang[en] = pt_to_lang[pt]
+ end
+
+ -- Novo arquivo
+ local new_file = "### Arquivo gerado por musket apartir de "..file.."\n# textdomain: musket\n"
+ for en,lang in pairs(en_to_lang) do
+ new_file = new_file .. en .. "=" .. lang .. "\n"
+ end
+ -- Escrever arquivo
+ local saida = io.open(modpath.."/locale/musket."..lang_code..".tr", "w")
+ saida:write(new_file)
+ io.close(saida)
+ end
+ end
+ end
+end
+
+-- Ajuste para repassar termos em ingles
+local s
+if minetest.get_translator ~= nil then
+ s = minetest.get_translator("musket")
+else
+ s = musket.intllib.S
+end
+
+musket.s = function(...)
+ local args = { ... }
+ if pt_to_en[args[1]] ~= nil then
+ return s(pt_to_en[args[1]], unpack(args, 2))
+ end
+ minetest.log("error", "[musket] String "..dump(args[1]).." nao catalogada")
+ return s(...)
+end
+
+-- Não troca string caso esteja trabalhando com intllib
+if minetest.get_modpath("intllib") ~= nil
+ and minetest.get_translator == nil
+then
+ musket.s = s
+end
+
+musket.S = function(...)
+ local args = { ... }
+ if type(args[1]) == "table" then
+ local r = {}
+ for n,a in ipairs(args[1]) do
+ if n ~= 1 then -- Não traduz o primeiro
+ table.insert(r, musket.S(a))
+ else
+ table.insert(r, a)
+ end
+ end
+
+ return musket.s(unpack(r))
+
+ elseif type(args[1]) == "string" then
+ -- Não traduz caso faltem argumentos (devido strings ilustrativas)
+ return musket.s(...)
+
+ else
+ return args[1]
+ end
+end
+
+-- Função que retorna a string inalterada para passar pela checagem
+musket.Sfake = function(s) return s end
+
+