gpt4 book ai didi

iphone - Core Data 中多语言数据的良好实践

转载 作者:太空狗 更新时间:2023-10-30 01:48:36 24 4
gpt4 key购买 nike

我的 iPhone 应用程序中需要一个多语言核心数据数据库。我可以为每种语言创建不同的数据库,但我希望在 iphone sdk 中存在一种自动管理不同语言核心数据(如资源和字符串)数据的方法。

有人有一些提示吗?

最佳答案

我做了类似于 Shortseller 的事情,但没有使用类别。

alt text

InternationalBookLocalizedBook都是具有一对多关系的自定义托管对象(一本国际书籍到许多本地化书籍)。

在执行InternationalBook ,我为 title 添加了自定义访问器:

- (NSString *)title {
[self willAccessValueForKey:@"title"];
NSString *locTitle = nil;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"locale==%@", [DataManager localeString]];
NSSet *localizedSet = [self.localizedBook filteredSetUsingPredicate:predicate];
if ([localizedSet count] > 0) {
locTitle = [[localizedSet valueForKey:@"localizedTitle"] anyObject];
}
[self didAccessValueForKey:@"title"];
return locTitle;
}

[DataManager localeString]是一个返回用户语言和国家代码的类方法:en_US , fr_FR等。请参阅有关 NSLocale 的文档了解详情。

有关 willAccessValueForKey: 的解释,请参阅核心数据编程指南的“自定义属性和一对一关系访问器方法”部分和 didAccessValueForKey: .

填充数据时,我获取一个表示用户当前语言环境的字符串 ( [DataManager localeString] ),并将其与本地化的书名一起存储在新的 LocalizedBook 中。目的。每个LocalizedBook实例被添加到 NSMutableSet , 表示一对多关系。

NSMutableSet *bookLocalizations = [internationalBook mutableSetValueForKey:@"localizedBook"]; // internationalBook is an instance of InternationalBook
// set the values for locale and localizedTitle
LocalizedBook *localizedBook = (LocalizedBook *)[NSEntityDescription insertnNewObjectEntityForName:@"LocalizedBook" inManagedObjectContext:self.bookMOC];
localizedBook.locale = [DataManager localeString];
localizedBook.localizedTitle = theLocalizedTitle; // assume theLocalizedTitle has been defined.
[bookLocalizations addObject:localizedBook];
[bookLocalizations setValue:localizedBook forKey:@"localizedBook"];

由于本地化标题存储在 LocalizedBook 中托管对象,您可以制作 title属性为 transient ,但如果这样做,则不能使用 title在谓词中。

这种方法的好处在于,对多关系的实现对任何消费者都是透明的。您只需请求 internationalBook.title并且自定义访问器会在后台根据用户的语言环境返回适当的值。

关于iphone - Core Data 中多语言数据的良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com