{"id":13442258,"url":"https://github.com/taoensso/tempura","last_synced_at":"2025-10-21T23:43:48.184Z","repository":{"id":3602111,"uuid":"50273946","full_name":"taoensso/tempura","owner":"taoensso","description":"Simple text localization library for Clojure/Script","archived":false,"fork":false,"pushed_at":"2024-03-19T14:14:44.000Z","size":125,"stargazers_count":255,"open_issues_count":3,"forks_count":16,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-05-01T18:54:39.037Z","etag":null,"topics":["clojure","clojurescript","epl","gettext","i18n","taoensso","translation"],"latest_commit_sha":null,"homepage":"https://www.taoensso.com/tempura","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taoensso.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":"FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"ptaoussanis","custom":"https://www.taoensso.com/clojure"}},"created_at":"2016-01-24T05:38:39.000Z","updated_at":"2024-04-09T20:02:26.000Z","dependencies_parsed_at":"2024-05-01T15:27:27.335Z","dependency_job_id":"8cd00ea0-df69-4a08-afdd-0d6e05a9377c","html_url":"https://github.com/taoensso/tempura","commit_stats":{"total_commits":64,"total_committers":5,"mean_commits":12.8,"dds":0.421875,"last_synced_commit":"11b026ea1c8eeea1f015a576bee8f673e4c495c8"},"previous_names":["taoensso/tempura","ptaoussanis/tempura"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoensso%2Ftempura","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoensso%2Ftempura/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoensso%2Ftempura/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoensso%2Ftempura/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taoensso","download_url":"https://codeload.github.com/taoensso/tempura/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221768513,"owners_count":16877652,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojure","clojurescript","epl","gettext","i18n","taoensso","translation"],"created_at":"2024-07-31T03:01:43.613Z","updated_at":"2025-10-21T23:43:42.903Z","avatar_url":"https://github.com/taoensso.png","language":"Clojure","funding_links":["https://github.com/sponsors/ptaoussanis","https://www.taoensso.com/clojure"],"categories":["Clojure"],"sub_categories":[],"readme":"\u003ca href=\"https://www.taoensso.com/clojure\" title=\"More stuff by @ptaoussanis at www.taoensso.com\"\u003e\u003cimg src=\"https://www.taoensso.com/open-source.png\" alt=\"Taoensso open source\" width=\"340\"/\u003e\u003c/a\u003e  \n[**API**][cljdoc docs] | [**Wiki**][GitHub wiki] | [Latest releases](#latest-releases) | [Slack channel][]\n\n# Tempura\n\n### Simple text localization library for Clojure/Script\n\n**Tempura** is mature, developer-friendly library for supporting **multilingual text** in your Clojure and ClojureScript applications.\n\nIt offers a simple, easy-to-use API that allows you to **expand localization content over time**, without bogging down early development.\n\n## Latest release/s\n\n- `2024-06-05` `v1.5.4`: [release info](../../releases/tag/v1.5.4)\n\n[![Main tests][Main tests SVG]][Main tests URL]\n[![Graal tests][Graal tests SVG]][Graal tests URL]\n\nSee [here][GitHub releases] for earlier releases.\n\n## Why Tempura?\n\n - Tiny (**single fn**), **cross-platform all-Clojure API** for providing multilingual text content.\n - Matches [gettext](https://en.wikipedia.org/wiki/Gettext)'s convenience for **embedding default content** directly in code (optional).\n - Exceeds [gettext](https://en.wikipedia.org/wiki/Gettext)'s ability to handle **versioned content** through unique content ids.\n - Works out-the-box with plain text, Hiccup, **Reactjs**, etc.\n - Easy, optional platform-appropriate support for simple **Markdown styles**.\n - **Flexibility**: completely open/pluggable resource compiler.\n - **Performance**: match or exceed `format` performance through compilation + smart caching.\n - All-Clojure **(edn) dictionary format** for ease of use, easy compile-**and-runtime** manipulation, etc.\n - Focused on common-case **translation** and no other aspects of i18n/L10n.\n\n## 10-second example\n\n```clojure\n(require '[taoensso.tempura :as tempura :refer [tr]]))\n\n(tr ; For \"translate\"\n    {:dict ; Dictionary of translations\n     {:sw {:missing \"sw/?\" :r1 \"sw/r1\" :r2 \"sw/r2\"}\n      :en {:missing \"en/?\" :r1 \"en/r1\" :r2 \"en/r2\"}}}\n\n    [:sw :en \u003c...\u003e] ; Locales   (desc priority)\n    [:r1 :r2 \u003c...\u003e  ; Resources (desc priority)\n     \u003c?fallback-str\u003e ; Optional final fallback string\n     ])\n\n;; =\u003e\n\n(or\n  sw/r1 sw/r2  \u003c...\u003e ; Descending-priority resources in priority-1 locale\n  en/r1 en/r2  \u003c...\u003e ; ''                            in priority-2 locale\n  \u003c...\u003e\n\n  ?fallback-str ; Optional fallback string (as last element in resources vec)\n\n  sw/? ; Missing (error) resource in priority-1 locale\n  en/? ; ''                          priority-2 locale\n\n  nil  ; If none of the above exist\n  )\n\n;; etc.\n\n;; Note that ?fallback-str is super handy for development before you\n;; have translations ready, e.g.:\n\n(tr {:dict {}} [:en] [:sign-in-btn \"Sign in here!\"])\n;; =\u003e \"Sign in here!\"\n\n;; Tempura also supports Hiccup with Markdown-like styles, e.g.:\n\n(tr {:dict {}} [:en] [:sign-in-btn [\"**Sign in** here!\"]])\n;; =\u003e [:span [:strong \"Sign in\"] \" here!\"]\n\n```\n\n## Documentation\n\n- [Wiki][GitHub wiki] (getting started, usage, etc.)\n- API reference: [cljdoc][cljdoc docs], [Codox][Codox docs]\n- Support: [Slack channel][] or [GitHub issues][]\n\n## Funding\n\nYou can [help support][sponsor] continued work on this project, thank you!! 🙏\n\n## License\n\nCopyright \u0026copy; 2016-2024 [Peter Taoussanis][].  \nLicensed under [EPL 1.0](LICENSE.txt) (same as Clojure).\n\n\u003c!-- Common --\u003e\n\n[GitHub releases]: ../../releases\n[GitHub issues]:   ../../issues\n[GitHub wiki]:     ../../wiki\n[Slack channel]: https://www.taoensso.com/slack\n\n[Peter Taoussanis]: https://www.taoensso.com\n[sponsor]:          https://www.taoensso.com/sponsor\n\n\u003c!-- Project --\u003e\n\n[Codox docs]:   https://taoensso.github.io/tempura/\n[cljdoc docs]: https://cljdoc.org/d/com.taoensso/tempura/\n\n[Clojars SVG]: https://img.shields.io/clojars/v/com.taoensso/tempura.svg\n[Clojars URL]: https://clojars.org/com.taoensso/tempura\n\n[Main tests SVG]:  https://github.com/taoensso/tempura/actions/workflows/main-tests.yml/badge.svg\n[Main tests URL]:  https://github.com/taoensso/tempura/actions/workflows/main-tests.yml\n[Graal tests SVG]: https://github.com/taoensso/tempura/actions/workflows/graal-tests.yml/badge.svg\n[Graal tests URL]: https://github.com/taoensso/tempura/actions/workflows/graal-tests.yml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaoensso%2Ftempura","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaoensso%2Ftempura","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaoensso%2Ftempura/lists"}