134 |
134 |
135 def projectOpenedHooks(self): |
135 def projectOpenedHooks(self): |
136 """ |
136 """ |
137 Public method to add our hook methods. |
137 Public method to add our hook methods. |
138 """ |
138 """ |
139 if self.__project.hasCapability("pybabel"): |
139 if self.__project.hasCapability("flask-babel"): |
140 self.__e5project.projectLanguageAddedByCode.connect( |
140 self.__e5project.projectLanguageAddedByCode.connect( |
141 self.__projectLanguageAdded) |
141 self.__projectLanguageAdded) |
142 self.__translationsBrowser = ( |
142 self.__translationsBrowser = ( |
143 e5App().getObject("ProjectBrowser") |
143 e5App().getObject("ProjectBrowser") |
144 .getProjectBrowser("translations")) |
144 .getProjectBrowser("translations")) |
199 def determineCapability(self): |
199 def determineCapability(self): |
200 """ |
200 """ |
201 Public method to determine the availability of flask-babel. |
201 Public method to determine the availability of flask-babel. |
202 """ |
202 """ |
203 available = self.__flaskBabelAvailable() |
203 available = self.__flaskBabelAvailable() |
204 self.__project.setCapability("pybabel", available) |
204 self.__project.setCapability("flask-babel", available) |
205 |
205 |
206 self.pybabelConfigAct.setEnabled(available) |
206 self.pybabelConfigAct.setEnabled(available) |
207 self.pybabelInstallAct.setEnabled(not available) |
207 self.pybabelInstallAct.setEnabled(not available) |
208 |
208 |
209 ################################################################## |
209 ################################################################## |
248 """ |
248 """ |
249 Private slot to show a dialog to edit the pybabel configuration. |
249 Private slot to show a dialog to edit the pybabel configuration. |
250 """ |
250 """ |
251 from .PyBabelConfigDialog import PyBabelConfigDialog |
251 from .PyBabelConfigDialog import PyBabelConfigDialog |
252 |
252 |
253 config = self.__project.getData("pybabel", "") |
253 config = self.__project.getData("flask-babel", "") |
254 dlg = PyBabelConfigDialog(config) |
254 dlg = PyBabelConfigDialog(config) |
255 if dlg.exec() == QDialog.Accepted: |
255 if dlg.exec() == QDialog.Accepted: |
256 config = dlg.getConfiguration() |
256 config = dlg.getConfiguration() |
257 self.__project.setData("pybabel", "", config) |
257 self.__project.setData("flask-babel", "", config) |
258 |
258 |
259 self.__e5project.setTranslationPattern(os.path.join( |
259 self.__e5project.setTranslationPattern(os.path.join( |
260 config["translationsDirectory"], "%language%", "LC_MESSAGES", |
260 config["translationsDirectory"], "%language%", "LC_MESSAGES", |
261 "{0}.po".format(config["domain"]) |
261 "{0}.po".format(config["domain"]) |
262 )) |
262 )) |
272 Private method to ensure, that PyBabel has been configured. |
272 Private method to ensure, that PyBabel has been configured. |
273 |
273 |
274 @return flag indicating successful configuration |
274 @return flag indicating successful configuration |
275 @rtype bool |
275 @rtype bool |
276 """ |
276 """ |
277 config = self.__project.getData("pybabel", "") |
277 config = self.__project.getData("flask-babel", "") |
278 if not config: |
278 if not config: |
279 self.__configurePybabel() |
279 self.__configurePybabel() |
280 return True |
280 return True |
281 |
281 |
282 configFileName = self.__project.getData("pybabel", "configFile") |
282 configFileName = self.__project.getData("flask-babel", "configFile") |
283 if configFileName: |
283 if configFileName: |
284 cfgFileName = self.__e5project.getAbsoluteUniversalPath( |
284 cfgFileName = self.__e5project.getAbsoluteUniversalPath( |
285 configFileName) |
285 configFileName) |
286 if os.path.exists(cfgFileName): |
286 if os.path.exists(cfgFileName): |
287 return True |
287 return True |
363 def __checkAvailability(self): |
363 def __checkAvailability(self): |
364 """ |
364 """ |
365 Private slot to check the availability of the 'flask-babel' extension. |
365 Private slot to check the availability of the 'flask-babel' extension. |
366 """ |
366 """ |
367 self.determineCapability() |
367 self.determineCapability() |
368 if self.__project.hasCapability("pybabel"): |
368 if self.__project.hasCapability("flask-babel"): |
369 msg = self.tr("The 'flask-babel' extension is installed.") |
369 msg = self.tr("The 'flask-babel' extension is installed.") |
370 else: |
370 else: |
371 msg = self.tr("The 'flask-babel' extension is not installed.") |
371 msg = self.tr("The 'flask-babel' extension is not installed.") |
372 E5MessageBox.information( |
372 E5MessageBox.information( |
373 None, |
373 None, |
424 """ |
424 """ |
425 title = self.tr("Extract messages") |
425 title = self.tr("Extract messages") |
426 if self.__ensurePybabelConfigured(): |
426 if self.__ensurePybabelConfigured(): |
427 workdir = self.__project.getApplication()[0] |
427 workdir = self.__project.getApplication()[0] |
428 potFile = self.__e5project.getAbsoluteUniversalPath( |
428 potFile = self.__e5project.getAbsoluteUniversalPath( |
429 self.__project.getData("pybabel", "catalogFile")) |
429 self.__project.getData("flask-babel", "catalogFile")) |
430 |
430 |
431 try: |
431 try: |
432 potFilePath = os.path.dirname(potFile) |
432 potFilePath = os.path.dirname(potFile) |
433 os.makedirs(potFilePath) |
433 os.makedirs(potFilePath) |
434 except OSError: |
434 except OSError: |
436 |
436 |
437 args = [ |
437 args = [ |
438 "-F", |
438 "-F", |
439 os.path.relpath( |
439 os.path.relpath( |
440 self.__e5project.getAbsoluteUniversalPath( |
440 self.__e5project.getAbsoluteUniversalPath( |
441 self.__project.getData("pybabel", "configFile")), |
441 self.__project.getData("flask-babel", "configFile")), |
442 workdir |
442 workdir |
443 ) |
443 ) |
444 ] |
444 ] |
445 if self.__project.getData("pybabel", "markersList"): |
445 if self.__project.getData("flask-babel", "markersList"): |
446 for marker in self.__project.getData("pybabel", "markersList"): |
446 for marker in self.__project.getData("flask-babel", "markersList"): |
447 args += ["-k", marker] |
447 args += ["-k", marker] |
448 args += [ |
448 args += [ |
449 "-o", |
449 "-o", |
450 os.path.relpath(potFile, workdir), |
450 os.path.relpath(potFile, workdir), |
451 "." |
451 "." |
474 workdir = self.__project.getApplication()[0] |
474 workdir = self.__project.getApplication()[0] |
475 langFile = self.__e5project.getAbsoluteUniversalPath( |
475 langFile = self.__e5project.getAbsoluteUniversalPath( |
476 self.__e5project.getTranslationPattern().replace( |
476 self.__e5project.getTranslationPattern().replace( |
477 "%language%", code)) |
477 "%language%", code)) |
478 potFile = self.__e5project.getAbsoluteUniversalPath( |
478 potFile = self.__e5project.getAbsoluteUniversalPath( |
479 self.__project.getData("pybabel", "catalogFile")) |
479 self.__project.getData("flask-babel", "catalogFile")) |
480 |
480 |
481 args = [ |
481 args = [ |
482 "--domain={0}".format( |
482 "--domain={0}".format( |
483 self.__project.getData("pybabel", "domain")), |
483 self.__project.getData("flask-babel", "domain")), |
484 "--input-file={0}".format(os.path.relpath(potFile, workdir)), |
484 "--input-file={0}".format(os.path.relpath(potFile, workdir)), |
485 "--output-file={0}".format(os.path.relpath(langFile, workdir)), |
485 "--output-file={0}".format(os.path.relpath(langFile, workdir)), |
486 "--locale={0}".format(code), |
486 "--locale={0}".format(code), |
487 ] |
487 ] |
488 |
488 |
507 title = self.tr("Compiling message catalogs") |
507 title = self.tr("Compiling message catalogs") |
508 |
508 |
509 if self.__ensurePybabelConfigured(): |
509 if self.__ensurePybabelConfigured(): |
510 workdir = self.__project.getApplication()[0] |
510 workdir = self.__project.getApplication()[0] |
511 translationsDirectory = self.__e5project.getAbsoluteUniversalPath( |
511 translationsDirectory = self.__e5project.getAbsoluteUniversalPath( |
512 self.__project.getData("pybabel", "translationsDirectory")) |
512 self.__project.getData("flask-babel", "translationsDirectory")) |
513 |
513 |
514 args = [ |
514 args = [ |
515 "--domain={0}".format( |
515 "--domain={0}".format( |
516 self.__project.getData("pybabel", "domain")), |
516 self.__project.getData("flask-babel", "domain")), |
517 "--directory={0}".format( |
517 "--directory={0}".format( |
518 os.path.relpath(translationsDirectory, workdir)), |
518 os.path.relpath(translationsDirectory, workdir)), |
519 "--use-fuzzy", |
519 "--use-fuzzy", |
520 "--statistics", |
520 "--statistics", |
521 ] |
521 ] |
553 return |
553 return |
554 |
554 |
555 if self.__ensurePybabelConfigured(): |
555 if self.__ensurePybabelConfigured(): |
556 workdir = self.__project.getApplication()[0] |
556 workdir = self.__project.getApplication()[0] |
557 translationsDirectory = self.__e5project.getAbsoluteUniversalPath( |
557 translationsDirectory = self.__e5project.getAbsoluteUniversalPath( |
558 self.__project.getData("pybabel", "translationsDirectory")) |
558 self.__project.getData("flask-babel", "translationsDirectory")) |
559 |
559 |
560 argsList = [] |
560 argsList = [] |
561 for loc in locales: |
561 for loc in locales: |
562 argsList.append([ |
562 argsList.append([ |
563 "compile", |
563 "compile", |
564 "--domain={0}".format( |
564 "--domain={0}".format( |
565 self.__project.getData("pybabel", "domain")), |
565 self.__project.getData("flask-babel", "domain")), |
566 "--directory={0}".format( |
566 "--directory={0}".format( |
567 os.path.relpath(translationsDirectory, workdir)), |
567 os.path.relpath(translationsDirectory, workdir)), |
568 "--use-fuzzy", |
568 "--use-fuzzy", |
569 "--statistics", |
569 "--statistics", |
570 "--locale={0}".format(loc), |
570 "--locale={0}".format(loc), |
596 title = self.tr("Updating message catalogs") |
596 title = self.tr("Updating message catalogs") |
597 |
597 |
598 if self.__ensurePybabelConfigured(): |
598 if self.__ensurePybabelConfigured(): |
599 workdir = self.__project.getApplication()[0] |
599 workdir = self.__project.getApplication()[0] |
600 translationsDirectory = self.__e5project.getAbsoluteUniversalPath( |
600 translationsDirectory = self.__e5project.getAbsoluteUniversalPath( |
601 self.__project.getData("pybabel", "translationsDirectory")) |
601 self.__project.getData("flask-babel", "translationsDirectory")) |
602 potFile = self.__e5project.getAbsoluteUniversalPath( |
602 potFile = self.__e5project.getAbsoluteUniversalPath( |
603 self.__project.getData("pybabel", "catalogFile")) |
603 self.__project.getData("flask-babel", "catalogFile")) |
604 |
604 |
605 args = [ |
605 args = [ |
606 "--domain={0}".format( |
606 "--domain={0}".format( |
607 self.__project.getData("pybabel", "domain")), |
607 self.__project.getData("flask-babel", "domain")), |
608 "--input-file={0}".format(os.path.relpath(potFile, workdir)), |
608 "--input-file={0}".format(os.path.relpath(potFile, workdir)), |
609 "--output-dir={0}".format( |
609 "--output-dir={0}".format( |
610 os.path.relpath(translationsDirectory, workdir)), |
610 os.path.relpath(translationsDirectory, workdir)), |
611 ] |
611 ] |
612 if not withObsolete: |
612 if not withObsolete: |
651 return |
651 return |
652 |
652 |
653 if self.__ensurePybabelConfigured(): |
653 if self.__ensurePybabelConfigured(): |
654 workdir = self.__project.getApplication()[0] |
654 workdir = self.__project.getApplication()[0] |
655 translationsDirectory = self.__e5project.getAbsoluteUniversalPath( |
655 translationsDirectory = self.__e5project.getAbsoluteUniversalPath( |
656 self.__project.getData("pybabel", "translationsDirectory")) |
656 self.__project.getData("flask-babel", "translationsDirectory")) |
657 potFile = self.__e5project.getAbsoluteUniversalPath( |
657 potFile = self.__e5project.getAbsoluteUniversalPath( |
658 self.__project.getData("pybabel", "catalogFile")) |
658 self.__project.getData("flask-babel", "catalogFile")) |
659 argsList = [] |
659 argsList = [] |
660 for loc in locales: |
660 for loc in locales: |
661 args = [ |
661 args = [ |
662 "update", |
662 "update", |
663 "--domain={0}".format( |
663 "--domain={0}".format( |
664 self.__project.getData("pybabel", "domain")), |
664 self.__project.getData("flask-babel", "domain")), |
665 "--input-file={0}".format( |
665 "--input-file={0}".format( |
666 os.path.relpath(potFile, workdir)), |
666 os.path.relpath(potFile, workdir)), |
667 "--output-dir={0}".format( |
667 "--output-dir={0}".format( |
668 os.path.relpath(translationsDirectory, workdir)), |
668 os.path.relpath(translationsDirectory, workdir)), |
669 "--locale={0}".format(loc), |
669 "--locale={0}".format(loc), |