2016-05-16 51 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上的無證黑客。

相關問題