2017-03-24 3 views
0

Das 3 preferredLocalizations von Bundle sind so verwirrend, dass ich so viele Fragen haben:Bundle.preferredLocalizations Verwirrung

  1. Warum die 2 preferredLocalizations Methoden Klassenmethoden sind aber einige über nicht spezifiziert spezifische Bündel im Gespräch halten, als ob sie werden einige einzelne Bundle Instanz aufgerufen?

    • preferredLocalizations(from:): Was genau sind a bundle object und the bundle?

      1. Returns ein oder mehr Lokalisierungen aus der angegebenen Liste dass ein Bündel Objekt verwenden würde Ressourcen für den aktuellen Benutzer zu lokalisieren.

      2. Ein Array von NSString Objekten, von denen jedes für eine Lokalisierung, die Sprach-ID gibt an, dass das Bündel Abstützungen.

    • preferred​Localizations(from:​for​Preferences:​): Was genau sind the specified bundle und the receiver’s bundle?

      1. Gibt die Lokalisierungen, die ein Bündel Objekt würde, da das angegebene Bundle und Benutzer-Spracheinstellungen bevorzugen.

      2. Ein Array von NSString Objekten, von denen jedes eine Lokalisierung des Bündels des Empfängers in identifiziert. Diese Zeichenfolgen sind im Array gemäß den angegebenen Voreinstellungen angeordnet und werden den Zeichenfolgen im Array-Parameter localizations entnommen. Wenn keine der vom Benutzer bevorzugten Lokalisierungen im Bundle verfügbar sind, gibt diese Methode eine der Bündellokalisierungen zurück.

  2. Warum preferredLocalizations(from: localizations) does't Rück das gleiche Ergebnis wie preferred​Localizations(from: localizations, ​for​Preferences:​ nil)? Wie oben erwähnt, hilft das Lesen ihrer Dokumente nicht wirklich. Sicher schauen sie auf diese Weise entworfen, aber eigentlich nicht:

    // Locale.preferredLanguages: ["es-CN", "ja-CN", "zh-Hans-CN", "en-CN", "he-IL"]. 
    let localizations = ["de", "en", "es", "fr", "it"] 
    print(Bundle.preferredLocalizations(from: localizations)) // ["en"] 
    print(Bundle.preferredLocalizations(from: localizations, forPreferences: nil)) // ["es"] 
    

Antwort

0

Die Referenzdokumentation ist nicht so groß; Technical Note 2418 erklärt es besser.

Insbesondere heißt es

anzumerken, dass Bundle.preferredLocalizations (von :) wird um die Ergebnisse zu Lokalisierungen von Bundle.mainBundle() oder der Rückgabewert von Bundle.mainBundle(). Lokalisierungen unterstützt beschränken ().Wenn Sie gegen einen anderen Satz von Sprachkennungen übereinstimmen möchten, verwenden Sie Bundle.preferredLocalizations (aus:. ForPreferences :), die nicht auf der Main Lokalisierungen angewiesen und stattdessen stützt sich ausschließlich auf die beiden Argumente übergeben in

So,

  • Wenn Sie Bundle.preferredLocalizations(from:) verwenden, die Lokalisierungen Liste geben Sie es zunächst auf die für das Hauptbündel definiert Lokalisierungen gefiltert wird (Bundle.main.localizations).
  • Wenn Sie Bundle.preferredLocalizations(from:forPreferences:) verwenden, funktioniert es mit der Liste, die Sie ihm geben.

In dem Beispiel, das Sie gaben, gibt Bundle.preferredLocalizations(from: localizations)["en"] zurück. Dies liegt wahrscheinlich daran, dass in Ihrer App keine spanische Version ("es") definiert ist. Wenn Sie Ihrem Projekt eine spanische Lokalisierung hinzufügen, sollte sie zurückgeben, da "es-CN" vor "en-CN" aufgeführt ist.