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

Diff from to

src/main/clojure/j18n/core.clj

       :author "Meikel Brandmeyer <m@kotka.de>"}
   j18n.core
   (:import
-    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)))))
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.