M2 Download Center
Download Here ( Internal )
Hey Everyone,
since i'm new here, i want to share my Multi-Language System with you as small "contribution" to this community.
Many private servers still don't have a proper language-system and i thought it might be a good idea to start sharing stuff with you instead of keeping it only for my server.
So let's start
I've written a quest to select your language and called her: changelanguage.quest
quest changelanguage begin
state start begin
when login begin
set_state(change_lang)
end
end
state change_lang begin
when letter begin
send_letter(t('locale.changelanguage.letter'))
end
when button or info begin
local s = 0
local subset = 1
while s == 0 or (subset == 1 and s == 6) or (subset == 2 and s == 12) or (subset == 3 and s == 19) or (subset == 4 and s == 22) do
if s == 0 or (s == 12 and subset == 2) then
say(t('locale.changelanguage.welcome') .. " " .. pc.get_name() .. " " .. t('locale.changelanguage.msg'))
subset = 1
s = select(t('locale.changelanguage.select', 1), t('locale.changelanguage.select', 6), t('locale.changelanguage.select', 3), t('locale.changelanguage.select', 4), t('locale.changelanguage.select', 5), t('locale.main.next'), t('locale.main.cancel'))
end
if (s == 6 and subset == 1) or (s == 19 and subset == 3) then
say(t('locale.changelanguage.welcome') .. " " .. pc.get_name() .. " " .. t('locale.changelanguage.msg'))
subset = 2
s = select(t('locale.changelanguage.select', 2), t('locale.changelanguage.select', 7), t('locale.changelanguage.select', 8), t('locale.changelanguage.select', 9), t('locale.changelanguage.select', 14), t('locale.main.next'), t('locale.main.back')) + 5
end
if (s == 11 and subset == 2) or (s == 22 and subset == 4) then
say(t('locale.changelanguage.welcome') .. " " .. pc.get_name() .. " " .. t('locale.changelanguage.msg'))
subset = 3
s = select(t('locale.changelanguage.select', 13), t('locale.changelanguage.select', 10), t('locale.changelanguage.select', 20), t('locale.changelanguage.select', 21), t('locale.changelanguage.select', 22), t('locale.main.next'), t('locale.main.back')) + 12
end
if s == 18 and subset == 3 then
say(t('locale.changelanguage.welcome') .. " " .. pc.get_name() .. " " .. t('locale.changelanguage.msg'))
subset = 4
s = select(t('locale.changelanguage.select', 23), t('locale.changelanguage.select', 24), t('locale.main.back'), t('locale.main.cancel')) + 19
end
end
if s == 1 then
set_lang(1)
say(t('locale.changelanguage.info'))
elseif s == 2 then
set_lang(6)
say(t('locale.changelanguage.info'))
elseif s == 3 then
set_lang(3)
say(t('locale.changelanguage.info'))
elseif s == 4 then
set_lang(4)
say(t('locale.changelanguage.info'))
elseif s == 5 then
set_lang(5)
say(t('locale.changelanguage.info'))
----------------- SUB_SET 2 -------------------------------
elseif s == 6 then
set_lang(2)
say(t('locale.changelanguage.info'))
elseif s == 7 and subset == 2 then
set_lang(7)
say(t('locale.changelanguage.info'))
elseif s == 8 and subset == 2 then
set_lang(8)
say(t('locale.changelanguage.info'))
elseif s == 9 and subset == 2 then
set_lang(9)
say(t('locale.changelanguage.info'))
elseif s == 10 and subset == 2 then
set_lang(14)
say(t('locale.changelanguage.info'))
elseif s == 14 and subset == 3 then
set_lang(10)
say(t('locale.changelanguage.info'))
elseif s == 13 and subset == 3 then
set_lang(13)
say(t('locale.changelanguage.info'))
elseif s == 15 and subset == 3 then
set_lang(20)
say(t('locale.changelanguage.info'))
elseif s == 16 and subset == 3 then
set_lang(21)
say(t('locale.changelanguage.info'))
elseif s == 17 and subset == 3 then
set_lang(22)
say(t('locale.changelanguage.info'))
elseif s == 20 and subset == 4 then
set_lang(23)
say(t('locale.changelanguage.info'))
elseif s == 21 and subset == 4 then
set_lang(24)
say(t('locale.changelanguage.info'))
end
end
end
end
As you can see, it contains many different languages, that's why i left the quest complete and didn't clean it up so you can have a better understanding how it works.
The quest translation, we've added to our locale.lua.
Here a small variable example for the above posted quest, changelanguage.quest:
----- changelanguage.quest -----
locale.changelanguage= {}
locale.changelanguage.select = "English"
locale.changelanguage.welcome = "Welcome"
locale.changelanguage.msg = ",[ENTER]Please select your language![ENTER]"
locale.changelanguage.letter = "Change Language"
locale.changelanguage.info = "You have successfully changed your language![ENTER]"
-------------------------
and in case you want to add more languages, simple add a small syntax like "_de" ( german) which would look like that:
----- changelanguage.quest -----
locale.changelanguage.select_de = "Deutsch"
locale.changelanguage.welcome_de = "Willkommen"
locale.changelanguage.msg_de = ",[ENTER]Bitte wähle deine Sprache![ENTER]"
locale.changelanguage.letter_de = "Sprache Ändern"
locale.changelanguage.info_de = "Du hast erfolgreich deine Sprache geändert![ENTER]"
-------------------------
of course it won't work without the actual function which will be added to: questlib.lua
function set_lang(arg)
local name = string.gsub(pc.get_name(), "[.*](.*)", "%1")
pc.setf('changelanguage', 'lang_' .. name, arg)
end
and
function t(varname, l)
local name = string.gsub(pc.get_name(), "[.*](.*)", "%1")
local line = 0
line = pc.getf('changelanguage', 'lang_' .. name)
if not l then
l = line
end
local lang_suffix = ''
if l == 1 or l == 0 then
lang_suffix = '' -- English (Default)
elseif l == 2 then
lang_suffix = '_it' -- Italian
elseif l == 3 then
lang_suffix = '_de' -- German
elseif l == 4 then
lang_suffix = '_bg' -- Bulgarian
elseif l == 5 then
lang_suffix = '_et' -- Estonian
elseif l == 6 then
lang_suffix = '_ro' -- Romanian
elseif l == 7 then
lang_suffix = '_hr' -- Croatian
elseif l == 8 then
lang_suffix = '_cz' -- Czech
elseif l == 9 then
lang_suffix = '_pt' -- Portuguese
elseif l == 10 then
lang_suffix = '_fr' -- French
elseif l == 13 then
lang_suffix = '_lt' -- Lithuanian
elseif l == 14 then
lang_suffix = '_hu' -- Hungarian
elseif l == 20 then
lang_suffix = '_gr' -- Greek
elseif l == 21 then
lang_suffix = '_nl' -- Dutch
elseif l == 22 then
lang_suffix = '_pl' -- Polish
elseif l == 23 then
lang_suffix = '_se' -- Swedish
elseif l == 24 then
lang_suffix = '_mk' -- Macedonian
end
s = assert(loadstring( 'return ' .. varname .. lang_suffix ))
if not s() or s() == '' then
s = assert(loadstring( 'return ' .. varname ))
end
if not s() then return "" end
return(s())
end
And please check if you've set_lang in your quest_functions.
The function inside your quest will be used like that. For example in "say"
say("I <3 Metin2Dev")
would be replaced with
say(t('locale.questname.lovemetin2dev'))
I've created the variables based on their quest name and the part where it's used inside the quest to give it more sense and it will make it easier to read later, ones you've 5k+ lines in your locale
I hope you like it and i looking forward to work with and for you guys
Cheers,
BalooUA