Tiny gettext wrapper with sprintf-style helpers (l, ln, lp, ld, …) — same API as the Perl and JavaScript siblings, so one .po file feeds all three runtimes.
Project description
locale-simple
A tiny, sharp wrapper around gettext with sprintf-style formatting and
short, friendly helpers (l, ln, lp, ld, …). UTF‑8 only, by design.
The same API ships in three runtimes — Perl, Python and JavaScript — so
one set of .po files feeds your whole stack. Translate once, use
everywhere.
Why locale-simple?
- Same API across languages. A function called
lnpin Python behaves identically in Perl and JavaScript. No mental context switch when jumping between server, CLI tool and frontend. - One
.pofile for everything. Scrape strings from Perl/Python/JS sources with the same scraper, ship one translation bundle. sprintfbaked in. Both classic (%s) and positional (%1$s) placeholders — exactly like Perl'ssprintfand gettext'sxgettextformat strings expect.- Boring and small. Single-file module, no surprises, no magic.
Install
pip install locale-simple
Quick start
from locale_simple import l, ln, lp, ld, l_dir, l_lang, ltd
l_dir('data/locale') # where your .mo files live
ltd('myapp') # default text domain
l_lang('de_DE') # primary language
print(l("Hello"))
# → Hallo
print(ln("You have %d message", "You have %d messages", 1))
# → Du hast 1 Nachricht
print(ln("You have %d message", "You have %d messages", 5))
# → Du hast 5 Nachrichten
print(lp("button", "Open")) # context-disambiguated
print(ld("emails", "Welcome, %s", name)) # explicit domain
API at a glance
| Function | gettext equivalent | What it does |
|---|---|---|
l(msgid, *args) |
gettext |
Translate, then sprintf |
ln(msgid, msgid_plural, n, *args) |
ngettext |
Plural form for n |
lp(ctxt, msgid, *args) |
pgettext |
With disambiguating context |
lnp(ctxt, msgid, msgid_plural, n, *args) |
npgettext |
Plural + context |
ld(domain, msgid, *args) |
dgettext |
Specific text domain |
ldn(domain, msgid, msgid_plural, n, *args) |
dngettext |
Domain + plural |
ldp(domain, ctxt, msgid, *args) |
dpgettext |
Domain + context |
ldnp(domain, ctxt, msgid, msgid_plural, n, *args) |
dnpgettext |
The full thing |
Configuration helpers
| Call | Purpose |
|---|---|
l_dir(path) |
Locale directory containing <lang>/LC_MESSAGES/<domain>.mo |
l_lang(code) |
Set primary language (de_DE, pt_BR, …) |
ltd(domain) |
Default text domain |
l_dry(path) |
Append every encountered string to a .po-ish file (scrape mode) |
l_nolocales(bool) |
Skip lookup, return the formatted msgid (handy in tests) |
Sibling packages
| Runtime | Package | Repo path |
|---|---|---|
| Perl | Locale::Simple on CPAN |
lib/Locale/Simple.pm |
| Python | locale-simple on PyPI |
python/locale_simple.py |
| JavaScript | locale-simple on npm |
js/src/index.js |
All three share the same source tree: https://github.com/Getty/locale-simple
License
MIT © Torsten Raudssus
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file locale_simple-0.108.tar.gz.
File metadata
- Download URL: locale_simple-0.108.tar.gz
- Upload date:
- Size: 4.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f9d38acca953bee649799c7aad3ec8f43285acc303594f5dca724bab6494ac8
|
|
| MD5 |
cb8607e41ddad766f0be0a1a34a6568c
|
|
| BLAKE2b-256 |
58f5faf467fe79ac4be08e90d539acd8c74c7e67677c9ca533831205231537a1
|
File details
Details for the file locale_simple-0.108-py3-none-any.whl.
File metadata
- Download URL: locale_simple-0.108-py3-none-any.whl
- Upload date:
- Size: 4.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb48a3920873bcfddf2482d7b0ab64bebfd9c14eaba62c2b593abe3abb990462
|
|
| MD5 |
bae11f27ebaed7c7a0f30684233886fd
|
|
| BLAKE2b-256 |
041eeeade6183fbc6f56abfe93b1411785b523da4000db2e2d677eb76e98ce6e
|