0768e8fa29
- add Intl-backed locale definitions, formatters, catalog loaders, and runtime hooks\n- compile hashed production catalogs from package-scoped catalog sources\n- drive Lingui extraction and compilation directly from project JSON config\n- redesign the devtool with localized controls, draggable persistence, settings, navigation, copy actions, ANSI output, and fullscreen support\n- extend repository APIs, CLI coverage, documentation, and runtime tests
88 lines
2.1 KiB
TypeScript
88 lines
2.1 KiB
TypeScript
import * as React from "react"
|
|
import { useLingui } from "@lingui/react"
|
|
|
|
import { I18nRuntimeContext } from "./context"
|
|
import { createIntlFormatters } from "./intl-formatters"
|
|
import type {
|
|
IntlFormatters,
|
|
LocaleDefinition,
|
|
MessageDescriptor,
|
|
MessageId,
|
|
MessageOptions,
|
|
MessageValues,
|
|
TranslateFunction,
|
|
} from "./types"
|
|
|
|
export function useTranslate(): TranslateFunction {
|
|
const { i18n } = useLingui()
|
|
|
|
return React.useCallback(
|
|
(descriptor, values) =>
|
|
i18n._({
|
|
...descriptor,
|
|
values: values ?? descriptor.values,
|
|
}),
|
|
[i18n]
|
|
)
|
|
}
|
|
|
|
export function useMessage(descriptor: MessageDescriptor): string
|
|
export function useMessage(
|
|
id: MessageId,
|
|
values?: MessageValues,
|
|
options?: MessageOptions
|
|
): string
|
|
export function useMessage(
|
|
descriptorOrId: MessageDescriptor | MessageId,
|
|
values?: MessageValues,
|
|
options?: MessageOptions
|
|
) {
|
|
const { i18n } = useLingui()
|
|
|
|
return React.useMemo(
|
|
() =>
|
|
typeof descriptorOrId === "string"
|
|
? i18n._(descriptorOrId, values, options)
|
|
: i18n._({
|
|
...descriptorOrId,
|
|
values: values ?? descriptorOrId.values,
|
|
}),
|
|
[descriptorOrId, i18n, options, values]
|
|
)
|
|
}
|
|
|
|
export function useLocale(): string {
|
|
return useLocaleDefinition().locale
|
|
}
|
|
|
|
export function useLocaleDefinition(): LocaleDefinition {
|
|
const runtime = React.useContext(I18nRuntimeContext)
|
|
const { i18n } = useLingui()
|
|
|
|
return (
|
|
runtime?.locale ?? {
|
|
label: i18n.locale,
|
|
languageTag: i18n.locale,
|
|
locale: i18n.locale,
|
|
}
|
|
)
|
|
}
|
|
|
|
export function useLocales(): readonly LocaleDefinition[] {
|
|
const runtime = React.useContext(I18nRuntimeContext)
|
|
const activeLocale = useLocaleDefinition()
|
|
|
|
return runtime?.locales ?? [activeLocale]
|
|
}
|
|
|
|
export function useFormatters(): IntlFormatters {
|
|
const runtime = React.useContext(I18nRuntimeContext)
|
|
const locale = useLocaleDefinition()
|
|
const fallbackFormatters = React.useMemo(
|
|
() => createIntlFormatters(locale.languageTag ?? locale.locale),
|
|
[locale.languageTag, locale.locale]
|
|
)
|
|
|
|
return runtime?.formatters ?? fallbackFormatters
|
|
}
|