Bagikan melalui


Kustomisasi bahasa di Azure Active Directory B2C

Penting

Berlaku mulai 1 Mei 2025, Azure AD B2C tidak akan lagi tersedia untuk dibeli untuk pelanggan baru. Pelajari lebih lanjut di FAQ kami.

Sebelum memulai, gunakan pemilih Pilih jenis kebijakan di bagian atas halaman ini untuk memilih jenis kebijakan yang Anda siapkan. Azure Active Directory B2C menawarkan dua metode untuk menentukan cara pengguna berinteraksi dengan aplikasi Anda: melalui alur pengguna yang telah ditentukan sebelumnya atau melalui kebijakan kustom yang sepenuhnya dapat dikonfigurasi. Langkah yang diperlukan dalam artikel ini berbeda untuk setiap metode.

Kustomisasi bahasa di Azure Active Directory B2C (Azure AD B2C) memungkinkan alur pengguna Anda untuk mengakomodasi berbagai bahasa agar sesuai dengan kebutuhan pelanggan Anda. Microsoft menyediakan terjemahan untuk 36 bahasa, tetapi Anda juga dapat menyediakan terjemahan Anda sendiri untuk bahasa apa pun. Bahkan jika pengalaman Anda disediakan hanya untuk satu bahasa, Anda dapat menyesuaikan teks apa pun di halaman.

Cara kerja kustomisasi bahasa

Anda menggunakan penyesuaian bahasa untuk memilih bahasa mana alur pengguna Anda tersedia. Setelah fitur diaktifkan, Anda dapat menyediakan parameter string kueri, ui_locales, dari aplikasi Anda. Saat Anda memanggil Azure AD B2C, halaman Anda diterjemahkan ke lokal yang telah Anda tunjukkan. Jenis konfigurasi ini memberi Anda kontrol penuh atas bahasa dalam alur pengguna Anda dan mengabaikan pengaturan bahasa browser pelanggan.

Anda mungkin tidak memerlukan tingkat kontrol tersebut atas bahasa apa yang dilihat pelanggan Anda. Jika Anda tidak memberikan ui_locales parameter, pengalaman pelanggan ditentukan oleh pengaturan browser mereka. Anda masih dapat mengontrol bahasa mana yang diterjemahkan oleh alur pengguna Anda dengan menambahkannya sebagai bahasa yang didukung. Jika browser pelanggan diatur untuk menampilkan bahasa yang tidak ingin Anda dukung, bahasa yang Anda pilih sebagai default dalam budaya yang didukung akan ditampilkan sebagai gantinya.

  • bahasa yang ditentukan ui-locales: Setelah Anda mengaktifkan kustomisasi bahasa, alur pengguna Anda diterjemahkan ke bahasa yang ditentukan di sini.
  • Bahasa yang diminta browser: Jika tidak ada ui_locales parameter yang ditentukan, alur pengguna Anda diterjemahkan ke bahasa yang diminta browser, jika bahasa tersebut didukung.
  • Bahasa default kebijakan: Jika browser tidak menentukan bahasa, atau menentukan bahasa yang tidak didukung, alur pengguna diterjemahkan ke bahasa default alur pengguna.

Nota

Jika Anda menggunakan atribut pengguna kustom, Anda perlu memberikan terjemahan Anda sendiri. Untuk informasi selengkapnya, lihat Menyesuaikan string Anda.

Tonton video ini untuk mempelajari cara melokalisasi atau menyesuaikan bahasa menggunakan Azure AD B2C.

Pelokalan memerlukan tiga langkah:

  1. Menyiapkan daftar eksplisit bahasa yang didukung
  2. Menyediakan string dan koleksi khusus bahasa
  3. Edit definisi konten untuk halaman.

Prasyarat

Mendukung bahasa yang diminta untuk ui_locales

Kebijakan yang dibuat sebelum ketersediaan umum penyesuaian bahasa perlu mengaktifkan fitur ini terlebih dahulu. Kebijakan dan alur pengguna yang dibuat setelahnya memiliki kustomisasi bahasa diaktifkan secara default.

Saat mengaktifkan kustomisasi bahasa pada alur pengguna, Anda dapat mengontrol bahasa alur pengguna dengan menambahkan ui_locales parameter .

  1. Pada tenant Azure AD B2C Anda, pilih Alur pengguna.
  2. Klik alur pengguna yang ingin Anda aktifkan untuk terjemahan.
  3. Pilih Bahasa.
  4. Pilih Aktifkan kustomisasi bahasa.

Pilih bahasa mana dalam alur pengguna Anda yang diaktifkan

Aktifkan sekumpulan bahasa dalam alur penggunanya agar diterjemahkan saat diminta oleh browser tanpa parameter ui_locales.

  1. Pastikan alur pengguna Anda memungkinkan kustomisasi bahasa berdasarkan instruksi sebelumnya.
  2. Pada halaman Bahasa untuk alur pengguna, pilih bahasa yang ingin Anda dukung.
  3. Di panel properti, ubah Diaktifkan menjadi Ya.
  4. Pilih Simpan di bagian atas panel properti.

Nota

ui_locales Jika parameter tidak disediakan, halaman diterjemahkan ke bahasa browser pelanggan hanya jika diaktifkan.

Kustomisasi string Anda

Kustomisasi bahasa memungkinkan Anda untuk menyesuaikan string apa pun dalam alur pengguna Anda.

  1. Pastikan alur pengguna Anda telah mengaktifkan kustomisasi bahasa sesuai dengan instruksi sebelumnya.
  2. Pada halaman Bahasa untuk alur pengguna, pilih bahasa yang ingin Anda kustomisasi.
  3. Di bawah File sumber daya tingkat halaman, pilih halaman yang ingin Anda edit.
  4. Pilih Unduh default(atau Unduh overrides jika Anda sebelumnya telah mengedit bahasa ini).

Langkah ini memberi Anda file JSON yang dapat Anda gunakan untuk mulai mengedit string Anda.

Mengubah string apa pun di halaman

  1. Buka file JSON yang diunduh dari petunjuk sebelumnya di editor JSON.
  2. Temukan elemen yang ingin Anda ubah. Anda dapat menemukan StringId untuk string yang Anda cari, atau mencari atribut Value yang ingin Anda ubah.
  3. Perbarui atribut Value dengan apa yang ingin Anda tampilkan.
  4. Untuk setiap string yang ingin Anda ubah, ubah Override ke true.
  5. Simpan file dan unggah perubahan Anda. (Anda dapat menemukan kontrol unggahan di tempat yang sama dengan tempat Anda mengunduh file JSON.)

Penting

Jika Anda perlu mengambil alih string, pastikan untuk mengatur nilai ke Overridetrue. Jika nilai tidak diubah, entri diabaikan.

Mengubah atribut ekstensi

Jika Anda ingin mengubah string untuk atribut pengguna kustom, atau Anda ingin menambahkannya ke JSON, string tersebut dalam format berikut:

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

Ganti <ExtensionAttribute> dengan nama atribut pengguna kustom Anda.

Ganti <ExtensionAttributeValue> dengan string baru yang akan ditampilkan.

Sediakan daftar nilai dengan menggunakan LocalizedCollections

Jika Anda ingin menyediakan daftar nilai yang ditetapkan untuk respons, Anda perlu membuat atribut LocalizedCollections. LocalizedCollections adalah array dari pasangan Name dan Value. Urutan untuk item akan sesuai dengan urutan mereka ditampilkan. Untuk menambahkan LocalizedCollections, gunakan format berikut:

{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType":"ClaimType",
      "ElementId":"<UserAttribute>",
      "TargetCollection":"Restriction",
      "Override": true,
      "Items":[
        {
          "Name":"<Response1>",
          "Value":"<Value1>"
        },
        {
          "Name":"<Response2>",
          "Value":"<Value2>"
        }
      ]
    }
  ]
}
  • ElementId adalah atribut pengguna yang direspons oleh atribut LocalizedCollections ini.
  • Name adalah nilai yang ditampilkan kepada pengguna.
  • Value adalah apa yang dikembalikan dalam klaim saat opsi ini dipilih.

Mengunggah perubahan Anda

  1. Setelah Anda menyelesaikan perubahan pada file JSON Anda, kembali ke penyewa B2C Anda.
  2. Pilih Alur pengguna dan klik alur pengguna yang ingin Anda aktifkan untuk terjemahan.
  3. Pilih Bahasa.
  4. Pilih bahasa yang ingin Anda terjemahkan.
  5. Pilih halaman tempat Anda ingin memberikan terjemahan.
  6. Pilih ikon folder, lalu pilih file JSON yang akan diunggah.

Perubahan disimpan ke alur pengguna Anda secara otomatis.

Mengkustomisasi UI halaman dengan menggunakan kustomisasi bahasa

Ada dua cara untuk melokalisasi konten HTML Anda. Salah satu caranya adalah dengan mengaktifkan kustomisasi bahasa. Mengaktifkan fitur ini memungkinkan Azure AD B2C untuk meneruskan parameter OpenID Connect, ui-locales, ke titik akhir Anda. Server konten Anda dapat menggunakan parameter ini untuk menyediakan halaman HTML yang dikustomisasi yang khusus untuk bahasa.

Atau, Anda dapat menarik konten dari berbagai tempat berdasarkan lokal yang digunakan. Di titik akhir yang mendukung CORS, Anda dapat menyiapkan struktur folder untuk menghosting konten untuk bahasa tertentu. Anda akan memanggil yang tepat jika Anda menggunakan nilai wildcard {Culture:RFC5646}. Misalnya, asumsikan bahwa ini adalah URI halaman kustom Anda:

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

Anda dapat memuat halaman di fr. Saat halaman memuat konten HTML dan CSS, konten tersebut diambil dari:

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

Menambahkan bahasa kustom

Anda juga dapat menambahkan bahasa yang saat ini tidak menyediakan terjemahan oleh Microsoft. Anda harus memberikan terjemahan untuk semua string dalam alur pengguna. Kode bahasa dan lokal terbatas pada kode dalam standar ISO 639-1. Format kode lokal harus "ISO_639-1_code"-"CountryCode", misalnya en-GB. Untuk informasi selengkapnya, silakan merujuk ke format ID lokal.

  1. Pada tenant Azure AD B2C Anda, pilih Alur pengguna.
  2. Klik alur pengguna tempat Anda ingin menambahkan bahasa kustom, lalu klik Bahasa.
  3. Pilih Tambahkan bahasa kustom dari bagian atas halaman.
  4. Di panel konteks yang terbuka, identifikasi bahasa mana yang Anda berikan terjemahannya dengan memasukkan kode lokal yang valid.
  5. Untuk setiap halaman, Anda dapat mengunduh serangkaian penyesuaian untuk konten berbahasa Inggris dan mengedit terjemahan.
  6. Setelah selesai dengan file JSON, Anda dapat mengunggahnya untuk setiap halaman.
  7. Pilih Aktifkan, dan alur pengguna Anda sekarang dapat menampilkan bahasa ini untuk pengguna Anda.
  8. Selamatkan bahasa.

Penting

Anda perlu mengaktifkan bahasa kustom atau mengunggah penggantian untuknya sebelum Anda dapat menyimpannya.

Menyiapkan daftar bahasa yang didukung

Buka file ekstensi kebijakan Anda. Contohnya, SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  1. Cari elemen BuildingBlocks . Jika elemen tidak ada, tambahkan elemen tersebut.
  2. Localization Tambahkan elemen dengan bahasa yang didukung: Inggris (default) dan Spanyol.
<Localization Enabled="true">
  <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll">
    <SupportedLanguage>en</SupportedLanguage>
    <SupportedLanguage>es</SupportedLanguage>
  </SupportedLanguages>
</Localization>

Menyediakan label khusus bahasa

LocalizedResources dari Localization elemen berisi daftar string yang dilokalkan. Elemen sumber daya yang dilokalkan memiliki pengidentifikasi yang digunakan untuk mengidentifikasi sumber daya yang dilokalkan secara unik. Pengidentifikasi ini digunakan nanti dalam elemen definisi konten .

Anda mengonfigurasi elemen sumber daya yang dilokalkan untuk definisi konten dan bahasa apa pun yang ingin Anda dukung. Untuk mengkustomisasi halaman pendaftaran atau masuk terpadu untuk bahasa Inggris dan Spanyol, Anda menambahkan elemen berikut LocalizedResources setelah menutup </SupportedLanguages> elemen.

Nota

Dalam sampel berikut, kami menambahkan simbol pound # di awal setiap baris, sehingga Anda dapat dengan mudah menemukan label yang dilokalkan di layar.

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

Mengedit definisi konten dengan pelokalan

Tempelkan seluruh konten elemen ContentDefinitions yang Anda salin menjadi turunan dari elemen BuildingBlocks.

Dalam contoh berikut, string kustom Bahasa Inggris (en) dan Spanyol (es) ditambahkan ke halaman pendaftaran atau masuk, dan ke halaman pendaftaran akun lokal. LocalizedResourcesReferenceId untuk setiap LocalizedResourcesReference sama dengan lokalnya, tetapi Anda dapat menggunakan string apa pun sebagai pengidentifikasi. Untuk setiap kombinasi bahasa dan halaman, Anda mengarahkan ke LocalizedResources yang sesuai yang sebelumnya Anda buat.

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

Mengunggah dan menguji kebijakan kustom yang diperbarui

Mengunggah kebijakan kustom

  1. Simpan file ekstensi.
  2. Jika Anda memiliki akses ke beberapa penyewa, pilih ikon Pengaturan di menu atas untuk beralih ke penyewa Azure AD B2C Anda dari menu Direktori + langganan .
  3. Cari dan pilih Azure AD B2C.
  4. Di bawah Kebijakan, pilih Kerangka Kerja Pengalaman Identitas.
  5. Pilih Unggah kebijakan kustom.
  6. Unggah file ekstensi yang sebelumnya Anda ubah.

Menguji kebijakan kustom dengan menggunakan Jalankan sekarang

  1. Pilih kebijakan yang Anda unggah, lalu pilih Jalankan sekarang.
  2. Anda seharusnya dapat melihat halaman pendaftaran atau masuk versi lokal.
  3. Klik tautan pendaftaran, dan Anda akan dapat melihat halaman pendaftaran yang dilokalkan.
  4. Alihkan bahasa default browser Anda ke bahasa Spanyol. Atau Anda dapat menambahkan parameter string kueri, ui_locales ke permintaan otorisasi. Contohnya:
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

Informasi tambahan

Label penyesuaian UI Halaman sebagai ambil alih

Saat Anda mengaktifkan penyesuaian bahasa, pengeditan Anda sebelumnya untuk label menggunakan penyesuaian UI halaman tetap ada dalam file JSON untuk bahasa Inggris (en). Anda dapat terus mengubah label dan string lainnya dengan mengunggah sumber daya bahasa dalam penyesuaian bahasa.

Terjemahan terbaru

Microsoft berkomitmen untuk menyediakan terjemahan terbaru untuk penggunaan Anda. Microsoft terus meningkatkan terjemahan dan membuatnya tetap patuh untuk Anda. Microsoft akan mengidentifikasi bug dan perubahan dalam terminologi global dan membuat pembaruan yang akan bekerja dengan mulus dalam alur pengguna Anda.

Dukungan untuk bahasa kanan-ke-kiri

Microsoft saat ini tidak menyediakan dukungan untuk bahasa kanan-ke-kiri. Anda dapat menyelesaikan ini dengan menggunakan lokal kustom dan menggunakan CSS untuk mengubah cara string ditampilkan. Jika Anda memerlukan fitur ini, silakan pilih fitur tersebut di Umpan Balik Azure.

Terjemahan penyedia identitas sosial

Microsoft menyediakan parameter OIDC ui_locales untuk rincian masuk sosial. Tetapi beberapa penyedia identitas sosial, termasuk Facebook dan Google, tidak menerapkannya.

Perilaku browser

Microsoft Edge, Chrome, dan Firefox meminta pengaturan bahasa mereka. Jika ini adalah bahasa yang didukung, bahasa tersebut ditampilkan sebelum default.

Bahasa yang didukung

Azure AD B2C menyertakan dukungan untuk bahasa berikut dengan menggunakan kode ISO 639-1. Bahasa alur pengguna disediakan oleh Azure AD B2C. Bahasa pemberitahuan autentikasi multifaktor disediakan oleh autentikasi multifaktor Microsoft Entra.

Bahasa Kode bahasa Aliran Pengguna Pemberitahuan MFA
Bahasa Arab Ar X menunjukkan tidak. Tanda centang hijau.
Bahasa Bulgaria Bg X menunjukkan tidak. Tanda centang hijau.
Bahasa Bengali Bn Tanda centang hijau. X menunjukkan tidak.
Katalan Ca X menunjukkan tidak. Tanda centang hijau.
Ceko Cs Tanda centang hijau. Tanda centang hijau.
Dansk Da Tanda centang hijau. Tanda centang hijau.
Jerman De Tanda centang hijau. Tanda centang hijau.
Yunani El Tanda centang hijau. Tanda centang hijau.
Inggris e Tanda centang hijau. Tanda centang hijau.
Spanyol es Tanda centang hijau. Tanda centang hijau.
Bahasa Estonia dan X menunjukkan tidak. Tanda centang hijau.
Bahasa Basque Uni Eropa X menunjukkan tidak. Tanda centang hijau.
Suomi Fi Tanda centang hijau. Tanda centang hijau.
Prancis Prancis Tanda centang hijau. Tanda centang hijau.
Bahasa Galicia Gl X menunjukkan tidak. Tanda centang hijau.
Gujarat Gu Tanda centang hijau. X menunjukkan tidak.
Ibrani dia X menunjukkan tidak. Tanda centang hijau.
Bahasa Hindi Hai Tanda centang hijau. Tanda centang hijau.
Kroasia Hr Tanda centang hijau. Tanda centang hijau.
Bahasa Hungaria Uh Tanda centang hijau. Tanda centang hijau.
Bahasa Indonesia Id X menunjukkan tidak. Tanda centang hijau.
Italia itu Tanda centang hijau. Tanda centang hijau.
Jepang Ja Tanda centang hijau. Tanda centang hijau.
Bahasa Kazak kk X menunjukkan tidak. Tanda centang hijau.
Kannada Kn Tanda centang hijau. X menunjukkan tidak.
Bahasa Korea Ko Tanda centang hijau. Tanda centang hijau.
Bahasa Lituania liter X menunjukkan tidak. Tanda centang hijau.
Bahasa Latvia Lv X menunjukkan tidak. Tanda centang hijau.
Malayalam mililiter Tanda centang hijau. X menunjukkan tidak.
Marathi bapak Tanda centang hijau. X menunjukkan tidak.
Melayu Ms Tanda centang hijau. Tanda centang hijau.
Bokmal Norwegia Nb Tanda centang hijau. X menunjukkan tidak.
Belanda Belanda Tanda centang hijau. Tanda centang hijau.
Norwegia Tidak X menunjukkan tidak. Tanda centang hijau.
Punjabi Pa Tanda centang hijau. X menunjukkan tidak.
Bahasa Polandia Pl Tanda centang hijau. Tanda centang hijau.
Portugis - Brasil pt-br Tanda centang hijau. Tanda centang hijau.
Portugis - Portugal pt-pt Tanda centang hijau. Tanda centang hijau.
Rumania Ro Tanda centang hijau. Tanda centang hijau.
Rusia Ru Tanda centang hijau. Tanda centang hijau.
Bahasa Slowakia Sk Tanda centang hijau. Tanda centang hijau.
Bahasa Slovenia Sl X menunjukkan tidak. Tanda centang hijau.
Bahasa Serbia - Sirilik Sr-CRL-CS X menunjukkan tidak. Tanda centang hijau.
Bahasa Serbia - Latin SR-LATN-CS X menunjukkan tidak. Tanda centang hijau.
Swedia Swedia Tanda centang hijau. Tanda centang hijau.
Tamil makasih Tanda centang hijau. X menunjukkan tidak.
Telugu Te Tanda centang hijau. X menunjukkan tidak.
Thailand Th Tanda centang hijau. Tanda centang hijau.
Turki Tr Tanda centang hijau. Tanda centang hijau.
Ukraina Inggris Raya X menunjukkan tidak. Tanda centang hijau.
Bahasa Vietnam Vi X menunjukkan tidak. Tanda centang hijau.
Bahasa Wales Cy X menunjukkan tidak. X menunjukkan tidak.
Bahasa Tionghoa - Disederhanakan zh-hans Tanda centang hijau. Tanda centang hijau.
Bahasa Tionghoa - Tradisional zh-hant Tanda centang hijau. Tanda centang hijau.

Langkah selanjutnya

Temukan informasi selengkapnya tentang bagaimana Anda dapat menyesuaikan antarmuka pengguna aplikasi Anda di Menyesuaikan antarmuka pengguna aplikasi Anda di Azure Active Directory B2C.