我在注册屏幕上复选框旁边的位置有这个应用程序,它应该是一句话:我同意公司服务条款。服务条款部分应该是可单击的,以便用户能够进入ToS屏幕(尽管用户永远不会这样做)。
问题是,此应用程序将是多语言的,因此所有文本都应本地化。这就是为什么简单的String
+ Button
解决方案不起作用的原因:
ㅁ我同意公司服务条款
용약관에스이이동의합니다
在英语中,该可单击部分(粗体)在句子的末尾,而在韩语中,这是在句首。用其他语言,可能在中间。
问题:如何解决这个问题?有一些优雅的方法吗?两个情节提要?
最佳答案
这是我的方法:
let attributes: [NSMutableAttributedString.Key : Any] = [
.font: UIFont.systemFont(ofSize: 15),
.foregroundColor: UIColor.init(red: 240/255, green: 230/255, blue: 239/255, alpha: 1)
]
let attributedString = NSMutableAttributedString(string: "tos_string".localized, attributes: attributes)
let rangeTOS = (attributedString.string as NSString).range(of: "tos_string_TOS".localized)
let rangePP = (attributedString.string as NSString).range(of: "tos_string_PP".localized)
attributedString.addAttribute(NSAttributedString.Key.link, value: "https://www.example.com/resources/pages/terms.html", range: rangeTOS)
attributedString.addAttribute(NSAttributedString.Key.link, value: "https://www.example.com/resources/pages/privacy.html", range: rangePP)
let linkAttributes: [NSAttributedString.Key : Any] = [
NSAttributedString.Key(rawValue: NSAttributedString.Key.foregroundColor.rawValue): UIColor.init(red: 240/255, green: 166/255, blue: 202/255, alpha: 1),
]
textView.linkTextAttributes = linkAttributes
textView.attributedText = attributedString
textView.delegate = self
其中
tos_string, tos_string_TOS
和tos_string_PP
是:"tos_string" = "I agree to the Company Terms of Service and Privacy Policy";
"tos_string_TOS" = "Terms of Service";
"tos_string_PP" = "Privacy Policy";
在
Localizable.strings
中谢谢@Larme的指示!