我在iOS 7项目中遇到以下问题,我正在测试本地化功能。
NSString *title = NSLocalizedString(@"MY_BUTTON", @"My comment for my button");
[self.myButton setTitle:title forState:UIControlStateNormal];
/ *我的按钮评论* / “MY_BUTTON”=“我的[VALUE]按钮”;其中VALUE = Base,Dutch;所以标签应该是我的基本按钮&我的荷兰按钮
问题: 如果我使用模拟器的语言作为荷兰语启动我的应用程序,标签是(按预期)“我的荷兰按钮”。如果我用英文启动它,标签是“我的基本按钮”(有点好......)
但是,如果我将手机的语言设置为法语启动它,而我之前将其设置为荷兰语,则按钮的标签不会默认为Base,而是再次显示“My Dutch Button”
对此有何想法?
由于
答案 0 :(得分:4)
默认语言的顺序是OSX上的用户设置,而不是iOS上的可编辑(AFAIK) 但仍坚持!
应用程序传递AppleLanguages(或左右)数组,指定要尝试的语言。 NSLocalizedString宏将尝试按照它们出现的顺序加载数组中的每种语言。直到它找到一个工作的语言然后它使用它
比较:How to force NSLocalizedString to use a specific language
答案 1 :(得分:3)
我创建了以下类,它支持回退到可自定义的语言。在我的情况下,我使用 Base.lproj 作为我的默认语言内容的文件。
<强> StringUtilities.h 强>
@interface StringUtils : NSObject
#define GetLocalizedString(key) [StringUtils getLocalizedString:key comment:nil]
//#define GetLocalizedString(key,comment) [StringUtils getLocalizedString:key comment:comment]
+ (NSString*) getLocalizedString:(NSString*)key comment:(NSString*)comment;
@end
<强> StringUtilities.m 强>
#import "StringUtilities.h"
@implementation StringUtils
//Returns a localized string, with fallback to version of Base
+ (NSString*) getLocalizedString:(NSString*)key comment:(NSString*)comment {
NSString* localizedString = NSLocalizedString(key, nil);
//use base language if current language setting on device does not find a proper value
if([localizedString isEqualToString:key]) {
NSString * path = [[NSBundle mainBundle] pathForResource:@"Base" ofType:@"lproj"];
NSBundle * bundle = nil;
if(path == nil){
bundle = [NSBundle mainBundle];
}else{
bundle = [NSBundle bundleWithPath:path];
}
localizedString = [bundle localizedStringForKey:key value:comment table:nil];
}
return localizedString;
}
@end
如何使用
导入头文件并使用GetLocalizedString
宏而不是NSLocalizedString
宏。
#import "StringUtilities.h"
NSString* str = GetLocalizedString(@"your.text.key");
答案 2 :(得分:0)
我在Swift中有一个equivalent:
X_train = (27367, 64, 64, 1)
X_test = (4553, 64, 64, 1)
y_train = (164202, 11)
y_test = (27318, 11)
答案 3 :(得分:0)
在这里使用Dirk的答案是在字符串扩展中实现为计算属性的Swift等效项:
extension String {
var localized: String {
var localizedString = NSLocalizedString(self, comment: "")
// If a localized string was found then return it.
// This check is based on the fact that if no localized string
// exists then NSLocalized() returns the key itself.
if self != localizedString {
return localizedString
}
// No localized string exists. Retrieve the display string
// from the base strings file.
var bundleForString: Bundle
if let path = Bundle.main.path(forResource: "Base", ofType: "lproj"),
let bundle = Bundle(path: path) {
bundleForString = bundle
} else {
bundleForString = Bundle.main
}
localizedString = bundleForString.localizedString(forKey: self, value: self, table: nil)
return localizedString
}
}