From 124fc81ddc15b3984a5f08744f7e3d69528b8213 Mon Sep 17 00:00:00 2001 From: Wolfgang Müller Date: Mon, 28 Jun 2021 18:06:50 +0200 Subject: Use custom scripts instead of meson's gettext tooling meson's tooling for gettext introduces a couple of issues. Firstly, it is currently not possible [1] to specify per-language keywords. We need this in order to ignore the 'Name' record in the desktop file. Secondly, every invocation of 'update-po' also updates the pot file [2], inadvertently recording the updated creation date in all translations. Since we recommended the use of 'update-po' to translators in TRANSLATE, this will lead to lots of unrelated changes every time a new translation is added, even if no msgids change. Thirdly, people who do not have meson installed are currently not able to use the tooling it provides. To fix these issues, this commit adds custom tooling around gettext: The 'update-pot.sh' script updates the pot and po files using xgettext(1) and msgmerge(1), and 'init-po.sh' makes the necessary changes to LINGUAS whilst also creating the relevant po file(s) with msginit(1). We no longer need to refer to meson at all in TRANSLATE. Make sure to mention the new scripts as well. [1] https://github.com/mesonbuild/meson/issues/1739 [2] https://github.com/mesonbuild/meson/blob/a9e9b7c7501a3c8a5984a93879d1f309bf8c72aa/mesonbuild/scripts/gettext.py#L112 --- po/POTFILES | 1 - po/init-po.sh | 8 ++++++++ po/meson.build | 4 +--- po/update-pot.sh | 16 ++++++++++++++++ 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 po/init-po.sh create mode 100644 po/update-pot.sh (limited to 'po') diff --git a/po/POTFILES b/po/POTFILES index 107469c..4d9f89d 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -1,4 +1,3 @@ configreader.vala terminal.ui terminal.vala -weltschmerz.desktop.in diff --git a/po/init-po.sh b/po/init-po.sh new file mode 100644 index 0000000..0830875 --- /dev/null +++ b/po/init-po.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +lang=$1 + +echo "$lang" >> po/LINGUAS +sort -u po/LINGUAS -o po/LINGUAS + +msginit -i po/weltschmerz.pot -o "po/${lang}.po" --locale "$lang" --no-translator diff --git a/po/meson.build b/po/meson.build index 5cbb15b..6870f58 100644 --- a/po/meson.build +++ b/po/meson.build @@ -4,6 +4,4 @@ localedir = join_paths(get_option('prefix'), get_option('localedir')) add_project_arguments('-DGETTEXT_PACKAGE="weltschmerz"', language: 'c') add_project_arguments('-DLOCALEDIR="@0@"'.format(localedir), language: 'c') -i18n.gettext(meson.project_name(), - args: ['--directory=' + meson.source_root(), '-c TRANSLATORS', '--from-code=UTF-8'] -) +i18n.gettext(meson.project_name(), args: '--directory=' + meson.source_root()) diff --git a/po/update-pot.sh b/po/update-pot.sh new file mode 100644 index 0000000..6ceb21f --- /dev/null +++ b/po/update-pot.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +_xgettext() { + xgettext --package-name=weltschmerz -cTRANSLATORS "$@" -o po/weltschmerz.pot +} + +_xgettext -f po/POTFILES + +# We treat this file specially in order to override the keywords used for it. +# Since we do not want Name translated, reset the keyword list with -k and then +# add the keywords we want. +_xgettext -j -k -kComment -kKeywords weltschmerz.desktop.in + +while read lang; do + msgmerge -q -o "po/${lang}.po" "po/${lang}.po" po/weltschmerz.pot +done < po/LINGUAS -- cgit v1.2.3-2-gb3c3