2

我试图为墨西哥西班牙语显示与美国西班牙语不同的字符串。该应用程序始终显示美国西班牙语短语。仅供参考 - 英语、法语和葡萄牙语可以正常工作 - 但它们没有指定语言环境。

我通过单击 + 按钮并从“其他”菜单中选择西班牙语(墨西哥)(es-MX)和西班牙语(美国)(es-US),在 Build Settings->Localizations 中创建了本地化文件夹。然后我适当地更新了这些短语。在项目中,我看到 5 个 Localizable.strings 文件,包括(西班牙-墨西哥)和(西班牙-美国)。同样,我在 Finder 中看到了预期的文件夹,包括 es-MX 和 es-US。

我在应用程序 didFinishLaunchingWithOptions 中放置了一些 NSLog 消息:

    NSLog(@"preferredLocalizations=%@", [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]);
    NSLog(@"localization array=%@, count=%d", [[NSBundle mainBundle] preferredLocalizations], [[[NSBundle mainBundle] preferredLocalizations] count]);
    NSLog(@"preferredLanguage = %@", [[NSLocale preferredLanguages] objectAtIndex:0]);
    NSLog(@"language array=%@, count=%d", [NSLocale preferredLanguages], [[NSLocale preferredLanguages] count]);
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
    NSArray* languages = [defs objectForKey:@"AppleLanguages"];
    NSString *current = [languages objectAtIndex:0];
    NSLog(@"user default language=%@", current);

输出是:

2013-07-30 22:21:24.911 ecatalog[33497:907] application:didFinishLaunchingWithOptions
2013-07-30 22:21:24.918 ecatalog[33497:907] preferredLocalizations=es
2013-07-30 22:21:24.920 ecatalog[33497:907] localization array=(
    es
), count=1
2013-07-30 22:21:24.922 ecatalog[33497:907] preferredLanguage = es
2013-07-30 22:21:24.924 ecatalog[33497:907] language array=(
es,
en,
fr, <snipped a bunch for brevity>
ms,
"en-GB",
ca,
hu,
vi
), count=34
2013-07-30 22:21:24.926 ecatalog[33497:907] user default language=es

语言数组似乎是手机上可用语言的列表,按照我的首选顺序 - 即,如果我将手机设置为法语,fr它将位于列表的顶部。

我不知道它是否相关,但我的项目包括两个支持西班牙语的 3rd 方框架,但只是 es.lproj 变体——不是 es-MX.lproj 或 es-US.lproj。

另一个“症状” - 在模拟器中运行应用程序会在英语和我将模拟器设置为的任何语言之间交替。

谢谢!

4

1 回答 1

0

就我而言,我只有一个字符串需要在墨西哥和美国西班牙语之间有所不同,而且它只在一个地方使用。所以我的解决方法是手动检查语言环境并对墨西哥西班牙语字符串进行硬编码:

    NSString *startString;
    // HACK - to diferentiate between Mexican Spanish and all others
    NSLocale* curentLocale = [NSLocale currentLocale];
    NSString *localId = [curentLocale localeIdentifier];
    if ([localId isEqualToString: @"es_MX"]) {
        // hard code a string
        startString = @"Para seleccionar un folleto da clic +";
    } else {
        startString = NSLocalizedString(@"Click + to start!", nil);
    }

感觉不对,所以如果有人有“正确的方法”,我会很感激。

于 2013-08-03T02:17:59.437 回答