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

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

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

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

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

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

  • لغة ui-locales المحددة:بعد تمكين تخصيص اللغة، تتم ترجمة تدفق المستخدم إلى اللغة المحددة هنا.
  • اللغة المطلوبة من المتصفح:إذا ui_locales لم يتم تحديد معلمة، تتم ترجمة تدفق المستخدم إلى اللغة المطلوبة من المتصفح، إذا كانت اللغة مدعومة.
  • اللغة الافتراضية للسياسة: إذا لم يحدد المتصفح لغة، أو حدد لغة غير مدعومة، فستتم ترجمة تدفق المستخدم إلى اللغة الافتراضية لتدفق المستخدم.

إشعار

إذا كنت تستخدم سمات مستخدم مخصصة، فستحتاج إلى توفير ترجماتك الخاصة. لمزيد من المعلومات، راجع تخصيص السلاسل الخاصة بك.

شاهد هذا الفيديو لمعرفة كيفية ترجمة اللغة أو تخصيصها باستخدام Azure AD B2C.

يتطلب التعريب ثلاث خطوات:

  1. إعداد القائمة الصريحة للغات المدعومة
  2. توفير سلاسل ومجموعات خاصة باللغة
  3. تحرير تعريف المحتوى للصفحة.

المتطلبات الأساسية

اللغات المطلوبة للدعم بالنسبة لـ ui_locales

يجب أن تقوم النهج التي تم إنشاؤها قبل التوفر العام لتخصيص اللغة بتمكين هذه الميزة أولاً. النهج وتدفقات المستخدم التي تم إنشاؤها بعد تمكين تخصيص اللغة بشكل افتراضي.

عند تمكين تخصيص اللغة على تدفق مستخدم، يمكنك التحكم في لغة تدفق المستخدم عن طريق إضافة ui_locales المعلمة.

  1. في مستأجر Azure AD B2C، حدّد User flows.
  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 هو مصفوفة من 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 الاتصال، 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، حدّد User flows.
  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>

توفير تسميات خاصة باللغة

يحتوي LocalizedResources للعنصر 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 هي نفس اللغة، إلا أنه يمكنك استخدام أي سلسلة كمعرف. لكل مجموعة لغة وصفحة، أشر إلى LocalizedResources التي قمت بإنشائها مسبقًا.

<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 من قائمة Directories + subscriptions.
  3. ابحث عن Azure AD B2C وحدده.
  4. ضمن Policies، حدد 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=0239a9cc-309c-4d41-12f1-31299feb2e82&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login&ui_locales=es

معلومات اضافيه

تسميات تخصيص واجهة المستخدم للصفحة كتجاوزات

عند تمكين تخصيص اللغة، تستمر عمليات التحرير السابقة للتسميات باستخدام تخصيص واجهة المستخدم للصفحة في ملف JSON للغة الإنجليزية (en). يمكنك الاستمرار في تغيير التسميات والسلاسل الأخرى عن طريق تحميل موارد اللغة في تخصيص اللغة.

ترجمات حديثة

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

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

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

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

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

سلوك المتصفح

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

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

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

اللغة‬ رمز اللغة تدفقات المستخدمين إشعارات وزارة الخارجية
العربية ar X indicating no. Green check mark.
البلغارية bg X indicating no. Green check mark.
البنغالية bn Green check mark. X indicating no.
الكتالانية ca X indicating no. Green check mark.
التشيكية cs Green check mark. Green check mark.
الدانماركية da Green check mark. Green check mark.
الألمانية de Green check mark. Green check mark.
اليونانية el Green check mark. Green check mark.
‏‫الإنجليزية‬ en Green check mark. Green check mark.
الإسبانية es Green check mark. Green check mark.
الإستونية et X indicating no. Green check mark.
الباسكية eu X indicating no. Green check mark.
الفنلندية fi Green check mark. Green check mark.
الفرنسية fr Green check mark. Green check mark.
الغليشيانية gl X indicating no. Green check mark.
الجيوجاراتية gu Green check mark. X indicating no.
العبرية he X indicating no. Green check mark.
الهندية hi Green check mark. Green check mark.
‏‏الكرواتية ساعات Green check mark. Green check mark.
الهنغارية hu Green check mark. Green check mark.
الإندونيسية المعرف X indicating no. Green check mark.
الإيطالية it Green check mark. Green check mark.
اليابانية ja Green check mark. Green check mark.
الكازاخية kk X indicating no. Green check mark.
الكنادية kn Green check mark. X indicating no.
الكورية ko Green check mark. Green check mark.
الليتوانية lt X indicating no. Green check mark.
اللاتفية lv X indicating no. Green check mark.
المالايالامية ml Green check mark. X indicating no.
الماراثية mr Green check mark. X indicating no.
الماليزية ميلي ثانية Green check mark. Green check mark.
لغة بوكمال النرويجية nb Green check mark. X indicating no.
الهولندية nl Green check mark. Green check mark.
النرويجية no X indicating no. Green check mark.
البنجابية pa Green check mark. X indicating no.
البولندية pl Green check mark. Green check mark.
البرتغالية - البرازيل البرتغالية (البرازيل) Green check mark. Green check mark.
البرتغالية - البرتغال pt-pt Green check mark. Green check mark.
الرومانية ro Green check mark. Green check mark.
الروسية ru Green check mark. Green check mark.
السلوفاكية sk Green check mark. Green check mark.
السلوفينية sl X indicating no. Green check mark.
الصربية - السيريلية sr-cryl-cs X indicating no. Green check mark.
الصربية - اللاتينية sr-latn-cs X indicating no. Green check mark.
السويدية sv Green check mark. Green check mark.
التاميلية ta Green check mark. X indicating no.
تيلوجو te Green check mark. X indicating no.
التايلاندية th Green check mark. Green check mark.
التركية tr Green check mark. Green check mark.
الأوكرانية uk X indicating no. Green check mark.
الفيتنامية‬ vi X indicating no. Green check mark.
الويلزية cy X indicating no. X indicating no.
الصينية – المبسطة الصينية المبسّطة Green check mark. Green check mark.
الصينية – التقليدية zh-hant Green check mark. Green check mark.

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

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