# lang/get Translate a phrase through the catalog. The first argument is the language, the second is the `app/phrase` key; remaining arguments fill the template's `{name}` placeholders positionally. Resolution order: exact language → region base (`es-MX` → `es`) → the app's `:fallback` → `"en"` → the raw key string, so untranslated phrases are self-labeling in the UI. ## Syntax
[lang/get $lang "app/phrase" ?args...]
## Parameters - `$lang` — language code (string or keyword, e.g. `:es` or `"es"`) - `"app/phrase"` — catalog key: app name, `/`, phrase - `?args...` — positional values for `{name}` placeholders; non-strings are stringified. A placeholder with no matching argument renders back as `{name}`. `{{` in a template escapes a literal `{`. ## Examples
[lang/get :es "chat/welcome" "Juan"]    # → "Hola, Juan"
[lang/get :en "chat/quit"]              # → "Quit"
[lang/get :de "chat/quit"]              # → "Quit" — fallback to "en"
[lang/get :es "chat/nope"]              # → "chat/nope" — raw key
[lang/get :es "chat/welcome"]           # → "Hola, {name}" — missing argument
[lang/get :en "chat/count" 3]           # → "count: 3" — non-string arg
## Returns Translated string. `%Err{:message}` when fewer than two args are supplied, a lang/key argument is not a string or keyword, or the key does not have `app/phrase` form. ## See Also `lang/set`, `lang/load`, `lang/langs`, `lang/current`