123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #!/usr/bin/env python
- import os
- import click
- from babel.messages.pofile import read_po, write_po
- JS_EXTENSIONS = (".js", ".jsx", ".ts", ".tsx")
- def merge_message(msg, frontend_msg):
- non_js_locations = [
- (fn, lineno) for fn, lineno in msg.locations if not fn.endswith(JS_EXTENSIONS)
- ]
- if (not msg.user_comments or not non_js_locations) and frontend_msg.user_comments:
- msg.user_comments = frontend_msg.usr_comments
- msg.locations = non_js_locations + frontend_msg.locations
- @click.command()
- @click.argument("locale")
- def cli(locale):
- catalog_file = "src/sentry/locale/%s/LC_MESSAGES/django.po" % locale
- frontend_file = "build/javascript.po"
- if not os.path.isfile(frontend_file):
- return
- with open(catalog_file) as f:
- catalog = read_po(f, locale)
- with open(frontend_file) as f:
- frontend = read_po(f, locale)
- for frontend_msg in frontend:
- if frontend_msg.id == "":
- continue
- msg = catalog.get(frontend_msg.id)
- # If the message is not yet in the catalog, then insert it as
- # such.
- if msg is None:
- msg = frontend_msg
- # Otherwise merge the record. Locations are merged by removing
- # all javascript locations and inserting new ones.
- else:
- merge_message(msg, frontend_msg)
- catalog[msg.id] = msg
- with open(catalog_file, "wb") as f:
- write_po(f, catalog, no_location=True)
- if __name__ == "__main__":
- cli()
|