合适的数据结构来保存本地化设置

Suitable data structure to save localized settings

场景如下。我在应用程序中有一组设置。例如,将我的应用视为视频播放器。所以有允许全屏显示字幕等设置。所有这些设置都有布尔值,因为你可以打开或关闭它们。

这些设置应显示在应用内的 table 视图中。如果它们中的任何一个被激活,或者当用户点击它们 activate/deactivate,您可以通过设置该单元格的复选标记附件视图来显示它。

由于我需要以这种方式显示设置并且仅在应用程序内显示,因此我不能简单地使用设置包。还有另一个问题。我需要将这些设置本地化。

我最初的想法是为我支持的语言提供单独的 plist。

Settings_en.plist(英文)

Settings_sv.plist(瑞典语)

然后根据系统语言获取plist名称并显示其值。

let filePath = NSBundle.mainBundle().bundlePath.stringByAppendingPathComponent(NSLocalizedString("SETTINGS_PLIST", comment: ""))

但这并不理想,因为假设我是瑞典语的 运行,并且我将字幕设置更改为打开。现在我必须在两个 plist 中更新它。如果我将来添加更多语言,这将很快变得更加混乱。

有没有更好的存储设置的方法,更容易保存和获取,还支持本地化?

我在其他地方找到了答案。以下是解决此问题的步骤。

  1. 不要使用多个 plist,而是创建一个 plist 并使用英语编写密钥。

  1. 然后在您的字符串文件中使用相同的英文键来本地化字符串。

Localizable.strings(英文)

FULL_SCREEN = "Full Screen";

SUBTITLES = "Subtitles";

Localizable.strings(瑞典语)

FULL_SCREEN = "Helskärm";

SUBTITLES = "Undertexter";

  1. 在 table 视图中显示值时的代码中,通过该键引用它们。

let setting = settings[indexPath.row] as [String: Bool]
let title = setting.keys.first
cell.textLabel?.text = NSLocalizedString(title!, comment: "")