【问题标题】:how to refresh localizable.strings or NSLocalizedString(key, comment) ios during runtime如何在运行时刷新 localizable.strings 或 NSLocalizedString(key, comment) ios
【发布时间】:2016-05-27 07:27:34
【问题描述】:

我正在开发一个支持多种语言的应用。一切进行得都很顺利。但我需要在运行时更改语言。
我就是这样做的——

NSArray* languages = [NSArray arrayWithObjects:@"es",@"en" nil];
[[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];

它运行良好。

NSString *langID = [[NSLocale preferredLanguages] objectAtIndex:0];

这个langID 显示的是正确的语言。但该应用在重新启动之前不会更改其语言。

有没有办法刷新 localizable.strings 文件或 NSLocalizedString(key, comment)?或者有什么其他方法可以在不重新启动的情况下做到这一点?

【问题讨论】:

标签: objective-c localization ios9 localizable.strings


【解决方案1】:

这已经在 StackOverflow 上被问过很多次了(搜索 iOS change language at runtime 之类的东西)。

使用NSLocalizedString 时,您无法在运行时更改语言。如果您真的非常需要,则需要使用自定义本地化系统。更好的是:根本不要那样做:这是出乎意料的。毕竟,用户可以在系统设置中设置他/她的首选语言(及其顺序)。

Someone even asked an Apple engineer 这是回复:

一般来说,您不应在应用程序中更改 iOS 系统语言(通过使用 AppleLanguages 首选项键)。这违背了在设置应用程序中切换语言的基本 iOS 用户模型,并且还使用了未记录的首选项键,这意味着在将来的某个时候,键名可能会更改,这会破坏您的应用程序。

如果您想在应用程序中切换语言,您可以通过手动加载捆绑包中的资源文件来实现。为此,您可以使用 NSBundle:pathForResource:ofType:inDirectory:forLocalization:,但请记住,您的应用程序将负责所有本地化数据的加载。

【讨论】:

  • 感谢您的回答。我分别为两种不同的语言创建了两个故事板并相应地调用它们。
【解决方案2】:

为了在运行时更改应用程序语言,我通过创建两个不同的故事板手动完成了这项工作。我将语言首选项保存在 NSUserDefaults 中,但没有使用键 AppleLanguages 保存,然后调用 AppDelegate 的 didFinishLaunchingWithOptions 方法来选择故事板。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainEnglish" bundle:nil];
UINavigationController *navigationcontroller=[[UINavigationController alloc]init];
RegistorViewController *registor=[storyboard instantiateViewControllerWithIdentifier:@"Registor"];
[self.window setRootViewController:navigationcontroller];
[self.window makeKeyAndVisible];
[navigationvontroller pushViewController:registor animated:NO];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-04
    • 2019-02-18
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多