Xcode 16.2中含动态数据的本地化字符串文件编写方法咨询
字符串嵌入动态数据的本地化文件写法
处理带动态数据的本地化字符串,核心是用占位符替代动态内容,不同平台的本地化文件有不同的写法,以下是主流场景的实现方式:
通用规则
- 所有固定文本必须放入本地化文件,禁止代码中硬拼接文本+动态数据
- 占位符尽量用表意清晰的命名(如
{space}),而非无意义的%s,方便翻译人员理解上下文
1. iOS/macOS(.strings 文件)
编号占位符(兼容全版本)
"used_space" = "已占用空间:%@ MB";
代码中调用:
String(format: NSLocalizedString("used_space", comment: "显示存储已占用空间"), "\(space)")
命名占位符(iOS 15+ 推荐)
"used_space" = "已占用空间:\(space) MB";
代码中调用:
String(localized: "used_space", arguments: space)
2. Android(strings.xml 文件)
基础类型占位符
根据动态数据类型选择%d(整数)、%s(字符串):
<string name="used_space">已占用空间:%d MB</string>
代码中调用:
getString(R.string.used_space, space)
编号占位符(多参数场景推荐)
当有多个动态参数时,用%1$d、%2$s明确顺序,翻译时可灵活调整位置:
<string name="storage_status">已占用%1$d MB,剩余%2$d MB</string>
3. Web/跨平台框架(i18next、React Intl 等)
用花括号包裹命名占位符,直观易懂:
i18next(JSON 格式)
{ "used_space": "已占用空间:{{space}} MB" }
代码中调用:
i18next.t('used_space', { space: spaceValue })
React Intl(JSON 格式)
{ "used_space": "已占用空间:{space} MB" }
代码中调用:
<FormattedMessage id="used_space" values={{ space: spaceValue }} />
关键注意事项
- 占位符位置可随目标语言调整:比如部分语言习惯把数字放在文本前面,翻译时直接修改占位符顺序即可,无需改动代码
- 务必添加上下文注释:比如 iOS 的
comment、Android 的 XML 注释,告诉翻译人员该字符串的使用场景(例:“在存储设置页面显示已占用空间”) - 复数/时态特殊处理:如果动态数据涉及复数(如“1个文件”/“5个文件”),要使用平台自带的复数规则,比如 Android 的
<plurals>标签、iOS 的本地化复数格式
内容的提问来源于stack exchange,提问作者ItaMoraxDev
相关产品推荐
相关产品推荐

