Internationalization

From Code::Blocks


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 to generate the POT file.

This tool use 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 sill 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 at https://translations.launchpad.net.

Translating with poEdit

Rename codeblocks.pot into codeblocks.po. Use poEdit to open the file 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.

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.