Skip to content

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:

shared/config/core.lua
config.lang = GetConvar("bupa-chat:locale", GetConvar("ox:locale", "en"))

Auflösungsreihenfolge:

  1. bupa-chat:locale — eine ressourcenspezifische Überschreibung nur für BUPA Chat.
  2. ox:locale — die serverweit genutzte ox_lib-Sprache.
  3. en — Englischer Fallback, falls keines von beiden gesetzt ist.
server.cfg
setr ox:locale "tr"          # serverweite Sprache
setr bupa-chat:locale "en"   # optional: erzwingt Englisch nur für den Chat

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

client
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.

locales/en.json
{
  "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").