翻译python应用程序

时间:2012-11-13 12:32:50

标签: python

我写了一个简单的程序,我希望根据当前的语言环境以不同的语言进行翻译,但我无法使其工作

我正在关注各种网站。这是其中之一:translating your python

我没有问题,直到执行我得到的语言环境不可用且必须使用' C'区域设置

所以,我可以使用glade和non glade字符串获得pot编译文件。这就是网站在我的程序上写的内容:

我检查的一件事是,os.environ.get返回的内容类似于es_ES.UTF-8,然后代码说默认没有.UTF-8

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import gi
from gi.repository import Gtk
import subprocess, sys, os
import threading
import gettext

# # Algunas cosas para gettext (para las traducciones)
APP_NAME="welcn"



WELCN_DIR = '/home/pruebas/welcn-0.1/'


class main():


    def __init__(self):



        #Translation stuff

        #Get the local directory since we are not installing anything
        self.local_path = os.path.realpath(os.path.dirname(sys.argv[0]))
        # Init the list of languages to support
        langs = []
        #Check the default locale
        lc, encoding = locale.getdefaultlocale()
        if (lc):
            #If we have a default, it's the first in the list
            langs = [lc]
        # Now lets get all of the supported languages on the system
        language = os.environ.get('LANG', None)
        if (language):
            """langage comes back something like en_CA:en_US:en_GB:en
            on linuxy systems, on Win32 it's nothing, so we need to
            split it up into a list"""
            langs += language.split(":")
        """Now add on to the back of the list the translations that we
        know that we have, our defaults"""
        langs += ["en_CA", "en_US"]

        """Now langs is a list of all of the languages that we are going
        to try to use.  First we check the default, then what the system
        told us, and finally the 'known' list"""

        gettext.bindtextdomain(APP_NAME, self.local_path)
        gettext.textdomain(APP_NAME)
        # Get the language to use
        self.lang = gettext.translation(APP_NAME, self.local_path
            , languages=langs, fallback = True)
        """Install the language, map _() (which we marked our
        strings to translate with) to self.lang.gettext() which will
        translate them."""
        _ = self.lang.gettext



        builder = Gtk.Builder()
        builder.add_from_file(WELCN_DIR + "welcn.ui")


        #### Language and Keymap window
        self.window = builder.get_object("window1")
        self.button_try = builder.get_object("button1")
        self.button_cli_installer = builder.get_object("button2")



        self.window.connect("delete-event", Gtk.main_quit)
        builder.connect_signals(self)
        self.window.set_title(_('Welcome!'))
        self.window.set_position(Gtk.WindowPosition.CENTER)


        self.window.show_all()

    def on_button1_clicked(self, widget, data=None):
        Gtk.main_quit()

    def on_button2_clicked(self, widget, data=None):
        subprocess.Popen(["cinnarch-setup"])
        sys.exit(0)





if __name__ == '__main__':
    main()
    Gtk.main()

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您是否在此代码文件中的任何位置完成了import locale

为了使locale.getdefaultlocale()有效,您显然需要先导入它。

使用我的ipython shell运行代码的示例:

In [7]: import locale

In [8]: locale.getdefaultlocale()
Out[8]: ('en_US', 'UTF-8')