0ad/source/tools/i18n/i18n_helper/catalog.py

54 lines
1.7 KiB
Python

"""Wrapper around babel Catalog / .po handling."""
from datetime import datetime
from babel.messages.catalog import Catalog as BabelCatalog
from babel.messages.pofile import read_po, write_po
class Catalog(BabelCatalog):
"""Wraps a BabelCatalog for convenience."""
def __init__(self, *args, project=None, copyright_holder=None, **other_kwargs):
date = datetime.now()
super().__init__(
*args,
header_comment=(
f"# Translation template for {project}.\n"
f"# Copyright (C) {date.year} {copyright_holder}\n"
f"# This file is distributed under the same license as the {project} project."
),
copyright_holder=copyright_holder,
fuzzy=False,
charset="utf-8",
creation_date=date,
revision_date=date,
**other_kwargs,
)
self._project = project
@BabelCatalog.mime_headers.getter
def mime_headers(self):
headers = []
for name, value in super().mime_headers:
if name in {
"PO-Revision-Date",
"POT-Creation-Date",
"MIME-Version",
"Content-Type",
"Content-Transfer-Encoding",
"Plural-Forms",
}:
headers.append((name, value))
return [("Project-Id-Version", self._project), *headers]
@staticmethod
def read_from(file_path, locale=None):
with open(file_path, "r+", encoding="utf-8") as fd:
return read_po(fd, locale=locale)
def write_to(self, file_path):
with open(file_path, "wb+") as fd:
return write_po(fileobj=fd, catalog=self, width=90, sort_by_file=True)