تخصيص اللغة في Azure Active Directory B2C

هام

اعتبارا من 1 مايو 2025، لن يكون Azure AD B2C متوفرا للشراء للعملاء الجدد. تعرف على المزيد في الأسئلة المتداولة.

قبل البدء، استخدم محدد اختيار نوع نهج في أعلى هذه الصفحة لاختيار نوع النهج الذي تقوم بإعداده. يوفر Azure Active Directory B2C طريقتين لتحديد كيفية تفاعل المستخدمين مع تطبيقاتك: من خلال تدفقات محددة مسبقا للمستخدمين أو من خلال سياسات مخصصة قابلة للتكوين بشكل كامل. تختلف الخطوات المطلوبة في هذه المقالة لكل أسلوب.

يسمح تخصيص اللغة في Azure Active Directory B2C (Azure AD B2C) لتدفق المستخدم باستيعاب لغات مختلفة لتناسب احتياجات عملائك. توفر Microsoft الترجمات ل 36 لغة ، ولكن يمكنك أيضا توفير ترجماتك الخاصة لأي لغة. حتى إذا تم توفير تجربتك للغة واحدة فقط ، فيمكنك تخصيص أي نص على الصفحات.

كيف يعمل تخصيص اللغة

يمكنك استخدام تخصيص اللغة لتحديد اللغات التي يتوفر بها تدفق المستخدم. بعد تمكين الميزة، يمكنك توفير معلمة سلسلة الاستعلام، ui_locales، من التطبيق الخاص بك. عند الاتصال ب Azure AD B2C، تتم ترجمة صفحتك إلى الإعدادات المحلية التي أشرت إليها. يمنحك هذا النوع من التكوين تحكما كاملا في اللغات في تدفق المستخدم الخاص بك ويتجاهل إعدادات اللغة في مستعرض العميل.

قد لا تحتاج إلى هذا المستوى من التحكم في اللغات التي يراها عميلك. إذا لم تقدم معلمة ui_locales ، إملاء تجربة العميل بواسطة إعدادات المستعرض الخاص به. لا يزال بإمكانك التحكم في اللغات التي تتم ترجمة تدفق المستخدم إليها عن طريق إضافته كلغة مدعومة. إذا تم تعيين مستعرض العميل لإظهار لغة لا تريد دعمها، عرض اللغة التي حددتها كلغة افتراضية في الثقافات المدعومة بدلا من ذلك.

  • اللغة المحددة للغات واجهة المستخدم: بعد تمكين تخصيص اللغة، تتم ترجمة تدفق المستخدم إلى اللغة المحددة هنا.
  • اللغة المطلوبة من المتصفح: إذا لم يتم تحديد أي 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 بإعادة توجيه معلمة 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. لمزيد من المعلومات، يرجى الرجوع إلى تنسيقات معرفات الإعدادات المحلية.

  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>

تحرير تعريف المحتوى باستخدام الترجمة

الصق المحتويات الكاملة للعنصر 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. ضمن Policies، حدد Identity Experience Framework.
  5. حدد Upload custom policy.
  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). يمكنك الاستمرار في تغيير التصنيفات والسلاسل الأخرى عن طريق تحميل موارد اللغة في تخصيص اللغة.

ترجمات حديثة

تلتزم Microsoft بتوفير معظم الترجمات up-to-date لاستخدامها. تعمل Microsoft باستمرار على تحسين الترجمات والحفاظ على امتثالها نيابة عنك. ستقوم Microsoft بتحديد الأخطاء والتغييرات في المصطلحات العامة وإجراء التحديثات التي ستعمل بسلاسة في تدفق المستخدم الخاص بك.

دعم اللغات من اليمين إلى اليسار

لا تقدم Microsoft حاليا دعما للغات التي تكتب من اليمين إلى اليسار. يمكنك تحقيق ذلك باستخدام الإعدادات المحلية المخصصة واستخدام CSS لتغيير طريقة عرض السلاسل. إذا كنت بحاجة إلى هذه الميزة، فيرجى التصويت لها في Azure Feedback.

ترجمات موفر الهوية الاجتماعية

توفر ui_locales Microsoft المعلمة OIDC لعمليات تسجيل الدخول الاجتماعية. لكن بعض مزودي الهوية الاجتماعية ، بما في ذلك Facebook و Google ، لا يكرمونهم.

سلوك المتصفح

يطلب Microsoft Edge و Chrome و Firefox لغتهم المحددة. إذا كانت لغة مدعومة، عرضها قبل الإعداد الافتراضي.

اللغات المدعومة

يتضمن Azure AD B2C دعما للغات التالية باستخدام رموز ISO 639-1. يتم توفير لغات تدفق المستخدم بواسطة Azure AD B2C. يتم توفير لغات إعلام المصادقة متعددة العوامل بواسطة المصادقة متعددة العوامل من Microsoft Entra.

اللغة رمز اللغة تدفقات المستخدمين إعلامات المصادقة متعددة العوامل
العربية ع X يشير إلى لا. علامة اختيار خضراء.
البلغارية ب جي X يشير إلى لا. علامة اختيار خضراء.
البنغالية الجبهه الوطنيه علامة اختيار خضراء. X يشير إلى لا.
الكتالانية كاليفورنيا X يشير إلى لا. علامة اختيار خضراء.
التشيكية cs علامة اختيار خضراء. علامة اختيار خضراء.
الدانماركية دا علامة اختيار خضراء. علامة اختيار خضراء.
الألمانية دي علامة اختيار خضراء. علامة اختيار خضراء.
اليونانية إل علامة اختيار خضراء. علامة اختيار خضراء.
‏‫الإنجليزية‬ اون علامة اختيار خضراء. علامة اختيار خضراء.
الإسبانية داط علامة اختيار خضراء. علامة اختيار خضراء.
الإستونية اخرون X يشير إلى لا. علامة اختيار خضراء.
الباسكية الاتحاد الأوروبي X يشير إلى لا. علامة اختيار خضراء.
الفنلندية فاي علامة اختيار خضراء. علامة اختيار خضراء.
الفرنسية الاب علامة اختيار خضراء. علامة اختيار خضراء.
الجاليشية جي إل X يشير إلى لا. علامة اختيار خضراء.
الجوجاراتية غو علامة اختيار خضراء. X يشير إلى لا.
العبرية هو X يشير إلى لا. علامة اختيار خضراء.
الهندية مرحبا علامة اختيار خضراء. علامة اختيار خضراء.
الكرواتية ساعة علامة اختيار خضراء. علامة اختيار خضراء.
الهنغارية هو علامة اختيار خضراء. علامة اختيار خضراء.
الإندونيسية معرف X يشير إلى لا. علامة اختيار خضراء.
الإيطالية إنه علامة اختيار خضراء. علامة اختيار خضراء.
اليابانية جا علامة اختيار خضراء. علامة اختيار خضراء.
الكازاخستانية ك ك X يشير إلى لا. علامة اختيار خضراء.
الكندية kn علامة اختيار خضراء. X يشير إلى لا.
الكورية كو علامة اختيار خضراء. علامة اختيار خضراء.
الليتوانية الملازم X يشير إلى لا. علامة اختيار خضراء.
اللاتفية lv X يشير إلى لا. علامة اختيار خضراء.
المالايلامية مل علامة اختيار خضراء. X يشير إلى لا.
الماراثية السيد علامة اختيار خضراء. X يشير إلى لا.
الماليزية ميلي ثانية علامة اختيار خضراء. علامة اختيار خضراء.
لغة بوكمال النرويجية ملحوظه علامة اختيار خضراء. X يشير إلى لا.
الهولندية nl علامة اختيار خضراء. علامة اختيار خضراء.
النرويجية لا X يشير إلى لا. علامة اختيار خضراء.
البنجابية ابي علامة اختيار خضراء. X يشير إلى لا.
البولندية رر علامة اختيار خضراء. علامة اختيار خضراء.
البرتغالية - البرازيل البرتغالية (البرازيل) علامة اختيار خضراء. علامة اختيار خضراء.
البرتغالية - البرتغال pt-pt علامة اختيار خضراء. علامة اختيار خضراء.
الرومانية ريال عماني علامة اختيار خضراء. علامة اختيار خضراء.
الروسية رو علامة اختيار خضراء. علامة اختيار خضراء.
السلوفاكية كورونا علامة اختيار خضراء. علامة اختيار خضراء.
السلوفينية SL X يشير إلى لا. علامة اختيار خضراء.
الصربية - السيريلية SR-CRYL-CS X يشير إلى لا. علامة اختيار خضراء.
الصربية - اللاتينية SR-LATAN-CS X يشير إلى لا. علامة اختيار خضراء.
السويدية sv علامة اختيار خضراء. علامة اختيار خضراء.
التاميلية تا علامة اختيار خضراء. X يشير إلى لا.
التيلوغية تي علامة اختيار خضراء. X يشير إلى لا.
التايلاندية ال علامة اختيار خضراء. علامة اختيار خضراء.
التركية ار علامة اختيار خضراء. علامة اختيار خضراء.
الأوكرانية المملكة المتحدة X يشير إلى لا. علامة اختيار خضراء.
فيتنامي السادس X يشير إلى لا. علامة اختيار خضراء.
الويلزية قبرصي X يشير إلى لا. X يشير إلى لا.
الصينية - المبسطة الصينية المبسّطة علامة اختيار خضراء. علامة اختيار خضراء.
الصينية - التقليدية زي هانت علامة اختيار خضراء. علامة اختيار خضراء.

الخطوات التالية

اعثر على مزيد من المعلومات حول كيفية تخصيص واجهة المستخدم لتطبيقاتك في تخصيص واجهة المستخدم للتطبيق الخاص بك في Azure Active Directory B2C.