Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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-应用程序中的语言切换程序|当语言未设置为英语(美国)时,内容不显示_Ios_Objective C - Fatal编程技术网

iOS-应用程序中的语言切换程序|当语言未设置为英语(美国)时,内容不显示

iOS-应用程序中的语言切换程序|当语言未设置为英语(美国)时,内容不显示,ios,objective-c,Ios,Objective C,我有一个语言切换器,它工作得很好,直到我收到一个用户的邮件,说我的应用程序无法加载任何内容 在聊了一会儿之后,用户告诉我他们的iDevice语言设置为英语(英国)。 我告诉他们把它改成英语(美国),然后应用程序就按预期工作了 现在 默认情况下,当设备语言不是英语或意大利语时,我的应用程序会使用英语(和内容),但我真的不明白,如果设置的语言不是英语(美国),为什么它不起作用 下面是我用来加载设置页面(plist文件)的代码 在我的设备上,甚至在模拟器上,它都工作得很好,但我想知道是否有任何方法可以

我有一个语言切换器,它工作得很好,直到我收到一个用户的邮件,说我的应用程序无法加载任何内容

在聊了一会儿之后,用户告诉我他们的iDevice语言设置为英语(英国)。 我告诉他们把它改成英语(美国),然后应用程序就按预期工作了

现在

默认情况下,当设备语言不是英语或意大利语时,我的应用程序会使用英语(和内容),但我真的不明白,如果设置的语言不是英语(美国),为什么它不起作用

下面是我用来加载设置页面(plist文件)的代码

在我的设备上,甚至在模拟器上,它都工作得很好,但我想知道是否有任何方法可以改进这段代码,以允许使用非英语(美国)设备语言的用户正确加载内容

提前感谢。

两个问题:

1) plist如何在
NSDocumentDirectory
中结束?找到后是否在那里复制?为什么不直接使用主捆绑包中的文件呢?该文件将始终具有优先权,即使在应用程序启动后选择了其他语言

2) 如果
[[NSLocale preferredLanguages]objectAtIndex:0]
不是
@“en”
@“it”
,会发生什么情况?然后您可能有一个为零的捆绑路径(除了
@“en”
@“it”
之外,您没有提到其他.lproj目录)

我可能会这样做

for (NSString* lang in [NSLocale preferredLanguages])
{
     bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[[NSLocale preferredLanguages] objectAtIndex:0] ofType:@"lproj"]]; 
     if (bundle) break;
}
//fallback to @"en" if bundle is still nil
if (!bundle) 
{
     bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]];
}

1) 是的,它首先被复制,我这样做是因为我在我的应用程序中同时支持意大利语和英语,所以我有点“强制”从文档目录加载文件,基于从应用程序中选择的语言。2) 这正是我想做的,默认情况下使用英语语言环境,与用户的设备语言无关。我将尝试您的代码并让您知道。我在一个大型生产应用程序中以这种方式解决了这个问题:1)将发现的语言环境字符串保存在
NSUserDefaults
中。2) 在app delegate
applicationdidebecomeactive:(UIApplication*)应用程序中
检查保存的区域设置是否与检测到的区域设置相同。如果不是,请重置所有内容并使用新的区域设置。这可以防止您将文件复制到documents目录,还允许用户在首次启动应用程序后更改语言。
for (NSString* lang in [NSLocale preferredLanguages])
{
     bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[[NSLocale preferredLanguages] objectAtIndex:0] ofType:@"lproj"]]; 
     if (bundle) break;
}
//fallback to @"en" if bundle is still nil
if (!bundle) 
{
     bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]];
}