Files
simple-react-app-kit/packages/i18n/src/runtime/hooks.ts
T

55 lines
1.4 KiB
TypeScript
Raw Normal View History

import * as React from "react"
import type { MessageDescriptor, MessageId, MessageOptions } from "@lingui/core"
import { useLingui } from "@lingui/react"
import { I18nRuntimeContext } from "./context"
import type { LocaleDefinition, TranslateFunction } from "./types"
export function useTranslate(): TranslateFunction {
return useLingui()._
}
export function useMessage(descriptor: MessageDescriptor): string
export function useMessage(
id: MessageId,
values?: Record<string, unknown>,
options?: MessageOptions
): string
export function useMessage(
descriptorOrId: MessageDescriptor | MessageId,
values?: Record<string, unknown>,
options?: MessageOptions
) {
const translate = useTranslate()
return React.useMemo(
() =>
typeof descriptorOrId === "string"
? translate(descriptorOrId, values, options)
: translate(descriptorOrId),
[descriptorOrId, options, translate, values]
)
}
export function useLocale(): string {
const runtime = React.useContext(I18nRuntimeContext)
const { i18n } = useLingui()
return runtime?.locale ?? i18n.locale
}
export function useLocales(): readonly LocaleDefinition[] {
const runtime = React.useContext(I18nRuntimeContext)
const { i18n } = useLingui()
return (
runtime?.locales ?? [
{
direction: "ltr",
label: i18n.locale,
locale: i18n.locale,
},
]
)
}