NSBundle
- NSBundle setLanguage: (NSString *) language
の拡張子を使用してプログラムで言語を変更しようとしています。私はいくつかのアプリケーションローカリゼーションを行っています。obj-c appがプログラムでローカライズされていません
一部のローカリゼーションは正しく機能しますが、ローカライズされた文字列の代わりにスペイン語とイタリア語をインストールすると、localizable.strings
パラメータの名前が表示されます。同じことが他の言語でも起こりますが、すべての行では起こりません。
問題
UPDことができるものを私にしてください教える:ここ
は英語でのラインの一部である:
"CLOSE_TITLE" = "Close";
"PAYMENT_TITLE" = "Pay";
"PAYMENT_TITLE_IN" = "Deposit";
、彼らはスペイン語でもある:
"CLOSE_TITLE" = "Cerrar";
"PAYMENT_TITLE" = "Retirar";
"PAYMENT_TITLE_IN" = "Depositar";
拡張コードがあります:
#import "NSBundle+Language.h"
#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);
}
@end
英語と他の言語の文字列を表示できますか?私たちはコード –
を確認することができないので、私はあなたがいくつかのコードを共有する必要がありますと思います。 –