Hola En este artículo compartiré mi experiencia de localización de juegos y aplicaciones en Unity, y hablaré sobre mi complemento de localización simple, que está disponible en Asse Store. El nivel del artículo es fácil. No habrá ningún código, no será útil para usted.

Desde el punto de vista del concepto general, todo es simple. Deberíamos tener una lista de diccionarios para cada idioma con las mismas claves, de la cual recibiremos valores localizados. Desde el punto de vista técnico, debe determinar:
- ¿Cuáles serán nuestros diccionarios?
- ¿Dónde serán almacenados?
- ¿Cómo los editaremos y expandiremos?
- ¿Cómo implementar un paquete con la interfaz de la aplicación?
En la implementación, me guié por dos principios: simplicidad y conveniencia. Entonces, el formato estructurado más simple que es adecuado para los diccionarios es CSV (valores separados por comas). Este es un archivo de texto en el que todas las celdas están separadas por un separador, ya sea una coma (",") o un punto y coma (";"), según la configuración regional. CSV se puede abrir y editar en cualquier editor de texto, pero Excel es lo mejor para esto. Los CSV, por supuesto, se almacenarán en la carpeta Recursos para que la aplicación pueda leerlos en cualquier momento.
El formato será el siguiente: la primera columna son las claves, todas las columnas posteriores son diccionarios. La primera línea es el título. Puede tener un CSV común, si hay pocos textos en la aplicación, pero puede dividirlo en varios CSV de acuerdo con algún principio, por ejemplo: menús, configuraciones, logros, etc.
Adelante Editar la localización en Excel es genial, por supuesto, pero sugiero subirlos a Google Sheets. Luego puede editarlos desde cualquier lugar, en cualquier momento y desde cualquier dispositivo. Pero lo más importante es que la localización se puede compartir entre los traductores, y no tendrán dificultades con la traducción. Puedes mirar el diccionario
aquí .

Y el último punto es la integración con Unity, con uGUI. Aquí, también, todo es simple: para cada componente de texto
Texto agregamos nuestro componente
LocalizedText , en el que indicamos la clave. Cuando se inicie, este componente recibirá un valor localizado y lo establecerá en
Texto .

Luego surgen algunas preguntas:
- ¿Cómo y cuándo inicializar un diccionario? Es suficiente hacer una llamada a LocalizationManager.Leer desde el script de control. Esto se puede hacer en Despertar o Iniciar, si está satisfecho con la detección automática del idioma ( Application.systemLanguage ), o después de cargar el perfil cuando ya se conoce la configuración del usuario.
- ¿Qué sucede si no sabemos de antemano exactamente qué valor tendrá el componente Texto ? No agregamos el componente LocalizedText , y luego le asignamos un valor del código, accediendo al diccionario a través de LocalizationManager.Localize (string localizationKey) .
- ¿Qué debo hacer si necesito insertar un parámetro en un valor localizado? Simplemente usamos el formato en la cadena localizada, por ejemplo, "Nivel {0}", y luego a través de la cadena. Formateamos la sustitución. Para esto hay una sobrecarga de LocalizationManager.Localize (string localizationKey, params object [] args) .
- ¿Cómo cambiar la localización en tiempo de ejecución? Simplemente cambie el idioma a través de LocalizationManager.Language. Esto generará un evento al que todos los componentes de LocalizedText están suscritos. Sin embargo, los componentes de texto localizados desde el código (que no tienen un componente LocalizedText ) deberán actualizarse manualmente.
- ¿Qué hacer con otros elementos, por ejemplo, con la lista desplegable desplegable? Obviamente use el componente LocalizedDropdown =)
Bueno, el último bollo en mi activo: puede descargar automáticamente todas las hojas de Hojas de cálculo de Google y guardarlas en los recursos del juego. Hay un componente
LocalizationSync para esto, que tiene un botón
Sync (en el inspector).
Puede descargarlo en Asset Store:
localización simple .