“我同意公司<clickable>服务条款</clickable>”的本地化解决方案

时间:2018-10-11 14:49:05

标签: ios swift

我有这个应用程序,位于“注册”屏幕上复选框旁边,应该是一句话:我同意公司服务条款。并且服务条款部分应该是可单击的,以便用户能够进入ToS屏幕(尽管用户永远不会这样做)。

问题是,此应用程序将是多语言的,因此所有文本都应本地化。这就是为什么简单的String + Button解决方案不起作用的原因:

ㅁ我同意公司服务条款

서비스이용약관에동의합니다

在英语中,该可单击部分(粗体)在句子的末尾,而在韩语中则是在开头。用其他语言,可能在中间。

问题:如何解决这个问题?有一些优雅的方法吗?两个情节提要?

1 个答案:

答案 0 :(得分:0)

这是我的方法:

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_TOStos_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提供指导!