ios - 是否有将属性字符串与本地化结合使用的方法?

标签 ios nsattributedstring

假设有这样一个英文字符串,它要求对文本字符串的特定部分进行粗体或颜色等处理:

“字 1 字 2 字 3 字 4”

这可以通过为适当的范围设置属性来实现。

范围可以硬编码为 (13,5),但当然不能本地化。

因此,或者可以通过知道必须对其应用粗体的第 3 个单词来动态确定范围。

但这也不是可本地化的。假设一旦该句子被翻译成语言 N 它只包含 2 个单词,或者在语言 M 中包含 5 个单词?

所以我的问题是如何在不进行大量硬编码的情况下将属性字符串与本地化结合使用?

最佳答案

我在最新项目中采用的方法是在 Localizable.strings 文件中使用 HTML,然后使用类似这样的方法生成 NSAttributedString:

NSString *htmlString = NSLocalizedString(key, comment);

[[NSAttributedString alloc] initWithData:
    [htmlString dataUsingEncoding:NSUTF8StringEncoding]
                         options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                   NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
              documentAttributes:nil
                           error:nil]]

(作为个人喜好,我将所有这些都打包到 #define LocalizedHTMLForKey(key) 中,所以希望我没有在这个答案中添加任何错别字,让它更清晰……)

关于ios - 是否有将属性字符串与本地化结合使用的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22387839/

相关文章:

iOS Swift 共享 PDF 文件,然后删除

ios - 获取字符串在其边界框中的基线位置

objective-c - 如何使用 NSMutableAttributedString 呈现多行 UILabel

cocoa - 在 NSMatrix 中的 NSButtonCell 中的文本之前显示图像

ios - 创建存档时出错

ios - 单点触控 : tmp folder location?

ios - ionic 1 - Cordova - 谷歌地图 : Disappeared buttons on map - only IOS

ios - 更改 UIButton attributedStrings enumerateSubstrings 字符串范围的标题

ios - 在不修改其他属性的情况下替换 NSAttributedString 中的整个文本字符串

ios - 在 Storyboard中连接 UIPickerView 数据源和委托(delegate)的原因