我需要在我的应用中使用多种语言。我可以使用本地化字符串更改语言,但如果不重新启动应用程序,则故事板文本不会更改。我还为需要更改文本对齐的用户添加了阿拉伯语,如果我重新启动应用程序也可以正常工作。
我正在使用AppleLanguages用户默认密钥来更改动态文本的语言和本地化字符串。
答案 0 :(得分:-1)
对于目标C:
+(void)setLanguage:(NSString*)language{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
object_setClass([NSBundle mainBundle],[BundleEx class]);
});
objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
对于Swift:
class func setLanguage(_ language: String) {
var onceToken: Int
if (onceToken == 0) {
/* TODO: move below code to a static variable initializer (dispatch_once is deprecated) */
object_setClass(Bundle.main, BundleEx.self)
}
onceToken = 1
objc_setAssociatedObject(Bundle.main, bundle, language ? Bundle(path: Bundle.main.path(forResource: language, ofType: "lproj")) : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
添加上述方法,然后只传递要转换的语言。
如果您添加了 ja.lproj ,请发送" ja "作为上述方法的一个参数。
这将转换Storyboard语言而不重启。
希望它有所帮助。