Экстернализация LocalizedResources из настраиваемой политики Azure B2C

Я реализовал локализацию путем внесения изменений в файл XXX_TrustFrameworkExtensions ниже.

Можно ли использовать этот LocalizedResources? Любая помощь приветствуется.

<BuildingBlocks>
    <ContentDefinitions>
        <ContentDefinition Id="api.signuporsignin">
            <LocalizedResourcesReferences MergeBehavior="Prepend">
                <LocalizedResourcesReference Language="en-US" LocalizedResourcesReferenceId="en-US"/>
                <LocalizedResourcesReference Language="es-MX" LocalizedResourcesReferenceId="es-MX"/>
            </LocalizedResourcesReferences>
        </ContentDefinition>
    </ContentDefinitions>
    <Localization Enabled="true">
        <SupportedLanguages DefaultLanguage="en-US" MergeBehavior="ReplaceAll">
            <SupportedLanguage>en-US</SupportedLanguage>
            <SupportedLanguage>es-MX</SupportedLanguage>
        </SupportedLanguages>
        <LocalizedResources Id="en-US">
            <LocalizedStrings>
                <LocalizedString ElementType="UxElement" StringId="logonIdentifier_email">#Email Address</LocalizedString>
                <LocalizedString ElementType="UxElement" StringId="password">#Password</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">#Your password is incorrect.</LocalizedString>
                <LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfClaimsPrincipalDoesNotExist">#We can't seem to find your account.</LocalizedString>
            </LocalizedStrings>
        </LocalizedResources>
        <LocalizedResources Id="es-MX">
            <LocalizedStrings>
                <LocalizedString ElementType="UxElement" StringId="logonIdentifier_email">#Correo electrónico</LocalizedString>
                <LocalizedString ElementType="UxElement" StringId="password">#Contraseña</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>
            </LocalizedStrings>
        </LocalizedResources>
    </Localization>
</BuildingBlocks>

2 ответа

Да, вы можете использовать наследование файла политики, чтобы извлечь конфигурацию локализации в отдельный файл. См. Модель наследования для пользовательских политик: ( https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-overview#inheritance-model )

Вот краткий обзор того, как должно выглядеть наследование файла политики:

      [`Base` Policy file] (Contains your existing BuildingBlocks/ContentDefinition elements)
  ^
  |
[`Localization` Policy file] (Contains only Localization-specific configuration)
  ^
  |
[`XXX_TrustFrameworkExtensions` Policy file] (The policy file that your Relying Party will reference)

Вам нужно будет создать файл политики «Локализация» и сделать ваш текущий файл политики () унаследованным от него. Файл политики локализации затем должен будет наследоваться от вашего базового файла политики. Если у вас нет файла базовой политики, вы должны создать его и переместить в него свой элемент.

Вам нужно будет определить элемент как в базовом файле политики, так и в файле политики локализации. В файле политики локализации вы можете добавить все параметры локализации, необходимые для <ContentDefinitions>а также <Localization>элементы. Когда проверяющая сторона пытается сослаться на ваш основной файл политики ( XXX_TrustFrameworkExtensions), Azure B2C объединит содержимое <BuildingBlocks>элементы из ваших базовых файлов политики и файлов политики локализации.

В стартовом пакете пользовательской политики Azure B2C есть хороший пример того, как этого добиться. См.: https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack/tree/master/LocalAccounts .

Пример

Your-Base-Policy.xml:

      <TrustFrameworkPolicy    
    ...
    PolicyId="Your-Base-Policy"
    ...>  
  <BuildingBlocks>      
    <ContentDefinitions>
      <ContentDefinition Id="api.selfasserted.signinemail">
        ...
      </ContentDefinition>
     ...
    </ContentDefinitions>
  </BuildingBlocks>
  ...
</TrustFrameworkPolicy>

Localization-Policy.xml:

      <TrustFrameworkPolicy    
    ...
    PolicyId="Localization-Policy"
    ...>
  <BasePolicy>...
    <PolicyId>Your-Base-Policy</PolicyId>
  </BasePolicy>
  <!-- Contains only localization specific elements-->
  <BuildingBlocks>  
    <ContentDefinitions>      
      <ContentDefinition Id="api.selfasserted.signinemail">     
        <LocalizedResourcesReferences MergeBehavior="Append">
            ...          
        </LocalizedResourcesReferences>
    </ContentDefinition>
    <Localization Enabled="true">
        <LocalizedCollections>          
        ...
        </LocalizedCollections>
        <LocalizedStrings>
        ...
        </LocalizedStrings>
      </Localization>
    </ContentDefinitions>
  </BuildingBlocks>
  ...
</TrustFrameworkPolicy>

XXX_TrustFrameworkExtensions.xml:

      <TrustFrameworkPolicy    
    ...
    PolicyId="XXX_TrustFrameworkExtensions"
    ...>
 <BasePolicy>...
    <PolicyId>Localization-Policy</PolicyId>
  </BasePolicy>
  ...
</TrustFrameworkPolicy>

В настоящее время локализованные ресурсы нельзя переместить в отдельный файл / внешний.

Другие вопросы по тегам