如何在Flutter(Dart)中实现Azure AD B2C(自定义策略)的本地化功能
Flutter 集成 Azure AD B2C 本地化实现方案
aad_oauth 库本身没有直接暴露 ui_locales 参数的配置入口,你可以通过以下三种方式实现适配:
方案一:自定义请求参数注入
- 找到
aad_oauth库中构造授权URL的核心代码段,通常在request_code.dart或者oauth.dart文件内 - 在构造查询参数的位置,新增
ui_locales参数,值设置为你需要的目标语言代码(例如zh-CN、en-US等) - 示例修改代码:
final Map<String, String> queryParams = { 'client_id': config.clientId, 'response_type': 'code', 'redirect_uri': config.redirectUri, 'scope': config.scope, // 新增本地化参数 'ui_locales': 'zh-CN', // 可以替换为动态获取的系统语言变量 ...其他原有参数 };
- 如果你不想直接修改源码,可以通过fork库的方式维护自定义版本,或者使用
dependency_overrides指向本地修改后的库文件
方案二:使用B2C用户流自定义语言配置
如果不想改客户端代码,可以直接在Azure Portal的B2C配置端做兼容:
- 进入你的B2C租户,找到对应的用户流(User Flow)
- 打开「语言」配置页,启用你需要支持的所有语言
- 开启「自定义页面内容」功能,将默认语言设置为你期望的默认展示语言
- 当请求未携带
ui_locales参数时,B2C会优先匹配用户浏览器/系统的语言偏好, fallback到你设置的默认语言
方案三:替换为支持参数自定义的OAuth库
如果改源码的方案不符合你的维护要求,可以换成 flutter_appauth 库,该库支持自定义授权请求参数,可直接传入 ui_locales:
final AuthorizationTokenRequest request = AuthorizationTokenRequest( clientId, redirectUrl, discoveryUrl: discoveryUrl, scopes: scopes, // 直接传入自定义参数 additionalParameters: {'ui_locales': 'zh-CN'}, );
注意:所有方案都需要确保你在Azure AD B2C后台已经启用了对应语言的支持,否则传入
ui_locales参数不会生效
内容的提问来源于stack exchange,提问作者Vigneshwaran
相关产品推荐
相关产品推荐

