polkit/polkit-gettext.patch
Marcus Meissner 8e31deb180 - Add -Wno-error=implicit-function-declaration to %optflags to
work-around an issue in mocklibc (which has been meanwhile removed
  by upstream) with exactly this kind of issue.

If the request is OK, please forward it to Factory soon-ish so that we
can switch the default compiler.

OBS-URL: https://build.opensuse.org/package/show/Base:System/polkit?expand=0&rev=193
2024-07-12 13:08:58 +00:00

58 lines
1.9 KiB
Diff

From fea7159b7cc50deb7298b2858e125fb623012549 Mon Sep 17 00:00:00 2001
From: Ludwig Nussel <ludwig.nussel@suse.de>
Date: Tue, 13 Jun 2017 18:28:28 +0200
Subject: [PATCH] Use gettext as fallback for translations
Upstream polkit action files do not necessarily contain translations for
all languages a distribution supports. And even if all translations are
contained in the head branch, distributions sometimes need to ship older
versions of packages. In order to allow retrofitting translations and
shipping language packs for polkit actions without having to patch and
rebuild packages gettext could be used as fallback. That way only
additional .mo files have to be installed.
So this patch makes polkit call into gettext with the domain
'polkit-action-distro-translations' if an xml doesn't contain
translations for the requested language.
---
src/polkitbackend/polkitbackendactionpool.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/polkitbackend/polkitbackendactionpool.c b/src/polkitbackend/polkitbackendactionpool.c
index 3894fe9..9252788 100644
--- a/src/polkitbackend/polkitbackendactionpool.c
+++ b/src/polkitbackend/polkitbackendactionpool.c
@@ -24,6 +24,7 @@
#include <pwd.h>
#include <string.h>
#include <expat.h>
+#include <locale.h>
#include <polkit/polkit.h>
#include <polkit/polkitprivate.h>
@@ -1132,8 +1133,20 @@ _localize (GHashTable *translations,
if (result != NULL)
goto out;
- /* fall back to untranslated */
- result = untranslated;
+ /* try distro provided language bundle via gettext */
+
+ /* Set LANG and locale so g_dgettext() + friends work below */
+ if (setlocale (LC_ALL, lang) == NULL)
+ {
+ g_printerr ("Invalid locale '%s'\n", lang);
+ }
+ g_setenv ("LANG", lang, TRUE);
+
+ result = g_dgettext ("polkit-action-distro-translations", untranslated);
+
+ /* Back to C! */
+ setlocale (LC_ALL, "C");
+ g_setenv ("LANG", "C", TRUE);
out:
return result;
--
2.12.2