核心数据实体中可本地化属性值的模型?

时间:2009-08-15 19:47:56

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

如果我想在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 表。第二个表包含本地化的名称和描述值以及languageCode。这将允许具有可扩展数量的本地化。

为了获取数据,我会使用

SELECT COALESCE(localizationBooks.name, books.name)

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

这是否需要核心数据中的单独实体(例如BookLocalization)与本书有关系,还是有其他推荐的方法吗?

2 个答案:

答案 0 :(得分:2)

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

然后,您可以在Books实体上编写一个帮助方法,以获取给定语言的相应本地化对象,并按照以下方式使用它:

[book bookLocalizationForLanguage:@"de"].name

您甚至可以更进一步,只需在localizedName实体上添加localizedDescriptionBooks等属性即可获取相应的本地化值。

答案 1 :(得分:0)

嗯,尽管这个话题已经有3年了......我只是偶然发现它,问我自己和原版海报一样。我找到了另一个回答的帖子。

我会在这里重复一下,以防其他人遇到这个帖子(Gordon Hughes的回答):

Good practices for multiple language data in Core Data

总结一下: 假设你有实体书籍。然后你将需要另外一个,例如Localizedbook。在Books中,您具有属性“title”,在LocalizedBook中,您对“en_US”等国际字符串具有“localizedTitle”和“locale”。

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

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