Personalização de idioma no Azure Ative Directory B2C

Antes de começar, use o seletor Escolha um tipo de política para escolher o tipo de política que você está configurando. O Azure Ative Directory B2C oferece dois métodos para definir como os usuários interagem com seus aplicativos: por meio de fluxos de usuário predefinidos ou por meio de políticas personalizadas totalmente configuráveis. As etapas exigidas neste artigo são diferentes para cada método.

A personalização de idioma no Azure Ative Directory B2C (Azure AD B2C) permite que seu fluxo de usuário acomode diferentes idiomas para atender às necessidades do cliente. A Microsoft fornece as traduções para 36 idiomas, mas você também pode fornecer suas próprias traduções para qualquer idioma. Mesmo que sua experiência seja fornecida apenas para um único idioma, você pode personalizar qualquer texto nas páginas.

Como funciona a personalização de idioma

Você usa a personalização de idioma para selecionar em quais idiomas seu fluxo de usuário está disponível. Depois que o recurso estiver habilitado, você poderá fornecer o parâmetro de cadeia de caracteres de consulta, , ui_localesdo seu aplicativo. Quando você chama o Azure AD B2C, sua página é traduzida para a localidade que você indicou. Esse tipo de configuração oferece controle total sobre os idiomas no fluxo de usuários e ignora as configurações de idioma do navegador do cliente.

Talvez você não precise desse nível de controle sobre quais idiomas seu cliente vê. Se você não fornecer um ui_locales parâmetro, a experiência do cliente será ditada pelas configurações do navegador. Você ainda pode controlar para quais idiomas seu fluxo de usuário é traduzido adicionando-o como um idioma suportado. Se o navegador de um cliente estiver configurado para mostrar um idioma que você não deseja suportar, o idioma selecionado como padrão nas culturas suportadas será mostrado.

  • ui-locales specified language: depois de habilitar a personalização de idioma, seu fluxo de usuário é traduzido para o idioma especificado aqui.
  • Idioma solicitado pelo navegador: se nenhum ui_locales parâmetro for especificado, o fluxo de usuário será traduzido para o idioma solicitado pelo navegador, se o idioma for suportado.
  • Idioma padrão da política: se o navegador não especificar um idioma ou especificar um que não é suportado, o fluxo do usuário será traduzido para o idioma padrão do fluxo do usuário.

Nota

Se você estiver usando atributos de usuário personalizados, precisará fornecer suas próprias traduções. Para obter mais informações, consulte Personalizar suas cadeias de caracteres.

Assista a este vídeo para saber como localizar ou personalizar o idioma usando o Azure AD B2C.

A localização requer três etapas:

  1. Configurar a lista explícita de idiomas suportados
  2. Fornecer cadeias de caracteres e coleções específicas do idioma
  3. Edite a definição de conteúdo da página.

Pré-requisitos

Suporte aos idiomas solicitados para ui_locales

As políticas que foram criadas antes da disponibilidade geral da personalização de idioma precisam habilitar esse recurso primeiro. As políticas e os fluxos de usuário criados depois têm a personalização de idioma habilitada por padrão.

Ao habilitar a personalização de idioma em um fluxo de usuário, você pode controlar o idioma do fluxo de usuário adicionando o ui_locales parâmetro.

  1. Em seu locatário do Azure AD B2C, selecione Fluxos de usuário.
  2. Clique no fluxo de usuário que você deseja habilitar para traduções.
  3. Selecione Idiomas.
  4. Selecione Ativar personalização de idioma.

Selecione quais idiomas no seu fluxo de usuário estão habilitados

Habilite um conjunto de idiomas para o qual seu fluxo de usuário seja traduzido quando solicitado pelo navegador sem o ui_locales parâmetro.

  1. Certifique-se de que seu fluxo de usuário tenha a personalização de idioma habilitada nas instruções anteriores.
  2. Na página Idiomas do fluxo de usuários, selecione um idioma ao qual deseja oferecer suporte.
  3. No painel de propriedades, altere Habilitado para Sim.
  4. Selecione Salvar na parte superior do painel de propriedades.

Nota

Se um ui_locales parâmetro não for fornecido, a página será traduzida para o idioma do navegador do cliente somente se estiver habilitada.

Personalize suas strings

A personalização de idioma permite que você personalize qualquer cadeia de caracteres em seu fluxo de usuário.

  1. Verifique se o fluxo de usuário tem a personalização de idioma habilitada nas instruções anteriores.
  2. Na página Idiomas do fluxo de usuário, selecione o idioma que deseja personalizar.
  3. Em Arquivos de recursos no nível da página, selecione a página que deseja editar.
  4. Selecione Padrões de download (ou Substituições de download se você tiver editado esse idioma anteriormente).

Estas etapas fornecem um arquivo JSON que você pode usar para começar a editar suas cadeias de caracteres.

Alterar qualquer cadeia de caracteres na página

  1. Abra o arquivo JSON baixado de instruções anteriores em um editor JSON.
  2. Encontre o elemento que você deseja alterar. Você pode encontrar StringId a cadeia de caracteres que está procurando ou procurar o Value atributo que deseja alterar.
  3. Atualize o atributo com o Value que você deseja exibir.
  4. Para cada cadeia de caracteres que você deseja alterar, altere Override para true.
  5. Salve o arquivo e carregue suas alterações. (Você pode encontrar o controle de upload no mesmo local onde baixou o arquivo JSON.)

Importante

Se você precisar substituir uma cadeia de caracteres, certifique-se de definir o Override valor como true. Se o valor não for alterado, a entrada será ignorada.

Alterar atributos de extensão

Se você quiser alterar a cadeia de caracteres de um atributo de usuário personalizado ou adicionar um ao JSON, ele está no seguinte formato:

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

Substitua <ExtensionAttribute> pelo nome do seu atributo de usuário personalizado.

Substitua <ExtensionAttributeValue> pela nova cadeia de caracteres a ser exibida.

Forneça uma lista de valores usando LocalizedCollections

Se quiser fornecer uma lista definida de valores para respostas, você precisará criar um LocalizedCollections atributo. LocalizedCollections é uma matriz de Name e Value pares. A ordem dos itens será a ordem em que são exibidos. Para adicionar LocalizedCollections, use o seguinte formato:

{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType":"ClaimType",
      "ElementId":"<UserAttribute>",
      "TargetCollection":"Restriction",
      "Override": true,
      "Items":[
        {
          "Name":"<Response1>",
          "Value":"<Value1>"
        },
        {
          "Name":"<Response2>",
          "Value":"<Value2>"
        }
      ]
    }
  ]
}
  • ElementId é o atributo de usuário ao qual esse LocalizedCollections atributo é uma resposta.
  • Name é o valor mostrado ao usuário.
  • Value é o que é retornado na declaração quando esta opção é selecionada.

Carregue as alterações

  1. Depois de concluir as alterações no arquivo JSON, volte para o locatário B2C.
  2. Selecione Fluxos de usuário e clique no fluxo de usuário que você deseja habilitar para traduções.
  3. Selecione Idiomas.
  4. Selecione o idioma para o qual deseja traduzir.
  5. Selecione a página onde deseja fornecer traduções.
  6. Selecione o ícone da pasta e selecione o arquivo JSON a ser carregado.

As alterações são salvas automaticamente no fluxo de usuários.

Personalizar a interface do usuário da página usando a personalização de idioma

Há duas maneiras de localizar seu conteúdo HTML. Uma maneira é ativar a personalização de idioma. Habilitar esse recurso permite que o Azure AD B2C encaminhe o parâmetro OpenID Connect, , ui-localespara seu ponto de extremidade. Seu servidor de conteúdo pode usar esse parâmetro para fornecer páginas HTML personalizadas que são específicas do idioma.

Como alternativa, você pode extrair conteúdo de locais diferentes com base na localidade usada. No ponto de extremidade habilitado para CORS, você pode configurar uma estrutura de pastas para hospedar conteúdo para idiomas específicos. Você chamará o correto, se usar o valor {Culture:RFC5646}curinga. Por exemplo, suponha que este é o URI da página personalizada:

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

Você pode carregar a página em fr. Quando a página extrai conteúdo HTML e CSS, ela é extraída de:

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

Adicionar idiomas personalizados

Você também pode adicionar idiomas para os quais a Microsoft atualmente não fornece traduções. Você precisará fornecer as traduções para todas as cadeias de caracteres no fluxo de usuário. Os códigos de idioma e localidade são limitados aos da norma ISO 639-1. O formato do código de localidade deve ser "ISO_639-1_code"-"CountryCode", por exemplo en-GB. Para obter mais informações, consulte os formatos de ID de localidade.

  1. Em seu locatário do Azure AD B2C, selecione Fluxos de usuário.
  2. Clique no fluxo de utilizador onde pretende adicionar idiomas personalizados e, em seguida, clique em Idiomas.
  3. Selecione Adicionar idioma personalizado na parte superior da página.
  4. No painel de contexto que se abre, identifique para qual idioma você está fornecendo traduções inserindo um código de localidade válido.
  5. Para cada página, você pode baixar um conjunto de substituições para inglês e trabalhar nas traduções.
  6. Depois de terminar de usar os arquivos JSON, você pode carregá-los para cada página.
  7. Selecione Ativar e seu fluxo de usuários agora pode mostrar esse idioma para seus usuários.
  8. Salve o idioma.

Importante

Você precisa habilitar os idiomas personalizados ou carregar substituições para ele antes de poder salvar.

Configurar a lista de idiomas suportados

Abra o arquivo de extensões da sua política. Por exemplo, SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  1. Procure o elemento BuildingBlocks . Se o elemento não existir, adicione-o.
  2. Adicione o Localization elemento com os idiomas suportados: inglês (padrão) e espanhol.
<Localization Enabled="true">
  <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll">
    <SupportedLanguage>en</SupportedLanguage>
    <SupportedLanguage>es</SupportedLanguage>
  </SupportedLanguages>
</Localization>

Fornecer rótulos específicos do idioma

O LocalizedResources do elemento contém a Localization lista de cadeias de caracteres localizadas. O elemento de recursos localizados tem um identificador que é usado para identificar exclusivamente recursos localizados. Esse identificador é usado posteriormente no elemento de definição de conteúdo.

Você configura elementos de recursos localizados para a definição de conteúdo e qualquer idioma ao qual deseja oferecer suporte. Para personalizar as páginas unificadas de inscrição ou entrada para inglês e espanhol, adicione os seguintes LocalizedResources elementos após o </SupportedLanguages> fechamento do elemento.

Nota

No exemplo a seguir, adicionamos o símbolo de libra # no início de cada linha, para que você possa encontrar facilmente os rótulos localizados na tela.

<!--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>

Editar a definição de conteúdo com a localização

Cole todo o conteúdo do elemento ContentDefinitions que você copiou como filho do elemento BuildingBlocks.

No exemplo a seguir, as cadeias de caracteres personalizadas em inglês (en) e espanhol (es) são adicionadas à página de inscrição ou entrada e à página de inscrição da conta local. O LocalizedResourcesReferenceId para cada LocalizedResourcesReference é o mesmo que sua localidade, mas você pode usar qualquer cadeia de caracteres como identificador. Para cada combinação de idioma e página, você aponta para os Recursos Localizados correspondentes criados 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>

Carregue e teste sua política personalizada atualizada

Carregar a política personalizada

  1. Salve o arquivo de extensões.
  2. Se você tiver acesso a vários locatários, selecione o ícone Configurações no menu superior para alternar para seu locatário do Azure AD B2C no menu Diretórios + assinaturas .
  3. Procure e selecione Azure AD B2C.
  4. Em Políticas, selecione Identity Experience Framework.
  5. Selecione Carregar política personalizada.
  6. Carregue o arquivo de extensões que você alterou anteriormente.

Testar a política personalizada usando Executar agora

  1. Selecione a política que carregou e, em seguida, selecione Executar agora.
  2. Você deve ser capaz de ver a inscrição localizada ou a página de login.
  3. Clique no link de inscrição e você poderá ver a página de inscrição localizada.
  4. Mude o idioma padrão do navegador para espanhol. Ou você pode adicionar o parâmetro ui_locales query string à solicitação de autorização. Por exemplo:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1A_signup_signin/oauth2/v2.0/authorize&client_id=0239a9cc-309c-4d41-12f1-31299feb2e82&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login&ui_locales=es

Informações adicionais

Rótulos de personalização da interface do usuário da página como substituições

Quando você habilita a personalização de idioma, suas edições anteriores para rótulos usando a personalização da interface do usuário da página são mantidas em um arquivo JSON para inglês (en). Você pode continuar a alterar seus rótulos e outras cadeias de caracteres carregando recursos de idioma na personalização do idioma.

Traduções atualizadas

A Microsoft está empenhada em fornecer as traduções mais atualizadas para seu uso. A Microsoft melhora continuamente as traduções e mantém-nas em conformidade para si. A Microsoft identificará bugs e alterações na terminologia global e fará atualizações que funcionarão perfeitamente no seu fluxo de usuários.

Suporte para idiomas da direita para a esquerda

Atualmente, a Microsoft não fornece suporte para idiomas da direita para a esquerda. Você pode fazer isso usando localidades personalizadas e usando CSS para alterar a maneira como as cadeias de caracteres são exibidas. Se você precisar desse recurso, vote nele no Azure Feedback.

Traduções de provedores de identidade social

A Microsoft fornece o ui_locales parâmetro OIDC para logins sociais. Mas alguns provedores de identidade social, incluindo Facebook e Google, não os honram.

Comportamento do navegador

O Chrome e o Firefox solicitam o idioma definido. Se for um idioma suportado, ele será exibido antes do padrão. Atualmente, o Microsoft Edge não solicita um idioma e vai direto para o idioma padrão.

Idiomas suportados

O Azure AD B2C inclui suporte para os seguintes idiomas usando códigos ISO 639-1. Os idiomas de fluxo de usuário são fornecidos pelo Azure AD B2C. Os idiomas de notificação de autenticação multifator são fornecidos pela autenticação multifator do Microsoft Entra.

Linguagem Código de idioma Fluxos do utilizador Notificações de AMF
Árabe ar X indicating no. Green check mark.
Búlgaro bg X indicating no. Green check mark.
Bangla bn Green check mark. X indicating no.
Catalão ca X indicating no. Green check mark.
Checo cs Green check mark. Green check mark.
Dinamarquês da Green check mark. Green check mark.
Alemão al Green check mark. Green check mark.
Grego el Green check mark. Green check mark.
Português in Green check mark. Green check mark.
Espanhol es Green check mark. Green check mark.
Estónio et X indicating no. Green check mark.
Basco eu X indicating no. Green check mark.
Finlandês fi Green check mark. Green check mark.
Francês fr Green check mark. Green check mark.
Galego gl X indicating no. Green check mark.
Guzerate Gu Green check mark. X indicating no.
Hebraico he X indicating no. Green check mark.
Hindi hi Green check mark. Green check mark.
Croata h Green check mark. Green check mark.
Húngaro hu Green check mark. Green check mark.
Indonésio id X indicating no. Green check mark.
Italiano it Green check mark. Green check mark.
Japonês ja Green check mark. Green check mark.
Cazaquistanês kk X indicating no. Green check mark.
Canarês KN Green check mark. X indicating no.
Coreano ko Green check mark. Green check mark.
Lituano lt X indicating no. Green check mark.
Letão lv X indicating no. Green check mark.
Malaiala ml Green check mark. X indicating no.
Marata O Sr. Green check mark. X indicating no.
Malaio ms Green check mark. Green check mark.
Norueguês Bokmal nb Green check mark. X indicating no.
Neerlandês nl Green check mark. Green check mark.
Norueguês não X indicating no. Green check mark.
Punjabi PA Green check mark. X indicating no.
Polaco pl Green check mark. Green check mark.
Português - Brasil pt-br Green check mark. Green check mark.
Português - Portugal pt-pt Green check mark. Green check mark.
Romeno ro Green check mark. Green check mark.
Russo ru Green check mark. Green check mark.
Eslovaco sk Green check mark. Green check mark.
Esloveno sl X indicating no. Green check mark.
Sérvio - Cirílico SR-CRIL-CS X indicating no. Green check mark.
Sérvio - Latim SR-LATN-CS X indicating no. Green check mark.
Sueco sv Green check mark. Green check mark.
Tâmil ta Green check mark. X indicating no.
Telugu te Green check mark. X indicating no.
Tailandês th Green check mark. Green check mark.
Turco tr Green check mark. Green check mark.
Ucraniano uk X indicating no. Green check mark.
Vietnamita vi X indicating no. Green check mark.
Galês cy X indicating no. X indicating no.
Chinês - Simplificado zh-hans Green check mark. Green check mark.
Chinês - Tradicional zh-hant Green check mark. Green check mark.

Próximos passos

Encontre mais informações sobre como você pode personalizar a interface do usuário de seus aplicativos em Personalizar a interface do usuário do seu aplicativo no Azure Ative Directory B2C.