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

如何将函数字符串字面量参数标记为可本地化?优化NSError初始化

问题:简化NSError本地化字符串的初始化调用

我正在为NSError编写一个便捷初始化方法,代码如下:

extension NSError {
    public convenience init(domain: String = #file, code: Int = Int(#line), localizedDescription: String) {
        self.init(domain: domain, code: code, userInfo: [NSLocalizedDescriptionKey: localizedDescription])
    }
}

目前我需要通过以下方式创建带本地化描述的错误:

let localisedError = NSError(localizedDescription: NSLocalizedString("Some description that will be localized.", comment: "Comment for translator"))

我想知道是否可以直接将字符串字面量传入初始化方法,让Xcode自动将其纳入翻译流程(就像传入NSLocalizedString的字面量那样),从而简化为如下调用:

let localisedError = NSError(localizedDescription: "Some description that will be localized.")

请问该如何实现?


解决方案

你可以通过修改初始化方法的参数类型,并在内部完成本地化转换,让Xcode自动识别字符串字面量并纳入翻译流程,具体实现如下:

extension NSError {
    public convenience init(
        domain: String = #file,
        code: Int = Int(#line),
        localizedDescription: String.LocalizationValue,
        comment: String = ""
    ) {
        let translatedString = NSLocalizedString(localizedDescription, comment: comment)
        self.init(
            domain: domain,
            code: code,
            userInfo: [NSLocalizedDescriptionKey: translatedString]
        )
    }
}

使用方式

  1. 简化调用(无需翻译注释):
let localisedError = NSError(localizedDescription: "Some description that will be localized.")

此时Xcode会自动识别这个字符串字面量,你可以通过Xcode → Editor → Export Localizations功能将其提取到.strings翻译文件中。

  1. 带翻译注释的调用:
    如果需要给翻译人员补充说明,直接传入comment参数即可:
let localisedError = NSError(localizedDescription: "Some description that will be localized.", comment: "Comment for translator")

原理说明

String.LocalizationValue是Swift官方提供的类型,专门用于标记需要本地化的字符串输入。Xcode的本地化工具会自动识别这种类型参数接收的字符串字面量,将其纳入翻译流程,效果和直接使用NSLocalizedString完全一致。

内容的提问来源于stack exchange,提问作者Paul B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:32:38