﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=%E5%88%A9%E7%94%A8%E8%80%85%3AMont29%2Fi18n</id>
	<title>利用者:Mont29/i18n - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=%E5%88%A9%E7%94%A8%E8%80%85%3AMont29%2Fi18n"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Mont29/i18n&amp;action=history"/>
	<updated>2026-05-15T18:38:37Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Mont29/i18n&amp;diff=108805&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Mont29/i18n&amp;diff=108805&amp;oldid=prev"/>
		<updated>2018-06-28T19:47:23Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 19:47時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Mont29/i18n&amp;diff=108804&amp;oldid=prev</id>
		<title>wiki&gt;Mont29: Created page with &quot;=Blender translation HOWTO=    Here is a brief explanation of how translation works and how to update translation files. There is also a short presentation of all tools found in ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Mont29/i18n&amp;diff=108804&amp;oldid=prev"/>
		<updated>2011-10-19T20:15:23Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;=Blender translation HOWTO=    Here is a brief explanation of how translation works and how to update translation files. There is also a short presentation of all tools found in ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Blender translation HOWTO=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a brief explanation of how translation works and how to update translation files.&lt;br /&gt;
There is also a short presentation of all tools found in /tools dir!&lt;br /&gt;
&lt;br /&gt;
{{Note|NOTE/WARNING|I’m not sure all the command lines I give below are correct for this OS, and I couldn’t test the scripts on such system. Windows users, please tell me if there are any problems!}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Translating==&lt;br /&gt;
&lt;br /&gt;
{{Note|NOTE|Gettext tools (msgfmt, msgmerge and xgettext) are mandatory for most of those operations!}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How it works===&lt;br /&gt;
&lt;br /&gt;
The /branches/&amp;lt;language&amp;gt;/ folders contain source files for translation system (&amp;lt;language&amp;gt; being an ISO language code, like es or zn_CN). These source files have .po extension and a pretty simple syntax:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #: One or more lines of comments stating origins of the message.&lt;br /&gt;
 #, fuzzy [optional] see below&lt;br /&gt;
 # One or more lines of free, general comments&lt;br /&gt;
 msgid &amp;quot;some message id&amp;quot;&lt;br /&gt;
 msgstr &amp;quot;translation for this message&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In case msgid or msgstr are too long, they'll be split on several lines, like this:&lt;br /&gt;
&lt;br /&gt;
 msgid &amp;quot;&amp;quot;&lt;br /&gt;
 &amp;quot;A very very very very very very very very very very very very very very very&amp;quot;&lt;br /&gt;
 &amp;quot; very very very very dummy long message id!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All this means that when the string &amp;quot;some message id&amp;quot; is used as operator name, tooltip, menu and so on, it'll be displayed on the screen as &amp;quot;translation for this message&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pretty simple.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These source files are pre-compiled into /trunk/locale/&amp;lt;language&amp;gt;/LC_MESSAGES/blender.mo, which are binary files directly usable by the translation system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to edit translations - translators===&lt;br /&gt;
&lt;br /&gt;
It's also pretty simple. If you can find string you want to translate in /branches/&amp;lt;language&amp;gt;.po file as msgid, just write correct msgstr string for it. If msgid is marked as fuzzy, i.e.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #, fuzzy&lt;br /&gt;
 msgid &amp;quot;some message id&amp;quot;&lt;br /&gt;
 msgstr &amp;quot;translation for this message&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...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 previous translation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When translation has been updated, remove line with '#, fuzzy' and it'll work.&lt;br /&gt;
&lt;br /&gt;
Note: You can use a GUI to ease po files edition, like e.g. Poedit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to add translations - translators===&lt;br /&gt;
&lt;br /&gt;
If you have not yet your languages under /branches, you should request (e.g. on the ML) an administrator to add it, as even if you can add a language in bf-translations project yourself, you’ll have to ask a developer to add it in Blender code, else it would be useless!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to update translations - advanced translators===&lt;br /&gt;
All po's under /branches/ should be updated something like once a week by an administrator.&lt;br /&gt;
&lt;br /&gt;
However, you can do it yourself for your language, if needed.&lt;br /&gt;
&lt;br /&gt;
{{Note|Note|Please also see the &amp;quot;III. Tools&amp;quot; section below}}&lt;br /&gt;
&lt;br /&gt;
To do so, you *must* have both blender and its sources, and a valid /trunk/po/tools/settings.py file. Then, just run:&lt;br /&gt;
&lt;br /&gt;
 $ cd where/you/put/trunk/po/tools&lt;br /&gt;
 $ path/to/python3 ./update_branches.py &amp;lt;language&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(*nix users can skip the &amp;quot;path/to/python3&amp;quot; part, as scripts are executable.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to merge translations - translators===&lt;br /&gt;
You might want to merge several po files together. To do so, you first have to choose a &amp;quot;dest&amp;quot; file, into which will be merged the translations and new messages of all others. Just run:&lt;br /&gt;
&lt;br /&gt;
 $ cd where/you/put/your/pos&lt;br /&gt;
 $ path/to/python3 where/you/put/trunk/po/tools/merge_po.py dst.po src.po [src.po ...]&lt;br /&gt;
&lt;br /&gt;
(*nix users can skip the &amp;quot;path/to/python3&amp;quot; part, as scripts are executable.)&lt;br /&gt;
&lt;br /&gt;
Please read the help message of this script for more details (-h).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to test your translations - translators===&lt;br /&gt;
To test your translations, simply run, from your /branches/&amp;lt;language&amp;gt;/ dir:&lt;br /&gt;
&lt;br /&gt;
 $ msgfmt --statistics &amp;lt;language&amp;gt;.po -o blender.mo&lt;br /&gt;
&lt;br /&gt;
Then copy the produced blender.mo binary file under your .blender/locale/&amp;lt;language&amp;gt;/LC_MESSAGES/ dir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===About languages needing some po processing===&lt;br /&gt;
This concerns at least, currently, arabic and persian.&lt;br /&gt;
&lt;br /&gt;
The process is now standardized! Please follow those rules:&lt;br /&gt;
* The &amp;lt;language&amp;gt;.po file in /branches *must be the raw one* (i.e. non-processed).&lt;br /&gt;
* You *must* name your processing script &amp;lt;language&amp;gt;_to_utf.py (e.g. ar_to_utf.py), and it *must* be callable like this:&lt;br /&gt;
 $ path/to/python3 &amp;lt;language&amp;gt;_to_utf.py raw.po processed.po&lt;br /&gt;
&lt;br /&gt;
This way, the update_trunk.py (and import_po_from_branches.py) scripts will do the conversion automatically!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Administrating==&lt;br /&gt;
{{Note|Note|Please also see the &amp;quot;III. Tools&amp;quot; section below}}&lt;br /&gt;
&lt;br /&gt;
These are advanced and/or /trunk-affecting operations, translators should avoid to use them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Adding a new language===&lt;br /&gt;
To do so, you *must* have both blender and its sources, and a valid /trunk/po/tools/settings.py file. Note that adding some code in Blender itself is also required!&lt;br /&gt;
&lt;br /&gt;
For the bf-translation part, just run:&lt;br /&gt;
&lt;br /&gt;
 $ cd where/you/put/trunk/po/tools&lt;br /&gt;
 $ path/to/python3 ./update_branches.py -a &amp;lt;language&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(*nix users can skip the &amp;quot;path/to/python3&amp;quot; part, as scripts are executable.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Updating all po's under /branches===&lt;br /&gt;
To do so, you *must* have both blender and its sources, and a valid /trunk/po/tools/settings.py file. Then, just run:&lt;br /&gt;
&lt;br /&gt;
 $ cd where/you/put/trunk/po/tools&lt;br /&gt;
 $ path/to/python3 ./update_branches.py&lt;br /&gt;
&lt;br /&gt;
(*nix users can skip the &amp;quot;path/to/python3&amp;quot; part, as scripts are executable.)&lt;br /&gt;
&lt;br /&gt;
This will build new msg and pot files (in the temp dir, so they don’t even clutter your working dir), and update accordingly &amp;lt;language&amp;gt;.po's found under /branches/&amp;lt;language&amp;gt;, for all existing language.&lt;br /&gt;
&lt;br /&gt;
Note you can restrict the update to a list of languages, simply by passing their ISO codes as command line arguments, see the help (-h).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Updating /trunk===&lt;br /&gt;
To do so, you *must* have a valid /trunk/po/tools/settings.py file. Then, just run:&lt;br /&gt;
&lt;br /&gt;
 $ cd where/you/put/trunk/po/tools&lt;br /&gt;
 $ path/to/python3 ./update_trunk.py&lt;br /&gt;
&lt;br /&gt;
(*nix users can skip the &amp;quot;path/to/python3&amp;quot; part, as scripts are executable.)&lt;br /&gt;
&lt;br /&gt;
This will:&lt;br /&gt;
* Remove all .po's from trunk.&lt;br /&gt;
* Check all /branches/&amp;lt;language&amp;gt;/&amp;lt;language&amp;gt;.po's, and import those valid and translated above 80% (by default, you can specify another threshold with -t option) into /trunk/po.&lt;br /&gt;
* Clean po's under /trunk/po (i.e. remove all commented messages in them).&lt;br /&gt;
* Compile all po's in /trunk/po to /trunk/locale/&amp;lt;language&amp;gt;/LC_MESSAGES/blender.mo.&lt;br /&gt;
* Clean translations that failed (i.e. remove from /trunk all mo's and po's that failed some way).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
&lt;br /&gt;
Here we quickly describes all scripts under /trunk/po/tools.&lt;br /&gt;
&lt;br /&gt;
Note that all scripts also generates an help message when called with the &amp;quot;-h&amp;quot; option, please use this for more details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Note for Windows users===&lt;br /&gt;
&lt;br /&gt;
You can find compiled builds of gettext in the lib folder under &amp;quot;binaries\gettext\&amp;quot; for both windows and win64.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to run the scripts you will need to replace the location of the GETTEXT_..._EXECUTABLE, in /trunk/po/tools/settings.py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 -GETTEXT_XGETTEXT_EXECUTABLE = &amp;quot;xgettext&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 +GETTEXT_XGETTEXT_EXECUTABLE = r&amp;quot;C:\Blender\lib\windows\binaries\gettext\xgettext.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You will also have to specify python3's path, and perhaps others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Settings - settings_template.py===&lt;br /&gt;
'''Very important!'''&lt;br /&gt;
&lt;br /&gt;
All scripts under /trunk/po/tools use a common setting source, settings.py&lt;br /&gt;
&lt;br /&gt;
When freshly checked out, the /trunk/po/tools only contains a settings_template.py, which you should copy as settings.py, before editing that one.&lt;br /&gt;
&lt;br /&gt;
For *nix users, most settings should be ok, except most probably BLENDER_EXEC and SOURCE_DIR.&lt;br /&gt;
&lt;br /&gt;
Windows users will likely have to set the other executables' paths as well, as noted above.&lt;br /&gt;
&lt;br /&gt;
Remember never to commit your settings.py file (else it would overwrite all others' on next update)! And to update it, when a new version of settings_template.py is committed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Updating /branches tools===&lt;br /&gt;
;update_msg.py&lt;br /&gt;
:This script runs _update_msg.py from inside Blender, to generate a trunk/po/messages.txt file (by default) containing all introspection-discovered messages (more than 98% of the messages!)&lt;br /&gt;
;update_pot.py&lt;br /&gt;
:This script first runs xgettext (over files listed in /trunk/po/POTFILES.in), to generate /trunk/po/blender.pot (by default), and then merges in all messages from /trunk/po/messages.txt.&lt;br /&gt;
;update_po.py&lt;br /&gt;
:This script runs msgmerge to update po's under /branches (by default) or under /trunk/po (-t, that option should never be used!), from /trunk/po/blender.pot.&lt;br /&gt;
;update_branches.py&lt;br /&gt;
:As we saw above, this script updates po's under /branches in one step. Under the hood, it obviously uses previous scripts!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Updating /trunk tools===&lt;br /&gt;
;import_po_from_branches.py&lt;br /&gt;
:This script imports all .po that are advanced enough (default value is 80%, use -t for a different threshold) from /branches into /trunk/po.&lt;br /&gt;
;update_mo.py&lt;br /&gt;
:This script compiles po's under /trunk/po into mo's under /trunk/locale, creating directories if necessary.&lt;br /&gt;
;update_trunk.py&lt;br /&gt;
:As we saw above, this script updates po's and mo's under /trunk in one step. Under the hood, it obviously uses previous scripts!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Misc===&lt;br /&gt;
;check_po.py&lt;br /&gt;
:This script can either run a quick test on po's (-m), make some raw stats (-s), or both. It can run over /branches po's (default), or /trunk/po po's (-t). It’s a report-only tool!&lt;br /&gt;
&lt;br /&gt;
;clean_po.py&lt;br /&gt;
:This script removes all commented messages from /branches po's (default) or /trunk/po po's (-t).&lt;br /&gt;
;merge_po.py&lt;br /&gt;
:This script accepts two or more files as arguments, and merges into the first, dest file, the translations and new empty messages from all remaining files.&lt;br /&gt;
;utils.py&lt;br /&gt;
:This script gathers some commonly used functions, among which parser_messages, which reads and parse a po file.&lt;/div&gt;</summary>
		<author><name>wiki&gt;Mont29</name></author>
		
	</entry>
</feed>