~ruther/guix-local

cbd01cff797750e38b1c3061761d41398b53c86b — Ludovic Courtès 7 years ago 850ddf9
installer: Use the normalized codeset in the 'locale' field.

* gnu/installer/locale.scm (normalize-codeset): New procedure.
(locale->locale-string): Use it.
1 files changed, 20 insertions(+), 1 deletions(-)

M gnu/installer/locale.scm
M gnu/installer/locale.scm => gnu/installer/locale.scm +20 -1
@@ 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.
;;;


@@ 69,6 70,24 @@
      (codeset   . ,(match:substring matches 5))
      (modifier  . ,(match:substring matches 7)))))

(define (normalize-codeset codeset)
  "Compute the \"normalized\" variant of CODESET."
  ;; info "(libc) Using gettextized software", for the algorithm used to
  ;; compute the normalized codeset.
  (letrec-syntax ((-> (syntax-rules ()
                        ((_ proc value)
                         (proc value))
                        ((_ proc rest ...)
                         (proc (-> rest ...))))))
    (-> (lambda (str)
          (if (string-every char-set:digit str)
              (string-append "iso" str)
              str))
        string-downcase
        (lambda (str)
          (string-filter char-set:letter+digit str))
        codeset)))

(define (locale->locale-string locale)
  "Reverse operation of locale-string->locale."
  (let ((language (locale-language locale))


@@ 81,7 100,7 @@
                   `("_" ,territory)
                   '())
             ,@(if codeset
                   `("." ,codeset)
                   `("." ,(normalize-codeset codeset))
                   '())
             ,@(if modifier
                   `("@" ,modifier)