多语言的多个SQLite数据库?

Dud*_*ude 6 sqlite iphone localization ios

我想为我的应用程序实现多语言支持.所以我创建了Localizing.strings文件和所有东西并翻译了我的界面.到现在为止还挺好 …

现在我想复制我的数据库,以便为每种语言都有一个*.db文件.所以我做了,然后我通过XCode点击了Localization选项卡下的"+".我现在在我的一个*.db的文件en.lprojde.lproj文件夹.

我的问题:如果我想将db-files复制到app的文档目录中,*.db文件当然不可用,因为它位于*.lproj文件夹中.有没有命令来获得正确的lproj文件夹?

澄清我的需求:这不起作用

[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"mydatabase.db"]
Run Code Online (Sandbox Code Playgroud)

......这样做:

[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"de.lproj/mydatabase.db"]
Run Code Online (Sandbox Code Playgroud)

...但我不想手动添加"de.lproj"和"en.lproj"等.有没有办法动态修复它?

Suh*_*tel 2

您想要的是当前语言区域设置,以下代码应返回代码:

NSArray *languagesArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languagesArray objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

然后您可以执行以下操作

[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.lproj/mydatabase.db", currentLanguage]];
Run Code Online (Sandbox Code Playgroud)

您可能想检查该路径是否存在并且是有效文件,如果不存在,则可以使用一些默认路径,例如英语路径(en.lproj)

编辑:还有另一种方法可以使用 NSLocale 的首选语言来执行此操作,因为这样您就可以获得首选语言的列表,因此第一位的一些更新代码将是:

NSArray *languagesArray = [NSLocale preferredLanguages];
NSString *currentLanguage = [languagesArray objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

最后,你会得到类似这样的结果:

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
}
Run Code Online (Sandbox Code Playgroud)

请注意,上面的代码未经测试,但应该足够了。您可能需要稍微修改一下...