90 lines
2.5 KiB
Python
90 lines
2.5 KiB
Python
import click
|
|
|
|
from frappe.commands import pass_context
|
|
from frappe.exceptions import SiteNotSpecifiedError
|
|
|
|
|
|
@click.command("generate-pot-file", help="Translation: generate POT file")
|
|
@click.option("--app", help="Only generate for this app. eg: frappe")
|
|
@pass_context
|
|
def generate_pot_file(context, app: str | None = None):
|
|
from frappe.gettext.translate import generate_pot
|
|
|
|
if not app:
|
|
connect_to_site(context.sites[0] if context.sites else None)
|
|
|
|
generate_pot(app)
|
|
|
|
|
|
@click.command("compile-po-to-mo", help="Translation: compile PO files to MO files")
|
|
@click.option("--app", help="Only compile for this app. eg: frappe")
|
|
@click.option("--locale", help="Compile transaltions only for this locale. eg: de")
|
|
@pass_context
|
|
def compile_translations(context, app: str | None = None, locale: str = None):
|
|
from frappe.gettext.translate import compile
|
|
|
|
if not app:
|
|
connect_to_site(context.sites[0] if context.sites else None)
|
|
|
|
compile(app, locale)
|
|
|
|
|
|
@click.command("csv-to-po", help="Translation: migrate from CSV files (old) to PO files (new)")
|
|
@click.option("--app", help="Only migrate for this app. eg: frappe")
|
|
@click.option("--locale", help="Compile translations only for this locale. eg: de")
|
|
@pass_context
|
|
def csv_to_po(context, app: str | None = None, locale: str = None):
|
|
from frappe.gettext.translate import migrate
|
|
|
|
if not app:
|
|
connect_to_site(context.sites[0] if context.sites else None)
|
|
|
|
migrate(app, locale)
|
|
|
|
|
|
@click.command(
|
|
"update-po-files",
|
|
help="""Translation: sync PO files with POT file.
|
|
You might want to run generate-pot-file first.""",
|
|
)
|
|
@click.option("--app", help="Only update for this app. eg: frappe")
|
|
@pass_context
|
|
def update_po_files(context, app: str | None = None):
|
|
from frappe.gettext.translate import update_po
|
|
|
|
if not app:
|
|
connect_to_site(context.sites[0] if context.sites else None)
|
|
|
|
update_po(app)
|
|
|
|
|
|
@click.command("create-po-file", help="Translation: create a new PO file for a locale")
|
|
@click.argument("locale", nargs=1)
|
|
@click.option("--app", help="Only create for this app. eg: frappe")
|
|
@pass_context
|
|
def create_po_file(context, locale: str, app: str | None = None):
|
|
"""Create PO file for lang code"""
|
|
from frappe.gettext.translate import new_po
|
|
|
|
if not app:
|
|
connect_to_site(context.sites[0] if context.sites else None)
|
|
|
|
new_po(locale, app)
|
|
|
|
|
|
def connect_to_site(site):
|
|
from frappe import connect
|
|
|
|
if not site:
|
|
raise SiteNotSpecifiedError
|
|
|
|
connect(site=site)
|
|
|
|
|
|
commands = [
|
|
generate_pot_file,
|
|
compile_translations,
|
|
csv_to_po,
|
|
update_po_files,
|
|
create_po_file,
|
|
]
|