Issue 33189: pygettext doesn't work with f-strings (original) (raw)

Created on 2018-03-30 20:25 by Riccardo Polignieri, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (8)

msg314712 - (view)

Author: Riccardo Polignieri (Riccardo Polignieri)

Date: 2018-03-30 20:25

Tested (on windows) with python 3.6, but I guess it's the same in py3.7:

test.py

def hello(x): print(_(f'hello {x}'))

py pygettext.py test.py Traceback (most recent call last): File "C:\Program Files\Python36\Tools\i18n\pygettext.py", line 623, in if name == 'main': File "C:\Program Files\Python36\Tools\i18n\pygettext.py", line 597, in main for _token in tokens: File "C:\Program Files\Python36\Tools\i18n\pygettext.py", line 328, in call ## 'tstring:', tstring File "C:\Program Files\Python36\Tools\i18n\pygettext.py", line 382, in __openseen elif ttype == tokenize.STRING: File "C:\Program Files\Python36\Tools\i18n\pygettext.py", line 236, in safe_eval # unwrap quotes, safely File "", line 1, in NameError: name 'x' is not defined

msg314776 - (view)

Author: Stefan Behnel (scoder) * (Python committer)

Date: 2018-04-01 15:05

Is there really a use case for this?

I would normally expect place holders to get replaced after translation, i.e. in the translated text, not before.

msg314780 - (view)

Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer)

Date: 2018-04-01 16:45

I agree that pygettext should not and can not support f-strings, but the error should be better. The problem is that an f-string expression is tokenized as literal strings, but eval() can't evaluate it out of context.

msg314878 - (view)

Author: Riccardo Polignieri (Riccardo Polignieri)

Date: 2018-04-03 11:39

the error should be better

Yes, that's what I maeant - sorry I should have phrased better. I marked by mistake a couple of f-strings for translation and totally forgot about it for a while... it took me some time to figure out what was going on with this NameError popping out of nowhere.

Curiously, xgettext handles this thing better (...or, far worse actually): it just parses the f-string as a regular one, producing something like msgid "hello {x}" msgstr "" But then of course Python will fail silently at runtime, never picking up the translated version of the string...

msg315389 - (view)

Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer)

Date: 2018-04-17 10:22

If there are no objections I'm going to merge PR 6364 in 24 hours.

msg315481 - (view)

Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer)

Date: 2018-04-19 06:23

New changeset 69524821a87251b7aee966f6e46b3810ff5aaa64 by Serhiy Storchaka in branch 'master': bpo-33189: pygettext.py now accepts only literal strings (GH-6364) https://github.com/python/cpython/commit/69524821a87251b7aee966f6e46b3810ff5aaa64

msg315482 - (view)

Author: miss-islington (miss-islington)

Date: 2018-04-19 06:49

New changeset a4fb580f701df5bf07ce569a4f43abfb05c92759 by Miss Islington (bot) in branch '3.7': bpo-33189: pygettext.py now accepts only literal strings (GH-6364) https://github.com/python/cpython/commit/a4fb580f701df5bf07ce569a4f43abfb05c92759

msg315483 - (view)

Author: miss-islington (miss-islington)

Date: 2018-04-19 07:34

New changeset 6f870935c2e024cbd1cc379f85e6a66d7711dcc7 by Miss Islington (bot) in branch '3.6': bpo-33189: pygettext.py now accepts only literal strings (GH-6364) https://github.com/python/cpython/commit/6f870935c2e024cbd1cc379f85e6a66d7711dcc7

History

Date

User

Action

Args

2022-04-11 14:58:59

admin

set

github: 77370

2018-04-19 07:48:45

serhiy.storchaka

set

status: open -> closed
resolution: fixed
stage: patch review -> resolved

2018-04-19 07:34:30

miss-islington

set

messages: +

2018-04-19 07:02:04

miss-islington

set

pull_requests: + <pull%5Frequest6229>

2018-04-19 06:49:18

miss-islington

set

nosy: + miss-islington
messages: +

2018-04-19 06:25:20

miss-islington

set

pull_requests: + <pull%5Frequest6228>

2018-04-19 06:24:25

miss-islington

set

pull_requests: + <pull%5Frequest6227>

2018-04-19 06:23:05

serhiy.storchaka

set

messages: +

2018-04-17 10:22:06

serhiy.storchaka

set

assignee: serhiy.storchaka

messages: +
nosy: + lemburg

2018-04-06 16:26:11

eric.araujo

set

nosy: + eric.araujo

2018-04-03 15:19:38

serhiy.storchaka

set

keywords: + patch
stage: patch review
pull_requests: + <pull%5Frequest6074>

2018-04-03 11:39:25

Riccardo Polignieri

set

messages: +

2018-04-01 16:45:43

serhiy.storchaka

set

nosy: + eric.smith, serhiy.storchaka

messages: +
versions: + Python 3.8

2018-04-01 15:05:47

scoder

set

nosy: + scoder
messages: +

2018-03-30 20:25:16

Riccardo Polignieri

create