繁体   English   中英

iOS:无需重启即可更改本地化的xib

[英]iOS: Change Localized xib without restart

我知道有一些pod用于更改本地化的字符串文件而无需重新启动..就像iOS-CustomLocalisator但我的问题是我的项目严重依赖于xibs并且它试图依赖于服务器本地化而不是设备本地化。

希望有办法解决这个问题。

我认为您首先需要本地化所有xib(通过单击文件检查器中的“Localize ...”按钮)。 如果您需要,请选择您需要的语言并对Localizable.strings执行相同的操作。

然后导入项目中的BundleLocalization文件。 如果您需要更改语言,只需使用:

[[BundleLocalization sharedInstance] setLanguage:@"fr"];

它适用于xib,storyboard和NSLocalizedString函数。 唯一的“问题”是您在设置语言时需要重新加载当前视图控制器。 如果你有一个UINavigationController(有一个xib或一个stroyboard,它可以使用),你可以使用这种方法:

UINavigationController *navController = self.navigationController;
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"currentViewControllerId"];
NSMutableArray *viewControllersArray = [[NSMutableArray alloc] initWithArray:navController.viewControllers];
[viewControllersArray replaceObjectAtIndex:([navController.viewControllers count] - 1) withObject:vc];
navController.viewControllers = viewControllersArray;

我目前在我的应用程序上这样做。

  1. 创建了一个类来访问所需语言的所需字符串。

     #import <Foundation/Foundation.h> @interface RDLocalizedString : NSObject + (NSString*)localizedStringForKey:(NSString*)key; @end #import "RDLocalizedString.h" @implementation WMLocalizedString + (NSString*)localizedStringForKey:(NSString*)key{ //This method will return the name of the string file. my string files are all (en.strings, fr.strings, es.strings ,etc) NSString *tableName = [[LanguageManager sharedManager] getCurrentlanguageKey]; NSString* str = [[NSBundle mainBundle] localizedStringForKey:key value:@"#NA#" table:tableName]; //if no string is found use the english pne if ([str isEqualToString:@"#NA#"]) { str = [[NSBundle mainBundle] localizedStringForKey:key value:@"#NA#" table:@"en"]; } return str; } @end 
  2. 在视图上添加方法上的所有字符串。

     - (void)loadStrings{ //Load all strings here self.titleLabel = [RDLocalizedString localizedStringForKey:@"mainTitle"]; } 
  3. 在语言改变时运行的创建和观察者。

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStrings) name:@"LANGUAGE_HAS_CHANGE" object:nil]; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM