Commit e0376d66e6fcadb0540ac1828fbbeed28347e238
1 parent
1a61d02a
Exists in
master
and in
6 other branches
ENH: Beginning of the internationalization, reffer ticket 52
Showing
5 changed files
with
211 additions
and
4 deletions
Show diff stats
.gitattributes
... | ... | @@ -127,6 +127,7 @@ invesalius/gui/dicom_preview_panel.py -text |
127 | 127 | invesalius/gui/frame.py -text |
128 | 128 | invesalius/gui/import_data_wizard.py -text |
129 | 129 | invesalius/gui/import_panel.py -text |
130 | +invesalius/gui/language_dialog.py -text | |
130 | 131 | invesalius/gui/task_exporter.py -text |
131 | 132 | invesalius/gui/task_generic.py -text |
132 | 133 | invesalius/gui/task_importer.py -text |
... | ... | @@ -139,6 +140,7 @@ invesalius/gui/widgets/foldpanelbar.py -text |
139 | 140 | invesalius/gui/widgets/gradient.py -text |
140 | 141 | invesalius/gui/widgets/listctrl.py -text |
141 | 142 | invesalius/gui/widgets/slice_menu.py -text |
143 | +invesalius/i18n.py -text | |
142 | 144 | invesalius/invesalius.py -text |
143 | 145 | invesalius/presets.py -text |
144 | 146 | invesalius/project.py -text | ... | ... |
... | ... | @@ -0,0 +1,130 @@ |
1 | +#-------------------------------------------------------------------------- | |
2 | +# Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas | |
3 | +# Copyright: (C) 2001 Centro de Pesquisas Renato Archer | |
4 | +# Homepage: http://www.softwarepublico.gov.br | |
5 | +# Contact: invesalius@cti.gov.br | |
6 | +# License: GNU - GPL 2 (LICENSE.txt/LICENCA.txt) | |
7 | +#-------------------------------------------------------------------------- | |
8 | +# Este programa e software livre; voce pode redistribui-lo e/ou | |
9 | +# modifica-lo sob os termos da Licenca Publica Geral GNU, conforme | |
10 | +# publicada pela Free Software Foundation; de acordo com a versao 2 | |
11 | +# da Licenca. | |
12 | +# | |
13 | +# Este programa eh distribuido na expectativa de ser util, mas SEM | |
14 | +# QUALQUER GARANTIA; sem mesmo a garantia implicita de | |
15 | +# COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM | |
16 | +# PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais | |
17 | +# detalhes. | |
18 | +#-------------------------------------------------------------------------- | |
19 | + | |
20 | +import os | |
21 | +import wx | |
22 | +import wx.combo | |
23 | + | |
24 | +import i18n | |
25 | +import constants as const | |
26 | + | |
27 | +def create(parent): | |
28 | + return LanguageDialog(parent) | |
29 | + | |
30 | +class LanguageDialog(wx.Dialog): | |
31 | + """Class define the language to be used in the InVesalius, | |
32 | + exist chcLanguage that list language EN and PT. The language | |
33 | + selected is writing in the config.ini""" | |
34 | + | |
35 | + def __init__(self, parent, startApp = None): | |
36 | + | |
37 | + #self.__TranslateMessage__() | |
38 | + | |
39 | + self.pre = pre = wx.PreDialog() | |
40 | + pre.SetExtraStyle(wx.DIALOG_MODAL) | |
41 | + | |
42 | + pre.Create(parent, -1, 'Language selection', size = wx.Size(250, 150), | |
43 | + pos = wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE) | |
44 | + self.PostCreate(pre) | |
45 | + | |
46 | + icon_path = os.path.join(const.ICON_DIR, "invesalius.ico") | |
47 | + pre.SetIcon(wx.Icon(icon_path, wx.BITMAP_TYPE_ICO)) | |
48 | + | |
49 | + self.pnl = wx.Panel(id=-1, name='pnl', | |
50 | + parent=pre, pos=wx.Point(0, 0), size=wx.Size(250, 160), | |
51 | + style=wx.TAB_TRAVERSAL) | |
52 | + | |
53 | + self.txtMsg = wx.StaticText(id=1, | |
54 | + label=('Choose user interface language'), | |
55 | + name='txtMsg', parent=self.pnl, pos=wx.Point(15, | |
56 | + 10), size=wx.Size(200, 13), style=0) | |
57 | + | |
58 | + self.bxSizer = wx.BoxSizer(orient=wx.VERTICAL) | |
59 | + self.bxSizer.AddWindow(self.pnl, 1, wx.GROW|wx.ALIGN_CENTRE) | |
60 | + | |
61 | + btnsizer = wx.StdDialogButtonSizer() | |
62 | + | |
63 | + if wx.Platform != "__WXMSW__": | |
64 | + btn = wx.ContextHelpButton(self) | |
65 | + btnsizer.AddButton(btn) | |
66 | + | |
67 | + btnsizer.SetOrientation(wx.CENTER) | |
68 | + | |
69 | + btn = wx.Button(self, wx.ID_OK) | |
70 | + btn.SetDefault() | |
71 | + btnsizer.AddButton(btn) | |
72 | + | |
73 | + btn = wx.Button(self, wx.ID_CANCEL) | |
74 | + btnsizer.AddButton(btn) | |
75 | + btnsizer.Realize() | |
76 | + | |
77 | + self.bxSizer.AddSizer(btnsizer, 1, wx.GROW|wx.ALIGN_CENTRE) | |
78 | + | |
79 | + self.__init_combobox_bitmap__() | |
80 | + | |
81 | + self.SetSizer(self.bxSizer) | |
82 | + | |
83 | + | |
84 | + def __init_combobox_bitmap__(self): | |
85 | + """Initialize combobox bitmap""" | |
86 | + | |
87 | + self.locales = i18n.GetLocales().values() | |
88 | + | |
89 | + self.locales_key = i18n.GetLocales().keys() | |
90 | + self.os_locale = i18n.GetLocaleOS() | |
91 | + | |
92 | + | |
93 | + self.bitmapCmb = bitmapCmb = wx.combo.BitmapComboBox(self.pnl, pos=(32,34), | |
94 | + size=(180,22), style=wx.CB_READONLY) | |
95 | + | |
96 | + bmp_brazilian_flag = wx.Bitmap(os.path.join(const.ICON_DIR, "pt_BR.bmp"), wx.BITMAP_TYPE_BMP) | |
97 | + bmp_english_flag = wx.Bitmap(os.path.join(const.ICON_DIR, "en_GB.bmp"), wx.BITMAP_TYPE_BMP) | |
98 | + bmp_spanish_flag = wx.Bitmap(os.path.join(const.ICON_DIR, "es.bmp"), wx.BITMAP_TYPE_BMP) | |
99 | + | |
100 | + bitmapCmb.Append(self.locales[0], bmp_brazilian_flag,"pt_BR") | |
101 | + bitmapCmb.Append(self.locales[1], bmp_english_flag,"en_GB") | |
102 | + bitmapCmb.Append(self.locales[2], bmp_spanish_flag,"es") | |
103 | + | |
104 | + | |
105 | + if (self.os_locale[0:2] == 'pt'): | |
106 | + bitmapCmb.SetSelection(0) | |
107 | + elif (self.os_locale[0:2] == 'es'): | |
108 | + bitmapCmb.SetSelection(2) | |
109 | + else: | |
110 | + bitmapCmb.SetSelection(1) | |
111 | + | |
112 | + def GetSelectedLanguage(self): | |
113 | + """Return String with Selected Language""" | |
114 | + return self.locales_key[self.bitmapCmb.GetSelection()] | |
115 | + | |
116 | + def __TranslateMessage__(self): | |
117 | + """Translate Messages of the Window""" | |
118 | + os_language = ivI18n.GetLocaleOS() | |
119 | + | |
120 | + if(os_language[0:2] == 'pt'): | |
121 | + _ = ivI18n.ParseLang('pt_BR') | |
122 | + elif(os_language[0:2] == 'es'): | |
123 | + _ = ivI18n.ParseLang('es') | |
124 | + else: | |
125 | + _ = ivI18n.ParseLang('en_GB') | |
126 | + | |
127 | + def Cancel(self, event): | |
128 | + """Close Frm_Language""" | |
129 | + self.Close() | |
130 | + event.Skip() | ... | ... |
... | ... | @@ -0,0 +1,46 @@ |
1 | +#-------------------------------------------------------------------------- | |
2 | +# Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas | |
3 | +# Copyright: (C) 2001 Centro de Pesquisas Renato Archer | |
4 | +# Homepage: http://www.softwarepublico.gov.br | |
5 | +# Contact: invesalius@cti.gov.br | |
6 | +# License: GNU - GPL 2 (LICENSE.txt/LICENCA.txt) | |
7 | +#-------------------------------------------------------------------------- | |
8 | +# Este programa e software livre; voce pode redistribui-lo e/ou | |
9 | +# modifica-lo sob os termos da Licenca Publica Geral GNU, conforme | |
10 | +# publicada pela Free Software Foundation; de acordo com a versao 2 | |
11 | +# da Licenca. | |
12 | +# | |
13 | +# Este programa eh distribuido na expectativa de ser util, mas SEM | |
14 | +# QUALQUER GARANTIA; sem mesmo a garantia implicita de | |
15 | +# COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM | |
16 | +# PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais | |
17 | +# detalhes. | |
18 | +#-------------------------------------------------------------------------- | |
19 | + | |
20 | +import locale | |
21 | +import sys | |
22 | +import gettext | |
23 | +import os | |
24 | +import ConfigParser | |
25 | + | |
26 | + | |
27 | +def GetLocales(): | |
28 | + """Return a dictionary which defines supported languages""" | |
29 | + locale_descriptions = {'es':'Espa\xf1ol',\ | |
30 | + 'en_GB':'English',\ | |
31 | + 'pt_BR':'Portugu\xeas (Brasil)'} | |
32 | + return locale_descriptions | |
33 | + | |
34 | +def GetLocaleOS(): | |
35 | + """Return language of the operating system.""" | |
36 | + os_language = locale.getdefaultlocale()[0] | |
37 | + return os_language | |
38 | + | |
39 | +def InstallLanguage(lang): | |
40 | + | |
41 | + lang = gettext.translation('invesalius', lang_dir,\ | |
42 | + languages=[language]) | |
43 | + lang.install() | |
44 | + _ = lang.gettext | |
45 | + return _ | |
46 | + | ... | ... |
invesalius/invesalius.py
... | ... | @@ -21,6 +21,9 @@ import multiprocessing |
21 | 21 | from optparse import OptionParser |
22 | 22 | import os |
23 | 23 | import sys |
24 | + | |
25 | +import gui.language_dialog as lang_dlg | |
26 | +import i18n | |
24 | 27 | from session import Session |
25 | 28 | |
26 | 29 | |
... | ... | @@ -68,7 +71,29 @@ class SplashScreen(wx.SplashScreen): |
68 | 71 | # main frame now |
69 | 72 | if self.fc.IsRunning(): |
70 | 73 | self.fc.Stop() |
71 | - self.ShowMain() | |
74 | + | |
75 | + session = Session() | |
76 | + if not (session.ReadSession()): | |
77 | + session.CreateItens() | |
78 | + | |
79 | + lang = session.GetLanguage() | |
80 | + #TODO: temporary | |
81 | + lang = "pt_BR" | |
82 | + if not(lang): | |
83 | + | |
84 | + ldlg = lang_dlg.create(parent=None) | |
85 | + ldlg.Show() | |
86 | + | |
87 | + if (ldlg.ShowModal() == wx.ID_OK): | |
88 | + lang = ldlg.GetSelectedLanguage() | |
89 | + session.SetLanguage(lang) | |
90 | + i18n.InstallLanguage(lang) | |
91 | + else: | |
92 | + #i18n.InstallLanguage(lang) | |
93 | + self.ShowMain() | |
94 | + | |
95 | + #print "not....." | |
96 | + #self.ShowMain() | |
72 | 97 | |
73 | 98 | |
74 | 99 | def ShowMain(self): |
... | ... | @@ -107,8 +132,6 @@ def parse_comand_line(): |
107 | 132 | options, args = parser.parse_args() |
108 | 133 | |
109 | 134 | session = Session() |
110 | - if not (session.ReadSession()): | |
111 | - session.CreateItens() | |
112 | 135 | |
113 | 136 | if options.debug: |
114 | 137 | # The user passed the debug option? | ... | ... |
invesalius/session.py
... | ... | @@ -126,7 +126,13 @@ class Session(object): |
126 | 126 | dict = plistlib.readPlist(main_plist) |
127 | 127 | for key in dict: |
128 | 128 | setattr(self, key, dict[key]) |
129 | - | |
129 | + | |
130 | + def GetLanguage(self): | |
131 | + return self.language | |
132 | + | |
133 | + def SetLanguage(self, language): | |
134 | + self.language = language | |
135 | + | |
130 | 136 | def ReadSession(self): |
131 | 137 | |
132 | 138 | config = ConfigParser.ConfigParser() | ... | ... |