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.
@@ -1,11 +1,8 @@
1
1
  import React from "react";
2
- interface I18nTextProps {
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 I18nKeylessTextWithReplacement: React.FC<I18nKeylessTextWithReplacementProps>;
7
+ export declare const I18nKeylessText: React.FC<I18nKeylessTextProps>;
11
8
  export {};
@@ -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 ? children : translations[children] || children;
14
- return _jsx(React.Fragment, { children: translatedText }, currentLanguage);
15
- };
16
- export const I18nKeylessTextWithReplacement = ({ children, replace, }) => {
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: replacedText }, currentLanguage);
29
+ return _jsx(React.Fragment, { children: finalText }, currentLanguage);
40
30
  };
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { I18nKeylessText, I18nKeylessTextWithReplacement } from "./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, I18nKeylessTextWithReplacement } from "./I18nKeylessText";
1
+ export { I18nKeylessText } from "./I18nKeylessText";
2
2
  export { init, getTranslation, setCurrentLanguage, useCurrentLanguage, clearI18nKeylessStorage, fetchAllTranslations, } from "./store";
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "i18n-keyless-react",
3
3
  "private": false,
4
- "version": "1.5.3",
4
+ "version": "1.6.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",
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);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "i18n-keyless-react",
3
3
  "private": false,
4
- "version": "1.5.3",
4
+ "version": "1.6.0",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",