2016-05-16 101 views
2

我正在创建一个应用程序,允许用户选择2个语言,英语和阿拉伯语。Swift iOS以编程方式RTL我的应用程序的布局

因此,当用户选择阿拉伯语,我希望我的应用程序具有RTL布局。

问题是我该怎么做?我试过这样做:Settings>General>Language Region。如果我选择沙特阿拉伯作为地区,并选择阿拉伯语作为语言,我的应用程序会自动执行RTL。

正如您所看到的那种方法是通过电话设置并影响您手机的整体布局。

现在,我真正想要完成的仅仅是使我的APP RTL无需去Settings>General>Language Region并影响我的手机布局。所以当我点击我的应用“阿拉伯语”中的按钮时,我的应用会将其布局更改为RTL。

请任何帮助,您的帮助将不胜感激!

谢谢!

+0

你为什么要实现一个应用程序内语言选择器?这会让您的用户感到困惑,因为他们希望所有应用都遵循Settings应用中的配置,而不是您自己的一些设置。 – wakachamo

回答

-1

你需要在这里建立自己的机制。正如你想要的按钮来改变你的语言。林使用以下代码在我的意见:

+ (BOOL)isEnglishLanguage 
{ 
    return !language; 
} 

+ (void)setLanguage:(Language)lang 
{ 
    language = lang; 
    [GeneralUtilities storeObjectInUserDefaults:@(language) WithKey:@"language"]; 
} 

+ (NSString *)currentLanguage 
{ 
    if(language == ENGLISH) 
    { 
     return kLanguageEnglish; 
    } 
    else if(language == ARABIC) 
    { 
     return kLanguageArabic; 
    } 
    return @""; 
} 

+ (NSString *) NSLocalizedStringCustom:(NSString*) key 
{ 
    NSString *path; 
    if([[LanguageUtilities currentLanguage] isEqualToString:kLanguageEnglish]) 
     path = [[NSBundle mainBundle] pathForResource:kLanguageEnglish ofType:@"lproj"]; 
    else if([[LanguageUtilities currentLanguage] isEqualToString:kLanguageArabic]) 
     path = [[NSBundle mainBundle] pathForResource:kLanguageArabic ofType:@"lproj"]; 

    NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil]; 
    return str; 
} 

+ (NSTextAlignment) NSLocalizedTextFieldAllingment 
{ 
    if([[LanguageUtilities currentLanguage] isEqualToString:kLanguageEnglish]) 
     return NSTextAlignmentLeft; 
    else if([[LanguageUtilities currentLanguage] isEqualToString:kLanguageArabic]) 
     return NSTextAlignmentRight; 
    else return NSTextAlignmentLeft; 
} 

我希望它也能为你工作。

+0

这不幸的是不适用于RTL UI,也不适用于应用程序提供的任何格式化器或系统UI。 – wakachamo

2

请避免这样做。应用内语言切换器是一种令人困惑的体验,因为您的用户希望他们的应用遵循设置应用中的配置,而不是您自己的某些事情。

相反,这里的一些答案,你的布局将不会自动成为如果你选择走这条路从右到左,你也会碰到像你使用任何数字或日期格式化问题,和你呈现的任何系统UI(如UIActivityViewController)也不会遵循这个覆盖。

您应该坚持尽可能多地使用API​​ -UIKit,NSLocalizedString和自动布局使其无缝地遵循系统UI语言,而不必诉诸NSUserDefaults上的无证黑客。

相关问题