Handling Locale Files
If the package uses gettext for translations, add
BuildRequires: gettext
If you don't, your package could fail to generate translation files in the buildroot.
For Qt-based packages using Linguist tool chain, the localisation utilities are included in the qt-devel
package.
Fedora includes an rpm macro called %find_lang
. This macro will locate all of the locale files that belong to your package (by name), and put this list in a file. You can then use that file to include all of the locales. %find_lang
should be run in the %install section of your spec file, after all of the files have been installed into the buildroot. The correct syntax for %find_lang
is usually:
%find_lang %{name}
In some cases, the application may use a different "name" for its locales. You may have to look at the locale files and see what they are named. If they are named myapp.mo
, then you will need to pass myapp
to %find_lang
instead of %{name
}.
After %find_lang
is run, it will generate a file in the active directory (by default, the top level of the source dir). This file will be named based on what you passed as the option to the %find_lang
macro. Usually, it will be named %{name}.lang
. You should then use this file in the %files
list to include the locales detected by %find_lang
. To do this, you should include it with the -f parameter to %files
.
%files -f %{name}.lang %{_bindir}/foobar ...
If you are already using the -f parameter for the %files
section where the locales should live, just append the contents of %{name}.lang
to the end of the file that you are already using with -f. (Note that only one file may be used with %files -f
.)
Here is an example of proper usage of %find_lang
, in foo.spec
:
... %prep %setup -q %build %configure --with-cheese make %{?_smp_mflags} %install make DESTDIR=%{buildroot} install %find_lang %{name} %files -f %{name}.lang %doc LICENSE README %{_bindir}/foobar %changelog * Thu May 4 2006 Tom "spot" Callaway <tcallawa@redhat.com> 0.1-1 - sample spec that uses %%find_lang
Note that %find_lang
by default searches for gettext locales, but it can also handle Qt translations, localised manpages and help files - to see all the options, run /usr/lib/rpm/find-lang.sh
in the terminal.