您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在python> 3.6 f字符串中使用gettext

如何在python> 3.6 f字符串中使用gettext

我知道这个问题已经很老了,并且已经有了一个非常合理的答案,但是当我在搜索时着陆于此时,我会大胆地给出我的答案,并且我自己也喜欢使用f弦想要失去它的使用,但还支持I18N。(即:我也想吃蛋糕)

我的解决方案是制作一个调用f()后执行f字符串插值的函数gettext

from inspect import currentframe

def f(s):
    frame = currentframe().f_back
    return eval(f"f'{s}'", frame.f_locals, frame.f_globals)

现在,您只需换行_(...)f()不要在字符串前加上f:

f(_('Hey, {username}'))

我通常反对使用eval,因为它可能会使函数不安全,但是我个人认为,只要您知道要格式化的内容,就应该在这里辩护。否则,使用后果自负。

这不是一个完美的解决方案,这只是我的解决方案。根据PEP 498的规定,每种格式化方法“都有其优点,但也有缺点”。

例如,如果您需要更改字符串中的表达式,则它将不再匹配,因此除非您也更新了.po文件,否则它不会被翻译。另外,如果您不是翻译它们的人,并且使用的表达式难以解读结果,那么可能会导致沟通不畅或翻译中的其他问题。

python 2022/1/1 18:45:46 有373人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶