【发布时间】:2018-04-29 23:42:27
【问题描述】:
在使用 AngularJS 1.6 处理 JavaScript 项目时,我有一个要过滤的字符串列表。例如,假设我的列表包含 árbol、cigüeña、nido 和 tubo。
在过滤西班牙语字符串时,如果我过滤“u”,我希望 cigüeña 和 tubo 都会出现,这将是最自然的结果一个西班牙人。但是,在德语中情况并非如此 - u 和 ü 是不同的字母,因此德国人不会希望在列表中看到 cigüeña。所以我正在寻找一种方法让我的列表过滤了解用户的语言环境。
我碰巧有一个包含很多变音符号的对象,例如:
diacritics["á"] = "a";
diacritics["ü"] = "u";
// and so on...
这是我的过滤代码的样子:
function matches(word, search) {
var cleanWord = removeDiacritics(word.toLowerCase());
var cleanSearch = removeDiacritics(search.toLowerCase());
return cleanWord.indexOf(cleanSearch) > -1;
}
function removeDiacritics(word) {
function match(a) {
return diacritics[a] || a;
}
return text.replace(/[^\u0000-\u007E]/g, match);
}
上面的代码只是删除了所有的变音符号,所以我想让它知道用户的语言环境。因此,我将 match() 函数更改为:
function match(a) {
if (diacritics[a] && a.localeCompare(diacritics[a] === 0) {
return diacritics[a];
}
return a;
}
很遗憾,这不起作用。在将“u”和“ü”与德语和西班牙语语言环境进行比较时,localeCompare 函数返回相同的值,所以这不是这里的答案。我查看了reference for the localeCompare method 并尝试了用法和灵敏度选项,但它们在这里似乎没有太大帮助。
如何调整我的代码以使其正常工作?有没有图书馆可以为我妥善处理这个问题?
【问题讨论】:
标签: javascript angularjs internationalization