合适的数据结构来保存本地化设置
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 中更新它。如果我将来添加更多语言,这将很快变得更加混乱。
有没有更好的存储设置的方法,更容易保存和获取,还支持本地化?
我在其他地方找到了答案。以下是解决此问题的步骤。
- 不要使用多个 plist,而是创建一个 plist 并使用英语编写密钥。
- 然后在您的字符串文件中使用相同的英文键来本地化字符串。
Localizable.strings(英文)
FULL_SCREEN = "Full Screen";
SUBTITLES = "Subtitles";
Localizable.strings(瑞典语)
FULL_SCREEN = "Helskärm";
SUBTITLES = "Undertexter";
- 在 table 视图中显示值时的代码中,通过该键引用它们。
let setting = settings[indexPath.row] as [String: Bool]
let title = setting.keys.first
cell.textLabel?.text = NSLocalizedString(title!, comment: "")
场景如下。我在应用程序中有一组设置。例如,将我的应用视为视频播放器。所以有允许全屏、显示字幕等设置。所有这些设置都有布尔值,因为你可以打开或关闭它们。
这些设置应显示在应用内的 table 视图中。如果它们中的任何一个被激活,或者当用户点击它们 activate/deactivate,您可以通过设置该单元格的复选标记附件视图来显示它。
由于我需要以这种方式显示设置并且仅在应用程序内显示,因此我不能简单地使用设置包。还有另一个问题。我需要将这些设置本地化。
我最初的想法是为我支持的语言提供单独的 plist。
Settings_en.plist(英文)
Settings_sv.plist(瑞典语)
然后根据系统语言获取plist名称并显示其值。
let filePath = NSBundle.mainBundle().bundlePath.stringByAppendingPathComponent(NSLocalizedString("SETTINGS_PLIST", comment: ""))
但这并不理想,因为假设我是瑞典语的 运行,并且我将字幕设置更改为打开。现在我必须在两个 plist 中更新它。如果我将来添加更多语言,这将很快变得更加混乱。
有没有更好的存储设置的方法,更容易保存和获取,还支持本地化?
我在其他地方找到了答案。以下是解决此问题的步骤。
- 不要使用多个 plist,而是创建一个 plist 并使用英语编写密钥。
- 然后在您的字符串文件中使用相同的英文键来本地化字符串。
Localizable.strings(英文)
FULL_SCREEN = "Full Screen";
SUBTITLES = "Subtitles";
Localizable.strings(瑞典语)
FULL_SCREEN = "Helskärm";
SUBTITLES = "Undertexter";
- 在 table 视图中显示值时的代码中,通过该键引用它们。
let setting = settings[indexPath.row] as [String: Bool]
let title = setting.keys.first
cell.textLabel?.text = NSLocalizedString(title!, comment: "")