将NSLocalizedString的子字符串设置为粗体

时间:2016-07-27 16:18:25

标签: swift nsattributedstring nslocalizedstring

我有一个方法可以将 NSAttributedString 设置为粗体:

 func setBold(text: String) -> NSMutableAttributedString {

    guard let font = UIFont.CustomNormalBoldItalic() else {
        fatalError("font not found")
    }

    let string = NSMutableAttributedString(string:"\(text)", attributes: [NSFontAttributeName : font])

    self.setAttributedString(string)
    return self
}

这就是它的调用方式,它正常工作:

let formattedString = NSMutableAttributedString()
formattedString.setBold("Your text here")

但是我试图将NSLocalizedString的子字符串的文本设置为粗体。所以我会这样试试:

let formattedString = NSMutableAttributedString()

return NSAttributedString(string: String.localizedStringWithFormat(
    NSLocalizedString("message", comment: ""), 
    formattedString.setBold(NSLocalizedString("message.day", comment: "")),
    NSLocalizedString("message.time", comment: "")
))

它不是“今天从晚上10点开始”,而是提供以下输出:

Today{
NSFont = "<UICTFont: 0x7fb75d4f1330> font-family: \"CustomText-MediumItalic\"; font-weight: normal; font-style: italic; font-size: 14.00pt";
} starting at 10pm {
}

谁能告诉我哪里出错了或者我怎么解决这个问题?我有另一种方法的原因是因为我有许多LocalizedStrings来设置粗体,并认为这可能是一个简单的解决方案。对其他不涉及大量重复/代码行的想法/解决方案开放。

1 个答案:

答案 0 :(得分:2)

我只是制作外部字符串html并让AttributedString处理繁重的工作。这是迅速的3,但迅速的2.3应该是直截了当的。还有一些可选的处理要添加,但你得到了它的要点。

// samples so I don't have to put a string resource in my playground, you
// could just as easily pull these from NSLocalizedString
let format = "<b>%1$@</b> starting at <b>%2$@</b>"
let day = "Today"
let time = "10 PM"
let raw = String(format:format, day, time)

let attr = AttributedString(
    html: raw.data(using: .utf8)!, 
    options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType],
    documentAttributes:nil
)!