# useTranslate
_(no submodules)_
## Purpose
`useTranslate(namespace?)` is the terse alias of `useTranslation`. It
returns just the bound translator function — useful when the consumer
only needs to render translated text and does not care about the
`{ ready, i18n }` extras. The hook composes `useTranslation` directly,
so all of Suspense, the error-boundary cause-chain on namespace-load
failure, and the production no-Provider identity fallback flow through
unchanged.
The intended use case is leaf components that only stamp out text. For
anything that needs to read the underlying `I18nInstance`, observe the
`ready` flag, or branch on the current locale, prefer `useTranslation`.
## Features
- Returns the bound `t(key, options?)` function from `useTranslation`.
- Optional namespace prefix forwarded to `useTranslation(namespace)`.
- Inherits Suspense + error-boundary behaviour from `useTranslation`.
- Inherits the production no-Provider identity-translator soft-fail.
- Zero extra allocations beyond the underlying `useTranslation` call.
## Usage: Basic Example
```tsx
import { useTranslate, TranslationProvider } from "@suaveplan/react-i18n";
import { createI18n } from "@suaveplan/i18n/plugin";
function Greeting() {
const t = useTranslate();
return {t("hello")};
}
const i18n = createI18n({
defaultLocale: "en-GB",
messages: { "en-GB": { hello: "Hi there" } },
});
export function App() {
return (
);
}
```
## Usage: Advanced Example
The terse form composes naturally with namespace prefixes and the full
options bag — the returned function is identical to the one
`useTranslation(namespace).t` returns, so anything that translator
supports also works here. The pattern below shows interpolation, plural
selection through the catalog's `count` shorthand, and a default-value
fallback when a key is absent.
```tsx
import { useTranslate } from "@suaveplan/react-i18n";
export function CartSummary(props: { readonly itemCount: number }) {
const t = useTranslate("cart");
return (
);
}
```
## API Reference
### `useTranslate(namespace?: string): UseTranslationT`
- **Parameters**:
- `namespace?` — optional namespace passed straight through to `useTranslation`.
- **Returns**: the bound translator `(key: string, options?: UseTranslationOptions) => string`.
- **Throws**:
- **Promise** under Suspense semantics when the namespace must be loaded.
- **`ReactI18nError(REACT_I18N.NAMESPACE_LOAD_FAILED)`** when the preload Promise rejects.
- **`ReactI18nError(REACT_I18N.NO_PROVIDER)`** outside a `` in development.
## Implementation Notes
- The hook is intentionally a one-line composition (`useTranslation(namespace).t`). Keeping the body tiny means future changes to Suspense / no-Provider semantics in `useTranslation` propagate automatically.
- The function reference returned is the SAME `t` function `useTranslation` returns — destructuring `useTranslation(ns).t === useTranslate(ns)` for the same render. This keeps the single-function form interchangeable with the triple-return form when refactoring between the two.
- Prefer `useTranslation` when the consumer needs `ready` or wants to check `i18n` for advanced operations like switching the active locale or subscribing to bus events.