如果在cfbundlelocalizations中找不到语言密钥,如何设置默认语言

时间:2019-01-21 15:31:11

标签: xamarin.ios localization info.plist

要获取不同语言的本机iOS弹出窗口,我已在info.plist中添加了如下支持的语言

info.plist contents

以此,如果我选择语言法语,英语,西班牙语,意大利语或德语。我可以使用相应语言获取iOS本机弹出窗口。 但是,如果选择任何其他语言,则该语言取决于iPad设置中的“首选语言顺序”。

如果选择了上述以外的语言,应如何将语言默认为英语? 例如,如果我选择葡萄牙语,则需要默认语言为英语。即本地弹出窗口应以英文显示。 预先感谢。

我也尝试添加以下内容

Tried code

以上方法均无效。

如果我选择葡萄牙语(info.plist中未提及),则我需要默认语言为英语。即本地弹出窗口应以英文显示。

1 个答案:

答案 0 :(得分:0)

原因:

似乎iOS设计了语言顺序。我从一边测试了本地化演示,然后得出以下结论:

  1. 如果我选择在项目中实现的语言,则可以获取相应的语言。
  2. 如果我选择在项目中未实现的语言,iOS将在Preferred language order中选择语言,如果他在Preferred language order中找到了相应的语言,他将选择语言作为您应用的语言。 (这引起了您的问题
  3. 如果他找不到您在项目中实现的任何对应语言,则iOS将使用您在CFBundleDevelopmentRegion定义的语言作为默认语言。

解决方案:

您可以决定在代码中使用哪种语言。拿起手机的current language,然后按照自己的逻辑选择languagecurrent language

 string[] languages = NSLocale.PreferredLanguages;

 // GET you current language in setting
 NSString language = new NSString(languages[0]);

 NSString esStr = new NSString("es");
 NSString jaStr = new NSString("ja");
 NSString frStr = new NSString("fr");

 //decide here which language to use
 if (language.HasPrefix(esStr))
 {
     //do in Spanish
 }
 else if (language.HasPrefix(jaStr))
 {
     //do in japanese
 }
 else if (language.HasPrefix(frStr))
 {
     //do in french
 }
 else {
     // SET your language to english here as default language
 }
相关问题