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:

lua
ESX.ShowNotification('You have no money')

kod yazıyor:

lua
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:

text
my_script/
  fxmanifest.lua
  config.lua
  locales/
    en.lua
    es.lua
  shared/locale.lua

locales/en.lua:

lua
Locales = Locales or {}

Locales['en'] = {
    no_money = 'You have no money',
    bought   = 'You bought %s for $%s',
}

locales/es.lua:

lua
Locales = Locales or {}

Locales['es'] = {
    no_money = 'No tienes dinero',
    bought   = 'Compraste %s por $%s',
}

shared/locale.lua, anahtarı arama işlevi:

lua
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
end

Manifest, yerelleştirmeler ilk ve yapılandırma işlevden önce:

lua
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:

lua
Config = {}
Config.Locale = 'en'

%s yer tutucularıyla doldurulmuş kullanım string.format tarafından:

lua
print(L('bought', 'bread', 5))   -- You bought bread for $5

Geri 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. en anahtarları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:

lua
-- fxmanifest.lua
shared_script '@ox_lib/init.lua'
files { 'locales/*.json' }
json
{
  "no_money": "You have no money",
  "bought": "You bought %s for $%s"
}
lua
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:

lua
-- fxmanifest.lua
shared_scripts {
    '@es_extended/imports.lua',
    '@es_extended/locale.lua',
    'locales/*.lua',
    'config.lua',
}
lua
-- locales/en.lua
Locales['en'] = {
    ['no_money'] = 'You have no money',
}
lua
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:

lua
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 →

Okumaya devam edin