comparison doc/plugin-i18n.dox @ 13400:6a8a595e17b1

[gaim-migrate @ 15775] and the developer part of third party translatable plugins.. committer: Tailor Script <tailor@pidgin.im>
author Gary Kramlich <grim@reaperworld.com>
date Mon, 06 Mar 2006 18:16:46 +0000
parents
children 1d8fc7347a91
comparison
equal deleted inserted replaced
13399:18d5d4018604 13400:6a8a595e17b1
1 /** @page plugin-i18n Third Party Plugin Translation Support
2
3 @section Introduction
4 For a plugin to have translation support there are a few steps that need to
5 followed:
6
7 - The plugin must be setup to use autotools. It may be possible to add
8 translation support without autotools, but I have no idea how.
9 - In your autogen.sh, bootstrap.sh, or whatever you called it, add the
10 following after your other utility checks:
11 @code
12 (intltoolize --version) < /dev/null > /dev/null 2>&1 || {
13 echo;
14 echo "You must have intltool installed to compile <YOUR PLUGIN NAME>";
15 echo;
16 exit;
17 }
18 @endcode
19 Then before your call aclocal add:
20 @code
21 intltoolize --force --copy
22 @endcode
23 - Now edit configure.ac, configure.in, or whatever you may have called it
24 and add the following:
25 @code
26 AC_PROG_INTLTOOL
27
28 GETTEXT_PACKAGE=<YOUR PLUGIN NAME>
29 AC_SUBST(GETTEXT_PACKAGE)
30 AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], [Define the gettext package to be used])
31
32 ALL_LINGUAS=""
33 AM_GLIB_GNU_GETTEXT
34 @endcode
35 The position of these macros in the file don't really matter, but if you
36 have issues either play around with it or feel free to ask one of the Gaim
37 developers. Finally add 'po/Makefile.in' to you 'AC_OUTPUT' command.
38 - Now create a directory named 'po'.
39 - 'cd' into the 'po' directory.
40 - Create/edit the file 'POTFILE.in' in your favorite editor. Each line
41 should be the name of a file that could or does have strings marked for
42 translating (we're getting to that step). These file names should be
43 relative to the top directory of your plugin.
44 - 'cd' back to the top directory of your plugin.
45 - Open 'Makefile.am' and add 'po' to your 'SUBDIRS' variable.
46 - While still in the top directory of your plugin execute
47 'intltool-prepare'. This will setup anything extra that intltool needs.
48 - Fire off an 'autogen.sh' and when it's completed, verify that you have a
49 'po/POTFILES', notice the lack of a .in. If you do, everything should be
50 set on the autotools side.
51 - Take a break, stretch your legs, smoke a cigarette, whatever, because
52 we're done with the autotools part.
53 - When you're ready, 'cd' into the directory with the source files for your
54 plugin.
55 - Open the file containing the GaimPluginInfo structure.
56 - If you're not already, please make sure that you are including the
57 'config.h' file for you plugin. Note that 'config.h' could be whatever
58 you told autohead to use with AM_CONFIG_HEADER. Also add the following:
59 @code
60 #include <glib/gi18n-lib.h>
61 @endcode
62 Make sure that this include is after you include of your 'config.h',
63 otherwise you will break your build.
64 - This is where things get a bit goofy. Gaim is going to try and translate
65 our strings using the Gaim gettext package. So we have to convert them
66 before Gaim attempts to.
67 - To do this, we're going to change the entries for name, summary, and
68 description to NULL.
69 - Next, locate your 'init_plugin' function. Your name for this function
70 may vary, but it's the second parameter to 'GAIM_INIT_PLUGIN'.
71 - Now add the following within your 'init_plugin' function:
72 @code
73 #ifdef ENABLE_NLS
74 bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
75 bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
76 #endif /* ENABLE_NLS */
77
78 info.name = _("<YOUR PLUGIN NAME>");
79 info.summary = _("<YOUR PLUGIN SUMMARY>");
80 info.description = _("<YOUR PLUGIN DESCRIPTION>");
81 @endcode
82 Note that the _() is intentional, and that it is telling intltool that
83 this string should be translated. There is also N_() which says that a
84 string should only be marked for translation but should not be translated
85 yet.
86 - Go through the rest of your code and mark all the other strings for
87 translation with _().
88 - When thats done, feel free to commit your work, creat your po template
89 (pot file) or whatever.
90 - To create you po template, 'cd' to 'po' and execute:
91 @code
92 intltool-update --pot
93 @endcode
94 - To add new translations to your plugin, all you have to do is add the
95 language code to the 'ALL_LINGUAS' variable in your configure.ac. Take
96 note that this list of languages should be separated by a space. After
97 you have added the language code to 'ALL_LINGUAS', drop the xx.po file
98 into 'po', and re-'autogen.sh'. After a full build you should now be
99 able to use the translation.
100 */