Несколько баз данных SQLite для нескольких языков? - PullRequest
6 голосов
/ 11 октября 2011

Я хотел бы реализовать многоязычную поддержку для моего приложения.Поэтому я создал файл Localizing.strings и все такое и перевел свой интерфейс.Пока все хорошо ...

Теперь я хочу дублировать свою базу данных, чтобы иметь * .db-файл для каждого отдельного языка.Я сделал это, а затем щелкнул через XCode на «+» на вкладке «Локализация».Теперь у меня есть * .db-файл в моей папке 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» и т. Д. Вручную.Есть ли способ исправить это динамически?

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

просто сделайте следующее:

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

и если у вас есть локализованный файл .db в xx.lproj, то будет взята правильная база данных.

2 голосов
/ 11 октября 2011

Требуется текущая языковая локаль, следующий код должен возвращать код:

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
}

Обратите внимание, что приведенный выше код не проверен, но его должно быть достаточно. Возможно, вам придется немного его изменить ...

1 голос
/ 11 октября 2011

Примерно так:

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString * rootPath = [[NSBundle mainBundle] resourcePath];
NSString * resourcePath = [[NSBundle mainBundle] pathForResource: @"mydatabase" ofType: @"db" inDirectory: rootPath forLocalization: language];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...