我有一个使用自动布局的应用程序。
当用户选择他或她的设备手机语言时,该应用程序可以完美地切换RTL和LTR语言。所有文本都已本地化,语言指示正常。
我在应用程序中也有一个按钮,可以在不重新启动应用程序的情况下更改其语言。 这也很有效,所有文本都被替换。
问题在于,当用户从应用程序中更改语言时,我预先定义的约束中的“尊重语言方向”选项具有讽刺意味的是不受尊重。
有什么想法吗?
答案 0 :(得分:7)
最终,我设法解决了这个问题。
我找不到强制更改RTL - LTR自动布局约束的方法,所以我决定为每个语言方向复制2个额外的故事板。 所以,实际上我的应用程序现在包含3个故事板 - Main.storyboard,StoryboardRTL.storyboard和StoryboardLTR.storyboard。
主要处理从iDevice上的设置执行语言方向时的更改,并且RTL / LTR具有自己的方向,以支持从应用程序内部更改应用程序语言。
当用户选择更改为RTL语言时,我在UserDefaults中设置所选语言:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"he", nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
然后我调用了我在AppDelegate中编写的方法,该方法根据语言布局更改了故事板。
- (void)reloadStoryboard
{
UIStoryboard *storyboard;
switch ([AALanguageManager getCurrentLanguage]) {
case CurrentLanguageRTL:
storyboard = [UIStoryboard storyboardWithName:@"StoryboardRTL" bundle:[NSBundle mainBundle]];
break;
default:
storyboard = [UIStoryboard storyboardWithName:@"StoryboardLTR" bundle:[NSBundle mainBundle]];
break;
}
self.window.rootViewController = [storyboard instantiateInitialViewController];
[self.window makeKeyAndVisible];
}
这会向用户显示应用程序重新启动,并使用RTL / LTR布局显示正确的故事板。 当用户再次重新启动应用程序时,已设置所选语言,并显示主故事板,并根据所选语言显示所有正确的布局。