【问题标题】:How to represent a localized string type in Core Data?如何在 Core Data 中表示本地化的字符串类型?
【发布时间】:2011-07-28 22:14:41
【问题描述】:

我是 Core Data 的新手,并且在概念上遇到了一些困难(相对于我理解的 SQL)。

为了简单起见,我正在尝试构建一个模型,如下所示:

"Category" entity, which has a name, and a relationship to-many Products
"Product" entity, which has a name

我希望两个实体中的 names(字符串)存储本地化的变体。这意味着另一个连接。有少量可能的本地化。我知道我可以将每个本地化作为一个单独的属性(“name_en”、“name_de”等),但这不能扩展,我想了解实现这一点的“正确”方式。

我的直觉告诉我,我在这里还需要两个实体,一个是 Localizations 一个(它只包含一组可能的本地化),另一个是 LocalizedString 一个,它与 Localization 相关。但是 Xcode 警告我没有设置反向关系等。

有深入了解Core Data模型设计的人可以帮助新手了解如何思考这个问题吗?

(我的下一个问题将是构建奇怪的多轴 UI,它允许您为每个可用的本地化设置名称,但这将是另一组调查。:)

【问题讨论】:

  • 这些字符串是由用户输入还是仅由应用程序使用?如果您使用 Core Data 作为后端来本地化您的应用程序,那么您最好使用提供的本地化工具。否则我会倾向于同意fluchtpunkt的回答。
  • @sosborn:由用户输入。否则我肯定会同意你在这种情况下的建议。 (这似乎也是一个很好的学习示例,因为实体关系比我读过的 CD 教程更有趣。)谢谢。

标签: macos core-data


【解决方案1】:

我不知道我是否有资格成为挖掘核心数据的人,但我过去曾使用过类似的东西:

Something 中的name 是英文名称。所以我不必在英语设备中搜索关系(它涵盖了我应用程序的 70% 的设备)。
Something 子类中有一个名为localizedName 的getter,它返回名称或当前使用的语言代码的字符串。

当我这样做时,我认为我可以将本地化字符串保存在 name 属性中,因为语言通常不会在开发人员不使用的设备上经常更改。但最后我决定反对这个,因为那不是性能问题。

我认为可以用来解决不存在的性能问题的另一个变体:

currentLanguageString 基本上指向当前语言的本地化字符串。每次语言更改时都会更改(在 99.9% 的情况下,这种情况仅发生一次,即首次启动应用程序时)。


如果Something 实体中有多个字符串,我会将LocalizedString 设为专门为要本地化的字符串创建的子类的抽象父类。
您必须使用这种奇怪的构造,因为您无法创建与多个实体的关系。


或者如果您知道自己在做什么,请忽略“无反比关系”警告

但是如果你这样做,你必须确保你永远不会删除仍在使用的LocalizedString 对象。您不希望以不一致的存储结束。

【讨论】:

  • 非常感谢您的详细回复。好东西。我最感兴趣的是你的最后一点。在 SQL 中,LocalizedString 表可能是一个像 (stringID, languageCode, text) 这样的元组,但正如你所说,这种非逆通用存储在这里并不自然。我会按照你描述的方式考虑。谢谢。
  • 如果您有很多字符串,这会使您的数据库变得庞大。搜索也很困难/很慢,但除此之外它可以工作
  • 很好的解释。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 2017-06-13
  • 2013-03-17
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多