Saltearse al contenido

API de locales

Todo esto viene de bs_core/shared/sh_locale.lua. Cómo preparar un resource para traducirlo está en Idiomas. Esta página es la referencia.

Idiomas: en, pt, de, pl, tr, es, fr, it, ru. Las claves que faltan recurren a en y después a la propia clave.

shared_scripts { '@bs_core/shared/sh_locale.lua' }
files { 'locales/*.lua' }

Cada locales/<lang>.lua devuelve una tabla plana:

return {
['shop.title'] = 'Trader',
['shop.bought'] = 'You bought {item} for ${price}',
}

Los placeholders son {name}. Un placeholder desconocido se deja tal cual, para que los errores de escritura se vean en vez de desaparecer.

FunciónLadoQué hace
L(key, vars)clientTexto en el idioma del jugador local
L(key, vars)serverTexto en el idioma por defecto del servidor
L(src, key, vars)serverTexto en el idioma de ese jugador
Lp(src, key, vars)serverIgual que lo anterior, siempre recibe un source
BSLocale.T(lang, key, vars)ambosTexto en un idioma que indiques
BSLocale.Lang()ambosIdioma del jugador local (client) o el de por defecto (server)
BSLocale.LangOf(src)ambosIdioma de un jugador, recurre al de por defecto
BSLocale.Default()ambosPor defecto del servidor (GlobalState.bs_defaultLang, si no en)
BSLocale.IsValid(lang)ambosSi es uno de los nueve códigos
BSLocale.Dict(lang)ambosLa tabla completa con en debajo, para NUI
BSLocale.OnChange(fn)clientfn(lang) se ejecuta cuando cambia el idioma
BSLocale.Set(lang)clientPide a bs_core que cambie el idioma del jugador
BSLocale.Languages, BSLocale.NativeambosLa lista de códigos y los nombres nativos

Export de servidor: exports.bs_core:GetLanguage(src).

En el servidor pasa siempre el source del jugador cuando el texto va a un solo jugador. L('key') sin source usa el idioma por defecto del servidor, que es incorrecto para una notificación.

TriggerClientEvent('bs:ui:notify', src, { type = 'success', message = L(src, 'shop.bought', { item = label, price = 50 }) })
  • Elección del jugador: state bag bs_lang en el jugador.
  • Por defecto del servidor: GlobalState.bs_defaultLang (F1 Global.defaultLanguage, o la convar bs_defaultLanguage).
  • Guardado por cuenta en bs_users.language.
  • Cambiarlo dispara el evento de servidor bs_core:setLanguage.

Si el resource tiene un ui_page, el script de locales responde al callback NUI bs_i18n con { lang, dict } y envía la nueva tabla cuando cambia el idioma. Carga el helper y marca tu HTML:

<script src="nui://bs_ui/html/js/i18n.js"></script>
<span data-i18n="ui.level">LEVEL</span>

En JS: t('key', vars) y BSI18n.onChange(fn). Detalles en Idiomas.