次の方法で共有


Azure Active Directory B2C での言語のカスタマイズ

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

開始する前にこのページの上部にある ポリシーの種類 セレクターを使用して、設定するポリシーの種類を選択します。 Azure Active Directory B2C には、ユーザーがアプリケーションを操作する方法を定義する 2 つの方法 (定義済みのユーザー フローを使用する、または完全に構成可能なカスタム ポリシーを使用する) があります。 この記事で必要な手順は、方法ごとに異なります。

Azure Active Directory B2C (Azure AD B2C) での言語のカスタマイズにより、ユーザー フローは顧客のニーズに合わせてさまざまな言語に対応できます。 Microsoft では 36 言語の翻訳を提供していますが、任意の言語に対して独自の翻訳を提供することもできます。 エクスペリエンスが 1 つの言語に対してのみ提供されている場合でも、ページ上の任意のテキストをカスタマイズできます。

言語のカスタマイズのしくみ

言語のカスタマイズを使用して、ユーザー フローを使用できる言語を選択します。 この機能を有効にすると、アプリケーションからクエリ文字列パラメーター ui_localesを指定できます。 Azure AD B2C を呼び出すと、指定したロケールにページが変換されます。 この種類の構成では、ユーザー フロー内の言語を完全に制御でき、顧客のブラウザーの言語設定は無視されます。

顧客に表示される言語をそのレベルで制御する必要がない場合があります。 ui_locales パラメーターを指定しない場合、顧客のエクスペリエンスはブラウザーの設定によって決まります。 サポートされている言語として追加することで、ユーザー フローの翻訳先の言語を引き続き制御できます。 サポートしない言語が顧客のブラウザーに表示されるように設定されている場合は、サポートされているカルチャで既定として選択した言語が代わりに表示されます。

  • ui ロケール指定言語: 言語のカスタマイズを有効にすると、ここで指定した言語にユーザー フローが変換されます。
  • ブラウザー要求言語: ui_locales パラメーターが指定されていない場合、言語がサポートされている場合、ユーザー フローはブラウザーで要求 された言語に変換されます
  • ポリシーの既定の言語: ブラウザーで言語が指定されていない場合、またはサポートされていない言語が指定されている場合、ユーザー フローはユーザー フローの既定の言語に変換されます。

カスタム ユーザー属性を使用している場合は、独自の翻訳を指定する必要があります。 詳細については、「 文字列をカスタマイズする」を参照してください

このビデオでは、Azure AD B2C を使用して言語をローカライズまたはカスタマイズする方法について説明します。

ローカライズには、次の 3 つの手順が必要です。

  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. 変更するすべての文字列について、Overridetrue に変更します。
  5. ファイルを保存し、変更をアップロードします。 (アップロード コントロールは、JSON ファイルをダウンロードした場所と同じ場所にあります)。

重要

文字列をオーバーライドする必要がある場合は、必ず Override 値を trueに設定してください。 値が変更されていない場合、エントリは無視されます。

拡張属性を変更する

カスタム ユーザー属性の文字列を変更する場合や、JSON に追加する場合は、次の形式を使います。

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

<ExtensionAttribute> をカスタム ユーザー属性の名前に置き換えます。

<ExtensionAttributeValue> を表示する新しい文字列に置き換えます。

LocalizedCollections を使って値の一覧を提供する

応答の値セットの一覧を指定する場合は、LocalizedCollections 属性を作成する必要があります。 LocalizedCollections は、NameValue のペアの配列です。 項目の順序は、表示される順序になります。 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 ファイルを選びます。

変更がユーザー フローに自動的に保存されます。

言語のカスタマイズを使用してページ UI をカスタマイズする

HTML コンテンツをローカライズするには、2 つの方法があります。 1 つの方法は、 言語のカスタマイズを有効にすることです。 この機能を有効にすると、Azure AD B2C は OpenID Connect パラメーター ( ui-locales) をエンドポイントに転送できます。 コンテンツ サーバーでは、このパラメーターを使用して、言語固有のカスタマイズされた 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

カスタム言語を追加する

また、Microsoft が現在翻訳を提供していない言語を追加することもできます。 ユーザー フロー内のすべての文字列の翻訳を提供する必要があります。 言語コードとロケール コードは、ISO 639-1 標準のコードに制限されます。 ロケール コードの形式は、"ISO_639-1_code"-"CountryCode" (たとえば、 en-GB) にする必要があります。 詳細については、 ロケール ID 形式を参照してください。

  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>

言語固有のラベルを指定する

要素の Localization には、ローカライズされた文字列の一覧が含まれています。 ローカライズされたリソース要素には、ローカライズされたリソースを一意に識別するために使用される識別子があります。 この識別子は、 後でコンテンツ定義 要素で使用されます。

コンテンツ定義とサポートする言語にローカライズされたリソース要素を構成します。 英語とスペイン語の統合されたサインアップページまたはサインイン ページをカスタマイズするには、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>

ローカライズを使用してコンテンツ定義を編集する

BuildingBlocks 要素の子としてコピーした ContentDefinitions 要素の内容全体を貼り付けます。

次の例では、英語 (en) とスペイン語 (es) のカスタム文字列がサインアップまたはサインイン ページとローカル アカウントのサインアップ ページに追加されます。 各 LocalizedResourcesReferenceId はロケールと同じですが、識別子として任意の文字列を使用できます。 言語とページの組み合わせごとに、前に作成した対応する LocalizedResource をポイントします

<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

追加情報

オーバーライドとしてのページ UI カスタマイズ ラベル

言語のカスタマイズを有効にすると、ページ UI のカスタマイズを使った、ラベルの以前の編集内容は、英語 (en) の JSON ファイルに保存されます。 引き続き、言語のカスタマイズで言語リソースをアップロードして、ラベルなどの文字列を変更できます。

翻訳を更新する

Microsoft は、最新の翻訳を提供するよう努めています。 継続的に翻訳を改善し、コンプライアンスを維持します。 バグやグローバルな用語の変更を特定し、ユーザー フローにシームレスに適用される更新を行います。

右から左へ記述する言語のサポート

現在、右から左に書く言語はサポートしていません。 これには、カスタム ロケールと CSS を使用して、文字列の表示方法を変更することで対応できます。 この機能が必要な場合は、Azure フィードバックで投票してください。

ソーシャル ID プロバイダーの翻訳

Microsoft は、ui_locales OIDC パラメーターをソーシャル ログインに提供しています。 ただし、Facebook や Google などの一部のソーシャル ID プロバイダーは、それを利用していません。

ブラウザーの動作

Microsoft Edge、Chrome、Firefox は、設定された言語を要求します。 サポートされている言語の場合は、既定値の前に表示されます。

サポートされている言語

Azure AD B2C には、ISO 639-1 コードを使用した次の言語のサポートが含まれています。 ユーザー フロー言語は、Azure AD B2C によって提供されます。 多要素認証通知言語は、 Microsoft Entra 多要素認証によって提供されます。

言語 言語コード ユーザー フロー MFA 通知
アラビア語 アール いいえを示す X。 緑色のチェック マーク。
ブルガリア語 ビージー いいえを示す X。 緑色のチェック マーク。
バングラ BNの 緑色のチェック マーク。 いいえを示す X。
カタロニア語 カリフォルニア州 いいえを示す X。 緑色のチェック マーク。
チェコ語 CS (プログラミング言語) 緑色のチェック マーク。 緑色のチェック マーク。
デンマーク語 緑色のチェック マーク。 緑色のチェック マーク。
ドイツ語 de 緑色のチェック マーク。 緑色のチェック マーク。
ギリシャ語 エル 緑色のチェック マーク。 緑色のチェック マーク。
英語 en 緑色のチェック マーク。 緑色のチェック マーク。
スペイン語 es 緑色のチェック マーク。 緑色のチェック マーク。
エストニア語 ETの いいえを示す X。 緑色のチェック マーク。
バスク語 欧州 いいえを示す X。 緑色のチェック マーク。
フィンランド語 FIの 緑色のチェック マーク。 緑色のチェック マーク。
フランス語 fr 緑色のチェック マーク。 緑色のチェック マーク。
ガリシア語 gl いいえを示す X。 緑色のチェック マーク。
グジャラート語 緑色のチェック マーク。 いいえを示す X。
ヘブライ語 いいえを示す X。 緑色のチェック マーク。
ヒンディー語 こんにちは 緑色のチェック マーク。 緑色のチェック マーク。
クロアチア語 人事 緑色のチェック マーク。 緑色のチェック マーク。
ハンガリー語 フー 緑色のチェック マーク。 緑色のチェック マーク。
インドネシア語 身分証明書 いいえを示す X。 緑色のチェック マーク。
イタリア語 それ 緑色のチェック マーク。 緑色のチェック マーク。
日本語 ja 緑色のチェック マーク。 緑色のチェック マーク。
カザフ語 kk いいえを示す X。 緑色のチェック マーク。
カナラ語 kn 緑色のチェック マーク。 いいえを示す X。
韓国語 緑色のチェック マーク。 緑色のチェック マーク。
リトアニア語 lt いいえを示す X。 緑色のチェック マーク。
ラトビア語 レヴ いいえを示す X。 緑色のチェック マーク。
マラヤラム語 ミリリットル 緑色のチェック マーク。 いいえを示す X。
マラーティー語 さん 緑色のチェック マーク。 いいえを示す X。
マレー語 さん 緑色のチェック マーク。 緑色のチェック マーク。
ノルウェー語 - ブークモール 注記 緑色のチェック マーク。 いいえを示す X。
オランダ語 nl 緑色のチェック マーク。 緑色のチェック マーク。
ノルウェー語 いいえ いいえを示す X。 緑色のチェック マーク。
パンジャブ語 お父さん 緑色のチェック マーク。 いいえを示す X。
ポーランド語 分損 緑色のチェック マーク。 緑色のチェック マーク。
ポルトガル語 - ブラジル pt-br 緑色のチェック マーク。 緑色のチェック マーク。
ポルトガル語 - ポルトガル pt-pt 緑色のチェック マーク。 緑色のチェック マーク。
ルーマニア語 緑色のチェック マーク。 緑色のチェック マーク。
ロシア語 ru 緑色のチェック マーク。 緑色のチェック マーク。
スロバキア語 sk 緑色のチェック マーク。 緑色のチェック マーク。
スロベニア語 sl いいえを示す X。 緑色のチェック マーク。
セルビア語 - キリル SR-クリル-CS いいえを示す X。 緑色のチェック マーク。
セルビア語 - ラテン SR-LATN-CSの いいえを示す X。 緑色のチェック マーク。
スウェーデン語 スウェーデン語 緑色のチェック マーク。 緑色のチェック マーク。
タミール語 緑色のチェック マーク。 いいえを示す X。
テルグ語 te 緑色のチェック マーク。 いいえを示す X。
タイ語 番目 緑色のチェック マーク。 緑色のチェック マーク。
トルコ語 tr 緑色のチェック マーク。 緑色のチェック マーク。
ウクライナ語 イギリス いいえを示す X。 緑色のチェック マーク。
ベトナム語 vi いいえを示す X。 緑色のチェック マーク。
ウェールズ語 cy いいえを示す X。 いいえを示す X。
中国語 - 簡体字 zh-hans 緑色のチェック マーク。 緑色のチェック マーク。
中国語 - 繁体字 zh-hant 緑色のチェック マーク。 緑色のチェック マーク。

次のステップ

アプリケーションのユーザー インターフェイスをカスタマイズする方法の詳細については、「 Azure Active Directory B2C でアプリケーションのユーザー インターフェイスをカスタマイズする」を参照してください。