From: Daniel Burgener <dburgener@linux.microsoft.com>
To: Vit Mojzis <vmojzis@redhat.com>, selinux@vger.kernel.org
Subject: Re: [PATCH] gettext: handle unsupported languages properly
Date: Fri, 24 Jun 2022 12:37:03 -0400 [thread overview]
Message-ID: <bea122a5-5a68-2c81-25c1-ec9d3a3aa7e5@linux.microsoft.com> (raw)
In-Reply-To: <20220624142425.3836193-1-vmojzis@redhat.com>
On 6/24/2022 10:24 AM, Vit Mojzis wrote:
> With "fallback=True" gettext.translation behaves the same as
> gettext.install and uses NullTranslations in case the
> translation file for given language was not found (as opposed to
> throwing an exception).
>
> Fixes:
> # LANG is set to any "unsupported" language, e.g. en_US.UTF-8
> $ chcat --help
> Traceback (most recent call last):
> File "/usr/bin/chcat", line 39, in <module>
> t = gettext.translation(PROGNAME,
> File "/usr/lib64/python3.9/gettext.py", line 592, in translation
> raise FileNotFoundError(ENOENT,
> FileNotFoundError: [Errno 2] No translation file found for domain: 'selinux-python'
>
> Signed-off-by: Vit Mojzis <vmojzis@redhat.com>
> ---
> gui/booleansPage.py | 3 ++-
> gui/domainsPage.py | 3 ++-
> gui/fcontextPage.py | 3 ++-
> gui/loginsPage.py | 3 ++-
> gui/modulesPage.py | 3 ++-
> gui/polgengui.py | 3 ++-
> gui/portsPage.py | 3 ++-
> gui/semanagePage.py | 3 ++-
> gui/statusPage.py | 3 ++-
> gui/system-config-selinux.py | 3 ++-
> gui/usersPage.py | 3 ++-
> python/chcat/chcat | 5 +++--
> python/semanage/semanage | 3 ++-
> python/semanage/seobject.py | 3 ++-
> python/sepolgen/src/sepolgen/sepolgeni18n.py | 4 +++-
> python/sepolicy/sepolicy.py | 3 ++-
> python/sepolicy/sepolicy/__init__.py | 3 ++-
> python/sepolicy/sepolicy/generate.py | 3 ++-
> python/sepolicy/sepolicy/gui.py | 3 ++-
> python/sepolicy/sepolicy/interface.py | 3 ++-
> sandbox/sandbox | 3 ++-
> 21 files changed, 44 insertions(+), 22 deletions(-)
>
> diff --git a/gui/booleansPage.py b/gui/booleansPage.py
> index 5beec58b..ad11a9b2 100644
> --- a/gui/booleansPage.py
> +++ b/gui/booleansPage.py
> @@ -46,7 +46,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/domainsPage.py b/gui/domainsPage.py
> index e08f34b4..e6eadd61 100644
> --- a/gui/domainsPage.py
> +++ b/gui/domainsPage.py
> @@ -38,7 +38,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/fcontextPage.py b/gui/fcontextPage.py
> index bac2bec3..767664f2 100644
> --- a/gui/fcontextPage.py
> +++ b/gui/fcontextPage.py
> @@ -55,7 +55,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/loginsPage.py b/gui/loginsPage.py
> index 18b93d8c..7e08232a 100644
> --- a/gui/loginsPage.py
> +++ b/gui/loginsPage.py
> @@ -37,7 +37,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/modulesPage.py b/gui/modulesPage.py
> index c546d455..02b79f15 100644
> --- a/gui/modulesPage.py
> +++ b/gui/modulesPage.py
> @@ -38,7 +38,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/polgengui.py b/gui/polgengui.py
> index a18f1cba..7a3ecd50 100644
> --- a/gui/polgengui.py
> +++ b/gui/polgengui.py
> @@ -71,7 +71,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/portsPage.py b/gui/portsPage.py
> index 54aa80de..bee2bdf1 100644
> --- a/gui/portsPage.py
> +++ b/gui/portsPage.py
> @@ -43,7 +43,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/semanagePage.py b/gui/semanagePage.py
> index 1371d4e7..efad14d9 100644
> --- a/gui/semanagePage.py
> +++ b/gui/semanagePage.py
> @@ -30,7 +30,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/statusPage.py b/gui/statusPage.py
> index c241ef83..832849e6 100644
> --- a/gui/statusPage.py
> +++ b/gui/statusPage.py
> @@ -43,7 +43,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/system-config-selinux.py b/gui/system-config-selinux.py
> index 1b460c99..9f53b7fe 100644
> --- a/gui/system-config-selinux.py
> +++ b/gui/system-config-selinux.py
> @@ -53,7 +53,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/gui/usersPage.py b/gui/usersPage.py
> index d51bd968..9acd3b84 100644
> --- a/gui/usersPage.py
> +++ b/gui/usersPage.py
> @@ -37,7 +37,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/python/chcat/chcat b/python/chcat/chcat
> index e779fcc6..952cb818 100755
> --- a/python/chcat/chcat
> +++ b/python/chcat/chcat
> @@ -38,9 +38,10 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> -except ImportError:
> +except:
Isn't the point of the overall change that gettext.translation() doesn't
throw an exception anymore? So we don't need to handle OSError/IOError
here once fallback=True. I see that this standardizes with the other
call sites, but I wonder if standardizing on the more specific
exceptions (or just leaving as is) wouldn't be better?
-Daniel
> try:
> import builtins
> builtins.__dict__['_'] = str
> diff --git a/python/semanage/semanage b/python/semanage/semanage
> index 1d828128..4e8d64d6 100644
> --- a/python/semanage/semanage
> +++ b/python/semanage/semanage
> @@ -38,7 +38,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/python/semanage/seobject.py b/python/semanage/seobject.py
> index ff8f4e9c..0782c082 100644
> --- a/python/semanage/seobject.py
> +++ b/python/semanage/seobject.py
> @@ -42,7 +42,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/python/sepolgen/src/sepolgen/sepolgeni18n.py b/python/sepolgen/src/sepolgen/sepolgeni18n.py
> index 56ebd807..1ff307d9 100644
> --- a/python/sepolgen/src/sepolgen/sepolgeni18n.py
> +++ b/python/sepolgen/src/sepolgen/sepolgeni18n.py
> @@ -19,7 +19,9 @@
>
> try:
> import gettext
> - t = gettext.translation( 'selinux-python' )
> + t = gettext.translation("selinux-python",
> + localedir="/usr/share/locale",
> + fallback=True)
> _ = t.gettext
> except:
> def _(str):
> diff --git a/python/sepolicy/sepolicy.py b/python/sepolicy/sepolicy.py
> index 7ebe0efa..c7a70e09 100755
> --- a/python/sepolicy/sepolicy.py
> +++ b/python/sepolicy/sepolicy.py
> @@ -36,7 +36,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/python/sepolicy/sepolicy/__init__.py b/python/sepolicy/sepolicy/__init__.py
> index 7208234b..9c3caa05 100644
> --- a/python/sepolicy/sepolicy/__init__.py
> +++ b/python/sepolicy/sepolicy/__init__.py
> @@ -31,7 +31,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/python/sepolicy/sepolicy/generate.py b/python/sepolicy/sepolicy/generate.py
> index 67189fc3..3717d5d4 100644
> --- a/python/sepolicy/sepolicy/generate.py
> +++ b/python/sepolicy/sepolicy/generate.py
> @@ -56,7 +56,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/python/sepolicy/sepolicy/gui.py b/python/sepolicy/sepolicy/gui.py
> index b0263740..5bdbfeba 100644
> --- a/python/sepolicy/sepolicy/gui.py
> +++ b/python/sepolicy/sepolicy/gui.py
> @@ -49,7 +49,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/python/sepolicy/sepolicy/interface.py b/python/sepolicy/sepolicy/interface.py
> index 599f97fd..43f86443 100644
> --- a/python/sepolicy/sepolicy/interface.py
> +++ b/python/sepolicy/sepolicy/interface.py
> @@ -38,7 +38,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
> diff --git a/sandbox/sandbox b/sandbox/sandbox
> index cd5709fb..789621e1 100644
> --- a/sandbox/sandbox
> +++ b/sandbox/sandbox
> @@ -45,7 +45,8 @@ try:
> kwargs['unicode'] = True
> t = gettext.translation(PROGNAME,
> localedir="/usr/share/locale",
> - **kwargs)
> + **kwargs,
> + fallback=True)
> _ = t.gettext
> except:
> try:
next prev parent reply other threads:[~2022-06-24 16:37 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-24 14:24 [PATCH] gettext: handle unsupported languages properly Vit Mojzis
2022-06-24 16:37 ` Daniel Burgener [this message]
2022-06-24 17:27 ` Vit Mojzis
2022-06-25 2:09 ` Daniel Burgener
2022-06-27 8:16 ` Petr Lautrbach
2022-06-29 13:52 ` Petr Lautrbach
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bea122a5-5a68-2c81-25c1-ec9d3a3aa7e5@linux.microsoft.com \
--to=dburgener@linux.microsoft.com \
--cc=selinux@vger.kernel.org \
--cc=vmojzis@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox