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