4

如果我想在核心数据中创建具有应该可本地化的值的属性的实体,我想知道最有效的方式是怎么样的?核心数据实体中可本地化的属性值的模型?

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

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的实施,我会用两个表。 A books表中包含书籍信息(作者,英文/国际名称和说明)和使用相应书籍的主键相关的表格。该第二个表包含本地化的名称和描述值以及languageCode。这将允许具有可扩展数量的本地化。

对于获取数据,我会用一个

SELECT COALESCE(localizationBooks.name, books.name) 

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

这是否需要核心数据(例如BookLocalization)中与书相关的独立实体或者是否存在另一种推荐的方法?

回答

0

好吧,尽管这个话题已经3岁了......我只是偶然发现了这个问题,问我的自我就像原来的海报一样。我发现了另一个线程的答案。

我只是重复了在这里的情况下,别人打这个线程(回答戈登休斯):

Good practices for multiple language data in Core Data

总结: 比方说,你有实体书籍。然后你将不得不另外制作一个名为Localizedbook的例子。在书籍中,您拥有“标题”属性,而在LocalizedBook中,您拥有“en_US”等国际字符串的“localizedTitle”和“locale”。

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

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

+0

只包含链接的答案是[认为不好的做法](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers)。请总结这里的内容(不要复制/粘贴),这样答案就可以独立运作。如果你不这样做,那么你的答案就会被删除,特别是如果链接死亡的话。 – 2012-05-31 11:00:26

+0

你是对的。我添加了总结。 – 2012-06-01 07:20:48

2

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

然后你可以写上你Books实体辅助方法来获得相应的本地化对象为给定的语言,这样使用它:

[book bookLocalizationForLanguage:@"de"].name 

你甚至可以把它更进一步,只添加属性如localizedName,localizedDescriptionBooks实体将获取适当的本地化价值。

相关问题