diff --git a/mesecons/locale/mesecons.ru.tr b/mesecons/locale/mesecons.ru.tr
new file mode 100644
index 0000000..787f7d8
--- /dev/null
+++ b/mesecons/locale/mesecons.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons
+
+### oldwires.lua ###
+Mesecons=Мезеконы
diff --git a/mesecons_blinkyplant/locale/mesecons_blinkyplant.ru.tr b/mesecons_blinkyplant/locale/mesecons_blinkyplant.ru.tr
new file mode 100644
index 0000000..6f25295
--- /dev/null
+++ b/mesecons_blinkyplant/locale/mesecons_blinkyplant.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_blinkyplant
+
+### init.lua ###
+Blinky Plant=Мигающий цветок
diff --git a/mesecons_button/locale/mesecons_button.ru.tr b/mesecons_button/locale/mesecons_button.ru.tr
new file mode 100644
index 0000000..036723d
--- /dev/null
+++ b/mesecons_button/locale/mesecons_button.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_button
+
+### init.lua ###
+Button=Кнопка
diff --git a/mesecons_commandblock/locale/mesecons_commandblock.ru.tr b/mesecons_commandblock/locale/mesecons_commandblock.ru.tr
new file mode 100644
index 0000000..64122e4
--- /dev/null
+++ b/mesecons_commandblock/locale/mesecons_commandblock.ru.tr
@@ -0,0 +1,7 @@
+# textdomain: mesecons_commandblock
+
+### init.lua ###
+Say <text> as the server=Сказать <текст> от имени сервера
+Say <text> to <name> privately=Сказать <текст> игроку <имя> в личном сообщении
+Set health of <name> to <value> hitpoints=Установить здоровье игрока <имя> на <значение> хитпоинтов
+Command Block=Комадный блок
diff --git a/mesecons_delayer/locale/mesecons_delayer.ru.tr b/mesecons_delayer/locale/mesecons_delayer.ru.tr
new file mode 100644
index 0000000..53ab893
--- /dev/null
+++ b/mesecons_delayer/locale/mesecons_delayer.ru.tr
@@ -0,0 +1,5 @@
+# textdomain: mesecons_delayer
+
+### init.lua ###
+Delayer=Элемент задержки
+You hacker you=Ти хакер, ти
diff --git a/mesecons_detector/locale/mesecons_detector.ru.tr b/mesecons_detector/locale/mesecons_detector.ru.tr
new file mode 100644
index 0000000..3b19412
--- /dev/null
+++ b/mesecons_detector/locale/mesecons_detector.ru.tr
@@ -0,0 +1,5 @@
+# textdomain: mesecons_detector
+
+### init.lua ###
+Player Detector=Детектор игрока
+Node Detector=Детектор блока
diff --git a/mesecons_extrawires/locale/mesecons_extrawires.ru.tr b/mesecons_extrawires/locale/mesecons_extrawires.ru.tr
new file mode 100644
index 0000000..3826f94
--- /dev/null
+++ b/mesecons_extrawires/locale/mesecons_extrawires.ru.tr
@@ -0,0 +1,20 @@
+# textdomain: mesecons_extrawires
+
+### corner.lua ###
+Insulated Mesecon Corner=Изолированный мезекон (угол)
+
+### crossover.lua ###
+Insulated Mesecon Crossover=Изолированный мезекон (перекрестие)
+You hacker you!=Ти хакер ти!
+
+### doublecorner.lua ###
+Insulated Mesecon Double Corner=Изолированный мезекон (двойной угол)
+
+### mesewire.lua ###
+Mese Wire=Мезе-провод
+
+### tjunction.lua ###
+Insulated Mesecon T-junction=Изолированный мезекон (Т-соединение)
+
+### vertical.lua ###
+Vertical Mesecon=Вертикальный мезекон
diff --git a/mesecons_fpga/locale/mesecons_fpga.ru.tr b/mesecons_fpga/locale/mesecons_fpga.ru.tr
new file mode 100644
index 0000000..b3f5dfe
--- /dev/null
+++ b/mesecons_fpga/locale/mesecons_fpga.ru.tr
@@ -0,0 +1,7 @@
+# textdomain: mesecons_fpga
+
+### init.lua ###
+FPGA=ПЛИС
+
+### tool.lua ###
+FPGA Programmer=ПЛИС-программер
diff --git a/mesecons_gates/init.lua b/mesecons_gates/init.lua
index 7e21f2f..0bb334f 100644
--- a/mesecons_gates/init.lua
+++ b/mesecons_gates/init.lua
@@ -1,3 +1,5 @@
+local S = minetest.get_translator(minetest.get_current_modname())
+
 local selection_box = {
 	type = "fixed",
 	fixed = { -8/16, -8/16, -8/16, 8/16, -6/16, 8/16 }
@@ -146,38 +148,38 @@ end
 
 register_gate("diode", 1, function (input) return input end,
 	{{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons_torch:mesecon_torch_on"}},
-	"Diode")
+	S("Diode"))
 
 register_gate("not", 1, function (input) return not input end,
 	{{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons:mesecon"}},
-	"NOT Gate")
+	S("NOT Gate"))
 
 register_gate("and", 2, function (val1, val2) return val1 and val2 end,
 	{{"mesecons:mesecon", "", ""},
 	 {"", "mesecons_materials:silicon", "mesecons:mesecon"},
 	 {"mesecons:mesecon", "", ""}},
-	"AND Gate")
+	S("AND Gate"))
 
 register_gate("nand", 2, function (val1, val2) return not (val1 and val2) end,
 	{{"mesecons:mesecon", "", ""},
 	 {"", "mesecons_materials:silicon", "mesecons_torch:mesecon_torch_on"},
 	 {"mesecons:mesecon", "", ""}},
-	"NAND Gate")
+	S("NAND Gate"))
 
 register_gate("xor", 2, function (val1, val2) return (val1 or val2) and not (val1 and val2) end,
 	{{"mesecons:mesecon", "", ""},
 	 {"", "mesecons_materials:silicon", "mesecons_materials:silicon"},
 	 {"mesecons:mesecon", "", ""}},
-	"XOR Gate")
+	S("XOR Gate"))
 
 register_gate("nor", 2, function (val1, val2) return not (val1 or val2) end,
 	{{"mesecons:mesecon", "", ""},
 	 {"", "mesecons:mesecon", "mesecons_torch:mesecon_torch_on"},
 	 {"mesecons:mesecon", "", ""}},
-	"NOR Gate")
+	S("NOR Gate"))
 
 register_gate("or", 2, function (val1, val2) return (val1 or val2) end,
 	{{"mesecons:mesecon", "", ""},
 	 {"", "mesecons:mesecon", "mesecons:mesecon"},
 	 {"mesecons:mesecon", "", ""}},
-	"OR Gate")
+	S("OR Gate"))
diff --git a/mesecons_gates/locale/mesecons_gates.ru.tr b/mesecons_gates/locale/mesecons_gates.ru.tr
new file mode 100644
index 0000000..a218782
--- /dev/null
+++ b/mesecons_gates/locale/mesecons_gates.ru.tr
@@ -0,0 +1,8 @@
+# textdomain: mesecons_gates
+Diode=Диод
+NOT Gate=НЕ-шлюз
+AND Gate=И-шлюз
+NAND Gate=NAND-шлюз
+XOR Gate=XOR-шлюз
+NOR Gate=NOR-шлюз
+OR Gate=ИЛИ-шлюз
diff --git a/mesecons_gates/locale/template.txt b/mesecons_gates/locale/template.txt
new file mode 100644
index 0000000..899b139
--- /dev/null
+++ b/mesecons_gates/locale/template.txt
@@ -0,0 +1,8 @@
+# textdomain: mesecons_gates
+Diode=
+NOT Gate=
+AND Gate=
+NAND Gate=
+XOR Gate=
+NOR Gate=
+OR Gate=
diff --git a/mesecons_hydroturbine/locale/mesecons_hydroturbine.ru.tr b/mesecons_hydroturbine/locale/mesecons_hydroturbine.ru.tr
new file mode 100644
index 0000000..4055834
--- /dev/null
+++ b/mesecons_hydroturbine/locale/mesecons_hydroturbine.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_hydroturbine
+
+### init.lua ###
+Water Turbine=Гидротурбина
diff --git a/mesecons_insulated/locale/mesecons_insulated.ru.tr b/mesecons_insulated/locale/mesecons_insulated.ru.tr
new file mode 100644
index 0000000..9ba1004
--- /dev/null
+++ b/mesecons_insulated/locale/mesecons_insulated.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_insulated
+
+### init.lua ###
+Straight Insulated Mesecon=Прямой изолированный мезекон
diff --git a/mesecons_lamp/locale/mesecons_lamp.ru.tr b/mesecons_lamp/locale/mesecons_lamp.ru.tr
new file mode 100644
index 0000000..7280307
--- /dev/null
+++ b/mesecons_lamp/locale/mesecons_lamp.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_lamp
+
+### init.lua ###
+Mesecon Lamp=Мезеконовая лампа
diff --git a/mesecons_lightstone/locale/mesecons_lightstone.ru.tr b/mesecons_lightstone/locale/mesecons_lightstone.ru.tr
new file mode 100644
index 0000000..3867c7d
--- /dev/null
+++ b/mesecons_lightstone/locale/mesecons_lightstone.ru.tr
@@ -0,0 +1,15 @@
+# textdomain: mesecons_lightstone
+
+### init.lua ###
+Red Lightstone=Красный светящийся камень
+Green Lightstone=Зеленый светящийся камень
+Blue Lightstone=Синий светящийся камень
+Grey Lightstone=Серый светящийся камень
+Dark Grey Lightstone=Темно-серый светящийся камень
+Yellow Lightstone=Желтый светящийся камень
+Orange Lightstone=Оранжевый светящийся камень
+White Lightstone=Белый светящийся камень
+Pink Lightstone=Розовый светящийся камень
+Magenta Lightstone=Пурпурный светящийся камень
+Cyan Lightstone=Голубой светящийся камень
+Violet Lightstone=Фиолетовый светящийся камень
diff --git a/mesecons_luacontroller/locale/mesecons_luacontroller.ru.tr b/mesecons_luacontroller/locale/mesecons_luacontroller.ru.tr
new file mode 100644
index 0000000..4924cd2
--- /dev/null
+++ b/mesecons_luacontroller/locale/mesecons_luacontroller.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_luacontroller
+
+### init.lua ###
+Luacontroller=Lua-контроллер
diff --git a/mesecons_materials/locale/mesecons_materials.ru.tr b/mesecons_materials/locale/mesecons_materials.ru.tr
new file mode 100644
index 0000000..b418fe0
--- /dev/null
+++ b/mesecons_materials/locale/mesecons_materials.ru.tr
@@ -0,0 +1,6 @@
+# textdomain: mesecons_materials
+
+### init.lua ###
+Glue=Клей
+Fiber=Волокно
+Silicon=Кремний
diff --git a/mesecons_microcontroller/locale/mesecons_microcontroller.ru.tr b/mesecons_microcontroller/locale/mesecons_microcontroller.ru.tr
new file mode 100644
index 0000000..0a6fdbb
--- /dev/null
+++ b/mesecons_microcontroller/locale/mesecons_microcontroller.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_microcontroller
+
+### init.lua ###
+Microcontroller=Микроконтроллер
diff --git a/mesecons_movestones/locale/mesecons_movestones.ru.tr b/mesecons_movestones/locale/mesecons_movestones.ru.tr
new file mode 100644
index 0000000..3fd8065
--- /dev/null
+++ b/mesecons_movestones/locale/mesecons_movestones.ru.tr
@@ -0,0 +1,7 @@
+# textdomain: mesecons_movestones
+
+### init.lua ###
+Movestone=Ходовой камень
+Sticky Movestone=Липкий ходовой камень
+Vertical Movestone=Вертикальный ходовой камень
+Vertical Sticky Movestone=Вертикальный липкий ходовой камень
diff --git a/mesecons_noteblock/locale/mesecons_noteblock.ru.tr b/mesecons_noteblock/locale/mesecons_noteblock.ru.tr
new file mode 100644
index 0000000..29960ee
--- /dev/null
+++ b/mesecons_noteblock/locale/mesecons_noteblock.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_noteblock
+
+### init.lua ###
+Noteblock=Нотный блок
diff --git a/mesecons_pistons/locale/mesecons_pistons.ru.tr b/mesecons_pistons/locale/mesecons_pistons.ru.tr
new file mode 100644
index 0000000..4748e51
--- /dev/null
+++ b/mesecons_pistons/locale/mesecons_pistons.ru.tr
@@ -0,0 +1,9 @@
+# textdomain: mesecons_pistons
+
+### init.lua ###
+Piston=Поршень
+Activated Piston Base=Основание активированного поршня
+Piston Pusher=Толкающая часть поршня
+Sticky Piston=Липкий поршень
+Activated Sticky Piston Base=Основание активированного липкого поршня
+Sticky Piston Pusher=Толкающая часть липкого поршня
diff --git a/mesecons_powerplant/locale/mesecons_powerplant.ru.tr b/mesecons_powerplant/locale/mesecons_powerplant.ru.tr
new file mode 100644
index 0000000..8d6c21d
--- /dev/null
+++ b/mesecons_powerplant/locale/mesecons_powerplant.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_powerplant
+
+### init.lua ###
+Power Plant=Энергоцветок
diff --git a/mesecons_pressureplates/locale/mesecons_pressureplates.ru.tr b/mesecons_pressureplates/locale/mesecons_pressureplates.ru.tr
new file mode 100644
index 0000000..f1e26fa
--- /dev/null
+++ b/mesecons_pressureplates/locale/mesecons_pressureplates.ru.tr
@@ -0,0 +1,5 @@
+# textdomain: mesecons_pressureplates
+
+### init.lua ###
+Wooden Pressure Plate=Деревянная нажимная пластина
+Stone Pressure Plate=Каменная нажимная пластина
diff --git a/mesecons_random/locale/mesecons_random.ru.tr b/mesecons_random/locale/mesecons_random.ru.tr
new file mode 100644
index 0000000..416760b
--- /dev/null
+++ b/mesecons_random/locale/mesecons_random.ru.tr
@@ -0,0 +1,5 @@
+# textdomain: mesecons_random
+
+### init.lua ###
+Removestone=Исчезающий камень
+Ghoststone=Призрачный камень
diff --git a/mesecons_solarpanel/locale/mesecons_solarpanel.ru.tr b/mesecons_solarpanel/locale/mesecons_solarpanel.ru.tr
new file mode 100644
index 0000000..7e14ed3
--- /dev/null
+++ b/mesecons_solarpanel/locale/mesecons_solarpanel.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_solarpanel
+
+### init.lua ###
+Solar Panel=Солнечная панель
diff --git a/mesecons_stickyblocks/locale/mesecons_stickyblocks.ru.tr b/mesecons_stickyblocks/locale/mesecons_stickyblocks.ru.tr
new file mode 100644
index 0000000..e484686
--- /dev/null
+++ b/mesecons_stickyblocks/locale/mesecons_stickyblocks.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_stickyblocks
+
+### init.lua ###
+Sticky Block=Липкий блок
diff --git a/mesecons_switch/locale/mesecons_switch.ru.tr b/mesecons_switch/locale/mesecons_switch.ru.tr
new file mode 100644
index 0000000..8f45ccd
--- /dev/null
+++ b/mesecons_switch/locale/mesecons_switch.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_switch
+
+### init.lua ###
+Switch=Выключатель
diff --git a/mesecons_torch/locale/mesecons_torch.ru.tr b/mesecons_torch/locale/mesecons_torch.ru.tr
new file mode 100644
index 0000000..d5bceaf
--- /dev/null
+++ b/mesecons_torch/locale/mesecons_torch.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_torch
+
+### init.lua ###
+Mesecon Torch=Мезе-факел
diff --git a/mesecons_walllever/locale/mesecons_walllever.ru.tr b/mesecons_walllever/locale/mesecons_walllever.ru.tr
new file mode 100644
index 0000000..b308bea
--- /dev/null
+++ b/mesecons_walllever/locale/mesecons_walllever.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_walllever
+
+### init.lua ###
+Lever=Рычаг
diff --git a/mesecons_wires/locale/mesecons_wires.ru.tr b/mesecons_wires/locale/mesecons_wires.ru.tr
new file mode 100644
index 0000000..dcd5c1e
--- /dev/null
+++ b/mesecons_wires/locale/mesecons_wires.ru.tr
@@ -0,0 +1,4 @@
+# textdomain: mesecons_wires
+
+### init.lua ###
+Mesecon=Мезекон