Files
2024-02-15 17:01:50 +00:00

55 lines
1.5 KiB
Python
Executable File

#!/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)
if __name__ == "__main__":
cli()