Compartir a través de


Personalización del idioma en Azure Active Directory B2C

Importante

A partir del 1 de mayo de 2025, Azure AD B2C ya no estará disponible para ser adquirido por nuevos clientes. Obtenga más información en nuestras preguntas más frecuentes.

Antes de empezar, use el selector Elegir un tipo de directiva en la parte superior de esta página para elegir el tipo de directiva que está configurando. Azure Active Directory B2C ofrece dos métodos para definir cómo interactúan los usuarios con las aplicaciones: a través de flujos de usuario predefinidos o mediante directivas personalizadas totalmente configurables. Los pasos necesarios en este artículo son diferentes para cada método.

La personalización de idioma en Azure Active Directory B2C (Azure AD B2C) permite al flujo de usuario adaptarse a diferentes idiomas para satisfacer las necesidades del cliente. Microsoft proporciona las traducciones de 36 idiomas, pero también puede proporcionar sus propias traducciones para cualquier idioma. Incluso si su experiencia se proporciona solo para un solo idioma, puede personalizar cualquier texto de las páginas.

¿Cómo funciona la personalización de idioma?

Use la personalización de idioma para seleccionar los idiomas en los que está disponible el flujo de usuario. Una vez habilitada la característica, puede proporcionar el parámetro de cadena de consulta, ui_locales, desde la aplicación. Al llamar a Azure AD B2C, la página se traduce a la configuración regional que ha indicado. Este tipo de configuración le proporciona control total sobre los idiomas del flujo de usuario y omite la configuración de idioma del explorador del cliente.

Es posible que no necesite ese nivel de control sobre qué idiomas ve el cliente. Si no proporciona un ui_locales parámetro, la configuración del explorador determina la experiencia del cliente. Todavía puede controlar a qué idiomas se traduce el flujo de usuario agregándolo como idioma admitido. Si el explorador de un cliente está establecido para mostrar un idioma que no desea admitir, se muestra en su lugar el idioma que seleccionó como valor predeterminado en las referencias culturales admitidas.

  • Idioma especificado por ui-locales: después de habilitar la personalización del idioma, el flujo de usuario se traduce al idioma especificado aquí.
  • Idioma solicitado por el explorador: si no se especificó ningún ui_locales parámetro, el flujo de usuario se traduce al idioma solicitado por el explorador, si se admite el idioma.
  • Idioma predeterminado de la directiva: si el explorador no especifica un idioma o especifica uno que no se admite, el flujo de usuario se traduce al idioma predeterminado del flujo de usuario.

Nota:

Si usa atributos de usuario personalizados, debe proporcionar sus propias traducciones. Para obtener más información, consulte Personalización de las cadenas.

Vea este vídeo para aprender a localizar o personalizar el idioma mediante Azure AD B2C.

La localización requiere tres pasos:

  1. Configurar la lista explícita de idiomas admitidos
  2. Proporcionar cadenas y colecciones específicas para el idioma
  3. Edite la definición de contenido de la página.

Prerrequisitos

Compatibilidad con idiomas solicitados para ui_locales

Las directivas que se crearon antes de la disponibilidad general de la personalización de idioma deben habilitar esta característica en primer lugar. Directivas y flujos de usuario que se crearon después de habilitar la personalización de idioma de forma predeterminada.

Al habilitar la personalización de idioma en un flujo de usuario, puede controlar el idioma del flujo de usuario agregando el ui_locales parámetro .

  1. En el inquilino de Azure AD B2C, seleccione Flujos de usuario.
  2. Haga clic en el flujo de usuario que desea habilitar para las traducciones.
  3. Seleccione Idiomas.
  4. Seleccione Habilitar personalización de idioma.

Selección de los idiomas del flujo de usuario habilitados

Habilite un conjunto de idiomas para que el flujo de usuario se traduzca a cuando lo solicite el explorador sin el ui_locales parámetro .

  1. Asegúrese de que el flujo de usuario tenga habilitada la personalización de idioma de las instrucciones anteriores.
  2. En la página Idiomas del flujo de usuario, seleccione un idioma que quiera admitir.
  3. En el panel de propiedades, cambie Habilitado a .
  4. Seleccione Guardar en la parte superior del panel de propiedades.

Nota:

Si no se proporciona un ui_locales parámetro, la página se traduce al idioma del explorador del cliente solo si está habilitado.

Personalización de las cadenas

La personalización de idioma le permite personalizar cualquier cadena del flujo de usuario.

  1. Asegúrese de que el flujo de usuario tenga habilitada la personalización de idioma de las instrucciones anteriores.
  2. En la página Idiomas del flujo de usuario, seleccione el idioma que desea personalizar.
  3. En Archivos de recursos a nivel de página, seleccione la página que desea editar.
  4. Seleccione Descargar valores predeterminados (o Descargar invalidaciones si ha editado previamente este idioma).

Estos pasos le proporcionan un archivo JSON que puede usar para comenzar a editar las cadenas.

Cambio de cualquier cadena en la página

  1. Abra el archivo JSON descargado según las instrucciones anteriores en un editor JSON.
  2. Busque el elemento que desea cambiar. Puede encontrar el valor de StringId de la cadena que busca o buscar el atributo Value que quiere cambiar.
  3. Actualice el atributo Value con el que quiere que se muestre.
  4. Para cada cadena que desea cambiar, cambie Override a true.
  5. Guarde el archivo y cargue los cambios. (Puede encontrar el control de carga en el mismo lugar en el que descargó el archivo JSON).

Importante

Si necesita sobrescribir una cadena, asegúrese de establecer el valor en Overridetrue. Si el valor no cambia, se omite la entrada.

Cambio de los atributos de extensión

Si quiere cambiar la cadena de un atributo de usuario personalizado, o quiere agregar una a JSON, debe estar en el siguiente formato:

{
  "LocalizedStrings": [
    {
      "ElementType": "ClaimType",
      "ElementId": "extension_<ExtensionAttribute>",
      "StringId": "DisplayName",
      "Override": true,
      "Value": "<ExtensionAttributeValue>"
    }
    [...]
  ]
}

Reemplace <ExtensionAttribute> por el nombre de su atributo de usuario personalizado.

Reemplace <ExtensionAttributeValue> por la nueva cadena que se mostrará.

Entrega de una lista de valores mediante LocalizedCollections

Si desea proporcionar una lista establecida de valores para respuestas, debe crear un atributo LocalizedCollections. LocalizedCollections es una matriz de pares de Name y Value. El orden de los elementos será el orden en el que se muestran. Para agregar LocalizedCollections, utilice el siguiente formato:

{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType":"ClaimType",
      "ElementId":"<UserAttribute>",
      "TargetCollection":"Restriction",
      "Override": true,
      "Items":[
        {
          "Name":"<Response1>",
          "Value":"<Value1>"
        },
        {
          "Name":"<Response2>",
          "Value":"<Value2>"
        }
      ]
    }
  ]
}
  • ElementId es el atributo de usuario para el que este atributo LocalizedCollections es una respuesta.
  • Name es el valor que se muestra al usuario.
  • Value es lo que se devuelve en la notificación cuando se selecciona esta opción.

Carga de los cambios

  1. Una vez completados los cambios en el archivo JSON, vuelva al inquilino B2C.
  2. Seleccione Flujos de usuario y haga clic en el flujo de usuario que desea habilitar para las traducciones.
  3. Seleccione Idiomas.
  4. Seleccione el idioma al que quiere traducir.
  5. Seleccione la página donde desea proporcionar traducciones.
  6. Seleccione el icono de carpeta y el archivo JSON para cargar.

Este cambio se guarda en el flujo de usuario automáticamente.

Personalización de la interfaz de usuario de la página mediante la personalización de idioma

Hay dos maneras de localizar el contenido HTML. Una manera es activar la personalización del idioma. La habilitación de esta característica permite a Azure AD B2C reenviar el parámetro OpenID Connect, ui-locales, al punto de conexión. El servidor de contenido puede usar este parámetro para proporcionar páginas HTML personalizadas específicas del idioma.

Como alternativa, puede extraer contenido de distintos lugares, según la configuración regional usada. En el punto de conexión habilitado para CORS, puede configurar una estructura de carpetas para hospedar contenido para idiomas específicos. Se llamará al adecuado si usa el valor de carácter comodín {Culture:RFC5646}. Por ejemplo, supongamos que se trata del URI de página personalizado:

https://wingtiptoysb2c.blob.core.windows.net/{Culture:RFC5646}/wingtip/unified.html

Puede cargar la página usando fr. Cuando la página extrae contenido HTML y CSS, se extrae de:

https://wingtiptoysb2c.blob.core.windows.net/fr/wingtip/unified.html

Agregar idiomas personalizados

También puede agregar idiomas para los que Microsoft actualmente no proporciona traducciones. Deberá proporcionar las traducciones de todas las cadenas del flujo de usuario. Los códigos de idioma y configuración regional están limitados a los del estándar ISO 639-1. El formato de código de configuración regional debe ser "ISO_639-1_code"-"CountryCode", por ejemplo en-GB. Para obtener más información, consulte los formatos de identificación regional.

  1. En el inquilino de Azure AD B2C, seleccione Flujos de usuario.
  2. Haga clic en el flujo de usuario donde desea agregar idiomas personalizados y, a continuación, haga clic en Idiomas.
  3. Seleccione Agregar idioma personalizado en la parte superior de la página.
  4. En el panel de contexto que se abre, identifique el idioma para el que va a proporcionar traducciones escribiendo un código de configuración regional válido.
  5. Puede descargar para cada página un conjunto de invalidaciones para inglés y trabajar en las traducciones.
  6. Una vez que haya terminado con los archivos JSON, puede cargarlos para cada página.
  7. Seleccione Habilitar y el flujo de usuario ahora puede mostrar este idioma para los usuarios.
  8. Guarde el idioma.

Importante

Debe habilitar los idiomas personalizados o cargar invalidaciones para poder guardar.

Configurar la lista de idiomas admitidos

Abra el archivo de extensiones de su política. Por ejemplo: SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  1. Busque el elemento BuildingBlocks . Si el elemento no existe, agréguelo.
  2. Agregue el Localization elemento con los idiomas admitidos: inglés (valor predeterminado) y español.
<Localization Enabled="true">
  <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll">
    <SupportedLanguage>en</SupportedLanguage>
    <SupportedLanguage>es</SupportedLanguage>
  </SupportedLanguages>
</Localization>

Proporcionar etiquetas específicas del idioma

LocalizedResources del Localization elemento contiene la lista de cadenas localizadas. El elemento de recursos localizados tiene un identificador que se usa para identificar de forma única los recursos localizados. Este identificador se usa más adelante en el elemento de definición de contenido .

Los elementos de recursos localizados se configuran para la definición de contenido y cualquier idioma que desee admitir. Para personalizar las páginas de registro o de inicio de sesión unificadas para inglés y español, agregue los siguientes LocalizedResources elementos después del cierre del </SupportedLanguages> elemento.

Nota:

En el ejemplo siguiente se ha agregado el símbolo de almohadilla # al comienzo de cada línea, por lo que puede encontrar fácilmente las etiquetas localizadas en la pantalla.

<!--Local account sign-up or sign-in page English-->
<Localization Enabled="true">
  ...
 <LocalizedResources Id="api.signuporsignin.en">
        <LocalizedStrings>
          <LocalizedString ElementType="ClaimType" ElementId="signInName" StringId="DisplayName">Email Address</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="heading">Sign in</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="social_intro">Sign in with your social account</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="local_intro_generic">Sign in with your {0}</LocalizedString>
          <LocalizedString ElementType="ClaimType" ElementId="password" StringId="DisplayName">Password</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="requiredField_password">Please enter your password</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="requiredField_generic">Please enter your {0}</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="invalid_generic">Please enter a valid {0}</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="createaccount_one_link">Sign up now</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="createaccount_two_links">Sign up with {0} or {1}</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="createaccount_three_links">Sign up with {0}, {1}, or {2}</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="forgotpassword_link">Forgot your password?</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="button_signin">Sign in</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="divider_title">OR</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="createaccount_intro">Don't have an account?</LocalizedString>
          <LocalizedString ElementType="UxElement" StringId="unknown_error">We are having trouble signing you in. Please try again later.</LocalizedString>
          <!-- Uncomment the remember_me only if the keep me signed in is activated. 
          <LocalizedString ElementType="UxElement" StringId="remember_me">Keep me signed in</LocalizedString> -->
          <LocalizedString ElementType="ClaimsProvider" StringId="FacebookExchange">Facebook</LocalizedString>
          <LocalizedString ElementType="ErrorMessage" StringId="ResourceOwnerFlowInvalidCredentials">Your password is incorrect.</LocalizedString>
          <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfInvalidPassword">Your password is incorrect.</LocalizedString>
          <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfPasswordExpired">Your password has expired.</LocalizedString>
          <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimsPrincipalDoesNotExist">We can't seem to find your account.</LocalizedString>
          <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfOldPasswordUsed">Looks like you used an old password.</LocalizedString>
          <LocalizedString ElementType="ErrorMessage" StringId="DefaultMessage">Invalid username or password.</LocalizedString>
          <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfUserAccountDisabled">Your account has been locked. Contact your support person to unlock it, then try again.</LocalizedString>
          <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfUserAccountLocked">Your account is temporarily locked to prevent unauthorized use. Try again later.</LocalizedString>
          <LocalizedString ElementType="ErrorMessage" StringId="AADRequestsThrottled">There are too many requests at this moment. Please wait for some time and try again.</LocalizedString>
        </LocalizedStrings>
      </LocalizedResources>
  <!--Local account sign-up or sign-in page Spanish-->
  <LocalizedResources Id="api.signuporsignin.es">
    <LocalizedStrings>
      <LocalizedString ElementType="UxElement" StringId="logonIdentifier_email">#Correo electrónico</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="requiredField_email">#Este campo es obligatorio</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="logonIdentifier_username">#Nombre de usuario</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="password">#Contraseña</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="createaccount_link">#Registrarse ahora</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="requiredField_username">#Escriba su nombre de usuario</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="createaccount_intro">#¿No tiene una cuenta?</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="forgotpassword_link">#¿Olvidó su contraseña?</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="divider_title">#O</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="cancel_message">#El usuario ha olvidado su contraseña</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="button_signin">#Iniciar sesión</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="social_intro">#Iniciar sesión con su cuenta de redes sociales</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="requiredField_password">#Escriba su contraseña</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="invalid_password">#La contraseña que ha escrito no está en el formato esperado.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="local_intro_username">#Iniciar sesión con su nombre de usuario</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="local_intro_email">#Iniciar sesión con su cuenta existente</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="invalid_email">#Escriba una dirección de correo electrónico válida</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="unknown_error">#Tenemos problemas para iniciar su sesión. Vuelva a intentarlo más tarde.  </LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="email_pattern">^[a-zA-Z0-9.!#$%&amp;'^_`\{\}~\-]+@[a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*$</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfInvalidPassword">#Su contraseña es incorrecta.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimsPrincipalDoesNotExist">#Parece que no podemos encontrar su cuenta.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfOldPasswordUsed">#Parece que ha usado una contraseña antigua.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="DefaultMessage">#El nombre de usuario o la contraseña no son válidos.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfUserAccountDisabled">#Se bloqueó su cuenta. Póngase en contacto con la persona responsable de soporte técnico para desbloquearla y vuelva a intentarlo.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfUserAccountLocked">#Su cuenta se bloqueó temporalmente para impedir un uso no autorizado. Vuelva a intentarlo más tarde.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="AADRequestsThrottled">#Hay demasiadas solicitudes en este momento. Espere un momento y vuelva a intentarlo.</LocalizedString>
    </LocalizedStrings>
  </LocalizedResources>
  <!--Local account sign-up page English-->
  <LocalizedResources Id="api.localaccountsignup.en">
    <LocalizedStrings>
      <LocalizedString ElementType="ClaimType" ElementId="email" StringId="DisplayName">#Email Address</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="email" StringId="UserHelpText">#Email address that can be used to contact you.</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="email" StringId="PatternHelpText">#Please enter a valid email address.</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="newPassword" StringId="DisplayName">#New Password</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="newPassword" StringId="UserHelpText">#Enter new password</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="newPassword" StringId="PatternHelpText">#8-16 characters, containing 3 out of 4 of the following: Lowercase characters, uppercase characters, digits (0-9), and one or more of the following symbols: @ # $ % ^ &amp; * - _ + = [ ] { } | \ : ' , ? / ` ~ " ( ) ; .</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="reenterPassword" StringId="DisplayName">#Confirm New Password</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="reenterPassword" StringId="UserHelpText">#Confirm new password</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="reenterPassword" StringId="PatternHelpText">#8-16 characters, containing 3 out of 4 of the following: Lowercase characters, uppercase characters, digits (0-9), and one or more of the following symbols: @ # $ % ^ &amp; * - _ + = [ ] { } | \ : ' , ? / ` ~ " ( ) ; .</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="displayName" StringId="DisplayName">#Display Name</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="displayName" StringId="UserHelpText">#Your display name.</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="surname" StringId="DisplayName">#Surname</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="surname" StringId="UserHelpText">#Your surname (also known as family name or last name).  </LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="givenName" StringId="DisplayName">#Given Name</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="givenName" StringId="UserHelpText">#Your given name (also known as first name).</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="button_continue">#Create</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="error_fieldIncorrect">#One or more fields are filled out incorrectly. Please check your entries and try again.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="error_passwordEntryMismatch">#The password entry fields do not match. Please enter the same password in both fields and try again.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="error_requiredFieldMissing">#A required field is missing. Please fill out all required fields and try again.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="helplink_text">#What is this?</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="initial_intro">#Please provide the following details.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="preloader_alt">#Please wait</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="required_field">#This information is required.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_but_edit">#Change e-mail</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_but_resend">#Send new code</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_but_send">#Send verification code</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_but_verify">#Verify code</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_code_expired">#That code is expired. Please request a new code.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_no_retry">#You've made too many incorrect attempts. Please try again later.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_retry">#That code is incorrect. Please try again.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_server">#We are having trouble verifying your email address. Please enter a valid email address and try again.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_throttled">#There have been too many requests to verify this email address. Please wait a while, then try again.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_info_msg">#Verification code has been sent to your inbox. Please copy it to the input box below.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_input">#Verification code</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_intro_msg">#Verification is necessary. Please click Send button.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_success_msg">#E-mail address verified. You can now continue.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="ServiceThrottled">#There are too many requests at this moment. Please wait for some time and try again.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimNotVerified">#Claim not verified: {0}</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimsPrincipalAlreadyExists">#A user with the specified ID already exists. Please choose a different one.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfIncorrectPattern">#Incorrect pattern for: {0}</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfInvalidInput">#{0} has invalid input.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfMissingRequiredElement">#Missing required element: {0}</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfValidationError">#Error in validation by: {0}</LocalizedString>
    </LocalizedStrings>
  </LocalizedResources>
  <!--Local account sign-up page Spanish-->
  <LocalizedResources Id="api.localaccountsignup.es">
    <LocalizedStrings>
      <LocalizedString ElementType="ClaimType" ElementId="email" StringId="DisplayName">#Dirección de correo electrónico</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="email" StringId="UserHelpText">#Dirección de correo electrónico que puede usarse para ponerse en contacto con usted.</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="email" StringId="PatternHelpText">#Introduzca una dirección de correo electrónico válida.  </LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="newPassword" StringId="DisplayName">#Nueva contraseña</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="newPassword" StringId="UserHelpText">#Escriba la contraseña nueva</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="newPassword" StringId="PatternHelpText">#De 8 a 16 caracteres, que contengan 3 de los 4 tipos siguientes: caracteres en minúsculas, caracteres en mayúsculas, dígitos (0-9) y uno o más de los siguientes símbolos: @ # $ % ^ &amp; * - _ + = [ ] { } | \\ : ' , ? / ` ~ \" ( ) ; .</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="reenterPassword" StringId="DisplayName">#Confirmar nueva contraseña</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="reenterPassword" StringId="UserHelpText">#Confirmar nueva contraseña</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="reenterPassword" StringId="PatternHelpText">#8 a 16 caracteres, que contengan 3 de los 4 tipos siguientes: caracteres en minúsculas, caracteres en mayúsculas, dígitos (0-9) y uno o más de los siguientes símbolos: @ # $ % ^ &amp; * - _ + = [ ] { } | \\ : ' , ? / ` ~ \" ( ) ; .</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="displayName" StringId="DisplayName">#Nombre para mostrar</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="displayName" StringId="UserHelpText">#Su nombre para mostrar.</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="surname" StringId="DisplayName">#Apellido</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="surname" StringId="UserHelpText">#Su apellido.</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="givenName" StringId="DisplayName">#Nombre</LocalizedString>
      <LocalizedString ElementType="ClaimType" ElementId="givenName" StringId="UserHelpText">#Su nombre (también conocido como nombre de pila).</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="button_continue">#Crear</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="error_fieldIncorrect">#Hay uno o varios campos rellenados de forma incorrecta. Compruebe las entradas y vuelva a intentarlo.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="error_passwordEntryMismatch">#Los campos de entrada de contraseña no coinciden. Escriba la misma contraseña en ambos campos y vuelva a intentarlo.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="error_requiredFieldMissing">#Falta un campo obligatorio. Rellene todos los campos necesarios y vuelva a intentarlo.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="helplink_text">#¿Qué es esto?</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="initial_intro">#Proporcione los siguientes detalles.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="preloader_alt">#Espere</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="required_field">#Esta información es obligatoria.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_but_edit">#Cambiar correo electrónico</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_but_resend">#Enviar nuevo código</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_but_send">#Enviar código de comprobación</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_but_verify">#Comprobar código</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_code_expired">#El código ha expirado. Solicite otro nuevo.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_no_retry">#Ha realizado demasiados intentos incorrectos. Vuelva a intentarlo más tarde.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_retry">#Ese código es incorrecto. Inténtelo de nuevo.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_server">#Tenemos problemas para comprobar la dirección de correo electrónico. Escriba una dirección de correo electrónico válida y vuelva a intentarlo.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_fail_throttled">#Ha habido demasiadas solicitudes para comprobar esta dirección de correo electrónico. Espere un poco y vuelva a intentarlo.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_info_msg">#Se ha enviado el código de verificación a su Bandeja de entrada. Cópielo en el siguiente cuadro de entrada.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_input">#Código de verificación</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_intro_msg">#La comprobación es obligatoria. Haga clic en el botón Enviar.</LocalizedString>
      <LocalizedString ElementType="UxElement" StringId="ver_success_msg">#Dirección de correo electrónico comprobada. Puede continuar.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="ServiceThrottled">#Hay demasiadas solicitudes en este momento. Espere un momento y vuelva a intentarlo.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimNotVerified">#Reclamación no comprobada: {0}</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimsPrincipalAlreadyExists">#Ya existe un usuario con el id. especificado. Elija otro diferente.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfIncorrectPattern">#Patrón incorrecto para: {0}</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfInvalidInput">#{0} tiene una entrada no válida.</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfMissingRequiredElement">#Falta un elemento obligatorio: {0}</LocalizedString>
      <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfValidationError">#Error en la validación de: {0}</LocalizedString>
    </LocalizedStrings>
  </LocalizedResources>
</Localization>

Edición de la definición de contenido con la localización

Pegue todo el contenido del elemento ContentDefinitions que copió como elemento secundario del elemento BuildingBlocks.

En el ejemplo siguiente, se agregan cadenas personalizadas de inglés (en) y español (es) a la página de registro o de inicio de sesión y a la página de registro de la cuenta local. LocalizedResourcesReferenceId para cada LocalizedResourcesReference es el mismo que su localización, pero se puede usar cualquier cadena como identificador. Por cada combinación de idioma y página, apunte al elemento LocalizedResources correspondiente que ha creado anteriormente.

<ContentDefinitions>
  <ContentDefinition Id="api.signuporsignin">
    <LocalizedResourcesReferences MergeBehavior="Prepend">
        <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.signuporsignin.en" />
        <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.signuporsignin.es" />
    </LocalizedResourcesReferences>
  </ContentDefinition>

  <ContentDefinition Id="api.localaccountsignup">
    <LocalizedResourcesReferences MergeBehavior="Prepend">
        <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.localaccountsignup.en" />
        <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.localaccountsignup.es" />
    </LocalizedResourcesReferences>
  </ContentDefinition>
</ContentDefinitions>

Carga y prueba de la directiva personalizada actualizada

Carga de la directiva personalizada

  1. Guarde el archivo de extensiones.
  2. Si tiene acceso a varios inquilinos, seleccione el icono Configuración en el menú superior para cambiar a su inquilino de Azure AD B2C desde el menú Directorios y suscripciones.
  3. Busque y seleccione Azure AD B2C.
  4. En Directivas, seleccione Identity Experience Framework.
  5. Seleccione Cargar directiva personalizada.
  6. Cargue el archivo de extensiones que ha cambiado anteriormente.

Probar la directiva personalizada con Ejecutar ahora

  1. Seleccione la directiva cargada y, a continuación, Ejecutar ahora.
  2. Deberías poder ver la página de registro o inicio de sesión en tu idioma.
  3. Haga clic en el vínculo de registro y podrá ver la página de registro localizada.
  4. Cambie el idioma predeterminado del explorador a español. O bien, puede agregar el parámetro ui_locales de cadena de consulta a la solicitud de autorización. Por ejemplo:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1A_signup_signin/oauth2/v2.0/authorize&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login&ui_locales=es

Información adicional

Etiquetas de personalización de la interfaz de usuario de página como invalidaciones

Cuando se habilita la personalización de idioma, las ediciones anteriores de etiquetas que usan la personalización de la interfaz de usuario de página se almacenan en un archivo JSON para inglés (en). Para seguir cambiando las etiquetas y otras cadenas, cargue los recursos de idioma en Personalización de idioma.

Actualización de traducciones

Microsoft se compromete a proporcionar las traducciones más actualizadas para que haga uso de ellas. Microsoft mejora continuamente las traducciones y garantiza su cumplimiento. Microsoft identificará errores y cambios en la terminología global y creará actualizaciones que funcionen perfectamente en su flujo de usuario.

Compatibilidad con idiomas que se leen de derecha a izquierda

Microsoft no proporciona actualmente compatibilidad con idiomas que se leen de derecha a izquierda. Para ello, puede usar configuraciones regionales personalizadas y CSS para cambiar la manera en la que se muestran las cadenas. Si necesita esta característica, vote por ella en Comentarios de Azure.

Traducciones de proveedores de identidades sociales

Microsoft proporciona el parámetro OIDC ui_locales a los inicios de sesión de redes sociales. Pero algunos proveedores de identidades de redes sociales, incluidas Facebook y Google, no los respetan.

Comportamiento del explorador

Microsoft Edge, Chrome y Firefox solicitan su idioma establecido. Si es un idioma admitido, se muestra antes el valor predeterminado.

Idiomas compatibles

Azure AD B2C incluye compatibilidad con los siguientes idiomas mediante códigos ISO 639-1. Azure AD B2C proporciona idiomas de flujo de usuario. Los idiomas de notificación de autenticación multifactor los proporciona la autenticación multifactor de Microsoft Entra.

Lenguaje Código de idioma Flujos de usuario Notificaciones de MFA
Árabe Ar X indica No. Marca de verificación verde.
Búlgaro Bg X indica No. Marca de verificación verde.
Bengalí Bn Marca de verificación verde. X indica No.
Catalán Ca X indica No. Marca de verificación verde.
Checo Cs Marca de verificación verde. Marca de verificación verde.
Danés Marca de verificación verde. Marca de verificación verde.
Alemán de Marca de verificación verde. Marca de verificación verde.
Griego El Marca de verificación verde. Marca de verificación verde.
Inglés en Marca de verificación verde. Marca de verificación verde.
Español es Marca de verificación verde. Marca de verificación verde.
Estonio Et X indica No. Marca de verificación verde.
Vasco UE X indica No. Marca de verificación verde.
Finlandés Fi Marca de verificación verde. Marca de verificación verde.
Francés Francia Marca de verificación verde. Marca de verificación verde.
Gallego Gl X indica No. Marca de verificación verde.
Gujarati Gu Marca de verificación verde. X indica No.
Hebreo él X indica No. Marca de verificación verde.
hindi hola Marca de verificación verde. Marca de verificación verde.
Croata h Marca de verificación verde. Marca de verificación verde.
Húngaro hu Marca de verificación verde. Marca de verificación verde.
Indonesio identificación X indica No. Marca de verificación verde.
Italiano eso Marca de verificación verde. Marca de verificación verde.
Japonés ja Marca de verificación verde. Marca de verificación verde.
Kazajo okey X indica No. Marca de verificación verde.
Kannada kN Marca de verificación verde. X indica No.
Coreano ko Marca de verificación verde. Marca de verificación verde.
Lituano Lt X indica No. Marca de verificación verde.
Letón Lv X indica No. Marca de verificación verde.
Malayalam mililitros Marca de verificación verde. X indica No.
Marathi Sr Marca de verificación verde. X indica No.
Malayo Sra. Marca de verificación verde. Marca de verificación verde.
Noruego Bokmal Nb Marca de verificación verde. X indica No.
Holandés Nl Marca de verificación verde. Marca de verificación verde.
Noruego No X indica No. Marca de verificación verde.
Punjabí papá Marca de verificación verde. X indica No.
Polaco pl Marca de verificación verde. Marca de verificación verde.
Portugués - Brasil pt-br Marca de verificación verde. Marca de verificación verde.
Portugués (Portugal) pt-pt Marca de verificación verde. Marca de verificación verde.
Rumano Ro Marca de verificación verde. Marca de verificación verde.
Ruso Ru Marca de verificación verde. Marca de verificación verde.
Eslovaco Sk Marca de verificación verde. Marca de verificación verde.
Esloveno Sl X indica No. Marca de verificación verde.
Serbio (cirílico) SR-CRYL-CS X indica No. Marca de verificación verde.
Serbio (latino) sr-latn-cs X indica No. Marca de verificación verde.
Sueco Sv Marca de verificación verde. Marca de verificación verde.
Tamil gracias Marca de verificación verde. X indica No.
Telugu te Marca de verificación verde. X indica No.
Tailandés ésimo Marca de verificación verde. Marca de verificación verde.
Turco Tr Marca de verificación verde. Marca de verificación verde.
Ucraniano Reino Unido X indica No. Marca de verificación verde.
Vietnamita VI X indica No. Marca de verificación verde.
Galés Cy X indica No. X indica No.
Chino : simplificado zh-hans Marca de verificación verde. Marca de verificación verde.
Chino - tradicional zh-hant Marca de verificación verde. Marca de verificación verde.

Pasos siguientes

Encuentre más información sobre cómo personalizar la interfaz de usuario de las aplicaciones en Personalización de la interfaz de usuario de la aplicación en Azure Active Directory B2C.