[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40646] trunk/blender/po: i18n: wrote small instruction for translators

Sergey Sharybin g.ulairi at gmail.com
Wed Sep 28 10:13:07 CEST 2011


Revision: 40646
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40646
Author:   nazgul
Date:     2011-09-28 08:13:06 +0000 (Wed, 28 Sep 2011)
Log Message:
-----------
i18n: wrote small instruction for translators

- Added po/README.txt file with translation instructions
- If update_po and update_mo scripts now allows to provide list
  of languages which should be handled only, i.e.

	./update_mo.py ru

- Removed obsolete file from POTFILES.in

Modified Paths:
--------------
    trunk/blender/po/POTFILES.in
    trunk/blender/po/ne.po
    trunk/blender/po/update_mo.py
    trunk/blender/po/update_po.py

Added Paths:
-----------
    trunk/blender/po/README.txt

Property Changed:
----------------
    trunk/blender/po/ne.po

Modified: trunk/blender/po/POTFILES.in
===================================================================
--- trunk/blender/po/POTFILES.in	2011-09-28 08:03:02 UTC (rev 40645)
+++ trunk/blender/po/POTFILES.in	2011-09-28 08:13:06 UTC (rev 40646)
@@ -1,6 +1,5 @@
 release/scripts/modules/rna_prop_ui.py
 
-release/scripts/startup/bl_operators/animsys_update.py
 release/scripts/startup/bl_operators/object.py
 release/scripts/startup/bl_operators/object_align.py
 release/scripts/startup/bl_operators/object_quick_effects.py

Added: trunk/blender/po/README.txt
===================================================================
--- trunk/blender/po/README.txt	                        (rev 0)
+++ trunk/blender/po/README.txt	2011-09-28 08:13:06 UTC (rev 40646)
@@ -0,0 +1,61 @@
+Blender translation HOWTO
+=========================
+
+I'll try briefly explain how translation works and how to update translation files.
+
+1. How it works
+---------------
+
+This folder contains source files for translation system. This source files have
+got .po extension and they've got pretty simple syntax:
+
+msgid "some message id"
+msgstr "translation for this message"
+
+This means when string "some message id" is used as operator name, tooltip, menu
+and so it'll be displayed on the screen as "translation for this message".
+Pretty simple.
+
+This source files are pre-compiled into ../relese/dbin/.blender/locale/<language>/LC_MESSAGES/blender.mo,
+so they aren't getting compiled every time Blender is compiling to same some time and prevent
+failure on systems which doesn't have needed tools for compiling .po files.
+
+2. How to update translations
+-----------------------------
+
+It's also pretty simple. If you can find string you want to translate in <language>.po
+file as msgid, just write correct msgstr string for it. If msgid is marked as fuzzy,
+i.e.
+
+#, fuzzy
+msgid "some message id"
+msgstr "translation for this message"
+
+it means translation used to exist for this message, but message was changed, so translation
+also have to be updated (it's easier to make new translation based on previos translation).
+When translation was updated, remove line with '#, fuzzy' and it'll work.
+
+If there's no message in .po file you want to translate, probably .po file should be updated.
+Use the following steps for this:
+- With newly compiled blender run `blender --background --python update_msg.py` to update
+  messages.txt file (this file contains strings collected automatically from RNA system and
+  python UI scripts)
+- Run update_pot.py script which will update blender.pot file. This file contains all
+  strings which should be transated.
+- Run update_po.py script to merge all .po files with blender.pot (so all .po files
+  will contain all msgid-s declared in blender.pot) or update_po.py <language> to
+  update only needed .po file(s) to save time when you're busy with translation.
+  But before ocmmit all .po files better be updated.
+
+When you've finished with translation, you should re-compile .po file into .mo file.
+It's also pretty simple: just run update_mo.py script to recompile all languages or
+just update_mo.py <language> to re-compile only needed language(s).
+
+NOTE: msgfmt, msgmerge and xgettext tools should be available in your PATH.
+
+This steps to update template, translation files and compile them can be made in "batch" mode
+using GNUMakefile:
+
+make -f GNUMakefile translations
+
+NOTE: Blender has to be compiled using GNUMakefile first.


Property changes on: trunk/blender/po/ne.po
___________________________________________________________________
Deleted: svn:executable
   - *

Modified: trunk/blender/po/update_mo.py
===================================================================
--- trunk/blender/po/update_mo.py	2011-09-28 08:03:02 UTC (rev 40645)
+++ trunk/blender/po/update_mo.py	2011-09-28 08:13:06 UTC (rev 40646)
@@ -25,6 +25,7 @@
 
 import subprocess
 import os
+import sys
 
 CURRENT_DIR = os.path.dirname(__file__)
 SOURCE_DIR = os.path.normpath(os.path.abspath(os.path.join(CURRENT_DIR, "..")))
@@ -33,21 +34,33 @@
 DOMAIN = "blender"
 
 
+def process_po(po):
+    lang = os.path.basename(po)[:-3]
+
+    # show stats
+    cmd = ("msgfmt",
+        "--statistics",
+        os.path.join(CURRENT_DIR, "%s.po" % lang),
+        "-o",
+        os.path.join(LOCALE_DIR, lang, "LC_MESSAGES", "%s.mo" % DOMAIN),
+        )
+
+    print(" ".join(cmd))
+    process = subprocess.Popen(cmd)
+    process.wait()
+
+
 def main():
-    for po in os.listdir(CURRENT_DIR):
-        if po.endswith(".po"):
-            lang = po[:-3]
-            # show stats
-            cmd = ("msgfmt",
-                "--statistics",
-                os.path.join(CURRENT_DIR, "%s.po" % lang),
-                "-o",
-                os.path.join(LOCALE_DIR, lang, "LC_MESSAGES", "%s.mo" % DOMAIN),
-                )
+    if len(sys.argv) > 1:
+        for lang in sys.argv[1:]:
+            po = os.path.join(CURRENT_DIR, lang + '.po')
 
-            print(" ".join(cmd))
-            process = subprocess.Popen(cmd)
-            process.wait()
+            if os.path.exists(po):
+                process_po(po)
+    else:
+        for po in os.listdir(CURRENT_DIR):
+            if po.endswith(".po"):
+                process_po(po)
 
 if __name__ == "__main__":
     print("\n\n *** Running %r *** \n" % __file__)

Modified: trunk/blender/po/update_po.py
===================================================================
--- trunk/blender/po/update_po.py	2011-09-28 08:03:02 UTC (rev 40645)
+++ trunk/blender/po/update_po.py	2011-09-28 08:13:06 UTC (rev 40646)
@@ -25,29 +25,41 @@
 
 import subprocess
 import os
+import sys
 
 CURRENT_DIR = os.path.dirname(__file__)
 DOMAIN = "blender"
 
 
+def process_po(po):
+    lang = os.path.basename(po)[:-3]
+
+    # update po file
+    cmd = ("msgmerge",
+           "--update",
+           "--lang=%s" % lang,
+           os.path.join(CURRENT_DIR, "%s.po" % lang),
+           os.path.join(CURRENT_DIR, "%s.pot" % DOMAIN),
+           )
+
+    print(" ".join(cmd))
+    process = subprocess.Popen(cmd)
+    process.wait()
+
+
 def main():
-    for po in os.listdir(CURRENT_DIR):
-        if po.endswith(".po"):
-            lang = po[:-3]
+    if len(sys.argv) > 1:
+        for lang in sys.argv[1:]:
+            po = os.path.join(CURRENT_DIR, lang + '.po')
 
-            # update po file
-            cmd = ("msgmerge",
-                   "--update",
-                   "--lang=%s" % lang,
-                   os.path.join(CURRENT_DIR, "%s.po" % lang),
-                   os.path.join(CURRENT_DIR, "%s.pot" % DOMAIN),
-                   )
+            if os.path.exists(po):
+                process_po(po)
+    else:
+        for po in os.listdir(CURRENT_DIR):
+            if po.endswith(".po"):
+                process_po(po)
 
-            print(" ".join(cmd))
-            process = subprocess.Popen(cmd)
-            process.wait()
 
-
 if __name__ == "__main__":
     print("\n\n *** Running %r *** \n" % __file__)
     main()




More information about the Bf-blender-cvs mailing list