NSLocalizedString 中参数的不同字体

Different font for parameters in NSLocalizedString

我想给标签一个包含多种字体的文本。这可以通过创建 NSMutableAttributedString 来完成。但是,我不确定如何格式化以下情况:

String(format: NSLocalizedString("%@ has replied in '%@'", comment: ""), username, conversationTitle)

我想给用户名和对话标题一个单独的字体。我想以最简单的方式来做到这一点。我的意思是:

像这样的问题:Making text bold using attributed string in swift, Are there approaches for using attributed strings in combination with localization? 和其他问题大多是没有 NSLocalizedStringNSLocalizedString 有参数的字符串文字。

首先,您的 .strings 中应该有一个更加通用和可读的密钥,例如:

"_REPLIED_IN_" = "%@ has replied in %@";

不要像您在示例中那样混淆键和值。 此外,稍后可以更轻松地查看代码中是否存在未本地化的硬编码字符串。

现在,有一个问题,因为在英语中,它可能是这样的顺序,但在其他语言中则不一定。

所以改为:

"_REPLIED_IN_" = "%1$@ has replied in %@";

现在,我将使用粗体示例,因为它更容易,但您可以使用一些自定义标签来告诉您它需要加粗,例如 HTML、MarkDown 等。

在HTML中:

"_REPLIED_IN_" = "<b>%1$@</b> has replied in <b>%@</b>";

你需要把它解析成NSAttributedString:

let translation = String(format: NSLocalizedString(format: "_REPLIED_IN_", comment: nil), userName, conversationTitle)
let attributedText = NSAttributedString.someMethodThatParseYourTags(translation)

由您选择最简单的标签格式),根据您的需要:易于翻译人员理解,易于解析(CocoaTouch 已经有 HTML 解析器等)。