v1.0.26
Runtime

API Runtime

Referencia tecnica para programadores que escriben sus propios scripts UdonSharp

Esta pagina es solo para programadores. Si solo quieres traducir los textos de tu mundo, no necesitas leerla: usa el Flujo Automatico con los componentes LocalizationManager y CanvasLocalizer. Esta referencia es util solo si vas a escribir tu propio script UdonSharp que interactua con el sistema de localizacion.

Descripcion

Esta pagina documenta todos los metodos publicos disponibles para interactuar con el sistema de localizacion desde tus propios scripts UdonSharp. Todos los componentes estan en el namespace BenderDios.Idiomas.

using BenderDios.Idiomas;

LocalizationManager

Obtener traducciones

MetodoRetornoDescripcion
GetValue(string key) string Obtiene la traduccion de una clave. Cascada: idioma actual → fallback → otros idiomas → "[key]".
GetPluralValue(string key, int count) string Traduccion con pluralizacion. Busca {key}_zero (count==0), {key}_one (count==1), {key}_other. Reemplaza {n} con count.

Gestion de idioma

MetodoRetornoDescripcion
SetLanguage(string lang) void Cambia el idioma activo. Notifica a todos los localizadores y listeners.
GetCurrentLanguage() string Devuelve el codigo del idioma activo (ej: "es", "ja").
GetAvailableLanguages() string[] Array con todos los codigos de idioma del JSON.
GetLanguageCount() int Numero de idiomas disponibles.
HasLanguage(string code) bool true si el idioma existe en el JSON.
IsReady() bool true si el manager esta inicializado y listo.

Registro de componentes

MetodoRetornoDescripcion
RegisterListener(UdonSharpBehaviour) void Registra un script para recibir _OnLanguageChanged.
RegisterLocalizer(TextLocalizer) void Registra un TextLocalizer en runtime.
RegisterCanvasLocalizer(CanvasLocalizer) void Registra un CanvasLocalizer en runtime.

Metodos sin parametros (para SendCustomEvent)

Estos metodos existen porque SendCustomEvent de VRChat no soporta parametros. Ideales para conectar botones de UI.

MetodoIdioma
SetLanguageAuto()Deteccion automatica
SetLanguageEnglish()en — English
SetLanguageSpanish()es — Español
SetLanguageJapanese()ja — 日本語
SetLanguageKorean()ko — 한국어
SetLanguageChineseSimplified()zh-CN — 中文 (简体)
SetLanguageChineseTraditional()zh-TW — 中文 (繁體)
SetLanguageRussian()ru — Русский
SetLanguagePortuguese()pt-BR — Português
SetLanguageFrench()fr — Français
SetLanguageGerman()de — Deutsch
SetLanguageCatalan()ca — Català
OnLanguageDropdownChanged()Callback del dropdown TMP

TextLocalizer

MetodoRetornoDescripcion
UpdateText() void Actualiza el texto con la traduccion actual. Se llama automaticamente.
SetTranslationKey(string newKey) void Cambia la clave de traduccion y actualiza el texto.
SetParams(string p0) void Establece {0} y actualiza.
SetParams2(string p0, string p1) void Establece {0} y {1} y actualiza.
SetParams3(string p0, string p1, string p2) void Establece {0}, {1} y {2} y actualiza.
GetTranslationKey() string Devuelve la clave actual.
GetManager() LocalizationManager Devuelve el manager.
SetManager(LocalizationManager m) void Establece el manager manualmente.

CanvasLocalizer

MetodoRetornoDescripcion
UpdateAllTexts() void Actualiza todos los textos del Canvas. Se llama automaticamente.
GetCanvasId() string Devuelve el ID del Canvas.
GetBaseLanguage() string Devuelve el idioma base.
GetManager() LocalizationManager Devuelve el manager.
GetTextCount() int Numero de textos gestionados.

Evento _OnLanguageChanged

Los scripts registrados como listener reciben este evento via SendCustomEvent cada vez que cambia el idioma activo. No recibe parametros (limitacion de UdonSharp).

Ejemplo completo

using UdonSharp;
using UnityEngine;
using TMPro;
using BenderDios.Idiomas;

public class LanguageReactor : UdonSharpBehaviour
{
    [SerializeField] private LocalizationManager _manager;
    [SerializeField] private TextMeshProUGUI _customText;

    void Start()
    {
        // Registrarse como listener
        _manager.RegisterListener(this);
        UpdateCustomText();
    }

    // Este metodo se llama automaticamente al cambiar idioma
    public void _OnLanguageChanged()
    {
        UpdateCustomText();
    }

    private void UpdateCustomText()
    {
        string lang = _manager.GetCurrentLanguage();
        string welcome = _manager.GetValue("custom_welcome");
        _customText.text = welcome;
    }
}

Formato del JSON

{
  "en": {
    "key1": "English text",
    "key2": "Text with {0} parameter",
    "messages_zero": "No messages",
    "messages_one": "{n} message",
    "messages_other": "{n} messages"
  },
  "es": {
    "key1": "Texto en español",
    "key2": "Texto con parametro {0}",
    "messages_zero": "Sin mensajes",
    "messages_one": "{n} mensaje",
    "messages_other": "{n} mensajes"
  }
}

Funcionalidades especiales en claves

FuncionalidadSintaxisDescripcion
Parametros {0}, {1}, {2} Reemplazados en runtime por SetParams()
Pluralizacion {key}_zero, {key}_one, {key}_other Variantes segun cantidad
Contador plural {n} Reemplazado con el valor de count
Rich text <color>, <b>, <i>, <size> Preservados durante la traduccion automatica
Saltos de linea \n Escapados en JSON, renderizados en Unity