2015-06-30 17 views
15

Gibt es einen einfachen Weg in Swift für das Hinzufügen von Anführungszeichen zu einem String? Die Anführungszeichen sollten basierend auf den Spracheinstellungen des Benutzers ordnungsgemäß lokalisiert werden (siehe https://en.wikipedia.org/wiki/Quotation_mark). Ich möchte die Zeichenfolge in einem UILabel nach dem Hinzufügen der Anführungszeichen zeigen.Hinzufügen von Anführungszeichen in Swift

Zum Beispiel:

var quote: String! 
quote = "To be or not to be..." 
// one or more lines of code that add localized quotation marks 

Für einen Französisch-Benutzer: « Sein oder Nichtsein ... »

Für einen deutschen Benutzer sein: „ sein oder nicht zu sein. .. ”

Antwort

30

die Informationen aus http://nshipster.com/nslocale/ Verwendung:

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) 

Beispielergebnisse:

 
Locale Output 

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...」 

Ich weiß nicht, ob die beginnen/end delimiter Schlüssel kann sein undefined für eine locale. In diesem Fall würde der obige Code auf das normale Doppel-Zitat " zurückfallen.

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

Ausg ut wird sein: "Um sein oder nicht sein ..."

+0

Danke zu lesen. Ja, das scheint einfach zu sein, aber es wird nicht lokalisiert. – jerry

+0

Ich habe Sie nicht bekommen – vijeesh

+0

Bitte beachten Sie die Wikipedia-Link zur Verfügung gestellt in der Frage Anführungszeichen Stile in verschiedenen Sprachen. – jerry

1

Swift 4

Verwenden Sie die gleiche Logik, aber mit einer modernen und einfachen Syntax.

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 
    } 
} 

Dann können Sie es einfach so:

print("To be or not to be...".quoted) 

Ergebnisse

 
Locale Output 

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...」 

Auch ich Sie beraten die ganze Apple Internationalization and Localization Guide

Verwandte Themen