【问题标题】:iOS - LocalizedStringForKey:value:table: returning wrong localizationiOS - LocalizedStringForKey:value:table: 返回错误的本地化
【发布时间】:2012-11-20 16:59:31
【问题描述】:

我正在使用以下代码返回本地化字符串:

[self.languageBundle localizedStringForKey:key value:key table:nil];

如果是英语,没有问题。但是,对于荷兰语,它默认为英语。为了清楚起见,self.languageBundle 是一个在第一次启动时复制的空包。然后创建两个本地化目录(en.lproj 和 nl.lproj),并在两个目录中创建 Localizable.strings 文件并填充正确的本地化字符串(我检查了它们)。

我使用以下方式更改语言:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"nl"]
                                                  forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];

但是,它仍然在 en.lproj 而不是 nl.lproj 中加载本地化

【问题讨论】:

  • 只需从设置中将语言更改为 nl 即可检查
  • 仍在加载英文本地化!
  • 我遇到了同样的问题 - 您找到解决此问题的方法了吗?

标签: iphone ios xcode localization localizable.strings


【解决方案1】:

您似乎正试图在运行时更改语言,而 Apple 并未正式支持这一点。更改“AppleLanguages”的密钥只有在您关闭并重新启动应用后才会生效。

但是可以在运行时更改应用的本地化,请参阅answer of this question

the aggressive-mediocrity solution 中,您保留自己的语言代码变量,并创建自定义 LocalizedString 函数(在示例源“AMLocalizedString”中)而不是使用 NSLocalizableString。这是一个很好的解决方案,我在我的一个项目中使用过它,并且该应用程序已获得 Apple 的批准,没有任何问题。

此外,您可以像往常一样使用默认的 Localizable.strings 文件,因此无需在首次应用启动时创建目录和复制 Localizable.strings。

【讨论】:

  • 我需要在运行时添加本地化字符串。我使用 Web 服务(解析为 NSDictionary 并写入 Localizable.strings 文件的 JSON)获取它们。所以第二部分是不可行的。关于第一部分,即使重新启动它也不起作用。当我从设置更改语言时,它也不起作用。始终默认为英语。
【解决方案2】:

如果您在项目中添加了本地化.string 文件,请删除项目中自动创建的所有其他本地化文件。试试这个link

【讨论】:

  • 没有。捆绑包中没有可用的 localizable.strings 文件。只有那些在运行时创建的
猜你喜欢
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 2014-03-11
  • 1970-01-01
相关资源
最近更新 更多