Internationalization
This article is about how to realize and use localized C:B.
Original article written by heromyth.
Reviewed by gd_on.
Get the English POT file
The url of the english POT file is at:
for the original site (but obsolete) : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks
or
for a new site : https://translations.launchpad.net/codeblocks-gd
Old sites too (not sure if they are still available) : http://www.dlang.net/dl/codeblocks.pot
http://www.dlang.net/dl/plugins.pot
More information can be seen at: /index.php/topic,10204.msg70638.html.
or :
/index.php/topic,1022.msg159075.html#msg159075
Of course, you can run extract.cmd (shown below) to generate the POT file. It extracts all the text chains from .cpp files and .xrc file, for the main core and the contribs plugins. You can place it in a subdirectory of your codeblocks_src (created by svn for example), as src\i18n or a specific src\My_i18n.
This tool uses several unix-like tools as find, rm, grep, xargs, xgettext, msgcat, sed. Some of them are available with many MinGW distributions or Msys2.
Note : you must use the unix-like find.exe, not the Windows one : they have not the same syntax. So, the unix-like find.exe must be found in your PATH, before the Windows one!
The tool wxrc.exe's url is http://www.dlang.net/dl/wxrc.exe (not sure it's still available there). But you can find the source in wxWidgets/utils and build it.
The content of extract.cmd is below:
rem ======= Begin of extract.cmd ======= @echo off echo **************************** echo * creating core .pot files * echo **************************** echo * find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks.pot 2> log.txt find ../sdk ../src ../include | grep -F .h | grep -v svn-base | grep -v .svn | grep -v .h.org | grep -v html | xargs xgettext --keyword=_ -o codeblocks2.pot 2>> log.txt find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2>> log.txt find codeblocks.pot > files.txt find codeblocks2.pot >> files.txt find codeblocks3.pot >> files.txt find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | xargs xgettext --keyword=_ -o coreplugins.pot 2>> log.txt find ../plugins | grep -v contrib | grep -F .h | grep -v .svn | grep -v svn-base | grep -v html | xargs xgettext --keyword=_ -o coreplugins2.pot 2>> log.txt find coreplugins.pot >> files.txt find coreplugins2.pot >> files.txt echo * echo ******************************* echo * creating contrib .pot files * echo ******************************* echo * find ../plugins/contrib | grep -F .cpp | grep -v .svn | grep -v svn-base > file_c.txt find ../plugins/contrib | grep -F .h | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch >> file_c.txt xgettext -f file_c.txt --keyword=_ -o Contribplugins.pot 2>> log.txt find Contribplugins.pot >> files.txt echo * echo *************************************** echo * creating .cpp files from .xrc files * echo *************************************** echo * find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2>> log.txt find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2>> log.txt find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2>> log.txt grep -v msp430x plugins_xrc2.cpp | grep -v msp430x | grep -v cc430x | grep -v jtag1 | grep -v jtag2 | grep -v jtagm | grep -v atxmega | grep -v atmega | grep -v attiny | grep -v at86 | grep -v at90 | grep -v AT90 > plugins_xrc.cpp del plugins_xrc2.cpp echo * echo ************************************************* echo * creating .pot files from those local new .cpp * echo ************************************************* echo * find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2>> log.txt sed "s/\$\$*/\$/g" xrc.pot > xrc.pox sed 's/\\\\\\\\/\\\\/g' xrc.pox > xrc.pot find xrc.pot >> files.txt echo * echo ************************************************ echo * extracting strings from .xml compilers files * echo ************************************************ echo * find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F "CodeBlocks_compiler name" > src_xml.cpp 2>> log.txt find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F "Option name" >> src_xml.cpp 2>> log.txt find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F "Category name" >> src_xml.cpp 2>> log.txt find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F "checkMessage" >> src_xml.cpp 2>> log.txt grep -v mabi src_xml.cpp | grep -v mno | grep -v apcs | grep -v mtpcs | grep -v mshed | grep -v msoft | grep -v mhard | grep -v mfpe | grep -v msched | grep -v mlong | grep -v mpic | grep -v mcirrus | grep -v mcalle | grep -v mpoke | grep -v mwords | grep -v "MSP430 1" | grep -v "MSP430 2" | grep -v "MSP430 3" | grep -v "MSP430 4" | grep -v "MSP430 5" | grep -v "MSP430 6" | grep -v "MSP430 E" | grep -v "MSP430 W" | grep -v "MSP430 MS" | grep -v "MSP430 G4" | grep -v "CC430 5" | grep -v "CC430 6" | grep -v ATmega | grep -v AT90 | grep -v ATtiny > src_xml2.cpp xgettext -a -o xml.pox src_xml2.cpp sed "s/"/\\\\""/g" xml.pox > xml.pot find xml.pot >> files.txt echo * echo ********************** echo * Merging .pot files * echo ********************** echo * msgcat -s -f files.txt -o All_codeblocks.pox 2>> log.txt rm -f *.pot *.cpp files.txt file_c.txt sed "s/#, c-format//g" All_codeblocks.pox > All_codeblocks.pot rm -f *.pox echo * echo ************** echo The END !!! * echo ************** echo on rem ======= End of extract.cmd =======
The tools for translation
Usually, we use the poEdit tool which can be downloaded here. Of course, you can do the translation directly on https://translations.launchpad.net.
Translating with poEdit
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:
[File]->[Preferences]->[Personalize]
[Catalog]->[Settings]->[Project info]->[Team/email/Language/Charset]
If Code::Blocks is compiled with Unicode, the charset should be set to utf-8; If Code::Blocks is compiled with ANSI, the charset should be set to your own language charset like gb2312, koi8-r etc.
After these settings are done, you can start translating. Don't be fooled, it's a long work! During the process, of course, you can use your translation at any time.
You can also download the .po file from Launchpad, work on it with poedit locally on your machine, and re-upload it on Launchpad to update and share your work. It may be necessary to approve this work, and sometimes to validate your translations.
Create and use the .mo file
Pressing Ctrl+S in poEdit, you can get a *.mo file like codeblocks.mo which is what we need. To use codeblocks.mo, we just place it into C:\Program Files\CodeBlocks\share\CodeBlocks\locale\<lang>\. My language is French and I have installed C::B into C:\, so I place codeblocks.mo into C:\Program Files\CodeBlocks\share\CodeBlocks\locale\fr_FR.
If you want to use codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/<lang>/LC_MESSAGES/ or in the locale\<lang< sub-directory of codeblocks, as in Windows.
Details about internationalization using wxWidgets can be found in the wxWidgets docs.
Let Code::Blocks support your language
In Code::Blocks menu, Settings, Environment, View, you'll find a check-box for Internationalization. If you check it, you'll normally find your language in the dropdown list.