¿Por qué es crucial utilizar Locale?

Por Andrés González

Introducción

En los últimos años me he enfrentado a proyectos en los cuales se necesitaban que las aplicaciones fueran multi idioma, lo cual hacía fundamental realizar un buen tratamiento de los datos que los usuarios introducían.

Por eso, voy hablar sobre algo del core de Java, como es la clase Locale. Contaré cómo influye en la manipulación de cadenas de texto y por qué ignorar ésto puede llevar a resultados inesperados cuando las aplicaciones son multilingüe.

¿Qué es Locale y por qué es relevante?

Locale en Java representa una configuración regional que afecta al formato de fechas, números, y también a la forma en que se manejan las cadenas de texto. Cada región o idioma puede tener reglas particulares para la conversión de mayúsculas y minúsculas, lo que hace que su uso sea crítico para asegurar que estas operaciones se realizan según las convenciones locales.

Si no se especifica un Locale, se utilizará el lenguaje del sistema donde se instale la aplicación de manera predeterminada, el cual podemos desconocer. Esto puede llevar a resultados inesperados si el sistema utiliza un idioma o configuración regional diferente a la esperada.

Conversión de cadenas a mayúsculas/minúsculas

Al convertir texto entre mayúsculas y minúsculas, el Locale juega un papel fundamental para garantizar resultados precisos según el idioma. 

Por ejemplo, en turco, la letra «i» minúscula tiene una versión mayúscula que es «?» (i con punto). Sin embargo, en el caso del inglés o del español, la letra «i» minúscula se convierte a «I» mayúscula. Si no se especifica un Locale adecuado, la conversión podría producir resultados incorrectos.

Conversión de cadenas a mayúsculas/minúsculas

Conversión de cadenas a mayúsculas/minúsculas

Al ejecutar el código anterior, podemos observar que el resultado es distinto dependiendo del Locale utilizado.

El resultado es distinto dependiendo del Locale utilizado.

Manipulación de cadenas con fechas

También, el Locale afecta en el tratamiento de fechas. En Estados Unidos, el formato es mes,día,año (MM/dd/yyyy); En Europa es día, mes, año (dd/MM/yyyy).

En el siguiente ejemplo, el sistema está utilizando por defecto el juego de caracteres de España

Manipulación de cadenas con fechas

En la salida del programa, podemos apreciar como la interpretación de la fecha puede cambiar si utilizamos un Locale u otro.

En la salida del programa, podemos apreciar como la interpretación de la fecha puede cambiar si utilizamos un Locale u otro.

También puede ocurrir que, al no informar qué Locale utilizar podría haber una excepción en el formateo de fechas.

Veámoslo con un ejemplo:

También puede ocurrir que, al no informar qué Locale utilizar podría haber una excepción en el formateo de fechas.

Cuando ejecutemos esto, aparecerá lo siguiente:

Cuando ejecutemos esto, aparecerá lo siguiente:

Esto ocurre por lo mencionado anteriormente, el formato de fechas de Estados Unidos es MM/dd/yyyy, y por lo tanto, al querer parsearla dará error.

Transformación de cadenas con números

Ésto también afecta a las cadenas con números ya que en diferentes idiomas y regiones se usan diferentes separadores de decimales y de miles. 

En Reino Unido, se utiliza la coma (,) como separador de miles y el punto (.) como separador de decimales.

Pero en Suiza, se utiliza el apóstrofe (‘) como separador de miles y el punto como separador de decimales.

Transformación de cadenas con números

Al correr el código nos dará el siguiente resultado:

Al correr el código nos dará el siguiente resultado:

Con esto vemos que dependiendo del Locale, el formato va a cambiar.

Al igual que en el tratamiento de las fechas, podría lanzarse en una excepción al intentar transformar un número con un formato que no es compatible con el del Locale que tiene el sistema.

Lo ilustro con el siguiente ejemplo:

Dependiendo del Locale, el formato va a cambiar.

Cuando corremos esto, aparecerá lo siguiente:

Cuando corremos esto, aparecerá lo siguiente:

¿Qué ventajas tiene usar Locale?

Los beneficios que nos aporta usarlo es que realizando esto nos aseguramos que en las conversiones se respeten las reglas de cada idioma y región. 

Además nos ayuda a evitar errores que puedan afectar a datos que se utilicen a nivel de negocio, tal como documentación para contratación, o en la visualización de los mismos en pantalla.

Buenas Prácticas

Como buenas prácticas una recomendación que puedo dar es la de especificar el Locale que se va a utilizar. Éste se podría jerarquizar de la siguiente manera para poder ser lo más preciso posible.

  1. Locale del usuario
  2. Locale de la compañía
  3. Locale de la aplicación
  4. Locale del sistema

También, recomiendo si queremos independizar la aplicación de cualquier idioma, utilizar la constante Locale.ROOT.

Conclusión

El uso de Locale en la manipulación de cadenas nos garantiza que nuestras aplicaciones funcionen correctamente en entornos multilingües o internacionales. Al no especificarlo, nos arriesgamos a depender del predeterminado del sistema, lo que puede darnos errores o inconsistencia en el tratamiento de los datos.

 

<span style="font-size:80%">Autor </span><a href="https://blog.kairosds.com/author/andresgonzalez/" target="_self">Andrés González</a>

Autor Andrés González

Feb 11, 2025

Otros artículos

Hilos virtuales VS Hilos tradicionales en Java 21

Hilos virtuales VS Hilos tradicionales en Java 21

Por Mariya Pomitun Hilos Virtuales vs Hilos Tradicionales: Un Análisis de Rendimiento en Java 21 En el entorno empresarial actual, donde la demanda de servicios digitales crece de forma exponencial, la capacidad de una aplicación para gestionar eficientemente miles de...