The following list summarise all of the previous pages. It may be useful when you believe you have done everything, just as a final check.
Create, if necessary, and include an i18n header file that defines the _(), N_() and other supporting functions (Section 2.1, “The i18n header file”).
As early as possible in your code (in main() for applications and initialisation functions for libraries), call bindtextdomain() and friends (Section 2.1.2, “Initialising the i18n support code”).
Mark all strings in your source code that should be translated. Use _() where a function call is permitted and N_() otherwise. In the latter case, wrap the place where the string is used in a _() call (Section 2.2.1, “Source code files”).
Mark up "special" files
Add code to autogen.sh to detect and run glib-gettextize and detect intltool, if required (Section 3.1, “Changes to autogen.sh”).
Edit configure.in to call AC_PROG_INTLTOOL, set up GETTEXT_PACKAGE, define ALL_LINGUAS, call AM_GLIB_GNU_GETTEXT and substitue in the location of the locale files using the foolocaledir variable (Section 3.2, “Changes to configure.in”).
Edit the top-level Makefile.am to include po in the SUBDIRS line. Also add intltool-extract.in, intltool-merge.in and intltool-update.in to EXTRA_DIST in this makefile if you are using intltool (Section 3.3, “Makefile changes”).
Adjust .cvsignore in the top-level directory to ignore the intltool-* files Section 3.3, “Makefile changes”).
Edit the Makefile.am in the directory containing your main() function or library initialisation code and define the locale location. That is, set up -DFOOLOCALEDIR (Section 3.3, “Makefile changes”).
In every directory where you marked up a special file for processing by intltool, change the appropriate rules in Makefile.am and add one or more of the @INTLTOOL_XXX_RULE@ templates. Also, adjust the .cvsignore files in these directories to ignore the generated versions of these files (Section 3.3, “Makefile changes”).
In the po directory, create POTFILES.in and, if required, POTFILES.skip. Add the appropriate files to .cvsignore (Section 3.4, “Changes in the po/ directory”).
Do not commit any modified *.po files when you are working on the package in the normal course of events. However, right before a release you should commit these files so that everybody is synchronised with the release (Section 4, “What happens next?”).
Read Christian Rose's document to make your strings more translator-friendly ([menthos]).