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/category.py contains category-* (category-was-moved[1], category-also-in, etc.). These are the translations that before were in scripts/category.py.
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/mostpywikibot.translate()
entries withi18n.twtranslate()
.
Defining TW keys
editTo use isbn.py 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
editAlthough 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 http://pastebin.com/u2XrKt5b (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/isbn.py.
Test the translation:
[pwb@pwb core]$ python
>>> from pywikibot import i18n
>>> i18n.twtranslate("de", "isbn-formatting")
u'Bot: Formatiere ISBN'
hurrah!
Removing translations from the script file
editUse a sledgehammer, jackhammer, or scalpel. Whatever works for you. In the case of isbn.py, lines 49 to 61.
Finally
editAdd from pywikibot import i18n
edit-from pywikibot import pagegenerators
+from pywikibot import pagegenerators, i18n
Adapting all/most pywikibot.translate entries
editSearch for pywikibot.translate. Change the following:
pywikibot.translate(site, msg) % (param_1, param_2)
to
i18n.twtranslate(site, "tw-key-for-msg", {'param_1': param_1, 'param_2': param_2})
or
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 isbn.py, 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 pwb.py isbn -page:Gebruiker:Valhallasw -to13 -format
(...)
Page [[Gebruiker:Valhallasw]] saved
yielding:
(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!