obj-c 应用程序未以编程方式本地化
Posted
技术标签:
【中文标题】obj-c 应用程序未以编程方式本地化【英文标题】:obj-c app is not localized programmatically 【发布时间】:2017-12-08 11:59:27 【问题描述】:我尝试通过扩展 NSBundle
-- NSBundle setLanguage: (NSString *) language
以编程方式更改语言。我有几个应用程序本地化。
一些本地化工作正常,但在安装西班牙语和意大利语时,我看到的不是本地化字符串,而是localizable.strings
参数的名称。其他一些语言也会发生同样的情况,但并非所有行都如此。
请告诉我可能是什么问题
更新:
这里有几行英文:
"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
【问题讨论】:
你能显示一些英文和其他语言的字符串吗?所以我们可以检查那个代码 不清楚,我想你应该分享一些代码。 【参考方案1】:您如何将新的本地化文件拖到项目中?我发现当你向 xCode 添加新语言时,最好先从 xCode 中完全删除整个文件夹,然后同时将包括新语言在内的所有内容拖回来 :)
【讨论】:
我一个一个添加文件...好的,我试试【参考方案2】:事实证明,代码中有一个不可打印的空格字符&nbsp;
,因此该字符之后的部分参数没有被翻译。 XСode 不显示此字符。如果您通过网络服务进行翻译,就会发生这种情况。当我在所有本地化中删除此符号时,一切正常。
【讨论】:
以上是关于obj-c 应用程序未以编程方式本地化的主要内容,如果未能解决你的问题,请参考以下文章