在Swift中添加引号

23
有没有一种简单的方法在Swift中为字符串添加引号?引号应该根据用户的语言设置正确地本地化(参见https://en.wikipedia.org/wiki/Quotation_mark)。我想在添加引号后在UILabel中显示字符串。
例如:
var quote: String!
quote = "To be or not to be..."
// one or more lines of code that add localized quotation marks 

对于法语用户:“生存还是毁灭,这是一个值得思考的问题......”

对于德语用户:“Sein oder nicht sein, das ist hier die Frage...”

3个回答

34

使用来自http://nshipster.com/nslocale/的信息:

let locale = NSLocale.currentLocale()
let qBegin = locale.objectForKey(NSLocaleQuotationBeginDelimiterKey) as? String ?? "\""
let qEnd = locale.objectForKey(NSLocaleQuotationEndDelimiterKey) as? String ?? "\""

let quote = qBegin + "To be or not to be..." + qEnd
print(quote)

样本结果:

区域设置  输出
de „To be or not to be...“ en “To be or not to be...” fr «To be or not to be...» ja 「To be or not to be...」

我不知道对于某些语言环境,开始/结束定界符键是否可以未定义。在这种情况下,上述代码将回退到正常的双引号"


11

Swift 4

使用相同的逻辑,但采用现代且简洁的语法。

extension String {
    static var quotes: (String, String) {
        guard
            let bQuote = Locale.current.quotationBeginDelimiter,
            let eQuote = Locale.current.quotationEndDelimiter
            else { return ("\"", "\"") }
        
        return (bQuote, eQuote)
    }
    
    var quoted: String {
        let (bQuote, eQuote) = String.quotes
        return bQuote + self + eQuote
    }
}
然后您可以像这样简单地使用它:
print("To be or not to be...".quoted)

结果

本地化    输出
德语 "To be or not to be..." 英语 “To be or not to be...” 法语 «To be or not to be...» 日语 「To be or not to be...」

此外,我建议您阅读整篇苹果公司的国际化与本地化指南


0
let quote = "\"To be or not to be...\""
println(quote)

输出将是:"To be or not to be..."


谢谢。是的,这似乎很简单,但它并没有本地化。 - user3386180
请查看问题中提供的维基百科链接,显示不同语言中引号的样式。 - user3386180
2
这是简单引号。真正的文本使用不同的智能引号来表示不同的语言。例如,在中文/日文中,“文字 To be or not to be...” - phuclv
@LưuVĩnhPhúc:说得好(即使对于英语环境,“工程师的引号”也不太正确)。马丁的回答解决了这个问题。 - user3386180
2
为什么人们继续给这个点赞,而它并没有回答问题?区域设置要求已经说明了。 - phuclv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接