Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

i18n: Only include editor translations above a threshold #54024

Merged
merged 1 commit into from
Oct 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions doc/translations/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,24 @@ merge:

check:
@for po in $(POFILES); do msgfmt -c $$po -o /dev/null; done

# Generate completion ratio from statistics string such as:
# 2775 translated messages, 272 fuzzy translations, 151 untranslated messages.
# First number can be 0, second and third numbers are only present if non-zero.
include-list:
@list=""; \
threshold=0.10; \
for po in $(POFILES); do \
res=`msgfmt --statistics $$po -o /dev/null 2>&1 | sed 's/[^0-9,]*//g'`; \
complete=`cut -d',' -f1 <<< $$res`; \
fuzzy_or_untranslated=`cut -d',' -f2 <<< $$res`; \
untranslated_maybe=`cut -d',' -f3 <<< $$res`; \
if [ -z "$$fuzzy_or_untranslated" ]; then fuzzy_or_untranslated=0; fi; \
if [ -z "$$untranslated_maybe" ]; then untranslated_maybe=0; fi; \
incomplete=`expr $$fuzzy_or_untranslated + $$untranslated_maybe`; \
if `awk "BEGIN {exit !($$complete / ($$complete + $$incomplete) > $$threshold)}"`; then \
lang=`basename $$po .po`; \
list+="$$lang,"; \
fi; \
done; \
echo $$list;
21 changes: 14 additions & 7 deletions editor/SCsub
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ Import("env")
env.editor_sources = []

import os
import os.path
import glob
import editor_builders

Expand Down Expand Up @@ -59,7 +58,7 @@ if env["tools"]:
else:
docs += Glob(d + "/*.xml") # Custom.

_make_doc_data_class_path(os.path.join(env.Dir("#").abspath, "editor"))
_make_doc_data_class_path(env.Dir("#editor").abspath)

docs = sorted(docs)
env.Depends("#editor/doc_data_compressed.gen.h", docs)
Expand All @@ -69,10 +68,17 @@ if env["tools"]:
env.Run(editor_builders.make_doc_header, "Generating documentation header."),
)

path = env.Dir(".").abspath
# Editor interface and class reference translations incur a significant size
# cost for the editor binary (see godot-proposals#3421).
# To limit it, we only include translations with a high enough completion
# ratio (30% for the editor UI, 10% for the class reference).
# Generated with `make include-list` for each resource.

# Editor translations
tlist = glob.glob(path + "/translations/*.po")
to_include = (
"ar,bg,bn,ca,cs,de,el,eo,es_AR,es,fi,fr,gl,he,hu,id,it,ja,ko,ms,nb,nl,pl,pt_BR,pt,ro,ru,sk,sv,th,tr,uk,vi,zh_CN,zh_TW"
).split(",")
tlist = [env.Dir("#editor/translations").abspath + "/" + f + ".po" for f in to_include]
env.Depends("#editor/editor_translations.gen.h", tlist)
env.CommandNoCache(
"#editor/editor_translations.gen.h",
Expand All @@ -81,7 +87,8 @@ if env["tools"]:
)

# Documentation translations
tlist = glob.glob(env.Dir("#doc").abspath + "/translations/*.po")
to_include = "es,fr,ja,zh_CN".split(",")
tlist = [env.Dir("#doc/translations").abspath + "/" + f + ".po" for f in to_include]
env.Depends("#editor/doc_translations.gen.h", tlist)
env.CommandNoCache(
"#editor/doc_translations.gen.h",
Expand All @@ -90,8 +97,8 @@ if env["tools"]:
)

# Fonts
flist = glob.glob(path + "/../thirdparty/fonts/*.ttf")
flist.extend(glob.glob(path + "/../thirdparty/fonts/*.otf"))
flist = glob.glob(env.Dir("#thirdparty").abspath + "/fonts/*.ttf")
flist.extend(glob.glob(env.Dir("#thirdparty").abspath + "/fonts/*.otf"))
flist.sort()
env.Depends("#editor/builtin_fonts.gen.h", flist)
env.CommandNoCache(
Expand Down
21 changes: 21 additions & 0 deletions editor/translations/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,24 @@ merge:

check:
@for po in $(POFILES); do msgfmt -c $$po -o /dev/null; done

# Generate completion ratio from statistics string such as:
# 2775 translated messages, 272 fuzzy translations, 151 untranslated messages.
# First number can be 0, second and third numbers are only present if non-zero.
include-list:
@list=""; \
threshold=0.30; \
for po in $(POFILES); do \
res=`msgfmt --statistics $$po -o /dev/null 2>&1 | sed 's/[^0-9,]*//g'`; \
complete=`cut -d',' -f1 <<< $$res`; \
fuzzy_or_untranslated=`cut -d',' -f2 <<< $$res`; \
untranslated_maybe=`cut -d',' -f3 <<< $$res`; \
if [ -z "$$fuzzy_or_untranslated" ]; then fuzzy_or_untranslated=0; fi; \
if [ -z "$$untranslated_maybe" ]; then untranslated_maybe=0; fi; \
incomplete=`expr $$fuzzy_or_untranslated + $$untranslated_maybe`; \
if `awk "BEGIN {exit !($$complete / ($$complete + $$incomplete) > $$threshold)}"`; then \
lang=`basename $$po .po`; \
list+="$$lang,"; \
fi; \
done; \
echo $$list;