【问题标题】:NSAttributedString from localized string with format specifierNSAttributedString 来自带有格式说明符的本地化字符串
【发布时间】:2017-06-09 10:56:59
【问题描述】:

我有一个本地化字符串:

"%@ some text" = "%@ some text";

格式说明符%@ 可以出现在本地化字符串的任何位置。

问题是这个字符串应该是NSAttributedString%@ 替换和文本的其余部分应该具有不同的属性。我该如何解决这个问题?

【问题讨论】:

  • NSAttributedString+VPAttributedFormat 似乎还可以,但它包含很多额外的代码 - UI 组件的类别
  • 尝试从您需要的部分中获取或启发您。

标签: cocoa cocoa-touch localization format nsattributedstring


【解决方案1】:

1) 使用 NSLocalizedString() 获取本地化模板。
2) 获取要插入的文本。
3) 使用-stringWithFormat: 将两者结合起来。
4) 在模板中,使用-rangeOfString:找到占位符的位置
5) 使用上一步找到的起始位置,在格式化字符串中查找插入文本的范围,-rangeOfString:options:range:。 (这里的第三个参数是要搜索的范围;这样可以避免查找未替换的文本。)
6) 从格式化字符串创建属性字符串,使用范围将属性应用于插入的文本。

【讨论】:

  • 如果本地化模板已经包含要在第 2 步之前插入的文本,则它将不起作用。例如:将“Hello”插入“Hello world!%@”。我当前的解决方案类似,但我为“%@”子字符串创建字符串属性并保存其范围。然后当我插入字符串时 - 这个范围只改变它的长度参数。
  • 我会修改的,@VyachaslavGerchicov
【解决方案2】:

您可以在这种情况下使用NSMutableAttributedStringHere 是苹果文档

 NSString *textToDisplay = [NSString stringWithFormat:@"%@ somet text",localizedString];
 NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:textToDisplay];
       [attrStr addAttribute:NSFontAttributeName
                       value:[UIFont fontWithName:@"Exo2-Regular" size:30]
                       range:NSMakeRange(0, locatilzedString.length)];
       [attrStr addAttribute:NSFontAttributeName
                       value:[UIFont fontWithName:@"Exo2-Bold" size:30]
                       range:NSMakeRange(locatilzedString.length, attrStr.length)];

label.attributedText = attrStr

【讨论】:

  • 我改了答案,你可以试试这个。
  • 仔细阅读问题 - %@ 可能出现在本地化后的格式字符串的开头、中间和末尾。您还完全错过了本地化代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
相关资源
最近更新 更多