【问题标题】:How to un-translate a message translated with gettext?如何取消翻译用 gettext 翻译的消息?
【发布时间】:2021-02-23 22:20:46
【问题描述】:

我需要在 python 中取消翻译一条消息。我的来源是英文,我用gettext 翻译那个字符串,比如法语。我需要“返回”到英文的原始字符串。有没有可能?

原因如下:我在用户界面中显示了一些消息,因此需要翻译消息。相同的函数将该消息记录在数据库中(用于调试)。我想以原始形式(英文)将消息存储在数据库中。

一个例子:

alert_please( _("message to be shown and stored") )

这里是定义:

def alert_please(translated_message):
   show_the_message(translated_message)
   store_the_message(translated_message)

仅供参考,我不会翻译 show_the_message 调用中的消息,因为这样做我将无法查看代码来构建消息目录。

【问题讨论】:

  • 你能在翻译前存储邮件吗?
  • 定义您自己的_() 函数,该函数构建一个字典,将调用gettext.gettext() 的结果映射到英文源字符串(以及照常返回该结果)。这将允许您编写另一个函数来使用该字典来取消翻译。
  • @martineau 你让我开心。有用。谢谢!
  • @BendikKnapstad 我可以,但我会为每条消息打两次电话......

标签: python gettext


【解决方案1】:

感谢@martineau,我以这种方式定义了自己的新_() 函数:

reverse_dict = {}
def translate(msg_to_translate, get_ori=False):
    global reverse_dict

    if get_ori:
        return reverse_dict.get(msg_to_translate, msg_to_translate)

    translation = en.gettext(msg_to_translate)
    reverse_dict = {translation: msg_to_translate}

    return translation

import builtins
builtins.__dict__['_'] = translate

这个调用_(msg)只是翻译消息,调用_(msg, True)返回原始字符串。就我而言,我只存储一条消息:足够了,我只记录最后一条。最坏的情况是返回翻译后的消息,而不是原始消息。

【讨论】:

  • 是的,这基本上就是我的建议(不客气)。像这样重载_() 函数而不是拥有两个函数是聪明的。一个可能的改进是通过定义一个具有类似_() 方法 的类来实现事物,因为这样做将消除对存储reverse_dict 的单独全局变量的需要。
猜你喜欢
  • 1970-01-01
  • 2018-06-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
相关资源
最近更新 更多