diff options
author | Vivien Kraus <vivien@planete-kraus.eu> | 2021-09-30 22:35:48 +0200 |
---|---|---|
committer | Vivien Kraus <vivien@planete-kraus.eu> | 2021-10-04 22:57:59 +0200 |
commit | b6a3a1222912bef89f109fec4174febb43944fae (patch) | |
tree | 30f7051fcb063565e9c44914e98f4f1527c07084 /src | |
parent | 9e2873b126bff9e0d13d2953729def4b0b3cd73e (diff) |
web i18n: handle locales such as en-gb
The region may not be in capital letters
Diffstat (limited to 'src')
-rw-r--r-- | src/scm/webid-oidc/web-i18n.scm | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/scm/webid-oidc/web-i18n.scm b/src/scm/webid-oidc/web-i18n.scm index 54d0c36..978e6a4 100644 --- a/src/scm/webid-oidc/web-i18n.scm +++ b/src/scm/webid-oidc/web-i18n.scm @@ -51,7 +51,7 @@ ((? string? (= (cute string-split <> #\-) ((? string? lang) - (? string? region)))) + (? string? (= string-upcase region))))) (format #f "~a_~a.UTF-8" lang region)) (else ""))) @@ -67,22 +67,24 @@ ;; Translation done, nothing to do out)) +(define (set-lc-all locale) + (catch #t + (lambda () + (setlocale LC_ALL locale)) + (lambda error + (setlocale LC_ALL "C")))) + (define (web-gettext str) (let ((out (with-mutex locale-mutex (let ((previous-locale (setlocale LC_ALL))) (dynamic-wind (lambda () - (with-exception-handler - (lambda (exn) - (setlocale LC_ALL "C")) - (lambda () - (setlocale LC_ALL (web-locale))) - #:unwind? #t)) + (set-lc-all (web-locale))) (lambda () (gettext str)) (lambda () - (setlocale LC_ALL previous-locale))))))) + (set-lc-all previous-locale))))))) (disambiguate str out))) (define (sysadmin-gettext str) |