2009-06-01 87 views
10

我想在我的EN_GB和其他“EN”亚语言,但Xcode和iPhone的iPhone应用程序本地化字符串拒绝让这种事情发生。为了测试目的,我为en_GB和en_US(我尝试了连字符和下划线)创建了“Localizable.strings”本地化,但它们只是无法识别。唯一可用的语言代码只是“en”(在XCode中显示为“英文”)。iPhone EN_ *子语言本地化

我不能相信这是不可能的,所以我做错了什么?我也希望获得典型的“级联”行为,如果在子语言中找不到字符串,例如“en_GB”,如果可能的话,应该从“en”中取出。帮帮我?

回答

6

当您从语言对iPhone的喜好列表中选择“英语”,实际上是指“EN_US的语言。

所以直到苹果,像“英语(英国)”等附加子语言留给我们的区域设置区域设置会和加载字符串手动从另一字符串表更新他们的软件。

然而,语言和区域区域是分开的一个原因:在英国,西班牙的用户可能希望在他们的母语根据当地的风俗格式的日期/时间,但节目的字符串。检测区域区域(英国)并因此显示英国字符串将是不正确的。

所以现在基本上没有办法做到这一点。

+0

好的答案!但是,这提出了一个问题:区域设置格式有什么好处,如果不是用于本地化字符串? – 2011-07-22 21:07:20

+0

区域设置用于格式化日期,货币,以选择将数字中的小数位分开的字符等。 – 2011-07-25 11:47:16

4

你在做什么应该按照文档工作。但似乎iPhoneOS的实现与文档不一致。根据Radar 6158876,不支持en_GB语言,仅支持语言环境(日期格式等)。

1

我发现了同样的问题。

顺便说一句,如果你看看iPhone设置 - >通用 - >国际菜单,它使语言和区域之间的区别相当明显:

语言:
- 英语

区域格式:
-United美国
-United王国

本地化框架似乎只关注到L语言,而不是地区。

我很想用苹果公司提出这方面的改进要求,因为用户可能想要在美国使用英式英语(用于文本)是合理的,因为在美国(例如电话号码应该是美国格式)。

1

创建一个单独的字符串资源,说UKLocalization.strings,并为每个支持语言的本地化。对于en以外的所有本地化,此文件为空。对于en,它只包含具有唯一en_GB拼写的字符串。

接下来,您将创建NSLocalizationString的替代将首先回落至标准的本地化表之前检查UKLocalization表。

例如:

static NSString* _locTable = nil; 
void RTLocalizationInit() 
{ 
    _locTable = nil; 

    NSString* country = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode]; 
    if ([country isEqual:@"GB"]) 
    { 
     _locTable = @"UKLocalization"; 
    } 
} 

NSString* RTLocalizedString(NSString* key, NSString* ignored) 
{ 
    NSString* value = nil; 
    value = [[NSBundle mainBundle] localizedStringForKey:key value:nil table: _locTable]; 
    if (value == key) 
    { 
     value = NSLocalizedString(key, @""); 
    } 
    return value; 
} 
1

我不知道在iOS系统的版本据介绍,但是iOS的7肯定有一个“英式英语”的语言偏好将从en_GB.lproj目录中获取资源。除非你使用更专门的方言,否则在网上流淌的各种黑客应该不是必要的。

*看看我在那里做了什么;)