You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS含日期字符串本地化问题求助(匈牙利语适配)

解决iOS本地化中日期字符串的插入问题

问题根源

你当前的代码错误地将格式化后的日期传入了NSLocalizedString的value参数,这个参数的作用是当找不到对应key的本地化字符串时使用的默认值,而非用来替换字符串中的占位符。因此本地化字符串里的%@没有被实际日期替换,导致显示异常。

正确实现步骤

  1. 修正Localizable.strings配置
    分别为英文和匈牙利语配置对应的模板字符串:
  • 英文(en.lproj/Localizable.strings):
    "onDateText" = "on %@";
    
  • 匈牙利语(hu.lproj/Localizable.strings):
    "onDateText" = "%@-én";
    
  1. 修改代码逻辑
    先获取本地化的模板字符串,再通过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
  1. 验证日期格式
    当设备语言设为匈牙利语时,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:23:14