首页 > 解决方案 > NSLocalizedString 中参数的不同字体

问题描述

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

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

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

像这样的问题:在 swift 中使用属性字符串使文本变为粗体是否有将属性字符串与本地化结合使用的方法?NSLocalizedString其他的大多是不带参数或带参数的字符串文字NSLocalizedString

标签: swiftnslocalizedstring

解决方案


首先,你应该在你的 .strings 中有一个更通用和可读的键,比如:

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

不要像您在示例中所做的那样混淆键和值。此外,以后更容易查看代码中何时存在未本地化的硬编码字符串。

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

所以与其:

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

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

在 HTML 中:

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

您需要将其解析为NSAttributedString

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

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


推荐阅读