iPhone 应用程序本地化 - 英语问题?

标签 iphone localization localizable.strings

我有一个应用程序,正在将其翻译成多种不同的语言。问题是该应用程序在澳大利亚和新西兰的值有一些不同,这两个国家都是英语国家。

我创建了一个 en_AU 和一个 en_NZ 语言文件,但它们都使用标准英语文件。我删除了英文文件,但它仍然发生...

关于如何让它发挥作用有什么想法吗?

谢谢,

--d

最佳答案

iPhone 本地化(或者是本地化?)不会注意到用户设置的区域(即英国、澳大利亚、新西兰)。默认情况下只有一种“英语”语言翻译可用。但是,您可以进行一些修改,强制它使用不同的翻译设置 - 我刚刚这样做是为了在“英语”(美国)和“en_GB”(英式英语)之间进行选择。

在您的 main.m 文件中,对其进行更改,使其看起来如下所示(放入您自己针对 NZ 或 AU 的测试)

int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// Set up the locale jiggery pokery
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString *locale = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];
if ([language isEqualToString:@"en"] && [locale isEqualToString:@"GB"]) {
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en_GB", @"en", nil] forKey:@"AppleLanguages"];
}

int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;

}

这会将用户语言(例如“en”)弹出到语言 NSString 中,并将用户区域设置(例如 NZ、GB、AU)弹出到区域设置 NSString 中。如果它们(在我的例子中)匹配 en 和 GB,那么我将用户的默认语言首选项设置为“en_GB”,然后是“en”。

然后,在您的应用程序委托(delegate) application:didFinishLaunchingWithOptions 方法中,您想要删除刚刚使用代码设置的 NSUserDefaults 设置

    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AppleLanguages"];

此时删除是安全的,因为所有 bundle 初始化都已完成。您的应用现在应该使用 en_GB.lproj 目录中的 Localization.strings 文件。

这是一个有点可怕的、hacky 的解决方案,但它对我有用。

关于iPhone 应用程序本地化 - 英语问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3308519/

相关文章:

iphone - 我可以使用 CCLabelTTF 代替 UILabel 吗?

asp.net - 如何使用resxresourcewriter写所有三个值?

asp.net-mvc - MVC - 使用数据库中的错误消息验证属性

ios - localizable.string 不存在时如何设置默认语言?

ios - 如何在 userDefaults swift 中进行循环

ios - UITableView 宽度约束无法正常工作

iphone - 应用程序进入后台状态时如何取消 AVExportSession?

ios - 如何根据输入语言更改 UISearchBar 的对齐方式

ios - 如何使 Storyboard 字符串保持最新?

xcode - 从Localizable.strings中删除未使用的资源