[Python-ideas] Gettext syntax (was Re: Allow "assigning" to ...)
Terry Reedy
tjreedy at udel.edu
Fri Feb 13 01:01:15 CET 2015
On 2/11/2015 10:33 PM, Terry Reedy wrote:
> A possible solution would be to give 3.x str a __pos__ or __neg__
> method, so +'python' or -'python' would mean the translation of 'python'
> (the snake). This would be even *less* intrusive and easier to write
> than _('python').
>
> Since () has equal precedence with . while + and - are lower, we would
> have the following equivalences for mixed expressions with '.':
>
> _(snake.format()) == -snake.format() # format, then translate
> # or -(snake.lower())
> _(snake).format() == (-snake).format() # translate, then format
The core idea of this proposal is to add a single prefix symbol as an
alternative to _(...). Summarizing the alternate proposals:
Zero Piraeus suggests that ~ (.__invert__ (normally bitwise)) would be
better. I agree.
M.-A. Lemburg points out that neither of
label = +'I like' + +'Python'
label = -'I like' + -'Python'
do not 'read well'. I do not know how common such concatentions are,
but I agree that they do not look good.
He then suggests a new string prefix, such as i'Internationalized
String'. ('_' could also be used as a prefix.) The compiler could map
this to, for instance, sys.i18n('Internationalized String'), where initially
sys.i18n = lambda s: s
The above code would then become
label = i'I like' + i'Python' # or
label = _'I like' + _'Python'
I like this even better except that it raises the issue of interaction
with the existing r and b (and u) prefixes.
Ron Adam suggests a str._ property, leading to
label = 'I like'._ + 'Python'._
I prefer 1 char to 2. On the other hand, a 'suffix' makes a certain
sense for indicating translation. Current string prefixes affect the
translation of literal to object. To properly process a string literal
containing '\'s, for instance, both compilers and people need to know
whether it is to be interpreted 'raw' or 'cooked'. Both also need to
know whether to read it as text or bytes. Translation is an
afterthought, currently performed later.
Barry Warsaw pointed out that existing tools can go thru a file, written
in whatever language, and extract literal strings inside _(...). For
this, distinctive awkwardness is an advantage. A new syntax would work
better if there were a script to translate back to the old.
--
Terry Jan Reedy
More information about the Python-ideas
mailing list