0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-09 00:10:11 -05:00
penpot/frontend/uxbox/locales.cljs
2016-01-08 01:45:06 +02:00

40 lines
909 B
Clojure

(ns uxbox.locales
"A i18n foundation."
(:require [hodgepodge.core :refer [local-storage]]
[cuerdas.core :as str]
[uxbox.locales.en :as locales-en]))
(defonce +locales+
{:en locales-en/+locales+})
(defonce +locale+
(get local-storage ::locale :en))
(deftype C [val]
IDeref
(-deref [o] val))
(defn c
[x]
(C. x))
(defn ^boolean c?
[r]
(instance? C r))
(defn tr
"Translate the string."
([t]
(let [default (name t)
value (get-in +locales+ [+locale+ t] default)]
(if (vector? value)
(or (second value) default)
value)))
([t & args]
(let [value (get-in +locales+ [+locale+ t] (name t))
plural (first (filter c? args))
args (mapv #(if (c? %) @% %) args)
value (if vector?
(if (= @plural 1) (first value) (second value))
value)]
(apply str/format value args))))