it-swarm.com.de

NSLocalizedString mit Swift-Variable

Ich versuche, meine App mit NSLocalizedString zu lokalisieren. Wenn ich die XLIFF-Datei importiere, funktionieren die meisten wie ein Zauber, aber etwas nicht und ein String ist nicht lokalisiert. Ich habe festgestellt, dass das Problem von NSLocalizedString stammt, das eine Variable enthält, die wie folgt aussieht:

NSLocalizedString(" - \(count) Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare")

oder

NSLocalizedString("Notifica per \(medicina!) della prescrizione \(prescription!)\nMemo: \(memoTextView.text)", comment: "Messaggio della Local Notification")

Vielleicht ist dies nicht die richtige Syntax für diese Art von Sachen. Kann mir jemand erklären, wie das schnell geht? Vielen Dank.

64
Andorath

Sie können die sprintf-Formatparameter in NSLocalizedString verwenden, damit Ihr Beispiel so aussehen kann:

let myString = String(format: NSLocalizedString(" - %d Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare"), count)
104
zisoft

In Sitzung 412 der WWDC2014 "Lokalisieren mit Xcode 6" ist der richtige Weg in Swift der folgende Weg:

String.localizedStringWithFormat(
    NSLocalizedString(" - %d Notifica",
    comment: "sottotitolo prescrizione per le notifiche al singolare"),
    count)
85
Mark

Ich habe den Ansatz verfolgt, eine Erweiterung für String zu erstellen, da ich viele zu lokalisierende Strings habe.

extension String {
    var localized: String {
        return NSLocalizedString(self, comment:"")
    }
}

Um es für die Lokalisierung im Code zu verwenden, führen Sie folgende Schritte aus:

self.descriptionView.text = "Description".localized

Für Zeichenfolgen mit dynamischen Variablen folgen: 

self.entryTimeLabel.text = "\("Doors-open-at".localized) \(event.eventStartTime)"

Deklarieren Sie die Strings in String-Dateien für verschiedene Sprachen (Beispiel: Arabisch und Englisch)

 enter image description here  enter image description here

Hoffnung wird helfen!

16
JaspreetKour

Ich habe die obigen Lösungen ausprobiert, aber der folgende Code hat für mich funktioniert

Swift 4

extension String {

    /// Fetches a localized String
    ///
    /// - Returns: return value(String) for key
    public func localized() -> String {
        let path = Bundle.main.path(forResource: "en", ofType: "lproj")
        let bundle = Bundle(path: path!)
        return (bundle?.localizedString(forKey: self, value: nil, table: nil))!
    }


    /// Fetches a localised String Arguments
    ///
    /// - Parameter arguments: parameters to be added in a string
    /// - Returns: localized string
    public func localized(with arguments: [CVarArg]) -> String {
        return String(format: self.localized(), locale: nil, arguments: arguments)
    }

}

// variable in a class
 let tcAndPPMessage = "By_signing_up_or_logging_in,_you_agree_to_our"
                                     .localized(with: [tAndc, pp, signin])

// Localization File String
"By_signing_up_or_logging_in,_you_agree_to_our" = "By signing up or logging in, you agree to our \"%@\" and \"%@\" \nAlready have an Account? \"%@\"";
3
Pratik

Hier ist eine Erweiterung, die ich in String verwende. Sie fügt eine localizeWithFormat-Funktion mit variablen Argumenten hinzu. 

extension String:{

     func localizeWithFormat(arguments: CVarArg...) -> String{
        return String(format: self.localized, arguments: arguments)        
     }

     var localized: String{
         return Bundle.main.localizedString(forKey: self, value: nil, table: "StandardLocalizations")
     }
}

Verwendungszweck:

let siriCalendarText = "AnyCalendar"
let localizedText = "LTo use Siri with my app, please set %@ as the default list on your device reminders settings".localizeWithFormat(arguments: siriCalendarTitle)

Achten Sie jedoch darauf, nicht dieselben Funktions- und Eigenschaftsnamen wie String zu verwenden. Ich verwende normalerweise ein 3-Buchstaben-Präfix für alle meine Framework-Funktionen.

1
the Reverend