The @code{gettextize} program is an interactive tool that helps the maintainer of a package internationalized through GNU @code{gettext}. It is used for two purposes: @itemize @bullet @item As a wizard, when a package is modified to use GNU @code{gettext} for the first time. @item As a migration tool, for upgrading the GNU @code{gettext} support in a package from a previous to a newer version of GNU @code{gettext}. @end itemize This program performs the following tasks: @itemize @bullet @item It copies into the package some files that are consistently and identically needed in every package internationalized through GNU @code{gettext}. @item It performs as many of the tasks mentioned in the next section @ref{Adjusting Files} as can be performed automatically. @item It removes obsolete files and idioms used for previous GNU @code{gettext} versions to the form recommended for the current GNU @code{gettext} version. @item It prints a summary of the tasks that ought to be done manually and could not be done automatically by @code{gettextize}. @end itemize It can be invoked as follows: @pindex gettextize @cindex @code{gettextize} program, usage @example gettextize [ @var{option}@dots{} ] [ @var{directory} ] @end example @noindent and accepts the following options: @table @samp @item -c @itemx --copy @opindex -c@r{, @code{gettextize} option} @opindex --copy@r{, @code{gettextize} option} Copy the needed files instead of making symbolic links. Using links would allow the package to always use the latest @code{gettext} code available on the system, but it might disturb some mechanism the maintainer is used to apply to the sources. Because running @code{gettextize} is easy there shouldn't be problems with using copies. @item -f @itemx --force @opindex -f@r{, @code{gettextize} option} @opindex --force@r{, @code{gettextize} option} Force replacement of files which already exist. @item --intl @opindex --intl@r{, @code{gettextize} option} Install the libintl sources in a subdirectory named @file{intl/}. This libintl will be used to provide internationalization on systems that don't have GNU libintl installed. If this option is omitted, the call to @code{AM_GNU_GETTEXT} in @file{configure.in} should read: @samp{AM_GNU_GETTEXT([external])}, and internationalization will not be enabled on systems lacking GNU gettext. @item --no-changelog @opindex --no-changelog@r{, @code{gettextize} option} Don't update or create ChangeLog files. By default, @code{gettextize} logs all changes (file additions, modifications and removals) in a file called @samp{ChangeLog} in each affected directory. @item -n @itemx --dry-run @opindex -d@r{, @code{gettextize} option} @opindex --dry-run@r{, @code{gettextize} option} Print modifications but don't perform them. All actions that @code{gettextize} would normally execute are inhibited and instead only listed on standard output. @item --help @opindex --help@r{, @code{gettextize} option} Display this help and exit. @item --version @opindex --version@r{, @code{gettextize} option} Output version information and exit. @end table If @var{directory} is given, this is the top level directory of a package to prepare for using GNU @code{gettext}. If not given, it is assumed that the current directory is the top level directory of such a package. The program @code{gettextize} provides the following files. However, no existing file will be replaced unless the option @code{--force} (@code{-f}) is specified. @enumerate @item The @file{ABOUT-NLS} file is copied in the main directory of your package, the one being at the top level. This file gives the main indications about how to install and use the Native Language Support features of your program. You might elect to use a more recent copy of this @file{ABOUT-NLS} file than the one provided through @code{gettextize}, if you have one handy. You may also fetch a more recent copy of file @file{ABOUT-NLS} from Translation Project sites, and from most GNU archive sites. @item A @file{po/} directory is created for eventually holding all translation files, but initially only containing the file @file{po/Makefile.in.in} from the GNU @code{gettext} distribution (beware the double @samp{.in} in the file name) and a few auxiliary files. If the @file{po/} directory already exists, it will be preserved along with the files it contains, and only @file{Makefile.in.in} and the auxiliary files will be overwritten. @item Only if @samp{--intl} has been specified: A @file{intl/} directory is created and filled with most of the files originally in the @file{intl/} directory of the GNU @code{gettext} distribution. Also, if option @code{--force} (@code{-f}) is given, the @file{intl/} directory is emptied first. @item The files @file{config.rpath} and @file{mkinstalldirs} are copied into the directory containing configuration support files. It is needed by the @code{AM_GNU_GETTEXT} autoconf macro. @item Only if the project is using GNU @code{automake}: A set of @code{autoconf} macro files is copied into the package's @code{autoconf} macro repository, usually in a directory called @file{m4/}. @end enumerate If your site support symbolic links, @code{gettextize} will not actually copy the files into your package, but establish symbolic links instead. This avoids duplicating the disk space needed in all packages. Merely using the @samp{-h} option while creating the @code{tar} archive of your distribution will resolve each link by an actual copy in the distribution archive. So, to insist, you really should use @samp{-h} option with @code{tar} within your @code{dist} goal of your main @file{Makefile.in}. Furthermore, @code{gettextize} will update all @file{Makefile.am} files in each affected directory, as well as the top level @file{configure.in} or @file{configure.ac} file. It is interesting to understand that most new files for supporting GNU @code{gettext} facilities in one package go in @file{intl/}, @file{po/} and @file{m4/} subdirectories. One distinction between @file{intl/} and the two other directories is that @file{intl/} is meant to be completely identical in all packages using GNU @code{gettext}, while the other directories will mostly contain package dependent files. The @code{gettextize} program makes backup files for all files it replaces or changes, and also write ChangeLog entries about these changes. This way, the careful maintainer can check after running @code{gettextize} whether its changes are acceptable to him, and possibly adjust them. An exception to this rule is the @file{intl/} directory, which is added or replaced or removed as a whole. It is important to understand that @code{gettextize} can not do the entire job of adapting a package for using GNU @code{gettext}. The amount of remaining work depends on whether the package uses GNU @code{automake} or not. But in any case, the maintainer should still read the section @ref{Adjusting Files} after invoking @code{gettextize}. It is also important to understand that @code{gettextize} is not part of the GNU build system, in the sense that it should not be invoked automatically, and not be invoked by someone who doesn't assume the responsibilities of a package maintainer. For the latter purpose, a separate tool is provided, see @ref{autopoint Invocation}.