2011-10-11 5 views
6

私は私のアプリのための多言語サポートを実装したいと思います。だから私はLocalizing.stringsファイルとそのすべてのものを作成し、私のインターフェイスを翻訳しました。これまでのところは良い...複数の言語用の複数のSQLiteデータベース?

は今、私はすべての単一言語の*の.DBファイルを持っているために、自分のデータベースを複製します。だから、私はして、ローカライゼーションタブの下の「+」でXCode経由でクリックしました。今私のen.lprojde.lprojフォルダに* .dbファイルがあります。

私の問題:私はアプリのドキュメントディレクトリに* .DBファイルをDB-ファイルをコピーしたい場合は、*の.lprojフォルダにあるので、もちろん使用できません。正しいlproj-folderを得るためのコマンドはありますか?私のニーズを明確にする

: これは

[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"mydatabase.db"] 

を動作しません...これはない:

[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"de.lproj/mydatabase.db"] 

を...しかし、私は "de.lproj" を追加しないと」 en.lproj "などを手動で入力します。それを動的に修正する方法はありますか?

答えて

2

何がしたいことは、現在の言語ロケールで、次のコードは、コードを返す必要があります:

NSArray *languagesArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]; 
NSString *currentLanguage = [languagesArray objectAtIndex:0]; 

あなたは、パスが存在するかどうかをチェックすることをお勧めします次

[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.lproj/mydatabase.db", currentLanguage]]; 

を行うことができます多分英語のための1(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 
} 

上記のコードはテストされていませんが、十分なはずです。

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 
NSString * rootPath = [[NSBundle mainBundle] resourcePath]; 
NSString * resourcePath = [[NSBundle mainBundle] pathForResource: @"mydatabase" ofType: @"db" inDirectory: rootPath forLocalization: language]; 
+0

素晴らしい答え!どうもありがとうございました! – Dude

+0

fileExistsAtPath:pathComponentはfileExistsAtPathでなければなりません:パスが - それは完璧に動作します – Dude

+0

いやはや!私は答えについている誰かのための訂正を反映する答えを編集しました。 –

1

何かを変更する必要があります。 lprojを実行すると正しいデータベースが取得されます。

3

だけで次の操作を行います:

NSString *dbpathResource = 
     [[NSBundle mainBundle] pathForResource:@"databaseName" ofType:@"db"]; 

、あなたはXXでローカライズ.dbファイルを持っている場合は、それをこのような小さな...