forked from 0ad/0ad
54 lines
1.7 KiB
Python
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)
|