2016-07-27 24 views
4

Ich habe eine Methode, die ein NSAttributedString setzt fett sein:Set Teil von NSLocalizedString fett sein

func setBold(text: String) -> NSMutableAttributedString { 

    guard let font = UIFont.CustomNormalBoldItalic() else { 
     fatalError("font not found") 
    } 

    let string = NSMutableAttributedString(string:"\(text)", attributes: [NSFontAttributeName : font]) 

    self.setAttributedString(string) 
    return self 
} 

Und das ist, wie es heißt, das funktioniert in der Regel:

let formattedString = NSMutableAttributedString() 
formattedString.setBold("Your text here") 

jedoch Ich versuche, den Text einer Teilzeichenfolge eines NSLocalizedString fett zu setzen. So würde ich versuchen, es wie so:

let formattedString = NSMutableAttributedString() 

return NSAttributedString(string: String.localizedStringWithFormat(
    NSLocalizedString("message", comment: ""), 
    formattedString.setBold(NSLocalizedString("message.day", comment: "")), 
    NSLocalizedString("message.time", comment: "") 
)) 

Statt „um 10 Uhr beginnt Heute“ zu sein, gibt es die folgende Ausgabe:

Today{ 
NSFont = "<UICTFont: 0x7fb75d4f1330> font-family: \"CustomText-MediumItalic\"; font-weight: normal; font-style: italic; font-size: 14.00pt"; 
} starting at 10pm { 
} 

Kann mir jemand sagen, wo ich falsch gehe oder Wie kann ich das beheben? Der Grund, warum ich eine andere Methode habe, ist, weil ich viele LocalizedStrings fett gesetzt habe und dachte, dies könnte eine einfache Lösung sein. Offen für andere Ideen/Lösungen, die nicht viele Wiederholungen/Codezeilen beinhalten.

+0

ich durch die Schaffung von 3 NSAttributedString (eine für jede Übersetzung) gehen würde, und fügen Sie (die erste hat ein NSMutableAttributedString sein), sie alle am Ende. Sie können auswählen, welche Sie fett oder nicht setzen möchten. – Larme

+3

Nicht alle Sprachen werden die 3 Teile in der gleichen Reihenfolge oder mit der gleichen Interpunktion setzen ... – Wain

+0

@Wain In diesem Fall sind es zwei Teile oder Unterstrings, d. H.% @ Beginnend bei% @. Es ist eine ziemlich einfache Phrase und was ich in anderen Sprachen habe, entspricht dem Englisch und hat die gleiche Interpunktion – coderdojo

Antwort

1

Ich würde nur die äußere Zeichenkette html machen und AttributedString das schwere Heben behandeln lassen. Das ist schnell 3, aber schnell 2.3 sollte genauso geradlinig sein. Es gibt auch einige optionale Funktionen, die hinzugefügt werden können, aber Sie erhalten den Kern davon.

// samples so I don't have to put a string resource in my playground, you 
// could just as easily pull these from NSLocalizedString 
let format = "<b>%[email protected]</b> starting at <b>%[email protected]</b>" 
let day = "Today" 
let time = "10 PM" 
let raw = String(format:format, day, time) 

let attr = AttributedString(
    html: raw.data(using: .utf8)!, 
    options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], 
    documentAttributes:nil 
)!