diff --git a/city.lua b/city.lua
index 976c1e4..8ec745a 100644
--- a/city.lua
+++ b/city.lua
@@ -3,11 +3,12 @@
Copyright (C) 2020 BrunoMine (https://github.com/BrunoMine)
You should have received a copy of the GNU General Public License
- along with this program. If not, see 5.
+ along with this program. If not, see .
City Builder
]]
+local S = cidades.S
-- Registered cities
cidades.registered_cities = {}
@@ -97,16 +98,16 @@ cidades.create_city = function(city_id, pos)
end
minetest.register_chatcommand("create_city", {
- params = "City ID",
- description = "Create an active city",
+ params = S("City ID"),
+ description = S("Create an active city"),
func = function(name, param)
if not param or param == "" or not cidades.registered_cities[param] then
- minetest.chat_send_player(name, "Invalid City ID")
+ minetest.chat_send_player(name, S("Invalid City ID"))
return
end
cidades.create_city(param, vector.round(minetest.get_player_by_name(name):get_pos()))
- minetest.chat_send_player(name, cidades.registered_cities[param].name.." created.")
+ minetest.chat_send_player(name, S("@1 created.", cidades.registered_cities[param].name))
end,
})
diff --git a/city_builder.lua b/city_builder.lua
index 82f6cb8..5030ef1 100644
--- a/city_builder.lua
+++ b/city_builder.lua
@@ -8,9 +8,11 @@
City Builder
]]
+local S = cidades.S
+
-- Area mark node
minetest.register_node("cidades:area_mark", {
- description = "Area Mark",
+ description = "Area mark",
tiles = {"cidades_area_mark.png"},
groups = {choppy = 2, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1},
drop = "",
@@ -77,10 +79,10 @@ local export_city = function(pos)
minetest.mkdir(minetest.get_worldpath().."/cities in work")
if minetest.create_schematic(minp, maxp, {}, minetest.get_worldpath().."/cities in work/"..filename) ~= true then
- return minetest.chat_send_all("Export failed.")
+ return minetest.chat_send_all(S("Export failed."))
end
- minetest.chat_send_all("Schematic successfully exported. Restart the world to import it. "..filename.." file is in the world directory ('cities in work' folder).")
+ minetest.chat_send_all(S("Schematic successfully exported. Restart the world to import it. '@1' file is in the world directory ('cities in work' folder).", filename))
end
-- Import Schematic
@@ -99,10 +101,10 @@ local import_city = function(pos)
local filename = meta:get_string("city_id")..".mts"
if minetest.place_schematic(minp, minetest.get_worldpath().."/cities in work/"..filename) ~= true then
- return minetest.chat_send_all("Import failed.")
+ return minetest.chat_send_all(S("Import failed."))
end
- minetest.chat_send_all("Schematic successfully imported.")
+ minetest.chat_send_all(S("Schematic successfully imported."))
end
@@ -111,23 +113,23 @@ local update_formspec = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "size[8,8]"
- .."field[1,1;6,1;city_id;City ID (eg. wood_ville);"..meta:get_string("city_id").."]"
- .."field[1,4;2,1;radius;Radius;"..meta:get_float("radius").."]"
- .."field[3,4;2,1;height;Height;"..meta:get_float("height").."]"
- .."field[5,4;2,1;depth;Depth;"..meta:get_float("depth").."]"
+ .."field[1,1;6,1;city_id;"..S("City ID (eg. wood_ville)")..";"..meta:get_string("city_id").."]"
+ .."field[1,4;2,1;radius;"..S("Radius")..";"..meta:get_float("radius").."]"
+ .."field[3,4;2,1;height;"..S("Height")..";"..meta:get_float("height").."]"
+ .."field[5,4;2,1;depth;"..S("Depth")..";"..meta:get_float("depth").."]"
- .."label[0.5,5;This node is the reference for central position]"
- .."label[0.5,5.5;Spawn position for this city is 6 blocks above this block.]"
+ .."label[0.5,5;"..S("This node is the reference for central position.").."]"
+ .."label[0.5,5.5;"..S("Spawn position for this city is 6 blocks above this block.").."]"
- .."button_exit[1,7;2,1;export;Export]"
- .."button_exit[3,7;2,1;import;Import]"
- .."button_exit[5,7;2,1;mark;Mark]")
+ .."button_exit[1,7;2,1;export;"..S("Export").."]"
+ .."button_exit[3,7;2,1;import;"..S("Import").."]"
+ .."button_exit[5,7;2,1;mark;"..S("Mark").."]")
end
-- City Builder node
minetest.register_node("cidades:city_builder", {
- description = "City Builder",
+ description = S("City Builder"),
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"cidades_city_builder.png"},
@@ -136,7 +138,7 @@ minetest.register_node("cidades:city_builder", {
on_construct = function(pos)
local meta = minetest.get_meta(pos)
- meta:set_string("infotext", "City Builder")
+ meta:set_string("infotext", S("City Builder"))
meta:set_string("city_id", "")
meta:set_int("radius", 80)
diff --git a/depends.txt b/depends.txt
index bd6ebaa..e36d313 100644
--- a/depends.txt
+++ b/depends.txt
@@ -1,3 +1,4 @@
default
areas
sfinv_menu
+macromoney?
diff --git a/exchange.lua b/exchange.lua
new file mode 100644
index 0000000..2033cc1
--- /dev/null
+++ b/exchange.lua
@@ -0,0 +1,76 @@
+--[[
+ Mod Cidades for Minetest
+ Copyright (C) 2020 BrunoMine (https://github.com/BrunoMine)
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ Exchange
+ ]]
+
+local S = cidades.S
+
+-- Exchange methods
+cidades.exchange = {}
+
+-- Get value to text
+cidades.exchange.get_value_to_text = function(value)
+ return value
+end
+
+-- Take
+cidades.exchange.take = function(player, count)
+ player:get_inventory():remove_item("main", cidades.money_item.." "..count)
+end
+
+ -- Check take
+cidades.exchange.check_take = function(player, count)
+ if player:get_inventory():contains_item("main", cidades.money_item.." "..count) == false then
+ minetest.chat_send_player(player:get_player_name(), S("You can not pay that."))
+ return false
+ end
+ return true
+end
+
+-- Give
+cidades.exchange.give = function(player, count)
+
+ local leftover = player:get_inventory():add_item("main", cidades.money_item.." "..count)
+
+ -- Drop leftover
+ if leftover ~= true then
+ local pos = player:get_pos()
+ minetest.item_drop(leftover, player, {x=pos.x, y=pos.y+1, z=pos.z})
+ minetest.chat_send_player(player:get_player_name(), S("Crowded inventory. Leftovers were dropped."))
+ end
+end
+
+-- Use macromoney methods
+if macromoney and cidades.money_item == "macromoney:macro" then
+
+ -- Get value to text
+ cidades.exchange.get_value_to_text = function(value)
+ return macromoney.get_value_to_text("money", value)
+ end
+
+ -- Take
+ cidades.exchange.take = function(player, count)
+ macromoney.subtract_account(player:get_player_name(), "money", count)
+ end
+
+ -- Check take
+ cidades.exchange.has_payment = function(player, count)
+ return macromoney.get_account(player:get_player_name(), "money") >= count
+ end
+
+ -- Give
+ cidades.exchange.give = function(player, count)
+ macromoney.add_account(player:get_player_name(), "money", count)
+ end
+
+end
+
+
+
+
+
diff --git a/init.lua b/init.lua
index 14ee90f..7051b87 100644
--- a/init.lua
+++ b/init.lua
@@ -17,10 +17,18 @@ cidades.extra_protect_bottom_area = tonumber(minetest.settings:get("cidades_extr
cidades.max_days_inactive_owner = tonumber(minetest.settings:get("cidades_max_days_inactive_owner") or 60)
+cidades.resale_factor = tonumber(minetest.settings:get("cidades_resale_factor") or 0.5)
+if cidades.resale_factor > 1 then
+ cidades.resale_factor = 1
+end
+
+
local modpath = minetest.get_modpath("cidades")
dofile(modpath.."/data_base.lua")
+dofile(modpath.."/translator.lua")
+dofile(modpath.."/exchange.lua")
dofile(modpath.."/time_count.lua")
dofile(modpath.."/protected_area.lua")
dofile(modpath.."/number_nodes.lua")
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/cidades.en.tr b/locale/cidades.en.tr
new file mode 100644
index 0000000..5cb5357
--- /dev/null
+++ b/locale/cidades.en.tr
@@ -0,0 +1,61 @@
+### Arquivo gerado por cidades apartir de en.po
+# textdomain: cidades
+Stone=Stone
+Your land has been sold. You received @1.=Your land has been sold. You received @1.
+My Property=My Property
+Invalid cost.=Invalid cost.
+Schematic successfully imported.=Schematic successfully imported.
+Sale price: @1=Sale price: @1
+None=None
+Invalid height.=Invalid height.
+No defined=No defined
+Resale price: @1=Resale price: @1
+Land for sale=Land for sale
+@1 created.=@1 created.
+Invalid radius.=Invalid radius.
+You can not pay that.=You can not pay that.
+Mark=Mark
+You do not have a property.=You do not have a property.
+Make sure you can pay.=Make sure you can pay.
+Create=Create
+City: @1=City: @1
+City ID=City ID
+Sell property=Sell property
+Import=Import
+No property.=No property.
+City Builder=City Builder
+Spawn position for this city is 6 blocks above this block.=Spawn position for this city is 6 blocks above this block.
+Total buildable area: @1 blocks=Total buildable area: @1 blocks
+Export failed.=Export failed.
+This node is the reference for central position.=This node is the reference for central position.
+You already own land. Sell it to buy that one.=You already own land. Sell it to buy that one.
+Width: @1=Width: @1
+City ID (eg. wood_ville)=City ID (eg. wood_ville)
+Schematic successfully exported. Restart the world to import it. '@1' file is in the world directory ('cities in work' folder).=Schematic successfully exported. Restart the world to import it. '@1' file is in the world directory ('cities in work' folder).
+Import failed.=Import failed.
+Teleporter=Teleporter
+Invalid City ID=Invalid City ID
+Insufficient payment.=Insufficient payment.
+Choose a city=Choose a city
+Cost: @1=Cost: @1
+Property Builder=Property Builder
+Crowded inventory. Leftovers were dropped.=Crowded inventory. Leftovers were dropped.
+Height: @1=Height: @1
+Are you sure?=Are you sure?
+Buy=Buy
+Buy a property in a city.=Buy a property in a city.
+Radius=Radius
+Price: @1=Price: @1
+Create an active city=Create an active city
+No=No
+All the land will be destroyed.=All the land will be destroyed.
+Export=Export
+Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)=Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)
+Land purchased.=Land purchased.
+Welcome to @1=Welcome to @1
+Cost (10 - 9990)=Cost (10 - 9990)
+Yes=Yes
+Height=Height
+Depth=Depth
+Radius (3 - 12)=Radius (3 - 12)
+Go=Go
diff --git a/locale/cidades.pt.tr b/locale/cidades.pt.tr
new file mode 100644
index 0000000..638dd27
--- /dev/null
+++ b/locale/cidades.pt.tr
@@ -0,0 +1,61 @@
+### Arquivo gerado por cidades apartir de pt.po
+# textdomain: cidades
+Stone=Pedra
+Your land has been sold. You received @1.=Sua propriedade for vendida. Você recebeu @1.
+My Property=Propriedade
+Invalid cost.=Custo inválido.
+Schematic successfully imported.=A estrutura esquemática foi importada.
+Sale price: @1=Preço de venda: @1
+None=Nenhum
+Invalid height.=Altura inválida.
+No defined=Não definida
+Resale price: @1=Preço de revenda: @1
+Land for sale=Propriedade a venda
+@1 created.=Cidade @1 criada.
+Invalid radius.=Raio inválido.
+You can not pay that.=Você não consegue pagar isso.
+Mark=Marcar
+You do not have a property.=Você não tem propriedade.
+Make sure you can pay.=Certifique-se de que pode pagar.
+Create=Criar
+City: @1=Cidade: @1
+City ID=ID da cidade
+Sell property=Vender propriedade
+Import=Importar
+No property.=Nenhuma propriedade.
+City Builder=Construtor de Cidade
+Spawn position for this city is 6 blocks above this block.=Posição de spawn para a cidade será 6 blocos acima desse bloco.
+Total buildable area: @1 blocks=Total de área construível: @1 blocos
+Export failed.=A exportação falhou.
+This node is the reference for central position.=Esse bloco é a referencia para a posição central.
+You already own land. Sell it to buy that one.=Já tens uma propriedade. Venda ela antes.
+Width: @1=Largura: @1
+City ID (eg. wood_ville)=ID da cidade (exemplo: vila_da_madeira)
+Schematic successfully exported. Restart the world to import it. '@1' file is in the world directory ('cities in work' folder).=A estrutura esquemática foi exportado com sucesso. Reinicie o mundo para importar-lo. Arquivo '@1' está no diretório do mundo (na pasta 'cities in work').
+Import failed.=A importação falhou.
+Teleporter=Teleportador
+Invalid City ID=ID de cidade inválido
+Insufficient payment.=Pagamento insuficiente.
+Choose a city=Escolha uma cidade
+Cost: @1=Custo: @1
+Property Builder=Construtor de Propriedade
+Crowded inventory. Leftovers were dropped.=Inventário lotado. As sobras caíram no chão.
+Height: @1=Altura: @1
+Are you sure?=Você tem certeza?
+Buy=Comprar
+Buy a property in a city.=Compre uma em uma cidade.
+Radius=Raio
+Price: @1=Preço: @1
+Create an active city=Criar uma cidade ativa
+No=Não
+All the land will be destroyed.=Toda propriedade será destruída.
+Export=Exportar
+Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)=Altura (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)
+Land purchased.=Propriedade comprada.
+Welcome to @1=Bem vindo a @1
+Cost (10 - 9990)=Custo (10 - 9990)
+Yes=Sim
+Height=Altura
+Depth=Profundidade
+Radius (3 - 12)=Raio (3 - 12)
+Go=Ir
diff --git a/locale/cidades.pt_BR.tr b/locale/cidades.pt_BR.tr
new file mode 100644
index 0000000..47b253f
--- /dev/null
+++ b/locale/cidades.pt_BR.tr
@@ -0,0 +1,61 @@
+### Arquivo gerado por cidades apartir de pt_BR.po
+# textdomain: cidades
+Stone=Pedra
+Your land has been sold. You received @1.=Sua propriedade for vendida. Você recebeu @1.
+My Property=Propriedade
+Invalid cost.=Custo inválido.
+Schematic successfully imported.=A estrutura esquemática foi importada.
+Sale price: @1=Preço de venda: @1
+None=Nenhum
+Invalid height.=Altura inválida.
+No defined=Não definida
+Resale price: @1=Preço de revenda: @1
+Land for sale=Propriedade a venda
+@1 created.=Cidade @1 criada.
+Invalid radius.=Raio inválido.
+You can not pay that.=Você não consegue pagar isso.
+Mark=Marcar
+You do not have a property.=Você não tem propriedade.
+Make sure you can pay.=Certifique-se de que pode pagar.
+Create=Criar
+City: @1=Cidade: @1
+City ID=ID da cidade
+Sell property=Vender propriedade
+Import=Importar
+No property.=Nenhuma propriedade.
+City Builder=Construtor de Cidade
+Spawn position for this city is 6 blocks above this block.=Posição de spawn para a cidade será 6 blocos acima desse bloco.
+Total buildable area: @1 blocks=Total de área construível: @1 blocos
+Export failed.=A exportação falhou.
+This node is the reference for central position.=Esse bloco é a referencia para a posição central.
+You already own land. Sell it to buy that one.=Já tens uma propriedade. Venda ela antes.
+Width: @1=Largura: @1
+City ID (eg. wood_ville)=ID da cidade (exemplo: vila_da_madeira)
+Schematic successfully exported. Restart the world to import it. '@1' file is in the world directory ('cities in work' folder).=A estrutura esquemática foi exportado com sucesso. Reinicie o mundo para importar-lo. Arquivo '@1' está no diretório do mundo (na pasta 'cities in work').
+Import failed.=A importação falhou.
+Teleporter=Teleportador
+Invalid City ID=ID de cidade inválido
+Insufficient payment.=Pagamento insuficiente.
+Choose a city=Escolha uma cidade
+Cost: @1=Custo: @1
+Property Builder=Construtor de Propriedade
+Crowded inventory. Leftovers were dropped.=Inventário lotado. As sobras caíram no chão.
+Height: @1=Altura: @1
+Are you sure?=Você tem certeza?
+Buy=Comprar
+Buy a property in a city.=Compre uma em uma cidade.
+Radius=Raio
+Price: @1=Preço: @1
+Create an active city=Criar uma cidade ativa
+No=Não
+All the land will be destroyed.=Toda propriedade será destruída.
+Export=Exportar
+Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)=Altura (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)
+Land purchased.=Propriedade comprada.
+Welcome to @1=Bem vindo a @1
+Cost (10 - 9990)=Custo (10 - 9990)
+Yes=Sim
+Height=Altura
+Depth=Profundidade
+Radius (3 - 12)=Raio (3 - 12)
+Go=Ir
diff --git a/locale/cidades.pt_PT.tr b/locale/cidades.pt_PT.tr
new file mode 100644
index 0000000..420dddb
--- /dev/null
+++ b/locale/cidades.pt_PT.tr
@@ -0,0 +1,61 @@
+### Arquivo gerado por cidades apartir de pt_PT.po
+# textdomain: cidades
+Stone=Pedra
+Your land has been sold. You received @1.=Sua propriedade for vendida. Você recebeu @1.
+My Property=Propriedade
+Invalid cost.=Custo inválido.
+Schematic successfully imported.=A estrutura esquemática foi importada.
+Sale price: @1=Preço de venda: @1
+None=Nenhum
+Invalid height.=Altura inválida.
+No defined=Não definida
+Resale price: @1=Preço de revenda: @1
+Land for sale=Propriedade a venda
+@1 created.=Cidade @1 criada.
+Invalid radius.=Raio inválido.
+You can not pay that.=Você não consegue pagar isso.
+Mark=Marcar
+You do not have a property.=Você não tem propriedade.
+Make sure you can pay.=Certifique-se de que pode pagar.
+Create=Criar
+City: @1=Cidade: @1
+City ID=ID da cidade
+Sell property=Vender propriedade
+Import=Importar
+No property.=Nenhuma propriedade.
+City Builder=Construtor de Cidade
+Spawn position for this city is 6 blocks above this block.=Posição de spawn para a cidade será 6 blocos acima desse bloco.
+Total buildable area: @1 blocks=Total de área construível: @1 blocos
+Export failed.=A exportação falhou.
+This node is the reference for central position.=Esse bloco é a referencia para a posição central.
+You already own land. Sell it to buy that one.=Já tens uma propriedade. Venda ela antes.
+Width: @1=Largura: @1
+City ID (eg. wood_ville)=ID da cidade (exemplo: vila_da_madeira)
+Schematic successfully exported. Restart the world to import it. '@1' file is in the world directory ('cities in work' folder).=A estrutura esquemática foi exportado com sucesso. Reinicie o mundo para importar-lo. Arquivo '@1' está no diretório do mundo (na pasta 'cities in work').
+Import failed.=A importação falhou.
+Teleporter=Teleportador
+Invalid City ID=ID de cidade inválido
+Insufficient payment.=Pagamento insuficiente.
+Choose a city=Escolha uma cidade
+Cost: @1=Custo: @1
+Property Builder=Construtor de Propriedade
+Crowded inventory. Leftovers were dropped.=Inventário lotado. As sobras caíram no chão.
+Height: @1=Altura: @1
+Are you sure?=Você tem certeza?
+Buy=Comprar
+Buy a property in a city.=Compre uma em uma cidade.
+Radius=Raio
+Price: @1=Preço: @1
+Create an active city=Criar uma cidade ativa
+No=Não
+All the land will be destroyed.=Toda propriedade será destruída.
+Export=Exportar
+Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)=Altura (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)
+Land purchased.=Propriedade comprada.
+Welcome to @1=Bem vindo a @1
+Cost (10 - 9990)=Custo (10 - 9990)
+Yes=Sim
+Height=Altura
+Depth=Profundidade
+Radius (3 - 12)=Raio (3 - 12)
+Go=Ir
diff --git a/locale/en.mo b/locale/en.mo
new file mode 100644
index 0000000..e21d9e6
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..b181dba
--- /dev/null
+++ b/locale/en.po
@@ -0,0 +1,271 @@
+# 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: 2020-04-04 20:31-0300\n"
+"PO-Revision-Date: 2020-04-04 20:35-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: en\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"
+
+#: city.lua
+msgid "City ID"
+msgstr "City ID"
+
+#: city.lua
+msgid "Create an active city"
+msgstr "Create an active city"
+
+#: city.lua
+msgid "Invalid City ID"
+msgstr "Invalid City ID"
+
+#: city.lua
+msgid "@1 created."
+msgstr "@1 created."
+
+#: city_builder.lua
+msgid "Export failed."
+msgstr "Export failed."
+
+#: city_builder.lua
+msgid ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+msgstr ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+
+#: city_builder.lua
+msgid "Import failed."
+msgstr "Import failed."
+
+#: city_builder.lua
+msgid "Schematic successfully imported."
+msgstr "Schematic successfully imported."
+
+#: city_builder.lua
+msgid "City ID (eg. wood_ville)"
+msgstr "City ID (eg. wood_ville)"
+
+#: city_builder.lua
+msgid "Radius"
+msgstr "Radius"
+
+#: city_builder.lua
+msgid "Height"
+msgstr "Height"
+
+#: city_builder.lua
+msgid "Depth"
+msgstr "Depth"
+
+#: city_builder.lua
+msgid "This node is the reference for central position."
+msgstr "This node is the reference for central position."
+
+#: city_builder.lua
+msgid "Spawn position for this city is 6 blocks above this block."
+msgstr "Spawn position for this city is 6 blocks above this block."
+
+#: city_builder.lua
+msgid "Export"
+msgstr "Export"
+
+#: city_builder.lua
+msgid "Import"
+msgstr "Import"
+
+#: city_builder.lua
+msgid "Mark"
+msgstr "Mark"
+
+#: city_builder.lua
+msgid "City Builder"
+msgstr "City Builder"
+
+#: exchange.lua
+msgid "You can not pay that."
+msgstr "You can not pay that."
+
+#: exchange.lua
+msgid "Crowded inventory. Leftovers were dropped."
+msgstr "Crowded inventory. Leftovers were dropped."
+
+#: number_nodes.lua
+msgid "Stone"
+msgstr "Stone"
+
+#: property.lua
+msgid "None"
+msgstr "None"
+
+#: property.lua sfinv_menu.lua
+msgid "Sell property"
+msgstr "Sell property"
+
+#: property.lua
+msgid "No property."
+msgstr "No property."
+
+#: property_builder.lua
+msgid "Radius (3 - 12)"
+msgstr "Radius (3 - 12)"
+
+#: property_builder.lua
+msgid "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+msgstr "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+
+#: property_builder.lua
+msgid "Cost (10 - 9990)"
+msgstr "Cost (10 - 9990)"
+
+#: property_builder.lua
+msgid "Create"
+msgstr "Create"
+
+#: property_builder.lua
+msgid "Property Builder"
+msgstr "Property Builder"
+
+#: property_builder.lua
+msgid "Invalid radius."
+msgstr "Invalid radius."
+
+#: property_builder.lua
+msgid "Invalid height."
+msgstr "Invalid height."
+
+#: property_builder.lua
+msgid "Invalid cost."
+msgstr "Invalid cost."
+
+#: seller_node.lua
+msgid "Make sure you can pay."
+msgstr "Make sure you can pay."
+
+#: seller_node.lua
+msgid "You already own land. Sell it to buy that one."
+msgstr "You already own land. Sell it to buy that one."
+
+#: seller_node.lua
+msgid "Land for sale"
+msgstr "Land for sale"
+
+#: seller_node.lua
+msgid "Height: @1"
+msgstr "Height: @1"
+
+#: seller_node.lua
+msgid "Width: @1"
+msgstr "Width: @1"
+
+#: seller_node.lua
+msgid "Total buildable area: @1 blocks"
+msgstr "Total buildable area: @1 blocks"
+
+#: seller_node.lua
+msgid "Cost: @1"
+msgstr "Cost: @1"
+
+#: seller_node.lua
+msgid "Sale price: @1"
+msgstr "Sale price: @1"
+
+#: seller_node.lua
+msgid "Buy"
+msgstr "Buy"
+
+#: seller_node.lua
+msgid "Insufficient payment."
+msgstr "Insufficient payment."
+
+#: seller_node.lua
+msgid "Land purchased."
+msgstr "Land purchased."
+
+#: sfinv_menu.lua teleporter.lua
+msgid "Choose a city"
+msgstr "Choose a city"
+
+#: sfinv_menu.lua
+msgid "Are you sure?"
+msgstr "Are you sure?"
+
+#: sfinv_menu.lua
+msgid "All the land will be destroyed."
+msgstr "All the land will be destroyed."
+
+#: sfinv_menu.lua
+msgid "Yes"
+msgstr "Yes"
+
+#: sfinv_menu.lua
+msgid "No"
+msgstr "No"
+
+#: sfinv_menu.lua
+msgid "Your land has been sold. You received @1."
+msgstr "Your land has been sold. You received @1."
+
+#: sfinv_menu.lua
+msgid "My Property"
+msgstr "My Property"
+
+#: sfinv_menu.lua
+msgid "You do not have a property."
+msgstr "You do not have a property."
+
+#: sfinv_menu.lua
+msgid "Buy a property in a city."
+msgstr "Buy a property in a city."
+
+#: sfinv_menu.lua
+msgid "No defined"
+msgstr "No defined"
+
+#: sfinv_menu.lua
+msgid "City: @1"
+msgstr "City: @1"
+
+#: sfinv_menu.lua
+msgid "Price: @1"
+msgstr "Price: @1"
+
+#: sfinv_menu.lua
+msgid "Resale price: @1"
+msgstr "Resale price: @1"
+
+#: teleporter.lua
+msgid "Go"
+msgstr "Go"
+
+#: teleporter.lua
+msgid "Welcome to @1"
+msgstr "Welcome to @1"
+
+#: teleporter.lua
+msgid "Teleporter"
+msgstr "Teleporter"
+
+#, fuzzy
+#~ msgid "Sell self property"
+#~ msgstr "Sell my property"
+
+#~ msgid "Seller Icon"
+#~ msgstr "Seller Icon"
+
+#~ msgid "Reset self property"
+#~ msgstr "Reset self property"
+
+#~ msgid "Area Mark"
+#~ msgstr "Area Mark"
diff --git a/locale/en.po~ b/locale/en.po~
new file mode 100644
index 0000000..562ce1c
--- /dev/null
+++ b/locale/en.po~
@@ -0,0 +1,272 @@
+# 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: 2020-04-04 20:26-0300\n"
+"PO-Revision-Date: 2020-04-04 20:01-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: en\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"
+
+#: city.lua
+msgid "City ID"
+msgstr "City ID"
+
+#: city.lua
+msgid "Create an active city"
+msgstr "Create an active city"
+
+#: city.lua
+msgid "Invalid City ID"
+msgstr "Invalid City ID"
+
+#: city.lua
+msgid "@1 created."
+msgstr "@1 created."
+
+#: city_builder.lua
+msgid "Export failed."
+msgstr "Export failed."
+
+#: city_builder.lua
+msgid ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+msgstr ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+
+#: city_builder.lua
+msgid "Import failed."
+msgstr "Import failed."
+
+#: city_builder.lua
+msgid "Schematic successfully imported."
+msgstr "Schematic successfully imported."
+
+#: city_builder.lua
+msgid "City ID (eg. wood_ville)"
+msgstr "City ID (eg. wood_ville)"
+
+#: city_builder.lua
+msgid "Radius"
+msgstr "Radius"
+
+#: city_builder.lua
+msgid "Height"
+msgstr "Height"
+
+#: city_builder.lua
+msgid "Depth"
+msgstr "Depth"
+
+#: city_builder.lua
+msgid "This node is the reference for central position."
+msgstr "This node is the reference for central position."
+
+#: city_builder.lua
+msgid "Spawn position for this city is 6 blocks above this block."
+msgstr "Spawn position for this city is 6 blocks above this block."
+
+#: city_builder.lua
+msgid "Export"
+msgstr "Export"
+
+#: city_builder.lua
+msgid "Import"
+msgstr "Import"
+
+#: city_builder.lua
+msgid "Mark"
+msgstr "Mark"
+
+#: city_builder.lua
+msgid "City Builder"
+msgstr "City Builder"
+
+#: exchange.lua
+msgid "You can not pay that."
+msgstr "You can not pay that."
+
+#: exchange.lua
+msgid "Crowded inventory. Leftovers were dropped."
+msgstr "Crowded inventory. Leftovers were dropped."
+
+#: number_nodes.lua
+msgid "Stone"
+msgstr "Stone"
+
+#: property.lua
+msgid "None"
+msgstr "None"
+
+#: property.lua
+#, fuzzy
+msgid "Sell self property"
+msgstr "Sell my property"
+
+#: property.lua
+msgid "No property."
+msgstr "No property."
+
+#: property_builder.lua
+msgid "Radius (3 - 12)"
+msgstr "Radius (3 - 12)"
+
+#: property_builder.lua
+msgid "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+msgstr "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+
+#: property_builder.lua
+msgid "Cost (10 - 9990)"
+msgstr "Cost (10 - 9990)"
+
+#: property_builder.lua
+msgid "Create"
+msgstr "Create"
+
+#: property_builder.lua
+msgid "Property Builder"
+msgstr "Property Builder"
+
+#: property_builder.lua
+msgid "Invalid radius."
+msgstr "Invalid radius."
+
+#: property_builder.lua
+msgid "Invalid height."
+msgstr "Invalid height."
+
+#: property_builder.lua
+msgid "Invalid cost."
+msgstr "Invalid cost."
+
+#: seller_node.lua
+msgid "Make sure you can pay."
+msgstr "Make sure you can pay."
+
+#: seller_node.lua
+msgid "You already own land. Sell it to buy that one."
+msgstr "You already own land. Sell it to buy that one."
+
+#: seller_node.lua
+msgid "Land for sale"
+msgstr "Land for sale"
+
+#: seller_node.lua
+msgid "Height: @1"
+msgstr "Height: @1"
+
+#: seller_node.lua
+msgid "Width: @1"
+msgstr "Width: @1"
+
+#: seller_node.lua
+msgid "Total buildable area: @1 blocks"
+msgstr "Total buildable area: @1 blocks"
+
+#: seller_node.lua
+msgid "Cost: @1"
+msgstr "Cost: @1"
+
+#: seller_node.lua
+msgid "Sale price: @1"
+msgstr "Sale price: @1"
+
+#: seller_node.lua
+msgid "Buy"
+msgstr "Buy"
+
+#: seller_node.lua
+msgid "Insufficient payment."
+msgstr "Insufficient payment."
+
+#: seller_node.lua
+msgid "Land purchased."
+msgstr "Land purchased."
+
+#: sfinv_menu.lua teleporter.lua
+msgid "Choose a city"
+msgstr "Choose a city"
+
+#: sfinv_menu.lua
+msgid "Are you sure?"
+msgstr "Are you sure?"
+
+#: sfinv_menu.lua
+msgid "All the land will be destroyed."
+msgstr "All the land will be destroyed."
+
+#: sfinv_menu.lua
+msgid "Yes"
+msgstr "Yes"
+
+#: sfinv_menu.lua
+msgid "No"
+msgstr "No"
+
+#: sfinv_menu.lua
+msgid "Your land has been sold. You received @1."
+msgstr "Your land has been sold. You received @1."
+
+#: sfinv_menu.lua
+msgid "My Property"
+msgstr "My Property"
+
+#: sfinv_menu.lua
+msgid "You do not have a property."
+msgstr "You do not have a property."
+
+#: sfinv_menu.lua
+msgid "Buy a property in a city."
+msgstr "Buy a property in a city."
+
+#: sfinv_menu.lua
+msgid "No defined"
+msgstr "No defined"
+
+#: sfinv_menu.lua
+msgid "City: @1"
+msgstr "City: @1"
+
+#: sfinv_menu.lua
+msgid "Price: @1"
+msgstr "Price: @1"
+
+#: sfinv_menu.lua
+msgid "Resale price: @1"
+msgstr "Resale price: @1"
+
+#: sfinv_menu.lua
+msgid "Sell my property"
+msgstr "Sell my property"
+
+#: teleporter.lua
+msgid "Go"
+msgstr "Go"
+
+#: teleporter.lua
+msgid "Welcome to @1"
+msgstr "Welcome to @1"
+
+#: teleporter.lua
+msgid "Teleporter"
+msgstr "Teleporter"
+
+#~ msgid "Seller Icon"
+#~ msgstr "Seller Icon"
+
+#~ msgid "Reset self property"
+#~ msgstr "Reset self property"
+
+#~ msgid "Area Mark"
+#~ msgstr "Area Mark"
diff --git a/locale/pt.mo b/locale/pt.mo
new file mode 100644
index 0000000..aeddabc
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..408fbe8
--- /dev/null
+++ b/locale/pt.po
@@ -0,0 +1,268 @@
+# 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: 2020-04-04 20:31-0300\n"
+"PO-Revision-Date: 2020-04-04 20:43-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: pt\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"
+
+#: city.lua
+msgid "City ID"
+msgstr "ID da cidade"
+
+#: city.lua
+msgid "Create an active city"
+msgstr "Criar uma cidade ativa"
+
+#: city.lua
+msgid "Invalid City ID"
+msgstr "ID de cidade inválido"
+
+#: city.lua
+msgid "@1 created."
+msgstr "Cidade @1 criada."
+
+#: city_builder.lua
+msgid "Export failed."
+msgstr "A exportação falhou."
+
+#: city_builder.lua
+msgid ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+msgstr ""
+"A estrutura esquemática foi exportado com sucesso. Reinicie o mundo para "
+"importar-lo. Arquivo '@1' está no diretório do mundo (na pasta 'cities in "
+"work')."
+
+#: city_builder.lua
+msgid "Import failed."
+msgstr "A importação falhou."
+
+#: city_builder.lua
+msgid "Schematic successfully imported."
+msgstr "A estrutura esquemática foi importada."
+
+#: city_builder.lua
+msgid "City ID (eg. wood_ville)"
+msgstr "ID da cidade (exemplo: vila_da_madeira)"
+
+#: city_builder.lua
+msgid "Radius"
+msgstr "Raio"
+
+#: city_builder.lua
+msgid "Height"
+msgstr "Altura"
+
+#: city_builder.lua
+msgid "Depth"
+msgstr "Profundidade"
+
+#: city_builder.lua
+msgid "This node is the reference for central position."
+msgstr "Esse bloco é a referencia para a posição central."
+
+#: city_builder.lua
+msgid "Spawn position for this city is 6 blocks above this block."
+msgstr "Posição de spawn para a cidade será 6 blocos acima desse bloco."
+
+#: city_builder.lua
+msgid "Export"
+msgstr "Exportar"
+
+#: city_builder.lua
+msgid "Import"
+msgstr "Importar"
+
+#: city_builder.lua
+msgid "Mark"
+msgstr "Marcar"
+
+#: city_builder.lua
+msgid "City Builder"
+msgstr "Construtor de Cidade"
+
+#: exchange.lua
+msgid "You can not pay that."
+msgstr "Você não consegue pagar isso."
+
+#: exchange.lua
+msgid "Crowded inventory. Leftovers were dropped."
+msgstr "Inventário lotado. As sobras caíram no chão."
+
+#: number_nodes.lua
+msgid "Stone"
+msgstr "Pedra"
+
+#: property.lua
+msgid "None"
+msgstr "Nenhum"
+
+#: property.lua sfinv_menu.lua
+msgid "Sell property"
+msgstr "Vender propriedade"
+
+#: property.lua
+msgid "No property."
+msgstr "Nenhuma propriedade."
+
+#: property_builder.lua
+msgid "Radius (3 - 12)"
+msgstr "Raio (3 - 12)"
+
+#: property_builder.lua
+msgid "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+msgstr "Altura (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+
+#: property_builder.lua
+msgid "Cost (10 - 9990)"
+msgstr "Custo (10 - 9990)"
+
+#: property_builder.lua
+msgid "Create"
+msgstr "Criar"
+
+#: property_builder.lua
+msgid "Property Builder"
+msgstr "Construtor de Propriedade"
+
+#: property_builder.lua
+msgid "Invalid radius."
+msgstr "Raio inválido."
+
+#: property_builder.lua
+msgid "Invalid height."
+msgstr "Altura inválida."
+
+#: property_builder.lua
+msgid "Invalid cost."
+msgstr "Custo inválido."
+
+#: seller_node.lua
+msgid "Make sure you can pay."
+msgstr "Certifique-se de que pode pagar."
+
+#: seller_node.lua
+msgid "You already own land. Sell it to buy that one."
+msgstr "Já tens uma propriedade. Venda ela antes."
+
+#: seller_node.lua
+msgid "Land for sale"
+msgstr "Propriedade a venda"
+
+#: seller_node.lua
+msgid "Height: @1"
+msgstr "Altura: @1"
+
+#: seller_node.lua
+msgid "Width: @1"
+msgstr "Largura: @1"
+
+#: seller_node.lua
+msgid "Total buildable area: @1 blocks"
+msgstr "Total de área construível: @1 blocos"
+
+#: seller_node.lua
+msgid "Cost: @1"
+msgstr "Custo: @1"
+
+#: seller_node.lua
+msgid "Sale price: @1"
+msgstr "Preço de venda: @1"
+
+#: seller_node.lua
+msgid "Buy"
+msgstr "Comprar"
+
+#: seller_node.lua
+msgid "Insufficient payment."
+msgstr "Pagamento insuficiente."
+
+#: seller_node.lua
+msgid "Land purchased."
+msgstr "Propriedade comprada."
+
+#: sfinv_menu.lua teleporter.lua
+msgid "Choose a city"
+msgstr "Escolha uma cidade"
+
+#: sfinv_menu.lua
+msgid "Are you sure?"
+msgstr "Você tem certeza?"
+
+#: sfinv_menu.lua
+msgid "All the land will be destroyed."
+msgstr "Toda propriedade será destruída."
+
+#: sfinv_menu.lua
+msgid "Yes"
+msgstr "Sim"
+
+#: sfinv_menu.lua
+msgid "No"
+msgstr "Não"
+
+#: sfinv_menu.lua
+msgid "Your land has been sold. You received @1."
+msgstr "Sua propriedade for vendida. Você recebeu @1."
+
+#: sfinv_menu.lua
+msgid "My Property"
+msgstr "Propriedade"
+
+#: sfinv_menu.lua
+msgid "You do not have a property."
+msgstr "Você não tem propriedade."
+
+#: sfinv_menu.lua
+msgid "Buy a property in a city."
+msgstr "Compre uma em uma cidade."
+
+#: sfinv_menu.lua
+msgid "No defined"
+msgstr "Não definida"
+
+#: sfinv_menu.lua
+msgid "City: @1"
+msgstr "Cidade: @1"
+
+#: sfinv_menu.lua
+msgid "Price: @1"
+msgstr "Preço: @1"
+
+#: sfinv_menu.lua
+msgid "Resale price: @1"
+msgstr "Preço de revenda: @1"
+
+#: teleporter.lua
+msgid "Go"
+msgstr "Ir"
+
+#: teleporter.lua
+msgid "Welcome to @1"
+msgstr "Bem vindo a @1"
+
+#: teleporter.lua
+msgid "Teleporter"
+msgstr "Teleportador"
+
+#~ msgid "Sell self property"
+#~ msgstr "Vender propriedade"
+
+#~ msgid "Seller Icon"
+#~ msgstr "Seller Icon"
+
+#~ msgid "Area Mark"
+#~ msgstr "Marcar area"
diff --git a/locale/pt.po~ b/locale/pt.po~
new file mode 100644
index 0000000..bd9fd0e
--- /dev/null
+++ b/locale/pt.po~
@@ -0,0 +1,269 @@
+# 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: 2020-04-04 20:26-0300\n"
+"PO-Revision-Date: 2020-04-04 20:30-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: pt\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"
+
+#: city.lua
+msgid "City ID"
+msgstr "ID da cidade"
+
+#: city.lua
+msgid "Create an active city"
+msgstr "Criar uma cidade ativa"
+
+#: city.lua
+msgid "Invalid City ID"
+msgstr "ID de cidade inválido"
+
+#: city.lua
+msgid "@1 created."
+msgstr "Cidade @1 criada."
+
+#: city_builder.lua
+msgid "Export failed."
+msgstr "A exportação falhou."
+
+#: city_builder.lua
+msgid ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+msgstr ""
+"A estrutura esquemática foi exportado com sucesso. Reinicie o mundo para "
+"importar-lo. Arquivo '@1' está no diretório do mundo (na pasta 'cities in "
+"work')."
+
+#: city_builder.lua
+msgid "Import failed."
+msgstr "A importação falhou."
+
+#: city_builder.lua
+msgid "Schematic successfully imported."
+msgstr "A estrutura esquemática foi importada."
+
+#: city_builder.lua
+msgid "City ID (eg. wood_ville)"
+msgstr "ID da cidade (exemplo: vila_da_madeira)"
+
+#: city_builder.lua
+msgid "Radius"
+msgstr "Raio"
+
+#: city_builder.lua
+msgid "Height"
+msgstr "Altura"
+
+#: city_builder.lua
+msgid "Depth"
+msgstr "Profundidade"
+
+#: city_builder.lua
+msgid "This node is the reference for central position."
+msgstr "Esse bloco é a referencia para a posição central."
+
+#: city_builder.lua
+msgid "Spawn position for this city is 6 blocks above this block."
+msgstr "Posição de spawn para a cidade será 6 blocos acima desse bloco."
+
+#: city_builder.lua
+msgid "Export"
+msgstr "Exportar"
+
+#: city_builder.lua
+msgid "Import"
+msgstr "Importar"
+
+#: city_builder.lua
+msgid "Mark"
+msgstr "Marcar"
+
+#: city_builder.lua
+msgid "City Builder"
+msgstr "Construtor de Cidade"
+
+#: exchange.lua
+msgid "You can not pay that."
+msgstr "Você não consegue pagar isso."
+
+#: exchange.lua
+msgid "Crowded inventory. Leftovers were dropped."
+msgstr "Inventário lotado. As sobras caíram no chão."
+
+#: number_nodes.lua
+msgid "Stone"
+msgstr "Pedra"
+
+#: property.lua
+msgid "None"
+msgstr "Nenhum"
+
+#: property.lua
+msgid "Sell self property"
+msgstr "Vender propriedade"
+
+#: property.lua
+msgid "No property."
+msgstr "Nenhuma propriedade."
+
+#: property_builder.lua
+msgid "Radius (3 - 12)"
+msgstr "Raio (3 - 12)"
+
+#: property_builder.lua
+msgid "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+msgstr "Altura (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+
+#: property_builder.lua
+msgid "Cost (10 - 9990)"
+msgstr "Custo (10 - 9990)"
+
+#: property_builder.lua
+msgid "Create"
+msgstr "Criar"
+
+#: property_builder.lua
+msgid "Property Builder"
+msgstr "Construtor de Propriedade"
+
+#: property_builder.lua
+msgid "Invalid radius."
+msgstr "Raio inválido."
+
+#: property_builder.lua
+msgid "Invalid height."
+msgstr "Altura inválida"
+
+#: property_builder.lua
+msgid "Invalid cost."
+msgstr "Custo inválido."
+
+#: seller_node.lua
+msgid "Make sure you can pay."
+msgstr "Certifique-se de que pode pagar."
+
+#: seller_node.lua
+msgid "You already own land. Sell it to buy that one."
+msgstr "Você já possui uma propriedade. Venda ela para comprar essa."
+
+#: seller_node.lua
+msgid "Land for sale"
+msgstr "Propriedade a venda"
+
+#: seller_node.lua
+msgid "Height: @1"
+msgstr "Altura: @1"
+
+#: seller_node.lua
+msgid "Width: @1"
+msgstr "Largura: @1"
+
+#: seller_node.lua
+msgid "Total buildable area: @1 blocks"
+msgstr "Total de área construível: @1 blocos"
+
+#: seller_node.lua
+msgid "Cost: @1"
+msgstr "Custo: @1"
+
+#: seller_node.lua
+msgid "Sale price: @1"
+msgstr "Preço de venda: @1"
+
+#: seller_node.lua
+msgid "Buy"
+msgstr "Comprar"
+
+#: seller_node.lua
+msgid "Insufficient payment."
+msgstr "Pagamento insuficiente."
+
+#: seller_node.lua
+msgid "Land purchased."
+msgstr "Propriedade comprada."
+
+#: sfinv_menu.lua teleporter.lua
+msgid "Choose a city"
+msgstr "Escolha uma cidade"
+
+#: sfinv_menu.lua
+msgid "Are you sure?"
+msgstr "Você tem certeza?"
+
+#: sfinv_menu.lua
+msgid "All the land will be destroyed."
+msgstr "Toda propriedade será destruída."
+
+#: sfinv_menu.lua
+msgid "Yes"
+msgstr "Sim"
+
+#: sfinv_menu.lua
+msgid "No"
+msgstr "Não"
+
+#: sfinv_menu.lua
+msgid "Your land has been sold. You received @1."
+msgstr "Sua propriedade for vendida. Você recebeu @1."
+
+#: sfinv_menu.lua
+msgid "My Property"
+msgstr "Propriedade"
+
+#: sfinv_menu.lua
+msgid "You do not have a property."
+msgstr "Você não tem propriedade."
+
+#: sfinv_menu.lua
+msgid "Buy a property in a city."
+msgstr "Compre uma em uma cidade."
+
+#: sfinv_menu.lua
+msgid "No defined"
+msgstr "Não definida"
+
+#: sfinv_menu.lua
+msgid "City: @1"
+msgstr "Cidade: @1"
+
+#: sfinv_menu.lua
+msgid "Price: @1"
+msgstr "Preço: @1"
+
+#: sfinv_menu.lua
+msgid "Resale price: @1"
+msgstr "Preço de revenda: @1"
+
+#: sfinv_menu.lua
+msgid "Sell my property"
+msgstr "Vender propriedade"
+
+#: teleporter.lua
+msgid "Go"
+msgstr "Ir"
+
+#: teleporter.lua
+msgid "Welcome to @1"
+msgstr "Bem vindo a @1"
+
+#: teleporter.lua
+msgid "Teleporter"
+msgstr "Teleportador"
+
+#~ msgid "Seller Icon"
+#~ msgstr "Seller Icon"
+
+#~ msgid "Area Mark"
+#~ msgstr "Marcar area"
diff --git a/locale/pt_BR.po b/locale/pt_BR.po
new file mode 100644
index 0000000..408fbe8
--- /dev/null
+++ b/locale/pt_BR.po
@@ -0,0 +1,268 @@
+# 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: 2020-04-04 20:31-0300\n"
+"PO-Revision-Date: 2020-04-04 20:43-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: pt\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"
+
+#: city.lua
+msgid "City ID"
+msgstr "ID da cidade"
+
+#: city.lua
+msgid "Create an active city"
+msgstr "Criar uma cidade ativa"
+
+#: city.lua
+msgid "Invalid City ID"
+msgstr "ID de cidade inválido"
+
+#: city.lua
+msgid "@1 created."
+msgstr "Cidade @1 criada."
+
+#: city_builder.lua
+msgid "Export failed."
+msgstr "A exportação falhou."
+
+#: city_builder.lua
+msgid ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+msgstr ""
+"A estrutura esquemática foi exportado com sucesso. Reinicie o mundo para "
+"importar-lo. Arquivo '@1' está no diretório do mundo (na pasta 'cities in "
+"work')."
+
+#: city_builder.lua
+msgid "Import failed."
+msgstr "A importação falhou."
+
+#: city_builder.lua
+msgid "Schematic successfully imported."
+msgstr "A estrutura esquemática foi importada."
+
+#: city_builder.lua
+msgid "City ID (eg. wood_ville)"
+msgstr "ID da cidade (exemplo: vila_da_madeira)"
+
+#: city_builder.lua
+msgid "Radius"
+msgstr "Raio"
+
+#: city_builder.lua
+msgid "Height"
+msgstr "Altura"
+
+#: city_builder.lua
+msgid "Depth"
+msgstr "Profundidade"
+
+#: city_builder.lua
+msgid "This node is the reference for central position."
+msgstr "Esse bloco é a referencia para a posição central."
+
+#: city_builder.lua
+msgid "Spawn position for this city is 6 blocks above this block."
+msgstr "Posição de spawn para a cidade será 6 blocos acima desse bloco."
+
+#: city_builder.lua
+msgid "Export"
+msgstr "Exportar"
+
+#: city_builder.lua
+msgid "Import"
+msgstr "Importar"
+
+#: city_builder.lua
+msgid "Mark"
+msgstr "Marcar"
+
+#: city_builder.lua
+msgid "City Builder"
+msgstr "Construtor de Cidade"
+
+#: exchange.lua
+msgid "You can not pay that."
+msgstr "Você não consegue pagar isso."
+
+#: exchange.lua
+msgid "Crowded inventory. Leftovers were dropped."
+msgstr "Inventário lotado. As sobras caíram no chão."
+
+#: number_nodes.lua
+msgid "Stone"
+msgstr "Pedra"
+
+#: property.lua
+msgid "None"
+msgstr "Nenhum"
+
+#: property.lua sfinv_menu.lua
+msgid "Sell property"
+msgstr "Vender propriedade"
+
+#: property.lua
+msgid "No property."
+msgstr "Nenhuma propriedade."
+
+#: property_builder.lua
+msgid "Radius (3 - 12)"
+msgstr "Raio (3 - 12)"
+
+#: property_builder.lua
+msgid "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+msgstr "Altura (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+
+#: property_builder.lua
+msgid "Cost (10 - 9990)"
+msgstr "Custo (10 - 9990)"
+
+#: property_builder.lua
+msgid "Create"
+msgstr "Criar"
+
+#: property_builder.lua
+msgid "Property Builder"
+msgstr "Construtor de Propriedade"
+
+#: property_builder.lua
+msgid "Invalid radius."
+msgstr "Raio inválido."
+
+#: property_builder.lua
+msgid "Invalid height."
+msgstr "Altura inválida."
+
+#: property_builder.lua
+msgid "Invalid cost."
+msgstr "Custo inválido."
+
+#: seller_node.lua
+msgid "Make sure you can pay."
+msgstr "Certifique-se de que pode pagar."
+
+#: seller_node.lua
+msgid "You already own land. Sell it to buy that one."
+msgstr "Já tens uma propriedade. Venda ela antes."
+
+#: seller_node.lua
+msgid "Land for sale"
+msgstr "Propriedade a venda"
+
+#: seller_node.lua
+msgid "Height: @1"
+msgstr "Altura: @1"
+
+#: seller_node.lua
+msgid "Width: @1"
+msgstr "Largura: @1"
+
+#: seller_node.lua
+msgid "Total buildable area: @1 blocks"
+msgstr "Total de área construível: @1 blocos"
+
+#: seller_node.lua
+msgid "Cost: @1"
+msgstr "Custo: @1"
+
+#: seller_node.lua
+msgid "Sale price: @1"
+msgstr "Preço de venda: @1"
+
+#: seller_node.lua
+msgid "Buy"
+msgstr "Comprar"
+
+#: seller_node.lua
+msgid "Insufficient payment."
+msgstr "Pagamento insuficiente."
+
+#: seller_node.lua
+msgid "Land purchased."
+msgstr "Propriedade comprada."
+
+#: sfinv_menu.lua teleporter.lua
+msgid "Choose a city"
+msgstr "Escolha uma cidade"
+
+#: sfinv_menu.lua
+msgid "Are you sure?"
+msgstr "Você tem certeza?"
+
+#: sfinv_menu.lua
+msgid "All the land will be destroyed."
+msgstr "Toda propriedade será destruída."
+
+#: sfinv_menu.lua
+msgid "Yes"
+msgstr "Sim"
+
+#: sfinv_menu.lua
+msgid "No"
+msgstr "Não"
+
+#: sfinv_menu.lua
+msgid "Your land has been sold. You received @1."
+msgstr "Sua propriedade for vendida. Você recebeu @1."
+
+#: sfinv_menu.lua
+msgid "My Property"
+msgstr "Propriedade"
+
+#: sfinv_menu.lua
+msgid "You do not have a property."
+msgstr "Você não tem propriedade."
+
+#: sfinv_menu.lua
+msgid "Buy a property in a city."
+msgstr "Compre uma em uma cidade."
+
+#: sfinv_menu.lua
+msgid "No defined"
+msgstr "Não definida"
+
+#: sfinv_menu.lua
+msgid "City: @1"
+msgstr "Cidade: @1"
+
+#: sfinv_menu.lua
+msgid "Price: @1"
+msgstr "Preço: @1"
+
+#: sfinv_menu.lua
+msgid "Resale price: @1"
+msgstr "Preço de revenda: @1"
+
+#: teleporter.lua
+msgid "Go"
+msgstr "Ir"
+
+#: teleporter.lua
+msgid "Welcome to @1"
+msgstr "Bem vindo a @1"
+
+#: teleporter.lua
+msgid "Teleporter"
+msgstr "Teleportador"
+
+#~ msgid "Sell self property"
+#~ msgstr "Vender propriedade"
+
+#~ msgid "Seller Icon"
+#~ msgstr "Seller Icon"
+
+#~ msgid "Area Mark"
+#~ msgstr "Marcar area"
diff --git a/locale/pt_BR.po~ b/locale/pt_BR.po~
new file mode 100644
index 0000000..9252b54
--- /dev/null
+++ b/locale/pt_BR.po~
@@ -0,0 +1,269 @@
+# 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: 2020-04-04 20:26-0300\n"
+"PO-Revision-Date: 2020-04-04 20:23-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: pt\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"
+
+#: city.lua
+msgid "City ID"
+msgstr "ID da cidade"
+
+#: city.lua
+msgid "Create an active city"
+msgstr "Criar uma cidade ativa"
+
+#: city.lua
+msgid "Invalid City ID"
+msgstr "ID de cidade inválido"
+
+#: city.lua
+msgid "@1 created."
+msgstr "Cidade @1 criada."
+
+#: city_builder.lua
+msgid "Export failed."
+msgstr "A exportação falhou."
+
+#: city_builder.lua
+msgid ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+msgstr ""
+"A estrutura esquemática foi exportado com sucesso. Reinicie o mundo para "
+"importar-lo. Arquivo '@1' está no diretório do mundo (na pasta 'cities in "
+"work')."
+
+#: city_builder.lua
+msgid "Import failed."
+msgstr "A importação falhou."
+
+#: city_builder.lua
+msgid "Schematic successfully imported."
+msgstr "A estrutura esquemática foi importada."
+
+#: city_builder.lua
+msgid "City ID (eg. wood_ville)"
+msgstr "ID da cidade (exemplo: vila_da_madeira)"
+
+#: city_builder.lua
+msgid "Radius"
+msgstr "Raio"
+
+#: city_builder.lua
+msgid "Height"
+msgstr "Altura"
+
+#: city_builder.lua
+msgid "Depth"
+msgstr "Profundidade"
+
+#: city_builder.lua
+msgid "This node is the reference for central position."
+msgstr "Esse bloco é a referencia para a posição central."
+
+#: city_builder.lua
+msgid "Spawn position for this city is 6 blocks above this block."
+msgstr "Posição de spawn para a cidade será 6 blocos acima desse bloco."
+
+#: city_builder.lua
+msgid "Export"
+msgstr "Exportar"
+
+#: city_builder.lua
+msgid "Import"
+msgstr "Importar"
+
+#: city_builder.lua
+msgid "Mark"
+msgstr "Marcar"
+
+#: city_builder.lua
+msgid "City Builder"
+msgstr "Construtor de Cidade"
+
+#: exchange.lua
+msgid "You can not pay that."
+msgstr "Você não consegue pagar isso."
+
+#: exchange.lua
+msgid "Crowded inventory. Leftovers were dropped."
+msgstr "Inventário lotado. As sobras caíram no chão."
+
+#: number_nodes.lua
+msgid "Stone"
+msgstr "Pedra"
+
+#: property.lua
+msgid "None"
+msgstr "Nenhum"
+
+#: property.lua
+msgid "Sell self property"
+msgstr "Vender a própria propriedade"
+
+#: property.lua
+msgid "No property."
+msgstr "Nenhuma propriedade."
+
+#: property_builder.lua
+msgid "Radius (3 - 12)"
+msgstr "Raio (3 - 12)"
+
+#: property_builder.lua
+msgid "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+msgstr "Altura (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+
+#: property_builder.lua
+msgid "Cost (10 - 9990)"
+msgstr "Custo (10 - 9990)"
+
+#: property_builder.lua
+msgid "Create"
+msgstr "Criar"
+
+#: property_builder.lua
+msgid "Property Builder"
+msgstr "Construtor de Propriedade"
+
+#: property_builder.lua
+msgid "Invalid radius."
+msgstr "Raio inválido."
+
+#: property_builder.lua
+msgid "Invalid height."
+msgstr "Altura inválida"
+
+#: property_builder.lua
+msgid "Invalid cost."
+msgstr "Custo inválido."
+
+#: seller_node.lua
+msgid "Make sure you can pay."
+msgstr "Certifique-se de que pode pagar."
+
+#: seller_node.lua
+msgid "You already own land. Sell it to buy that one."
+msgstr "Você já possui uma propriedade. Venda ela para comprar essa."
+
+#: seller_node.lua
+msgid "Land for sale"
+msgstr "Propriedade a venda"
+
+#: seller_node.lua
+msgid "Height: @1"
+msgstr "Altura: @1"
+
+#: seller_node.lua
+msgid "Width: @1"
+msgstr "Largura: @1"
+
+#: seller_node.lua
+msgid "Total buildable area: @1 blocks"
+msgstr "Total de área construível: @1 blocos"
+
+#: seller_node.lua
+msgid "Cost: @1"
+msgstr "Custo: @1"
+
+#: seller_node.lua
+msgid "Sale price: @1"
+msgstr "Preço de venda: @1"
+
+#: seller_node.lua
+msgid "Buy"
+msgstr "Comprar"
+
+#: seller_node.lua
+msgid "Insufficient payment."
+msgstr "Pagamento insuficiente."
+
+#: seller_node.lua
+msgid "Land purchased."
+msgstr "Propriedade comprada."
+
+#: sfinv_menu.lua teleporter.lua
+msgid "Choose a city"
+msgstr "Escolha uma cidade"
+
+#: sfinv_menu.lua
+msgid "Are you sure?"
+msgstr "Você tem certeza?"
+
+#: sfinv_menu.lua
+msgid "All the land will be destroyed."
+msgstr "Toda propriedade será destruída."
+
+#: sfinv_menu.lua
+msgid "Yes"
+msgstr "Sim"
+
+#: sfinv_menu.lua
+msgid "No"
+msgstr "Não"
+
+#: sfinv_menu.lua
+msgid "Your land has been sold. You received @1."
+msgstr "Sua propriedade for vendida. Você recebeu @1."
+
+#: sfinv_menu.lua
+msgid "My Property"
+msgstr "Propriedade"
+
+#: sfinv_menu.lua
+msgid "You do not have a property."
+msgstr "Você não tem propriedade."
+
+#: sfinv_menu.lua
+msgid "Buy a property in a city."
+msgstr "Compre uma em uma cidade."
+
+#: sfinv_menu.lua
+msgid "No defined"
+msgstr "Não definida"
+
+#: sfinv_menu.lua
+msgid "City: @1"
+msgstr "Cidade: @1"
+
+#: sfinv_menu.lua
+msgid "Price: @1"
+msgstr "Preço: @1"
+
+#: sfinv_menu.lua
+msgid "Resale price: @1"
+msgstr "Preço de revenda: @1"
+
+#: sfinv_menu.lua
+msgid "Sell my property"
+msgstr "Vender propriedade"
+
+#: teleporter.lua
+msgid "Go"
+msgstr "Ir"
+
+#: teleporter.lua
+msgid "Welcome to @1"
+msgstr "Bem vindo a @1"
+
+#: teleporter.lua
+msgid "Teleporter"
+msgstr "Teleportador"
+
+#~ msgid "Seller Icon"
+#~ msgstr "Seller Icon"
+
+#~ msgid "Area Mark"
+#~ msgstr "Marcar area"
diff --git a/locale/pt_PT.po b/locale/pt_PT.po
new file mode 100644
index 0000000..408fbe8
--- /dev/null
+++ b/locale/pt_PT.po
@@ -0,0 +1,268 @@
+# 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: 2020-04-04 20:31-0300\n"
+"PO-Revision-Date: 2020-04-04 20:43-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: pt\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"
+
+#: city.lua
+msgid "City ID"
+msgstr "ID da cidade"
+
+#: city.lua
+msgid "Create an active city"
+msgstr "Criar uma cidade ativa"
+
+#: city.lua
+msgid "Invalid City ID"
+msgstr "ID de cidade inválido"
+
+#: city.lua
+msgid "@1 created."
+msgstr "Cidade @1 criada."
+
+#: city_builder.lua
+msgid "Export failed."
+msgstr "A exportação falhou."
+
+#: city_builder.lua
+msgid ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+msgstr ""
+"A estrutura esquemática foi exportado com sucesso. Reinicie o mundo para "
+"importar-lo. Arquivo '@1' está no diretório do mundo (na pasta 'cities in "
+"work')."
+
+#: city_builder.lua
+msgid "Import failed."
+msgstr "A importação falhou."
+
+#: city_builder.lua
+msgid "Schematic successfully imported."
+msgstr "A estrutura esquemática foi importada."
+
+#: city_builder.lua
+msgid "City ID (eg. wood_ville)"
+msgstr "ID da cidade (exemplo: vila_da_madeira)"
+
+#: city_builder.lua
+msgid "Radius"
+msgstr "Raio"
+
+#: city_builder.lua
+msgid "Height"
+msgstr "Altura"
+
+#: city_builder.lua
+msgid "Depth"
+msgstr "Profundidade"
+
+#: city_builder.lua
+msgid "This node is the reference for central position."
+msgstr "Esse bloco é a referencia para a posição central."
+
+#: city_builder.lua
+msgid "Spawn position for this city is 6 blocks above this block."
+msgstr "Posição de spawn para a cidade será 6 blocos acima desse bloco."
+
+#: city_builder.lua
+msgid "Export"
+msgstr "Exportar"
+
+#: city_builder.lua
+msgid "Import"
+msgstr "Importar"
+
+#: city_builder.lua
+msgid "Mark"
+msgstr "Marcar"
+
+#: city_builder.lua
+msgid "City Builder"
+msgstr "Construtor de Cidade"
+
+#: exchange.lua
+msgid "You can not pay that."
+msgstr "Você não consegue pagar isso."
+
+#: exchange.lua
+msgid "Crowded inventory. Leftovers were dropped."
+msgstr "Inventário lotado. As sobras caíram no chão."
+
+#: number_nodes.lua
+msgid "Stone"
+msgstr "Pedra"
+
+#: property.lua
+msgid "None"
+msgstr "Nenhum"
+
+#: property.lua sfinv_menu.lua
+msgid "Sell property"
+msgstr "Vender propriedade"
+
+#: property.lua
+msgid "No property."
+msgstr "Nenhuma propriedade."
+
+#: property_builder.lua
+msgid "Radius (3 - 12)"
+msgstr "Raio (3 - 12)"
+
+#: property_builder.lua
+msgid "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+msgstr "Altura (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+
+#: property_builder.lua
+msgid "Cost (10 - 9990)"
+msgstr "Custo (10 - 9990)"
+
+#: property_builder.lua
+msgid "Create"
+msgstr "Criar"
+
+#: property_builder.lua
+msgid "Property Builder"
+msgstr "Construtor de Propriedade"
+
+#: property_builder.lua
+msgid "Invalid radius."
+msgstr "Raio inválido."
+
+#: property_builder.lua
+msgid "Invalid height."
+msgstr "Altura inválida."
+
+#: property_builder.lua
+msgid "Invalid cost."
+msgstr "Custo inválido."
+
+#: seller_node.lua
+msgid "Make sure you can pay."
+msgstr "Certifique-se de que pode pagar."
+
+#: seller_node.lua
+msgid "You already own land. Sell it to buy that one."
+msgstr "Já tens uma propriedade. Venda ela antes."
+
+#: seller_node.lua
+msgid "Land for sale"
+msgstr "Propriedade a venda"
+
+#: seller_node.lua
+msgid "Height: @1"
+msgstr "Altura: @1"
+
+#: seller_node.lua
+msgid "Width: @1"
+msgstr "Largura: @1"
+
+#: seller_node.lua
+msgid "Total buildable area: @1 blocks"
+msgstr "Total de área construível: @1 blocos"
+
+#: seller_node.lua
+msgid "Cost: @1"
+msgstr "Custo: @1"
+
+#: seller_node.lua
+msgid "Sale price: @1"
+msgstr "Preço de venda: @1"
+
+#: seller_node.lua
+msgid "Buy"
+msgstr "Comprar"
+
+#: seller_node.lua
+msgid "Insufficient payment."
+msgstr "Pagamento insuficiente."
+
+#: seller_node.lua
+msgid "Land purchased."
+msgstr "Propriedade comprada."
+
+#: sfinv_menu.lua teleporter.lua
+msgid "Choose a city"
+msgstr "Escolha uma cidade"
+
+#: sfinv_menu.lua
+msgid "Are you sure?"
+msgstr "Você tem certeza?"
+
+#: sfinv_menu.lua
+msgid "All the land will be destroyed."
+msgstr "Toda propriedade será destruída."
+
+#: sfinv_menu.lua
+msgid "Yes"
+msgstr "Sim"
+
+#: sfinv_menu.lua
+msgid "No"
+msgstr "Não"
+
+#: sfinv_menu.lua
+msgid "Your land has been sold. You received @1."
+msgstr "Sua propriedade for vendida. Você recebeu @1."
+
+#: sfinv_menu.lua
+msgid "My Property"
+msgstr "Propriedade"
+
+#: sfinv_menu.lua
+msgid "You do not have a property."
+msgstr "Você não tem propriedade."
+
+#: sfinv_menu.lua
+msgid "Buy a property in a city."
+msgstr "Compre uma em uma cidade."
+
+#: sfinv_menu.lua
+msgid "No defined"
+msgstr "Não definida"
+
+#: sfinv_menu.lua
+msgid "City: @1"
+msgstr "Cidade: @1"
+
+#: sfinv_menu.lua
+msgid "Price: @1"
+msgstr "Preço: @1"
+
+#: sfinv_menu.lua
+msgid "Resale price: @1"
+msgstr "Preço de revenda: @1"
+
+#: teleporter.lua
+msgid "Go"
+msgstr "Ir"
+
+#: teleporter.lua
+msgid "Welcome to @1"
+msgstr "Bem vindo a @1"
+
+#: teleporter.lua
+msgid "Teleporter"
+msgstr "Teleportador"
+
+#~ msgid "Sell self property"
+#~ msgstr "Vender propriedade"
+
+#~ msgid "Seller Icon"
+#~ msgstr "Seller Icon"
+
+#~ msgid "Area Mark"
+#~ msgstr "Marcar area"
diff --git a/locale/pt_PT.po~ b/locale/pt_PT.po~
new file mode 100644
index 0000000..9252b54
--- /dev/null
+++ b/locale/pt_PT.po~
@@ -0,0 +1,269 @@
+# 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: 2020-04-04 20:26-0300\n"
+"PO-Revision-Date: 2020-04-04 20:23-0300\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: pt\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"
+
+#: city.lua
+msgid "City ID"
+msgstr "ID da cidade"
+
+#: city.lua
+msgid "Create an active city"
+msgstr "Criar uma cidade ativa"
+
+#: city.lua
+msgid "Invalid City ID"
+msgstr "ID de cidade inválido"
+
+#: city.lua
+msgid "@1 created."
+msgstr "Cidade @1 criada."
+
+#: city_builder.lua
+msgid "Export failed."
+msgstr "A exportação falhou."
+
+#: city_builder.lua
+msgid ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+msgstr ""
+"A estrutura esquemática foi exportado com sucesso. Reinicie o mundo para "
+"importar-lo. Arquivo '@1' está no diretório do mundo (na pasta 'cities in "
+"work')."
+
+#: city_builder.lua
+msgid "Import failed."
+msgstr "A importação falhou."
+
+#: city_builder.lua
+msgid "Schematic successfully imported."
+msgstr "A estrutura esquemática foi importada."
+
+#: city_builder.lua
+msgid "City ID (eg. wood_ville)"
+msgstr "ID da cidade (exemplo: vila_da_madeira)"
+
+#: city_builder.lua
+msgid "Radius"
+msgstr "Raio"
+
+#: city_builder.lua
+msgid "Height"
+msgstr "Altura"
+
+#: city_builder.lua
+msgid "Depth"
+msgstr "Profundidade"
+
+#: city_builder.lua
+msgid "This node is the reference for central position."
+msgstr "Esse bloco é a referencia para a posição central."
+
+#: city_builder.lua
+msgid "Spawn position for this city is 6 blocks above this block."
+msgstr "Posição de spawn para a cidade será 6 blocos acima desse bloco."
+
+#: city_builder.lua
+msgid "Export"
+msgstr "Exportar"
+
+#: city_builder.lua
+msgid "Import"
+msgstr "Importar"
+
+#: city_builder.lua
+msgid "Mark"
+msgstr "Marcar"
+
+#: city_builder.lua
+msgid "City Builder"
+msgstr "Construtor de Cidade"
+
+#: exchange.lua
+msgid "You can not pay that."
+msgstr "Você não consegue pagar isso."
+
+#: exchange.lua
+msgid "Crowded inventory. Leftovers were dropped."
+msgstr "Inventário lotado. As sobras caíram no chão."
+
+#: number_nodes.lua
+msgid "Stone"
+msgstr "Pedra"
+
+#: property.lua
+msgid "None"
+msgstr "Nenhum"
+
+#: property.lua
+msgid "Sell self property"
+msgstr "Vender a própria propriedade"
+
+#: property.lua
+msgid "No property."
+msgstr "Nenhuma propriedade."
+
+#: property_builder.lua
+msgid "Radius (3 - 12)"
+msgstr "Raio (3 - 12)"
+
+#: property_builder.lua
+msgid "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+msgstr "Altura (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+
+#: property_builder.lua
+msgid "Cost (10 - 9990)"
+msgstr "Custo (10 - 9990)"
+
+#: property_builder.lua
+msgid "Create"
+msgstr "Criar"
+
+#: property_builder.lua
+msgid "Property Builder"
+msgstr "Construtor de Propriedade"
+
+#: property_builder.lua
+msgid "Invalid radius."
+msgstr "Raio inválido."
+
+#: property_builder.lua
+msgid "Invalid height."
+msgstr "Altura inválida"
+
+#: property_builder.lua
+msgid "Invalid cost."
+msgstr "Custo inválido."
+
+#: seller_node.lua
+msgid "Make sure you can pay."
+msgstr "Certifique-se de que pode pagar."
+
+#: seller_node.lua
+msgid "You already own land. Sell it to buy that one."
+msgstr "Você já possui uma propriedade. Venda ela para comprar essa."
+
+#: seller_node.lua
+msgid "Land for sale"
+msgstr "Propriedade a venda"
+
+#: seller_node.lua
+msgid "Height: @1"
+msgstr "Altura: @1"
+
+#: seller_node.lua
+msgid "Width: @1"
+msgstr "Largura: @1"
+
+#: seller_node.lua
+msgid "Total buildable area: @1 blocks"
+msgstr "Total de área construível: @1 blocos"
+
+#: seller_node.lua
+msgid "Cost: @1"
+msgstr "Custo: @1"
+
+#: seller_node.lua
+msgid "Sale price: @1"
+msgstr "Preço de venda: @1"
+
+#: seller_node.lua
+msgid "Buy"
+msgstr "Comprar"
+
+#: seller_node.lua
+msgid "Insufficient payment."
+msgstr "Pagamento insuficiente."
+
+#: seller_node.lua
+msgid "Land purchased."
+msgstr "Propriedade comprada."
+
+#: sfinv_menu.lua teleporter.lua
+msgid "Choose a city"
+msgstr "Escolha uma cidade"
+
+#: sfinv_menu.lua
+msgid "Are you sure?"
+msgstr "Você tem certeza?"
+
+#: sfinv_menu.lua
+msgid "All the land will be destroyed."
+msgstr "Toda propriedade será destruída."
+
+#: sfinv_menu.lua
+msgid "Yes"
+msgstr "Sim"
+
+#: sfinv_menu.lua
+msgid "No"
+msgstr "Não"
+
+#: sfinv_menu.lua
+msgid "Your land has been sold. You received @1."
+msgstr "Sua propriedade for vendida. Você recebeu @1."
+
+#: sfinv_menu.lua
+msgid "My Property"
+msgstr "Propriedade"
+
+#: sfinv_menu.lua
+msgid "You do not have a property."
+msgstr "Você não tem propriedade."
+
+#: sfinv_menu.lua
+msgid "Buy a property in a city."
+msgstr "Compre uma em uma cidade."
+
+#: sfinv_menu.lua
+msgid "No defined"
+msgstr "Não definida"
+
+#: sfinv_menu.lua
+msgid "City: @1"
+msgstr "Cidade: @1"
+
+#: sfinv_menu.lua
+msgid "Price: @1"
+msgstr "Preço: @1"
+
+#: sfinv_menu.lua
+msgid "Resale price: @1"
+msgstr "Preço de revenda: @1"
+
+#: sfinv_menu.lua
+msgid "Sell my property"
+msgstr "Vender propriedade"
+
+#: teleporter.lua
+msgid "Go"
+msgstr "Ir"
+
+#: teleporter.lua
+msgid "Welcome to @1"
+msgstr "Bem vindo a @1"
+
+#: teleporter.lua
+msgid "Teleporter"
+msgstr "Teleportador"
+
+#~ msgid "Seller Icon"
+#~ msgstr "Seller Icon"
+
+#~ msgid "Area Mark"
+#~ msgstr "Marcar area"
diff --git a/locale/template.pot b/locale/template.pot
new file mode 100644
index 0000000..4852657
--- /dev/null
+++ b/locale/template.pot
@@ -0,0 +1,256 @@
+# 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: 2020-04-04 20:36-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=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: city.lua
+msgid "City ID"
+msgstr ""
+
+#: city.lua
+msgid "Create an active city"
+msgstr ""
+
+#: city.lua
+msgid "Invalid City ID"
+msgstr ""
+
+#: city.lua
+msgid "@1 created."
+msgstr ""
+
+#: city_builder.lua
+msgid "Export failed."
+msgstr ""
+
+#: city_builder.lua
+msgid ""
+"Schematic successfully exported. Restart the world to import it. '@1' file "
+"is in the world directory ('cities in work' folder)."
+msgstr ""
+
+#: city_builder.lua
+msgid "Import failed."
+msgstr ""
+
+#: city_builder.lua
+msgid "Schematic successfully imported."
+msgstr ""
+
+#: city_builder.lua
+msgid "City ID (eg. wood_ville)"
+msgstr ""
+
+#: city_builder.lua
+msgid "Radius"
+msgstr ""
+
+#: city_builder.lua
+msgid "Height"
+msgstr ""
+
+#: city_builder.lua
+msgid "Depth"
+msgstr ""
+
+#: city_builder.lua
+msgid "This node is the reference for central position."
+msgstr ""
+
+#: city_builder.lua
+msgid "Spawn position for this city is 6 blocks above this block."
+msgstr ""
+
+#: city_builder.lua
+msgid "Export"
+msgstr ""
+
+#: city_builder.lua
+msgid "Import"
+msgstr ""
+
+#: city_builder.lua
+msgid "Mark"
+msgstr ""
+
+#: city_builder.lua
+msgid "City Builder"
+msgstr ""
+
+#: exchange.lua
+msgid "You can not pay that."
+msgstr ""
+
+#: exchange.lua
+msgid "Crowded inventory. Leftovers were dropped."
+msgstr ""
+
+#: number_nodes.lua
+msgid "Stone"
+msgstr ""
+
+#: property.lua
+msgid "None"
+msgstr ""
+
+#: property.lua sfinv_menu.lua
+msgid "Sell property"
+msgstr ""
+
+#: property.lua
+msgid "No property."
+msgstr ""
+
+#: property_builder.lua
+msgid "Radius (3 - 12)"
+msgstr ""
+
+#: property_builder.lua
+msgid "Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)"
+msgstr ""
+
+#: property_builder.lua
+msgid "Cost (10 - 9990)"
+msgstr ""
+
+#: property_builder.lua
+msgid "Create"
+msgstr ""
+
+#: property_builder.lua
+msgid "Property Builder"
+msgstr ""
+
+#: property_builder.lua
+msgid "Invalid radius."
+msgstr ""
+
+#: property_builder.lua
+msgid "Invalid height."
+msgstr ""
+
+#: property_builder.lua
+msgid "Invalid cost."
+msgstr ""
+
+#: seller_node.lua
+msgid "Make sure you can pay."
+msgstr ""
+
+#: seller_node.lua
+msgid "You already own land. Sell it to buy that one."
+msgstr ""
+
+#: seller_node.lua
+msgid "Land for sale"
+msgstr ""
+
+#: seller_node.lua
+msgid "Height: @1"
+msgstr ""
+
+#: seller_node.lua
+msgid "Width: @1"
+msgstr ""
+
+#: seller_node.lua
+msgid "Total buildable area: @1 blocks"
+msgstr ""
+
+#: seller_node.lua
+msgid "Cost: @1"
+msgstr ""
+
+#: seller_node.lua
+msgid "Sale price: @1"
+msgstr ""
+
+#: seller_node.lua
+msgid "Buy"
+msgstr ""
+
+#: seller_node.lua
+msgid "Insufficient payment."
+msgstr ""
+
+#: seller_node.lua
+msgid "Land purchased."
+msgstr ""
+
+#: sfinv_menu.lua teleporter.lua
+msgid "Choose a city"
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "Are you sure?"
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "All the land will be destroyed."
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "Yes"
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "No"
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "Your land has been sold. You received @1."
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "My Property"
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "You do not have a property."
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "Buy a property in a city."
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "No defined"
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "City: @1"
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "Price: @1"
+msgstr ""
+
+#: sfinv_menu.lua
+msgid "Resale price: @1"
+msgstr ""
+
+#: teleporter.lua
+msgid "Go"
+msgstr ""
+
+#: teleporter.lua
+msgid "Welcome to @1"
+msgstr ""
+
+#: teleporter.lua
+msgid "Teleporter"
+msgstr ""
diff --git a/locale/translate files b/locale/translate files
new file mode 100644
index 0000000..e13749c
--- /dev/null
+++ b/locale/translate files
@@ -0,0 +1 @@
+city.lua city_builder.lua exchange.lua init.lua land.lua node_fix.lua number_nodes.lua property.lua property_builder.lua property_stone.lua protected_area.lua seller_node.lua sfinv_menu.lua teleporter.lua time_count.lua voxelmanip.lua
diff --git a/number_nodes.lua b/number_nodes.lua
index a58669e..8d3a428 100644
--- a/number_nodes.lua
+++ b/number_nodes.lua
@@ -8,17 +8,20 @@
-- Number nodes
]]
+local S = cidades.S
+
cidades.number_node = {}
for i=0, 9 do
cidades.number_node["cidades:stone_"..i] = i
minetest.register_node("cidades:stone_"..i, {
- description = "Stone",
+ description = S("Stone"),
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_stone.png"},
is_ground_content = false,
- groups = {cracky = 3},
+ drop = "default:stone",
+ groups = {cracky = 3, not_in_creative_inventory = 1},
sounds = default.node_sound_stone_defaults(),
})
end
diff --git a/property.lua b/property.lua
index 4d68720..3baee8a 100644
--- a/property.lua
+++ b/property.lua
@@ -8,6 +8,7 @@
Property
]]
+local S = cidades.S
cidades.property = {}
@@ -108,6 +109,12 @@ cidades.property.get_data_pos = function(pos, data_type, def)
end
+-- Get resale price
+cidades.get_sale_price = function(cost)
+ return cost * cidades.resale_factor
+end
+
+
-- Get property data
cidades.property.get_data = function(pos)
local height = cidades.property.height[tostring(cidades.number_node[minetest.get_node(cidades.property.get_data_pos(pos, "height")).name])]
@@ -195,12 +202,12 @@ cidades.reset_property = function(pos, data)
end
-minetest.register_chatcommand("reset_property", {
- params = "None",
- description = "Reset self property",
+minetest.register_chatcommand("sell_property", {
+ params = S("None"),
+ description = S("Sell property"),
func = function(name, param)
if cidades.db.check_property(name) == false then
- return false, "No property"
+ return false, S("No property.")
end
-- Remove registry
diff --git a/property_builder.lua b/property_builder.lua
index 58124f5..83c907b 100644
--- a/property_builder.lua
+++ b/property_builder.lua
@@ -8,7 +8,7 @@
Property Builder
]]
-
+local S = cidades.S
-- Create property
local create_property = function(pos)
@@ -54,16 +54,16 @@ local update_formspec = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", "size[8,8]"
- .."field[1,3;6.5,1;radius;Radius (3 - 12);"..meta:get_float("radius").."]"
- .."field[1,4.5;6.5,1;height;Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25);"..meta:get_float("height").."]"
- .."field[1,6;6.5,1;cost;Cost (10 - 9990);"..meta:get_float("cost").."]"
- .."button_exit[1,7;6,1;create;Create]")
+ .."field[1,3;6.5,1;radius;"..S("Radius (3 - 12)")..";"..meta:get_float("radius").."]"
+ .."field[1,4.5;6.5,1;height;"..S("Height (3, 5, 8, 10, 12, 14, 16, 18, 20 or 25)")..";"..meta:get_float("height").."]"
+ .."field[1,6;6.5,1;cost;"..S("Cost (10 - 9990)")..";"..meta:get_float("cost").."]"
+ .."button_exit[1,7;6,1;create;"..S("Create").."]")
end
-- Property Builder node
minetest.register_node("cidades:property_builder", {
- description = "Property Builder",
+ description = S("Property Builder"),
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"cidades_property_builder.png"},
@@ -72,7 +72,7 @@ minetest.register_node("cidades:property_builder", {
on_construct = function(pos)
local meta = minetest.get_meta(pos)
- meta:set_string("infotext", "Property Builder")
+ meta:set_string("infotext", S("Property Builder"))
meta:set_int("radius", 4)
meta:set_int("height", 5)
@@ -95,19 +95,19 @@ minetest.register_node("cidades:property_builder", {
if cidades.property.radius_i[fields.radius] then
meta:set_float("radius", tonumber(fields.radius))
else
- return minetest.chat_send_all("Invalid radius")
+ return minetest.chat_send_all(S("Invalid radius."))
end
if cidades.property.height_i[fields.height] then
meta:set_float("height", tonumber(fields.height))
else
- return minetest.chat_send_all("Invalid height")
+ return minetest.chat_send_all(S("Invalid height."))
end
if tonumber(fields.cost) <= 9990 and tonumber(fields.cost) >= 10 then
meta:set_float("cost", tonumber(fields.cost))
else
- return minetest.chat_send_all("Invalid cost")
+ return minetest.chat_send_all(S("Invalid cost."))
end
update_formspec(pos)
diff --git a/property_stone.lua b/property_stone.lua
index 01b64f4..ecdc45c 100644
--- a/property_stone.lua
+++ b/property_stone.lua
@@ -16,7 +16,8 @@ minetest.register_node("cidades:property_stone_for_sale", {
place_param2 = 0,
tiles = {"default_stone.png"},
is_ground_content = false,
- groups = {choppy = 2, oddly_breakable_by_hand = 2, stone = 1},
+ drop = "default:stone",
+ groups = {choppy = 2, oddly_breakable_by_hand = 2, stone = 1, not_in_creative_inventory = 1},
sounds = default.node_sound_stone_defaults(),
})
@@ -32,7 +33,8 @@ minetest.register_node("cidades:property_stone_purchased", {
place_param2 = 0,
tiles = {"default_stone.png"},
is_ground_content = false,
- groups = {choppy = 2, oddly_breakable_by_hand = 2, stone = 1},
+ drop = "default:stone",
+ groups = {choppy = 2, oddly_breakable_by_hand = 2, stone = 1, not_in_creative_inventory = 1},
sounds = default.node_sound_stone_defaults(),
})
@@ -45,6 +47,7 @@ cidades.check_property_stone = function(pos)
-- Check data base registry
if cidades.db.check_property(data.owner) == false then
cidades.reset_property(pos, data)
+ return
end
-- Check las login
diff --git a/protected_area.lua b/protected_area.lua
index cb3b4f6..5af2318 100644
--- a/protected_area.lua
+++ b/protected_area.lua
@@ -8,6 +8,7 @@
Protected area
]]
+local S = cidades.S
-- Protect area
cidades.protect_area = function(ownername, areaname, pos1, pos2)
diff --git a/seller_node.lua b/seller_node.lua
index a65acbd..0dff571 100644
--- a/seller_node.lua
+++ b/seller_node.lua
@@ -8,6 +8,10 @@
Seller node
]]
+local S = cidades.S
+
+-- Get value to text
+local to_text = cidades.exchange.get_value_to_text
-- Access
local seller_access = function(player, pos)
@@ -20,20 +24,21 @@ local seller_access = function(player, pos)
local width = (data.radius * 2) + 1
-- Button status
- local text = "Make sure you can pay."
+ local text = S("Make sure you can pay.")
if cidades.db.check_property(name) == true then
- text = minetest.colorize("#ff0707", "You already own land. Sell it to buy that one.")
+ text = minetest.colorize("#ff0707", S("You already own land. Sell it to buy that one."))
end
minetest.show_formspec(name, "cidades:seller",
- "size[5,3]"
- .."label[0,-0.15;Land for sale"
- .."\nHeight: "..data.height
- .."\nWidth: "..width
- .."\nTotal buildable area: "..(width*width*(data.height)).." blocks"
- .."\nCost: "..data.cost
+ "size[5,3.5]"
+ .."label[0,-0.15;"..S("Land for sale")
+ .."\n"..S("Height: @1", data.height)
+ .."\n"..S("Width: @1", width)
+ .."\n"..S("Total buildable area: @1 blocks", (width*width*(data.height)))
+ .."\n"..S("Price: @1", to_text(data.cost))
+ .."\n"..S("Sale price: @1", to_text(cidades.get_sale_price(data.cost)))
.."\n"..text.."]"
- .."button_exit[0,2.35;5,1;buy;Buy]"
+ .."button_exit[0,2.85;5,1;buy;"..S("Buy").."]"
)
end
@@ -48,21 +53,22 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.buy then
-- Check property
if cidades.db.check_property(name) == true then
- return minetest.chat_send_player(name, "You already own land. Sell it to buy that one.")
+ return minetest.chat_send_player(name, S("You already own land. Sell it to buy that one."))
end
-- Check payment
- if player:get_inventory():contains_item("main", cidades.money_item.." "..data.cost) == false then
- return minetest.chat_send_player(name, "You can not pay that.")
+ if cidades.exchange.has_payment(player, data.cost) == false then
+ minetest.chat_send_player(name, S("Insufficient payment."))
+ return
end
-- Get payment
- player:get_inventory():remove_item("main", cidades.money_item.." "..data.cost)
+ cidades.exchange.take(player, data.cost)
minetest.remove_node(pos)
cidades.set_owner(player, {x=pos.x, y=pos.y-3, z=pos.z}, data)
- minetest.chat_send_player(name, "Land purchased.")
+ minetest.chat_send_player(name, S("Land purchased."))
end
end
end)
@@ -119,6 +125,7 @@ minetest.register_node("cidades:seller", {
drawtype = "airlike",
collisionbox = {-0.4,-0.4,-0.4, 0.4,0.4,0.4},
is_ground_content = false,
+ drop = "",
groups = {choppy = 2, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1},
on_construct = function(pos)
diff --git a/sfinv_menu.lua b/sfinv_menu.lua
index a4439b7..5027084 100644
--- a/sfinv_menu.lua
+++ b/sfinv_menu.lua
@@ -3,15 +3,20 @@
Copyright (C) 2020 BrunoMine (https://github.com/BrunoMine)
You should have received a copy of the GNU General Public License
- along with this program. If not, see 5.
+ along with this program. If not, see .
Sfinv_Menu
]]
+local S = cidades.S
+
+-- Get value to text
+local to_text = cidades.exchange.get_value_to_text
+
local formspec_with_land = "size[6,4]"
..default.gui_bg
..default.gui_bg_img
- .."label[0.5,0;Choose a city]"
+ .."label[0.5,0;"..S("Choose a city").."]"
.."textlist[0.5,0.8;4.8,3;city;]"
@@ -35,12 +40,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
minetest.show_formspec(name, "cidades:sell_my_land", "size[5,2.8]"
..default.gui_bg
..default.gui_bg_img
- .."label[0,0;Are you sure? "
- .."\nAll items and blocks that are on "
- .."\nthe land will be removed automatically."
+ .."label[0,0;"..S("Are you sure?")
+ .."\n\n"..S("All the land will be destroyed.")
.."]"
- .."button_exit[0,2;2,1;yes;Yes]"
- .."button_exit[3,2;2,1;no;No]"
+ .."button_exit[0,2;2,1;yes;"..S("Yes").."]"
+ .."button_exit[3,2;2,1;no;"..S("No").."]"
)
end
@@ -52,9 +56,16 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.yes then
if cidades.db.check_property(name) == true then
+
+ local data = cidades.db.get_property(name)
+
+ -- Give resale
+ cidades.exchange.give(player, cidades.get_sale_price(data.cost))
+
-- Remove registry
cidades.db.reset_property(name)
- minetest.chat_send_player(name, "Your land has been sold.")
+
+ minetest.chat_send_player(name, S("Your land has been sold. You received @1.", to_text(cidades.get_sale_price(data.cost))))
end
end
end
@@ -63,7 +74,7 @@ end)
-- Sfinv Buttom
sfinv_menu.register_button("cidades:my_land", {
- title = "My Property",
+ title = S("My Property"),
icon = "default_apple.png",
func = function(player)
local name = player:get_player_name()
@@ -72,22 +83,23 @@ sfinv_menu.register_button("cidades:my_land", {
minetest.show_formspec(name, "cidades:my_land", "size[5,1]"
..default.gui_bg
..default.gui_bg_img
- .."label[0.5,0;You do not have a property."
- .."\nBuy a property in a city.]")
+ .."label[0.5,0;"..S("You do not have a property.")
+ .."\n"..S("Buy a property in a city.").."]")
return
else
local data = cidades.db.get_property(name)
local city = cidades.active_cities[data.city_id] or {}
- local city_name = city.name or "No defined"
+ local city_name = city.name or S("No defined")
- minetest.show_formspec(name, "cidades:my_land", "size[3,2.8]"
+ minetest.show_formspec(name, "cidades:my_land", "size[4,2.8]"
..default.gui_bg
..default.gui_bg_img
- .."label[0,0;My Property"
- .."\nCity: "..city_name
- .."\nPrice: "..data.cost
+ .."label[0,0;"..S("My Property")
+ .."\n"..S("City: @1", city_name)
+ .."\n"..S("Price: @1", to_text(data.cost))
+ .."\n"..S("Resale price: @1", to_text(cidades.get_sale_price(data.cost)))
.."]"
- .."button[0,2;3,1;sell;Sell my property]"
+ .."button[0,2;4,1;sell;"..S("Sell property").."]"
)
return
end
diff --git a/teleporter.lua b/teleporter.lua
index ba21b48..32d5d59 100644
--- a/teleporter.lua
+++ b/teleporter.lua
@@ -8,6 +8,7 @@
Teleporter
]]
+local S = cidades.S
-- Cities
local cities_string_list = ""
@@ -17,9 +18,9 @@ local cities_list = {}
local formspec = "size[6,5]"
..default.gui_bg
..default.gui_bg_img
- .."label[0.5,0;Choose a city]"
+ .."label[0.5,0;"..S("Choose a city").."]"
.."textlist[0.5,0.8;4.8,3;city;]"
- .."button_exit[1,4.2;4,1;teleport;Go]"
+ .."button_exit[1,4.2;4,1;teleport;"..S("Go").."]"
-- Atualizar lista de vilas
local update_list = function()
@@ -46,7 +47,7 @@ local update_list = function()
formspec = "size[6,5]"
..default.gui_bg
..default.gui_bg_img
- .."label[0.5,0;Choose a city]"
+ .."label[0.5,0;"..S("Choose a city").."]"
.."textlist[0.5,0.8;4.8,3;city;"..cities_string_list.."]"
end
update_list()
@@ -54,7 +55,7 @@ update_list()
local show_formspec = function(player)
local name = player:get_player_name()
if player:get_attribute("cidades:teleporter_choose") ~= nil then
- minetest.show_formspec(name, "cidades:teleporter", formspec.."button_exit[1,4.2;4,1;teleport;Go]")
+ minetest.show_formspec(name, "cidades:teleporter", formspec.."button_exit[1,4.2;4,1;teleport;"..S("Go").."]")
else
minetest.show_formspec(name, "cidades:teleporter", formspec)
end
@@ -88,7 +89,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
player:set_pos(cities_list[id].pos)
minetest.close_formspec(name, "cidades:teleporter")
- minetest.chat_send_player(name, "Welcome to "..cities_list[id].name)
+ minetest.chat_send_player(name, S("Welcome to @1", cities_list[id].name))
end
if fields.quit then
@@ -100,10 +101,17 @@ end)
-- Teleporter
minetest.register_node("cidades:teleporter", {
- description = "Teleporter",
+ description = S("Teleporter"),
paramtype2 = "facedir",
place_param2 = 0,
- tiles = {"default_wood.png^default_diamond.png"},
+ tiles = {
+ "default_wood.png",
+ "default_wood.png",
+ "default_wood.png^cidades_teleporter.png",
+ "default_wood.png^cidades_teleporter.png",
+ "default_wood.png^cidades_teleporter.png",
+ "default_wood.png^cidades_teleporter.png"
+ },
is_ground_content = false,
groups = {choppy = 2, oddly_breakable_by_hand = 2},
diff --git a/textures/cidades_teleporter.png b/textures/cidades_teleporter.png
new file mode 100644
index 0000000..e7f1047
Binary files /dev/null and b/textures/cidades_teleporter.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/translator.lua b/translator.lua
new file mode 100644
index 0000000..399d49c
--- /dev/null
+++ b/translator.lua
@@ -0,0 +1,176 @@
+--[[
+ Mod Cidades for Minetest
+ Copyright (C) 2020 BrunoMine (https://github.com/BrunoMine)
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ Translator
+ ]]
+
+-- Modpath
+local modpath = minetest.get_modpath("cidades")
+
+-- Tradução intllib
+cidades.intllib = {}
+cidades.intllib.S, cidades.intllib.NS = dofile(modpath.."/lib/intllib.lua")
+
+-- Configura tradutor opicional
+cidades.S = cidades.intllib.S
+cidades.NS = cidades.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 cidades.*.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 cidades apartir de "..file.."\n# textdomain: cidades\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/cidades."..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("cidades")
+else
+ s = cidades.intllib.S
+end
+
+cidades.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", "[cidades] 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
+ cidades.s = s
+end
+
+cidades.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, cidades.S(a))
+ else
+ table.insert(r, a)
+ end
+ end
+
+ return cidades.s(unpack(r))
+
+ elseif type(args[1]) == "string" then
+ -- Não traduz caso faltem argumentos (devido strings ilustrativas)
+ return cidades.s(...)
+
+ else
+ return args[1]
+ end
+end
+
+-- Função que retorna a string inalterada para passar pela checagem
+cidades.Sfake = function(s) return s end
+
+