【问题标题】:Having a language select option in an app using Swift在使用 Swift 的应用程序中具有语言选择选项
【发布时间】:2015-12-17 14:24:33
【问题描述】:

我已经用谷歌搜索了几个小时,但没有找到针对以下问题的建议(使用 Swift)。

我在许多应用程序中看到了从应用程序内部选择语言的选项,如下所示:


(来源:unity3d.com

我想实现类似的东西,但在实现它时遇到了麻烦。我已经本地化了我的应用程序并设置了我的 Localizable.strings 文件。我想它与存储在 NSUserDefaults 中选择的语言有关,但是一旦选择了语言,我怎样才能让应用程序使用适当的 Localizable.strings 文件?或者这是错误的处理方式?

其他人是如何在 Swift 中成功实现此功能的?

【问题讨论】:

  • 维护一个包含所有这些语言的 plist 文件,因为您已经完成了本地化,只需使用用户选择的语言加载 plist。
  • 感谢您的回复。你能再详细一点吗?例如,假设我有一个名为 languageChosen 的变量并将其设置为“French”,我将如何使用 plist 文件来调用正确的 Localizable.strings 文件?
  • 只需加载 plist NSString *path = [[NSBundle mainBundle] bundlePath]; NSString *customPlistPath = [路径 stringByAppendingPathComponent:@"French.plist"]; NSDictionary *plistData = [NSDictionary dictionaryWithContentsOfFile:customPlistPath];
  • 啊,我明白了,谢谢。不过,使用这种方法,我假设我不能直接使用情节提要在标签上设置文本。我必须使用相关的 plist 以编程方式设置每个标签的文本,对吗?

标签: ios swift localization localizable.strings


【解决方案1】:

我已经在我的一个项目中遇到过这个问题并找到了一个解决方案:

当用户从列表中选择一种语言时,发布NSNotification。您的所有UIViewController 子类必须注册到此通知并根据选择的新语言更改标签值。

您可以使用本地化字符串来设置标签,但不应调用NSLocalizedString(...),因为它依赖于与应用程序语言不同的设备语言。

您可以在 Github 上找到我对自定义本地化器的实现,它在 Swift 和 Objective-C 上都可用。

【讨论】:

  • 谢谢你。我刚刚下载它并快速播放,它看起来是一个非常好的解决方案!我想我会尝试在我的项目中使用它,因为它利用了现有的 Localizable.strings 文件。如果它解决了我的问题,我会回来并将这个答案标记为正确。不过,快速提问 - 我的应用程序已经在应用程序商店中上线。如果我使用您的方法添加本地化,​​是否会影响我应用的现有用户的功能?这是一个使用 plist 将分数和进度保存在本地设备上的游戏 - 会有任何问题吗?
  • 我在以前使用可本地化字符串的生产应用程序中使用它并且在转换期间没有遇到任何问题:由于此自定义本地化器的默认值为“设备语言”,因此没有可见的变化为用户。
  • 这个解决方案非常适合我,它是一段很棒的代码,很容易集成到现有项目中。我毫不费力地让它工作。非常感谢分享迈克尔。 :-)
  • 我很高兴知道它有帮助 :)
  • 我在 Swift 3.0 中的一行代码中遇到错误。 func receiveLanguageChangedNotification(_ notification:Notification) { if notification.name == kNotificationLanguageChanged { configureViewFromLocalisation() } } 错误是:二元运算符“==”不能应用于“Notification.Name”(又名“NSNotification.Name”)和“String”类型的操作数。请告诉我如何解决这个问题?
猜你喜欢
  • 2012-08-18
  • 2020-04-22
  • 1970-01-01
  • 2012-10-06
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多