i18n-keyless-react 1.5.3 → 1.6.0
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/dist/I18nKeylessText.d.ts +3 -6
- package/dist/I18nKeylessText.js +8 -18
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/package.json +1 -1
- package/dist/store.d.ts +1 -1
- package/dist/store.js +6 -5
- package/package.json +1 -1
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
interface
|
|
3
|
-
children: string;
|
|
4
|
-
}
|
|
5
|
-
export declare const I18nKeylessText: React.FC<I18nTextProps>;
|
|
6
|
-
interface I18nKeylessTextWithReplacementProps {
|
|
2
|
+
interface I18nKeylessTextProps {
|
|
7
3
|
children: string;
|
|
8
4
|
replace?: Record<string, string>;
|
|
5
|
+
context?: string;
|
|
9
6
|
}
|
|
10
|
-
export declare const
|
|
7
|
+
export declare const I18nKeylessText: React.FC<I18nKeylessTextProps>;
|
|
11
8
|
export {};
|
package/dist/I18nKeylessText.js
CHANGED
|
@@ -1,29 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useEffect, useMemo } from "react";
|
|
3
3
|
import { useI18nKeyless } from "./store";
|
|
4
|
-
export const I18nKeylessText = ({ children }) => {
|
|
4
|
+
export const I18nKeylessText = ({ children, replace, context }) => {
|
|
5
5
|
const translations = useI18nKeyless((store) => store.translations);
|
|
6
6
|
const currentLanguage = useI18nKeyless((store) => store.currentLanguage);
|
|
7
7
|
const config = useI18nKeyless((store) => store.config);
|
|
8
8
|
const translateKey = useI18nKeyless((store) => store.translateKey);
|
|
9
9
|
useEffect(() => {
|
|
10
|
-
translateKey(children);
|
|
10
|
+
translateKey(children, context);
|
|
11
11
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
12
|
-
}, [children, currentLanguage]);
|
|
13
|
-
const translatedText = currentLanguage === config.languages.primary
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const translations = useI18nKeyless((store) => store.translations);
|
|
18
|
-
const currentLanguage = useI18nKeyless((store) => store.currentLanguage);
|
|
19
|
-
const config = useI18nKeyless((store) => store.config);
|
|
20
|
-
const translateKey = useI18nKeyless((store) => store.translateKey);
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
translateKey(children);
|
|
23
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
24
|
-
}, [children, currentLanguage]);
|
|
25
|
-
const translatedText = currentLanguage === config.languages.primary ? children : translations[children] || children;
|
|
26
|
-
const replacedText = useMemo(() => {
|
|
12
|
+
}, [children, currentLanguage, context]);
|
|
13
|
+
const translatedText = currentLanguage === config.languages.primary
|
|
14
|
+
? children
|
|
15
|
+
: translations[context ? `${children}__${context}` : children] || children;
|
|
16
|
+
const finalText = useMemo(() => {
|
|
27
17
|
if (!replace) {
|
|
28
18
|
return translatedText;
|
|
29
19
|
}
|
|
@@ -36,5 +26,5 @@ export const I18nKeylessTextWithReplacement = ({ children, replace, }) => {
|
|
|
36
26
|
// Replace all occurrences in a single pass
|
|
37
27
|
return translatedText.replace(regex, (matched) => replace[matched] || matched);
|
|
38
28
|
}, [translatedText, replace]);
|
|
39
|
-
return _jsx(React.Fragment, { children:
|
|
29
|
+
return _jsx(React.Fragment, { children: finalText }, currentLanguage);
|
|
40
30
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { I18nKeylessText
|
|
1
|
+
export { I18nKeylessText } from "./I18nKeylessText";
|
|
2
2
|
export { init, getTranslation, setCurrentLanguage, useCurrentLanguage, clearI18nKeylessStorage, fetchAllTranslations, } from "./store";
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { I18nKeylessText
|
|
1
|
+
export { I18nKeylessText } from "./I18nKeylessText";
|
|
2
2
|
export { init, getTranslation, setCurrentLanguage, useCurrentLanguage, clearI18nKeylessStorage, fetchAllTranslations, } from "./store";
|
package/dist/package.json
CHANGED
package/dist/store.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { I18nConfig, Lang, TranslationStore } from "i18n-keyless-core";
|
|
|
2
2
|
export declare const useI18nKeyless: import("zustand").UseBoundStore<import("zustand").StoreApi<TranslationStore>>;
|
|
3
3
|
export declare function init(config: I18nConfig): Promise<void>;
|
|
4
4
|
export declare function useCurrentLanguage(): Lang | null;
|
|
5
|
-
export declare function getTranslation(key: string): string | undefined;
|
|
5
|
+
export declare function getTranslation(key: string, context?: string): string | undefined;
|
|
6
6
|
export declare function setCurrentLanguage(lang: I18nConfig["languages"]["supported"][number]): void;
|
|
7
7
|
export declare function fetchAllTranslations(targetLanguage: Lang): Promise<void>;
|
|
8
8
|
export declare function clearI18nKeylessStorage(): Promise<void>;
|
package/dist/store.js
CHANGED
|
@@ -100,7 +100,7 @@ export const useI18nKeyless = create((set, get) => ({
|
|
|
100
100
|
set({ lastRefresh: lastRefresh });
|
|
101
101
|
}
|
|
102
102
|
},
|
|
103
|
-
getTranslation: (text) => {
|
|
103
|
+
getTranslation: (text, context) => {
|
|
104
104
|
const currentLanguage = get().currentLanguage;
|
|
105
105
|
const config = get().config;
|
|
106
106
|
if (currentLanguage === config.languages.primary) {
|
|
@@ -108,7 +108,7 @@ export const useI18nKeyless = create((set, get) => ({
|
|
|
108
108
|
}
|
|
109
109
|
const translation = get().translations[text];
|
|
110
110
|
if (!translation) {
|
|
111
|
-
get().translateKey(text);
|
|
111
|
+
get().translateKey(text, context);
|
|
112
112
|
}
|
|
113
113
|
return translation || text;
|
|
114
114
|
},
|
|
@@ -121,7 +121,7 @@ export const useI18nKeyless = create((set, get) => ({
|
|
|
121
121
|
}
|
|
122
122
|
setItem(storeKeys.translations, JSON.stringify(nextTranslations), storage);
|
|
123
123
|
},
|
|
124
|
-
translateKey: (key) => {
|
|
124
|
+
translateKey: (key, context) => {
|
|
125
125
|
// if (key.length > 280) {
|
|
126
126
|
// console.error("i18n-keyless: Key length exceeds 280 characters limit:", key);
|
|
127
127
|
// return;
|
|
@@ -151,6 +151,7 @@ export const useI18nKeyless = create((set, get) => ({
|
|
|
151
151
|
else {
|
|
152
152
|
const body = {
|
|
153
153
|
key,
|
|
154
|
+
context,
|
|
154
155
|
languages: config.languages.supported,
|
|
155
156
|
primaryLanguage: config.languages.primary,
|
|
156
157
|
};
|
|
@@ -234,8 +235,8 @@ export function useCurrentLanguage() {
|
|
|
234
235
|
const currentLanguage = useI18nKeyless((state) => state.currentLanguage);
|
|
235
236
|
return currentLanguage;
|
|
236
237
|
}
|
|
237
|
-
export function getTranslation(key) {
|
|
238
|
-
return useI18nKeyless.getState().getTranslation(key);
|
|
238
|
+
export function getTranslation(key, context) {
|
|
239
|
+
return useI18nKeyless.getState().getTranslation(key, context);
|
|
239
240
|
}
|
|
240
241
|
export function setCurrentLanguage(lang) {
|
|
241
242
|
return useI18nKeyless.getState().setLanguage(lang);
|