Öncelikle iyi forumlar, bu konuda sizlere dün yazmış olduğum
Laravel 7.x dil fonksiyonundan lua'ya uyarlama yaptığım kodu paylaşacağım, kısaca artıları ve zararları;
Bir script içine atıp export vererek kullanmanıza olanak sağlar, direkt olarak tabloyu düzenlemektense modüler bir yapı izler, dinamik değişkenlik göstererir ve kendini yineler. Gereksiz iş yükünden kurtulursunuz her Lua'nın farklı dillerdeki karşılıklarını girebilirsiniz.
local defaultLang = false
local keycodes = {}
function __(...)
local args = { ... }
if string.find(args[1], 'lang.') and #args == 1 then
defaultLang = ( tonumber(args[1]:len()) < 8 )
and args[1]
or false
if defaultLang then
return {
defaultLang,
true
}
end
end
args.key = ( type(args[1]) == 'string' and 7 > string.len(args[1]) )
and args[1]
or false
if #args == 1 and args.key then
return keycodes[((defaultLang or '') .. '.' or '')..args.key]
or {
outputDebugString('Undefined lang key', 3, 255, 255, 255),
false
}
end
args.value = ( type(args[1]) == 'string' and #args > 1 )
and args[2]
or false
if args.value and args.key then
keycodes = keycodes or {}
keycodes[((defaultLang or '') .. '.' or '')..args.key] = keycodes[((defaultLang or '') .. '.' or '')..args.key] or args.value
return keycodes[((defaultLang or '') .. '.' or '')..args.key]
or {
outputDebugString('Undefined lang key with value function', 3, 255, 255, 255),
false
}
end
end
Test kiti__('lang.tr')
__('abc', 'abcde') -- lang.tr.abc tanımlaması
print(__('abc')) -- seçilen default dil tr olduğundan ötürü lang.tr.abc getiriliyor
__('lang.en') -- seçilen dili lang.en olarak ayarladık (kısaca en)
__('asd', '123') -- lang.en.asd tanımlaması
__('abc', '1234') -- lang.en.abc tanımlaması
print(__('abc')) -- seçilen default dil en olduğu için lang.en.abc getiriliyor