1153 self.tr("Translation file release"), |
1153 self.tr("Translation file release"), |
1154 self.tr( |
1154 self.tr( |
1155 "The release of the translation files (*.qm) has failed.")) |
1155 "The release of the translation files (*.qm) has failed.")) |
1156 |
1156 |
1157 for index in range(len(self.__lreleaseProcesses)): |
1157 for index in range(len(self.__lreleaseProcesses)): |
1158 if proc == self.__lreleaseProcesses[index][0]: |
1158 if proc == self.__lreleaseProcesses[index]: |
1159 try: |
|
1160 self.__tmpProjects.remove( |
|
1161 self.__lreleaseProcesses[index][1]) |
|
1162 os.remove(self.__lreleaseProcesses[index][1]) |
|
1163 except EnvironmentError: |
|
1164 pass |
|
1165 del self.__lreleaseProcesses[index] |
1159 del self.__lreleaseProcesses[index] |
1166 break |
1160 break |
1167 if not self.__lreleaseProcesses: |
1161 if not self.__lreleaseProcesses: |
1168 # all done |
1162 # all done |
1169 self.lreleaseProcRunning = False |
1163 self.lreleaseProcRunning = False |
1191 li = [self.project.getRelativePath(lang.fileName()) |
1185 li = [self.project.getRelativePath(lang.fileName()) |
1192 for lang in langs] |
1186 for lang in langs] |
1193 self.hooks["releaseSelected"](li) |
1187 self.hooks["releaseSelected"](li) |
1194 return |
1188 return |
1195 |
1189 |
1196 # generate a minimal temporary projectfile suitable for lrelease |
|
1197 self.__tmpProjects = [] |
|
1198 if self.project.getProjectLanguage() in \ |
|
1199 ["Python", "Python2", "Python3"]: |
|
1200 ok = self.__writeTempProjectFile(langs, [".py"]) |
|
1201 else: |
|
1202 ok = False |
|
1203 if not ok: |
|
1204 return |
|
1205 |
|
1206 if self.project.getProjectType() in \ |
1190 if self.project.getProjectType() in \ |
1207 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", |
1191 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", |
1208 "PySide", "PySideC", "PySide2", "PySideC2"]: |
1192 "PySide", "PySideC", "PySide2", "PySideC2"]: |
1209 lrelease = os.path.join( |
1193 lrelease = os.path.join( |
1210 Utilities.getQtBinariesPath(), |
1194 Utilities.getQtBinariesPath(), |
1212 else: |
1196 else: |
1213 return |
1197 return |
1214 if Utilities.isWindowsPlatform(): |
1198 if Utilities.isWindowsPlatform(): |
1215 lrelease = lrelease + '.exe' |
1199 lrelease = lrelease + '.exe' |
1216 |
1200 |
|
1201 if langs: |
|
1202 langs = [self.project.getRelativePath(lang.fileName()) |
|
1203 for lang in langs if lang.fileName().endswith('.ts')] |
|
1204 else: |
|
1205 try: |
|
1206 pattern = self.project.pdata["TRANSLATIONPATTERN"]\ |
|
1207 .replace("%language%", "*") |
|
1208 langs = [lang for lang in self.project.pdata["TRANSLATIONS"] |
|
1209 if fnmatch.fnmatch(lang, pattern)] |
|
1210 except IndexError: |
|
1211 langs = [] |
|
1212 if not langs: |
|
1213 E5MessageBox.warning( |
|
1214 self, |
|
1215 self.tr("Write temporary project file"), |
|
1216 self.tr("""No translation files (*.ts) selected.""")) |
|
1217 return |
|
1218 |
1217 self.__lreleaseProcesses = [] |
1219 self.__lreleaseProcesses = [] |
1218 for tempProjectFile in self.__tmpProjects[:]: |
1220 args = [] |
1219 proc = QProcess() |
1221 args.append('-verbose') |
1220 args = [] |
1222 for langFile in langs: |
1221 |
1223 path, filename = os.path.split(langFile) |
1222 args.append('-verbose') |
|
1223 path, filename = os.path.split(tempProjectFile) |
|
1224 args.append(filename) |
1224 args.append(filename) |
1225 proc.setWorkingDirectory(os.path.join(self.project.ppath, path)) |
1225 |
1226 proc.finished.connect( |
1226 proc = QProcess() |
1227 lambda c, s: self.__releaseTSFileDone(c, s, proc)) |
1227 proc.setWorkingDirectory(os.path.join(self.project.ppath, path)) |
1228 proc.readyReadStandardOutput.connect( |
1228 proc.finished.connect( |
1229 lambda: self.__readStdoutLrelease(proc)) |
1229 lambda c, s: self.__releaseTSFileDone(c, s, proc)) |
1230 proc.readyReadStandardError.connect( |
1230 proc.readyReadStandardOutput.connect( |
1231 lambda: self.__readStderrLrelease(proc)) |
1231 lambda: self.__readStdoutLrelease(proc)) |
1232 |
1232 proc.readyReadStandardError.connect( |
1233 proc.start(lrelease, args) |
1233 lambda: self.__readStderrLrelease(proc)) |
1234 procStarted = proc.waitForStarted() |
1234 |
1235 if procStarted: |
1235 proc.start(lrelease, args) |
1236 self.lreleaseProcRunning = True |
1236 procStarted = proc.waitForStarted() |
1237 self.__lreleaseProcesses.append((proc, tempProjectFile)) |
1237 if procStarted: |
1238 else: |
1238 self.lreleaseProcRunning = True |
1239 E5MessageBox.critical( |
1239 self.__lreleaseProcesses.append(proc) |
1240 self, |
1240 else: |
1241 self.tr('Process Generation Error'), |
1241 E5MessageBox.critical( |
1242 self.tr( |
1242 self, |
1243 '<p>Could not start lrelease.<br>' |
1243 self.tr('Process Generation Error'), |
1244 'Ensure that it is available as <b>{0}</b>.</p>' |
1244 self.tr( |
1245 ).format(lrelease)) |
1245 '<p>Could not start lrelease.<br>' |
1246 |
1246 'Ensure that it is available as <b>{0}</b>.</p>' |
1247 # cleanup |
1247 ).format(lrelease)) |
1248 try: |
|
1249 self.__tmpProjects.remove(tempProjectFile) |
|
1250 os.remove(tempProjectFile) |
|
1251 except EnvironmentError: |
|
1252 pass |
|
1253 |
1248 |
1254 def __releaseSelected(self): |
1249 def __releaseSelected(self): |
1255 """ |
1250 """ |
1256 Private method to release the translation files (.qm). |
1251 Private method to release the translation files (.qm). |
1257 """ |
1252 """ |