是否可以让多个组件在应用程序中具有单独的本地化?
例如,我想在我的应用程序中本地化字符串,但也使用本地化的ShareKit(因此我的包将在不同位置包含2个Localizable.strings)。 所以,ShareKit包含像en.lproj和de.lproj这样的文件夹,它们包含Localizable.strings文件,我想为我的项目的其余部分创建相同的内容,但要将它们分开。
我试过将它们分开,这导致我的应用程序的字符串没有被使用。有什么想法吗?
答案 0 :(得分:83)
有一种方法可以做到这一点非常简单。
有几个用于本地化的宏,其中一个是NSLocalizedStringFromTable()
。这需要三个参数:
NSLocalizedString()
如果您使用表名,那么您可以拥有另一个字符串文件,即如果我NSLocalizedStringFromTable(@"name", @"MyStrings", @"whatever");
,则将我的字符串放在MyStrings.strings
中,它将使用该字符串。
见Matt Gallagher的post关于此事。
答案 1 :(得分:0)
每个文件/资源都可以本地化,也可以是IB .xib文件或图像jpg / png, 你只需要在你的项目中选择一个文件,打开信息,进入“常规”选项卡/部分,然后按“make file localizable”...... 然后你可以添加你想要的任何语言,xCode将创建一个复制第一个文件的新文件,并将其放在正确的文件夹中...
卢卡
答案 2 :(得分:0)
那么您可以考虑创建自己的“字典”文件并尝试对其进行本地化,然后将其读取并放入NSDictionary中,您可以在其中读取单个单词/值... 您可以在文件“myDict.plist”中插入一条记录,其中键入的“问候”类型为String,其值为“ciao”,意大利语为“hallo”,英语为“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 阅读评论......
答案 3 :(得分:0)
不可能按照你的要求去做。您可以拥有多个Localizable.strings文件,但在各自的.lproj文件夹中只能使用一种语言。
我知道您不想编辑ShareKit Localizable.strings文件,因为在更新时会很麻烦,但我认为您需要查看它实际需要做多少工作。根据您需要支持的语言数量,本地化您自己的字符串并将它们添加到ShareKit Localizable.strings文件的底部可能比实现您自己的本地化方案更少。
顺便说一句,要检测设备当前设置的语言,您可以使用:
NSArray *preferedLocalizations = [[NSBundle mainBundle] preferredLocalizations];
这为您提供了两个字母的语言代码字符串数组。索引0处的项目是当前选择的语言。如果您需要根据语言做出逻辑决策,这可能会有所帮助。