Lokalisierung
Lokalisierung
BUPA Chat ist vollständig übersetzbar. Übersetzungen sind einfache JSON-Dateien im Verzeichnis locales/, die von ox_lib geladen (das Manifest deklariert ox_lib 'locale') und über den t()-Wrapper ausgelesen werden.
Mitgelieferte Sprachen
locales/*.json — zehn Sprachen standardmäßig enthalten:
| Code | Sprache | Code | Sprache |
|---|---|---|---|
en |
Englisch | nl |
Niederländisch |
tr |
Türkisch | pl |
Polnisch |
de |
Deutsch | pt |
Portugiesisch |
es |
Spanisch | ru |
Russisch |
fr |
Französisch | it |
Italienisch |
Jeder UI-String, jede Kategoriebezeichnung, jeder Platzhalter, jede Emote-Beschreibung und jede Systemnachricht wird aus diesen Dateien aufgelöst.
Sprache auswählen
Die aktive Sprache wird in shared/config/core.lua festgelegt:
config.lang = GetConvar("bupa-chat:locale", GetConvar("ox:locale", "en"))Auflösungsreihenfolge:
bupa-chat:locale— eine ressourcenspezifische Überschreibung nur für BUPA Chat.ox:locale— die serverweit genutzte ox_lib-Sprache.en— Englischer Fallback, falls keines von beiden gesetzt ist.
setr ox:locale "tr" # serverweite Sprache
setr bupa-chat:locale "en" # optional: erzwingt Englisch nur für den ChatLive-Umschaltung — bupa:changeLanguage
Du kannst die Sprache eines Spielers während der Laufzeit und pro Session ändern, ohne einen Neustart durchzuführen. Triggere das Client-Event mit einem Sprachcode; BUPA Chat lädt diese Sprachdatei über ox_lib neu und überträgt sie direkt an die React-UI:
TriggerEvent("bupa:changeLanguage", "de")Intern ruft dies loadLang(newLang) auf (was die aktive Sprache von ox_lib umschaltet) und anschließend changeUiLang, sodass sowohl die Lua-Seite als auch die UI gleichzeitig aktualisiert werden.
Eine Sprache hinzufügen oder bearbeiten
locales/ befindet sich in escrow_ignore, sodass du die JSON-Dateien direkt bearbeiten kannst. Um eine Sprache hinzuzufügen, kopiere en.json, übersetze die Werte und speichere sie als <code>.json (z. B. sv.json). Setze danach ox:locale oder bupa-chat:locale auf diesen Code.
{
"CATEGORY_COMMANDS_LABEL": "Commands",
"CATEGORY_COMMANDS_PLACEHOLDER": "Type a command...",
"CATEGORY_ADMIN_LABEL": "Admin Chat",
"EMOTE_ME_COMMAND_DESC": "Describe an action you are doing"
}t() (und ox_lib locale()) gibt den Schlüssel selbst zurück, wenn eine Übersetzung fehlt. Halte en.json als Referenz vollständig und verwende %s / %d Platzhalter für dynamische Werte (z. B. "Reason: %s").