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

标签 cocoa database-design core-data localization internationalization

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

作为示例,我们假设以下结构:

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)

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

这是否需要核心数据中的一个与书籍相关的单独实体(例如 BookLocalization),或者是否有其他推荐的方法来做到这一点?

最佳答案

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

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

[book bookLocalizationForLanguage:@"de"].name

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

关于cocoa - 核心数据实体中可本地化属性值的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1282684/

相关文章:

xcode - 将可执行文件从应用程序包移动到系统位置

objective-c - 从 NSArray 添加到核心数据模型

objective-c - 读取别名文件

database - 我应该如何设计表以将标签存储在数据库中?

ios - 搜索核心数据中的关系数量 - Swift

cocoa - 使用 xCode 制作图表

sql - 数据库设计 : Stored Record Edit History (Temporal Data)

mysql - 如何更新仅依赖于时间戳的 mysql 数据库列?

ios - 这是拥有CoreData NSFetchedResults和NSPersistentStore函数的正确方法吗?

sorting - 核心数据 : Background fetch, NSFetchedResultsController 和排序时间