При работе над проектом JavaScript с AngularJS 1.6 у меня есть список строк, которые я хотел бы фильтровать. Например, предположим, что мой список содержит раббол, сиганю, нидо и тубо.
При фильтрации строк на испанском языке, если бы я отфильтровал "u", я ожидал появления как сигаью, так и тубо, что было бы самым естественным результатом для испанца. Однако это не так на немецком языке - u и ü - разные буквы, и, таким образом, немецкий не захочет видеть сигареты в списке. Поэтому я ищу способ настроить фильтрацию списка в пользовательской локали.
У меня есть объект, содержащий множество диакритических знаков, например:
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;
}
К сожалению, это не работает. Функция localeCompare возвращает те же значения при сравнении "u" и "ü" с немецкими и испанскими локалями, так что это не был ответ здесь. Я просмотрел ссылку для метода localeCompare и попробовал варианты использования и чувствительности, но они, похоже, не помогают здесь.
Как я могу настроить мой код для этого? Есть ли библиотека, которая может справиться с этим правильно для меня?