Source

(ns ^{:doc"Provide some Clojure sugar for internationalisation using the usual Java infrastructure of ResourceBundles.":author"Meikel Brandmeyer <m@kotka.de>"}bj18n.core(:importjava.util.ResourceBundle))(def ^{:privatetrue}bundles(atom{}))(defmacro defbundle"Creates a new bundle with given name. Attaches the Var to the metadata of the namespace. If several bundles are defined in one namespace, the last one wins as “the official bundle” for that namespace."([bundle-name]`(defbundle~bundle-name(name (ns-name *ns*))))([bundle-namepackage]`(do(declare ~bundle-name)(alter-meta!*ns*assoc ::bundle(var ~bundle-name))(swap!@#'bundlesassoc (var ~bundle-name)~package)(var ~bundle-name))))(defn init-bundles!"Initialise all bundles defined with defbundle. This should only be called once during application startup and initialisation."[](doseq [[vp]@bundles](alter-var-rootv(constantly (ResourceBundle/getBundlep)))))