I have recently updated my code to use the more pythonic f-string instead of '{}'.format()

Now, I want to start on the road to multilingual internationalization, and I run into two problems. The first problem is that f-strings do not combine with i18n. I have to revert to the '{}'.format() style.

The second problem is that I need to translate strings on the fly. I propose to add a f''.language() method to the f-string format.


Example:

user = 'Pedro'

f'Hi {user}' would be translated to 'Hola Pedro' if the locale were set to Spanish.

f'Hi {user}'.language('es_ES') would be translated in the same way.


To extract translatable strings from the source code, the source code could contain a 'HAS_LOCALES' flag (or something similar) at the top of the code. This way, the pygettext.py program would know that translatable f-strings are within the code.


Rationale:

More pythonic. At this moment, _('').format() is the way to go, so I would need to wrap another call around that: T(_(''), args, 'es_ES') <===This is an ugly hack.

# Set the _() function to return the same string

_ = lambda s: s

es = gettext.translation('myapplication', languages=['es_ES'])

def T(translatable_string, args_dictionary = None, language = None)

    if 'es_ES' == language:

        # Return translated, formatted string

        return es.gettext(translatable_string).format(args)


    # Default, return formatted string

    return translatable_string.format(args)


_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to