2011-01-27 54 views
29

是否有可能有一个有自己独立的本地化在应用中的多个组件?多个Localizable.strings文件

比如我要本地化字符串在我的应用程序,而且使用的是本地化的本身(所以我的包将包含2个Localizable.strings在不同的位置)ShareKit。 所以,ShareKit包含像en.lproj和de.lproj包含Localizable.strings文件,我想创建为我的项目的其他部分一样,但让他们单独的文件夹。

我曾尝试只是让他们分开,并且导致我的应用程序的未使用的字符串。有任何想法吗?

回答

73

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

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

  1. 字符串如果使用表名本地化
  2. 表名,这仅仅是一个文件名
  3. 的评论,就像在NSLocalizedString()

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

请参阅Matt Gallagher的recent post

0

每个文件/资源​​都可以本地化,也可以是IB .xib文件或图像jpg/png, 您只需在项目中选择一个文件,打开信息,进入“常规”选项卡/部分并按“使文件本地化” ...... 那么你可以添加任何你想要的语言时,Xcode将创建一个新的文件复制的第一个,并把它放在正确的文件夹...

卢卡

+0

但是“正确的文件夹”是什么意思?在我的情况下,我想有2个文件具有相同的名称(“Localizable.strings”),我想知道这可以如何工作。 – Dimitris 2011-01-27 00:38:47

+0

好吧,好消息是你不必担心这个......我的意思是:如果你现在只有一个名为“Localizable.strings”的单个文件,就试着按照我所说的去做(select它打开信息,进入“常规”选项卡,按下“make file localizable”按钮,在新打开的窗口中选择常规选项卡并按下“添加本地化”按钮,然后为该文件选择一种新的语言) ...当你这样做xCode创建“正确的文件夹”为您移动英文文件中的旧文件“Localizable.strings”和意大利文(或其他)的新(重复)文件,所以只需编辑它 – meronix 2011-01-27 07:07:34

+0

但我想要两个:)这就是这个问题的要点。 – Dimitris 2011-01-27 23:40:12

0

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

然后你可以考虑创建你自己的“字典”文件,并尝试本地化它,然后读取它并把它放在一个NSDictionary,你可以读取单个单词/值... 你可以插入一条记录你的文件“myDict.plist”与关键字String类型的“问候语”与价值“侨”为意大利之一,在“你好”的英文一个

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 阅读注释过...

1

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

我知道你不想编辑ShareKit Localizable.strings文件,因为更新时将是一个痛苦,但我认为你需要看看会是多少工作实际需要。根据您需要多少种语言支持它可能不太本地化自己的字符串,并将其添加到ShareKit Localizable.strings文件的底部比实现自己的本地化方案的工作。

BTW,来检测一下语言设备当前设置为可以使用:

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

这给你两个字母的语言代码字符串数组。索引0处的项目是当前选择的语言。如果您需要根据语言逻辑的决定,这可能是有帮助的。

相关问题