WiLiKiソース解読:src/wiliki/mcatalog.scm

WiLiKiソース解読:src/wiliki/mcatalog.scm

 (define-module wiliki.mcatalog
  (export textdomain gettext))
 (select-module wiliki.mcatalog)
 (define *loaded-domains* '())
 (define *domain* #f)
 ;; (textdomain 'en) etc.
 (define (textdomain dom)
  (cond ((assq dom *loaded-domains*)
         => (lambda (p) (set! *domain* (cdr p))))
        ((load-domain dom)
         => (lambda (d)
              (set! *domain* d)
              (push! *loaded-domains* (cons dom d))))
        (else (set! *domain* #f))))
 ;; (gettext "Reset") etc.
 (define (gettext id)
  (if *domain*
      (hash-table-get *domain* id id)
      id))
 ;; internal
 (define (load-domain dom)
  (letrec ((fname (string-append "/wiliki/msgs." (symbol->string dom)))
           (try-open (lambda (dir)
                       (open-input-file (string-append dir fname)
                                        :if-does-not-exist #f))))
    (let loop ((dirs *load-path*))
      (cond ((null? dirs) #f)
            ((try-open (car dirs))
             => (lambda (p) 
                  (let ((h (make-hash-table 'string=?)))
                    (for-each (lambda (e)
                                (hash-table-put! h (car e) (cadr e)))
                              (port->sexp-list p))
                    (close-input-port p)
                    h)))
            (else (loop (cdr dirs)))))))
 (provide "wiliki/mcatalog")

Last modified : 2003/03/24 07:22:07 UTC