我想为我的应用程序实现多语言支持。因此,我创建了Localizing.strings
文件以及所有这些东西并转换了我的界面。到现在为止还挺好 …
现在,我想复制我的数据库,以便每种每种语言都有一个* .db文件。因此,我这样做了,然后我通过XCode在“本地化”选项卡下的“+”上单击了。现在,我的en.lproj
和de.lproj
文件夹中有一个* .db文件。
我的问题:如果要将数据库文件复制到应用程序的文档目录中,*。db文件当然不可用,因为它位于* .lproj文件夹中。是否有任何命令获取正确的lproj文件夹?
为了阐明我的需求:
这行不通
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"mydatabase.db"]
……这样做:
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"de.lproj/mydatabase.db"]
…但是我不想手动添加“de.lproj”和“en.lproj”等。有什么办法可以动态修复它?
最佳答案
您想要的是当前的语言环境,以下代码应返回该代码:
NSArray *languagesArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languagesArray objectAtIndex:0];
然后,您可以执行以下操作
[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.lproj/mydatabase.db", currentLanguage]];
您可能要检查该路径是否存在并且是有效文件,否则请使用一些默认路径,例如英语(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
}
请注意,上面的代码未经测试,但足够了。您可能需要对其进行一些修改...