Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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 将main中的AppleLanguage更改为阿拉伯语,但仍然是UIUserInterfaceLayoutDirection LeftToRight_Ios_Objective C - Fatal编程技术网

Ios 将main中的AppleLanguage更改为阿拉伯语,但仍然是UIUserInterfaceLayoutDirection LeftToRight

Ios 将main中的AppleLanguage更改为阿拉伯语,但仍然是UIUserInterfaceLayoutDirection LeftToRight,ios,objective-c,Ios,Objective C,我试图通过编写以下代码将本地化设置为阿拉伯语: int main(int argc, char * argv[]) { @autoreleasepool { [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"ar-EG", nil] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] sync

我试图通过编写以下代码将本地化设置为阿拉伯语:

int main(int argc, char * argv[]) {

@autoreleasepool
  {
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"ar-EG", nil] forKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  }
我在AppDelegate中获取AppleLanguages,并确保它成功返回ar EG作为数组中的第一种语言,但在应用程序的第一次运行时,语言方向仍然是
UIUserInterfaceLayoutDirectionLeftToRight
,并且不会像第二次运行时那样更改
UIUserInterfaceLayoutDirectionRightToLeft
。 第一次运行仅在iPhone 6s上成功更改布局方向


有什么想法吗,伙计们

我不得不解决iOS 6-9中用户选择语言的类似问题-这可能与您的情况不同。我的发现是,在各种设备中,唯一可靠的方法是实现应用程序重启,以持续地强制应用程序使用(新)语言。i、 e退出并以编程方式重新启动应用程序。在这些情况下,语言选择必须作为用户选择来实现。我们因在首次启动时未使用设备的语言运行而被拒绝。

如果您有Appdelegate或父视图控制器,请将其添加到Appdelegate或父视图控制器中:

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
    [[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceRightToLeft];
}
并使用其中一个动态本地化语言的库,它将在iOS9(及更高版本)上运行良好


注意:对于iOS 8,您可以添加一条警告消息,告知用户仍需进行配置,并要求用户在单击“确定”时重新启动或执行“退出(0)”,在单击“取消”时保持打开状态。但由于iOS 9在市场上占有更大的份额,所以我认为你的应用不会经常出现这种情况

我认为这不是解决问题的好方法,苹果可能会因为你强制重启而拒绝该应用。完全同意你的观点。应该有一个更好的解决方案,也许有人在这里。我们在多个应用程序中使用带提示的重启机制,并没有因此而被拒绝。