我正在为 iOS 开发本地化架构。我有不同的实体可以具有翻译字段,因此我为每个实体创建一个翻译实体。两个实体之间始终存在一对多的关系,允许我在未来添加新的语言,并且我可以通过Entity.translations访问翻译。到目前为止,一切都很好。
Entity
EntityTranslation
1)首先,我想知道这样的方法是否听起来不错。是我将在纯 SQL 环境中使用的解决方案,所以我想我可以遵循这条路径。
2)然后...我只想用于Entity.text
为用户显示适当的文本(通过NSLocale preferredLanguages
)。作为translations
返回的NSSet
一个选项将是手动将属性添加到实体模型,并更改 getter:
// Entity.h
@property (nonatomic, retain) NSString * text;
// Entity.m
@synthesize text;
- (NSString *) text
{
NSString *locale = [[NSLocale preferredLanguages] objectAtIndex:0];
NSSet *filteredTranslations = [self.translations filteredSetUsingPredicate: [NSPredicate predicateWithFormat:@"locale = %@", locale]];
EntityTranslation *translation = [[filteredTranslations allObjects] objectAtIndex:0];
return translation.text;
}
它有效,但它有意义吗?我会遇到性能问题吗?是否可以使用Fetched 属性做类似的事情?有些东西告诉我这应该是可能的,但我无法使用 Xcode Core Data 编辑器让它工作......
谢谢。