translate_generator.py
Go to the documentation of this file.
1 ################################################################################
2 #
3 # Copyright Airbus Group SAS 2015
4 # All rigths reserved.
5 #
6 # File Name : translate_generator.py
7 # Authors : Martin Matignon
8 #
9 # If you find any bug or if you have any question please contact
10 # Adolfo Suarez Roos <adolfo.suarez@airbus.com>
11 # Martin Matignon <martin.matignon.external@airbus.com>
12 #
13 #
14 ################################################################################
15 
16 import collections
17 import subprocess
18 
19 import rospy
20 import os
21 # from roslib.packages import get_pkg_dir
22 from airbus_cobot_gui import resources_dir
23 from xml.etree import ElementTree
24 
25 from python_qt_binding.QtGui import *
26 from python_qt_binding.QtCore import *
27 
28 from python_qt_binding import loadUi
29 
30 from airbus_cobot_gui.translator import trUtf8
31 from airbus_cobot_gui.python_qt_extend import MessageBox
32 
33 class TranslateGeneratorWidget(QDialog):
34 
35  LNG_SOURCE = 'en'
36 
37  def __init__(self, parent=None):
38  """! The constructor."""
39  QDialog.__init__(self, parent, Qt.FramelessWindowHint)
40 
41  self.setModal(True)
42 
43  # Get path to UI file which is a sibling of this file
44  ui_file = resources_dir('ui', 'traductor_widget.ui')
45  # Extend the widget with all attributes and children from UI file
46  loadUi(ui_file, self)
47 
48  self.setStyleSheet("QDialog{ \
49  background-color:qlineargradient(x1: 0, \
50  y1: 0, \
51  x2: 0, \
52  y2: 1, \
53  stop: 0 #616763, \
54  stop: 1 #89928c); \
55  }")
56 
57  self._tree = None
58  self._root = None
59  self._languages_list = []
60 
61  self.connect(self.explorer_button, SIGNAL("clicked()"),
63 
64  self.connect(self.generate_button, SIGNAL("clicked()"),
66 
67  self.connect(self.close_button, SIGNAL("clicked()"),
68  self.close)
69 
70  self.explorer_button.setText(trUtf8("Open"))
71  self.generate_button.setText(trUtf8("Generate"))
72  self.close_button.setText(trUtf8("Close"))
73 
74  self.explorer_label.setText(trUtf8("Traductor"))
75  self.language_label.setText(trUtf8("Language"))
76 
78 
79  trans_xml_file, filter = QFileDialog.getOpenFileName(self,
80  'Select traductor',
81  resources_dir('translations',
82  'traductor'),
83  'Traductor (*.xml)')
84 
85  if os.path.isfile(trans_xml_file):
86  self.parse(trans_xml_file)
87  else:
88  msg_box = MessageBox()
89  msg_box.setText(trUtf8("No traductor selected",'!'))
90  msg_box.setIcon(MessageBox.Critical)
91  msg_box.setStandardButtons(MessageBox.Ok)
92  msg_box.button(MessageBox.Ok).setMinimumSize(100,40)
93  msg_box.adjustSize()
94  msg_box.exec_()
95 
96  def parse(self, file):
97 
98  try:
99  self._tree = ElementTree.parse(file)
100  except Exception as e:
101  msg_box = MessageBox()
102  msg_box.setText(trUtf8("Invalid translator",'!'))
103  msg_box.setIcon(MessageBox.Error)
104  msg_box.setStandardButtons(MessageBox.Ok)
105  msg_box.button(MessageBox.Ok).setMinimumSize(100,40)
106  msg_box.adjustSize()
107  msg_box.exec_()
108  return
109  finally:
110  self.languages_combo.setEnabled(True)
111  self.generate_button.setEnabled(True)
112 
113  self._root = self._tree.getroot()
114 
115  translate_list = self._root.find('./translate')
116 
117  if len(translate_list):
118 
119  self.languages_combo.addItem('All')
120 
121  for lng in translate_list:
122  self.languages_combo.addItem(lng.tag[0].upper()+lng.tag[1:])
123  self._languages_list.append(lng.tag)
124 
126 
127  choose = self.languages_combo.currentText().lower()
128 
129  if choose == 'all':
130  return self._languages_list
131  else:
132  return [choose]
133 
135 
136  lng_list = self.get_languages_slected()
137  msg_status = '['
138 
139  for lng in lng_list:
140 
141  msg_status += '"%s" '%lng
142 
143  self._genarate_ts_files(lng)
144 
145  msg_status += ']'
146 
147  msg_box = MessageBox()
148  msg_box.setText(trUtf8("Translations finished with success",'.'))
149  msg_box.setIcon(MessageBox.Information)
150  msg_box.setStandardButtons(MessageBox.Ok)
151  msg_box.button(MessageBox.Ok).setMinimumSize(100,40)
152  msg_box.adjustSize()
153  msg_box.exec_()
154 
155  def _genarate_ts_files(self, language,
156  context = 'MainWindow',
157  version = '1.0'):
158 
159  file_name = language+'.ts'
160 
161  tsfile = resources_dir('translations',file_name)
162 
163  ts = open(tsfile,'w')
164 
165  ts.write("""<?xml version="1.0" encoding="utf-8"?>\n""")
166  ts.write("""<!DOCTYPE TS>\n""")
167  ts.write("""<TS version="%s" language="%s">\n"""%(version,language))
168  ts.write("""<context>\n""")
169  ts.write(""" <name>%s</name>\n"""%context)
170 
171  for trans in self._root.find('.'):
172 
173  source_text = trans.find(self.LNG_SOURCE).text
174  source_tag = '<source>%s</source>'%source_text.encode('ascii',
175  'xmlcharrefreplace')
176  trad_text = trans.find(language).text
177  translation_tag = '<translation>%s</translation>'%trad_text.encode('ascii',
178  'xmlcharrefreplace')
179  message_tag = " <message>\n %s\n %s\n </message>\n"%(source_tag,translation_tag)
180  ts.write(message_tag)
181 
182  ts.write("""</context>\n""")
183  ts.write("""</TS>\n""")
184 
185  ts.close()
186 
187  self._genarate_dm_files(tsfile)
188 
189  def _genarate_dm_files(self, tsfile):
190 
191  sub = subprocess.Popen(["lrelease", tsfile])
192  sub.wait()
193 
194  @staticmethod
195  def get_translate_file_list(self, extension = '.ts'):
196 
197  files = os.listdir(resources_dir('translations'))
198 
199  trans_files_list = []
200 
201  for file in files:
202  if extension in file:
203  trans_files_list.append(file)
204 
205  return trans_files_list
206 
207 if __name__ == "__main__":
208 
209  import sys
210 
211  rospy.init_node('translator')
212 
213  app = QApplication(sys.argv)
214  main = QMainWindow()
215  main.setCentralWidget(TranslateGeneratorWidget())
216  main.show()
217  app.exec_()
218 


airbus_cobot_gui
Author(s):
autogenerated on Thu Dec 17 2015 11:42:05