Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2012-10-22 18:17:30 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2012-10-22 18:17:30 +0400
commit40da6bb531ebb3b43a9e66f31390498620a9c082 (patch)
tree705404d18206b67da17c0cc0938455486f9ff859 /release/scripts/modules/bl_i18n_utils/update_trunk.py
parent57b7f405a4306d6c8b29fc6cdfc16ab9eb58279a (diff)
Update of the tools for the new "dynamic" i18n menu, to generate the languages file into locale dir...
Diffstat (limited to 'release/scripts/modules/bl_i18n_utils/update_trunk.py')
-rwxr-xr-xrelease/scripts/modules/bl_i18n_utils/update_trunk.py102
1 files changed, 83 insertions, 19 deletions
diff --git a/release/scripts/modules/bl_i18n_utils/update_trunk.py b/release/scripts/modules/bl_i18n_utils/update_trunk.py
index b7f8f375744..859045eafda 100755
--- a/release/scripts/modules/bl_i18n_utils/update_trunk.py
+++ b/release/scripts/modules/bl_i18n_utils/update_trunk.py
@@ -35,38 +35,62 @@ import shutil
try:
import settings
+ import utils
except:
- from . import settings
+ from . import (settings, utils)
+BRANCHES_DIR = settings.BRANCHES_DIR
TRUNK_PO_DIR = settings.TRUNK_PO_DIR
TRUNK_MO_DIR = settings.TRUNK_MO_DIR
+LANGUAGES_CATEGORIES = settings.LANGUAGES_CATEGORIES
+LANGUAGES = settings.LANGUAGES
+LANGUAGES_FILE = settings.LANGUAGES_FILE
+
PY3 = settings.PYTHON3_EXEC
+def find_matching_po(languages, stats):
+ """Match languages defined in LANGUAGES setting to relevant po, if possible!"""
+ ret = []
+ for uid, label, org_key in languages:
+ key = org_key
+ if key not in stats:
+ # Try to simplify the key (eg from es_ES to es).
+ if '_' in org_key:
+ key = org_key[0:org_key.index('_')]
+ if '@' in org_key:
+ key = key + org_key[org_key.index('@'):]
+ if key in stats:
+ ret.append((stats[key], uid, label, org_key))
+ else:
+ # Mark invalid entries, so that we can put them in the languages file,
+ # but commented!
+ ret.append((0.0, -uid, label, org_key))
+ return ret
+
def main():
import argparse
- parser = argparse.ArgumentParser(description="" \
- "Update trunk from branches:\n" \
- "* Remove po’s in trunk.\n" \
- "* Copy po’s from branches advanced enough.\n" \
- "* Clean po’s in trunk.\n" \
- "* Compile po’s in trunk in mo’s, keeping " \
- "track of those failing.\n" \
- "* Remove po’s and mo’s (and their dir’s) that " \
- "failed to compile or are no more present in trunk.")
- parser.add_argument('-t', '--threshold', type=int,
- help="Import threshold, as a percentage.")
- parser.add_argument('-p', '--po', action="store_false",
- help="Do not remove failing po’s.")
- parser.add_argument('-m', '--mo', action="store_false",
- help="Do not remove failing mo’s.")
- parser.add_argument('langs', metavar='ISO_code', nargs='*',
- help="Restrict processed languages to those.")
+ parser = argparse.ArgumentParser(description=""
+ "Update trunk from branches:\n"
+ "* Remove po’s in trunk.\n"
+ "* Copy po’s from branches advanced enough.\n"
+ "* Clean po’s in trunk.\n"
+ "* Compile po’s in trunk in mo’s, keeping "
+ "track of those failing.\n"
+ "* Remove po’s and mo’s (and their dir’s) that "
+ "failed to compile or are no more present in trunk."
+ "* Generate languages file used by Blender's i18n.")
+ parser.add_argument('-t', '--threshold', type=int, help="Import threshold, as a percentage.")
+ parser.add_argument('-p', '--po', action="store_true", help="Remove failing po’s.")
+ parser.add_argument('-m', '--mo', action="store_true", help="Remove failing mo’s.")
+ parser.add_argument('langs', metavar='ISO_code', nargs='*', help="Restrict processed languages to those.")
args = parser.parse_args()
ret = 0
failed = set()
+ # 'DEFAULT' and en_US are always valid, fully-translated "languages"!
+ stats = {"DEFAULT": 1.0, "en_US": 1.0}
# Remove po’s in trunk.
for po in os.listdir(TRUNK_PO_DIR):
@@ -89,7 +113,7 @@ def main():
# Add in failed all mo’s no more having relevant po’s in trunk.
for lang in os.listdir(TRUNK_MO_DIR):
- if lang == ".svn":
+ if lang in {".svn", LANGUAGES_FILE}:
continue # !!!
if not os.path.exists(os.path.join(TRUNK_PO_DIR, ".".join((lang, "po")))):
failed.add(lang)
@@ -115,6 +139,46 @@ def main():
if t:
ret = t
failed.add(lang)
+ continue
+
+ # Yes, I know, it's the third time we parse each po's here. :/
+ u1, u2, _stats = utils.parse_messages(os.path.join(BRANCHES_DIR, lang, po))
+ stats[lang] = _stats["trans_msg"] / _stats["tot_msg"]
+
+ # Generate languages file used by Blender's i18n system.
+ # First, match all entries in LANGUAGES to a lang in stats, if possible!
+ stats = find_matching_po(LANGUAGES, stats)
+ limits = sorted(LANGUAGES_CATEGORIES, key=lambda it: it[0], reverse=True)
+ print(limits)
+ idx = 0
+ stats = sorted(stats, key=lambda it: it[0], reverse=True)
+ print(stats)
+ langs_cats = [[] for i in range(len(limits))]
+ highest_uid = 0
+ for prop, uid, label, key in stats:
+ print(key, prop)
+ if prop < limits[idx][0]:
+ # Sub-sort languages by iso-codes.
+ langs_cats[idx].sort(key=lambda it: it[2])
+ print(langs_cats)
+ idx += 1
+ langs_cats[idx].append((uid, label, key))
+ if abs(uid) > highest_uid:
+ highest_uid = abs(uid)
+ # Sub-sort last group of languages by iso-codes!
+ langs_cats[idx].sort(key=lambda it: it[2])
+ with open(os.path.join(TRUNK_MO_DIR, LANGUAGES_FILE), 'w', encoding="utf-8") as f:
+ f.write("# Highest ID currently in use: {}\n".format(highest_uid))
+ for cat, langs_cat in zip(limits, langs_cats):
+ # Write "category menu label"...
+ f.write("0:{}:\n".format(cat[1]))
+ # ...and all matching language entries!
+ for uid, label, key in langs_cat:
+ if uid < 0:
+ # Non-existing, commented entry!
+ f.write("# No translation yet! #{}:{}:{}\n".format(-uid, label, key))
+ else:
+ f.write("{}:{}:{}\n".format(uid, label, key))
# Remove failing po’s, mo’s and related dir’s.
for lang in failed: