use-intl 2.19.1 → 3.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core.d.ts +1 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.esm.js +102 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.esm.js.map +1 -0
- package/dist/core/IntlError.esm.js +33 -0
- package/dist/core/IntlError.esm.js.map +1 -0
- package/dist/core/TranslationValues.d.ts +1 -0
- package/dist/core/convertFormatsToIntlMessageFormat.esm.js +32 -0
- package/dist/core/convertFormatsToIntlMessageFormat.esm.js.map +1 -0
- package/dist/core/createBaseTranslator.d.ts +3 -8
- package/dist/core/createBaseTranslator.esm.js +201 -0
- package/dist/core/createBaseTranslator.esm.js.map +1 -0
- package/dist/core/createFormatter.esm.js +138 -0
- package/dist/core/createFormatter.esm.js.map +1 -0
- package/dist/core/createIntl.esm.js +14 -0
- package/dist/core/createIntl.esm.js.map +1 -0
- package/dist/core/createTranslator.d.ts +2 -3
- package/dist/core/createTranslator.esm.js +37 -0
- package/dist/core/createTranslator.esm.js.map +1 -0
- package/dist/core/createTranslatorImpl.d.ts +2 -3
- package/dist/core/createTranslatorImpl.esm.js +50 -0
- package/dist/core/createTranslatorImpl.esm.js.map +1 -0
- package/dist/core/defaults.esm.js +15 -0
- package/dist/core/defaults.esm.js.map +1 -0
- package/dist/core/index.d.ts +8 -1
- package/dist/core/initializeConfig.d.ts +13 -0
- package/dist/core/initializeConfig.esm.js +29 -0
- package/dist/core/initializeConfig.esm.js.map +1 -0
- package/dist/core/resolveNamespace.esm.js +10 -0
- package/dist/core/resolveNamespace.esm.js.map +1 -0
- package/dist/core/use-intl.esm.js +34 -30
- package/dist/core/use-intl.esm.js.map +1 -1
- package/dist/core/use-intl.esm10.js +23 -27
- package/dist/core/use-intl.esm10.js.map +1 -1
- package/dist/core/use-intl.esm11.js +10 -0
- package/dist/core/use-intl.esm11.js.map +1 -0
- package/dist/core/use-intl.esm2.js +30 -34
- package/dist/core/use-intl.esm2.js.map +1 -1
- package/dist/core/use-intl.esm3.js +8 -132
- package/dist/core/use-intl.esm3.js.map +1 -1
- package/dist/core/use-intl.esm4.js +196 -9
- package/dist/core/use-intl.esm4.js.map +1 -1
- package/dist/core/use-intl.esm5.js +19 -43
- package/dist/core/use-intl.esm5.js.map +1 -1
- package/dist/core/use-intl.esm6.js +134 -11
- package/dist/core/use-intl.esm6.js.map +1 -1
- package/dist/core/use-intl.esm7.js +10 -5
- package/dist/core/use-intl.esm7.js.map +1 -1
- package/dist/core/use-intl.esm8.js +37 -178
- package/dist/core/use-intl.esm8.js.map +1 -1
- package/dist/core/use-intl.esm9.js +27 -23
- package/dist/core/use-intl.esm9.js.map +1 -1
- package/dist/core/validateMessages.esm.js +28 -0
- package/dist/core/validateMessages.esm.js.map +1 -0
- package/dist/core.cjs.development.js +93 -0
- package/dist/core.cjs.development.js.map +1 -0
- package/dist/core.cjs.production.min.js +2 -0
- package/dist/core.cjs.production.min.js.map +1 -0
- package/dist/core.d.ts +1 -0
- package/dist/core.esm.js +7 -0
- package/dist/core.esm.js.map +1 -0
- package/dist/core.js +8 -0
- package/dist/createIntl-8a2b87eb.js +579 -0
- package/dist/createIntl-8a2b87eb.js.map +1 -0
- package/dist/createIntl-f7979de1.js +2 -0
- package/dist/createIntl-f7979de1.js.map +1 -0
- package/dist/react/IntlContext.esm.js +6 -0
- package/dist/react/IntlContext.esm.js.map +1 -0
- package/dist/react/IntlProvider.d.ts +1 -1
- package/dist/react/IntlProvider.esm.js +16 -0
- package/dist/react/IntlProvider.esm.js.map +1 -0
- package/dist/react/getInitializedConfig.d.ts +1 -13
- package/dist/react/use-intl.esm.js +22 -12
- package/dist/react/use-intl.esm.js.map +1 -1
- package/dist/react/use-intl.esm10.js +8 -24
- package/dist/react/use-intl.esm10.js.map +1 -1
- package/dist/react/use-intl.esm11.js +3 -10
- package/dist/react/use-intl.esm11.js.map +1 -1
- package/dist/react/use-intl.esm2.js +20 -22
- package/dist/react/use-intl.esm2.js.map +1 -1
- package/dist/react/use-intl.esm3.js +41 -4
- package/dist/react/use-intl.esm3.js.map +1 -1
- package/dist/react/use-intl.esm4.js +12 -41
- package/dist/react/use-intl.esm4.js.map +1 -1
- package/dist/react/use-intl.esm5.js +1 -1
- package/dist/react/use-intl.esm6.js +1 -1
- package/dist/react/use-intl.esm7.js +11 -5
- package/dist/react/use-intl.esm7.js.map +1 -1
- package/dist/react/use-intl.esm8.js +4 -26
- package/dist/react/use-intl.esm8.js.map +1 -1
- package/dist/react/use-intl.esm9.js +33 -3
- package/dist/react/use-intl.esm9.js.map +1 -1
- package/dist/react/useFormatter.esm.js +24 -0
- package/dist/react/useFormatter.esm.js.map +1 -0
- package/dist/react/useIntl.esm.js +30 -0
- package/dist/react/useIntl.esm.js.map +1 -0
- package/dist/react/useIntlContext.esm.js +13 -0
- package/dist/react/useIntlContext.esm.js.map +1 -0
- package/dist/react/useLocale.esm.js +8 -0
- package/dist/react/useLocale.esm.js.map +1 -0
- package/dist/react/useMessages.esm.js +8 -0
- package/dist/react/useMessages.esm.js.map +1 -0
- package/{src/react/useNow.tsx → dist/react/useNow.esm.js} +32 -36
- package/dist/react/useNow.esm.js.map +1 -0
- package/dist/react/useTimeZone.esm.js +8 -0
- package/dist/react/useTimeZone.esm.js.map +1 -0
- package/dist/react/useTranslations.esm.js +26 -0
- package/dist/react/useTranslations.esm.js.map +1 -0
- package/dist/react/{use-intl.esm12.js → useTranslationsImpl.esm.js} +6 -13
- package/dist/react/useTranslationsImpl.esm.js.map +1 -0
- package/dist/react.cjs.development.js +184 -0
- package/dist/react.cjs.development.js.map +1 -0
- package/dist/react.cjs.production.min.js +2 -0
- package/dist/react.cjs.production.min.js.map +1 -0
- package/dist/react.d.ts +1 -0
- package/dist/react.esm.js +9 -0
- package/dist/react.esm.js.map +1 -0
- package/dist/react.js +8 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/use-intl.cjs.development.js +32 -30
- package/dist/use-intl.cjs.development.js.map +1 -1
- package/dist/use-intl.cjs.production.min.js +1 -1
- package/dist/use-intl.cjs.production.min.js.map +1 -1
- package/dist/use-intl.esm.js +12 -10
- package/dist/use-intl.esm.js.map +1 -1
- package/package.json +17 -15
- package/react.d.ts +1 -0
- package/dist/react/use-intl.esm12.js.map +0 -1
- package/dist/src/core/AbstractIntlMessages.d.ts +0 -9
- package/dist/src/core/AbstractIntlMessages.js +0 -2
- package/dist/src/core/AbstractIntlMessages.js.map +0 -1
- package/dist/src/core/DateTimeFormatOptions.d.ts +0 -73
- package/dist/src/core/DateTimeFormatOptions.js +0 -3
- package/dist/src/core/DateTimeFormatOptions.js.map +0 -1
- package/dist/src/core/Formats.d.ts +0 -8
- package/dist/src/core/Formats.js +0 -2
- package/dist/src/core/Formats.js.map +0 -1
- package/dist/src/core/IntlConfig.d.ts +0 -54
- package/dist/src/core/IntlConfig.js +0 -2
- package/dist/src/core/IntlConfig.js.map +0 -1
- package/dist/src/core/IntlError.d.ts +0 -13
- package/dist/src/core/IntlError.js +0 -23
- package/dist/src/core/IntlError.js.map +0 -1
- package/dist/src/core/NumberFormatOptions.d.ts +0 -2
- package/dist/src/core/NumberFormatOptions.js +0 -2
- package/dist/src/core/NumberFormatOptions.js.map +0 -1
- package/dist/src/core/TimeZone.d.ts +0 -2
- package/dist/src/core/TimeZone.js +0 -2
- package/dist/src/core/TimeZone.js.map +0 -1
- package/dist/src/core/TranslationValues.d.ts +0 -5
- package/dist/src/core/TranslationValues.js +0 -2
- package/dist/src/core/TranslationValues.js.map +0 -1
- package/dist/src/core/convertFormatsToIntlMessageFormat.d.ts +0 -11
- package/dist/src/core/convertFormatsToIntlMessageFormat.js +0 -31
- package/dist/src/core/convertFormatsToIntlMessageFormat.js.map +0 -1
- package/dist/src/core/createBaseTranslator.d.ts +0 -26
- package/dist/src/core/createBaseTranslator.js +0 -206
- package/dist/src/core/createBaseTranslator.js.map +0 -1
- package/dist/src/core/createFormatter.d.ts +0 -19
- package/dist/src/core/createFormatter.js +0 -129
- package/dist/src/core/createFormatter.js.map +0 -1
- package/dist/src/core/createIntl.d.ts +0 -7
- package/dist/src/core/createIntl.js +0 -11
- package/dist/src/core/createIntl.js.map +0 -1
- package/dist/src/core/createTranslator.d.ts +0 -48
- package/dist/src/core/createTranslator.js +0 -24
- package/dist/src/core/createTranslator.js.map +0 -1
- package/dist/src/core/createTranslatorImpl.d.ts +0 -14
- package/dist/src/core/createTranslatorImpl.js +0 -43
- package/dist/src/core/createTranslatorImpl.js.map +0 -1
- package/dist/src/core/defaults.d.ts +0 -11
- package/dist/src/core/defaults.js +0 -11
- package/dist/src/core/defaults.js.map +0 -1
- package/dist/src/core/index.d.ts +0 -9
- package/dist/src/core/index.js +0 -6
- package/dist/src/core/index.js.map +0 -1
- package/dist/src/core/resolveNamespace.d.ts +0 -5
- package/dist/src/core/resolveNamespace.js +0 -10
- package/dist/src/core/resolveNamespace.js.map +0 -1
- package/dist/src/core/utils/MessageKeys.d.ts +0 -5
- package/dist/src/core/utils/MessageKeys.js +0 -2
- package/dist/src/core/utils/MessageKeys.js.map +0 -1
- package/dist/src/core/utils/NamespaceKeys.d.ts +0 -5
- package/dist/src/core/utils/NamespaceKeys.js +0 -2
- package/dist/src/core/utils/NamespaceKeys.js.map +0 -1
- package/dist/src/core/utils/NestedKeyOf.d.ts +0 -4
- package/dist/src/core/utils/NestedKeyOf.js +0 -2
- package/dist/src/core/utils/NestedKeyOf.js.map +0 -1
- package/dist/src/core/utils/NestedValueOf.d.ts +0 -2
- package/dist/src/core/utils/NestedValueOf.js +0 -2
- package/dist/src/core/utils/NestedValueOf.js.map +0 -1
- package/dist/src/core/validateMessages.d.ts +0 -3
- package/dist/src/core/validateMessages.js +0 -56
- package/dist/src/core/validateMessages.js.map +0 -1
- package/dist/src/index.d.ts +0 -2
- package/dist/src/index.js +0 -3
- package/dist/src/index.js.map +0 -1
- package/dist/src/react/IntlContext.d.ts +0 -4
- package/dist/src/react/IntlContext.js +0 -4
- package/dist/src/react/IntlContext.js.map +0 -1
- package/dist/src/react/IntlProvider.d.ts +0 -7
- package/dist/src/react/IntlProvider.js +0 -7
- package/dist/src/react/IntlProvider.js.map +0 -1
- package/dist/src/react/getInitializedConfig.d.ts +0 -13
- package/dist/src/react/getInitializedConfig.js +0 -21
- package/dist/src/react/getInitializedConfig.js.map +0 -1
- package/dist/src/react/index.d.ts +0 -8
- package/dist/src/react/index.js +0 -10
- package/dist/src/react/index.js.map +0 -1
- package/dist/src/react/useFormatter.d.ts +0 -6
- package/dist/src/react/useFormatter.js +0 -14
- package/dist/src/react/useFormatter.js.map +0 -1
- package/dist/src/react/useIntl.d.ts +0 -6
- package/dist/src/react/useIntl.js +0 -20
- package/dist/src/react/useIntl.js.map +0 -1
- package/dist/src/react/useIntlContext.d.ts +0 -1
- package/dist/src/react/useIntlContext.js +0 -12
- package/dist/src/react/useIntlContext.js.map +0 -1
- package/dist/src/react/useLocale.d.ts +0 -1
- package/dist/src/react/useLocale.js +0 -5
- package/dist/src/react/useLocale.js.map +0 -1
- package/dist/src/react/useMessages.d.ts +0 -1
- package/dist/src/react/useMessages.js +0 -5
- package/dist/src/react/useMessages.js.map +0 -1
- package/dist/src/react/useNow.d.ts +0 -23
- package/dist/src/react/useNow.js +0 -40
- package/dist/src/react/useNow.js.map +0 -1
- package/dist/src/react/useTimeZone.d.ts +0 -1
- package/dist/src/react/useTimeZone.js +0 -5
- package/dist/src/react/useTimeZone.js.map +0 -1
- package/dist/src/react/useTranslations.d.ts +0 -44
- package/dist/src/react/useTranslations.js +0 -21
- package/dist/src/react/useTranslations.js.map +0 -1
- package/dist/src/react/useTranslationsImpl.d.ts +0 -8
- package/dist/src/react/useTranslationsImpl.js +0 -35
- package/dist/src/react/useTranslationsImpl.js.map +0 -1
- package/src/core/AbstractIntlMessages.tsx +0 -10
- package/src/core/DateTimeFormatOptions.tsx +0 -130
- package/src/core/Formats.tsx +0 -10
- package/src/core/IntlConfig.tsx +0 -59
- package/src/core/IntlError.tsx +0 -26
- package/src/core/NumberFormatOptions.tsx +0 -3
- package/src/core/TimeZone.tsx +0 -426
- package/src/core/TranslationValues.tsx +0 -22
- package/src/core/convertFormatsToIntlMessageFormat.tsx +0 -46
- package/src/core/createBaseTranslator.tsx +0 -335
- package/src/core/createFormatter.tsx +0 -191
- package/src/core/createIntl.tsx +0 -13
- package/src/core/createTranslator.tsx +0 -112
- package/src/core/createTranslatorImpl.tsx +0 -87
- package/src/core/defaults.tsx +0 -18
- package/src/core/index.tsx +0 -14
- package/src/core/resolveNamespace.tsx +0 -12
- package/src/core/utils/MessageKeys.tsx +0 -9
- package/src/core/utils/NamespaceKeys.tsx +0 -9
- package/src/core/utils/NestedKeyOf.tsx +0 -9
- package/src/core/utils/NestedValueOf.tsx +0 -12
- package/src/core/validateMessages.tsx +0 -77
- package/src/index.tsx +0 -2
- package/src/react/IntlContext.tsx +0 -6
- package/src/react/IntlProvider.tsx +0 -16
- package/src/react/getInitializedConfig.tsx +0 -29
- package/src/react/index.tsx +0 -10
- package/src/react/useFormatter.tsx +0 -19
- package/src/react/useIntl.tsx +0 -29
- package/src/react/useIntlContext.tsx +0 -16
- package/src/react/useLocale.tsx +0 -5
- package/src/react/useMessages.tsx +0 -5
- package/src/react/useTimeZone.tsx +0 -5
- package/src/react/useTranslations.tsx +0 -103
- package/src/react/useTranslationsImpl.tsx +0 -65
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import AbstractIntlMessages from './AbstractIntlMessages';
|
|
2
|
-
import {InitializedIntlConfig} from './IntlConfig';
|
|
3
|
-
import IntlError, {IntlErrorCode} from './IntlError';
|
|
4
|
-
import {RichTranslationValues, TranslationValue} from './TranslationValues';
|
|
5
|
-
import createBaseTranslator, {getMessagesOrError} from './createBaseTranslator';
|
|
6
|
-
import resolveNamespace from './resolveNamespace';
|
|
7
|
-
import NestedKeyOf from './utils/NestedKeyOf';
|
|
8
|
-
|
|
9
|
-
export type CoreRichTranslationValues = Record<
|
|
10
|
-
string,
|
|
11
|
-
TranslationValue | ((chunks: string) => string)
|
|
12
|
-
>;
|
|
13
|
-
|
|
14
|
-
export type CreateTranslatorImplProps<Messages> = Omit<
|
|
15
|
-
InitializedIntlConfig,
|
|
16
|
-
'messages'
|
|
17
|
-
> & {
|
|
18
|
-
namespace: string;
|
|
19
|
-
messages: Messages;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export default function createTranslatorImpl<
|
|
23
|
-
Messages extends AbstractIntlMessages,
|
|
24
|
-
NestedKey extends NestedKeyOf<Messages>
|
|
25
|
-
>(
|
|
26
|
-
{
|
|
27
|
-
getMessageFallback,
|
|
28
|
-
messages,
|
|
29
|
-
namespace,
|
|
30
|
-
onError,
|
|
31
|
-
...rest
|
|
32
|
-
}: CreateTranslatorImplProps<Messages>,
|
|
33
|
-
namespacePrefix: string
|
|
34
|
-
) {
|
|
35
|
-
// The `namespacePrefix` is part of the type system.
|
|
36
|
-
// See the comment in the function invocation.
|
|
37
|
-
messages = messages[namespacePrefix] as Messages;
|
|
38
|
-
namespace = resolveNamespace(namespace, namespacePrefix) as NestedKey;
|
|
39
|
-
|
|
40
|
-
const translator = createBaseTranslator<Messages, NestedKey>({
|
|
41
|
-
...rest,
|
|
42
|
-
onError,
|
|
43
|
-
getMessageFallback,
|
|
44
|
-
messagesOrError: getMessagesOrError({
|
|
45
|
-
messages,
|
|
46
|
-
namespace,
|
|
47
|
-
onError
|
|
48
|
-
}) as Messages | IntlError
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
const originalRich = translator.rich;
|
|
52
|
-
|
|
53
|
-
function base(...args: Parameters<typeof translator>) {
|
|
54
|
-
return translator(...args);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Augment `t.rich` to return plain strings
|
|
58
|
-
base.rich = (
|
|
59
|
-
key: Parameters<typeof originalRich>[0],
|
|
60
|
-
/** Key value pairs for values to interpolate into the message. */
|
|
61
|
-
values: CoreRichTranslationValues,
|
|
62
|
-
formats?: Parameters<typeof originalRich>[2]
|
|
63
|
-
): string => {
|
|
64
|
-
// `chunks` is returned as a string when no React element
|
|
65
|
-
// is used, therefore it's safe to cast this type.
|
|
66
|
-
const result = originalRich(key, values as RichTranslationValues, formats);
|
|
67
|
-
|
|
68
|
-
// When only string chunks are provided to the parser, only strings should be returned here.
|
|
69
|
-
if (typeof result !== 'string') {
|
|
70
|
-
const error = new IntlError(
|
|
71
|
-
IntlErrorCode.FORMATTING_ERROR,
|
|
72
|
-
process.env.NODE_ENV !== 'production'
|
|
73
|
-
? "`createTranslator` only accepts functions for rich text formatting that receive and return strings.\n\nE.g. t.rich('rich', {b: (chunks) => `<b>${chunks}</b>`})"
|
|
74
|
-
: undefined
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
onError(error);
|
|
78
|
-
return getMessageFallback({error, key, namespace});
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return result;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
base.raw = translator.raw;
|
|
85
|
-
|
|
86
|
-
return base;
|
|
87
|
-
}
|
package/src/core/defaults.tsx
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import IntlError from './IntlError';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Contains defaults that are used for all entry points into the core.
|
|
5
|
-
* See also `InitializedIntlConfiguration`.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export function defaultGetMessageFallback(props: {
|
|
9
|
-
error: IntlError;
|
|
10
|
-
key: string;
|
|
11
|
-
namespace?: string;
|
|
12
|
-
}) {
|
|
13
|
-
return [props.namespace, props.key].filter((part) => part != null).join('.');
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function defaultOnError(error: IntlError) {
|
|
17
|
-
console.error(error);
|
|
18
|
-
}
|
package/src/core/index.tsx
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export type {default as AbstractIntlMessages} from './AbstractIntlMessages';
|
|
2
|
-
export type {
|
|
3
|
-
default as TranslationValues,
|
|
4
|
-
RichTranslationValues
|
|
5
|
-
} from './TranslationValues';
|
|
6
|
-
export type {default as Formats} from './Formats';
|
|
7
|
-
export type {default as DateTimeFormatOptions} from './DateTimeFormatOptions';
|
|
8
|
-
export type {default as NumberFormatOptions} from './NumberFormatOptions';
|
|
9
|
-
export {default as IntlError, IntlErrorCode} from './IntlError';
|
|
10
|
-
export {default as createTranslator} from './createTranslator';
|
|
11
|
-
export {default as createFormatter} from './createFormatter';
|
|
12
|
-
|
|
13
|
-
// TODO: Remove in next major version
|
|
14
|
-
export {default as createIntl} from './createIntl';
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* For the strictly typed messages to work we have to wrap the namespace into
|
|
3
|
-
* a mandatory prefix. See https://stackoverflow.com/a/71529575/343045
|
|
4
|
-
*/
|
|
5
|
-
export default function resolveNamespace(
|
|
6
|
-
namespace: string,
|
|
7
|
-
namespacePrefix: string
|
|
8
|
-
) {
|
|
9
|
-
return namespace === namespacePrefix
|
|
10
|
-
? undefined
|
|
11
|
-
: namespace.slice((namespacePrefix + '.').length);
|
|
12
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
type NestedValueOf<
|
|
2
|
-
ObjectType,
|
|
3
|
-
Property extends string
|
|
4
|
-
> = Property extends `${infer Key}.${infer Rest}`
|
|
5
|
-
? Key extends keyof ObjectType
|
|
6
|
-
? NestedValueOf<ObjectType[Key], Rest>
|
|
7
|
-
: never
|
|
8
|
-
: Property extends keyof ObjectType
|
|
9
|
-
? ObjectType[Property]
|
|
10
|
-
: never;
|
|
11
|
-
|
|
12
|
-
export default NestedValueOf;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import AbstractIntlMessages from './AbstractIntlMessages';
|
|
2
|
-
import IntlError, {IntlErrorCode} from './IntlError';
|
|
3
|
-
|
|
4
|
-
function validateMessagesSegment(
|
|
5
|
-
messages: AbstractIntlMessages,
|
|
6
|
-
invalidKeyLabels: Array<string>,
|
|
7
|
-
parentPath?: string
|
|
8
|
-
) {
|
|
9
|
-
Object.entries(messages).forEach(([key, messageOrMessages]) => {
|
|
10
|
-
if (key.includes('.')) {
|
|
11
|
-
let keyLabel = key;
|
|
12
|
-
if (parentPath) keyLabel += ` (at ${parentPath})`;
|
|
13
|
-
invalidKeyLabels.push(keyLabel);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
if (messageOrMessages != null && typeof messageOrMessages === 'object') {
|
|
17
|
-
validateMessagesSegment(
|
|
18
|
-
messageOrMessages,
|
|
19
|
-
invalidKeyLabels,
|
|
20
|
-
[parentPath, key].filter((part) => part != null).join('.')
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export default function validateMessages(
|
|
27
|
-
messages: AbstractIntlMessages,
|
|
28
|
-
onError: (error: IntlError) => void
|
|
29
|
-
) {
|
|
30
|
-
const invalidKeyLabels: Array<string> = [];
|
|
31
|
-
validateMessagesSegment(messages, invalidKeyLabels);
|
|
32
|
-
|
|
33
|
-
if (invalidKeyLabels.length > 0) {
|
|
34
|
-
onError(
|
|
35
|
-
new IntlError(
|
|
36
|
-
IntlErrorCode.INVALID_KEY,
|
|
37
|
-
process.env.NODE_ENV !== 'production'
|
|
38
|
-
? `Namespace keys can not contain the character "." as this is used to express nesting. Please remove it or replace it with another character.
|
|
39
|
-
|
|
40
|
-
Invalid ${
|
|
41
|
-
invalidKeyLabels.length === 1 ? 'key' : 'keys'
|
|
42
|
-
}: ${invalidKeyLabels.join(', ')}
|
|
43
|
-
|
|
44
|
-
If you're migrating from a flat structure, you can convert your messages as follows:
|
|
45
|
-
|
|
46
|
-
import {set} from "lodash";
|
|
47
|
-
|
|
48
|
-
const input = {
|
|
49
|
-
"one.one": "1.1",
|
|
50
|
-
"one.two": "1.2",
|
|
51
|
-
"two.one.one": "2.1.1"
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const output = Object.entries(input).reduce(
|
|
55
|
-
(acc, [key, value]) => set(acc, key, value),
|
|
56
|
-
{}
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
// Output:
|
|
60
|
-
//
|
|
61
|
-
// {
|
|
62
|
-
// "one": {
|
|
63
|
-
// "one": "1.1",
|
|
64
|
-
// "two": "1.2"
|
|
65
|
-
// },
|
|
66
|
-
// "two": {
|
|
67
|
-
// "one": {
|
|
68
|
-
// "one": "2.1.1"
|
|
69
|
-
// }
|
|
70
|
-
// }
|
|
71
|
-
// }
|
|
72
|
-
`
|
|
73
|
-
: undefined
|
|
74
|
-
)
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
}
|
package/src/index.tsx
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React, {ReactNode} from 'react';
|
|
2
|
-
import IntlConfig from '../core/IntlConfig';
|
|
3
|
-
import IntlContext from './IntlContext';
|
|
4
|
-
import getInitializedConfig from './getInitializedConfig';
|
|
5
|
-
|
|
6
|
-
type Props = IntlConfig & {
|
|
7
|
-
children: ReactNode;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export default function IntlProvider({children, ...props}: Props) {
|
|
11
|
-
return (
|
|
12
|
-
<IntlContext.Provider value={getInitializedConfig(props)}>
|
|
13
|
-
{children}
|
|
14
|
-
</IntlContext.Provider>
|
|
15
|
-
);
|
|
16
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import IntlConfig from '../core/IntlConfig';
|
|
2
|
-
import {defaultGetMessageFallback, defaultOnError} from '../core/defaults';
|
|
3
|
-
import validateMessages from '../core/validateMessages';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Enhances the incoming props with defaults.
|
|
7
|
-
*/
|
|
8
|
-
export default function getInitializedConfig<
|
|
9
|
-
// This is a generic to allow for stricter typing. E.g.
|
|
10
|
-
// the RSC integration always provides a `now` value.
|
|
11
|
-
Props extends Omit<IntlConfig, 'children'>
|
|
12
|
-
>({getMessageFallback, messages, onError, ...rest}: Props) {
|
|
13
|
-
const finalOnError = onError || defaultOnError;
|
|
14
|
-
const finalGetMessageFallback =
|
|
15
|
-
getMessageFallback || defaultGetMessageFallback;
|
|
16
|
-
|
|
17
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
18
|
-
if (messages) {
|
|
19
|
-
validateMessages(messages, finalOnError);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
...rest,
|
|
25
|
-
messages,
|
|
26
|
-
onError: finalOnError,
|
|
27
|
-
getMessageFallback: finalGetMessageFallback
|
|
28
|
-
};
|
|
29
|
-
}
|
package/src/react/index.tsx
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export {default as IntlProvider} from './IntlProvider';
|
|
2
|
-
export {default as useTranslations} from './useTranslations';
|
|
3
|
-
export {default as useLocale} from './useLocale';
|
|
4
|
-
export {default as useNow} from './useNow';
|
|
5
|
-
export {default as useTimeZone} from './useTimeZone';
|
|
6
|
-
export {default as useMessages} from './useMessages';
|
|
7
|
-
export {default as useFormatter} from './useFormatter';
|
|
8
|
-
|
|
9
|
-
// TODO: Remove in next major version
|
|
10
|
-
export {default as useIntl} from './useIntl';
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import {useMemo} from 'react';
|
|
2
|
-
import createFormatter from '../core/createFormatter';
|
|
3
|
-
import useIntlContext from './useIntlContext';
|
|
4
|
-
|
|
5
|
-
export default function useFormatter() {
|
|
6
|
-
const {formats, locale, now: globalNow, onError, timeZone} = useIntlContext();
|
|
7
|
-
|
|
8
|
-
return useMemo(
|
|
9
|
-
() =>
|
|
10
|
-
createFormatter({
|
|
11
|
-
formats,
|
|
12
|
-
locale,
|
|
13
|
-
now: globalNow,
|
|
14
|
-
onError,
|
|
15
|
-
timeZone
|
|
16
|
-
}),
|
|
17
|
-
[formats, globalNow, locale, onError, timeZone]
|
|
18
|
-
);
|
|
19
|
-
}
|
package/src/react/useIntl.tsx
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import {useMemo} from 'react';
|
|
2
|
-
import createIntl from '../core/createIntl';
|
|
3
|
-
import useIntlContext from './useIntlContext';
|
|
4
|
-
|
|
5
|
-
let hasWarned = false;
|
|
6
|
-
|
|
7
|
-
/** @deprecated Switch to `useFormatter` instead. */
|
|
8
|
-
export default function useIntl() {
|
|
9
|
-
const {formats, locale, now: globalNow, onError, timeZone} = useIntlContext();
|
|
10
|
-
|
|
11
|
-
if (!hasWarned) {
|
|
12
|
-
hasWarned = true;
|
|
13
|
-
console.warn(
|
|
14
|
-
'`useIntl()` is deprecated and will be removed in the next major version. Please switch to `useFormatter()`.'
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return useMemo(
|
|
19
|
-
() =>
|
|
20
|
-
createIntl({
|
|
21
|
-
formats,
|
|
22
|
-
locale,
|
|
23
|
-
now: globalNow,
|
|
24
|
-
onError,
|
|
25
|
-
timeZone
|
|
26
|
-
}),
|
|
27
|
-
[formats, globalNow, locale, onError, timeZone]
|
|
28
|
-
);
|
|
29
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import {useContext} from 'react';
|
|
2
|
-
import IntlContext from './IntlContext';
|
|
3
|
-
|
|
4
|
-
export default function useIntlContext() {
|
|
5
|
-
const context = useContext(IntlContext);
|
|
6
|
-
|
|
7
|
-
if (!context) {
|
|
8
|
-
throw new Error(
|
|
9
|
-
process.env.NODE_ENV !== 'production'
|
|
10
|
-
? 'No intl context found. Have you configured the provider?'
|
|
11
|
-
: undefined
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return context;
|
|
16
|
-
}
|
package/src/react/useLocale.tsx
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import {ReactElement, ReactNodeArray} from 'react';
|
|
2
|
-
import Formats from '../core/Formats';
|
|
3
|
-
import TranslationValues, {
|
|
4
|
-
RichTranslationValues
|
|
5
|
-
} from '../core/TranslationValues';
|
|
6
|
-
import MessageKeys from '../core/utils/MessageKeys';
|
|
7
|
-
import NamespaceKeys from '../core/utils/NamespaceKeys';
|
|
8
|
-
import NestedKeyOf from '../core/utils/NestedKeyOf';
|
|
9
|
-
import NestedValueOf from '../core/utils/NestedValueOf';
|
|
10
|
-
import useIntlContext from './useIntlContext';
|
|
11
|
-
import useTranslationsImpl from './useTranslationsImpl';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Translates messages from the given namespace by using the ICU syntax.
|
|
15
|
-
* See https://formatjs.io/docs/core-concepts/icu-syntax.
|
|
16
|
-
*
|
|
17
|
-
* If no namespace is provided, all available messages are returned.
|
|
18
|
-
* The namespace can also indicate nesting by using a dot
|
|
19
|
-
* (e.g. `namespace.Component`).
|
|
20
|
-
*/
|
|
21
|
-
export default function useTranslations<
|
|
22
|
-
NestedKey extends NamespaceKeys<
|
|
23
|
-
IntlMessages,
|
|
24
|
-
NestedKeyOf<IntlMessages>
|
|
25
|
-
> = never
|
|
26
|
-
>(
|
|
27
|
-
namespace?: NestedKey
|
|
28
|
-
): // Explicitly defining the return type is necessary as TypeScript would get it wrong
|
|
29
|
-
{
|
|
30
|
-
// Default invocation
|
|
31
|
-
<
|
|
32
|
-
TargetKey extends MessageKeys<
|
|
33
|
-
NestedValueOf<
|
|
34
|
-
{'!': IntlMessages},
|
|
35
|
-
[NestedKey] extends [never] ? '!' : `!.${NestedKey}`
|
|
36
|
-
>,
|
|
37
|
-
NestedKeyOf<
|
|
38
|
-
NestedValueOf<
|
|
39
|
-
{'!': IntlMessages},
|
|
40
|
-
[NestedKey] extends [never] ? '!' : `!.${NestedKey}`
|
|
41
|
-
>
|
|
42
|
-
>
|
|
43
|
-
>
|
|
44
|
-
>(
|
|
45
|
-
key: TargetKey,
|
|
46
|
-
values?: TranslationValues,
|
|
47
|
-
formats?: Partial<Formats>
|
|
48
|
-
): string;
|
|
49
|
-
|
|
50
|
-
// `rich`
|
|
51
|
-
rich<
|
|
52
|
-
TargetKey extends MessageKeys<
|
|
53
|
-
NestedValueOf<
|
|
54
|
-
{'!': IntlMessages},
|
|
55
|
-
[NestedKey] extends [never] ? '!' : `!.${NestedKey}`
|
|
56
|
-
>,
|
|
57
|
-
NestedKeyOf<
|
|
58
|
-
NestedValueOf<
|
|
59
|
-
{'!': IntlMessages},
|
|
60
|
-
[NestedKey] extends [never] ? '!' : `!.${NestedKey}`
|
|
61
|
-
>
|
|
62
|
-
>
|
|
63
|
-
>
|
|
64
|
-
>(
|
|
65
|
-
key: TargetKey,
|
|
66
|
-
values?: RichTranslationValues,
|
|
67
|
-
formats?: Partial<Formats>
|
|
68
|
-
): string | ReactElement | ReactNodeArray;
|
|
69
|
-
|
|
70
|
-
// `raw`
|
|
71
|
-
raw<
|
|
72
|
-
TargetKey extends MessageKeys<
|
|
73
|
-
NestedValueOf<
|
|
74
|
-
{'!': IntlMessages},
|
|
75
|
-
[NestedKey] extends [never] ? '!' : `!.${NestedKey}`
|
|
76
|
-
>,
|
|
77
|
-
NestedKeyOf<
|
|
78
|
-
NestedValueOf<
|
|
79
|
-
{'!': IntlMessages},
|
|
80
|
-
[NestedKey] extends [never] ? '!' : `!.${NestedKey}`
|
|
81
|
-
>
|
|
82
|
-
>
|
|
83
|
-
>
|
|
84
|
-
>(
|
|
85
|
-
key: TargetKey
|
|
86
|
-
): any;
|
|
87
|
-
} {
|
|
88
|
-
const context = useIntlContext();
|
|
89
|
-
const messages = context.messages as IntlMessages;
|
|
90
|
-
|
|
91
|
-
// We have to wrap the actual hook so the type inference for the optional
|
|
92
|
-
// namespace works correctly. See https://stackoverflow.com/a/71529575/343045
|
|
93
|
-
// The prefix ("!") is arbitrary.
|
|
94
|
-
return useTranslationsImpl<
|
|
95
|
-
{'!': IntlMessages},
|
|
96
|
-
[NestedKey] extends [never] ? '!' : `!.${NestedKey}`
|
|
97
|
-
>(
|
|
98
|
-
{'!': messages},
|
|
99
|
-
// @ts-ignore
|
|
100
|
-
namespace ? `!.${namespace}` : '!',
|
|
101
|
-
'!'
|
|
102
|
-
);
|
|
103
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
// eslint-disable-next-line import/no-named-as-default -- False positive
|
|
2
|
-
import IntlMessageFormat from 'intl-messageformat';
|
|
3
|
-
import {useMemo, useRef} from 'react';
|
|
4
|
-
import AbstractIntlMessages from '../core/AbstractIntlMessages';
|
|
5
|
-
import createBaseTranslator, {
|
|
6
|
-
getMessagesOrError
|
|
7
|
-
} from '../core/createBaseTranslator';
|
|
8
|
-
import resolveNamespace from '../core/resolveNamespace';
|
|
9
|
-
import NestedKeyOf from '../core/utils/NestedKeyOf';
|
|
10
|
-
import useIntlContext from './useIntlContext';
|
|
11
|
-
|
|
12
|
-
export default function useTranslationsImpl<
|
|
13
|
-
Messages extends AbstractIntlMessages,
|
|
14
|
-
NestedKey extends NestedKeyOf<Messages>
|
|
15
|
-
>(allMessages: Messages, namespace: NestedKey, namespacePrefix: string) {
|
|
16
|
-
const {
|
|
17
|
-
defaultTranslationValues,
|
|
18
|
-
formats: globalFormats,
|
|
19
|
-
getMessageFallback,
|
|
20
|
-
locale,
|
|
21
|
-
onError,
|
|
22
|
-
timeZone
|
|
23
|
-
} = useIntlContext();
|
|
24
|
-
|
|
25
|
-
// The `namespacePrefix` is part of the type system.
|
|
26
|
-
// See the comment in the hook invocation.
|
|
27
|
-
allMessages = allMessages[namespacePrefix] as Messages;
|
|
28
|
-
namespace = resolveNamespace(namespace, namespacePrefix) as NestedKey;
|
|
29
|
-
|
|
30
|
-
const cachedFormatsByLocaleRef = useRef<
|
|
31
|
-
Record<string, Record<string, IntlMessageFormat>>
|
|
32
|
-
>({});
|
|
33
|
-
|
|
34
|
-
const messagesOrError = useMemo(
|
|
35
|
-
() => getMessagesOrError({messages: allMessages, namespace, onError}),
|
|
36
|
-
[allMessages, namespace, onError]
|
|
37
|
-
);
|
|
38
|
-
|
|
39
|
-
const translate = useMemo(
|
|
40
|
-
() =>
|
|
41
|
-
createBaseTranslator({
|
|
42
|
-
cachedFormatsByLocale: cachedFormatsByLocaleRef.current,
|
|
43
|
-
getMessageFallback,
|
|
44
|
-
messagesOrError,
|
|
45
|
-
defaultTranslationValues,
|
|
46
|
-
namespace,
|
|
47
|
-
onError,
|
|
48
|
-
formats: globalFormats,
|
|
49
|
-
locale,
|
|
50
|
-
timeZone
|
|
51
|
-
}),
|
|
52
|
-
[
|
|
53
|
-
getMessageFallback,
|
|
54
|
-
messagesOrError,
|
|
55
|
-
defaultTranslationValues,
|
|
56
|
-
namespace,
|
|
57
|
-
onError,
|
|
58
|
-
globalFormats,
|
|
59
|
-
locale,
|
|
60
|
-
timeZone
|
|
61
|
-
]
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
return translate;
|
|
65
|
-
}
|