swift - NSLocalizedString 中参数的不同字体
问题描述
我想给一个标签一个包含多种字体的文本。这可以通过创建一个NSMutableAttributedString
. 但是,我不确定如何格式化以下情况:
String(format: NSLocalizedString("%@ has replied in '%@'", comment: ""), username, conversationTitle)
我想给用户名和对话标题一个单独的字体。我想以更少错误的方式做到这一点。我的意思是:
- 我不想
username
通过使用子字符串在字符串中找出后面的内容。conversationTitle
当与 相同username
或等conversationTitle
在username
等时,这会导致问题。 - 我不想建立字符串,如下所示:https ://stackoverflow.com/a/37992022/7715250 。这在创建时很糟糕
NSLocalizedString's
,我认为当这样创建字符串时,翻译人员会很糟糕。
像这样的问题:在 swift 中使用属性字符串使文本变为粗体,是否有将属性字符串与本地化结合使用的方法?NSLocalizedString
其他的大多是不带参数或带参数的字符串文字NSLocalizedString
。
解决方案
首先,你应该在你的 .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 解析器等)。
推荐阅读
- c# - 将数据从 AuthorizationHandler 传递到 Controller
- java - 返回扩展抽象基类的具体类的类而不是实例?
- python - 如何退出 Pycharm '在控制台中运行文件'
- json - Laravel ajax 在选择选项之前发送 id
- html - 新页面上的 html/css 图像与前一页重叠,而不是向下推以适合其自己的页面
- javascript - 在 y 轴上使用整数和在 x 轴上使用字符串的折线图
- php - laravel elequent 模型属性确实提供了刀片文件中找不到的方法,而在控制器中可以正常工作
- php - 连接查询谷歌云平台-PHP
- watson-studio - 在 Watson Studio 中下载 Pandas 数据框
- gradle - Gradle:如何引用另一个任务的输入?