Убрать вариант с локали в Python? - PullRequest
1 голос
/ 10 апреля 2020

Когда пользователи отправляют запрос на мой сервер, они отправляют вместе с ним локаль из своего браузера, чтобы мы могли обслуживать их на языке, который они предпочитают. Для большинства пользователей US Engli sh мы получаем локаль как en-US, как и ожидалось. Однако некоторые отправляют локаль как en-US-posix или en-US-u-va-posix. Мы хотели бы просто взять версию об этом в США. Очевидно, что мы могли бы просто найти-заменить -posix и -u-va-posix, но мы также хотели бы сделать это с другими языками, не изучая каждую локаль и не принимая это решение вручную.

Так что мы действительно просто хотим раздеть вариант любой локали и получить упрощенную локаль. Проблема в том, что это не согласовано между локалями, где размещен вариант. В некоторых языках вариант встречается между языком и страной.

Мне еще предстоит найти библиотеку, которая может анализировать все типы локалей, которые мы также видим. Например, babel не распознал 120 из 555 локалей, которые мы собрали.

Нативный модуль python locale, кажется, распознает по крайней мере все локали, но я не вижу способ извлечения только языка / страны, заданный примерно как en-US-u-va-posix.

Как я могу удалить вариант из любой локали в python?

1 Ответ

0 голосов
/ 10 апреля 2020

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

import re

def get_short_locale(locale_name):
    return re.match(r'^([a-zA-Z]+-[a-zA-Z]+)(.*)$', locale_name)[1]

Это подвержено ошибкам со сложными локалями, такими как "iu-Cans-CA" и "iu-Latn-CA", но если вам нужно их поддерживать, вы можете добавить исключения пока кто-то не придет к более гибкому решению.

...