【问题标题】:Model for localizable attribute values in Core Data Entity?核心数据实体中可本地化属性值的模型?
【发布时间】:2010-11-19 22:34:56
【问题描述】:

如果我想在 Core Data 中创建一个实体,该实体的属性值应该是可本地化的,我想知道最有效的方法是什么样的?

作为一个例子,我们假设如下结构:

Book
    name (localizable)
    description (localizable)
    author

本地化的图书条目如下所示:

name:   "A great novel" (en/international),
        "Ein großartiger Roman" (de), 
        "Un grand roman" (fr)

description:
        "Great!" (en/international),
        "Großartig!" (de), 
        "Grand!" (fr)

author: "John Smith"

在 SQL/SQLite 实现中,我将使用两个表。 books 表包含书籍信息(作者、英文/国际名称和描述)和 localizationBooks 表,该表使用相应书籍的主键关联。第二个表包含本地化名称和描述值以及语言代码。这将允许拥有可扩展数量的本地化。

为了获取数据,我会使用

SELECT COALESCE(localizationBooks.name, books.name)

获取给定语言代码的实际值。这允许使用国际英语值作为不支持的语言的后备。

这是否需要 Core Data 中与 Book 有关系的单独实体(例如 BookLocalization),还是有其他推荐的方法?

【问题讨论】:

    标签: cocoa database-design core-data localization internationalization


    【解决方案1】:

    你提到的策略通常是最好的。正如您所建议的,这需要本地化属性的额外实体。

    然后,您可以在 Books 实体上编写一个辅助方法,以获取给定语言的适当本地化对象并像这样使用它:

    [book bookLocalizationForLanguage:@"de"].name
    

    您甚至可以更进一步,只需在 Books 实体上添加 localizedNamelocalizedDescription 等属性,这将获取适当的本地化值。

    【讨论】:

      【解决方案2】:

      好吧,尽管这个话题已经有 3 年历史了……我只是偶然发现了它,问我自己和原来的海报一样。我找到了另一个有答案的帖子。

      我会在这里重复一遍,以防其他人点击这个帖子(来自 Gordon Hughes 的回答):

      Good practices for multiple language data in Core Data

      总结一下: 假设您有实体书。然后,您将不得不制作一个额外的,例如称为 Localizedbook。在 Books 中,您有属性“title”,在 LocalizedBook 中,您有“localizedTitle”和“locale”,用于诸如“en_US”之类的国际字符串。

      您现在必须设置标题 -> 本地化标题之间的关系(一对多,因为一个原始标题可以有多个翻译)。

      因此,每次获取“title”时,如果关系设置正确,您将获得指定给特定语言环境的“localizedTitle”。

      【讨论】:

      • 只包含链接的答案是considered bad practice。请在此处总结内容(请勿复制/粘贴),以便答案可以独立存在。如果您不这样做,您的答案将面临被删除的风险,尤其是在链接失效的情况下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多