Entonces, si observamos la especificación ECMAScript, la versión estandarizada de JavaScript define cómo se deben interpretar los caracteres como UCS 2 o UTF 16. UCS 2 es un conjunto de caracteres universal de dos bytes en comparación con UTF 16, que es un formato de transformación Unicode de 16 bits. Estos son dos sistemas diferentes y contrastantes. Por lo tanto, esto crea muchos errores extraños e interesantes en JavaScript al tratar la codificación de caracteres. Debido a estos sistemas contrastantes, uno siempre tiene dos bytes y el otro utiliza pares de sustitución.
Hablemos de algunos de esos errores comunes que vemos. El primero es con los caracteres combinados. Los caracteres combinados son aquellos en los que tomamos un punto de código Unicode para la letra minúscula `a` en latín, y luego agregamos un punto de código de carácter combinado. Aquí tenemos un anillo combinado encima. Así es como se representa un carácter de nombre de gráfico atómico danés que tiene una `a` con un pequeño círculo encima, por lo que la `a` con un pequeño círculo encima son dos puntos de código separados que se combinan en uno solo. Entonces, si tomamos estos dos caracteres separados y los mostramos en la consola, podemos ver que se devuelve la `a` con un pequeño círculo encima. Genial, pero debido a que son dos caracteres separados, podemos ver algunos problemas.
Similar a esa `a` con un círculo encima, tenemos la `e` con la `e` acentuada en `café`, que vemos en español. Entonces, si definimos esa variable como `drink`, con C-A-F-E con el último punto de código combinado como el acento en `café`, y luego mostramos esa variable `drink` en la consola, podemos ver que se devuelve `café`. Pero luego, si verificamos la longitud de `drink`, la longitud es cinco. Y si intentamos dividir esa cadena en un array, podemos ver que el índice final del array es ese punto de código combinado. Como puedes imaginar, surgirán muchas confusiones al manipular cadenas con caracteres combinados, cuando olvidas que existen estas secuencias de código. Entonces, ¿cómo podemos manejar eso? Usando el método normalize que está incorporado en JavaScript. El método string.prototype.normalize devuelve la forma de normalización Unicode de la cadena. Lo cual es realmente útil, directamente desde JavaScript. Entonces, si tomamos esa misma variable `drink`, que es `café` con el punto de código combinado, y normalizamos esa cadena, ahora podemos ver que la longitud se devuelve como cuatro, y el índice final del array al dividirlo es la `e` con el acento encima. Entonces no obtenemos ese índice adicional con el punto de código combinado. Esto es realmente útil para evitar errores de localización al manipular cadenas. Pero también es muy importante desde la perspectiva humana. Recientemente vi este tweet que dice: encontrado en un sitio web del gobierno de EE. UU., esto es lo que es el racismo sistémico, es cuando las personas son excluidas. Entonces, esta persona Raquel Velez, su apellido está en español y tiene un acento sobre la `e`, pero no puede ingresar su apellido en el campo de apellido de un formulario del gobierno de EE. UU. debido al punto de código combinado en Unicode que está creando problemas de codificación aquí. Al solucionar problemas simples de cadenas y codificación, podemos ayudar a resolver estos problemas a nivel humano.
Entonces, pasemos al segundo consejo, envolver todas las cadenas en un objeto para la traducción. Desde un ejemplo de seudocódigo a un nivel muy alto aquí, podemos tomar una cadena `hello` codificada en duro de `hello world` y luego, esto es una cadena codificada en duro, esto es lo que no debemos hacer, pero lo que podemos hacer en su lugar es tomar esta cadena y envolverla en un objeto de internacionalización donde tenemos una lista de recursos para cada una de las diferentes ubicaciones. Entonces aquí podemos ver que el inglés tiene un objeto con la clave del mensaje de saludo que es igual al valor de la clave, el valor es `hello world`.
Comments