2013-03-24 127 views
4

我想本地化我的iPhone應用程序中的幾個字符串,它對我選擇的5種語言至今都起作用。然而,我有一個問題,如果我沒有定義特定語言的關鍵字,我希望它選擇英語作爲後備,因爲我知道我已經定義了每個字符串的英文。問題是,所有鍵都被翻譯並不是很重要,例如,即使iPhone設置爲西班牙語,也可以顯示英語。本地化後備語言

例子:

EN:

"HELLO" = "hello" ; 
"PERSON" = "my friend" ; 

ES:

"HELLO" = "hola" ; 

預期的結果:

如果iPhone設置爲英語我希望它說:hello, my friend,如果languange設置爲西班牙語,我希望它說hola, my friend。目前該應用程序將輸出hola, PERSON。 (我使用NSLocalizedString方法)。

有可能是一個非常簡單的解決方案,但我找不到任何好的。 感謝您的幫助,

馬蒂亞斯

+1

通常的方式做到這一點會是'NSLocalizedStringWithDefaultValue()'。 – mrueg 2013-03-24 12:56:59

回答

7

其他答案是絕對正確的,但它不完全是我想要的。相反,我發現了另一種方式來做到這一點,並寫道,在我的環境完美的作品對我來說是靜態的方法,我想,如果別人想acheive同樣的事情在這裏添加:

+ (NSString *)localizedStringForKey:(NSString *)key table:(NSString *)table 
{ 
    NSString *str = [[NSBundle mainBundle] localizedStringForKey:key value:@"NA" table:table]; 
    if ([str isEqualToString:@"NA"]) 
    { 
     NSString *enPath = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
     return [[NSBundle bundleWithPath:enPath] localizedStringForKey:key value:@"NA" table:table]; 
    } 

    return str; 
} 
4

功能NSLocalizedStringdocumentation說:

返回值

調用localizedStringForKey結果:值:表:主捆綁和一個無表。

localizedStringForKey:value:table:says

返回值

在TABLE表名鍵指定的字符串的本地化版本。如果值爲nil或空字符串,並且表中未找到本地化字符串,則返回鍵。如果鍵和值都是nil,則返回空字符串。

所以你必須本地化爲所有語言的字符串或更改key您使用

1

簡單的解決方法是使用英文文本作爲關鍵字的值。例如:

[NSString stringWithFormat:NSLocalizedString(@"%@, %@", "format for greeting"), 
          NSLocalizedString(@"Hello", "salutation"), 
          NSLocalizedString(@"my friend", "person")] 

如果沒有本地化版本的字符串,則使用英文鍵。