web-dev-qa-db-ja.com

Swift変数を含むNSLocalizedString

NSLocalizedStringを使用してアプリをローカライズしようとしています。 XLIFFファイルをインポートすると、ほとんどがチャームのように機能しますが、何かが機能せず、一部の文字列がローカライズされません。私は問題がNSLocalizedStringからのものであることに気づきました。

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

または

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

たぶん、これはこの種の正しい構文ではありません。誰かが私にそれを迅速に行う方法を説明できますか?どうもありがとうございました。

72
Andorath

sprintf内でNSLocalizedString形式パラメーターを使用できるため、例は次のようになります。

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

WWDC2014「Xcode 6でローカライズする」のセッション412では、Swiftでこれを行う適切な方法は次のとおりです。

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

ローカライズする文字列が多数あるため、文字列の拡張機能を作成するアプローチを採用しました。

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

コードのローカライズに使用するには、次の手順を実行します。

self.descriptionView.text = "Description".localized

動的変数を含む文字列の場合:

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

さまざまな言語のストリングファイルでストリングを宣言します(例:アラビア語と英語)

enter image description hereenter image description here

お役に立てば幸いです!

19
JaspreetKour

上記のソリューションを試しましたが、以下のコードが私のために働いた

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

これは私がStringで使用する拡張機能であり、変数引数を持つlocalizeWithFormat関数を追加します。

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

使用法:

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)

Stringと同じ関数名とプロパティ名を使用しないように注意してください。私は通常、すべてのフレームワーク機能に3文字のプレフィックスを使用します。

3
the Reverend