How to force “Respect Language Direction” from RTL to LTR and vice versa

后端 未结 1 1685
陌清茗
陌清茗 2020-12-19 08:55

I have an application which uses Auto Layouts.

The app switches RTL and LTR languages perfectly when the user selects he\'s or her\'s device phone language. All text

1条回答
  •  温柔的废话
    2020-12-19 09:56

    Eventually, I have managed to solve this issue.

    I couldn't find a way to force the change the RTL - LTR auto layout constraints, so i have decided to duplicate 2 additional storyboards for each language direction. So, actually my app now contains 3 storyboards - Main.storyboard, StoryboardRTL.storyboard and StoryboardLTR.storyboard.

    Main handles changes in language direction when it is performed from the settings on the iDevice, and RTL / LTR is has it's own orientation, to support changing the app language from inside the app.

    When the user selects to change to an RTL language, I set the selected language in the UserDefaults:

        [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"he", nil] forKey:@"AppleLanguages"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    

    and right after i call a method i have written in the AppDelegate, which changes the storyboard according to the language layout.

    - (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];
    }
    

    This looks to the user as if the app restarted, and display the proper storyboard with the RTL / LTR layout. When the user restarts the app again, the selected language is already set, and the main storyboard is displayed, with all the correct layout according to selected language.

    0 讨论(0)
提交回复
热议问题