2011-06-10 16 views
15

我需要發送我的服務器本地化的列表特定字符串。iPhone/iOS版:我怎樣才能在我的應用程序本地化的所有語言的本地化字符串列表?

意義,如果我的應用程序有一個字符串富被定位爲在俄羅斯的英文@「foo」和@「Фу」,我想向服務器發送一個列表,諸如這樣的:

  • 字符串富:
    • 英語: 「富」
    • 俄羅斯: 「Фу」

我想我需要能夠做的是:

  1. 我的應用程序本地化爲
  2. 獲取foo的本地化版本爲每種語言每種語言枚舉本地化字符串

我該怎麼辦(1),我該怎麼辦(2)?

+0

你看過'NSLocalizedStringFromTable'嗎? http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html%23//apple_ref/c/macro/NSLocalizedStringFromTableInBundle – joshpaul 2011-06-10 18:55:43

+1

從表似乎是一個分隔字符串的方式,而不是將它們全部保存在一個默認表中。這不是我想要的。我想獲得特定字符串的所有不同的本地化。 – 2011-06-12 20:12:09

回答

31

您可以通過English.lproj/Localizable.strings閱讀作爲字典和獲取它的鍵檢索的所有字符串鍵:

NSString *stringsPath = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings"]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:stringsPath]; 

要獲得每一種語言的翻譯,你可以在語言的迭代每個英文鍵和使用NSLocalizedStringFromTableInBundle

for (NSString *language in [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]) { 
    NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]]; 
    NSLog(@"%@: %@", language, NSLocalizedStringFromTableInBundle(@"Testing", @"Localizable", bundle, nil)); 
} 
+0

這聽起來很合理;我看到所需的其他選項改寫我們檢索串的方式,但這種方式是微創,看起來像它做什麼,我需要的。我今天會嘗試。 – 2011-06-24 16:39:05

+0

幫我太:) – Swati 2012-09-06 09:03:19

+2

注意,代碼樣本中'pathForResource'第一次調用上面將返回路徑,*電流*本地化,不一定是英語一個(例如,如果你的模擬器/設備設置爲德語,你將得到的路徑'de.lproj/Localizable.strings')。 – Alessandro 2013-03-29 12:24:57

相關問題