[Bf-translations-svn] SVN commit: /data/svn/bf-translations [453] trunk/po/tools: Updates to take into account recent changes in Blender ( bl_rna structs can now also have a translation context for there UI name), and general better context handling in generating scripts.

bf-translations at blender.org bf-translations at blender.org
Fri Mar 16 16:47:15 CET 2012


Revision: 453
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-translations&revision=453
Author:   mont29
Date:     2012-03-16 15:47:14 +0000 (Fri, 16 Mar 2012)
Log Message:
-----------
Updates to take into account recent changes in Blender (bl_rna structs can now also have a translation context for there UI name), and general better context handling in generating scripts.

WARNING: New settings, please update your settings.py from settings_template.py, if you use those scripts...

Modified Paths:
--------------
    trunk/po/tools/_update_msg.py
    trunk/po/tools/check_po.py
    trunk/po/tools/settings_template.py
    trunk/po/tools/update_pot.py

Modified: trunk/po/tools/_update_msg.py
===================================================================
--- trunk/po/tools/_update_msg.py	2012-03-14 11:21:43 UTC (rev 452)
+++ trunk/po/tools/_update_msg.py	2012-03-16 15:47:14 UTC (rev 453)
@@ -38,6 +38,7 @@
 FILE_NAME_MESSAGES = settings.FILE_NAME_MESSAGES
 COMMENT_PREFIX     = settings.COMMENT_PREFIX
 CONTEXT_PREFIX     = settings.CONTEXT_PREFIX
+CONTEXT_DEFAULT    = settings.CONTEXT_DEFAULT
 
 
 def dump_messages_rna(messages):
@@ -129,46 +130,36 @@
                 continue
 
             msgsrc = "bpy.types.{}.{}".format(bl_rna.identifier, prop.identifier)
-            if prop.name and prop.name != prop.identifier:
-                if prop.translation_context:
-                    fullname = "{}{} {}".format(CONTEXT_PREFIX,
-                                                prop.translation_context,
-                                                prop.name)
-                else:
-                    fullname = prop.name
-                messages.setdefault(fullname, []).append(msgsrc)
+            context = getattr(prop, "translation_context", CONTEXT_DEFAULT)
+            if prop.name and (prop.name != prop.identifier or context):
+                messages.setdefault((context, prop.name), []).append(msgsrc)
             if prop.description:
-                messages.setdefault(prop.description, []).append(msgsrc)
+                messages.setdefault((CONTEXT_DEFAULT, prop.description), []).append(msgsrc)
             if isinstance(prop, bpy.types.EnumProperty):
                 for item in prop.enum_items:
                     msgsrc = "bpy.types.{}.{}:'{}'".format(bl_rna.identifier,
                                                             prop.identifier,
                                                             item.identifier)
                     if item.name and item.name != item.identifier:
-                        if prop.translation_context:
-                            fullname = "{}{} {}".format(CONTEXT_PREFIX,
-                                                        prop.translation_context,
-                                                        item.name)
-                        else:
-                            fullname = item.name
-                        messages.setdefault(fullname, []).append(msgsrc)
+                        messages.setdefault((context, item.name), []).append(msgsrc)
                     if item.description:
-                        messages.setdefault(item.description, []).append(msgsrc)
+                        messages.setdefault((CONTEXT_DEFAULT, item.description), []).append(msgsrc)
 
     def walkRNA(bl_rna):
         if filterRNA(bl_rna):
             return
 
         msgsrc = ".".join(("bpy.types", bl_rna.identifier))
+        context = getattr(bl_rna, "translation_context", CONTEXT_DEFAULT)
 
-        if bl_rna.name and bl_rna.name != bl_rna.identifier:
-            messages.setdefault(bl_rna.name, []).append(msgsrc)
+        if bl_rna.name and (bl_rna.name != bl_rna.identifier or context):
+            messages.setdefault((context, bl_rna.name), []).append(msgsrc)
 
         if bl_rna.description:
-            messages.setdefault(bl_rna.description, []).append(msgsrc)
+            messages.setdefault((CONTEXT_DEFAULT, bl_rna.description), []).append(msgsrc)
 
         if hasattr(bl_rna, 'bl_label') and  bl_rna.bl_label:
-            messages.setdefault(bl_rna.bl_label, []).append(msgsrc)
+            messages.setdefault((context, bl_rna.bl_label), []).append(msgsrc)
 
         walkProperties(bl_rna)
 
@@ -178,7 +169,7 @@
     def walk_keymap_hierarchy(hier, msgsrc_prev):
         for lvl in hier:
             msgsrc = "{}.{}".format(msgsrc_prev, lvl[1])
-            messages.setdefault(lvl[0], []).append(msgsrc)
+            messages.setdefault((CONTEXT_DEFAULT, lvl[0]), []).append(msgsrc)
 
             if lvl[3]:
                 walk_keymap_hierarchy(lvl[3], msgsrc)
@@ -270,7 +261,7 @@
             eval_str = ast.literal_eval(node)
             if eval_str:
                 msgsrc = "{}:{}".format(fp_rel, node.lineno)
-                messages.setdefault(eval_str, []).append(msgsrc)
+                messages.setdefault((CONTEXT_DEFAULT, eval_str), []).append(msgsrc)
             return
 
         for nd in ast.iter_child_nodes(node):
@@ -375,7 +366,7 @@
     else:
         messages = {}
 
-    messages[""] = []
+    messages[(CONTEXT_DEFAULT, "")] = []
 
     # Enable all wanted addons.
     enable_addons()
@@ -386,22 +377,23 @@
     # get strings from UI layout definitions text="..." args
     dump_messages_pytext(messages)
 
-    del messages[""]
+    del messages[(CONTEXT_DEFAULT, "")]
 
     num_written = 0
     num_filtered = 0
     with open(FILE_NAME_MESSAGES, 'w', encoding="utf8") as message_file:
-        for key, value in messages.items():
+        for (ctx, key), value in messages.items():
             # filter out junk values
             if filter_message(key):
                 num_filtered += 1
                 continue
 
             # Remove newlines in key and values!
-            for msgsrc in value:
-                message_file.write("".join((COMMENT_PREFIX,
-                                            msgsrc.replace("\n", ""), "\n")))
-            message_file.write("".join((key.replace("\n", ""), "\n")))
+            message_file.write("\n".join(COMMENT_PREFIX + msgsrc.replace("\n", "") for msgsrc in value))
+            message_file.write("\n")
+            if ctx:
+                message_file.write(CONTEXT_PREFIX + ctx.replace("\n", "") + "\n")
+            message_file.write(key.replace("\n", "") + "\n")
             num_written += 1
 
     print("Written {} messages to: {} ({} were filtered out)." \

Modified: trunk/po/tools/check_po.py
===================================================================
--- trunk/po/tools/check_po.py	2012-03-14 11:21:43 UTC (rev 452)
+++ trunk/po/tools/check_po.py	2012-03-16 15:47:14 UTC (rev 453)
@@ -142,6 +142,13 @@
                         ret = t
 
     if args.stats and glob_stats["nbr"] != 0.0:
+        nbr_contexts = len(glob_stats["contexts"]-{""})
+        if nbr_contexts != 1:
+            if nbr_contexts == 0:
+                nbr_contexts = "No"
+            _ctx_txt = "s are"
+        else:
+            _ctx_txt = " is"
         print("\nAverage stats for all {:.0f} processed files:\n" \
               "    {:>6.1%} done!\n" \
               "    {:>6.1%} of messages are tooltips.\n" \
@@ -150,13 +157,13 @@
               "    {:>6.1%} of messages are commented.\n" \
               "    The org msgids are currently made of {} signs.\n" \
               "    All processed translations are currently made of {} signs.\n" \
-              "    {} specific contexts are present:\n            {}" \
+              "    {} specific context{} present:\n            {}\n" \
               "".format(glob_stats["nbr"], glob_stats["lvl"]/glob_stats["nbr"],
                         glob_stats["lvl_ttips"]/glob_stats["nbr"],
                         glob_stats["lvl_trans_ttips"]/glob_stats["nbr"],
                         glob_stats["lvl_ttips_in_trans"]/glob_stats["nbr"],
                         glob_stats["lvl_comm"]/glob_stats["nbr"], glob_stats["nbr_signs"],
-                        glob_stats["nbr_trans_signs"], len(glob_stats["contexts"]-{""}),
+                        glob_stats["nbr_trans_signs"], nbr_contexts, _ctx_txt,
                         "\n            ".join(glob_stats["contexts"]-{""})))
 
     return ret

Modified: trunk/po/tools/settings_template.py
===================================================================
--- trunk/po/tools/settings_template.py	2012-03-14 11:21:43 UTC (rev 452)
+++ trunk/po/tools/settings_template.py	2012-03-16 15:47:14 UTC (rev 453)
@@ -41,11 +41,14 @@
 # The comment prefix used in generated messages.txt file.
 CONTEXT_PREFIX = "MSGCTXT:"
 
+# Default context.
+CONTEXT_DEFAULT = ""
+
 # The gettext domain.
 DOMAIN = "blender"
 
 # The gettext keywords.
-GETTEXT_KEYWORDS = ("IFACE_", "TIP_", "N_")
+GETTEXT_KEYWORDS = ("IFACE_", "CTX_IFACE_" "TIP_", "CTX_TIP_", "N_")
 
 # Should po parser warn when finding a first letter not capitalized?
 WARN_MSGID_NOT_CAPITALIZED = True

Modified: trunk/po/tools/update_pot.py
===================================================================
--- trunk/po/tools/update_pot.py	2012-03-14 11:21:43 UTC (rev 452)
+++ trunk/po/tools/update_pot.py	2012-03-16 15:47:14 UTC (rev 453)
@@ -113,6 +113,7 @@
     num_present = 0
     with open(FILE_NAME_MESSAGES, 'r', "utf-8") as handle:
         msgsrc_ls = []
+        context = ""
         for line in handle:
             line = utils.stripeol(line)
 
@@ -120,14 +121,12 @@
             if line.startswith(COMMENT_PREFIX):
                 msgsrc_ls.append("".join(("#: ",
                                           line[len(COMMENT_PREFIX):].strip())))
+            elif line.startswith(CONTEXT_PREFIX):
+                context = line[len(CONTEXT_PREFIX):]
             else:
                 line = line.replace("\\", "\\\\")
                 line = line.replace("\"", "\\\"")
                 line = line.replace("\t", "\\t")
-                context = ""
-                if line.startswith(CONTEXT_PREFIX):
-                    context = line[len(CONTEXT_PREFIX):].split()[0]
-                    line = line[len(CONTEXT_PREFIX)+len(context)+1:]
                 key = (line, context)
                 if (WARN_NC and line not in NC_ALLOWED and
                     line[0].isalpha() and not line[0].isupper()):
@@ -149,6 +148,7 @@
                               "both messages.txt and xgettext-generated " \
                               "messages!\n             \"{}\"".format(line))
                 msgsrc_ls = []
+                context = ""
 
     # Write back all messages into blender.pot.
     utils.write_messages(FILE_NAME_POT, pot_messages, states["comm_msg"],



More information about the Bf-translations-svn mailing list