Когда первый accept-language браузера — `zh-HK`, язык интерфейса по умолчанию указан неверно

В настоящее время в Discourse поддерживаются локализации на традиционный китайский (zh_TW) и упрощённый китайский (zh_CN). Однако, когда в браузере первым указан язык zh-HK, Discourse ошибочно выбирает в качестве языка по умолчанию zh_CN.

Большинство пользователей из Тайваня (zh-TW), Гонконга (zh-HK) и Макао (zh-MO) предпочитают традиционный китайский, поэтому для этих значений accept-language Discourse должен выбирать zh_TW в качестве языка по умолчанию. (Технически также можно использовать информацию из Unicode CLDR likely subtags, но для китайского языка это будет излишним усложнением.)

Также хочу отметить, что наличие пунктов “中文” и “中文 (TW)” в списке выбора языка выглядит крайне странно. Вместо этого для упрощённого китайского должно быть указано “简体中文”, а для традиционного — “正體中文”.

5 лайков

Это абсолютно верно. Вот PR для изменения:

(В Twitter используется 繁體 вместо 正體, поэтому я последовал их примеру.)

Это всё, что нужно изменить, @gerhard?

5 лайков

Чтобы решить проблему, указанную в заголовке, «правильным» вариантом было бы использование кодов zh-Hans и zh-Hant, однако браузеры предлагают разные наборы вариантов.

Chrome:

Firefox:

В Safari я не нашёл способа выбрать язык, поэтому, вероятно, он всегда использует системные настройки? Это потенциально включает все следующие варианты:


Документация указывает, что с macOS возможен языковой код вида zh-Hans_HK. Интересно, передаётся ли такой код в браузер.

1 лайк

В сообществе тайваньских разработчиков свободного ПО (FOSS) для локализации предпочтение отдаётся термину «正體», но меня не смущает ни один из вариантов.

Если у вас всего два варианта, код в основном имеет косметическое значение. Часто, даже когда название гласит «Chinese (Traditional)», в основе всё ещё используется zh_TW. В любом случае вам всё равно придётся обрабатывать оба варианта тегов языка, отправляемых браузерами: language-region и language-script-region. Насколько мне известно, Firefox на Android отправляет заголовок accept-language с значением zh-Hant-HK в зависимости от настроек системной локали Android.

2 лайка