diff --git a/project.clj b/project.clj index bee86d2..9317f44 100644 --- a/project.clj +++ b/project.clj @@ -1,4 +1,4 @@ -(defproject org.clojars.simon_brooke/internationalisation "1.0.1" +(defproject org.clojars.simon_brooke/internationalisation "1.0.1-SNAPSHOT" :description "Internationalisation library for Clojure" :url "https://github.com/simon-brooke/internationalisation" :license {:name "Eclipse Public License" diff --git a/src/scot/weft/i18n/core.clj b/src/scot/weft/i18n/core.clj index 99fcc9b..9187eea 100644 --- a/src/scot/weft/i18n/core.clj +++ b/src/scot/weft/i18n/core.clj @@ -1,8 +1,7 @@ (ns ^{:doc "Internationalisation." :author "Simon Brooke"} scot.weft.i18n.core - (:require [clojure.string :as cs] - [clojure.java.io :as io] + (:require [clojure.java.io :as io] [instaparse.core :as insta] [taoensso.timbre :as timbre])) @@ -134,9 +133,9 @@ * `default-locale` should be a locale specifier to use if no acceptable locale can be identified. - Returns a map of message keys to strings." + Returns a map of message keys to strings; if no useable file is found, returns nil." {:doc/format :markdown} - [accept-language-header resource-path default-locale] + [^String accept-language-header ^String resource-path ^String default-locale] (let [file-path (first (remove nil? @@ -144,14 +143,18 @@ #(find-language-file-name % resource-path) (acceptable-languages accept-language-header))))] (timbre/debug (str "Found i18n file at '" file-path "'")) - (read-string - (slurp - (or - file-path - (.getAbsolutePath - (io/file - resource-path - (str default-locale ".edn")))))))) + (try + (read-string + (slurp + (or + file-path + (.getAbsolutePath + (io/file + resource-path + (str default-locale ".edn")))))) + (catch Exception any + (timbre/error (str "Failed to load internationalisation because " (.getMessage any))) + nil)))) (def get-messages diff --git a/test/scot/weft/i18n/test/core.clj b/test/scot/weft/i18n/test/core.clj index 41f74f2..49621de 100644 --- a/test/scot/weft/i18n/test/core.clj +++ b/test/scot/weft/i18n/test/core.clj @@ -1,7 +1,7 @@ (ns ^{:doc "Tests for Internationalisation." :author "Simon Brooke"} scot.weft.i18n.test.core - (:use clojure.test - scot.weft.i18n.core)) + (:require [clojure.test :refer :all] + [scot.weft.i18n.core :refer :all])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; @@ -203,4 +203,7 @@ (is (= "Ceci n'est pas une pipe." - (:pipe (get-messages "en-GB;q=0.9, fr-FR" "resources/i18n" "en-GB")))))) + (:pipe (get-messages "en-GB;q=0.9, fr-FR" "resources/i18n" "en-GB")))) + (is + (= nil (get-messages "xx-XX;q=0.5, yy-YY" "resources/i18n" "zz-ZZ")) + "If no usable file is found, an exception should not be thrown.")))