2009-08-11 52 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中。诀窍是在应用程序中检测运行时语言并为该语言加载适当的数据库。再次,这只是一个猜测,我从来没有在实践中做过(就像我说过的,我想知道同样的事情)