Dud*_*ude 6 sqlite iphone localization ios
我想为我的应用程序实现多语言支持.所以我创建了Localizing.strings文件和所有东西并翻译了我的界面.到现在为止还挺好 …
现在我想复制我的数据库,以便为每种语言都有一个*.db文件.所以我做了,然后我通过XCode点击了Localization选项卡下的"+".我现在在我的一个*.db的文件en.lproj和de.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"等.有没有办法动态修复它?
您想要的是当前语言区域设置,以下代码应返回代码:
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)
请注意,上面的代码未经测试,但应该足够了。您可能需要稍微修改一下...