考慮以下情況:iPhone國際:回落到一個默認的語言
- 我們有兩個Localizable.string文件,一個在en.lproj,一個在it.lproj
- 當用戶切換到英語或意大利語,適當的本地化字符串使用NSLocalizedString(@「關鍵字」,無)
- 如果文件之一是缺少關鍵字加載,字符串是不取回
是否有任何W如果在當前語言環境的Localizable.string中找不到關鍵字,則可以使該宏從特定語言加載字符串?
考慮以下情況:iPhone國際:回落到一個默認的語言
是否有任何W如果在當前語言環境的Localizable.string中找不到關鍵字,則可以使該宏從特定語言加載字符串?
NSLocalizedStringWithDefaultValue
功能可能是你所需要的 - 使用它,你可以指定默認情況下值,如果定位未找到一個給定的關鍵。
通過提供NSLocalizedString函數的第二個參數,你可以指定哪些將被使用,如果關鍵字未在Localizable.string發現了一個字符串。
這是你想要的嗎?
這第二個參數是一個評論,它作爲譯者 – 2010-04-15 15:07:54
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
我在想宏。這就是答案提到的。 – 2010-04-19 14:54:35
我遇到了同樣的問題。我雖然它會使用開發語言字符串文件中的字符串,如果它找不到用戶的語言本地化的字符串,但顯然不是。
我結束了創建我自己的函數用於獲取一個本地化的字符串。
@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,或類似的規定宏。
這是一個很好的解決方案,正是我即將實施的內容。感謝代碼! – 2013-02-27 13:07:05
的確我可以。唯一的參數是:1)默認值不能與文檔所說的unicode相同,2)然後我會將所有「其他」語言環境在Localizable文件中很好地分開,並且一個「默認」語言環境在整個代碼中以瘋狂的方式傳播。我希望能有更優雅的解決方案 – 2010-04-15 15:07:28
這並不理想,但仍然可行。我會認爲它被接受。 – 2010-04-16 09:21:47