如何在Xcode 15中使用String Catalog本地化应用名称?
除了传统的直接在Info.plist中配置CFBundleDisplayName并通过对应语言的InfoPlist.strings本地化的方式,目前还有几种更灵活、易维护的实现方式:
统一键值管理的InfoPlist本地化
不再直接在InfoPlist.strings中写CFBundleDisplayName的键,而是先在Info.plist里将CFBundleDisplayName的值设为自定义变量(比如$(APP_DISPLAY_NAME)),然后在各语言的InfoPlist.strings中定义这个变量对应的本地化内容:// 英文InfoPlist.strings "APP_DISPLAY_NAME" = "My App"; // 中文InfoPlist.strings "APP_DISPLAY_NAME" = "我的应用";这种方式能让本地化键名更语义化,便于团队协作维护。
结合Localizable.strings统一管理多场景名称
如果你的应用需要在内部UI(比如首页标题、设置页)和系统显示(桌面、设置列表)使用相同的本地化名称,可以将应用名称的键统一放在Localizable.strings中,同时在InfoPlist.strings里引用这个键的值:// Localizable.strings(英文) "app_display_name" = "My App"; // InfoPlist.strings(英文) "CFBundleDisplayName" = NSLocalizedString("app_display_name", comment: "");这样只需维护一套键值,就能同步系统和内部UI的应用名称本地化。
SwiftUI场景下的简化实现
对于SwiftUI应用,内部UI显示的应用名称可以直接通过Text组件结合LocalizedStringKey实现,无需额外代码:Text("app_display_name")而系统显示的名称仍需通过
InfoPlist.strings配置,但可以和内部UI使用同一个本地化键,实现统一管理。动态调整内部显示名称(系统名称仍需静态配置)
如果你需要根据用户设置或场景动态切换App内部显示的名称,可以通过代码读取不同的本地化键,比如:func getAppDisplayName(for scenario: AppScenario) -> String { switch scenario { case .normal: return NSLocalizedString("app_display_name", comment: "") case .promotion: return NSLocalizedString("app_display_name_promo", comment: "") } }注意:系统层面的应用名称(桌面、设置列表)无法动态修改,必须通过静态本地化配置,重启App后生效。
内容的提问来源于stack exchange,提问作者Grace Huang

