Sistema de localització per a Unity

Canvi d'idioma en temps d'execució, pistes separades per a idioma de joc i de veu, i menús i modals localitzats des del primer moment.

Per a què serveix aquest sistema

La localització a Unity sembla senzilla i acaba tocant cada sistema. Els menús treuen etiquetes d'algun lloc, els modals necessiten traduccions, els clips d'àudio tenen variants de veu per idioma i els textos del joc apareixen en pantalles que no s'havien dissenyat per ser localitzades. Canviar d'idioma en temps d'execució implica empènyer actualitzacions cap a vistes que potser no escoltaven.

Serenity embolcalla les taules de Unity Localization amb un servei petit amb casos d'ús explícits. Exposa un contracte net per obtenir i establir l'idioma de joc actiu i el de veu actiu, i permet que la resta de la foundation accedeixi a cadenes localitzades sense dependre directament de Unity Localization.

El problema a Unity

Gairebé tots els projectes fan una de dues coses amb la localització. O bé couen textos en anglès dins dels prefabs i intenten retroalimentar traduccions més tard, o cablegen taules de Unity Localization peça a peça sobre cada component TextMeshPro. Les dues opcions envelleixen malament. La primera deixa el projecte intraduïble. La segona acobla l'UI a Unity Localization d'una manera difícil de testejar, reemplaçar o ampliar amb lògica pròpia.

Els idiomes de veu afegeixen una altra capa. El jugador pot preferir text en anglès amb veu en japonès, o castellà de text amb veu en anglès. La localització casolana rarament modela aquesta distinció, així que l'àudio cau al que vingui per defecte.

Com ho aborda Serenity

Serenity exposa la localització a través d'ILocalizationService, amb els casos d'ús LocalizationGetGameLanguage, LocalizationSetGameLanguage, LocalizationGetVoiceLanguage i LocalizationSetVoiceLanguage. Les taules es descriuen mitjançant ILocalizationTable i ILocalizationSettings a la capa de Domini. La implementació Unity, UnityLocalizationService, connecta el servei amb el paquet oficial de Unity Localization a través de UnityLocalizationStringTable i UnityLocalizationAssetTable.

L'idioma de joc i el de veu són pistes independents. Pots canviar-ne un sense tocar l'altre, i el codi de joc observa tots dos a través del mateix servei. El Sistema de Menús i el de Modals resolen les seves etiquetes a través d'aquest servei, així que canviar d'idioma actualitza el text de l'UI sense recarregar l'escena.

Com encaixa a Serenity

El Sistema de Localització pertany al namespace Serenity.Localization i segueix la mateixa divisió per capes que la resta de la foundation. Les entitats de Domini descriuen les taules i els ajustos. La capa d'Aplicació exposa els casos d'ús i el contracte ILocalizationService. La capa d'Infraestructura aporta UnityLocalizationService i les taules amb backing d'assets. Un UnityLocalizationInstaller registra el servei perquè la resta de sistemes el resolguin a través d'interfícies.

La localització la consumeix gairebé tota la foundation. El Sistema de Menús i el de Modals busquen etiquetes a través del servei. Els Temes d'UI poden portar dades visuals o sonores localitzades quan cal. Game Settings pot persistir els idiomes triats perquè el jugador conservi la seva tria entre sessions. Tractar la localització com un servei en lloc de com a components solts manté cada sistema poc acoblat a Unity Localization.

Flux de treball pràctic

  1. Configura les teves taules i locales de Unity Localization com de costum al projecte.
  2. Mapeja-les a definicions UnityLocalizationStringTable i UnityLocalizationAssetTable perquè Serenity les pugui llegir.
  3. Deixa que l'instal·lador de Unity Localization registri el servei a la pipeline d'inicialització.
  4. Llegeix l'idioma actiu des d'ILocalizationService dins de vistes o presenters quan necessitin una etiqueta.
  5. Crida LocalizationSetGameLanguage o LocalizationSetVoiceLanguage per canviar d'idioma en temps d'execució.
  6. Persisteix la tria del jugador amb Game Settings per restaurar el mateix idioma a la sessió següent.

Què inclou

  • ILocalizationService amb casos d'ús explícits per a idioma de joc i de veu
  • Pistes independents d'idioma de joc i de veu
  • Interfícies de Domini ILocalizationTable i ILocalizationSettings
  • Implementació Unity recolzada per les taules i assets de Unity Localization
  • Embolcalls UnityLocalizationStringTable i UnityLocalizationAssetTable
  • Canvi d'idioma en temps d'execució que es propaga pel servei
  • Integració amb menús, modals i altres sistemes de Serenity
  • Instal·lador que registra el servei de localització una sola vegada al projecte

Quan fer-lo servir

  • Projectes que es publiquen en més d'un idioma o esperen fer-ho en el futur.
  • Jocs que diferencien entre idioma de pantalla i idioma de veu.
  • Equips que volen mantenir el codi de joc desacoblat de Unity Localization però seguir fent servir les seves taules.
  • Bases de codi que necessiten canviar d'idioma en temps d'execució sense recàrregues d'escena.

Sistemes relacionats

Utilitza Serenity quan vulguis una capa de localització que ja coopera amb menús, modals i ajustos, però que segueix deixant-te mantenir les taules de Unity Localization com a única font de veritat.

Tornar a la pàgina principal