ios - 使用正确的 NumberFormatter 和 localizedStringWithFormat 的手动语言

标签 ios localization nsnumberformatter appsettings

我在我的 iOS 应用程序中添加了一个手动语言部分,您可以在其中更改应用程序的显示语言。如果有人选择选择手动语言,我会像这样覆盖“AppleLanguages”standardUserDefaults

NSString *language = [[[NSUserDefaults alloc] initWithSuiteName:kAppGroup] objectForKey:kManualLanguageKey];

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

现在,当用户重新启动应用程序(在终止应用程序后)时,应用程序会自动加载正确的 LocalizedStrings。

现在我的问题是:

尽管这解决了我更改应用程序语言的问题,但它无法正确显示数字等。 Number/DateFormatter 和 localizedStringWithFormat 取决于 [NSLocale currentLocale]。我知道我也可以像这样覆盖当前的 lokale

[[NSUserDefaults standardUserDefaults] setObject:language
                                                      forKey:@"AppleLocale"];

但是一旦用户决定禁用手动语言,我就无法在系统设置中选择真实的语言/区域。在我覆盖它之前,我可以将 currentLocale 存储在我自己的 userDefaults 中,但是如果用户决定(出于任何原因)更改系统语言,而应用程序中的手动语言处于事件状态,我将无法获得这个新选择的系统语言。

有没有办法在不手动更改 NumberFormatter 等的区域设置属性的情况下获得正确格式的数字和日期?

最佳答案

好的,我找到了一种在用户禁用 http://www.thetawelle.de/?p=3800 上的手动语言后重置当前语言环境的方法

在 main.m 中,如果手动语言的 bool 为假,我会像这样重置当前语言:

  NSArray *keysToRemove = @[@"AppleLanguages",@"NSLanguages",@"AppleLocale"];
            NSLog( @"RESETTING TO USE SYSTEM LOCALE" );
            @try {
                for( NSString *currentKey in keysToRemove ) {
                    if( [defaults objectForKey:currentKey] ) {
                        [defaults removeObjectForKey:currentKey];
                    }
                }
            }
            @catch (NSException *exception) {
                // NOTHNG TO CATCH HERE
            }
            @finally {
                [defaults synchronize];
            }

之后,当前的区域设置和语言恢复为系统设置中选择的语言和区域。

关于ios - 使用正确的 NumberFormatter 和 localizedStringWithFormat 的手动语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32326400/

相关文章:

objective-c - 使用文本字段添加两个数字

iOS 应用程序 : Pre-populated large database not allowed - alternatives?

ios - 如何在 swift 中使用带有结构的嵌套 json

javascript - 在导航中 react native 多颜色标题

python - Edx平台本地化不生效

symfony - symfony2 中的模板本地化

asp.net-mvc - 自定义 MVC 错误消息本地化

swift - 将 NSDecimalNumbers 转换为负数

ios - 我在文本字段中做错了什么,结束编辑了吗?货币格式

ios - Localizable.strings 不工作