使用NSAttributedString和NSLocalizedString

9

我的旧代码使用NSLocalizedString来显示以下内容,其中outputText是一个NSMutableString,在单个输出会话中包含许多这样的行:

[outputText appendFormat: NSLocalizedString(@"\n\n%@ and %@ are identical.  No comparison required.", @"\n\n%@ and %@ are identical.  No comparison required."), self.ipAddress, secAddress.ipAddress];

我试图更改各个ipAddress字符串的颜色,但在使用NSMutableAttributedString时找不到类似的方法。我面临的最大问题是,由于整个字符串将被本地化,我无法可靠地设置NSRange而不破坏格式化输出的每个部分。我需要解剖这个字符串的每个部分,将其转换为NSAttributedString并将每个部分附加到outputText中吗?

1
我想你可以很容易地使用正则表达式来解决它,因为数字在常见的本地化格式中并不会改变其阿拉伯数字形式。 - CodaFi
哎呀 - 你说得对。我在完成BGP后就忘记了正则表达式。感谢你提醒我! - Mickey
你可以使用 rangeOfString: 方法在插入字符串后获取它们的范围。https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/rangeOfString: - Greg
1个回答

3
答案是:是的。
是的,您需要分别本地化具有不同属性的部分。

1
但这并没有考虑到本地化字符串中参数顺序被颠倒的情况,例如 "(%1$@, %2$@)"。这就是为什么在 NSAttributedString 类中加入一个 -(id)initWithFormat:... 方法会很棒,你不觉得吗? - dulaccc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接