locale doesn't preserve territory and doesn't do error handling

Open
#3,279 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
python
Domain
localization

Research direction

Start in locale.py and reproduce the Accept-Language examples for de, de-DE, de_DE, and de_DE-foo. Trace how locale codes are normalized and validated. Done means supported locales retain the requested territory where applicable, while invalid locale requests produce a real exception instead of an assertion failure.

Written by the indexing model from the issue text.

Description

locale
>>> import tornado.locale
>>> tornado.locale.load_gettext_translations('/usr/share/locale', 'foo')

>>> tornado.locale.get('de').code
'de'
>>> tornado.locale.get('de_DE').code
'de'
>>> tornado.locale.get('de-DE').code
'de'
>>> tornado.locale.get('de-DE').__dict__.keys()
dict_keys(['ngettext', 'gettext', 'code', 'name', 'rtl', 'translations', '_months', '_weekdays'])

→ there is no territory information stored. Please store it additionally.
I provide a de locale directory which is valid for de-DE and de-AT. I want to pass the exact value back which the client provided in the Accept-Language header.

>>> tornado.locale.get('de')
<tornado.locale.GettextLocale object at 0x7f4adae9ca58>
>>> tornado.locale.get('de-DE')
<tornado.locale.GettextLocale object at 0x7f4adae9ca58>
>>> tornado.locale.get('de_DE')
<tornado.locale.GettextLocale object at 0x7f4adae9ca58>
>>> tornado.locale.get('de_DE-foo')
<tornado.locale.CSVLocale object at 0x7f4ade726e80>

→ why doesn't this raise some exception?

see also #1955 and #1858

Edit: there is some assertion error. Maybe this can also be changed into a real exception?

>>> tornado.locale.Locale.get('en_US')
<tornado.locale.CSVLocale object at 0x7f333cc632e8>
>>> tornado.locale.Locale.get('en')                                                                                                                                                                                                           
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/tornado/locale.py", line 264, in get
    assert code in _supported_locales
AssertionError
Dominant language
Python
Stars
22.2k
Forks
5.6k
Avg merge
3h 42m
Merged PRs (30d)
16

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from tornadoweb/tornado

All issues in tornadoweb/tornado

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.