NSLocalizedString没有默认为基本语言
我在测试本地化功能的小型iOS 7项目中遇到以下问题。NSLocalizedString没有默认为基本语言
- 我有一个默认的项目,一个VC,其中我在现场
- 在我的VC中间的一个按钮,我有一个IBOutlet我在viewDidLoad方法称为myButton的
- 按钮在VC的我设置的按钮的标题:
NSString *title = NSLocalizedString(@"MY_BUTTON", @"My comment for my button");
[self.myButton setTitle:title forState:UIControlStateNormal];
- 我产生Localizable.strings文件结束启用了本地化以下语言:基本,荷兰
- 每个文件的内容如下:
/*我的意见; VALUE = Base,荷兰语;所以标签应该是我的基本按钮&我的荷兰按钮
问题: 如果我使用模拟器的语言作为荷兰语启动我的应用程序,标签是(如预期)“我的荷兰按钮”。如果我用英语启动它,标签是“我的基本按钮”(某种可以...)
但是,如果我用手机的语言设置为法语启动它,并且我以前将它设置为荷兰语,则标签的按钮不会默认为Base,而是会再次显示“我的荷兰按钮”
对此有何看法?
感谢
默认语言的顺序是OSX和iOS
用户设置不可编辑的(据我所知),但仍坚持!
该应用程序传递指定要尝试的语言的数组AppleLanguages(或如此..)。该NSLocalizedString宏将尝试,直到找到一个正在运行的加载顺序排列它们出现每种语言,然后使用该
比较:How to force NSLocalizedString to use a specific language
从iOS 8开始,用户首选语言列表是可编辑的。 – ThomasW
我已经创建了下面的类,它支持回退到一种可定制的语言。在我的情况下,我使用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");
我在斯威夫特的equivalent:
public func LS(_ key: String) -> String {
let value = NSLocalizedString(key, comment: "")
if value != key || NSLocale.preferredLanguages.first == "en" {
return value
}
// Fall back to en
guard
let path = Bundle.main.path(forResource: "en", ofType: "lproj"),
let bundle = Bundle(path: path)
else { return value }
return NSLocalizedString(key, bundle: bundle, comment: "")
}
是否设置为Localizable.strings文件的法国人也? –
在Mac上,可以设置语言顺序,也许顺序在iOS上也起作用,并且由于语言顺序的设置,它是法语,荷兰语,英语吗? – Volker
法语的没有Localizable.strings。我只想支持英语和瑞典语,对于除这两种语言以外的语言的设备,我希望应用程序以Base(英语)显示 – tufyx