自定义Sign in with Apple按钮accessibilityLabel未本地化问题咨询
嘿,这个问题我之前也帮不少开发者排查过,其实这不是bug,而是Apple对ASAuthorizationAppleIDButton的accessibilityLabel属性的设计逻辑和你预期的不一样,咱们一步步说清楚:
为什么accessibilityLabel不自动本地化?
ASAuthorizationAppleIDButton的accessibilityLabel本质是给辅助技术(比如VoiceOver)提供的描述文本,但Apple并没有设计让这个属性跟随系统语言自动切换——不管你切换什么语言,它都会返回默认的英文标签(比如你遇到的“Continue with Apple”)。这个属性的核心作用是辅助无障碍访问,而非提供按钮显示文本的本地化版本。
正确获取本地化按钮文本的方法
如果你需要获取对应语言的按钮文本来自定义按钮,有个靠谱的方式:直接读取Apple框架内置的本地化字符串表。这里给你一段示例代码:
func getAppleAuthLocalizedTitle(for buttonType: ASAuthorizationAppleIDButton.ButtonType) -> String { // 获取Apple授权按钮所在的框架bundle let appleAuthBundle = Bundle(for: ASAuthorizationAppleIDButton.self) // 根据按钮类型匹配对应的字符串key let titleKey: String switch buttonType { case .signIn: titleKey = "Sign in with Apple" case .continue: titleKey = "Continue with Apple" case .signUp: titleKey = "Sign up with Apple" @unknown default: titleKey = "Continue with Apple" } // 从Apple的本地化表中获取对应语言的文本 return NSLocalizedString(titleKey, tableName: "ASAuthorizationAppleIDButton", bundle: appleAuthBundle, value: "", comment: "") }
只要你的App已经在Xcode项目设置中添加了对应的语言本地化支持,这段代码就能返回对应语言的正确文本——毕竟Apple的框架已经内置了多种语言的本地化资源。
另外补充一点:如果你只是用官方的ASAuthorizationAppleIDButton而不是完全自定义,其实按钮的显示文本会自动跟随系统语言切换,不需要额外处理,只有当你要自己做按钮的时候才需要手动获取这些本地化文本。
额外提醒
自定义按钮的时候,记得遵循Apple的《Human Interface Guidelines》中关于Sign in with Apple的设计规范,比如要保留官方的Apple图标,文本和图标的布局也要符合要求哦。
内容的提问来源于stack exchange,提问作者Mike Mikina

