FiveM komut dosyası yerelleştirmeler: en.lua, ox_lib ve ESX ile çeviriye tabi komut dosyaları
FiveM komut dosyanızı çeviriye tabi hale getirin: yerelleştirmeler klasörü en.lua ve es.lua, basit yerelleştirme işlevi, ox_lib'in yerelleştirme sistemi, ESX TranslateCap ve dil yapılandırması.
Komut dosyanızda 'Paran yok' kırk yerde sabit kodlanmış. Madrid'de veya Berlin'de bir sunucu sahibi bunu dilinde istiyor ve tek yol kodunu düzenlemektir. Çözüm yerelleştirme katmanı: dizeler dil başına dosyalarda yaşar; kod anahtarları sorar. Bu kılavuz basit düz Lua sürümünü gösterir, ardından ox_lib'in sistemi ve ESX.
Fikir
Yerine:
ESX.ShowNotification('You have no money')kod yazıyor:
ESX.ShowNotification(L('no_money'))ve bir dil dosyası no_money için metni sağlar. Çevirmeler ardından dosyaları değiştirir, hiçbir zaman kodu; açık yerelleştirme dosyaları şifrelenmemiş gönderebilir (bkz. escrow_ignore).
Düz Lua yerelleştirme işlevi
Klasör düzeni:
my_script/
fxmanifest.lua
config.lua
locales/
en.lua
es.lua
shared/locale.lualocales/en.lua:
Locales = Locales or {}
Locales['en'] = {
no_money = 'You have no money',
bought = 'You bought %s for $%s',
}locales/es.lua:
Locales = Locales or {}
Locales['es'] = {
no_money = 'No tienes dinero',
bought = 'Compraste %s por $%s',
}shared/locale.lua, anahtarı arama işlevi:
function L(key, ...)
local lang = Locales[Config.Locale] or Locales['en']
local text = lang[key] or Locales['en'][key] or key
if select('#', ...) > 0 then
return text:format(...)
end
return text
endManifest, yerelleştirmeler ilk ve yapılandırma işlevden önce:
fx_version 'cerulean'
game 'gta5'
shared_scripts {
'config.lua',
'locales/*.lua',
'shared/locale.lua',
}
client_script 'client/main.lua'
server_script 'server/main.lua'Ve config.lua içinde:
Config = {}
Config.Locale = 'en'%s yer tutucularıyla doldurulmuş kullanım string.format tarafından:
print(L('bought', 'bread', 5)) -- You bought bread for $5Geri dönüşler önemli: es içinde eksik bir anahtar en geri döner ve her yerde eksik bir anahtar anahtarın kendisini döndürür; bu nedenle bir hata yerine ekranda no_money görürsünüz. Çevirideki bir delik, bir çökmeden ziyade görünür bir anahtar olarak gösterilir.
İpucu: her dil dosyasında aynı anahtarları tutun.
enanahtarlarını her diğer dosyayla karşılaştıran küçük komut dosyası yayından önce eksik çevirileri yakalar.
ox_lib'in yerelleştirme sistemi
Komut dosyanız ox_lib'e zaten bağlıysa, L() yazı yerine yerleşik yerelleştirmelerini kullanabilirsiniz. Şekil: manifestte ox_lib yükleyin, çevirilerinizi locales/ klasörüne koyun (ox_lib dil tarafından adlı .json dosyalarını kullanır; örneğin locales/en.json), files ile ekleyin ve lib.locale() bir kez çağırın:
-- fxmanifest.lua
shared_script '@ox_lib/init.lua'
files { 'locales/*.json' }{
"no_money": "You have no money",
"bought": "You bought %s for $%s"
}lib.locale() -- load the language
lib.notify({ description = locale('no_money'), type = 'error' })
print(locale('bought', 'bread', 5))Mevcut format için ox_lib belgelerini kontrol edin ve dil nasıl seçilir (sunucu convar), çünkü dosya düzeni ve seçenek adları sürümler arasında değişmiştir. ox_lib/init.lua bulunamazsa, bunu önce düzeltin: ox_lib init.lua bulunamadı.
ESX ve TranslateCap
ESX komut dosyalarının kendi yerelleştirme deseni vardır. Yerelleştirme dosyaları Locales tablosunu doldurur ve çerçeve bir çeviri işlevi sağlar:
-- fxmanifest.lua
shared_scripts {
'@es_extended/imports.lua',
'@es_extended/locale.lua',
'locales/*.lua',
'config.lua',
}-- locales/en.lua
Locales['en'] = {
['no_money'] = 'You have no money',
}TriggerEvent('esx:showNotification', TranslateCap('no_money'))Eski komut dosyaları aynı şey için _U('no_money') kullanır. TranslateCap son ESX Legacy'de geçerli addır ve dil Config.Locale veya çerçevenin kendi ayarı tarafından seçilir. ox_lib'de olduğu gibi, tam dosya adları ve hangi iki işlev beklediği hakkında çalıştırdığınız ESX sürümünün belgelerini kontrol edin.
QBCore benzer bir Lang modülüne (locales/en.lua Lang:t('key') kullanan) aynı şekilde çalışır: dil başına bir tablo ve anahtarları çözen bir işlev.
Dili seçme
config.lua üst kısmının yakınında bir yapılandırma satırı sunun:
Config.Locale = 'en' -- 'en', 'es', 'fr'...Komut dosyanız istemci, sunucu ve NUI karışımıysa, NUI metni kendi çevirilerine ihtiyaç duyduğunu unutmayın: HTML içindeki İngilizce yazı yerine açıldığında sayfaya dizeleri gönderin. Sayfaya veri geçirme için FiveM NUI React ve Vite ile bölümüne bakın.
Kontrol listesi
| Belirti | Çözüm |
|---|---|
| İngilizce metin kodda sabit | locales/en.lua öğesine taşıyın ve L('key') çağırın |
attempt to index a nil value Locales[...] öğesinde |
Onu okuyan koddan önce yerelleştirme dosyalarını yükleyin |
| Ekranda ham anahtar gösterilir | Anahtar seçilen dilde ve en öğesinde eksiktir |
| Yanlış dil kullanılmış | Config.Locale ve yerelleştirme convar'ı kontrol edin |
ox_lib locale() anahtarı döndürür |
Önce lib.locale() çağırın ve files içinde locales/*.json `dahil edin |
| NUI hala İngilizce | Çevrilmiş dizeleri sayfaya geçirin |
Kısa yanıtlar
FiveM komut dosyasında çeviriler nereye koymalıyım?
locales/ klasöründe, en.lua ve es.lua gibi dil başına bir dosya, onları kullanan koddan önce yüklenmiş. Komut dosyası ardından anahtarı sorar, asla kelimenin tam anlamıyla dizeyi soramaz.
ox_lib'in yerelleştirme sistemi var mı?
Evet. Yerelleştirme dosyalarını okur ve lib.locale() çağırmanızdan sonra locale('key') verir. Mevcut dosya formatı ve dili seçen ayar için ox_lib belgelerini kontrol edin.
Dili nasıl seçerim?
Yapılandırmanızda bir Config.Locale değeri ile veya çerçevesi veya ox_lib'in okuduğu bir convar ile. Bir anahtar veya dil eksik olduğunda İngilizcede geri dönün.
Bu sorunu yaşatmayan scriptler
Mic PhoneTablete dönüşen katlanabilir bir telefon; oyuncunun gerçek telefonuna da taşınır.Scripti gör →
Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.Scripti gör →
Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →