Commit e0376d66e6fcadb0540ac1828fbbeed28347e238

Authored by Paulo Henrique Junqueira Amorim
1 parent 1a61d02a

ENH: Beginning of the internationalization, reffer ticket 52

.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
... ...
invesalius/gui/language_dialog.py 0 → 100644
... ... @@ -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()
... ...
invesalius/i18n.py 0 → 100644
... ... @@ -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()
... ...