2010-04-15 43 views
1

考慮以下情況:iPhone國際:回落到一個默認的語言

  • 我們有兩個Localizable.string文件,一個在en.lproj,一個在it.lproj
  • 當用戶切換到英語或意大利語,適當的本地化字符串使用NSLocalizedString(@「關鍵字」,無)
  • 如果文件之一是缺少關鍵字加載,字符串是不取回

是否有任何W如果在當前語言環境的Localizable.string中找不到關鍵字,則可以使該宏從特定語言加載字符串?

回答

1

NSLocalizedStringWithDefaultValue功能可能是你所需要的 - 使用它,你可以指定默認情況下值,如果定位未找到一個給定的關鍵。

+0

的確我可以。唯一的參數是:1)默認值不能與文檔所說的unicode相同,2)然後我會將所有「其他」語言環境在Localizable文件中很好地分開,並且一個「默認」語言環境在整個代碼中以瘋狂的方式傳播。我希望能有更優雅的解決方案 – 2010-04-15 15:07:28

+0

這並不理想,但仍然可行。我會認爲它被接受。 – 2010-04-16 09:21:47

0

通過提供NSLocalizedString函數的第二個參數,你可以指定哪些將被使用,如果關鍵字未在Localizable.string發現了一個字符串。

這是你想要的嗎?

+0

這第二個參數是一個評論,它作爲譯者 – 2010-04-15 15:07:54

+0

MihaiD你所想LocalizedString宏之一的暗示。 實際LocalizedString方法的第二個參數_is_是如果關鍵字找不到的默認值 http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/ Reference/Reference.html#// apple_ref/occ/instm/NSBundle/localizedStringForKey:value:table: – Conceptdev 2010-04-19 09:52:16

+1

我在想宏。這就是答案提到的。 – 2010-04-19 14:54:35

1

我遇到了同樣的問題。我雖然它會使用開發語言字符串文件中的字符串,如果它找不到用戶的語言本地化的字符串,但顯然不是。

我結束了創建我自己的函數用於獲取一個本地化的字符串。

@interface Localization : NSObject { 
    NSBundle* fallbackBundle; 
} 

- (NSString*) localizedStringForKey:(NSString*)key; 

@end 


@implementation Localization 

- (id)init { 
    if (self = [super init]) { 
     NSString *path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
     fallbackBundle = [[NSBundle bundleWithPath:path] retain]; 
    } 
    return self; 
} 

- (void)dealloc { 
    [fallbackBundle release]; 
    [super dealloc]; 
} 

- (NSString*) localizedStringForKey:(NSString*)key { 
    NSString* result = [[NSBundle mainBundle] localizedStringForKey:key value:@"!#€NOTFOUND%&/" table:nil]; 
    if (result == nil || [result isEqualToString:@"!#€NOTFOUND%&/"]) { 
     result = [fallbackBundle localizedStringForKey:key value:nil table:nil]; 
    } 
    if (result == nil) { 
     result = key; 
    } 
    return result; 
} 

@end 

可以使這個獨立的,並具有類似NSLocalizedString如果你會調用localizedStringForKey,或類似的規定宏。

+0

這是一個很好的解決方案,正是我即將實施的內容。感謝代碼! – 2013-02-27 13:07:05