gpt4 book ai didi

ios - 以编程方式更改应用程序语言以在 iOS 中进行本地化

转载 作者:行者123 更新时间:2023-11-28 19:00:26 26 4
gpt4 key购买 nike

我正在为五个不同的国家创建一个 iPhone 应用程序。因此,根据国家/地区名称,我在应用程序资源中添加了 Localizable.strings(请参阅下面的屏幕截图 1),并且在更改设备设置语言时它对我来说工作正常。

enter image description here

[btnAIO setTitle:NSLocalizedString(@"AllInOnesTitle", nil) forState:UIControlStateNormal];

现在我的应用要求已经改变,我在成功登录后获得了用户国家代码。根据要求,用户不必从设备设置中更改语言。所以,第一次我需要为所有用户显示我的英文登录屏幕,登录成功后,根据用户国家代码,我需要分别为我的应用程序更改所有文本。

可以为我的所有文本提供五个条件(以检查国家/地区语言代码),但这不是正确的方法。

谁能建议我最好的方法是什么?谢谢!

最佳答案

您可以为 NSBundle 创建类别,称为 NSBundle+Language

NSBundle+语言.h

#import <Foundation/Foundation.h>

@interface NSBundle (Language)
+(void)setLanguage:(NSString*)language;
@end

NSBundle+语言.m

#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

所以你可以为每个国家代码设置它的语言名称然后什么时候选择国家用语言调用setLanguage方法

例如 [NSBundle setLanguage:"en"];

关于ios - 以编程方式更改应用程序语言以在 iOS 中进行本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26423438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com