iphone - 运行时更改 Three20 中的语言/本地化

标签 iphone objective-c ios xcode three20

是否可以在运行时更改 Three20 语言/本地化而无需重新启动应用程序?

目前,我设法通过更改 main.m 中 AppleLanguages 的值来更改语言

最佳答案

它有一个“hack”。您可以使用本地化文本加载您自己的 NSBundle 并改用该 NSBundle。请注意,如果缺少本地化语言文件,应用将无法运行,因此请确保您设置了正确的语言。

在您的 AppDelegate 实现之上,添加自定义 NSBundle 声明:

static NSBundle *bundle = nil;

然后将您想要的语言加载到该包中:

[[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"he", nil] forKey:@"AppleLanguages"];

NSLocale* locale = TTCurrentLocale();  
NSString *path = [[NSBundle mainBundle] pathForResource:[locale localeIdentifier] ofType:@"lproj" ];
bundle = [[NSBundle bundleWithPath:path] retain];

您将在 AppDelegate 中添加一个自定义函数来获取本地化文本(而不是 NSLocalizedString)

///////////////////////////////////////////////////////////////////////////////////////////////////
+ (NSString*)get:(NSString*)key  {
   return [bundle localizedStringForKey:key value:nil table:nil];
}

为了方便起见,您可以在 pch 文件中添加一个静态函数:

#import "AppDelegate.h"

#define MyLocalizedString(key, alt) [AppDelegate get:key]

关于iphone - 运行时更改 Three20 中的语言/本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8351445/

相关文章:

ios - 是否可以在将通用应用程序上传到应用程序商店后将其更改为iphone?

ios - 手动设置 UINavigationController 子项

ios - 开始编辑时文本字段消失在键盘后面

ios - 滚动 tableView 时复制数据

ios - 为什么 insertNewObjectForEntityForName 只返回一个 NSManagedObject?

ios - 设置文本时停止 UITextField 调整大小

iphone - 如果 Controller 符合协议(protocol),那么它是否有必要为协议(protocol)的所有方法提供一个主体?

iphone - 应用程序因使用非公共(public)(私有(private))api 而被拒绝?

objective-c - 用户输入如何适应 Apple 的 MVC 模式?

ios - Pod 未在 Pods 文件中列出,但它安装在 pod install 命令上