一个iOS应用程序中的多个Localizable.strings文件
是否有可能有多个组件在应用程序中具有单独的本地化?
例如,我想本地化我的应用程序中的string,但也使用本地化的ShareKit(所以我的包将包含2个Localizable.strings在不同的位置)。 因此,ShareKit包含像en.lproj和de.lproj这样的包含Localizable.strings文件的文件夹,我想为我的项目的其余部分创build相同的文件夹,但是保持它们分开。
我试图把他们分开,导致我的应用程序的string不被使用。 有任何想法吗?
有一种方法可以做到这一点很简单。
有几个本地化的macros,其中之一是NSLocalizedStringFromTable()
。 这需要三个参数:
- 要本地化的string
- 表名,这只是一个文件名
- 评论,就像在
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也阅读评论…