Поделиться через


Настройка языка в Azure Active Directory B2C

Это важно

Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".

Прежде чем начать, используйте селектор типа политики в верхней части этой страницы, чтобы выбрать тип политики, которую вы настроите. Azure Active Directory B2C предлагает два метода определения способа взаимодействия пользователей с вашими приложениями: с помощью предопределенных потоков пользователей или полностью настраиваемых пользовательских политик. Действия, которые необходимо выполнить, отличаются для каждого метода.

Настройка языка в Azure Active Directory B2C (Azure AD B2C) позволяет вашему потоку пользователей соответствовать различным языкам в соответствии с потребностями клиента. Корпорация Майкрософт предоставляет переводы на 36 языков, но вы также можете предоставить собственные переводы для любого языка. Даже если интерфейс предоставляется только для одного языка, вы можете настроить любой текст на страницах.

Как работает функция настройки языка

Вы используете настройку языка для выбора языков, в которых доступен поток пользователя. После включения функции вы можете указать параметр строки запроса ui_locales из вашего приложения. При вызове Azure AD B2C ваша страница переводится на указанный вами языковой стандарт. Этот тип конфигурации обеспечивает полный контроль над языками в потоке пользователя и игнорирует языковые параметры браузера клиента.

Возможно, вам не нужен этот уровень контроля над тем, какие языки видит ваш клиент. Если параметр не указан ui_locales , интерфейс клиента определяется параметрами браузера. Вы по-прежнему можете управлять тем, на какие языки переводится поток пользователя, добавив его в качестве поддерживаемого языка. Если браузер клиента настроен для отображения языка, который вы не хотите поддерживать, вместо этого отображается язык, выбранный по умолчанию в поддерживаемых культурах.

  • язык, указанный в локалях UI: после включения настройки языка поток пользователя переводится на язык, указанный здесь.
  • Запрошенный браузером язык: если параметр не ui_locales указан, поток пользователя преобразуется на запрашиваемый браузер языком, если язык поддерживается.
  • Язык политики по умолчанию: если браузер не задает язык или указывает язык, который не поддерживается, поток пользователя преобразуется на язык по умолчанию потока пользователя.

Замечание

Если вы используете пользовательские атрибуты пользователя, необходимо предоставить собственные переводы. Дополнительные сведения см. в разделе "Настройка строк".

Просмотрите это видео, чтобы узнать, как локализовать или настроить язык с помощью Azure AD B2C.

Локализация требует трех шагов:

  1. Настройка явного списка поддерживаемых языков
  2. Предоставление строк и коллекций для конкретного языка
  3. Измените определение контента для страницы.

Предпосылки

Поддержка запрошенных языков для ui_locales

Политики, созданные до общедоступной настройки языка, должны сначала включить эту функцию. Политики и потоки пользователей, созданные после, имеют настройку языка, включённую по умолчанию.

При включении настройки языка в потоке пользователя можно управлять языком потока пользователя, добавив ui_locales этот параметр.

  1. В клиенте Azure AD B2C выберите потоки пользователей.
  2. Щелкните поток пользователя, который вы хотите включить для поддержки переводов.
  3. Выберите языки.
  4. Выберите "Включить настройку языка".

Выберите, какие языки включены в вашем пользовательском потоке

Включите набор языков, доступных для перевода потока пользователя при запросе браузером без параметра ui_locales.

  1. Убедитесь, что в потоке пользователя включена настройка языка из предыдущих инструкций.
  2. На странице "Языки" для потока пользователя выберите язык, который требуется поддерживать.
  3. В области свойств измените Включено на Да.
  4. Нажмите кнопку "Сохранить " в верхней части области свойств.

Замечание

ui_locales Если параметр не указан, страница преобразуется на язык браузера клиента, только если он включен.

Настройка строк

Настройка языка позволяет настроить любую строку в информации, передаваемой потоку пользователя.

  1. Убедитесь, что в пользовательском потоке включена возможность настройки языка из предыдущих инструкций.
  2. На странице Языки для потока пользователя выберите язык, который требуется настроить.
  3. В разделе "Файлы ресурсов уровня страницы" выберите страницу, которую требуется изменить.
  4. Нажмите Скачать настройки по умолчанию (или Скачать переопределения, если вы ранее изменили этот язык).

В результате будет создан JSON-файл, который можно использовать для изменения строк.

Замена любой строки на странице

  1. Откройте скачанный JSON-файл в редакторе JSON.
  2. Найдите элемент, требующий замены. Вы можете найти StringId искомой строки или найти атрибут Value, который вы хотите изменить.
  3. Замените атрибут Value значением, которое требуется отобразить.
  4. В каждой строке, которую необходимо изменить, замените Override на true.
  5. Сохраните файл и отправьте изменения. (Элемент управления отправки можно найти в том же месте, где вы скачали JSON-файл.)

Это важно

Если необходимо переопределить строку, обязательно задайте значение Override для true. Если значение не изменено, запись игнорируется.

Изменение атрибутов расширения

Если вы хотите изменить или добавить в JSON строку пользовательского атрибута, это нужно сделать в следующем формате:

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

Замените <ExtensionAttribute> именем пользовательского атрибута.

Замените <ExtensionAttributeValue> новой строкой для отображения.

Укажите список значений с помощью LocalizedCollections

Если вы хотите предоставить список значений для ответов, необходимо создать атрибут LocalizedCollections. LocalizedCollections является массивом пар Name и Value. Порядок элементов будет таким, каким он отображается. Для добавления LocalizedCollections используйте следующий формат.

{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType":"ClaimType",
      "ElementId":"<UserAttribute>",
      "TargetCollection":"Restriction",
      "Override": true,
      "Items":[
        {
          "Name":"<Response1>",
          "Value":"<Value1>"
        },
        {
          "Name":"<Response2>",
          "Value":"<Value2>"
        }
      ]
    }
  ]
}
  • ElementId представляет собой пользовательский атрибут, ответом на который является LocalizedCollections.
  • Name — это значение, отображаемое пользователю.
  • Value возвращается в утверждении при выборе этого параметра.

Загрузка изменений

  1. После завершения изменений в JSON-файле вернитесь в клиент B2C.
  2. Выберите потоки пользователей и щелкните поток пользователя, который требуется включить для перевода.
  3. Выберите языки.
  4. Выберите язык, на который требуется выполнить перевод.
  5. Выберите страницу, в которой нужно предоставить переводы.
  6. Щелкните значок папки и выберите JSON-файл для отправки.

Изменения автоматически сохраняются в вашем потоке пользователя.

Настройка пользовательского интерфейса страницы с помощью настройки языка

Существует два способа локализации HTML-содержимого. Одним из способов является включение настройки языка. Включение этой функции позволяет Azure AD B2C пересылать параметр ui-localesOpenID Connect в конечную точку. Сервер содержимого может использовать этот параметр для предоставления настраиваемых HTML-страниц, относящихся к языку.

Кроме того, вы можете извлекать содержимое из различных источников на основе используемой локали. В конечной точке с поддержкой CORS можно настроить структуру папок для размещения содержимого для определенных языков. Если вы используете подстановочное значение {Culture:RFC5646}, вызовите правильный. Например, предположим, что это URI вашей настраиваемой страницы:

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

Вы можете загрузить страницу в fr. Когда страница загружает содержимое HTML и CSS, оно загружается из:

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

Добавление настраиваемых языков

Вы также можете добавить языки, для которые корпорация Майкрософт в настоящее время не предоставляет переводы. Вам потребуется предоставить переводы для всех строк в потоке пользователя. Коды языка и региональные коды ограничены стандартом ISO 639-1. Код локали должен иметь формат "ISO_639-1_code"-"CountryCode", например, en-GB. Для получения дополнительной информации обратитесь к форматам идентификаторов языкового стандарта.

  1. В клиенте Azure AD B2C выберите потоки пользователей.
  2. Щелкните поток пользователя, в котором требуется добавить настраиваемые языки, а затем нажмите кнопку "Языки".
  3. Выберите "Добавить пользовательский язык " в верхней части страницы.
  4. В открывающейся области контекста определите язык, для которого вы предоставляете переводы, введя допустимый код языкового стандарта.
  5. Для каждой страницы вы можете скачать набор изменений для английского языка и продолжить работать над переводами.
  6. После завершения работы с JSON-файлами их можно отправить на каждую страницу.
  7. Выберите "Включить", а поток пользователя теперь может отображать этот язык для пользователей.
  8. Сохраните язык.

Это важно

Перед сохранением необходимо включить пользовательские языки или загрузить их переопределения.

Настройка списка поддерживаемых языков

Откройте файл расширений вашей политики. Например: SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  1. Найдите элемент BuildingBlocks . Если элемент не существует, добавьте его.
  2. Localization Добавьте элемент с поддерживаемыми языками: английский (по умолчанию) и испанский.
<Localization Enabled="true">
  <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll">
    <SupportedLanguage>en</SupportedLanguage>
    <SupportedLanguage>es</SupportedLanguage>
  </SupportedLanguages>
</Localization>

Предоставление меток для конкретного языка

Список локализованных строк содержится в элементе LocalizedResourcesLocalization. Локализованный элемент ресурсов имеет идентификатор, используемый для уникальной идентификации локализованных ресурсов. Этот идентификатор используется позже в элементе определения содержимого .

Вы настраиваете локализованные элементы ресурсов для определения содержимого и любого языка, который требуется поддерживать. Чтобы настроить унифицированные страницы регистрации или входа на английский и испанский языки, добавьте следующие LocalizedResources элементы после закрытия </SupportedLanguages> элемента.

Замечание

В следующем примере мы добавили символ фунта # в начале каждой строки, чтобы можно было легко найти локализованные метки на экране.

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

Изменение определения содержимого с помощью локализации

Вставьте все содержимое элемента ContentDefinitions, скопированного в качестве дочернего элемента BuildingBlocks.

В следующем примере пользовательские строки английского (en) и испанского (es) добавляются на страницы регистрации или входа, а также на страницу регистрации локальной учетной записи. LocalizedResourcesReferenceId для каждого LocalizedResourcesReference совпадает с их локалью, но можно использовать любую строку в качестве идентификатора. Для каждой комбинации языка и страницы вы указываете соответствующие ранее созданные ЛокализованныеРесурсы.

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

Отправка и проверка обновленной настраиваемой политики

Отправка настраиваемой политики

  1. Сохраните файл расширений.
  2. Если у вас есть доступ к нескольким клиентам, щелкните значок Настройки в верхнем меню, чтобы переключиться на клиент Azure AD B2C из меню Каталоги и подписки.
  3. Найдите и выберите Azure AD B2C.
  4. В разделе "Политики" выберите Identity Experience Framework.
  5. Выберите " Отправить настраиваемую политику".
  6. Отправьте файл расширений, который вы ранее изменили.

Протестируйте настраиваемую политику, используя Запустить сейчас

  1. Выберите отправленную политику, а затем нажмите кнопку "Выполнить".
  2. Вы должны увидеть локализованную страницу регистрации или входа.
  3. Щелкните ссылку на регистрацию, и вы сможете просмотреть локализованную страницу регистрации.
  4. Переключите язык браузера по умолчанию на испанский. Или можно добавить параметр строки запроса ui_locales к запросу авторизации. Рассмотрим пример.
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

Дополнительные сведения

Использование меток настройки пользовательского интерфейса страницы для переопределения параметров страницы

При включении настройки языка все предыдущие изменения меток, использующих настройки пользовательского интерфейса страницы, сохраняются в JSON-файле для английского языка (en). Вы можете продолжить изменять метки и другие текстовые строки, отправив языковые ресурсы в настройках языка.

Актуальные переводы

Корпорация Майкрософт стремится предоставить наиболее актуальные переводы Мы постоянно улучшаем переводы в соответствии с вашими требованиями. Корпорация Майкрософт определит ошибки и изменения в глобальной терминологии и сделает обновления, которые будут легко работать в потоке пользователя.

Поддержка языков с написанием справа налево

Корпорация Майкрософт в настоящее время не поддерживает языки справа налево. Это можно сделать с помощью пользовательских языковых стандартов и использования CSS для изменения способа отображения строк. Если вам нужна эта функция, проголосуйте за него в отзыве Azure.

Переводы для поставщиков удостоверений в социальных сетях

Корпорация Майкрософт предоставляет параметр ui_locales OIDC для имен входа в социальные сети. Однако некоторые поставщики удостоверений в социальных сетях, включая Facebook и Google, не принимают его.

Поведение браузера

Запрос Microsoft Edge, Chrome и Firefox на их установленный язык. Если это поддерживаемый язык, он отображается перед значением по умолчанию.

Поддерживаемые языки

Azure AD B2C поддерживает следующие языки с помощью кодов ISO 639-1. Языки потока пользователей предоставляются Azure AD B2C. Языки уведомлений многофакторной проверки подлинности предоставляются многофакторной проверкой подлинности Microsoft Entra.

Язык Код языка Маршруты пользователей Уведомления MFA
арабский ар Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Болгарский БГ Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Бангла Млрд Зеленая галочка. Символ X, обозначающий отсутствие поддержки.
Каталанский центр сертификации Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Чешский cs Зеленая галочка. Зеленая галочка.
Датский да Зеленая галочка. Зеленая галочка.
Немецкий де Зеленая галочка. Зеленая галочка.
Греческий эль Зеленая галочка. Зеленая галочка.
Английский эн Зеленая галочка. Зеленая галочка.
испанский эс Зеленая галочка. Зеленая галочка.
Эстонский и Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Баскский Европейский Союз Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Финский фи Зеленая галочка. Зеленая галочка.
Французский фр Зеленая галочка. Зеленая галочка.
Галисийский Гугл Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Гуджарати Гу Зеленая галочка. Символ X, обозначающий отсутствие поддержки.
Иврит он Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Хинди Привет Зеленая галочка. Зеленая галочка.
Хорватский ч Зеленая галочка. Зеленая галочка.
венгерский Ху Зеленая галочка. Зеленая галочка.
Индонезийский идентификатор Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Итальянский это Зеленая галочка. Зеленая галочка.
Японский ja Зеленая галочка. Зеленая галочка.
Казахский КК Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Каннада Кн Зеленая галочка. Символ X, обозначающий отсутствие поддержки.
Корейский Ко Зеленая галочка. Зеленая галочка.
Литовский литр Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Латышский ЛВ Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Малаялам мл Зеленая галочка. Символ X, обозначающий отсутствие поддержки.
Маратхи мистер Зеленая галочка. Символ X, обозначающий отсутствие поддержки.
Малайский мс Зеленая галочка. Зеленая галочка.
Норвежский (букмол) nb Зеленая галочка. Символ X, обозначающий отсутствие поддержки.
Нидерландский Нидерланды Зеленая галочка. Зеленая галочка.
Норвежский нет Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Панджаби папа Зеленая галочка. Символ X, обозначающий отсутствие поддержки.
Польский pl Зеленая галочка. Зеленая галочка.
Португальский (Бразилия) pt-br Зеленая галочка. Зеленая галочка.
Португальский: Португалия pt-pt Зеленая галочка. Зеленая галочка.
Румынский ro Зеленая галочка. Зеленая галочка.
Русский Ru Зеленая галочка. Зеленая галочка.
Словацкий sk Зеленая галочка. Зеленая галочка.
Словенский сл Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Сербский — кириллица sr-cryl-cs Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Сербский — латиница SR-LATN-CS Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Шведский SV Зеленая галочка. Зеленая галочка.
Тамильский спасибо Зеленая галочка. Символ X, обозначающий отсутствие поддержки.
Телугу te Зеленая галочка. Символ X, обозначающий отсутствие поддержки.
Тайский тх Зеленая галочка. Зеленая галочка.
Турецкий Турция Зеленая галочка. Зеленая галочка.
Украинский Великобритания Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Вьетнамский ВИ Символ X, обозначающий отсутствие поддержки. Зеленая галочка.
Валлийский ци Символ X, обозначающий отсутствие поддержки. Символ X, обозначающий отсутствие поддержки.
Китайский — упрощённый Чж-Ханс Зеленая галочка. Зеленая галочка.
Китайский - традиционный zh-hant Зеленая галочка. Зеленая галочка.

Дальнейшие шаги

Дополнительные сведения о настройке пользовательского интерфейса приложений см. в разделе "Настройка пользовательского интерфейса приложения" в Azure Active Directory B2C.