2009-08-11 2 views
1

Как текст в базе данных локализован для iPhone? Примеры, которые я видел, имеют жестко закодированные строки в файле .m или .xib. Например:iPhone локализация с sqlite?

NSString firstName = NSLocalizedString(@"First Name", @"This is the first name"); 

Что произойдет, если строки, необходимые для локализации, находятся в базе данных? Я не нашел обсуждения этого типа локализации. Однако, я думаю, это чрезвычайно распространено, учитывая, что многие приложения для iPhone используют sqlite.

ответ

2

NSLocalizedString просто макрос препроцессора, который превращается в вызов NSBundle «s localizedStringForKey:value:table: - так что в основном вы можете использовать строки, получаемые во время выполнения вместо закодированного строки и передать в NSBundle. Недостатком, конечно же, является то, что нет быстрого способа составить список всех строк, которые переводчик должен локализовать.

Пример:

NSString *key = fetchKeyFromDB(...); 
NSString *localizedString = [[NSBundle mainBundle] localizedStringForKey:key value:@"default string" table:nil]; 
+0

Можете ли вы привести пример кода того, что вы тоже имеете в виду? – 4thSpace

+0

Ответ отредактирован - как это? –

+0

Я не создал никаких дополнительных файлов ресурсов, поэтому на этом этапе ничего не происходит. Весь мой текст находится в базе данных. Должен ли я создавать строковые файлы для каждого языка, который я хочу локализовать, и для каждой строки базы данных? Это очень много, чтобы синхронизировать. Если я локализую для пяти языков, это значит, что мне понадобится пять строковых файлов для каждой строки в строке базы данных (английский) справа ... так как база данных - все английское? http://developer.apple.com/iphone/library/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html#//apple_ref/doc/uid/20000005-SW1 – 4thSpace

0

мне было просто интересно то же самое и не смогли найти ни одного упоминания о том, как это было разобрано (и, следовательно, как я попал на эту должность). OTTOMH, я думал, что у вас могут быть разные базы данных для каждого поддерживаемого языка. Возможно, по-прежнему следуйте общим принципам интернационализации/локализации и создайте отдельный каталог для каждого языка поддержки, такого как en.lproj и it.lproj, а затем имя dbs как «en_data.db» и «it_data.db» (или любое другое соглашение об именах вы предпочитаете) и размещаете их в своих соответствующих каталогах. Хитрость заключается в том, чтобы затем определить язык выполнения в приложении и загрузить соответствующую базу данных для этого языка. Опять же, это всего лишь предположение, я никогда не делал этого на практике (например, я сказал, мне было интересно то же самое)