2017-12-08 7 views
0

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 
+0

英語と他の言語の文字列を表示できますか?私たちはコード –

+0

を確認することができないので、私はあなたがいくつかのコードを共有する必要がありますと思います。 –

答えて

0

新しいローカリゼーションファイルをどのようにプロジェクトにドラッグしますか? xCodeに新しい言語を追加するときは、最初にxCodeからフォルダ全体を完全に削除してから、新しい言語を含むすべてのものをすべて同時に戻すことが分かりました:)

+0

ファイルを1つずつ追加しました... –

0

印刷できない空白文字が&nbsp;であるため、この文字の後のパラメータの一部は翻訳されません。 Xcodeではこの文字は表示されません。これは、Webサービスを通じて翻訳する場合に発生します。すべてのローカリゼーションでこのシンボルを削除したところ、すべて正常に機能しました。

関連する問題