summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2021-09-30 22:35:48 +0200
committerVivien Kraus <vivien@planete-kraus.eu>2021-10-04 22:57:59 +0200
commitb6a3a1222912bef89f109fec4174febb43944fae (patch)
tree30f7051fcb063565e9c44914e98f4f1527c07084
parent9e2873b126bff9e0d13d2953729def4b0b3cd73e (diff)
web i18n: handle locales such as en-gb
The region may not be in capital letters
-rw-r--r--src/scm/webid-oidc/web-i18n.scm18
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)