我尝试通过NSBundle
- NSBundle setLanguage: (NSString *) language
的扩展程序以编程方式更改语言。我有几个应用程序本地化。
某些本地化版本可以正常工作,但在安装西班牙语和意大利语时,我会看到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)
如何将新的本地化文件拖到项目中?我发现当你向xCode添加新语言时,最好先从xCode中完全删除整个文件夹,然后同时将所有内容(包括新语言)全部拖回:)
答案 1 :(得分:0)
事实证明,代码具有不可打印的空格字符
,因此不会翻译此字符后的部分参数。 XСode不显示此字符。如果您翻译Web服务,就会发生这种情况。当我在所有本地化中删除此符号时,一切正常。