【问题标题】:Overriding preferred strings localization on the fly for testing动态覆盖首选字符串本地化以进行测试
【发布时间】:2010-06-25 12:40:30
【问题描述】:

使用 iPhone 模拟器中的设置应用程序来切换语言是一种 PITA 测试本地化调整的方法。我正在尝试找出一种在我的应用中使用调试设置即时切换本地化(en/fr/es/etc)的方法,而无需重新启动应用。

NSBundle 提供了从任意本地化请求本地化资源的方法,例如

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName

但我找不到字符串管理子系统的等效项。 thesequestions 听起来你可以覆盖注册的默认值,这听起来很傻,需要重新启动应用程序。

这里还有其他策略吗?如果我将 NSLocalizedString 包装在调试版本中完成了自己的工作,那么加载给定 .strings 文件的最短路径是什么?有没有一种编程方式来访问这些字符串表,而无需自己去解析它们?

谢谢。

【问题讨论】:

    标签: cocoa localization nsbundle nslocalizedstring


    【解决方案1】:

    我想出的唯一方法是使用this answer 建议的巧妙技巧。您可以将NSLocalizedString() 包装在一个了解本地化“覆盖”的函数中,并根据是否设置来选择如何获取其字符串。当您想要覆盖时,您可以从本地化目录创建一个“子包”,然后从该包中提取字符串。这是它的要点:

    if (CurrentLocalization != nil) {
        NSBundle * locBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:CurrentLocalization ofType:@"lproj"]];
        return [locBundle localizedStringForKey:key value:nil table:nil];
    } else {
        return NSLocalizedString(key, @"");
    }    
    

    等等

    【讨论】:

      【解决方案2】:

      通过从应用程序中选择特定语言来使用特定语言的技巧是强制 NSLocalizedString 根据所选语言使用特定包,

      这是我为http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html写的帖子

      这是一个示例应用程序的代码https://github.com/object2dot0/Advance-Localization-in-ios-apps

      【讨论】:

        【解决方案3】:

        AppleLanguages 默认设置为由首选语言组成的数组,最优先的在前。比如你只关心英文,设置为'("en");'

        【讨论】:

        • 嗨,格雷厄姆,感谢您的快速回复。我真的很讨厌成为那个人,但我确实注意到我正在寻找一个不需要重新启动应用程序的即时解决方案,并链接到您对以前相关问题的回答。看来我需要直接解析字符串 plist。
        • @quixoto 你是说如果你以编程方式更新AppleLanguages 默认值,它不会影响使用哪个字符串表?
        • 确实如此,但似乎只有在重新启动应用程序后才会这样做。大概是语言环境子系统在应用程序启动时初始化/缓存字符串表?
        • 不幸的是,这个技巧只有在重新启动应用程序后才有效。 (在装有 iOS 3.2 的 iPad 上测试)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-23
        • 2021-10-28
        • 1970-01-01
        • 2017-07-26
        • 2019-05-11
        • 1970-01-01
        相关资源
        最近更新 更多