用于多种语言的多个SQLite数据库?
我想为我的应用程序实现多语言支持。 所以我创build了Localizing.strings
文件和所有这些东西,并翻译了我的界面。 到现在为止还挺好 …
现在我想复制我的数据库,以便为每种语言都有一个* .db文件。 所以我做了,然后在“本地化”选项卡下的“+”上通过XCode单击。 我现在有一个* .db文件在我的en.lproj
和de.lproj
文件夹。
我的问题:如果我想将数据库文件复制到应用程序的文档目录* .db文件当然不可用,因为它在* .lproj文件夹中。 有没有任何命令来获得正确的lproj文件夹?
澄清我的需求:这是行不通的
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"mydatabase.db"]
这确实:
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"de.lproj/mydatabase.db"]
…但我不想手动添加“de.lproj”和“en.lproj”等。 有没有办法dynamic修复它?
你想要的是当前的语言环境,下面的代码应该返回代码:
NSArray *languagesArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]; NSString *currentLanguage = [languagesArray objectAtIndex:0];
然后您可以执行以下操作
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.lproj/mydatabase.db", currentLanguage]];
你可能想要检查path是否存在,并且是一个有效的文件,如果不是,可以使用一些默认path,如英文(en.lproj)
编辑:还有一种方法可以使用NSLocale的首选语言来做到这一点,因为那么你会得到一个首选语言的列表,所以一些更新后的代码将是:
NSArray *languagesArray = [NSLocale preferredLanguages]; NSString *currentLanguage = [languagesArray objectAtIndex:0];
最后,你会得到这样的结果:
NSString *pathComponent = [NSString stringWithFormat:@"%@.lproj/mydatabase.db", currentLanguage]; NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:pathComponent]; NSString *activePath = nil; // This will store the active language file // Check if the file exists... if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { activePath = path; } else { activePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"en.lproj/mydatabase.db"]; // Fallback }
请注意,上面的代码没有经过testing,但应该足够了。 你可能需要修改一下…
只需执行以下操作:
NSString *dbpathResource = [[NSBundle mainBundle] pathForResource:@"databaseName" ofType:@"db"];
并且如果您在xx.lproj中拥有本地化的.db文件,那么将会采用正确的数据库。
像这样的东西:
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; NSString * rootPath = [[NSBundle mainBundle] resourcePath]; NSString * resourcePath = [[NSBundle mainBundle] pathForResource: @"mydatabase" ofType: @"db" inDirectory: rootPath forLocalization: language];