|
47 | 47 | import sys
|
48 | 48 | import os
|
49 | 49 | import tarfile
|
| 50 | +from xml.etree import ElementTree |
50 | 51 |
|
51 | 52 | if "GRAMPSPATH" in os.environ:
|
52 | 53 | GRAMPSPATH = os.environ["GRAMPSPATH"]
|
@@ -160,6 +161,8 @@ def cleanup(addon_dir):
|
160 | 161 | #'%s/po/template.pot' % addon_dir,
|
161 | 162 | '%s/po/*-global.po' % addon_dir,
|
162 | 163 | '%s/po/*-temp.po' % addon_dir,
|
| 164 | + '%s/po/??.po' % addon_dir, |
| 165 | + '%s/po/?????.po' % addon_dir, |
163 | 166 | '%s/*.pyc' % addon_dir,
|
164 | 167 | '%s/*.pyo' % addon_dir]
|
165 | 168 | for pat in patterns:
|
@@ -208,7 +211,6 @@ def tar_filt(tinfo):
|
208 | 211 | dirs = [addon]
|
209 | 212 | if len(sys.argv) == 4:
|
210 | 213 | from gramps.gen.plug import make_environment, PTYPE_STR
|
211 |
| - from xml.etree import ElementTree |
212 | 214 |
|
213 | 215 | def register(ptype, **kwargs):
|
214 | 216 | global plugins
|
@@ -237,8 +239,7 @@ def register(ptype, **kwargs):
|
237 | 239 | if not listed:
|
238 | 240 | continue # skip this one if not listed
|
239 | 241 |
|
240 |
| - mkdir(r("%(addon)s/po")) |
241 |
| - mkdir("%(addon)s/locale") |
| 242 | + mkdir("%(addon)s/po") |
242 | 243 | system('''xgettext --language=Python --keyword=_ --keyword=N_'''
|
243 | 244 | ''' --from-code=UTF-8'''
|
244 | 245 | ''' -o "%(addon)s/po/template.pot" "%(addon)s"/*.py ''')
|
@@ -340,12 +341,9 @@ def register(ptype, **kwargs):
|
340 | 341 | '''"%(addon)s/po/%(locale)s-temp.po" '''
|
341 | 342 | '''"%(addon)s/po/%(locale)s-local.po" '''
|
342 | 343 | '''-o "%(addon)s/po/%(locale)s-local.po.2" ''')
|
343 |
| - system('''cp "%(addon)s/po/%(locale)s-local.po" ''' |
344 |
| - '''"%(addon)s/po/%(locale)s-local.po.1" ''') |
345 |
| - system('''cp "%(addon)s/po/%(locale)s-local.po.2" ''' |
346 |
| - '''"%(addon)s/po/%(locale)s-local.po" ''') |
347 |
| - system('''rm -v "%(addon)s/po/%(locale)s-local.po.1" ''' |
348 |
| - '''"%(addon)s/po/%(locale)s-local.po.2" ''') |
| 344 | + os.remove(r("%(addon)s/po/%(locale)s-local.po")) |
| 345 | + os.rename(r("%(addon)s/po/%(locale)s-local.po.2"), |
| 346 | + r("%(addon)s/po/%(locale)s-local.po")) |
349 | 347 | # # Done!
|
350 | 348 | echo('''\nYou can edit "%(addon)s/po/%(locale)s-local.po"''')
|
351 | 349 |
|
@@ -519,6 +517,7 @@ def register(ptype, **kwargs):
|
519 | 517 | # Build it.
|
520 | 518 | do_tar(sfiles)
|
521 | 519 | print("***Rebuilt: %s" % addon)
|
| 520 | + |
522 | 521 | # Add addon to newly created listing (equivalent to 'listing all')
|
523 | 522 | for lang in languages:
|
524 | 523 | gpr_bad = False # to flag a bad gpr
|
@@ -559,6 +558,45 @@ def register(ptype, **kwargs):
|
559 | 558 | if gpr_bad or not do_list:
|
560 | 559 | break
|
561 | 560 | cleanup(addon)
|
| 561 | + if todo: # make an updated pot file |
| 562 | + mkdir("%(addon)s/po") |
| 563 | + system('''xgettext --language=Python --keyword=_ --keyword=N_''' |
| 564 | + ''' --from-code=UTF-8''' |
| 565 | + ''' -o "%(addon)s/po/temp.pot" "%(addon)s"/*.py ''') |
| 566 | + fnames = glob.glob("%s/*.glade" % addon) |
| 567 | + if fnames: |
| 568 | + system('''xgettext -j --add-comments -L Glade ''' |
| 569 | + '''--from-code=UTF-8 -o "%(addon)s/po/temp.pot" ''' |
| 570 | + '''"%(addon)s"/*.glade''') |
| 571 | + |
| 572 | + # scan for xml files and get translation text where the tag |
| 573 | + # starts with an '_'. Create a .h file with the text strings |
| 574 | + fnames = glob.glob("%s/*.xml" % addon) |
| 575 | + for filename in fnames: |
| 576 | + tree = ElementTree.parse(filename) |
| 577 | + root = tree.getroot() |
| 578 | + with open(filename + '.h', 'w', encoding='utf-8') as head: |
| 579 | + for key in root.iter(): |
| 580 | + if key.tag.startswith('_') and len(key.tag) > 1: |
| 581 | + msg = key.text.replace('"', '\\"') |
| 582 | + txl = '_("%s")\n' % msg |
| 583 | + head.write(txl) |
| 584 | + root.clear() |
| 585 | + # now append XML text to the pot |
| 586 | + system('''xgettext -j --keyword=_ --from-code=UTF-8 ''' |
| 587 | + '''--language=Python -o "%(addon)s/po/temp.pot" ''' |
| 588 | + '''"%(filename)s.h"''') |
| 589 | + os.remove(filename + '.h') |
| 590 | + if os.path.isfile(r('''%(addon)s/po/template.pot''')): |
| 591 | + # we do a merge so changes to header are not lost |
| 592 | + system('''msgmerge --no-fuzzy-matching -U ''' |
| 593 | + '''%(addon)s/po/template.pot ''' |
| 594 | + '''%(addon)s/po/temp.pot''') |
| 595 | + os.remove(r('''%(addon)s/po/temp.pot''')) |
| 596 | + else: |
| 597 | + os.rename(r('''%(addon)s/po/temp.pot'''), |
| 598 | + r('''%(addon)s/po/template.pot''')) |
| 599 | + # write out the listings |
562 | 600 | for lang in languages:
|
563 | 601 | fp = open(r("../addons/%(gramps_version)s/listings/") +
|
564 | 602 | ("addons-%s.txt" % lang), "w", encoding="utf-8",
|
@@ -744,12 +782,8 @@ def register(ptype, **kwargs):
|
744 | 782 | f.read(),
|
745 | 783 | gpr.encode("utf-8", errors="backslashreplace"),
|
746 | 784 | 'exec')
|
747 |
| - try: |
748 |
| - exec(code, make_environment(_=local_gettext), |
| 785 | + exec(code, make_environment(_=local_gettext), |
749 | 786 | {"register": register, "build_script": True})
|
750 |
| - except: |
751 |
| - print('%s failed to register its .gpr.py file' % addon) |
752 |
| - continue |
753 | 787 | for p in plugins:
|
754 | 788 | tgz_file = "%s.addon.tgz" % gpr.split(os.sep, 1)[0]
|
755 | 789 | tgz_exists = os.path.isfile(
|
|
0 commit comments