Когда использовать имя локали, а когда код языка в Django?

Согласно Django Documentation:

название локали

Имя локали, либо спецификация языка в форме ll, либо комбинированная спецификация языка и страны в форме ll_CC. Примеры: it, de_AT, es, pt_BR. Языковая часть всегда пишется строчными буквами, а страна — прописными. Разделитель — это подчеркивание.

код языка

Представляет название языка. Браузеры отправляют названия языков, которые они принимают, в HTTP-заголовке Accept-Language, используя этот формат. Примеры: it, de-at, es, pt-br. Коды языков обычно представлены строчными буквами, но заголовок HTTP Accept-Language нечувствителен к регистру. Разделитель — тире.

Вопросы:

  1. Когда я вижу it или es в чьем-то коде, как я могу определить, является ли это названием локали или кодом языка?
  2. Когда мы должны использовать код локали, а когда — код языка?

person nalzok    schedule 12.05.2017    source источник


Ответы (1)


Коды локали понимаются вызовом setlocale(3) и настраивают локализацию нескольких известных форматов, таких как даты, время и валюта, а также язык сообщений об ошибках. Доступные локали зависят от платформы и системы.

Языковой код основан на локали, но используется в сетевой коммуникации. На практике вы должны иметь дело с языковыми кодами на уровне запроса и ответа и кодом локали в приложении, но различие не является строгим, поскольку они решают одну и ту же проблему: локализацию и интернационализацию.

Показательный пример: Django устанавливает язык на основе заголовка Accept-Language, который использует формат кода языка, а затем соответствующим образом устанавливает локаль для приложения, таким образом выбирая код локали, соответствующий коду языка.

Поэтому можно с уверенностью сказать, что коды языков являются форматом сериализации кодов локалей:

nl_NL.ISO-8859-15 сериализуется в Accept-language: nl-NL + Accept-Charset: iso-8859-15. Важно использовать правильную форму при правильных обстоятельствах, но значение es всегда равно Spanish, независимо от происхождения.

person Melvyn    schedule 01.12.2020