jquery - 翻译国家名称并对其进行排序

时间:2015-11-05 08:13:03

标签: javascript jquery html sorting

在用户更改页面的语言代码(通过语言选择列表)后,我使用jquery对国家/地区名称列表进行排序。这是一个相关的post

国家/地区名称的翻译似乎运作正常,但翻译后的国家/地区名称的排序(A-Z)并不常用。

我注意到,当国家/地区名称在国家/地区名称的第一个字母处有分音符/双向标记时,所述国家/地区名称将降级到列表的底部。

当英语国家/地区名称已翻译为德语时。带有分音符/双向标记的国家/地区名称最后出现。例如,国家名称Österreich(奥地利 - 英语)应按国家名称以字母O开头排序。

排序中是否有某种技巧,包括带有分音符/双向标记的单词?

以下是我的困境的一个直观例子:

enter image description here

这是我的jQuery代码:

function sortAddressTypes() {
    // sort the address country style types list (country name) in alphabetical order after language code has changed.
    var selected = $("#id_address_country_style_type").val();  // preserve the users selected value.
    var options = $('#id_address_country_style_type option');
    var arr = options.map(function(_, o) {
        return {t: $(o).text(), v: o.value};
    }).get();

    arr.sort(function(o1, o2) {
        return o1.t.toLowerCase() > o2.t.toLowerCase() ? 1 : o1.t.toLowerCase() < o2.t.toLowerCase() ? -1 : 0;
    });

    options.each(function(i, o) {
        console.log(i);
        o.value = arr[i].v;
        $(o).text(arr[i].t);
    });

    $("#id_address_country_style_type").val(selected);  // assign the preserved users selected value.
}

1 个答案:

答案 0 :(得分:2)

您可以在localeCompare()实施中使用sort()来比较包含变音符号的字符串:

arr.sort(function(o1, o2) {
    return o1.t.toLowerCase().localeCompare(o2.t.toLowerCase());
});

localCompare() reference