2009-08-11 65 views
1

數據庫中的文本如何針對iPhone進行本地化?我見過的例子在.m文件或​​.xib文件中有硬編碼的字符串。例如:iPhone本地化與SQLite?

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

如果您需要本地化的字符串是在數據庫中會發生什麼?我還沒有找到這種類型的本地化的討論。不過,我認爲這是非常普遍的,因爲許多iPhone應用程序使用sqlite。

回答

2

NSLocalizedString是一個簡單的預處理宏,變成以NSBundlelocalizedStringForKey:value:table:呼叫 - 所以基本上你可以在運行時使用的,而不是硬編碼字符串,字符串獲取並傳遞到一個NSBundle。不利的一面是,沒有快速的方法來編譯翻譯器需要本地化的所有字符串列表。

例子:

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

你能給出一個你所指的內容的代碼示例嗎? – 4thSpace 2009-08-11 14:15:05

+0

編輯的答案 - 那是怎麼回事? – 2009-08-11 15:02:42

+0

我還沒有創建任何額外的資源文件,所以在這一點上什麼都沒有發生。我所有的文本都在數據庫中。我應該爲每個我想要本地化的語言和每個數據庫行創建字符串文件嗎?這是很多東西保持同步。如果我本地化五種語言,這意味着我將需要每個數據庫(英文)行條目右側的五個字符串文件...因爲數據庫全部是英文的? http://developer.apple.com/iphone/library/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html#//apple_ref/doc/uid/20000005-SW1 – 4thSpace 2009-08-17 05:24:36

0

我只是想知道同樣的事情,再也找不到這是如何處理(因此我是如何結束這個帖子)任何提及。 OTTOMH,我認爲你可能對每種支持的語言只有不同的數據庫。也許仍然遵循一般的國際化/本地化準則,併爲每個支持語言(例如en.lproj和it.lproj)創建一個單獨的目錄,然後將dbs命名爲「en_data.db」和「it_data.db」(或任何命名約定你更喜歡),並將它們放在各自的dirs中。訣竅是在應用程序中檢測運行時語言併爲該語言加載適當的數據庫。再次,這只是一個猜測,我從來沒有在實踐中做過(就像我說過的,我想知道同樣的事情)