Dostosowywanie języka w usłudze Azure Active Directory B2C

Przed rozpoczęciem użyj selektora Wybierz typ zasad, aby wybrać typ konfigurowanych zasad. Usługa Azure Active Directory B2C oferuje dwie metody definiowania sposobu interakcji użytkowników z aplikacjami: za pomocą wstępnie zdefiniowanych przepływów użytkowników lub w pełni konfigurowalnych zasad niestandardowych. Kroki wymagane w tym artykule są różne dla każdej metody.

Dostosowywanie języka w usłudze Azure Active Directory B2C (Azure AD B2C) umożliwia przepływowi użytkownika dostosowane do potrzeb klientów w różnych językach. Firma Microsoft udostępnia tłumaczenia dla 36 języków, ale możesz również udostępnić własne tłumaczenia dla dowolnego języka. Nawet jeśli środowisko jest dostępne tylko dla jednego języka, możesz dostosować dowolny tekst na stronach.

Jak działa dostosowywanie języka

Dostosowywanie języka służy do wybierania języków, w których jest dostępny przepływ użytkownika. Po włączeniu funkcji możesz podać parametr ciągu zapytania , ui_localesz aplikacji. Podczas wywoływania usługi Azure AD B2C strona jest tłumaczona na wskazane ustawienia regionalne. Ten typ konfiguracji zapewnia pełną kontrolę nad językami w przepływie użytkownika i ignoruje ustawienia języka przeglądarki klienta.

Może nie być potrzebny ten poziom kontroli nad językami wyświetlanymi przez klienta. Jeśli nie podasz parametru ui_locales , środowisko klienta jest dyktowane przez ustawienia przeglądarki. Nadal możesz kontrolować języki, na które przepływ użytkownika jest tłumaczony, dodając go jako obsługiwany język. Jeśli przeglądarka klienta jest ustawiona tak, aby pokazywała język, którego nie chcesz obsługiwać, zostanie wyświetlony język wybrany jako domyślny w obsługiwanych kulturach.

  • Określony język ustawień regionalnych interfejsu użytkownika: po włączeniu dostosowywania języka przepływ użytkownika jest tłumaczony na język określony w tym miejscu.
  • Język żądany przez przeglądarkę: jeśli nie ui_locales określono parametru, przepływ użytkownika jest tłumaczony na język żądany przez przeglądarkę, jeśli język jest obsługiwany.
  • Język domyślny zasad: jeśli przeglądarka nie określi języka lub określa język, który nie jest obsługiwany, przepływ użytkownika jest tłumaczony na domyślny język przepływu użytkownika.

Uwaga

Jeśli używasz niestandardowych atrybutów użytkownika, musisz podać własne tłumaczenia. Aby uzyskać więcej informacji, zobacz Dostosowywanie ciągów.

Obejrzyj ten film wideo, aby dowiedzieć się, jak lokalizować lub dostosowywać język przy użyciu usługi Azure AD B2C.

Lokalizacja wymaga trzech kroków:

  1. Konfigurowanie jawnej listy obsługiwanych języków
  2. Udostępnianie ciągów i kolekcji specyficznych dla języka
  3. Edytuj definicję zawartości dla strony.

Wymagania wstępne

Żądane języki pomocy technicznej dla ui_locales

Zasady, które zostały utworzone przed ogólną dostępnością dostosowywania języka, muszą najpierw włączyć tę funkcję. Zasady i przepływy użytkowników, które zostały utworzone po włączeniu dostosowywania języka domyślnie.

Po włączeniu dostosowywania języka w przepływie użytkownika można kontrolować język przepływu użytkownika, dodając ui_locales parametr .

  1. W dzierżawie usługi Azure AD B2C wybierz pozycję Przepływy użytkownika.
  2. Kliknij przepływ użytkownika, który chcesz włączyć dla tłumaczeń.
  3. Wybierz pozycję Języki.
  4. Wybierz pozycję Włącz dostosowywanie języka.

Wybierz języki w przepływie użytkownika, które są włączone

Włącz zestaw języków dla przepływu użytkownika, który ma być tłumaczony na żądanie przez przeglądarkę bez parametru ui_locales .

  1. Upewnij się, że przepływ użytkownika ma włączone dostosowywanie języka z poprzednich instrukcji.
  2. Na stronie Języki przepływu użytkownika wybierz język, który chcesz obsługiwać.
  3. W okienku właściwości zmień wartość Włączone na Tak.
  4. Wybierz pozycję Zapisz w górnej części okienka właściwości.

Uwaga

ui_locales Jeśli parametr nie zostanie podany, strona zostanie przetłumaczona na język przeglądarki klienta tylko wtedy, gdy jest włączona.

Dostosowywanie ciągów

Dostosowywanie języka umożliwia dostosowanie dowolnego ciągu w przepływie użytkownika.

  1. Upewnij się, że przepływ użytkownika ma włączone dostosowywanie języka z poprzednich instrukcji.
  2. Na stronie Języki przepływu użytkownika wybierz język, który chcesz dostosować.
  3. W obszarze Pliki zasobów na poziomie strony wybierz stronę, którą chcesz edytować.
  4. Wybierz pozycję Pobierz wartości domyślne (lub Pobierz przesłonięcia , jeśli wcześniej edytowano ten język).

Te kroki dają plik JSON, którego można użyć do rozpoczęcia edytowania ciągów.

Zmienianie dowolnego ciągu na stronie

  1. Otwórz plik JSON pobrany z poprzednich instrukcji w edytorze JSON.
  2. Znajdź element, który chcesz zmienić. Możesz znaleźć StringId ciąg, którego szukasz, lub wyszukać Value atrybut, który chcesz zmienić.
  3. Zaktualizuj atrybut za Value pomocą wyświetlanego elementu.
  4. Dla każdego ciągu, który chcesz zmienić, zmień wartość Override na true.
  5. Zapisz plik i przekaż zmiany. (Kontrolkę przekazywania można znaleźć w tym samym miejscu, w którym pobrano plik JSON).

Ważne

Jeśli musisz zastąpić ciąg, pamiętaj, aby ustawić Override wartość na true. Jeśli wartość nie zostanie zmieniona, wpis zostanie zignorowany.

Zmienianie atrybutów rozszerzenia

Jeśli chcesz zmienić ciąg atrybutu użytkownika niestandardowego lub chcesz dodać go do formatu JSON, ma on następujący format:

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

Zastąp <ExtensionAttribute> ciąg nazwą niestandardowego atrybutu użytkownika.

Zastąp <ExtensionAttributeValue> ciąg nowym ciągiem, który ma być wyświetlany.

Podaj listę wartości przy użyciu elementu LocalizedCollections

Jeśli chcesz podać listę zestawów wartości dla odpowiedzi, musisz utworzyć LocalizedCollections atrybut. LocalizedCollections jest tablicą Name par i Value . Kolejność elementów będzie kolejnością ich wyświetlania. Aby dodać LocalizedCollectionselement , użyj następującego formatu:

{
  "LocalizedStrings": [...],
  "LocalizedCollections": [
    {
      "ElementType":"ClaimType",
      "ElementId":"<UserAttribute>",
      "TargetCollection":"Restriction",
      "Override": true,
      "Items":[
        {
          "Name":"<Response1>",
          "Value":"<Value1>"
        },
        {
          "Name":"<Response2>",
          "Value":"<Value2>"
        }
      ]
    }
  ]
}
  • ElementId jest atrybutem użytkownika, do którego ten LocalizedCollections atrybut jest odpowiedzią.
  • Name to wartość wyświetlana użytkownikowi.
  • Value to, co jest zwracane w oświadczeniu po wybraniu tej opcji.

Przekazywanie zmian

  1. Po zakończeniu zmian w pliku JSON wróć do dzierżawy usługi B2C.
  2. Wybierz pozycję Przepływy użytkownika i kliknij przepływ użytkownika, który chcesz włączyć dla tłumaczeń.
  3. Wybierz pozycję Języki.
  4. Wybierz język, na który chcesz przetłumaczyć.
  5. Wybierz stronę, na której chcesz podać tłumaczenia.
  6. Wybierz ikonę folderu i wybierz plik JSON do przekazania.

Zmiany są zapisywane automatycznie w przepływie użytkownika.

Dostosowywanie interfejsu użytkownika strony przy użyciu dostosowywania języka

Istnieją dwa sposoby lokalizowania zawartości HTML. Jednym ze sposobów jest włączenie dostosowywania języka. Włączenie tej funkcji umożliwia usłudze Azure AD B2C przekazywanie parametru openID Połączenie , ui-localesdo punktu końcowego. Serwer zawartości może użyć tego parametru, aby zapewnić dostosowane strony HTML specyficzne dla języka.

Alternatywnie możesz ściągnąć zawartość z różnych miejsc na podstawie używanych ustawień regionalnych. W punkcie końcowym z obsługą mechanizmu CORS można skonfigurować strukturę folderów do hostowania zawartości dla określonych języków. Jeśli użyjesz wartości symbolu wieloznakowego, wywołasz odpowiednią wartość {Culture:RFC5646}. Załóżmy na przykład, że jest to niestandardowy identyfikator URI strony:

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

Stronę można załadować w pliku fr. Gdy strona ściąga zawartość HTML i CSS, pobiera ją z:

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

Dodawanie języków niestandardowych

Możesz również dodać języki, dla których obecnie firma Microsoft nie udostępnia tłumaczeń. Należy podać tłumaczenia dla wszystkich ciągów w przepływie użytkownika. Kody językowe i regionalne są ograniczone do tych w standardzie ISO 639-1. Format kodu ustawień regionalnych powinien mieć wartość "ISO_639-1_code"-"CountryCode", na przykład en-GB. Aby uzyskać więcej informacji, zapoznaj się z formatami identyfikatorów ustawień regionalnych.

  1. W dzierżawie usługi Azure AD B2C wybierz pozycję Przepływy użytkownika.
  2. Kliknij przepływ użytkownika, w którym chcesz dodać języki niestandardowe, a następnie kliknij pozycję Języki.
  3. Wybierz pozycję Dodaj język niestandardowy w górnej części strony.
  4. W otwartym okienku kontekstowym zidentyfikuj język, dla którego udostępniasz tłumaczenia, wprowadzając prawidłowy kod ustawień regionalnych.
  5. Dla każdej strony można pobrać zestaw przesłonięć dla języka angielskiego i pracować nad tłumaczeniami.
  6. Po zakończeniu pracy z plikami JSON możesz przekazać je dla każdej strony.
  7. Wybierz pozycję Włącz, a przepływ użytkownika może teraz wyświetlać ten język dla użytkowników.
  8. Zapisz język.

Ważne

Przed zapisaniem należy włączyć języki niestandardowe lub przesłonięcia przekazywania.

Konfigurowanie listy obsługiwanych języków

Otwórz plik rozszerzeń zasad. Na przykład SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  1. Wyszukaj element BuildingBlocks. Jeśli element nie istnieje, dodaj go.
  2. Localization Dodaj element z obsługiwanymi językami: angielski (ustawienie domyślne) i hiszpański.
<Localization Enabled="true">
  <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll">
    <SupportedLanguage>en</SupportedLanguage>
    <SupportedLanguage>es</SupportedLanguage>
  </SupportedLanguages>
</Localization>

Podaj etykiety specyficzne dla języka

Element LocalizedResourcesLocalization zawiera listę zlokalizowanych ciągów. Zlokalizowany element zasobów ma identyfikator używany do unikatowego identyfikowania zlokalizowanych zasobów. Ten identyfikator jest używany w dalszej części elementu definicji zawartości.

Elementy zlokalizowanych zasobów można skonfigurować dla definicji zawartości i dowolnego języka, który chcesz obsługiwać. Aby dostosować ujednolicone strony rejestracji lub logowania dla języka angielskiego i hiszpańskiego</SupportedLanguages>, należy dodać następujące LocalizedResources elementy po zamknięciu elementu.

Uwaga

W poniższym przykładzie dodaliśmy symbol funta # na początku każdego wiersza, dzięki czemu można łatwo znaleźć zlokalizowane etykiety na ekranie.

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

Edytowanie definicji zawartości przy użyciu lokalizacji

Wklej całą zawartość elementu ContentDefinitions skopiowaną jako element podrzędny elementu BuildingBlocks.

W poniższym przykładzie niestandardowe ciągi języka angielskiego (en) i hiszpańskiego (es) są dodawane do strony rejestracji lub logowania oraz na stronie rejestracji konta lokalnego. LocalizedResourcesReferenceId dla każdego localizedResourcesReference jest taka sama jak ich ustawienia regionalne, ale można użyć dowolnego ciągu jako identyfikatora. Dla każdego języka i kombinacji stron wskażesz odpowiednie utworzone wcześniej elementy 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>

Przekazywanie i testowanie zaktualizowanych zasad niestandardowych

Przekazywanie zasad niestandardowych

  1. Zapisz plik rozszerzeń.
  2. Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.
  3. Wyszukaj i wybierz Azure AD B2C.
  4. W obszarze Zasady wybierz pozycję Identity Experience Framework.
  5. Wybierz pozycję Przekaż zasady niestandardowe.
  6. Przekaż plik rozszerzeń, który został wcześniej zmieniony.

Testowanie zasad niestandardowych przy użyciu polecenia Uruchom teraz

  1. Wybierz przekazane zasady, a następnie wybierz pozycję Uruchom teraz.
  2. Powinna być widoczna zlokalizowana strona rejestracji lub logowania.
  3. Kliknij link rejestracji i powinien być widoczny zlokalizowany adres strony rejestracji.
  4. Przełącz domyślny język przeglądarki na hiszpański. Możesz też dodać parametr ui_locales ciągu zapytania do żądania autoryzacji. Przykład:
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

Dodatkowe informacje

Etykiety dostosowywania interfejsu użytkownika strony jako przesłonięcia

Po włączeniu dostosowywania języka poprzednie zmiany etykiet przy użyciu dostosowywania interfejsu użytkownika strony są utrwalane w pliku JSON dla języka angielskiego (en). Możesz nadal zmieniać etykiety i inne ciągi, przekazując zasoby języka w dostosowywaniu języka.

Aktualne tłumaczenia

Firma Microsoft zobowiązuje się do udostępniania najbardziej aktualnych tłumaczeń do użycia. Firma Microsoft stale ulepsza tłumaczenia i utrzymuje ich zgodność. Firma Microsoft będzie identyfikować usterki i zmiany w globalnej terminologii oraz wprowadzać aktualizacje, które będą bezproblemowo działać w przepływie użytkownika.

Obsługa języków od prawej do lewej

Firma Microsoft obecnie nie zapewnia obsługi języków od prawej do lewej. Można to zrobić przy użyciu niestandardowych ustawień regionalnych i arkuszy CSS, aby zmienić sposób wyświetlania ciągów. Jeśli potrzebujesz tej funkcji, zagłosuj na jej opinię na temat platformy Azure.

Tłumaczenia dostawców tożsamości społecznościowych

Firma Microsoft udostępnia ui_locales parametr OIDC do logowania społecznościowego. Ale niektórzy dostawcy tożsamości społecznościowych, w tym Facebook i Google, nie honorują ich.

Zachowanie przeglądarki

Chrome i Firefox żądają ich języka zestawu. Jeśli jest to obsługiwany język, jest wyświetlany przed ustawieniem domyślnym. Przeglądarka Microsoft Edge obecnie nie żąda języka i przechodzi prosto do języka domyślnego.

Obsługiwane języki

Usługa Azure AD B2C obejmuje obsługę następujących języków przy użyciu kodów ISO 639-1. Języki przepływu użytkownika są udostępniane przez usługę Azure AD B2C. Języki powiadomień uwierzytelniania wieloskładnikowego są dostarczane przez uwierzytelnianie wieloskładnikowe firmy Microsoft.

Język Kod języka Przepływy użytkowników Powiadomienia uwierzytelniania wieloskładnikowego
Arabski ar X indicating no. Green check mark.
bułgarski bg X indicating no. Green check mark.
Bangla Bn Green check mark. X indicating no.
kataloński ca X indicating no. Green check mark.
Czeski cs Green check mark. Green check mark.
Duński da Green check mark. Green check mark.
Niemiecki de Green check mark. Green check mark.
Grecki el Green check mark. Green check mark.
English en Green check mark. Green check mark.
Hiszpański es Green check mark. Green check mark.
estoński et X indicating no. Green check mark.
Baskijski eu X indicating no. Green check mark.
Fiński fi Green check mark. Green check mark.
Francuski fr Green check mark. Green check mark.
galicyjski gl X indicating no. Green check mark.
Gudżarati Gu Green check mark. X indicating no.
Hebrajski he X indicating no. Green check mark.
hindi hi Green check mark. Green check mark.
chorwacki go Green check mark. Green check mark.
Węgierski hu Green check mark. Green check mark.
Indonezyjski id X indicating no. Green check mark.
Włoski it Green check mark. Green check mark.
japoński ja Green check mark. Green check mark.
kazachski kk X indicating no. Green check mark.
Kannada Kn Green check mark. X indicating no.
Koreański ko Green check mark. Green check mark.
litewski lt X indicating no. Green check mark.
łotewski lv X indicating no. Green check mark.
Malayalam ml Green check mark. X indicating no.
Marathi Pan Green check mark. X indicating no.
Malajski ms Green check mark. Green check mark.
Norweski Bokmal nb Green check mark. X indicating no.
niderlandzki nl Green check mark. Green check mark.
norweski nie X indicating no. Green check mark.
Pendżabski Pa Green check mark. X indicating no.
Polski pl Green check mark. Green check mark.
Portugalski — Brazylia pt-br Green check mark. Green check mark.
Portugalski — Portugalia pt-pt Green check mark. Green check mark.
rumuński ro Green check mark. Green check mark.
Rosyjski ru Green check mark. Green check mark.
słowacki sk Green check mark. Green check mark.
słoweński sl X indicating no. Green check mark.
Serbski — cyrylica sr-cryl-cs X indicating no. Green check mark.
Serbski — łaciński sr-latn-cs X indicating no. Green check mark.
Szwedzki sv Green check mark. Green check mark.
Tamilski ta Green check mark. X indicating no.
Telugu te Green check mark. X indicating no.
tajski th Green check mark. Green check mark.
Turecki tr Green check mark. Green check mark.
ukraiński uk X indicating no. Green check mark.
Wietnamski vi X indicating no. Green check mark.
Walijski Cy X indicating no. X indicating no.
Chiński — uproszczony zh-hans Green check mark. Green check mark.
Chiński — tradycyjny zh-hant Green check mark. Green check mark.

Następne kroki

Aby uzyskać więcej informacji na temat dostosowywania interfejsu użytkownika aplikacji, zobacz Dostosowywanie interfejsu użytkownika aplikacji w usłudze Azure Active Directory B2C.