2017-03-24 70 views
0

3的BundlepreferredLocalizations是如此混亂,我有這麼多的問題:Bundle.preferredLocalizations混亂

  1. 爲什麼2個preferredLocalizations方法是類方法,但繼續談論一些不明特定的捆綁,就好像它們被稱爲一些個人Bundle實例?

    • preferredLocalizations(from:):究竟是什麼a bundle objectthe bundle

      1. 返回指定列表束對象會使用來定位資源爲當前用戶的一個或多個本地化。

      2. NSString對象的陣列,其中的每一個指定爲支撐本地化語言ID。

    • preferred​Localizations(from:​for​Preferences:​):究竟是什麼the specified bundlethe receiver’s bundle

      1. 返回給指定捆綁和用戶的語言偏好捆綁對象寧願本地化。

      2. NSString對象的陣列,其中的每個在接收器的束識別定位。這些字符串根據指定的首選項在數組中排序,並從本地化數組參數中的字符串中獲取。如果該包中沒有用戶首選的本地化可用,則此方法將返回其中一個包本地化。

  2. 爲什麼preferredLocalizations(from: localizations)簡化版,返回相同的結果爲preferred​Localizations(from: localizations, ​for​Preferences:​ nil)?如上所述,閱讀他們的文檔並沒有什麼幫助。當然,他們看起來這樣設計的,但實際上並不:

    // 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"] 
    

回答

0

的參考文檔不是很大; Technical Note 2418解釋得更好。

具體來說,它說

注意Bundle.preferredLocalizations(來自:)將結果限制爲通過Bundle.mainBundle(),或Bundle.mainBundle()的返回值支持本地化。本地化( )。如果您想對陣一組不同的語言標識符,使用Bundle.preferredLocalizations(來自:forPreferences :)它不依賴於mainBundle的本地化,而是完全依賴於兩個參數傳入

所以,

  • 如果使用Bundle.preferredLocalizations(from:)的本地化列出你給它首先進行篩選的主束(Bundle.main.localizations)中定義的本地化。
  • 如果您使用Bundle.preferredLocalizations(from:forPreferences:),它適用於您提供的列表。

在您給出的示例中,Bundle.preferredLocalizations(from: localizations)返回["en"]。這很可能是因爲您的應用沒有定義任何版本的西班牙語(「es」)。如果您爲項目添加西班牙語本地化,則應返回["es"],因爲「en-CN」在「en-CN」之前列出。