Commits

Meikel Brandmeyer committed cb227dc

Add defbundle

Comments (0)

Files changed (1)

src/main/clojure/j18n/core.clj

+(ns ^{:doc
+  "Provide some Clojure sugar for internationalisation using the usual
+  Java infrastructure of ResourceBundles."
+      :author "Meikel Brandmeyer <m@kotka.de>"}
+  bj18n.core
+  (:import
+    java.util.ResourceBundle))
+
+(def ^{:private true} 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-name package]
+   `(do
+      (declare ~bundle-name)
+      (alter-meta! *ns* assoc ::bundle (var ~bundle-name))
+      (swap! @#'bundles assoc (var ~bundle-name) ~package)
+      (var ~bundle-name))))