Manual:Pywikibot/i18n conversion


Here's how to spread TW integration through the scripts/ directory.

As you will notice, there is now a i18n/ directory inside the scripts/ directory. This directory contains all files exported from TranslateWiki. The script name defines which TW keys are defined in the file, so i18n/ contains category-* (category-was-moved[1], category-also-in, etc.). These are the translations that before were in scripts/

Adapting scripts to TranslateWiki consists of four parts:

  • Defining TW keys for translations
  • Reading in translations and outputting them into the TW format
  • Removing translations from script file
  • Adding from pywikibot import i18n and adapting all/most pywikibot.translate() entries with i18n.twtranslate().

Defining TW keys[edit]

To use as an example. There is only one message (only showing German and English):

msg = {
   'de': 'Bot: Formatiere ISBN',
   'en': 'Robot: Formatting ISBN',

For TW, we define this message as isbn-formatting.

Sometimes pywikibot.translate is used for site- or language-specific configuration. Don't move those to TranslateWiki files (yet).

Reading in translations and outputting them into the TW format[edit]

Although it is possible to do the ISBN example by hand, I'll use a script that can easily be adapted for a larger number of messages. Don't forget to source bin/activate your virtualenv! The script is available at (too long to paste here).

For other scripts, you have to adapt at least lines 2, 6 and 12. Line 12 has a list of tuples (old dict, TranslateWiki key). If the messages have (one or more) parameters, you should change them to named parameters, so translators can move them around in the message. See lines 15 and 16 for an example of how to do this.

Running this script gives you a new file, i18n/

Test the translation:

[pwb@pwb core]$ python
>>> from pywikibot import i18n
>>> i18n.twtranslate("de", "isbn-formatting")
u'Bot: Formatiere ISBN'


Removing translations from the script file[edit]

Use a sledgehammer, jackhammer, or scalpel. Whatever works for you. In the case of, lines 49 to 61.


Add from pywikibot import i18n[edit]

-from pywikibot import pagegenerators
+from pywikibot import pagegenerators, i18n

Adapting all/most pywikibot.translate entries[edit]

Search for pywikibot.translate. Change the following:

pywikibot.translate(site, msg) % (param_1, param_2)


i18n.twtranslate(site, "tw-key-for-msg", {'param_1': param_1, 'param_2': param_2})


i18n.twtranslate(site, "tw-key-for-msg") % {'param_1': param_1, 'param_2': param_2}

With 'tw-key-for-msg' referring to the tw key you thought up for msg, and 'param_1' and 'param_2' (the dictionary keys) referring to the named parameters you introduced in step 2.

For, this is simpler:

-        self.comment = pywikibot.translate(pywikibot.getSite(), msg)
+        self.comment = i18n.twtranslate(pywikibot.getSite(), 'isbn-formatting')

Congratulations! You have adapted a script to use TranslateWiki translations!

Of course, before committing, test the script:

[pwb@pwb core]$ python isbn -page:Gebruiker:Valhallasw -to13 -format
Page [[Gebruiker:Valhallasw]] saved
(huidig | vorige)  16 jan 2011 14:29 Valhallasw (Overleg | bijdragen) k (1.735 bytes) (Bot: ISBN opgemaakt) (ongedaan maken)

And, as a last step, commit the script (and the translations!) to the svn repository: Special:Code/pywikipedia/8838

Good luck adapting scripts!

See also[edit]