1. Meikel Brandmeyer
  2. j18n


j18n / src / main / clojure / j18n / core.clj

Diff from to

File src/main/clojure/j18n/core.clj

  • Ignore whitespace
       :author "Meikel Brandmeyer <m@kotka.de>"}
-    java.util.ResourceBundle))
+    java.util.ResourceBundle
+    java.util.Set))
 (def ^{:private true :tag Set} bundle-keys
- (memoize #(.keySet ^ResourceBundle %)))
+  (memoize #(.keySet ^ResourceBundle %)))
-(defn ^{:private true :tag String} message-to-bundle
- [message]
- (when (keyword? message)
-   (when-let [bundle (namespace message)]
-     (munge bundle))))
+(defn translate
+  "Translate the given message in the given bundle. A message is a fully
+  qualified keyword. The namespace part of the keyword specifies the bundle.
+  The name part of the keyword is fully looked up as the key in the bundle.
-(defn translate*
- "Translate the given message in the given bundle. For resolution rules see
- translate. However, if message is a string or an unqualified keyword, the
- bundle has to be given! Only qualified keywords may be used without explicit
- bundle!"
- ([message]
-  {:pre [(keyword? message) (namespace message)]}
-  (translate* message (ResourceBundle/getBundle (message-to-bundle message))))
- ([message ^ResourceBundle bundle]
-  (let [message (name message)]
-    (when (.contains (bundle-keys bundle) message)
-      (.getString bundle message)))))
-(defmacro translate
- "Translate the given message. Message may be a qualified or non-qualified
- keyword or a String. The message is looked up in the given bundle. If no
- bundle is given, the bundle of the namespace of the qualified keyword will
- be used. Note, that this namespace does not have to exist! If the keyword
- is not qualified or the message key is given as String, the bundle of the
- current namespace will be used."
- ([message]
-  {:pre [(or (string? message) (keyword? message))]}
-  (let [bundle (or (message-to-bundle message)
-                   (munge (name (ns-name *ns*))))]
-    `(translate ~message (ResourceBundle/getBundle ~bundle))))
- ([message bundle]
-  {:pre [(or (string? message) (keyword? message))]}
-  `(translate* ~message ~bundle)))
+  Optionally the bundle might be given explicitly as second argument. In
+  that case the message may also be an unqualified keyword or a string."
+  ([message]
+   {:pre [(keyword? message) (namespace message)]}
+   (let [bundle (-> message namespace munge ResourceBundle/getBundle)]
+     (translate message bundle)))
+  ([message ^ResourceBundle bundle]
+   {:pre [(or (string? message) (keyword? message))]}
+   (let [message (name message)]
+     (when (.contains (bundle-keys bundle) message)
+       (.getString bundle message)))))