0
実行時に自分のアプリケーション言語を変更したいと思います。そのために私は
iOSアプリケーションの実行時のローカライゼーション
.hファイルのようなカテゴリクラスを実装しました。
@interface NSBundle (Language)
+ (void)setLanguage:(NSString *)language;
@end
.mファイル
#import <objc/runtime.h>
static const char _bundle=0;
@interface BundleEx : NSBundle
@end
@implementation BundleEx
- (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName
{
NSBundle *bundle = objc_getAssociatedObject(self, &_bundle);
return bundle ? [bundle localizedStringForKey:key value:value table:tableName] : [super localizedStringForKey:key value:value table:tableName];
}
@end
@implementation NSBundle (Language)
+ (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);
[[NSNotificationCenter defaultCenter] postNotificationName:@"changeLanguage" object:self];
}
とボタンで[NSBundle setLanguage:langCode];
のような言語の変更]をクリックしますが、今、私は私が
などのラベルテキストを設定するために何を書くべきだと少し混乱しています
lbl.text = ?
言語の効果を表示するにはまだアプリを再起動する必要があるためです。
私は1つのviewcontrollerだけでなく、アプリの遅れを完全に調整したいと思っています。 –
あなたのアプリのすべてのView Controllerのテキストを変更することはできません。しかし、すべてのView ControllerのviewWillAppearにloadText関数を置くことができます。 – steven2211
私はそれが可能だと思います。あなたは私の質問でそれを可能にすることができますが、私はアプリを再起動する必要があります。 –