====== Internationalization (i18n of X2Go) ======
Some of the X2Go components can be internationalized/localized (translated into many of the globe's languages as possible). Here is a short howto that explains what you need to do, to contribute your language to X2Go.
**TL;DR;** All translators please send their translation efforts (''.po'' files, ''.ts'' files or git formatted patches) to the [[https://lists.x2go.org/listinfo/x2go-i18n|X2Go i18n mailing list]]. Please make sure that your files have a Unix EOL (line-ending) style. Thank you!
===== Translatable X2Go components =====
| **COMPONENT** | **da** | **de** | **es** | **et** | **fi** | **fr** | **nb_no** | **nl** | **ru** | **sv** | **tr** | **zh_tw** |
| [[https://code.x2go.org/gitweb?p=x2goclient.git;a=summary|x2goclient]] | x | x | incomplete | incomplete | x | very incomplete | x | incomplete | incomplete | x | x | outdated |
| [[https://code.x2go.org/gitweb?p=pinentry-x2go.git;a=summary|pinentry-x2go]] | x | x | x | - | x | - | - | x | - | - | x | - |
| [[https://code.x2go.org/gitweb?p=pyhoca-gui.git;a=summary|pyhoca-gui]] | x | x | x | - | x | - | incomplete | x | incomplete | x | x | - |
| [[https://code.x2go.org/gitweb?p=x2godesktopsharing.git;a=summary|x2godesktopsharing]] | x | x | x | - | x | x | x | x | x | x | x | - |
| [[https://code.x2go.org/gitweb?p=x2gognomebindings.git;a=summary|x2gognomebindings]] | x | x | x | - | x | - | - | x | - | - | x | - |
| [[https://code.x2go.org/gitweb?p=x2gomatebindings.git;a=summary|x2gomatebindings]] | x | x | x | - | x | - | - | x | - | - | x | - |
| [[https://code.x2go.org/gitweb?p=x2goplasmabindings.git;a=summary|x2goplasmabindings]] | x | x | x | - | x | x | x | x | x | x | x | - |
| [[https://code.x2go.org/gitweb?p=x2goadmincenter.git;a=summary|x2goadmincenter]] | x | x | x | - | x | - | - | x | - | - | x | - |
| [[https://code.x2go.org/gitweb?p=x2goserver.git;a=summary|x2goserver]] | x | x | - | - | - | - | - | - | - | - | x | - |
| [[https://code.x2go.org/gitweb?p=x2gothinclient.git;a=summary|x2gothinclient]] | x | x | - | - | - | - | - | - | - | - | x | - |
===== Overview of the process =====
- Install needed software
- Clone a copy of the X2Go component you want to translate/update from X2Go Git
- (if needed) Add your language and create the initial language file
- Translate the language file
- Prepare the patch and send it to the x2go-i18n mailing list
We try keep a list with words and phrases that are **not** to be translated, i.e. productnames and such, here: [[wiki:development:i18n:nontranslateable|wiki:development:i18n:nontranslateable]]
Microsoft has an online terminology search at https://www.microsoft.com/Language/en-US/Default.aspx. Very useful if you want to find commonly used translations.
===== The process in detail =====
==== Translating x2goclient ====
X2Go Client uses Qt4 which has a great tool to help you translate X2Go Client into your language - Qt Linguist.
- To be able to translate you need to install Qt Linguist (version 4.x) - for Debian and Ubuntu you can install //qt4-dev-tools//, which also will install //qt4-linguist-tools// that also is needed. The preferred way of sending in translations is as git-patches, so we need git which in Debian and Ubuntu is accomplished by installing the package //git//.
- We need a directory to keep the cloned copies of the git repository, I prefer to have mine in // ~/git/ //, but you can choose what suits you best.
- Follow the instructions on cloning a git repository from here: [[wiki:development:git|wiki:development:git]]
- Also remember to follow the instructions there on how to set your name and email in Git
- When you got your Git working copy of X2Go Client cloned locally, changedir into the cloned directory
- Edit the .pro file, e.g. //'x2goclient.pro'// for the x2goclient repository and add your language file there (if it doesn't exist). For the Swedish language I added this line: TRANSLATIONS += x2goclient_sv.ts
:!: Some locales have both language and territory specified, e.g. the file for the Bokmal languague in Norway is named **x2goclient_nb_no.ts**.
- After adding the intended language we need to get the actual language file created. Run this in the same directory:lupdate .pro
(e.g. //lupdate x2goclient.pro//)
- Start Qt Linguist (linguist-qt4) and open your translation file. Remember to go to //Edit -> Translation File Settings// and set the correct **target** language. When you are done translating, save the file.
- If you want to verify your translation, you have to build the software with the new/updated language file, here's a brief instruction on how to build x2goclient on Debian:
- Install build dependencies (specific for X2Go Client)sudo apt-get install libldap2-dev libssh-dev libcups2-dev libgd2-xpm-dev
- Open resources.rcc in a text editor and add a line for the new qm file, example:x2goclient_sv.qm
- Build qm files from all ts files:lrelease *.ts
- Configure the build:./config_linux.sh
- Build x2goclient:make clean; make
- If everything works out you have a new binary to test:./x2goclient
- If you find anything that needs correcting, update the ts and qm files and rebuild the binary (make clean; make).
- When you have verified that the language file is correct, move on to adding it to git (below).
- Back in the terminal again we need to tell git about the new file we added (your language file, technically it was created with the lupdate process):git add
- Then we need to commit our changes to our local clone of the git repository:git commit -m "change comment (in english)"
- The last part is to create the actual patch, example patch with the last commit included:git format-patch -1
- You should then have a newly created patch-file in your current directory which you now should attach to a mail you send to [[x2go-i18n@lists.x2go.org]].
For more information related to Git, look here: https://git-scm.com/
==== Translating pinentry-x2go ====
X2Go's pinentry tool uses the same translation mechanism as X2Go Client (Qt4, Qt-Linguist, .ts files). Thus, see above. The ''.ts'' files are in the subfolder ''pinentry-x2go/'' of the project's source tree.
==== Translating PyHoca-GUI ====
For PyHoca-GUI as a translater you have to use a gettext compatible (.po/.mo files) editor like '''poedit'''. The translation process is described in the ''[[https://code.x2go.org/gitweb?p=pyhoca-gui.git;a=blob;f=README.i18n|README.i18n]]'' file within PyHoca-GUI's source tree.
**Package-maintainers-only:** to update the translation template, run python setup.py build_i18n
and to merge the updated template file into the source translation files, use python setup.py build_i18n -m
Please also note that there is an NSIS installer (for the win32 version of PyHoca-GUI), that also has a few translatable strings. Check the ''nsis_include/'' subfolder in the PyHoca-GUI source tree.
==== Translating X2Go Desktop Sharing ====
The X2Go Desktop Sharing applet uses the same translation mechanism as X2Go Client (Qt4, Qt-Linguist, .ts files). Thus, see above.
==== Translating X2Go GNOMEv2 / MATE Bindings ====
For translating the similar projects ''x2gognomebindings'' (GNOMEv2 only) and ''x2gomatebindings'' you need a gettext based editor like ''poedit''. The ''.po'' files are in the po/ subfolder in the source tree.
Additionally, the GNOMEv2 / MATE Bindings package ships a desktop file that needs to be translated:
[Desktop Entry]
Name=Suspend X2Go session
Name[de]=X2Go Sitzung unterbrechen
...
Name[]=
...
Icon=exit
Exec=x2gosuspend-session-mate
Terminal=false
Type=Application
Categories=GTK;Network
OnlyShowIn=MATE;
==== Translating X2Go Plasma/KDE4 Bindings ====
The ''plasma-widget-x2go'' plasmoid uses the same translation mechanism as X2Go Client (Qt4, Qt-Linguist, .ts files). Thus, see above.
==== Translating X2Go Admin Center ====
The X2Go Admin Center application uses the same translation mechanism as x2goclient (Qt4, Qt-Linguist, .ts files). Thus, see above.
Important: X2Go Admin Center has several .ts files to tackle (e.g. the Dutch translator has to work on all these four files):
x2goadmincenter/x2goadmincenter_nl.ts
x2goadmincenter/modules/x2gogroupadmingui/x2gogroupadmingui_nl.ts
x2goadmincenter/modules/x2gouseradmingui/x2gouseradmingui_nl.ts
x2goadmincenter/modules/x2gosessionadmingui/x2gosessionadmingui_nl.ts
Note: X2Go Admin Center is still under development and not at all finished.
==== Translating X2Go Server ====
For X2Go Server as a translater you have to use a gettext compatible (.po/.mo files) editor like '''poedit'''. The translation process is described in the ''[[http://code.x2go.org/gitweb?p=x2goserver.git;a=blob;f=README.i18n|README.i18n]]'' file within X2Go Server's source tree.
==== Translating X2Go Thin Client ====
For X2Go Thin Client as a translater you have to use a gettext compatible (.po/.mo files) editor like '''poedit'''. The translation process is described in the ''[[https://code.x2go.org/gitweb?p=x2gothinclient.git;a=blob;f=README.i18n|README.i18n]]'' file within X2Go Thin Client's source tree.