<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.codeblocks.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gd%27on</id>
	<title>Code::Blocks - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.codeblocks.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gd%27on"/>
	<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php/Special:Contributions/Gd%27on"/>
	<updated>2026-05-28T00:03:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9717</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9717"/>
		<updated>2022-11-24T16:29:17Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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. It also extract strings from compiler's xml files and descriptions fields found in manifest*.xml from 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
The tool wxrc is used in these command files. You can find the source in wxWidgets/utils and build it.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools (extracted from msys2) and a wxrc.exe (statically linked with wxWidgets 3.2.1, 64 bit) can be downloaded from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools/tree/master/Unix_Tools Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
The content of '''extract.cmd''' is below (or you can download it from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools Extract-Tools] containing a copy of unix tools and wxrc):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
   &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/scriptedwizard/resources | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks4.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt;  files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks4.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o  coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM Why next lines? modifications in recent wxrc? string modif? Only one line (1515) in compiler_options.xrc has a problem, though the same syntax in a previous line (1151) is OK !&lt;br /&gt;
 sed -i 's/\&amp;quot;Compiling &amp;lt;file&amp;gt;...\&amp;quot;/\\\&amp;quot;Compiling &amp;lt;file&amp;gt;...\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM Eliminate a truncated string containing only &amp;quot;At &amp;quot;.&lt;br /&gt;
 sed -i 's/\&amp;quot;else\&amp;quot;/\\\&amp;quot;else\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM In .xrc files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 grep -v msp430x plugins_xrc2.cpp | grep -v dragon_ | 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 | grep -v TC1 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM Extracting strings from files as .xml, .xrc need more work because there is nothing to speify than a string is translatable or not.&lt;br /&gt;
 REM May also need additionnal filters if the serached string is on several lines.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM In .xml files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; | grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v Atmega | grep -v atmega | grep -v ATXmega | grep -v AT90 | grep -v AT43 | grep -v AT86 | grep -v AT76 | grep -v ATA | grep -v ata | grep -v ATtiny | grep -v Attiny | grep -v attiny | grep -v mcpu | grep -v TC1 &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 REM On Windows, the find option -name manifest*.xml is not (still) accepted (msys2 version), so the output is filtered with 2 -F options.&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;title&amp;quot;  &amp;gt;&amp;gt;  src_xml_title.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_a.pot src_xml_title.cpp&lt;br /&gt;
 find xml2_a.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM The find for &amp;quot;title&amp;quot; does not work correctly for &amp;quot;description&amp;quot; if the string expands on several lines ! Only the first line is kept =&amp;gt; the extracted text is truncated.&lt;br /&gt;
 REM With the following version, the string begin with &amp;quot;description&amp;quot; line and ends on &amp;quot;author&amp;quot; line =&amp;gt; this implies than the order of the fields are the same in all manifests.&lt;br /&gt;
 REM More, if in manifest*.xml, in the description string, there is a CR/LF, it should be kept in the original string, because even if poedit &amp;quot;complains&amp;quot; the translation takes it into account.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml_desc.cpp     2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_b.pot src_xml_desc.cpp&lt;br /&gt;
 find xml2_b.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword thanksTo&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/thanksTo/,/&amp;gt;/p&amp;quot; | sed '/license/d'   | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_thanks.cpp  2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_c.pot src_xml_thanks.cpp&lt;br /&gt;
 find xml2_c.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword authort: need to modify manifest.xml in wxSmithAUI because author contains characters with accents.&lt;br /&gt;
 REM Add the = sign to avoid authorEmail and/or authorWeb lines which does not need to be translated&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/author=/,/&amp;gt;/p&amp;quot; | sed '/authorEmail/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_author.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_d.pot src_xml_author.cpp&lt;br /&gt;
 find xml2_d.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword license (single line); include the = sign to be sure that lines containing the word license in a sentence are not kept.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;license=&amp;quot;  &amp;gt;&amp;gt;  src_xml_lic.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_e.pot src_xml_lic.cpp&lt;br /&gt;
 find xml2_e.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END*!!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 &lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9716</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9716"/>
		<updated>2022-11-24T16:25:39Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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. It also extract strings from compiler's xml files and descriptions fields found in manifest*.xml from 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
The tool wxrc is used in these command files. You can find the source in wxWidgets/utils and build it.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools (extracted from msys2) and a wxrc.exe (statically linked with wxWidgets 3.2.1, 64 bit) can be downloaded from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools/tree/master/Unix_Tools Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
The content of '''extract.cmd''' is below (or you can download it from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools Extract-Tools] containing a copy of unix tools and wxrc):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
   &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/scriptedwizard/resources | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks4.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks4.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o  coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM Why next linesi? modifications in recent wxrch? string modif ? Only one line (1515) in compiler_options.xrc has a problem, though the same syntax in a previous line (1151) is OK !&lt;br /&gt;
 sed -i 's/\&amp;quot;Compiling &amp;lt;file&amp;gt;...\&amp;quot;/\\\&amp;quot;Compiling &amp;lt;file&amp;gt;...\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM Eliminate a truncated string containing only &amp;quot;At &amp;quot;.&lt;br /&gt;
 sed -i 's/\&amp;quot;else\&amp;quot;/\\\&amp;quot;else\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM In .xrc files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 grep -v msp430x plugins_xrc2.cpp | grep -v dragon_ | 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 | grep -v TC1 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 REM In plugins_xrc.cpp we have a line containing &amp;quot;At &amp;quot;else&amp;quot; folding&amp;quot; (2826) pour #line 1644 &amp;quot;../plugins/contrib/wxSmithSTC/stedit/src/stedit.xrc&amp;quot;&lt;br /&gt;
 REM but when decoded by the following, it is truncated to &amp;quot;At &amp;quot; in xrc.pox (and in .pot), because it stops on the second &amp;quot;, just before else. Is there a way to avoid thiso?&lt;br /&gt;
 REM NOTE : in stedlgs_wdr.xrc, we have &amp;quot;At \&amp;quot;else\&amp;quot; folding&amp;quot; but this string has not such problem.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM Extracting strings from files as .xml, .xrc need more work because there is nothing to speify than a string is translatable or not.&lt;br /&gt;
 REM May also need additionnal filters if the serached string is on several lines.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM In .xml files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; | grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v Atmega | grep -v atmega | grep -v ATXmega | grep -v AT90 | grep -v AT43 | grep -v AT86 | grep -v AT76 | grep -v ATA | grep -v ata | grep -v ATtiny | grep -v Attiny | grep -v attiny | grep -v mcpu | grep -v TC1 &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 REM On Windows, the find option -name manifest*.xml is not (still) accepted (msys2 version), so the output is filtered with 2 -F options.&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;title&amp;quot;  &amp;gt;&amp;gt;  src_xml_title.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_a.pot src_xml_title.cpp&lt;br /&gt;
 find xml2_a.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM The find for &amp;quot;title&amp;quot; does not work correctly for &amp;quot;description&amp;quot; if the string expands on several lines ! Only the first line is kept =&amp;gt; the extracted text is truncated.&lt;br /&gt;
 REM With the following version, the string begin with &amp;quot;description&amp;quot; line and ends on &amp;quot;author&amp;quot; line =&amp;gt; this implies than the order of the fields are the same in all manifests.&lt;br /&gt;
 REM More, if in manifest*.xml, in the description string, there is a CR/LF, it should be kept in the original string, because even if poedit &amp;quot;complains&amp;quot; the translation takes it into account.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml_desc.cpp     2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_b.pot src_xml_desc.cpp&lt;br /&gt;
 find xml2_b.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword thanksTo&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/thanksTo/,/&amp;gt;/p&amp;quot; | sed '/license/d'   | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_thanks.cpp  2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_c.pot src_xml_thanks.cpp&lt;br /&gt;
 find xml2_c.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword authort: need to modify manifest.xml in wxSmithAUI because author contains characters with accents.&lt;br /&gt;
 REM Add the = sign to avoid authorEmail and/or authorWeb lines which does not need to be translated&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/author=/,/&amp;gt;/p&amp;quot; | sed '/authorEmail/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_author.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_d.pot src_xml_author.cpp&lt;br /&gt;
 find xml2_d.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword license (single line); include the = sign to be sure that lines containing the word license in a sentence are not kept.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;license=&amp;quot;  &amp;gt;&amp;gt;  src_xml_lic.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_e.pot src_xml_lic.cpp&lt;br /&gt;
 find xml2_e.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END*!!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 &lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9715</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9715"/>
		<updated>2022-11-24T16:24:20Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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. It also extract strings from compiler's xml files and descriptions fields found in manifest*.xml from 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
The tool wxrc is used in these command files. You can find the source in wxWidgets/utils and build it.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools (extracted from msys2) and a wxrc.exe (statically linked with wxWidgets 3.2.1, 64 bit) can be downloaded from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools/tree/master/Unix_Tools Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
The content of '''extract.cmd''' is below (or you can download it from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools Extract-Tools] containing a copy of unix tools and wxrc):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
   &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/scriptedwizard/resources | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks4.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks4.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o  coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM echo &amp;quot;Special case : Search for strings identified with wxTRANSLATE in wxscolourproperty.cpp&amp;quot;&lt;br /&gt;
 REM find ../plugins/contrib/wxSmith/wxwidgets/properties/wxscolourproperty.cpp | xargs grep -F &amp;quot;wxTRANSLATE&amp;quot; | sed 's/wxTRANSLATE/_/' &amp;gt; test_wxtranslate.cpp&lt;br /&gt;
 REM find test_wxtranslate.cpp | xargs xgettext --keyword=_ -o coreplugins3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM find coreplugins3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM Why next lines ? modifications in recent wxrc ? string modif ? Only one line (1515) in compiler_options.xrc has a problem, though the same syntax in a previous line (1151) is OK !&lt;br /&gt;
 sed -i 's/\&amp;quot;Compiling &amp;lt;file&amp;gt;...\&amp;quot;/\\\&amp;quot;Compiling &amp;lt;file&amp;gt;...\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM Eliminate a truncated string containing only &amp;quot;At &amp;quot;.&lt;br /&gt;
 sed -i 's/\&amp;quot;else\&amp;quot;/\\\&amp;quot;else\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM In .xrc files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 grep -v msp430x plugins_xrc2.cpp | grep -v dragon_ | 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 | grep -v TC1 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 REM In plugins_xrc.cpp we have a line containing &amp;quot;At &amp;quot;else&amp;quot; folding&amp;quot; (2826) pour #line 1644 &amp;quot;../plugins/contrib/wxSmithSTC/stedit/src/stedit.xrc&amp;quot;&lt;br /&gt;
 REM but when decoded by the following, it is truncated to &amp;quot;At &amp;quot; in xrc.pox (and in .pot), because it stops on the second &amp;quot;, just before else. Is there a way to avoid this ?&lt;br /&gt;
 REM NOTE : in stedlgs_wdr.xrc, we have &amp;quot;At \&amp;quot;else\&amp;quot; folding&amp;quot; but this string has not such problem.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM Extracting strings from files as .xml, .xrc need more work because there is nothing to speify than a string is translatable or not.&lt;br /&gt;
 REM May also need additionnal filters if the serached string is on several lines.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM In .xml files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; | grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v Atmega | grep -v atmega | grep -v ATXmega | grep -v AT90 | grep -v AT43 | grep -v AT86 | grep -v AT76 | grep -v ATA | grep -v ata | grep -v ATtiny | grep -v Attiny | grep -v attiny | grep -v mcpu | grep -v TC1 &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 REM On Windows, the find option -name manifest*.xml is not (still) accepted (msys2 version), so the output is filtered with 2 -F options.&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;title&amp;quot;  &amp;gt;&amp;gt;  src_xml_title.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_a.pot src_xml_title.cpp&lt;br /&gt;
 find xml2_a.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM The find for &amp;quot;title&amp;quot; does not work correctly for &amp;quot;description&amp;quot; if the string expands on several lines ! Only the first line is kept =&amp;gt; the extracted text is truncated.&lt;br /&gt;
 REM With the following version, the string begin with &amp;quot;description&amp;quot; line and ends on &amp;quot;author&amp;quot; line =&amp;gt; this implies than the order of the fields are the same in all manifests.&lt;br /&gt;
 REM More, if in manifest*.xml, in the description string, there is a CR/LF, it should be kept in the original string, because even if poedit &amp;quot;complains&amp;quot; the translation takes it into account.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml_desc.cpp     2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_b.pot src_xml_desc.cpp&lt;br /&gt;
 find xml2_b.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword thanksTo&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/thanksTo/,/&amp;gt;/p&amp;quot; | sed '/license/d'   | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_thanks.cpp  2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_c.pot src_xml_thanks.cpp&lt;br /&gt;
 find xml2_c.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword author : need to modify manifest.xml in wxSmithAUI because author contains characters with accents.&lt;br /&gt;
 REM Add the = sign to avoid authorEmail and/or authorWeb lines which does not need to be translated&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/author=/,/&amp;gt;/p&amp;quot; | sed '/authorEmail/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_author.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_d.pot src_xml_author.cpp&lt;br /&gt;
 find xml2_d.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword license (single line); include the = sign to be sure that lines containing the word license in a sentence are not kept.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;license=&amp;quot;  &amp;gt;&amp;gt;  src_xml_lic.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_e.pot src_xml_lic.cpp&lt;br /&gt;
 find xml2_e.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END !!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 &lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9714</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9714"/>
		<updated>2022-11-24T16:23:30Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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. It also extract strings from compiler's xml files and descriptions fields found in manifest*.xml from 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
The tool wxrc is used in these command files. You can find the source in wxWidgets/utils and build it.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools (extracted from msys2) and a wxrc.exe (statically linked with wxWidgets 3.2.1, 64 bit) can be downloaded from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools/tree/master/Unix_Tools Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
The content of '''extract.cmd''' is below (or you can download it from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools Extract-Tool] containing a copy of unix tools and wxrc):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
   &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/scriptedwizard/resources | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks4.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks4.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o  coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM echo &amp;quot;Special case : Search for strings identified with wxTRANSLATE in wxscolourproperty.cpp&amp;quot;&lt;br /&gt;
 REM find ../plugins/contrib/wxSmith/wxwidgets/properties/wxscolourproperty.cpp | xargs grep -F &amp;quot;wxTRANSLATE&amp;quot; | sed 's/wxTRANSLATE/_/' &amp;gt; test_wxtranslate.cpp&lt;br /&gt;
 REM find test_wxtranslate.cpp | xargs xgettext --keyword=_ -o coreplugins3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM find coreplugins3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM Why next lines ? modifications in recent wxrc ? string modif ? Only one line (1515) in compiler_options.xrc has a problem, though the same syntax in a previous line (1151) is OK !&lt;br /&gt;
 sed -i 's/\&amp;quot;Compiling &amp;lt;file&amp;gt;...\&amp;quot;/\\\&amp;quot;Compiling &amp;lt;file&amp;gt;...\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM Eliminate a truncated string containing only &amp;quot;At &amp;quot;.&lt;br /&gt;
 sed -i 's/\&amp;quot;else\&amp;quot;/\\\&amp;quot;else\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM In .xrc files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 grep -v msp430x plugins_xrc2.cpp | grep -v dragon_ | 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 | grep -v TC1 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 REM In plugins_xrc.cpp we have a line containing &amp;quot;At &amp;quot;else&amp;quot; folding&amp;quot; (2826) pour #line 1644 &amp;quot;../plugins/contrib/wxSmithSTC/stedit/src/stedit.xrc&amp;quot;&lt;br /&gt;
 REM but when decoded by the following, it is truncated to &amp;quot;At &amp;quot; in xrc.pox (and in .pot), because it stops on the second &amp;quot;, just before else. Is there a way to avoid this ?&lt;br /&gt;
 REM NOTE : in stedlgs_wdr.xrc, we have &amp;quot;At \&amp;quot;else\&amp;quot; folding&amp;quot; but this string has not such problem.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM Extracting strings from files as .xml, .xrc need more work because there is nothing to speify than a string is translatable or not.&lt;br /&gt;
 REM May also need additionnal filters if the serached string is on several lines.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM In .xml files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; | grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v Atmega | grep -v atmega | grep -v ATXmega | grep -v AT90 | grep -v AT43 | grep -v AT86 | grep -v AT76 | grep -v ATA | grep -v ata | grep -v ATtiny | grep -v Attiny | grep -v attiny | grep -v mcpu | grep -v TC1 &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 REM On Windows, the find option -name manifest*.xml is not (still) accepted (msys2 version), so the output is filtered with 2 -F options.&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;title&amp;quot;  &amp;gt;&amp;gt;  src_xml_title.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_a.pot src_xml_title.cpp&lt;br /&gt;
 find xml2_a.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM The find for &amp;quot;title&amp;quot; does not work correctly for &amp;quot;description&amp;quot; if the string expands on several lines ! Only the first line is kept =&amp;gt; the extracted text is truncated.&lt;br /&gt;
 REM With the following version, the string begin with &amp;quot;description&amp;quot; line and ends on &amp;quot;author&amp;quot; line =&amp;gt; this implies than the order of the fields are the same in all manifests.&lt;br /&gt;
 REM More, if in manifest*.xml, in the description string, there is a CR/LF, it should be kept in the original string, because even if poedit &amp;quot;complains&amp;quot; the translation takes it into account.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml_desc.cpp     2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_b.pot src_xml_desc.cpp&lt;br /&gt;
 find xml2_b.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword thanksTo&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/thanksTo/,/&amp;gt;/p&amp;quot; | sed '/license/d'   | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_thanks.cpp  2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_c.pot src_xml_thanks.cpp&lt;br /&gt;
 find xml2_c.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword author : need to modify manifest.xml in wxSmithAUI because author contains characters with accents.&lt;br /&gt;
 REM Add the = sign to avoid authorEmail and/or authorWeb lines which does not need to be translated&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/author=/,/&amp;gt;/p&amp;quot; | sed '/authorEmail/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_author.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_d.pot src_xml_author.cpp&lt;br /&gt;
 find xml2_d.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword license (single line); include the = sign to be sure that lines containing the word license in a sentence are not kept.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;license=&amp;quot;  &amp;gt;&amp;gt;  src_xml_lic.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_e.pot src_xml_lic.cpp&lt;br /&gt;
 find xml2_e.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END !!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 &lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9713</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9713"/>
		<updated>2022-11-24T16:16:08Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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. It also extract strings from compiler's xml files and descriptions fields found in manifest*.xml from 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools may be downloaded from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools/tree/master/Unix_Tools Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
The content of '''extract.cmd''' is below (or you can download it from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools Extract-Tool] with also a recent bash version, and a copy of unix tools and wxrc):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
   &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/scriptedwizard/resources | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks4.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks4.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o  coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM echo &amp;quot;Special case : Search for strings identified with wxTRANSLATE in wxscolourproperty.cpp&amp;quot;&lt;br /&gt;
 REM find ../plugins/contrib/wxSmith/wxwidgets/properties/wxscolourproperty.cpp | xargs grep -F &amp;quot;wxTRANSLATE&amp;quot; | sed 's/wxTRANSLATE/_/' &amp;gt; test_wxtranslate.cpp&lt;br /&gt;
 REM find test_wxtranslate.cpp | xargs xgettext --keyword=_ -o coreplugins3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM find coreplugins3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM Why next lines ? modifications in recent wxrc ? string modif ? Only one line (1515) in compiler_options.xrc has a problem, though the same syntax in a previous line (1151) is OK !&lt;br /&gt;
 sed -i 's/\&amp;quot;Compiling &amp;lt;file&amp;gt;...\&amp;quot;/\\\&amp;quot;Compiling &amp;lt;file&amp;gt;...\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM Eliminate a truncated string containing only &amp;quot;At &amp;quot;.&lt;br /&gt;
 sed -i 's/\&amp;quot;else\&amp;quot;/\\\&amp;quot;else\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM In .xrc files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 grep -v msp430x plugins_xrc2.cpp | grep -v dragon_ | 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 | grep -v TC1 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 REM In plugins_xrc.cpp we have a line containing &amp;quot;At &amp;quot;else&amp;quot; folding&amp;quot; (2826) pour #line 1644 &amp;quot;../plugins/contrib/wxSmithSTC/stedit/src/stedit.xrc&amp;quot;&lt;br /&gt;
 REM but when decoded by the following, it is truncated to &amp;quot;At &amp;quot; in xrc.pox (and in .pot), because it stops on the second &amp;quot;, just before else. Is there a way to avoid this ?&lt;br /&gt;
 REM NOTE : in stedlgs_wdr.xrc, we have &amp;quot;At \&amp;quot;else\&amp;quot; folding&amp;quot; but this string has not such problem.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM Extracting strings from files as .xml, .xrc need more work because there is nothing to speify than a string is translatable or not.&lt;br /&gt;
 REM May also need additionnal filters if the serached string is on several lines.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM In .xml files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; | grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v Atmega | grep -v atmega | grep -v ATXmega | grep -v AT90 | grep -v AT43 | grep -v AT86 | grep -v AT76 | grep -v ATA | grep -v ata | grep -v ATtiny | grep -v Attiny | grep -v attiny | grep -v mcpu | grep -v TC1 &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 REM On Windows, the find option -name manifest*.xml is not (still) accepted (msys2 version), so the output is filtered with 2 -F options.&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;title&amp;quot;  &amp;gt;&amp;gt;  src_xml_title.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_a.pot src_xml_title.cpp&lt;br /&gt;
 find xml2_a.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM The find for &amp;quot;title&amp;quot; does not work correctly for &amp;quot;description&amp;quot; if the string expands on several lines ! Only the first line is kept =&amp;gt; the extracted text is truncated.&lt;br /&gt;
 REM With the following version, the string begin with &amp;quot;description&amp;quot; line and ends on &amp;quot;author&amp;quot; line =&amp;gt; this implies than the order of the fields are the same in all manifests.&lt;br /&gt;
 REM More, if in manifest*.xml, in the description string, there is a CR/LF, it should be kept in the original string, because even if poedit &amp;quot;complains&amp;quot; the translation takes it into account.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml_desc.cpp     2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_b.pot src_xml_desc.cpp&lt;br /&gt;
 find xml2_b.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword thanksTo&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/thanksTo/,/&amp;gt;/p&amp;quot; | sed '/license/d'   | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_thanks.cpp  2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_c.pot src_xml_thanks.cpp&lt;br /&gt;
 find xml2_c.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword author : need to modify manifest.xml in wxSmithAUI because author contains characters with accents.&lt;br /&gt;
 REM Add the = sign to avoid authorEmail and/or authorWeb lines which does not need to be translated&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/author=/,/&amp;gt;/p&amp;quot; | sed '/authorEmail/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_author.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_d.pot src_xml_author.cpp&lt;br /&gt;
 find xml2_d.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword license (single line); include the = sign to be sure that lines containing the word license in a sentence are not kept.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;license=&amp;quot;  &amp;gt;&amp;gt;  src_xml_lic.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_e.pot src_xml_lic.cpp&lt;br /&gt;
 find xml2_e.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END !!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 &lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9712</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9712"/>
		<updated>2022-11-24T16:15:07Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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. It also extract strings from compiler's xml files and descriptions fields found in manifest*.xml from 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools may be downloaded from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools/tree/master/Unix_Tools Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
The content of '''extract.cmd''' is below (or you can download it from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools Extract-Tool] with also a recent bash version, and a copy of unix tools and wxrc):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
   &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/scriptedwizard/resources | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks4.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks4.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o  coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM echo &amp;quot;Special case : Search for strings identified with wxTRANSLATE in wxscolourproperty.cpp&amp;quot;&lt;br /&gt;
 REM find ../plugins/contrib/wxSmith/wxwidgets/properties/wxscolourproperty.cpp | xargs grep -F &amp;quot;wxTRANSLATE&amp;quot; | sed 's/wxTRANSLATE/_/' &amp;gt; test_wxtranslate.cpp&lt;br /&gt;
 REM find test_wxtranslate.cpp | xargs xgettext --keyword=_ -o coreplugins3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM find coreplugins3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM Why next lines ? modifications in recent wxrc ? string modif ? Only one line (1515) in compiler_options.xrc has a problem, though the same syntax in a previous line (1151) is OK !&lt;br /&gt;
 sed -i 's/\&amp;quot;Compiling &amp;lt;file&amp;gt;...\&amp;quot;/\\\&amp;quot;Compiling &amp;lt;file&amp;gt;...\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM Eliminate a truncated string containing only &amp;quot;At &amp;quot;.&lt;br /&gt;
 sed -i 's/\&amp;quot;else\&amp;quot;/\\\&amp;quot;else\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
 REM In .xrc files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 grep -v msp430x plugins_xrc2.cpp | grep -v dragon_ | 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 | grep -v TC1 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 REM In plugins_xrc.cpp we have a line containing &amp;quot;At &amp;quot;else&amp;quot; folding&amp;quot; (2826) pour #line 1644 &amp;quot;../plugins/contrib/wxSmithSTC/stedit/src/stedit.xrc&amp;quot;&lt;br /&gt;
 REM but when decoded by the following, it is truncated to &amp;quot;At &amp;quot; in xrc.pox (and in .pot), because it stops on the second &amp;quot;, just before else. Is there a way to avoid this ?&lt;br /&gt;
 REM NOTE : in stedlgs_wdr.xrc, we have &amp;quot;At \&amp;quot;else\&amp;quot; folding&amp;quot; but this string has not such problem.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM Extracting strings from files as .xml, .xrc need more work because there is nothing to speify than a string is translatable or not.&lt;br /&gt;
 REM May also need additionnal filters if the serached string is on several lines.&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 REM In .xml files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; | grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v Atmega | grep -v atmega | grep -v ATXmega | grep -v AT90 | grep -v AT43 | grep -v AT86 | grep -v AT76 | grep -v ATA | grep -v ata | grep -v ATtiny | grep -v Attiny | grep -v attiny | grep -v mcpu | grep -v TC1 &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 REM On Windows, the find option -name manifest*.xml is not (still) accepted (msys2 version), so the output is filtered with 2 -F options.&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;title&amp;quot;  &amp;gt;&amp;gt;  src_xml_title.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_a.pot src_xml_title.cpp&lt;br /&gt;
 find xml2_a.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 REM The find for &amp;quot;title&amp;quot; does not work correctly for &amp;quot;description&amp;quot; if the string expands on several lines ! Only the first line is kept =&amp;gt; the extracted text is truncated.&lt;br /&gt;
 REM With the following version, the string begin with &amp;quot;description&amp;quot; line and ends on &amp;quot;author&amp;quot; line =&amp;gt; this implies than the order of the fields are the same in all manifests.&lt;br /&gt;
 REM More, if in manifest*.xml, in the description string, there is a CR/LF, it should be kept in the original string, because even if poedit &amp;quot;complains&amp;quot; the translation takes it into account.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml_desc.cpp     2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_b.pot src_xml_desc.cpp&lt;br /&gt;
 find xml2_b.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword thanksTo&lt;br /&gt;
find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/thanksTo/,/&amp;gt;/p&amp;quot; | sed '/license/d'   | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_thanks.cpp  2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_c.pot src_xml_thanks.cpp&lt;br /&gt;
 find xml2_c.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword author : need to modify manifest.xml in wxSmithAUI because author contains characters with accents.&lt;br /&gt;
 REM Add the = sign to avoid authorEmail and/or authorWeb lines which does not need to be translated&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/author=/,/&amp;gt;/p&amp;quot; | sed '/authorEmail/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_author.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_d.pot src_xml_author.cpp&lt;br /&gt;
 find xml2_d.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 REM for keyword license (single line); include the = sign to be sure that lines containing the word license in a sentence are not kept.&lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;license=&amp;quot;  &amp;gt;&amp;gt;  src_xml_lic.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -s -o xml2_e.pot src_xml_lic.cpp&lt;br /&gt;
 find xml2_e.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END !!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 &lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9711</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9711"/>
		<updated>2022-11-24T16:08:09Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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. It also extract strings from compiler's xml files and descriptions fields found in manifest*.xml from 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools may be downloaded from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools/tree/master/Unix_Tools Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
The content of '''extract.cmd''' is below (or you can download it from a git repository [https://github.com/gerard-durand/codeblocks_gd_extract_tools Extract-Tool] with also a recent bash version, and a copy of unix tools and wxrc):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
  &lt;br /&gt;
echo off&lt;br /&gt;
echo ****************************&lt;br /&gt;
echo * creating core .pot files *&lt;br /&gt;
echo ****************************&lt;br /&gt;
echo * &lt;br /&gt;
find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../plugins/scriptedwizard/resources | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks4.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
find codeblocks4.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
REM echo &amp;quot;Special case : Search for strings identified with wxTRANSLATE in wxscolourproperty.cpp&amp;quot;&lt;br /&gt;
REM find ../plugins/contrib/wxSmith/wxwidgets/properties/wxscolourproperty.cpp | xargs grep -F &amp;quot;wxTRANSLATE&amp;quot; | sed 's/wxTRANSLATE/_/' &amp;gt; test_wxtranslate.cpp&lt;br /&gt;
REM find test_wxtranslate.cpp | xargs xgettext --keyword=_ -o coreplugins3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
REM find coreplugins3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo *******************************&lt;br /&gt;
echo * creating contrib .pot files *&lt;br /&gt;
echo *******************************&lt;br /&gt;
echo *&lt;br /&gt;
&lt;br /&gt;
find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo ***************************************&lt;br /&gt;
echo * creating .cpp files from .xrc files *&lt;br /&gt;
echo ***************************************&lt;br /&gt;
echo *&lt;br /&gt;
find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
REM Why next lines ? modifications in recent wxrc ? string modif ? Only one line (1515) in compiler_options.xrc has a problem, though the same syntax in a previous line (1151) is OK !&lt;br /&gt;
sed -i 's/\&amp;quot;Compiling &amp;lt;file&amp;gt;...\&amp;quot;/\\\&amp;quot;Compiling &amp;lt;file&amp;gt;...\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
REM Eliminate a truncated string containing only &amp;quot;At &amp;quot;.&lt;br /&gt;
sed -i 's/\&amp;quot;else\&amp;quot;/\\\&amp;quot;else\\\&amp;quot;/g' plugins_xrc2.cpp&lt;br /&gt;
REM In .xrc files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
grep -v msp430x plugins_xrc2.cpp | grep -v dragon_ | 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 | grep -v TC1 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
&lt;br /&gt;
del plugins_xrc2.cpp&lt;br /&gt;
REM In plugins_xrc.cpp we have a line containing &amp;quot;At &amp;quot;else&amp;quot; folding&amp;quot; (2826) pour #line 1644 &amp;quot;../plugins/contrib/wxSmithSTC/stedit/src/stedit.xrc&amp;quot;&lt;br /&gt;
REM but when decoded by the following, it is truncated to &amp;quot;At &amp;quot; in xrc.pox (and in .pot), because it stops on the second &amp;quot;, just before else. Is there a way to avoid this ?&lt;br /&gt;
REM NOTE : in stedlgs_wdr.xrc, we have &amp;quot;At \&amp;quot;else\&amp;quot; folding&amp;quot; but this string has not such problem.&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo *************************************************&lt;br /&gt;
echo * creating .pot files from those local new .cpp *&lt;br /&gt;
echo *************************************************&lt;br /&gt;
echo *&lt;br /&gt;
find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
REM Extracting strings from files as .xml, .xrc need more work because there is nothing to speify than a string is translatable or not.&lt;br /&gt;
REM May also need additionnal filters if the serached string is on several lines.&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo *************************************************&lt;br /&gt;
echo * extracting strings from .xml compilers files  *&lt;br /&gt;
echo *************************************************&lt;br /&gt;
echo *&lt;br /&gt;
find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
REM In .xml files, there is no way to indicate that a string is translatable or not. So those following grep - v try to eliminate some lines.&lt;br /&gt;
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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; | grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v Atmega | grep -v atmega | grep -v ATXmega | grep -v AT90 | grep -v AT43 | grep -v AT86 | grep -v AT76 | grep -v ATA | grep -v ata | grep -v ATtiny | grep -v Attiny | grep -v attiny | grep -v mcpu | grep -v TC1 &amp;gt; src_xml2.cpp&lt;br /&gt;
xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo *************************************************&amp;quot;&lt;br /&gt;
echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
echo *************************************************&amp;quot;&lt;br /&gt;
echo *&lt;br /&gt;
&lt;br /&gt;
REM On Windows, the find option -name manifest*.xml is not (still) accepted (msys2 version), so the output is filtered with 2 -F options.&lt;br /&gt;
&lt;br /&gt;
find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;title&amp;quot;  &amp;gt;&amp;gt;  src_xml_title.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
xgettext -a -s -o xml2_a.pot src_xml_title.cpp&lt;br /&gt;
find xml2_a.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
REM The find for &amp;quot;title&amp;quot; does not work correctly for &amp;quot;description&amp;quot; if the string expands on several lines ! Only the first line is kept =&amp;gt; the extracted text is truncated.&lt;br /&gt;
REM With the following version, the string begin with &amp;quot;description&amp;quot; line and ends on &amp;quot;author&amp;quot; line =&amp;gt; this implies than the order of the fields are the same in all manifests.&lt;br /&gt;
REM More, if in manifest*.xml, in the description string, there is a CR/LF, it should be kept in the original string, because even if poedit &amp;quot;complains&amp;quot; the translation takes it into account.&lt;br /&gt;
find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml_desc.cpp     2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
xgettext -a -s -o xml2_b.pot src_xml_desc.cpp&lt;br /&gt;
find xml2_b.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
REM for keyword thanksTo&lt;br /&gt;
find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/thanksTo/,/&amp;gt;/p&amp;quot; | sed '/license/d'   | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_thanks.cpp  2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
xgettext -a -s -o xml2_c.pot src_xml_thanks.cpp&lt;br /&gt;
find xml2_c.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
REM for keyword author : need to modify manifest.xml in wxSmithAUI because author contains characters with accents.&lt;br /&gt;
REM Add the = sign to avoid authorEmail and/or authorWeb lines which does not need to be translated&lt;br /&gt;
find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/author=/,/&amp;gt;/p&amp;quot; | sed '/authorEmail/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt;  src_xml_author.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
xgettext -a -s -o xml2_d.pot src_xml_author.cpp&lt;br /&gt;
find xml2_d.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
REM for keyword license (single line); include the = sign to be sure that lines containing the word license in a sentence are not kept.&lt;br /&gt;
find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs grep -F &amp;quot;license=&amp;quot;  &amp;gt;&amp;gt;  src_xml_lic.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
xgettext -a -s -o xml2_e.pot src_xml_lic.cpp&lt;br /&gt;
find xml2_e.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo **********************************&lt;br /&gt;
echo * Merging and sorting .pot files *&lt;br /&gt;
echo **********************************&lt;br /&gt;
echo *&lt;br /&gt;
msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
&lt;br /&gt;
rm -f *.pox&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo ***************&lt;br /&gt;
echo * The END !!! *&lt;br /&gt;
echo ***************&lt;br /&gt;
echo on&lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9710</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9710"/>
		<updated>2022-11-21T09:59:37Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: /* Get the English POT file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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. It also extract strings from compiler's xml files and descriptions fields found in manifest*.xml from 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools may be downloaded from [http://pagesperso-orange.fr/thunderbird-noia2/Unix_Tools.zip Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
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 more recent bash version, and a copy of unix tools and wxrc):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
  &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; |  grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v AT90 | grep -v ATtiny | grep -v mcpu &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml3.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -o xml2.pot src_xml3.cpp&lt;br /&gt;
 find xml2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END !!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=CB_Clangd_Client&amp;diff=9709</id>
		<title>CB Clangd Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=CB_Clangd_Client&amp;diff=9709"/>
		<updated>2022-11-21T09:48:07Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: /* Linux: Clangd executable install process: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The repository page of this plugin is: https://sourceforge.net/projects/cb-clangd-client/&lt;br /&gt;
&lt;br /&gt;
It uses [https://clangd.llvm.org/ clangd] through [https://en.wikipedia.org/wiki/Language_Server_Protocol Language Server Protocol].&lt;br /&gt;
&lt;br /&gt;
The related forum discussion is:  — [https://forums.codeblocks.org/index.php/topic,24357.html Code completion using LSP and clangd]&lt;br /&gt;
== '''What is Clangd'''==&lt;br /&gt;
&lt;br /&gt;
    clangd understands your C++ code and adds smart features to your editor:&lt;br /&gt;
:::* code completion&lt;br /&gt;
:::* compile errors &lt;br /&gt;
:::* go-to-definition &lt;br /&gt;
:::* go-to-implementation&lt;br /&gt;
:::* find references&lt;br /&gt;
:::   and more.&lt;br /&gt;
&lt;br /&gt;
    clangd is a language server that can work with your editor via a plugin.&lt;br /&gt;
    CodeBlocks provides Clangd_client as the needed plugin.&lt;br /&gt;
&lt;br /&gt;
    Clangd_client additionally enhances the clangd server by providing:&lt;br /&gt;
&lt;br /&gt;
:::* call tips&lt;br /&gt;
:::* function definitions&lt;br /&gt;
:::* parameter definitions&lt;br /&gt;
:::* previous and next function positioning&lt;br /&gt;
:::* symbols browser&lt;br /&gt;
:::* go-to-file&lt;br /&gt;
:::* go-to-function&lt;br /&gt;
:::* symbol renaming&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Configuring clangd_client'''==&lt;br /&gt;
:: Clangd_client requires the third-party binary clangd executable.&lt;br /&gt;
:: See '''Windows: Compiler Clangd/LLVM Package Installer''' below to install it.&lt;br /&gt;
:: or  '''Linux: Clangd executable install process'''&lt;br /&gt;
&lt;br /&gt;
:: After a success clangd executable install, perform the following:&lt;br /&gt;
:::Disable the &amp;quot;CodeCompletion&amp;quot; plugin.&lt;br /&gt;
::::* Navigate to Setting-&amp;gt;Plugins-&amp;gt;Manage Plugins and '''disable''' CodeCompletion.&lt;br /&gt;
::::* Navigate to Setting-&amp;gt;Plugins-&amp;gt;Manage Plugins and '''enable''' Clangd_client.&lt;br /&gt;
:::'''Restart Codeblocks'''.&lt;br /&gt;
&lt;br /&gt;
:::Tell CodeBlocks (or verify) where the clangd executable resides:&lt;br /&gt;
::::* Navigate to Setting-&amp;gt;Editor-&amp;gt;Clangd_client-&amp;gt;C/C++ parser(tab) and verify or enter the location of the clangd executable in the box labeled &amp;quot;Specify clangd executable to use&amp;quot;.&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Installing Clangd_client from source or pre-built binary ''' ==&lt;br /&gt;
&lt;br /&gt;
#     Install the LLVM or Clangd.exe as documented in the section below entitled:&lt;br /&gt;
#: '''Windows Clangd executable install process'''&lt;br /&gt;
#::&amp;lt;br /&amp;gt;&lt;br /&gt;
#     Disable the Code completion plugin as follows:&lt;br /&gt;
#:    a) Open the Plugin manager via  Code::Blocks menu &lt;br /&gt;
#::         &amp;quot;MainMenu=&amp;gt;Plugins=&amp;gt;Manage plugins...&amp;quot; &lt;br /&gt;
#:    b) In the Manage Plugin dialog do the following:&lt;br /&gt;
#::          i  ) Find and select the &amp;quot;Code completion&amp;quot; plugin via it's title &lt;br /&gt;
#::          ii ) Press the &amp;quot;Disable&amp;quot; button on the right near the top&lt;br /&gt;
#::          iii) If you get any errors please try again.&lt;br /&gt;
#::&amp;lt;br /&amp;gt;	   &lt;br /&gt;
#    Install the Clangd-Client Plugin using one of the following options, which are documented below: &lt;br /&gt;
#:      a) Install via the Plugin Manager&lt;br /&gt;
#:      b) Manually install the plugin files&lt;br /&gt;
#:&amp;lt;br /&amp;gt;	&lt;br /&gt;
#    Configure the Clangd-Client Plugin for use as follows:&lt;br /&gt;
#:      a) Select the CodeBlocks menu item &amp;quot;Settings-&amp;gt;Editor...&amp;quot;&lt;br /&gt;
#:      b) In the list on the left click/select the &amp;quot;clangd_client&amp;quot; option.&lt;br /&gt;
#:      c) In the &amp;quot;C/C++ parser&amp;quot; tab change the &amp;quot;Specify clangd executable to use&amp;quot; to reference the clangd.exe you installed via step 1) above. &lt;br /&gt;
           Some examples of this could be:&lt;br /&gt;
              C:\msys64\clang64\bin\clangd.exe&lt;br /&gt;
              C:\msys64\clang32\bin\clangd.exe&lt;br /&gt;
              C:\LLVM\bin\clangd.exe&lt;br /&gt;
              C:\comilers\clang\clangd.exe&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Manually Remove Clangd-Client Plugin''' ==&lt;br /&gt;
&lt;br /&gt;
#   Exit Code::Blocks!&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#   If you manually installed the files or used the Plugin manager then you can do the following:&lt;br /&gt;
#:  a) In the Code::Blocks '''...\share\CodeBlocks''' folder delete the clangd_client.zip file&lt;br /&gt;
#:  b) In the Code::Blocks '''...\share\CodeBlocks\plugins''' folder delete the clangd_client.dll file&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#        If you installed via the Plugin manager then you can delete the files with the following commands:&lt;br /&gt;
#:  a) del '''%APPDATA%\CodeBlocks\share\codeblocks\plugins\clangd_client.dll'''&lt;br /&gt;
#:  b) del '''%APPDATA%\CodeBlocks\share\codeblocks\clangd_client.zip'''&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#    If you want to reuse older code completion remember to re-enable the plugin&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Clangd executable install process:''' ==&lt;br /&gt;
&lt;br /&gt;
::There are three main options to install the clangd.exe:&lt;br /&gt;
#        Install the LLVM compiler.&lt;br /&gt;
#        Manully extract the required files from the LLVM compiler.&lt;br /&gt;
#        Install the Clangd package for the Windows compiler you are using if it is available.&lt;br /&gt;
:&amp;lt;br /&amp;gt;&lt;br /&gt;
::The  process for the three options above are detailed below.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Install the LLVM compiler''' ==&lt;br /&gt;
&lt;br /&gt;
#    Download the latest (non RC/Beta) LLVM Windows executable for your OS (Win32 or Win64) from the following&lt;br /&gt;
#:       Github LLVM download page:&lt;br /&gt;
#:       https://github.com/llvm/llvm-project/releases&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#:   As of Jan 2022 the Windows files are named as follows:&lt;br /&gt;
#:      LLVM-&amp;lt;version&amp;gt;-win64.exe&lt;br /&gt;
#:      LLVM-&amp;lt;version&amp;gt;-win32.exe&lt;br /&gt;
#:   where &amp;lt;version&amp;gt; is the LLVM version, like 13.0.0 or 13.0.1.&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#    Run the LLVM-&amp;lt;version&amp;gt;-win&amp;lt;xx&amp;gt;.exe you downloaded to install the LLVM compiler.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Manually Extract File from LLVM compiler''' ==&lt;br /&gt;
#    Download the latest (non RC/Beta) LLVM Windows executable for your OS (Win32 or Win64) from the following &lt;br /&gt;
#::       Github LLVM download page:&lt;br /&gt;
#::       https://github.com/llvm/llvm-project/releases&lt;br /&gt;
#::&lt;br /&gt;
#::   As of Jan 2022 the Windows files are names as follows:&lt;br /&gt;
#::      LLVM-&amp;lt;version&amp;gt;-win64.exe&lt;br /&gt;
#::      LLVM-&amp;lt;version&amp;gt;-win32.exe&lt;br /&gt;
#::   where &amp;lt;version&amp;gt; is the LLVM version, like 13.0.0 or 13.0.1.&lt;br /&gt;
#::&lt;br /&gt;
#    Unzip the LLVM-&amp;lt;version&amp;gt;-win&amp;lt;xx&amp;gt;.exe file you downloaded using 7zip or your prefered ZIP program into a sub directory&lt;br /&gt;
#    Create a new directory to put the clangd.exe and dll's&lt;br /&gt;
#    Copy the following files into a the new directory created from the unziped #::LLVM directory:&lt;br /&gt;
#::            bin\clangd.exe&lt;br /&gt;
#::            bin\msvcp140.dll&lt;br /&gt;
#::            bin\vcruntime140.dll&lt;br /&gt;
#::            bin\vcruntime140_1.dll&lt;br /&gt;
#::&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Compiler Clangd/LLVM Package Installer''' ==&lt;br /&gt;
    Due to the number of different compilers available for Windows not all of the compilers will have either/both the Clang or LLVM required files.&lt;br /&gt;
&lt;br /&gt;
    If you want to install the specific package(s) for the Windows compiler you are using in order to use it's clangd.exe file please follow the instructions below for the specific compiler you have installed:&lt;br /&gt;
&lt;br /&gt;
    '''MSYS2 Compiler - MinGW64'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       There are two main options to install the clangd.exe as follows:&lt;br /&gt;
       1) The first option in order to  minimise disk space is to install the Clang extra &lt;br /&gt;
          tools using one of the following packages:&lt;br /&gt;
&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           |               Package                    | Clangd executable      |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           | mingw-w64-clang-x86_64-clang-tools-extra | clang64/bin/clangd.exe |&lt;br /&gt;
           | mingw-w64-x86_64-clang-tools-extra       | mingw64/bin/clangd.exe |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
&lt;br /&gt;
          To intall the package do the following:&lt;br /&gt;
           a) Open the msys2.exe bash shell &lt;br /&gt;
           b) Run the following command:&lt;br /&gt;
                  pacman -S &amp;lt;Package name in the table above&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
       '''OR'''&lt;br /&gt;
   &lt;br /&gt;
       2) The second option is to intall the full Clang tool chain as follows:&lt;br /&gt;
           a) Open the msys2.exe bash shell &lt;br /&gt;
           b) Run the following command:&lt;br /&gt;
                  pacman -S mingw-w64-clang-x86_64-toolchain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    '''MSYS2 Compiler - MinGW32'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       There are two main options to install the clangd.exe as follows:&lt;br /&gt;
&lt;br /&gt;
       1) The first option in order to  minimise disk space is to install the Clang extra &lt;br /&gt;
          tools using one of the following packages:&lt;br /&gt;
&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           |               Package                    | Clangd executable      |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           | mingw-w64-clang-i686-clang-tools-extra   | clang32/bin/clangd.exe |&lt;br /&gt;
           | mingw-w64-i686-clang-tools-extra         | mingw32/bin/clangd.exe |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
&lt;br /&gt;
          To intall the package do the following:&lt;br /&gt;
            a) Open the msys2.exe bash shell &lt;br /&gt;
            b) Run the following command:&lt;br /&gt;
                  pacman -S &amp;lt;Package name in the table above&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        '''OR'''&lt;br /&gt;
&lt;br /&gt;
       2) The second option is to install the full Clang tool chain as follows:&lt;br /&gt;
          a) Open the msys2.exe bash shell &lt;br /&gt;
          b) Run the following command:&lt;br /&gt;
                  pacman -S mingw-w64-clang-i686-toolchain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 -------------------------------------------------------------------------------------&lt;br /&gt;
 '''Notes from the CodeBlocks forum to avoid mixing incompatible gcc/clangd executables.'''&lt;br /&gt;
 -------------------------------------------------------------------------------------&lt;br /&gt;
    https://forums.codeblocks.org/index.php/topic,24357.msg169412.html#msg169412&lt;br /&gt;
&lt;br /&gt;
::: '''Don't mix mingw64 with clang64'''.&lt;br /&gt;
&lt;br /&gt;
:: If you are using the gcc from msys2, (the compilers in the folder '''msys64\mingw64\bin'''),&lt;br /&gt;
:: you should use &amp;quot;mingw-w64-x86_64-clang-tools-extra&amp;quot;, &lt;br /&gt;
:: (the clangd.exe is under the folder '''msys64\mingw64\bin''') the same folder as your gcc.exe.&lt;br /&gt;
::&amp;lt;br /&amp;gt; &lt;br /&gt;
:: If you are using the clang tool chain, (the folder '''msys64\clang64\bin'''),&lt;br /&gt;
::	you should use &amp;quot;mingw-w64-clang-x86_64-clang-tools-extra&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:: I found that I just make a big mistake. That is: I used the gcc toolchain from&lt;br /&gt;
:: '''msys64\mingw64\bin''', but I used the clangd.exe from '''msys64\clang64\bin'''.&lt;br /&gt;
:: The result is I got a lot of LSP diagnostics messages and errors.&lt;br /&gt;
:: Luckily I found the reason, and fixed this issue. Hope this will help others.&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
== '''Linux: Clangd executable install process:''' ==&lt;br /&gt;
::&lt;br /&gt;
::NOTE: Clangd_client plugin requires a clangd executable version 13 or greater.&lt;br /&gt;
::Check your current clangd version by running '''clangd --version'''&lt;br /&gt;
::If the version is less than 13 you will have to install a newer version.&lt;br /&gt;
:::See https://clangd.llvm.org/installation.html&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
::Installing the clangd package will usually give you a slightly older version.&lt;br /&gt;
::Test this by issuing '''apt-get install --dry-run clangd'''&lt;br /&gt;
::As of 2022/11/16, this suggest that clangd version 10 will be installed.&lt;br /&gt;
::If the clangd version shows less than version 13, you'll have to install a specific version as follows:&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
::Install a packaged release (''must be version 13 or greater''):&lt;br /&gt;
::::'''sudo apt-get install clangd-13''' ''(Must be version 13 or greater)''.&lt;br /&gt;
&lt;br /&gt;
::This will install clangd as '''/usr/bin/clangd-13'''.&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
:: You can now configure clangd_client plugin by following the above instructions at&lt;br /&gt;
:::: [https://wiki.codeblocks.org/index.php/CB_Clangd_Client#Configuring_clangd_client] '''Configuring clangd_client'''&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
:: If you prefer to install the entire LLVM/Clang package, for convenience, there is&lt;br /&gt;
:: an automatic installation script available that installs LLVM for you.&lt;br /&gt;
:: To install the latest stable version: see [https://apt.llvm.org/] '''Automatic installation script'''.&lt;br /&gt;
:: Note that you can specify the version number with this script.&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=CB_Clangd_Client&amp;diff=9708</id>
		<title>CB Clangd Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=CB_Clangd_Client&amp;diff=9708"/>
		<updated>2022-11-21T09:47:32Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: /* Configuring clangd_client */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The repository page of this plugin is: https://sourceforge.net/projects/cb-clangd-client/&lt;br /&gt;
&lt;br /&gt;
It uses [https://clangd.llvm.org/ clangd] through [https://en.wikipedia.org/wiki/Language_Server_Protocol Language Server Protocol].&lt;br /&gt;
&lt;br /&gt;
The related forum discussion is:  — [https://forums.codeblocks.org/index.php/topic,24357.html Code completion using LSP and clangd]&lt;br /&gt;
== '''What is Clangd'''==&lt;br /&gt;
&lt;br /&gt;
    clangd understands your C++ code and adds smart features to your editor:&lt;br /&gt;
:::* code completion&lt;br /&gt;
:::* compile errors &lt;br /&gt;
:::* go-to-definition &lt;br /&gt;
:::* go-to-implementation&lt;br /&gt;
:::* find references&lt;br /&gt;
:::   and more.&lt;br /&gt;
&lt;br /&gt;
    clangd is a language server that can work with your editor via a plugin.&lt;br /&gt;
    CodeBlocks provides Clangd_client as the needed plugin.&lt;br /&gt;
&lt;br /&gt;
    Clangd_client additionally enhances the clangd server by providing:&lt;br /&gt;
&lt;br /&gt;
:::* call tips&lt;br /&gt;
:::* function definitions&lt;br /&gt;
:::* parameter definitions&lt;br /&gt;
:::* previous and next function positioning&lt;br /&gt;
:::* symbols browser&lt;br /&gt;
:::* go-to-file&lt;br /&gt;
:::* go-to-function&lt;br /&gt;
:::* symbol renaming&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Configuring clangd_client'''==&lt;br /&gt;
:: Clangd_client requires the third-party binary clangd executable.&lt;br /&gt;
:: See '''Windows: Compiler Clangd/LLVM Package Installer''' below to install it.&lt;br /&gt;
:: or  '''Linux: Clangd executable install process'''&lt;br /&gt;
&lt;br /&gt;
:: After a success clangd executable install, perform the following:&lt;br /&gt;
:::Disable the &amp;quot;CodeCompletion&amp;quot; plugin.&lt;br /&gt;
::::* Navigate to Setting-&amp;gt;Plugins-&amp;gt;Manage Plugins and '''disable''' CodeCompletion.&lt;br /&gt;
::::* Navigate to Setting-&amp;gt;Plugins-&amp;gt;Manage Plugins and '''enable''' Clangd_client.&lt;br /&gt;
:::'''Restart Codeblocks'''.&lt;br /&gt;
&lt;br /&gt;
:::Tell CodeBlocks (or verify) where the clangd executable resides:&lt;br /&gt;
::::* Navigate to Setting-&amp;gt;Editor-&amp;gt;Clangd_client-&amp;gt;C/C++ parser(tab) and verify or enter the location of the clangd executable in the box labeled &amp;quot;Specify clangd executable to use&amp;quot;.&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Installing Clangd_client from source or pre-built binary ''' ==&lt;br /&gt;
&lt;br /&gt;
#     Install the LLVM or Clangd.exe as documented in the section below entitled:&lt;br /&gt;
#: '''Windows Clangd executable install process'''&lt;br /&gt;
#::&amp;lt;br /&amp;gt;&lt;br /&gt;
#     Disable the Code completion plugin as follows:&lt;br /&gt;
#:    a) Open the Plugin manager via  Code::Blocks menu &lt;br /&gt;
#::         &amp;quot;MainMenu=&amp;gt;Plugins=&amp;gt;Manage plugins...&amp;quot; &lt;br /&gt;
#:    b) In the Manage Plugin dialog do the following:&lt;br /&gt;
#::          i  ) Find and select the &amp;quot;Code completion&amp;quot; plugin via it's title &lt;br /&gt;
#::          ii ) Press the &amp;quot;Disable&amp;quot; button on the right near the top&lt;br /&gt;
#::          iii) If you get any errors please try again.&lt;br /&gt;
#::&amp;lt;br /&amp;gt;	   &lt;br /&gt;
#    Install the Clangd-Client Plugin using one of the following options, which are documented below: &lt;br /&gt;
#:      a) Install via the Plugin Manager&lt;br /&gt;
#:      b) Manually install the plugin files&lt;br /&gt;
#:&amp;lt;br /&amp;gt;	&lt;br /&gt;
#    Configure the Clangd-Client Plugin for use as follows:&lt;br /&gt;
#:      a) Select the CodeBlocks menu item &amp;quot;Settings-&amp;gt;Editor...&amp;quot;&lt;br /&gt;
#:      b) In the list on the left click/select the &amp;quot;clangd_client&amp;quot; option.&lt;br /&gt;
#:      c) In the &amp;quot;C/C++ parser&amp;quot; tab change the &amp;quot;Specify clangd executable to use&amp;quot; to reference the clangd.exe you installed via step 1) above. &lt;br /&gt;
           Some examples of this could be:&lt;br /&gt;
              C:\msys64\clang64\bin\clangd.exe&lt;br /&gt;
              C:\msys64\clang32\bin\clangd.exe&lt;br /&gt;
              C:\LLVM\bin\clangd.exe&lt;br /&gt;
              C:\comilers\clang\clangd.exe&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Manually Remove Clangd-Client Plugin''' ==&lt;br /&gt;
&lt;br /&gt;
#   Exit Code::Blocks!&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#   If you manually installed the files or used the Plugin manager then you can do the following:&lt;br /&gt;
#:  a) In the Code::Blocks '''...\share\CodeBlocks''' folder delete the clangd_client.zip file&lt;br /&gt;
#:  b) In the Code::Blocks '''...\share\CodeBlocks\plugins''' folder delete the clangd_client.dll file&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#        If you installed via the Plugin manager then you can delete the files with the following commands:&lt;br /&gt;
#:  a) del '''%APPDATA%\CodeBlocks\share\codeblocks\plugins\clangd_client.dll'''&lt;br /&gt;
#:  b) del '''%APPDATA%\CodeBlocks\share\codeblocks\clangd_client.zip'''&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#    If you want to reuse older code completion remember to re-enable the plugin&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Clangd executable install process:''' ==&lt;br /&gt;
&lt;br /&gt;
::There are three main options to install the clangd.exe:&lt;br /&gt;
#        Install the LLVM compiler.&lt;br /&gt;
#        Manully extract the required files from the LLVM compiler.&lt;br /&gt;
#        Install the Clangd package for the Windows compiler you are using if it is available.&lt;br /&gt;
:&amp;lt;br /&amp;gt;&lt;br /&gt;
::The  process for the three options above are detailed below.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Install the LLVM compiler''' ==&lt;br /&gt;
&lt;br /&gt;
#    Download the latest (non RC/Beta) LLVM Windows executable for your OS (Win32 or Win64) from the following&lt;br /&gt;
#:       Github LLVM download page:&lt;br /&gt;
#:       https://github.com/llvm/llvm-project/releases&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#:   As of Jan 2022 the Windows files are named as follows:&lt;br /&gt;
#:      LLVM-&amp;lt;version&amp;gt;-win64.exe&lt;br /&gt;
#:      LLVM-&amp;lt;version&amp;gt;-win32.exe&lt;br /&gt;
#:   where &amp;lt;version&amp;gt; is the LLVM version, like 13.0.0 or 13.0.1.&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#    Run the LLVM-&amp;lt;version&amp;gt;-win&amp;lt;xx&amp;gt;.exe you downloaded to install the LLVM compiler.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Manually Extract File from LLVM compiler''' ==&lt;br /&gt;
#    Download the latest (non RC/Beta) LLVM Windows executable for your OS (Win32 or Win64) from the following &lt;br /&gt;
#::       Github LLVM download page:&lt;br /&gt;
#::       https://github.com/llvm/llvm-project/releases&lt;br /&gt;
#::&lt;br /&gt;
#::   As of Jan 2022 the Windows files are names as follows:&lt;br /&gt;
#::      LLVM-&amp;lt;version&amp;gt;-win64.exe&lt;br /&gt;
#::      LLVM-&amp;lt;version&amp;gt;-win32.exe&lt;br /&gt;
#::   where &amp;lt;version&amp;gt; is the LLVM version, like 13.0.0 or 13.0.1.&lt;br /&gt;
#::&lt;br /&gt;
#    Unzip the LLVM-&amp;lt;version&amp;gt;-win&amp;lt;xx&amp;gt;.exe file you downloaded using 7zip or your prefered ZIP program into a sub directory&lt;br /&gt;
#    Create a new directory to put the clangd.exe and dll's&lt;br /&gt;
#    Copy the following files into a the new directory created from the unziped #::LLVM directory:&lt;br /&gt;
#::            bin\clangd.exe&lt;br /&gt;
#::            bin\msvcp140.dll&lt;br /&gt;
#::            bin\vcruntime140.dll&lt;br /&gt;
#::            bin\vcruntime140_1.dll&lt;br /&gt;
#::&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Compiler Clangd/LLVM Package Installer''' ==&lt;br /&gt;
    Due to the number of different compilers available for Windows not all of the compilers will have either/both the Clang or LLVM required files.&lt;br /&gt;
&lt;br /&gt;
    If you want to install the specific package(s) for the Windows compiler you are using in order to use it's clangd.exe file please follow the instructions below for the specific compiler you have installed:&lt;br /&gt;
&lt;br /&gt;
    '''MSYS2 Compiler - MinGW64'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       There are two main options to install the clangd.exe as follows:&lt;br /&gt;
       1) The first option in order to  minimise disk space is to install the Clang extra &lt;br /&gt;
          tools using one of the following packages:&lt;br /&gt;
&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           |               Package                    | Clangd executable      |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           | mingw-w64-clang-x86_64-clang-tools-extra | clang64/bin/clangd.exe |&lt;br /&gt;
           | mingw-w64-x86_64-clang-tools-extra       | mingw64/bin/clangd.exe |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
&lt;br /&gt;
          To intall the package do the following:&lt;br /&gt;
           a) Open the msys2.exe bash shell &lt;br /&gt;
           b) Run the following command:&lt;br /&gt;
                  pacman -S &amp;lt;Package name in the table above&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
       '''OR'''&lt;br /&gt;
   &lt;br /&gt;
       2) The second option is to intall the full Clang tool chain as follows:&lt;br /&gt;
           a) Open the msys2.exe bash shell &lt;br /&gt;
           b) Run the following command:&lt;br /&gt;
                  pacman -S mingw-w64-clang-x86_64-toolchain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    '''MSYS2 Compiler - MinGW32'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       There are two main options to install the clangd.exe as follows:&lt;br /&gt;
&lt;br /&gt;
       1) The first option in order to  minimise disk space is to install the Clang extra &lt;br /&gt;
          tools using one of the following packages:&lt;br /&gt;
&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           |               Package                    | Clangd executable      |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           | mingw-w64-clang-i686-clang-tools-extra   | clang32/bin/clangd.exe |&lt;br /&gt;
           | mingw-w64-i686-clang-tools-extra         | mingw32/bin/clangd.exe |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
&lt;br /&gt;
          To intall the package do the following:&lt;br /&gt;
            a) Open the msys2.exe bash shell &lt;br /&gt;
            b) Run the following command:&lt;br /&gt;
                  pacman -S &amp;lt;Package name in the table above&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        '''OR'''&lt;br /&gt;
&lt;br /&gt;
       2) The second option is to install the full Clang tool chain as follows:&lt;br /&gt;
          a) Open the msys2.exe bash shell &lt;br /&gt;
          b) Run the following command:&lt;br /&gt;
                  pacman -S mingw-w64-clang-i686-toolchain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 -------------------------------------------------------------------------------------&lt;br /&gt;
 '''Notes from the CodeBlocks forum to avoid mixing incompatible gcc/clangd executables.'''&lt;br /&gt;
 -------------------------------------------------------------------------------------&lt;br /&gt;
    https://forums.codeblocks.org/index.php/topic,24357.msg169412.html#msg169412&lt;br /&gt;
&lt;br /&gt;
::: '''Don't mix mingw64 with clang64'''.&lt;br /&gt;
&lt;br /&gt;
:: If you are using the gcc from msys2, (the compilers in the folder '''msys64\mingw64\bin'''),&lt;br /&gt;
:: you should use &amp;quot;mingw-w64-x86_64-clang-tools-extra&amp;quot;, &lt;br /&gt;
:: (the clangd.exe is under the folder '''msys64\mingw64\bin''') the same folder as your gcc.exe.&lt;br /&gt;
::&amp;lt;br /&amp;gt; &lt;br /&gt;
:: If you are using the clang tool chain, (the folder '''msys64\clang64\bin'''),&lt;br /&gt;
::	you should use &amp;quot;mingw-w64-clang-x86_64-clang-tools-extra&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:: I found that I just make a big mistake. That is: I used the gcc toolchain from&lt;br /&gt;
:: '''msys64\mingw64\bin''', but I used the clangd.exe from '''msys64\clang64\bin'''.&lt;br /&gt;
:: The result is I got a lot of LSP diagnostics messages and errors.&lt;br /&gt;
:: Luckily I found the reason, and fixed this issue. Hope this will help others.&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
== '''Linux: Clangd executable install process:''' ==&lt;br /&gt;
::&lt;br /&gt;
::NOTE: Clangd_client plugin requires a cland executable version 13 or greater.&lt;br /&gt;
::Check your current clangd version by running '''clangd --version'''&lt;br /&gt;
::If the version is less than 13 you will have to install a newer version.&lt;br /&gt;
:::See https://clangd.llvm.org/installation.html&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
::Installing the clangd package will usually give you a slightly older version.&lt;br /&gt;
::Test this by issuing '''apt-get install --dry-run clangd'''&lt;br /&gt;
::As of 2022/11/16, this suggest that cland version 10 will be installed.&lt;br /&gt;
::If the clangd version shows less than version 13, you'll have to install a specific version as follows:&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
::Install a packaged release (''must be version 13 or greater''):&lt;br /&gt;
::::'''sudo apt-get install clangd-13''' ''(Must be version 13 or greater)''.&lt;br /&gt;
&lt;br /&gt;
::This will install clangd as '''/usr/bin/clangd-13'''.&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
:: You can now configure clangd_client plugin by following the above instructions at&lt;br /&gt;
:::: [https://wiki.codeblocks.org/index.php/CB_Clangd_Client#Configuring_clangd_client] '''Configuring clangd_client'''&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
:: If you prefer to install the entire LLVM/Clang package, for convenience, there is&lt;br /&gt;
:: an automatic installation script available that installs LLVM for you.&lt;br /&gt;
:: To install the latest stable version: see [https://apt.llvm.org/] '''Automatic installation script'''.&lt;br /&gt;
:: Note that you can specify the version number with this script.&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=CB_Clangd_Client&amp;diff=9707</id>
		<title>CB Clangd Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=CB_Clangd_Client&amp;diff=9707"/>
		<updated>2022-11-21T09:46:37Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: /* Configuring clangd_client */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The repository page of this plugin is: https://sourceforge.net/projects/cb-clangd-client/&lt;br /&gt;
&lt;br /&gt;
It uses [https://clangd.llvm.org/ clangd] through [https://en.wikipedia.org/wiki/Language_Server_Protocol Language Server Protocol].&lt;br /&gt;
&lt;br /&gt;
The related forum discussion is:  — [https://forums.codeblocks.org/index.php/topic,24357.html Code completion using LSP and clangd]&lt;br /&gt;
== '''What is Clangd'''==&lt;br /&gt;
&lt;br /&gt;
    clangd understands your C++ code and adds smart features to your editor:&lt;br /&gt;
:::* code completion&lt;br /&gt;
:::* compile errors &lt;br /&gt;
:::* go-to-definition &lt;br /&gt;
:::* go-to-implementation&lt;br /&gt;
:::* find references&lt;br /&gt;
:::   and more.&lt;br /&gt;
&lt;br /&gt;
    clangd is a language server that can work with your editor via a plugin.&lt;br /&gt;
    CodeBlocks provides Clangd_client as the needed plugin.&lt;br /&gt;
&lt;br /&gt;
    Clangd_client additionally enhances the clangd server by providing:&lt;br /&gt;
&lt;br /&gt;
:::* call tips&lt;br /&gt;
:::* function definitions&lt;br /&gt;
:::* parameter definitions&lt;br /&gt;
:::* previous and next function positioning&lt;br /&gt;
:::* symbols browser&lt;br /&gt;
:::* go-to-file&lt;br /&gt;
:::* go-to-function&lt;br /&gt;
:::* symbol renaming&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Configuring clangd_client'''==&lt;br /&gt;
:: Clangd_client requires the third-party binary clangd executable.&lt;br /&gt;
:: See '''Windows: Compiler Clangd/LLVM Package Installer''' below to install it.&lt;br /&gt;
:: or  '''Linux: Clangd executable install process'''&lt;br /&gt;
&lt;br /&gt;
:: After a success clangd executable install, perform the following:&lt;br /&gt;
:::Disable the &amp;quot;CodeCompletion&amp;quot; plugin.&lt;br /&gt;
::::* Navigate to Setting-&amp;gt;Plugins-&amp;gt;Manage Plugins and '''disable''' CodeCompletion.&lt;br /&gt;
::::* Navigate to Setting-&amp;gt;Plugins-&amp;gt;Manage Plugins and '''enable''' Clangd_client.&lt;br /&gt;
:::'''Restart Codeblocks'''.&lt;br /&gt;
&lt;br /&gt;
:::Tell CodeBlocks (or verify) where the clangd executable resides:&lt;br /&gt;
::::* Navigate to Setting-&amp;gt;Editor-&amp;gt;Clangd_client-&amp;gt;C/C++ parser(tab) and verify or enter the location of the cland executable in the box labeled &amp;quot;Specify clangd executable to use&amp;quot;.&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Installing Clangd_client from source or pre-built binary ''' ==&lt;br /&gt;
&lt;br /&gt;
#     Install the LLVM or Clangd.exe as documented in the section below entitled:&lt;br /&gt;
#: '''Windows Clangd executable install process'''&lt;br /&gt;
#::&amp;lt;br /&amp;gt;&lt;br /&gt;
#     Disable the Code completion plugin as follows:&lt;br /&gt;
#:    a) Open the Plugin manager via  Code::Blocks menu &lt;br /&gt;
#::         &amp;quot;MainMenu=&amp;gt;Plugins=&amp;gt;Manage plugins...&amp;quot; &lt;br /&gt;
#:    b) In the Manage Plugin dialog do the following:&lt;br /&gt;
#::          i  ) Find and select the &amp;quot;Code completion&amp;quot; plugin via it's title &lt;br /&gt;
#::          ii ) Press the &amp;quot;Disable&amp;quot; button on the right near the top&lt;br /&gt;
#::          iii) If you get any errors please try again.&lt;br /&gt;
#::&amp;lt;br /&amp;gt;	   &lt;br /&gt;
#    Install the Clangd-Client Plugin using one of the following options, which are documented below: &lt;br /&gt;
#:      a) Install via the Plugin Manager&lt;br /&gt;
#:      b) Manually install the plugin files&lt;br /&gt;
#:&amp;lt;br /&amp;gt;	&lt;br /&gt;
#    Configure the Clangd-Client Plugin for use as follows:&lt;br /&gt;
#:      a) Select the CodeBlocks menu item &amp;quot;Settings-&amp;gt;Editor...&amp;quot;&lt;br /&gt;
#:      b) In the list on the left click/select the &amp;quot;clangd_client&amp;quot; option.&lt;br /&gt;
#:      c) In the &amp;quot;C/C++ parser&amp;quot; tab change the &amp;quot;Specify clangd executable to use&amp;quot; to reference the clangd.exe you installed via step 1) above. &lt;br /&gt;
           Some examples of this could be:&lt;br /&gt;
              C:\msys64\clang64\bin\clangd.exe&lt;br /&gt;
              C:\msys64\clang32\bin\clangd.exe&lt;br /&gt;
              C:\LLVM\bin\clangd.exe&lt;br /&gt;
              C:\comilers\clang\clangd.exe&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Manually Remove Clangd-Client Plugin''' ==&lt;br /&gt;
&lt;br /&gt;
#   Exit Code::Blocks!&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#   If you manually installed the files or used the Plugin manager then you can do the following:&lt;br /&gt;
#:  a) In the Code::Blocks '''...\share\CodeBlocks''' folder delete the clangd_client.zip file&lt;br /&gt;
#:  b) In the Code::Blocks '''...\share\CodeBlocks\plugins''' folder delete the clangd_client.dll file&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#        If you installed via the Plugin manager then you can delete the files with the following commands:&lt;br /&gt;
#:  a) del '''%APPDATA%\CodeBlocks\share\codeblocks\plugins\clangd_client.dll'''&lt;br /&gt;
#:  b) del '''%APPDATA%\CodeBlocks\share\codeblocks\clangd_client.zip'''&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#    If you want to reuse older code completion remember to re-enable the plugin&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Clangd executable install process:''' ==&lt;br /&gt;
&lt;br /&gt;
::There are three main options to install the clangd.exe:&lt;br /&gt;
#        Install the LLVM compiler.&lt;br /&gt;
#        Manully extract the required files from the LLVM compiler.&lt;br /&gt;
#        Install the Clangd package for the Windows compiler you are using if it is available.&lt;br /&gt;
:&amp;lt;br /&amp;gt;&lt;br /&gt;
::The  process for the three options above are detailed below.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Install the LLVM compiler''' ==&lt;br /&gt;
&lt;br /&gt;
#    Download the latest (non RC/Beta) LLVM Windows executable for your OS (Win32 or Win64) from the following&lt;br /&gt;
#:       Github LLVM download page:&lt;br /&gt;
#:       https://github.com/llvm/llvm-project/releases&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#:   As of Jan 2022 the Windows files are named as follows:&lt;br /&gt;
#:      LLVM-&amp;lt;version&amp;gt;-win64.exe&lt;br /&gt;
#:      LLVM-&amp;lt;version&amp;gt;-win32.exe&lt;br /&gt;
#:   where &amp;lt;version&amp;gt; is the LLVM version, like 13.0.0 or 13.0.1.&lt;br /&gt;
#:&amp;lt;br /&amp;gt;&lt;br /&gt;
#    Run the LLVM-&amp;lt;version&amp;gt;-win&amp;lt;xx&amp;gt;.exe you downloaded to install the LLVM compiler.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Manually Extract File from LLVM compiler''' ==&lt;br /&gt;
#    Download the latest (non RC/Beta) LLVM Windows executable for your OS (Win32 or Win64) from the following &lt;br /&gt;
#::       Github LLVM download page:&lt;br /&gt;
#::       https://github.com/llvm/llvm-project/releases&lt;br /&gt;
#::&lt;br /&gt;
#::   As of Jan 2022 the Windows files are names as follows:&lt;br /&gt;
#::      LLVM-&amp;lt;version&amp;gt;-win64.exe&lt;br /&gt;
#::      LLVM-&amp;lt;version&amp;gt;-win32.exe&lt;br /&gt;
#::   where &amp;lt;version&amp;gt; is the LLVM version, like 13.0.0 or 13.0.1.&lt;br /&gt;
#::&lt;br /&gt;
#    Unzip the LLVM-&amp;lt;version&amp;gt;-win&amp;lt;xx&amp;gt;.exe file you downloaded using 7zip or your prefered ZIP program into a sub directory&lt;br /&gt;
#    Create a new directory to put the clangd.exe and dll's&lt;br /&gt;
#    Copy the following files into a the new directory created from the unziped #::LLVM directory:&lt;br /&gt;
#::            bin\clangd.exe&lt;br /&gt;
#::            bin\msvcp140.dll&lt;br /&gt;
#::            bin\vcruntime140.dll&lt;br /&gt;
#::            bin\vcruntime140_1.dll&lt;br /&gt;
#::&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== '''Windows: Compiler Clangd/LLVM Package Installer''' ==&lt;br /&gt;
    Due to the number of different compilers available for Windows not all of the compilers will have either/both the Clang or LLVM required files.&lt;br /&gt;
&lt;br /&gt;
    If you want to install the specific package(s) for the Windows compiler you are using in order to use it's clangd.exe file please follow the instructions below for the specific compiler you have installed:&lt;br /&gt;
&lt;br /&gt;
    '''MSYS2 Compiler - MinGW64'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       There are two main options to install the clangd.exe as follows:&lt;br /&gt;
       1) The first option in order to  minimise disk space is to install the Clang extra &lt;br /&gt;
          tools using one of the following packages:&lt;br /&gt;
&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           |               Package                    | Clangd executable      |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           | mingw-w64-clang-x86_64-clang-tools-extra | clang64/bin/clangd.exe |&lt;br /&gt;
           | mingw-w64-x86_64-clang-tools-extra       | mingw64/bin/clangd.exe |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
&lt;br /&gt;
          To intall the package do the following:&lt;br /&gt;
           a) Open the msys2.exe bash shell &lt;br /&gt;
           b) Run the following command:&lt;br /&gt;
                  pacman -S &amp;lt;Package name in the table above&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
       '''OR'''&lt;br /&gt;
   &lt;br /&gt;
       2) The second option is to intall the full Clang tool chain as follows:&lt;br /&gt;
           a) Open the msys2.exe bash shell &lt;br /&gt;
           b) Run the following command:&lt;br /&gt;
                  pacman -S mingw-w64-clang-x86_64-toolchain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    '''MSYS2 Compiler - MinGW32'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       There are two main options to install the clangd.exe as follows:&lt;br /&gt;
&lt;br /&gt;
       1) The first option in order to  minimise disk space is to install the Clang extra &lt;br /&gt;
          tools using one of the following packages:&lt;br /&gt;
&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           |               Package                    | Clangd executable      |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
           | mingw-w64-clang-i686-clang-tools-extra   | clang32/bin/clangd.exe |&lt;br /&gt;
           | mingw-w64-i686-clang-tools-extra         | mingw32/bin/clangd.exe |&lt;br /&gt;
           +------------------------------------------+------------------------+&lt;br /&gt;
&lt;br /&gt;
          To intall the package do the following:&lt;br /&gt;
            a) Open the msys2.exe bash shell &lt;br /&gt;
            b) Run the following command:&lt;br /&gt;
                  pacman -S &amp;lt;Package name in the table above&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        '''OR'''&lt;br /&gt;
&lt;br /&gt;
       2) The second option is to install the full Clang tool chain as follows:&lt;br /&gt;
          a) Open the msys2.exe bash shell &lt;br /&gt;
          b) Run the following command:&lt;br /&gt;
                  pacman -S mingw-w64-clang-i686-toolchain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 -------------------------------------------------------------------------------------&lt;br /&gt;
 '''Notes from the CodeBlocks forum to avoid mixing incompatible gcc/clangd executables.'''&lt;br /&gt;
 -------------------------------------------------------------------------------------&lt;br /&gt;
    https://forums.codeblocks.org/index.php/topic,24357.msg169412.html#msg169412&lt;br /&gt;
&lt;br /&gt;
::: '''Don't mix mingw64 with clang64'''.&lt;br /&gt;
&lt;br /&gt;
:: If you are using the gcc from msys2, (the compilers in the folder '''msys64\mingw64\bin'''),&lt;br /&gt;
:: you should use &amp;quot;mingw-w64-x86_64-clang-tools-extra&amp;quot;, &lt;br /&gt;
:: (the clangd.exe is under the folder '''msys64\mingw64\bin''') the same folder as your gcc.exe.&lt;br /&gt;
::&amp;lt;br /&amp;gt; &lt;br /&gt;
:: If you are using the clang tool chain, (the folder '''msys64\clang64\bin'''),&lt;br /&gt;
::	you should use &amp;quot;mingw-w64-clang-x86_64-clang-tools-extra&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:: I found that I just make a big mistake. That is: I used the gcc toolchain from&lt;br /&gt;
:: '''msys64\mingw64\bin''', but I used the clangd.exe from '''msys64\clang64\bin'''.&lt;br /&gt;
:: The result is I got a lot of LSP diagnostics messages and errors.&lt;br /&gt;
:: Luckily I found the reason, and fixed this issue. Hope this will help others.&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
== '''Linux: Clangd executable install process:''' ==&lt;br /&gt;
::&lt;br /&gt;
::NOTE: Clangd_client plugin requires a cland executable version 13 or greater.&lt;br /&gt;
::Check your current clangd version by running '''clangd --version'''&lt;br /&gt;
::If the version is less than 13 you will have to install a newer version.&lt;br /&gt;
:::See https://clangd.llvm.org/installation.html&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
::Installing the clangd package will usually give you a slightly older version.&lt;br /&gt;
::Test this by issuing '''apt-get install --dry-run clangd'''&lt;br /&gt;
::As of 2022/11/16, this suggest that cland version 10 will be installed.&lt;br /&gt;
::If the clangd version shows less than version 13, you'll have to install a specific version as follows:&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
::Install a packaged release (''must be version 13 or greater''):&lt;br /&gt;
::::'''sudo apt-get install clangd-13''' ''(Must be version 13 or greater)''.&lt;br /&gt;
&lt;br /&gt;
::This will install clangd as '''/usr/bin/clangd-13'''.&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
:: You can now configure clangd_client plugin by following the above instructions at&lt;br /&gt;
:::: [https://wiki.codeblocks.org/index.php/CB_Clangd_Client#Configuring_clangd_client] '''Configuring clangd_client'''&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;br /&amp;gt;&lt;br /&gt;
:: If you prefer to install the entire LLVM/Clang package, for convenience, there is&lt;br /&gt;
:: an automatic installation script available that installs LLVM for you.&lt;br /&gt;
:: To install the latest stable version: see [https://apt.llvm.org/] '''Automatic installation script'''.&lt;br /&gt;
:: Note that you can specify the version number with this script.&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9566</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9566"/>
		<updated>2022-02-16T15:43:23Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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. It also extract strings from compiler's xml files and descriptions fields found in manifest*.xml from 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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools may be downloaded from [http://pagesperso-orange.fr/thunderbird-noia2/Unix_Tools.zip Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
  &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; |  grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v AT90 | grep -v ATtiny | grep -v mcpu &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml3.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -o xml2.pot src_xml3.cpp&lt;br /&gt;
 find xml2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END !!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9565</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9565"/>
		<updated>2022-02-16T15:38:07Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: https://forums.codeblocks.org/index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
https://forums.codeblocks.org/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools may be downloaded from [http://pagesperso-orange.fr/thunderbird-noia2/Unix_Tools.zip Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
  &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; |  grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v AT90 | grep -v ATtiny | grep -v mcpu &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml3.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -o xml2.pot src_xml3.cpp&lt;br /&gt;
 find xml2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END !!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9564</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9564"/>
		<updated>2022-02-16T15:35:20Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: /index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools may be downloaded from [http://pagesperso-orange.fr/thunderbird-noia2/Unix_Tools.zip Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
  &lt;br /&gt;
 echo off&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * creating core .pot files *&lt;br /&gt;
 echo ****************************&lt;br /&gt;
 echo * &lt;br /&gt;
 find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
 find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo * creating contrib .pot files *&lt;br /&gt;
 echo *******************************&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
 find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
 xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo * creating .cpp files from .xrc files *&lt;br /&gt;
 echo ***************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 del plugins_xrc2.cpp&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * creating .pot files from those local new .cpp *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
 sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
 find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo * extracting strings from .xml compilers files  *&lt;br /&gt;
 echo *************************************************&lt;br /&gt;
 echo *&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; |  grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v AT90 | grep -v ATtiny | grep -v mcpu &amp;gt; src_xml2.cpp&lt;br /&gt;
 xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
 sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
 find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
 echo *************************************************&amp;quot;&lt;br /&gt;
 echo *&lt;br /&gt;
 &lt;br /&gt;
 find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml3.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 xgettext -a -o xml2.pot src_xml3.cpp&lt;br /&gt;
 find xml2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo * Merging and sorting .pot files *&lt;br /&gt;
 echo **********************************&lt;br /&gt;
 echo *&lt;br /&gt;
 msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
 rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
 sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
 &lt;br /&gt;
 rm -f *.pox&lt;br /&gt;
 &lt;br /&gt;
 echo *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo * The END !!! *&lt;br /&gt;
 echo ***************&lt;br /&gt;
 echo on&lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9563</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=9563"/>
		<updated>2022-02-16T15:28:39Z</updated>

		<summary type="html">&lt;p&gt;Gd'on: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B.&lt;br /&gt;
&lt;br /&gt;
Original article written by heromyth.&lt;br /&gt;
&lt;br /&gt;
Reviewed by gd_on.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The url of the english POT file is at:&lt;br /&gt;
&lt;br /&gt;
for the '''original site''' (''but obsolete'') : https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
for a '''new site''' : https://translations.launchpad.net/codeblocks-gd&lt;br /&gt;
&lt;br /&gt;
More information can be seen at: /index.php/topic,10204.msg70638.html.&lt;br /&gt;
&lt;br /&gt;
or : &lt;br /&gt;
&lt;br /&gt;
/index.php/topic,1022.msg159075.html#msg159075&lt;br /&gt;
 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
'''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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
For your convenience, some unix tools may be downloaded from [http://pagesperso-orange.fr/thunderbird-noia2/Unix_Tools.zip Unix-Tools]&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of extract.cmd =======&lt;br /&gt;
 &lt;br /&gt;
 echo off&lt;br /&gt;
echo ****************************&lt;br /&gt;
echo * creating core .pot files *&lt;br /&gt;
echo ****************************&lt;br /&gt;
echo * &lt;br /&gt;
find ../sdk ../src | grep -F .cpp | grep -v svn-base | grep -v .svn | grep -v .cpp.org | xargs xgettext --keyword=_ -o codeblocks1.pot 2&amp;gt; log.txt&lt;br /&gt;
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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../scripts | grep -F .script | grep -v svn-base | grep -v .svn | xargs xgettext --keyword=_ -o codeblocks3.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find codeblocks1.pot &amp;gt; files.txt&lt;br /&gt;
find codeblocks2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
find codeblocks3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
find ../plugins | grep -v contrib | grep -F .cpp | grep -v .svn | grep -v svn-base | grep -v .patch | xargs xgettext --keyword=_ -o coreplugins1.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
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&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find coreplugins1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
find coreplugins2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
REM find coreplugins3.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo *******************************&lt;br /&gt;
echo * creating contrib .pot files *&lt;br /&gt;
echo *******************************&lt;br /&gt;
echo *&lt;br /&gt;
&lt;br /&gt;
find ../plugins/contrib	| grep -F .cpp | grep -v .svn | grep -v svn-base &amp;gt; file_c.txt&lt;br /&gt;
find ../plugins/contrib | grep -F .h   | grep -v .svn | grep -v svn-base | grep -v html | grep -v .gch &amp;gt;&amp;gt; file_c.txt&lt;br /&gt;
xgettext -f file_c.txt --keyword=_ -o  contribplugins.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find contribplugins.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo ***************************************&lt;br /&gt;
echo * creating .cpp files from .xrc files *&lt;br /&gt;
echo ***************************************&lt;br /&gt;
echo *&lt;br /&gt;
find ../src/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o src_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../sdk/resources | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o sdk_xrc.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../plugins | grep -F .xrc | grep -v .svn | grep -v svn-base | xargs wxrc -g -o plugins_xrc2.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
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 &amp;gt; plugins_xrc.cpp&lt;br /&gt;
&lt;br /&gt;
del plugins_xrc2.cpp&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo *************************************************&lt;br /&gt;
echo * creating .pot files from those local new .cpp *&lt;br /&gt;
echo *************************************************&lt;br /&gt;
echo *&lt;br /&gt;
find . | grep -F .cpp | xargs xgettext --keyword=_ -o xrc.pot 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
sed &amp;quot;s/\$\$*/\$/g&amp;quot; xrc.pot &amp;gt; xrc.pox&lt;br /&gt;
sed 's/\\\\\\\\/\\\\/g' xrc.pox &amp;gt; xrc.pot&lt;br /&gt;
find xrc.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo *************************************************&lt;br /&gt;
echo * extracting strings from .xml compilers files  *&lt;br /&gt;
echo *************************************************&lt;br /&gt;
echo *&lt;br /&gt;
find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;CodeBlocks_compiler name&amp;quot; &amp;gt; src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Option name&amp;quot;   &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;Category name&amp;quot; &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
find ../plugins/compilergcc/resources/compilers | grep -F .xml | xargs grep -F &amp;quot;checkMessage&amp;quot;  &amp;gt;&amp;gt;  src_xml.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
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 &amp;quot;MSP430 1&amp;quot; | grep -v &amp;quot;MSP430 2&amp;quot; | grep -v &amp;quot;MSP430 3&amp;quot; | grep -v &amp;quot;MSP430 4&amp;quot; | grep -v &amp;quot;MSP430 5&amp;quot; | grep -v &amp;quot;MSP430 6&amp;quot; | grep -v &amp;quot;MSP430 E&amp;quot; | grep -v &amp;quot;MSP430 W&amp;quot; | grep -v &amp;quot;MSP430 MS&amp;quot; | grep -v &amp;quot;MSP430 G4&amp;quot; | grep -v &amp;quot;CC430 5&amp;quot; | grep -v &amp;quot;CC430 6&amp;quot; | grep -v ATmega | grep -v AT90 | grep -v ATtiny | grep -v mcpu &amp;gt; src_xml2.cpp&lt;br /&gt;
xgettext -a -o xml.pox src_xml2.cpp&lt;br /&gt;
sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; xml.pox &amp;gt; xml1.pot&lt;br /&gt;
find xml1.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo *************************************************&amp;quot;&lt;br /&gt;
echo * extracting strings from manifest*.xml files   *&amp;quot;&lt;br /&gt;
echo *************************************************&amp;quot;&lt;br /&gt;
echo *&lt;br /&gt;
&lt;br /&gt;
find ../plugins | grep -F manifest | grep -F .xml | grep -v svn-base | grep -v .svn | xargs sed -n -e &amp;quot;/description/,/&amp;gt;/p&amp;quot; | sed '/author/d' | sed &amp;quot;:a;N;$!ba;s/\n/\\\n/g&amp;quot; | sed 's/&amp;quot;&amp;quot;//g' | sed &amp;quot;s/&amp;amp;quot;/\\\\&amp;quot;&amp;quot;/g&amp;quot; | sed &amp;quot;s/&amp;amp;amp;/\&amp;amp;/g&amp;quot; &amp;gt; src_xml3.cpp 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
xgettext -a -o xml2.pot src_xml3.cpp&lt;br /&gt;
find xml2.pot &amp;gt;&amp;gt; files.txt&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo **********************************&lt;br /&gt;
echo * Merging and sorting .pot files *&lt;br /&gt;
echo **********************************&lt;br /&gt;
echo *&lt;br /&gt;
msgcat -s -f files.txt -o All_codeblocks.pox 2&amp;gt;&amp;gt; log.txt&lt;br /&gt;
rm -f *.pot *.cpp files.txt file_c.txt&lt;br /&gt;
sed &amp;quot;s/#, c-format//g&amp;quot; All_codeblocks.pox &amp;gt; All_codeblocks.pot&lt;br /&gt;
&lt;br /&gt;
rm -f *.pox&lt;br /&gt;
&lt;br /&gt;
echo *&lt;br /&gt;
echo ***************&lt;br /&gt;
echo * The END !!! *&lt;br /&gt;
echo ***************&lt;br /&gt;
echo on&lt;br /&gt;
 rem ======= End of extract.cmd =======&lt;br /&gt;
&lt;br /&gt;
== The tools for translation ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.net/download.php here].&lt;br /&gt;
&lt;br /&gt;
Of course, you can do the translation directly on [https://translations.launchpad.net/codeblocks-gd Launchpad].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Translating with poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename or copy All_codeblocks.pot into All_codeblocks.po. Use poEdit to open the file All_codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' It may be necessary to approve this work, and sometimes to validate your own translations (or wait for someone else to validate them).&lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
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\&amp;lt;lang&amp;gt;\. 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.&lt;br /&gt;
&lt;br /&gt;
If you want to use All_codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/ or in the share/locale/&amp;lt;lang&amp;lt; sub-directory of your codeblocks installation, as in Windows (may be something like /usr/share/codeblocks/locale/&amp;lt;lang&amp;gt; (for me &amp;lt;lang&amp;gt; is fr_FR). Create sub-directories if necessary.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;/div&gt;</summary>
		<author><name>Gd'on</name></author>
	</entry>
</feed>