Экстернализация 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.!#$%&'^_`{}~-]+@[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.!#$%&'^_`{}~-]+@[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>
В настоящее время локализованные ресурсы нельзя переместить в отдельный файл / внешний.