# 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`