Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Bundle.preferredLocalizations混淆_Ios_Localization_Nsbundle - Fatal编程技术网

Ios Bundle.preferredLocalizations混淆

Ios Bundle.preferredLocalizations混淆,ios,localization,nsbundle,Ios,Localization,Nsbundle,Bundle的3个preferredLocalization非常混乱,我有很多问题: 为什么2preferredLocalizations方法是类方法,但却一直在谈论一些未指定的特定捆绑包,就好像它们是在某个单独的捆绑包实例上调用的一样 :什么是捆绑对象和捆绑对象 从指定列表中返回一个或多个本地化,捆绑对象将使用这些本地化来定位当前用户的资源 NSString对象的数组,每个对象指定捆绑包支持的本地化的语言ID :指定的捆绑包和接收方的捆绑包具体是什么 返回绑定对象希望使用的本地化

Bundle
的3个
preferredLocalization
非常混乱,我有很多问题:

  • 为什么2
    preferredLocalizations
    方法是类方法,但却一直在谈论一些未指定的特定捆绑包,就好像它们是在某个单独的
    捆绑包
    实例上调用的一样

    • :什么是
      捆绑对象
      捆绑对象

    • 从指定列表中返回一个或多个本地化,捆绑对象将使用这些本地化来定位当前用户的资源

    • NSString对象的数组,每个对象指定捆绑包支持的本地化的语言ID

    • :指定的捆绑包和接收方的捆绑包具体是什么

    • 返回绑定对象希望使用的本地化,给定指定的绑定和用户的语言首选项

    • NSString对象的数组,每个对象标识接收方包中的定位。这些字符串根据指定的首选项在数组中排序,并取自本地化中的字符串​数组参数。如果捆绑包中没有可用的用户首选本地化,此方法将返回其中一个捆绑包本地化

  • 为什么
    preferredLocalizations(from:localizations)
    不返回与
    preferred相同的结果​本地化(来源:本地化,​对于​偏好:​ 无)
    ?如上所述,阅读他们的文档并没有真正的帮助。当然,它们看起来是这样设计的,但实际上不是:

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

  • 参考文档不是很好;更好地解释它

    具体来说,它说

    请注意,Bundle.preferredLocalizations(from:)将结果限制为Bundle.mainBundle()支持的本地化,或Bundle.mainBundle().localizations()的返回值。如果要匹配不同的语言标识符集,请使用Bundle.preferredLocalizations(from:forPreferences:),它不依赖于mainBundle的本地化,而只依赖于传入的两个参数

    所以

    • 如果使用
      Bundle.preferredLocalizations(from:)
      ,则首先根据为主Bundle定义的本地化(
      Bundle.main.localizations
      )过滤您提供的本地化列表
    • 如果使用
      Bundle.preferredLocalizations(from:forPreferences:)
      ,它将与您提供的列表一起工作
    在您给出的示例中,
    Bundle.preferredLocalizations(from:localizations)
    返回
    [“en”]
    。这可能是因为您的应用程序没有定义任何西班牙语(“es”)版本。如果在项目中添加西班牙语本地化,它应该返回
    [“es”]
    ,因为“es CN”列在“en CN”之前