Difference between revisions of "Internationalization"

From Code::Blocks
 
(59 intermediate revisions by 8 users not shown)
Line 1: Line 1:
This article is about how to realize and use localized C:B. All the works have been done under Windows XP SP2.
+
[[Category:Developer Documentation]]
  
'''1. Getting english POT file'''
+
This article is about how to realize and use localized C:B.
  
The english POT file's url is here:
+
Original article written by heromyth.
  
https://developer.berlios.de/patch/?func=detailpatch&patch_id=822&group_id=5358
+
Reviewed by gd_on.
 
I will update this file aperiodically. Of course, you can use the tool which I have created (seen belown) to generate the POT file.
 
  
The content of the tool which is named as '''intl.bat''' is belown:
+
== Get the English POT file ==
  
rem ======= Begin of intl.bat =======
+
The url of the english POT file is at:
  
@echo off
+
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks
  
wxrc src\resources\*.xrc -g -o  src\src-xrc.cpp
+
or
  
wxrc sdk\resources\*.xrc -g -o  sdk\sdk-xrc.cpp
+
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd
  
wxrc plugins\astyle\resources\*.xrc -g -o  plugins\astyle\astyle-xrc.cpp
+
Old sites too (''not sure if they are still available'') :
 +
http://www.dlang.net/dl/codeblocks.pot
  
wxrc plugins\classwizard\resources\*.xrc -g -o  plugins\classwizard\classwizard-xrc.cpp
+
http://www.dlang.net/dl/plugins.pot
  
wxrc plugins\codecompletion\resources\*.xrc -g -o  plugins\codecompletion\codecompletion-xrc.cpp
+
More information can be seen at: /index.php/topic,10204.msg70638.html.
  
wxrc plugins\compilergcc\resources\*.xrc -g -o  plugins\compilergcc\compilergcc-xrc.cpp
+
or :
  
wxrc plugins\debuggergdb\resources\*.xrc -g -o  plugins\debuggergdb\debuggergdb-xrc.cpp
+
/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.
  
wxrc plugins\defaultmimehandler\resources\*.xrc -g -o  plugins\defaultmimehandler\defaultmimehandler-xrc.cpp
+
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.
  
wxrc plugins\pluginwizard\resources\*.xrc -g -o  plugins\pluginwizard\pluginwizard-xrc.cpp
+
'''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!
  
wxrc plugins\todo\resources\*.xrc -g -o  plugins\todo\todo-xrc.cpp
+
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.
if not exist po md po
 
  
xgettext -C -n -k_ -o po\codeblocks.pot src\*.cpp src\*.h
+
For your convenience, some unix tools may be downloaded from [http://pagesperso-orange.fr/thunderbird-noia2/Unix_Tools.zip Unix-Tools]
  
xgettext -C -n -k_ -j -o po\codeblocks.pot src\wxAUI\*.cpp src\wxAUI\*.h
+
The content of '''extract.cmd''' is below (or you can download it from [http://pagesperso-orange.fr/thunderbird-noia2/i18n_GD.7z Extract-Tool] with also a bash version):
  
xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\*.cpp sdk\*.h
+
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 =======
  
xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\as\bindings\*.cpp sdk\as\bindings\*.h
+
== The tools for translation ==
  
xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\propgrid\src\propgrid\*.cpp sdk\propgrid\include\wx\propgrid\*.h
+
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].
  
xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\wxFlatNotebook\*.cpp
+
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].
  
rem xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\as\include\*.h
+
You'll find on Launchpad, two available downloads : a .po file, that you can use to edit or modify it, and a .mo file, a compiled ready to use in Code::Blocks. It's name may be quite long, but it does not matter. Only the extension is important.
  
rem xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\as\source\*.cpp sdk\as\source\*.h
+
== Translating with poEdit ==
  
rem xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\wxscintilla\*.cpp sdk\wxscintilla\*.h
+
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:
  
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\codecompletion\*.cpp plugins\codecompletion\*.h
+
[File]->[Preferences]->[Personalize]
  
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\codecompletion\parser\*.cpp plugins\codecompletion\parser\*.h
+
[Catalog]->[Settings]->[Project info]->[Team/email/Language/Charset]
 
 
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\astyle\*.cpp plugins\astyle\*.h
 
  
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\astyle\astyle\*.cpp plugins\astyle\astyle\*.h
+
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.
  
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\classwizard\*.cpp plugins\classwizard\*.h
+
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.
 
 
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\codecompletion\*.cpp plugins\codecompletion\*.h
 
 
 
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\compilergcc\*.cpp plugins\compilergcc\*.h
 
 
 
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\debuggergdb\*.cpp plugins\debuggergdb\*.h
 
 
 
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\defaultmimehandler\*.cpp plugins\defaultmimehandler\*.h
 
 
 
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\pluginwizard\*.cpp plugins\pluginwizard\*.h
 
 
 
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\todo\*.cpp plugins\todo\*.h
 
 
 
xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\xpmanifest\*.cpp plugins\xpmanifest\*.h
 
 
 
pause
 
 
 
rem ======= End of intl.bat =======
 
 
 
'''2. Getting the translating tool'''
 
 
 
Usually, we use the tool of poEdit which can be down at http://www.poedit.org/download.php.
 
 
 
'''3. Translating in poEdit'''
 
 
 
Rename codeblocks.pot into codeblocks.po. Using poEdit to open the file codeblocks.po. Remebering to change some settings
 
 
 
like:
 
[File]->[Preferences]->[Personalize]
 
 
 
[Catalog]->[Settings]->[Project info]->[Team/email/Language/Charset]
 
  
If your C:B is compiled with UNICODE, the Charset should be setted to utf-8; If C:B is compiled with ANSI, the Charset should be setted to your own language charset like gb2312,koi8-r etc..
+
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.  
  
After these settings done, you can start the translating. It's a hard working! During the process, of course, you can use your translations an any time.  
+
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).
  
'''4. Geting and using mo file'''
+
== Create and use the .mo file ==
  
Pressing Ctrl+S in poEdit, you can get a *.mo file like codeblocks.mo which is needed by we. To use codeblocks.mo, we just place it into C:\Program Files\CodeBlocks or C:\Program Files\CodeBlocks\share\CodeBlocks\locale\<lang>/LC_MESSAGES or C:\Program Files\CodeBlocks\share\CodeBlocks\locale\<lang>. My language is Chinese and I have installed C:B into E:\, so I place codeblocks.mo into E:\Program Files\CodeBlocks\share\CodeBlocks\locale\zh_CN.
+
Pressing Ctrl+S in poEdit, you can get a *.mo file like All_codeblocks.mo which is what we need. To use All_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 All_codeblocks.mo into C:\Program Files\CodeBlocks\share\CodeBlocks\locale\fr_FR.
  
If wanting to use codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/<lang>/LC_MESSAGES/. For example, I put it into /usr/X11R6/share/locale/zh_CN/LC_MESSAGES/ under FreeBSD.
+
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/<lang>/LC_MESSAGES/ or in the share/locale/<lang< sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/<lang> (for me <lang> is fr_FR). Create sub-directories if necessary.
  
Details about Internationalization of wxWidget can be seen from wxWidget's docment.
+
Details about internationalization using wxWidgets can be found in the wxWidgets docs.
  
'''5. Troubleshooting'''
+
== Let Code::Blocks support your language ==
  
If having any questions, you can mail to me: zxpmyth at yahoo.com.cn.
+
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.

Revision as of 17:54, 23 December 2019


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.

For your convenience, some unix tools may be downloaded from Unix-Tools

The content of extract.cmd is below (or you can download it from Extract-Tool with also a bash version):

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 Launchpad.

You'll find on Launchpad, two available downloads : a .po file, that you can use to edit or modify it, and a .mo file, a compiled ready to use in Code::Blocks. It's name may be quite long, but it does not matter. Only the extension is important.

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.

Note: It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).

Create and use the .mo file

Pressing Ctrl+S in poEdit, you can get a *.mo file like All_codeblocks.mo which is what we need. To use All_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 All_codeblocks.mo into C:\Program Files\CodeBlocks\share\CodeBlocks\locale\fr_FR.

If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/<lang>/LC_MESSAGES/ or in the share/locale/<lang< sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/<lang> (for me <lang> is fr_FR). Create sub-directories if necessary.

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.