55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
|
|
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,
|
||
|
|
},
|
||
|
|
]
|
||
|
|
)
|
||
|
|
}
|