我想给标签添加一个包含多种字体的文本。这可以通过创建NSMutableAttributedString
来完成。但是,我不确定如何格式化以下情况:
String(format: NSLocalizedString("%@ has replied in '%@'", comment: ""), username, conversationTitle)
我想给用户名和对话标题一个单独的字体。我想用最轻松的方式做到这一点。我的意思是这样:
username
。当conversationTitle
与username
相同或conversationTitle
在username
等中时,这会引起问题。NSLocalizedString's
时这很糟糕,我认为这样创建字符串时翻译人员将度过一个糟糕的时期。诸如Making text bold using attributed string in swift,Are there approaches for using attributed strings in combination with localization?之类的问题大多是字符串文字,而没有带有参数的NSLocalizedString
或NSLocalizedString
。
答案 0 :(得分:1)
首先,您应该在.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解析器等)。