installer: Display language and territory names natively.

* gnu/installer.scm (installer-program): Add calls to 'bindtextdomain'.
* gnu/installer/newt/locale.scm (run-locale-page) <language, territory>:
Add calls to 'gettext'.
master
Ludovic Courtès 2019-04-17 11:07:21 +02:00
parent 2d5867a213
commit 7837a57241
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 23 additions and 5 deletions

View File

@ -343,6 +343,16 @@ selected keymap."
;; Add some binaries used by the installers to PATH.
#$set-installer-path
;; Arrange for language and territory name translations to be
;; available. We need them at run time, not just compile time,
;; because some territories have several corresponding languages
;; (e.g., "French" is always displayed as "français", but
;; "Belgium" could be translated to Dutch, French, or German.)
(bindtextdomain "iso_639-3" ;languages
#+(file-append iso-codes "/share/locale"))
(bindtextdomain "iso_3166-1" ;territories
#+(file-append iso-codes "/share/locale"))
(let* ((current-installer newt-installer)
(steps (#$steps current-installer)))
((installer-init current-installer))

View File

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@ -161,7 +162,13 @@ glibc locale string and return it."
(run-language-page
(sort-languages
(delete-duplicates (map locale-language supported-locales)))
(cut language-code->language-name iso639-languages <>)))))
(lambda (language)
(let ((english (language-code->language-name iso639-languages
language)))
(setenv "LANGUAGE" language)
(let ((native (gettext english "iso_639-3")))
(unsetenv "LANGUAGE")
native)))))))
(installer-step
(id 'territory)
(compute
@ -175,10 +182,11 @@ glibc locale string and return it."
;; supported by the previously selected language.
(run-territory-page
(delete-duplicates (map locale-territory locales))
(lambda (territory-code)
(if territory-code
(territory-code->territory-name iso3166-territories
territory-code)
(lambda (territory)
(if territory
(let ((english (territory-code->territory-name
iso3166-territories territory)))
(gettext english "iso_3166-1"))
(G_ "No location"))))))))
(installer-step
(id 'codeset)