ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py

changeset 46
e700f73e1c6f
parent 38
f5055c1e4e07
child 47
144b67fd111a
equal deleted inserted replaced
45:cdaaf2526503 46:e700f73e1c6f
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),

eric ide

mercurial