NSLocalizedString中参数的不同字体

时间:2019-01-27 12:35:48

标签: swift nslocalizedstring

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

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

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

  • 我不想稍后使用子字符串在字符串中找出username。当conversationTitleusername相同或conversationTitleusername等中时,这会引起问题。
  • 我不想构建字符串,如此处所示:https://stackoverflow.com/a/37992022/7715250。创建NSLocalizedString's时这很糟糕,我认为这样创建字符串时翻译人员将度过一个糟糕的时期。

诸如Making text bold using attributed string in swiftAre there approaches for using attributed strings in combination with localization?之类的问题大多是字符串文字,而没有带有参数的NSLocalizedStringNSLocalizedString

1 个答案:

答案 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解析器等)。