1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-22 15:06:45 +00:00

Add binary MO translation file support. Add brotli decoder and WOFF2 support.

Use smaller .mo files instead of .po, if gettext is available.
Convert editor fonts to .woff2 format.
This commit is contained in:
bruvzg
2022-03-25 19:31:09 +02:00
parent 56e0c38c27
commit fd2fba7c2c
54 changed files with 14713 additions and 150 deletions

View File

@@ -5,6 +5,10 @@ All such functions are invoked in a subprocess on Windows to prevent build flaki
"""
import os
import os.path
import shutil
import subprocess
import tempfile
import uuid
from platform_methods import subprocess_main
from compat import encode_utf8, byte_to_str, open_utf8
@@ -89,10 +93,40 @@ def make_translations_header(target, source, env, category):
sorted_paths = sorted(source, key=lambda path: os.path.splitext(os.path.basename(path))[0])
msgfmt_available = shutil.which("msgfmt") is not None
if not msgfmt_available:
print("WARNING: msgfmt is not found, using .po files instead of .mo")
xl_names = []
for i in range(len(sorted_paths)):
with open(sorted_paths[i], "rb") as f:
buf = f.read()
if msgfmt_available:
mo_path = os.path.join(tempfile.gettempdir(), uuid.uuid4().hex + ".mo")
cmd = "msgfmt " + sorted_paths[i] + " --no-hash -o " + mo_path
try:
subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE).communicate()
with open(mo_path, "rb") as f:
buf = f.read()
except OSError as e:
print(
"WARNING: msgfmt execution failed, using .po file instead of .mo: path=%r; [%s] %s"
% (sorted_paths[i], e.__class__.__name__, e)
)
with open(sorted_paths[i], "rb") as f:
buf = f.read()
finally:
try:
os.remove(mo_path)
except OSError as e:
# Do not fail the entire build if it cannot delete a temporary file
print(
"WARNING: Could not delete temporary .mo file: path=%r; [%s] %s"
% (mo_path, e.__class__.__name__, e)
)
else:
with open(sorted_paths[i], "rb") as f:
buf = f.read()
decomp_size = len(buf)
buf = zlib.compress(buf)
name = os.path.splitext(os.path.basename(sorted_paths[i]))[0]