2013-06-24 2 views
1

Мое приложение содержит два файла XIB для английского и арабского языков. Я хочу изменить файлы XIB при изменении языка без перезапуска приложения.Как изменить язык в ios без перезапуска приложения программно?

+0

я думаю, что вам нужно для обнаружения текущего iPhone языка ввода, то в соответствии с этим вы можете использовать XIB файлы. – jamil

+0

Возможный дубликат [Как изменить язык приложения программно БЕЗ перезапуска моего приложения?] (Http://stackoverflow.com/questions/15786501/how-to-change-app-language-programmatically-without-restarting-my-app) – rptwsthi

ответ

0

Я сделал такую ​​же задачу в своем недавнем проекте Необходимость поддержки арабского языка & English. Где мне нужно изменить язык по выбранной опции из списка. Я создал два .xib один на арабском языке и один на английский, а затем выберите

// для установки сверток

+(void) setContentBundle{ 

    SS AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 

    NSString *currentLanguage; 

    if([delegate.strLanguage length]> 0) 
    { 

     currentLanguage = delegate.strLanguage; 

    }else { 

     currentLanguage = @"en"; 

    } 
    if ([currentLanguage isEqualToString:@"ar"]) { // If ARABIC. 

     languageBundle = nil; 

     NSString* path = [[NSBundle mainBundle] pathForResource:@"ar" ofType:@"lproj"]; 

     languageBundle = [NSBundle bundleWithPath:path]; 

    }else if ([currentLanguage isEqualToString:@"en"]){ // If ENGLISH. 

     languageBundle = nil; 

     NSString* path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 

     languageBundle = [NSBundle bundleWithPath:path]; 

    } 
} 



// getting localiation key value 
+(NSString *)getLocalizedStringForKey:(NSString *)key value:(NSString *)v table:(NSString *)t{ 

    if([key isEqualToString:@"FollowUp.DepartmentKey"]){ 

     NSLog(@"%@",key); 

    } 
    SSAppDelegate *delegate = (SSAppDelegate *)[UIApplication sharedApplication].delegate; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"KEY LIKE[c] %@", 
          key]; 


    NSArray *filteredArray = [delegate.arrSystemMessages filteredArrayUsingPredicate:predicate]; 


    NSLog(@"%@", filteredArray); 

    if(filteredArray!=nil && [filteredArray count]>=1){ 

     NSMutableDictionary *dict=[filteredArray objectAtIndex:0]; 

     if([[ContentBundleManager selectLanguage] isEqualToString:@"ar"]){ 

      return [dict valueForKey:@"AR"]; 

     }else{ 

      return [dict valueForKey:@"EN"]; 

     } 

    }else{ 

     return [[ContentBundleManager getContentBundle] localizedStringForKey:key value:v table:t]; 

    } 

} 

//for getting bundle 


+(NSBundle *) getContentBundle{ 

    SSAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 

    NSString *currentLanguage; 

    if([delegate.strLanguage length]> 0) 
    { 
     currentLanguage = delegate.strLanguage; 

    }else { 

     currentLanguage = @"en"; 

    } 
    if ([currentLanguage isEqualToString:@"ar"]) { // If ARABIC. 

     languageBundle = nil; 

     NSString* path = [[NSBundle mainBundle] pathForResource:@"ar" ofType:@"lproj"]; 

     languageBundle = [NSBundle bundleWithPath:path]; 

    }else if ([currentLanguage isEqualToString:@"en"]){ // If ENGLISH. 

     languageBundle = nil; 

     NSString* path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 

     languageBundle = [NSBundle bundleWithPath:path]; 

    } 
    return languageBundle; 
} 


/// and call .xib 
    SSBaseViewController *baseView= [SSLBaseViewController getBaseViewObjectWithBundle:nil]; 

/// and call string file 

    [baseView setHeaderTitle:[ContentBundleManager getLocalizedStringForKey:@"FollowUp.FollowUpKey" value:@"" table:nil]]; 
+0

Для языкаBundle получения ошибки – Neha

+0

Как установить ContentBundleManager в ios? – Neha

+0

Комплект контента - это только идея выборки xib по выбранному языку. Check + (void) setContentBundle делает то же самое. – Mangesh