iOS含日期字符串本地化问题求助(匈牙利语适配)
解决iOS本地化中日期字符串的插入问题
问题根源
你当前的代码错误地将格式化后的日期传入了NSLocalizedString的value参数,这个参数的作用是当找不到对应key的本地化字符串时使用的默认值,而非用来替换字符串中的占位符。因此本地化字符串里的%@没有被实际日期替换,导致显示异常。
正确实现步骤
- 修正Localizable.strings配置
分别为英文和匈牙利语配置对应的模板字符串:
- 英文(en.lproj/Localizable.strings):
"onDateText" = "on %@"; - 匈牙利语(hu.lproj/Localizable.strings):
"onDateText" = "%@-én";
- 修改代码逻辑
先获取本地化的模板字符串,再通过String(format:)方法将格式化后的日期插入占位符:
// 1. 格式化日期 let dateFormatter = DateFormatter() dateFormatter.locale = Locale.current // 使用模板确保不同地区自动调整日期格式顺序 dateFormatter.setLocalizedDateFormatFromTemplate("MMddyy") let formattedDate = dateFormatter.string(from: viewData.liftDate) // 2. 获取本地化模板字符串 let dateTemplate = NSLocalizedString("onDateText", tableName: "Main", value: "on %@", // 英文默认值 comment: "Format for 'on [date]'") // 3. 替换占位符生成最终字符串 let onDateText = String(format: dateTemplate, formattedDate) liftDate.text = onDateText
- 验证日期格式
当设备语言设为匈牙利语时,setLocalizedDateFormatFromTemplate("MMddyy")会自动将日期格式调整为匈牙利常用的dd. MM. yy格式,结合本地化字符串的%@-én,最终会生成你需要的19. 08. 23.-én样式。
补充说明
- 确保
Locale.current在测试时确实是匈牙利语环境,也可以直接指定匈牙利语locale来测试:dateFormatter.locale = Locale(identifier: "hu_HU") - 完整句子(比如"4 reps @ 120 kg on 8/19/23")建议做成整体本地化模板,避免拆分拼接带来的语序问题:
英文模板:"%d reps @ %.1f kg %@"
匈牙利语模板:"%d ismétlésszám @ %.1f kg %@"
然后一次性传入次数、重量、日期字符串,更符合本地化最佳实践。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

