Este post forma parte de una serie de artículos donde estaré compartiendo todo lo necesario para utilizar, configurar y sacar el mayor provecho de Azure AD B2C.

En el post anterior (parte 2) vimos cómo configurar las traducciones de los atributos de usuario simples con el atributo Intereses, incluyendo el texto que se muestra al usuario y el hint.

En esta tercera y última parte, veremos cómo configurar las traducciones para los atributos de usuario personalizados complejos o colecciones como es el caso de Nivel de Inglés.

IMPORTANTE: vamos a construir sobre la base del post anterior, con lo cual es recomendable tener claros los conceptos y pasos allí detallados.

Contexto

Algunos de los atributos de usuario que Azure AD B2C ofrece son sólo un texto libre, como en el caso de Intereses, en el cual el usuario simplemente ingresa una o varias palabras.

Sin embargo, algunos atributos de usuario, como es el caso de Nivel de Inglés, requieren que el usuario seleccione uno o varios valores de una lista finita de opciones, donde cada opción tiene su propia traducción.

Para estos casos, no sólo debemos proveer de la traducción para el texto de referencia y el hint, si no que también debemos proveer la traducción correspondiente a cada una de las opciones asociadas.

Cuando configuramos los atributos de usuario incluimos el atributo inglés con una lista de opciones disponibles con su respectiva descripción que luego se ve reflejada en la pantalla de registro de usuario. En la siguiente imagen vemos a la izquierda la lista de valores con sus descripciones y a la derecha como lo ve el usuario.

Atributo Inglés – Valores y ComboBox

NOTA: Usaremos el atributo ingles como ejemplo para el resto del artículo, pero el procedimiento aplica de igual manera para el resto de los atributos de usuario que implican una lista o colección de valores.

Requerimientos

Todas las descripciones y opciones que son visibles al usuario deben ser traducidas en función del idioma seleccionado. Así por ejemplo la descripción del atributo ingles para el idioma Español debería ser Nivel de Inglés, mientras que para el idioma Inglés debería ser English Level.

En la siguiente tabla vemos cómo queda cada valor con su correspondiente traducción:

Nivel de Inglés – Tabla de valores por idioma

Con los requerimientos claros y bien definidos estamos listos para la implementación.

Implementación

Comenzaremos con la descripción y el hint del atributo en primer lugar. En este caso es igual al procedimiento que implementamos con el atributo intereses en el post anterior

Descripción y hint

  1. En la sección de idiomas del flujo de usuario seleccionamos el idioma Inglés y descargamos el archivo de recursos Página de registro con cuenta local.
Flujo de Usuario – Pagina de registro con cuenta local
  1. Abrimos el archivo de recursos y buscamos “ingles”. Modificamos los valores acorde a la tabla anterior, asegurándonos de modificar solo la sección que se encuentra dentro de LocalizedStrings.
Archivo de Recursos - Modificación
Archivo de Recursos – Modificación
  1. Este paso es opcional, pero para validar que los cambios fueron correctos, podemos subir el archivo y ejecutar el flujo de usuario para verificar que el atributo ingles refleje los cambios esperados para el idioma Inglés. La descripción del atributo debe decir English Level, no así la lista de opciones.
Nivel de Inglés – Descripción

Lista de opciones

Ahora procedemos con la implementación de la lista de opciones disponibles, vamos a editar el mismo archivo de recursos y repetiremos el paso 2, solo que esta vez modificaremos los valores dentro de la sección LocalizedCollections.

Solo es necesario modificar la propiedad name de cada opción, la propiedad value se mantendrá sin modificaciones:

Archivo de Recursos - Modificación Colección
Archivo de Recursos – Modificación Colección

Subimos el archivo y ejecutamos el flujo de usuario para validar los cambios. Esta vez el combo de Nivel del Inglés debería verse de la siguiente forma:

Nivel de Inglés – Descripción de valores

Al editar las colecciones como lo hicimos en el paso anterior, también podemos agregar o eliminar ítems de la lista. Esto nos da la libertad de poder decidir qué opciones utilizar para cada idioma.

Este mismo procedimiento lo repetiremos también para el idioma Español, editando el archivo de recursos correspondiente. De esta forma el flujo de usuario quedará completo para ambos idiomas.

Azure AD B2C Localized Collections

La sección Localized Collections es un arreglo (array) JSON que contiene lista de elementos utilizados para crear los atributos de usuario del tipo colección. Tiene su contraparte en la sección Localized Strings identificado por la propiedad ElementId.

En esta sección encontraremos todas las listas correspondientes a los atributos usuarios del tipo colección.

¿Atributos del tipo booleanos con Azure AD B2C?

En algunos casos vamos a necesitar opciones del tipo Si o No o Verdadero o Falso cuyo valor debe ser tratado como booleano, es decir, independientemente de la descripción el valor debe ser “true” o “false”.

Esto es fácilmente realizable utilizando el siguiente procedimiento:

  1. Crear el atributo de usuario indicando como tipo de dato booleano (ver articulo Configuración de Usuarios).
  2. Configurar el flujo de usuario para mostrar el nuevo atributo como RadioSingleSelect.
  3. Modificar la sección LocalizedColleccions del atributo en cuestión de la siguiente forma:

Conclusiones

  • Si bien la configuración de idioma para atributos personalizados requiere un poco más de trabajo, no deja de ser simple.
  • No hay necesidad de utilizar herramientas adicionales, solo con un editor de texto es suficiente. Azure AD B2C ofrece un portal muy intuitivo que hace muy simple su configuración.

Próximos pasos…

En el próximo post veremos cómo configurar JWT tokens para incluir la información del usuario en forma de claims.

Si necesitas asesoramiento o ayuda, si tenés dudas o no sabes cómo comenzar, o te interesa conocer/aprender sobre otros servicios de Azure, contáctame y vemos juntos como encontrar la solución que necesitas.