#!/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()