我们有以下代码来检索用户语言首选项:
language
在iOS 8.4之前,language
是“zh-Hans”,“de”,“ru”,“ja”等等。但是从iOS 9开始,我注意到还有三个字符“-US”附加到NSRange range = [language rangeOfString:@"-US"];
if (range.location!=NSNotFound && language.length==range.location+3) {
// If the last 3 chars are "-US", remove it
language = [language substringToIndex:range.location];
}
。例如,“zh-Hans”变成“zh-Hans-US”
我可以找到有关此更改的任何文档。我假设我可以执行以下操作来解决此问题。
matrix1 = LOAD 'mat1' AS (row,col,value);
matrix2 = LOAD 'mat2' AS (row,col,value);
mult_mat = COGROUP matrix1 BY row, matrix2 BY col;
mult_mat = FOREACH mult_mat {
A = COGROUP matrix1 BY col, matrix2 BY row;
B = FOREACH A GENERATE group AS col, matrix1.value*matrix2.value AS prod;
GENERATE group AS row, B.col AS col, SUM(B.prod) AS value;}
但是,我不确定这样做是否安全。似乎“-US”是用户使用该应用程序的位置?但这并不合理,因为我们在加拿大。来自世界其他地方的任何人都试过这个吗?
答案 0 :(得分:4)
Apple已经开始在iOS 9中的语言区域设置中添加区域。根据Apple的文档,如果没有指定区域,它现在具有回退机制。如果你只需要支持一些语言,按照Apple的文档建议,我就是这样解决的:
NSArray<NSString *> *availableLanguages = @[@"en", @"es", @"de", @"ru", @"zh-Hans", @"ja", @"pt"];
self.currentLanguage = [[[NSBundle preferredLocalizationsFromArray:availableLanguages] firstObject] mutableCopy];
这将根据用户的语言设置自动分配阵列中的一种语言,而不必担心区域。
答案 1 :(得分:2)
要提取该区域,我认为这是一个更好的解决方案:
// Format is Lang - Region
NSString *fullString = [[NSLocale preferredLanguages] firstObject];
NSMutableArray *langAndRegion = [NSMutableArray arrayWithArray:[fullString componentsSeparatedByString:@"-"]];
// Region is the last item
NSString *region = [langAndRegion objectAtIndex:langAndRegion.count - 1];
// We remove region
[langAndRegion removeLastObject];
// We recreate array with the lang
NSString *lang = [langAndRegion componentsJoinedByString:@"-"];
答案 2 :(得分:0)
快捷键5:从首选语言中删除区域
使用Locale.preferredLanguages.first
为您提供了首选的应用程序语言(可以与用户的设备语言不同)。
为了支持脚本代码和语言代码(但要删除区域代码),我认为最好在给定首选语言的情况下创建语言环境,然后从那里获取我们所需的信息。
if let pref = Locale.preferredLanguages.first {
let locale = Locale(identifier: pref)
let code = [locale.languageCode, locale.scriptCode].compactMap{$0}.joined(separator: "-")
print(code)
}
因此,首先我们获得了首选的应用程序语言,然后从该语言创建语言环境。
要获取语言代码,我们使用locale.languageCode
和locale.scriptCode
(可能为nil)创建一个数组,使用compactMap删除所有nil值,然后将这些值与“-”连接。 / p>
这应该允许支持简体中文和繁体中文,并让Apple处理该地区,而不是假定它将一直存在。