Localization 如何避免依赖项名称与python中的全局转换函数()冲突?

Localization 如何避免依赖项名称与python中的全局转换函数()冲突?,localization,wxpython,Localization,Wxpython,我正在尝试国际化/翻译一个作为wx.app()实现的python应用程序。我的大部分工作都很顺利——我在正确的地方看到了翻译。但有一个“止步秀”错误:在难以预测的时间崩溃,错误如下: Traceback: ... self.SetStatusText(_('text to be translated here')) TypeError: 'numpy.ndarray' object is not callable 我怀疑应用程序的一个或多个依赖项(有相当多的依赖项)正在破坏全局转换函数

我正在尝试国际化/翻译一个作为wx.app()实现的python应用程序。我的大部分工作都很顺利——我在正确的地方看到了翻译。但有一个“止步秀”错误:在难以预测的时间崩溃,错误如下:

Traceback: ...
    self.SetStatusText(_('text to be translated here'))
TypeError: 'numpy.ndarray' object is not callable
我怀疑应用程序的一个或多个依赖项(有相当多的依赖项)正在破坏全局转换函数。一种可能的方法是在解包元组时使用u作为虚拟变量的名称(这是相当普遍的做法)。我确定这不是我的应用程序在做的,所以我怀疑这是一个依赖。有没有办法“捍卫”这一点,或者以其他方式处理这一问题


我怀疑这是一种常见的情况,因此人们已经研究出如何正确处理它。否则,我将使用非标准名称,例如_translate,而不是_。我想这会管用,但会更冗长,更难阅读。例如,从上面看,我看不出哪里出了问题

我的wxPython应用程序中的I18N没有问题,我在其中使用了matplotlib和numpy(不广泛)

您能否提供完整的回溯和/或显示问题的小样本

顺便说一句,你有没有在WxPythonPhoenix文档中看到这个页面,它在最后给出了一些其他参考。 wxpython.org/Phoenix/docs/html/internationalization.html

啊哈,如果Translate工作正常,那么您就会遇到Python盗用“”的问题,您可以通过执行以下操作来解决此问题:

安装一个自定义的displayhook,以防止Python将全局(下划线)设置为最后计算的表达式的值。如果我们不这样做,我们的u到gettext的映射可能会被覆盖。这在PyShell的交互式调试中很有用/需要

您可以通过在应用程序模块中定义:

def _displayHook(obj):
    """Custom display hook to prevent Python stealing '_'."""
    if obj is not None:
        print repr(obj)
然后在wx.App.OnInit方法中执行以下操作:

# work around for Python stealing "_"
sys.displayhook = _displayHook
将u()的所有实例更改为_translate()确实清除了它。但这是一个变通办法,不是一个适当的解决办法。是的,我看到了链接的文档信息,谢谢。