一个iOS应用程序中的多个Localizable.strings文件

是否有可能有多个组件在应用程序中具有单独的本地化?

例如,我想本地化我的应用程序中的string,但也使用本地化的ShareKit(所以我的包将包含2个Localizable.strings在不同的位置)。 因此,ShareKit包含像en.lproj和de.lproj这样的包含Localizable.strings文件的文件夹,我想为我的项目的其余部分创build相同的文件夹,但是保持它们分开。

我试图把他们分开,导致我的应用程序的string不被使用。 有任何想法吗?

有一种方法可以做到这一点很简单。

有几个本地化的macros,其中之一是NSLocalizedStringFromTable() 。 这需要三个参数:

  1. 要本地化的string
  2. 表名,这只是一个文件名
  3. 评论,就像在NSLocalizedString()

如果你使用表名,那么你可以有另一个string文件,即如果我做NSLocalizedStringFromTable(@"name", @"MyStrings", @"whatever"); 然后把我的string在MyStrings.strings它将使用它。

看到马特·加拉格尔最近的post 。

这是不可能做你在问什么。 您可以具有多个Localizable.strings文件,但在其各自的.lproj文件夹中只有一种语言。

我知道你不想编辑ShareKit Localizable.strings文件,因为更新时会很痛苦,但是我认为你需要看看实际需要多less工作。 根据您需要支持的语言数量,本地化您自己的string并将其添加到ShareKit Localizable.strings文件的底部可能比实现您自己的本地化scheme要less。

顺便说一句,要检测设备当前设置的语言可以使用:

 NSArray *preferedLocalizations = [[NSBundle mainBundle] preferredLocalizations]; 

这给你一个两个字母的语言代码string的数组。 索引0处的项目是当前select的语言。 如果您需要根据语言做出逻辑决策,这可能会有所帮助。

每个文件/资源​​都可以本地化,也就是IB .xib文件或者图片jpg / png,你只需要在你的项目中select一个文件,打开info,进入“常规”选项卡/部分,然后按“make file localizable “…然后你可以添加你想要的任何语言,xCode将创build一个新的文件复制第一个,并将其放在正确的文件夹…

卢卡

哦,好吧,我不知道ShareKit,但我想你不能编辑它的文本文件,只是把你的新单词添加到该文件,不是吗?

那么你可以考虑创build自己的“字典”文件,并尝试本地化,然后阅读并放在一个NSDictionary,你可以读取单个单词/值…你可以插入一个logging在你的文件“myDict。 plist“,其中意大利语为”ciao“的string为”greeting“,英文字母为”hallo“

 NSString *bundle = [[ NSBundle mainBundle] pathForResource:@"myDict" ofType:@"plist"]; NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile:bundle]; NSString *greetingsTranslatedInTheGoodLanguage = [savedStock objectForKey:@"greeting"]; // just to try what you have read: NSLog (@"translated by your own dictionary: %@", greetingsTranslatedInTheGoodLanguage); [savedStock release]; 

卢卡

PS也阅读评论…