aboutsummaryrefslogtreecommitdiff
path: root/module/text/numbers.scm
blob: c45016bca35770774782884c8f33b2db207adab2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
(define-module (text numbers)
  :use-module (srfi srfi-88)
  :export (number->string-cardinal
           number->string-ordinal
           each-string))

(define (get mod-symb proc-symb)
  (module-ref (resolve-interface `(text numbers ,mod-symb))
              proc-symb))

;; "sv_SE.UTF-8"
(define (resolve-language)
  (string->symbol
   (string-take
    (or (getenv "LC_MESSAGES")
        (getenv "LC_ALL")
        "en")
    2)))

(define* (number->string-cardinal
          n optional: (language (resolve-language)))
  ((get language 'number->string-cardinal) n))

(define* (number->string-ordinal
          n optional: (language (resolve-language)))
  ((get language 'number->string-ordinal) n))

;; TODO change API to allow language, and stop having random extra
;; arguments for implementations.
(define* (each-string count . args)
  (define language (resolve-language))
  (apply (get language 'each-string)
         count args))

;; scheme@(guile-user)> (number->string-cardinal 123)
;; $10 = "hundratjugotre"
;; scheme@(guile-user)> (number->string-ordinal 123)
;; $11 = "hundratjugotredje"
;; scheme@(guile-user)> (each-string 10)
;; $12 = "var tionde"