【发布时间】:2026-02-22 16:35:02
【问题描述】:
我尝试通过扩展 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
【问题讨论】:
-
你能显示一些英文和其他语言的字符串吗?所以我们可以检查那个代码
-
不清楚,我想你应该分享一些代码。
标签: ios objective-c