mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
55 lines
1.5 KiB
Python
Executable File
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()
|