User Guidelines Localisation
Table of Contents
Contributing to the Translations of Sahana Eden
Translation to other languages is highly appreciated.
It would also be great to have someone volunteer to be our Translations lead / coordinator.
Web2Py Localisation System
Sahana Eden is built using Web2Py & as-such it inherits the Web2Py localisation architecture:
NB Currently Sahana is NOT using the pluralisation functionality (help migrating to that would be appreciated!)
Current languages translated to some extent:
Sahana Translation Interface
We have built our own Translation module which allows you to export the *relevant* strings to an .xls file, a .po file or upload to Pootle:
It also supports uploading updated [partial] files to be merged with the existing
If the language you want isn't yet available, then create a new file using the ISO 639-1 Code of the Language as the filename. If it is a national variation of a language, eg. New Zealand English, add a suffix to the filename: "en_nz.py".
We maintain a Pootle Server as a collaborative space to both do the initial translations and also to allow people to suggest improvements.
Convert to a .po file for use in Pootle (or other PO file tools such as Virtaal):
- "web2py2po" scripts (part of the Translate Toolkit)
- Use 1.8.1 (https://github.com/translate/translate/archive/1.8.1.tar.gz) or this patch for 1.8.0
- 1.10+ have UTF-8 issues (po2web2py needs updating to match rest of system)
For UTF-8, beware of the encoding - needs to be 'without BOM' or 'ANSI as UTF-8'.
- this is both within the
languages/file & also with any UTF-8 direct in customised Views.
web2py2po -i zh-tw.py -o zh-tw.po # Use Pootle &/or Virtaal to translate, then: po2web2py -i zh-tw.po -o zh-tw.py
NB The .py output looks wrong, with raw UTF-8 binary characters, however it works fine if you let Web2Py process it:
- copy into 'languages' folder
- Add this to
settings.L10n.languages_readonly = False
- run Eden with this language: http://127.0.0.1:8000/eden/default/index?_language=xx
- comment the setting in
At one time we started to try out Transifex to do the same job as Pootle, so if you prefer to use that then we can support you there too.
Zanata is being tried for Brazilian Portuguese here:
Web2Py Admin UI
You can edit the language file directly in the Web2Py Admin UI.
If wishing to provide access to just language strings & not the rest of the source code:
- Script to update language files:
cd web2py python web2py.py -S eden -R applications/eden/static/scripts/tools/languages.py
You can -also- try a beta tool, which translates any file (including the web2py languages files) using the Google Translate API:
- Go to Auto-Translator, download, uncompress the .tar.gz archive
- Inside the uncompressed directory, execute the application with:
- ./autotranslate.py (parameters) or
- python autotranslate.py (parameters)
(The parameters are: filename, origin language and destination language)
Example: ./autotranslate.py /home/johndoe/web2py/applications/eden/languages/es.py en es
Wait (you'll see an advance status) and DONE. Just refine the translations (inside web2py or just open with a text editor)
Please provide any bug report or problem to the main list
To remove rows where source & target are the same, can create a new column with =IF(A2=B2;1;0), Paste Special, Sort & Delete 1s
- Save the exported file as a csv
- Open Excel
- Import the data using Data-->Import External Data --> Import Data
- Select the file type of "csv" and browse to your file
- In the import wizard change the File_Origin to "65001 UTF" (or choose correct language character identifier)
- Change the Delimiter to comma
- Select where to import to and Finish
Translate Wiki Pages
- Translated pages with ISO 639-2 Language Code extension (original english page = no extension), e.g.
- original page: eden.sahanafoundation.org/wiki/BluePrintInternationalisation
- german translation: eden.sahanafoundation.org/wiki/BluePrintInternationalisation/de
- Insert [[TranslatedPages]] macro to display a list of available translations of a page (at best at bottom of page)