2010-04-15 42 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