The Meson Build System
http://mesonbuild.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.5 KiB
84 lines
2.5 KiB
--- |
|
short-description: Localization with GNU Gettext |
|
... |
|
|
|
# Localisation |
|
|
|
Localising your application with GNU gettext takes a little effort but |
|
is quite straightforward. We'll create a `po` subdirectory at your |
|
project root directory for all the localisation info. |
|
|
|
## Generating .pot and .po files |
|
|
|
In your main meson.build file include the `po` subdirectory in the build process. |
|
|
|
subdir('po') |
|
|
|
In this `po` subdirectory we need: |
|
- `LINGUAS`: Space separated list of languages |
|
- `POTFILES`: List of source files to scan for translatable strings. |
|
- `meson.build`: Localization specific Meson file |
|
|
|
### LINGUAS |
|
|
|
File with space separated list of languages. A sample LINGUAS might look like this. |
|
|
|
aa ab ae af |
|
|
|
### POTFILES |
|
|
|
File that lists all the source files that gettext should scan in order |
|
to find strings to translate. The syntax of the file is one line per |
|
source file and the line must contain the relative path from source |
|
root. A sample POTFILES might look like this. |
|
|
|
src/file1.c |
|
src/file2.c |
|
src/subdir/file3.c |
|
include/mything/somefile.h |
|
|
|
### meson.build |
|
|
|
Localization specific Meson file. It imports and uses the `i18n` |
|
module. If not defined before it needs to define the `GETTEXT_PACKAGE` |
|
global. |
|
|
|
```meson |
|
i18n = import('i18n') |
|
# define GETTEXT_PACKAGE |
|
add_project_arguments('-DGETTEXT_PACKAGE="intltest"', language:'c') |
|
i18n.gettext(meson.project_name()) |
|
``` |
|
|
|
The first command imports the `i18n` module that provides gettext |
|
features. The fourth line does the actual invocation. The first |
|
argument is the gettext package name. This causes two things to |
|
happen. The first is that Meson will generate binary mo files and put |
|
them to their proper locations when doing an install. The second is |
|
that it creates a build rule to regenerate the main pot file. If you |
|
are using the Ninja backend, this is how you would invoke the rebuild. |
|
|
|
### generate .pot file |
|
|
|
Then we need to generate the main pot file. The potfile can have any |
|
name but is usually the name of the gettext package. Let's say the |
|
project is called *intltest*. In this case the corresponding pot file |
|
would be called `intltest.pot`. |
|
|
|
Run the following command from your build folder to generate the pot |
|
file. It is recommended to inspect it manually afterwards and fill in |
|
e.g. proper copyright and contact information. |
|
|
|
```console |
|
$ meson compile intltest-pot |
|
``` |
|
|
|
### generate .po files |
|
|
|
For each language listed in the array above we need a corresponding |
|
`.po` file. Those can be generated by running the following command |
|
from your build folder. |
|
|
|
```console |
|
$ meson compile intltest-update-po |
|
```
|
|
|