@hua-labs/i18n-core 2.0.0 → 2.0.4

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.
Files changed (78) hide show
  1. package/README.md +57 -597
  2. package/dist/chunk-F4PDBJLO.mjs +973 -0
  3. package/dist/chunk-F4PDBJLO.mjs.map +1 -0
  4. package/dist/index.d.mts +249 -0
  5. package/dist/index.d.ts +117 -30
  6. package/dist/index.js +1818 -177
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.mjs +845 -0
  9. package/dist/index.mjs.map +1 -0
  10. package/dist/server-4TeBq6hp.d.mts +367 -0
  11. package/dist/server-4TeBq6hp.d.ts +367 -0
  12. package/dist/server.d.mts +1 -0
  13. package/dist/server.d.ts +1 -0
  14. package/dist/server.js +977 -0
  15. package/dist/server.js.map +1 -0
  16. package/dist/server.mjs +3 -0
  17. package/dist/server.mjs.map +1 -0
  18. package/package.json +42 -19
  19. package/src/__tests__/debug-tools.test.ts +359 -0
  20. package/src/__tests__/default-translations.test.ts +179 -0
  21. package/src/__tests__/i18n-resource.test.ts +137 -0
  22. package/src/__tests__/lazy-loader.test.ts +109 -0
  23. package/src/__tests__/missing-key-overlay.test.tsx +339 -0
  24. package/src/__tests__/translator-factory.test.ts +120 -0
  25. package/src/__tests__/translator.test.ts +442 -0
  26. package/src/__tests__/types.test.ts +211 -0
  27. package/src/__tests__/useI18n.test.tsx +181 -0
  28. package/src/__tests__/useTranslation.test.tsx +110 -0
  29. package/src/components/MissingKeyOverlay.tsx +1 -1
  30. package/src/core/lazy-loader.ts +2 -2
  31. package/src/core/translator.tsx +151 -62
  32. package/src/hooks/useI18n.tsx +96 -115
  33. package/src/hooks/useTranslation.tsx +12 -10
  34. package/src/index.ts +102 -5
  35. package/src/server.ts +9 -0
  36. package/src/types/index.ts +67 -12
  37. package/LICENSE +0 -21
  38. package/dist/components/MissingKeyOverlay.d.ts +0 -33
  39. package/dist/components/MissingKeyOverlay.d.ts.map +0 -1
  40. package/dist/components/MissingKeyOverlay.js +0 -138
  41. package/dist/components/MissingKeyOverlay.js.map +0 -1
  42. package/dist/core/debug-tools.d.ts +0 -37
  43. package/dist/core/debug-tools.d.ts.map +0 -1
  44. package/dist/core/debug-tools.js +0 -241
  45. package/dist/core/debug-tools.js.map +0 -1
  46. package/dist/core/i18n-resource.d.ts +0 -59
  47. package/dist/core/i18n-resource.d.ts.map +0 -1
  48. package/dist/core/i18n-resource.js +0 -153
  49. package/dist/core/i18n-resource.js.map +0 -1
  50. package/dist/core/lazy-loader.d.ts +0 -82
  51. package/dist/core/lazy-loader.d.ts.map +0 -1
  52. package/dist/core/lazy-loader.js +0 -193
  53. package/dist/core/lazy-loader.js.map +0 -1
  54. package/dist/core/translator-factory.d.ts +0 -50
  55. package/dist/core/translator-factory.d.ts.map +0 -1
  56. package/dist/core/translator-factory.js +0 -117
  57. package/dist/core/translator-factory.js.map +0 -1
  58. package/dist/core/translator.d.ts +0 -202
  59. package/dist/core/translator.d.ts.map +0 -1
  60. package/dist/core/translator.js +0 -912
  61. package/dist/core/translator.js.map +0 -1
  62. package/dist/hooks/useI18n.d.ts +0 -39
  63. package/dist/hooks/useI18n.d.ts.map +0 -1
  64. package/dist/hooks/useI18n.js +0 -531
  65. package/dist/hooks/useI18n.js.map +0 -1
  66. package/dist/hooks/useTranslation.d.ts +0 -55
  67. package/dist/hooks/useTranslation.d.ts.map +0 -1
  68. package/dist/hooks/useTranslation.js +0 -58
  69. package/dist/hooks/useTranslation.js.map +0 -1
  70. package/dist/index.d.ts.map +0 -1
  71. package/dist/types/index.d.ts +0 -162
  72. package/dist/types/index.d.ts.map +0 -1
  73. package/dist/types/index.js +0 -191
  74. package/dist/types/index.js.map +0 -1
  75. package/dist/utils/default-translations.d.ts +0 -20
  76. package/dist/utils/default-translations.d.ts.map +0 -1
  77. package/dist/utils/default-translations.js +0 -123
  78. package/dist/utils/default-translations.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,14 +1,85 @@
1
+ import React$1 from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+ import { I as I18nConfig, a as I18nContextType, L as LanguageConfig, R as ResolveStringKey, T as TranslationParams, b as ResolvePluralKey, c as ResolveArrayKey, d as TranslationError } from './server-4TeBq6hp.js';
4
+ export { P as PluralCategory, e as PluralValue, f as Translator, g as TypedTranslationKeys, s as serverTranslate, h as ssrTranslate } from './server-4TeBq6hp.js';
5
+
6
+ /**
7
+ * I18n Provider 컴포넌트
8
+ */
9
+ declare function I18nProvider({ config, children }: {
10
+ config: I18nConfig & {
11
+ autoLanguageSync?: boolean;
12
+ };
13
+ children: React.ReactNode;
14
+ }): react_jsx_runtime.JSX.Element;
15
+ /**
16
+ * I18n 훅
17
+ */
18
+ declare function useI18n(): I18nContextType;
19
+
20
+ /**
21
+ * 간단한 번역 훅 (원본 SDK와 호환)
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * import { useTranslation } from '@hua-labs/i18n-core';
26
+ *
27
+ * function MyComponent() {
28
+ * const { t, currentLanguage, setLanguage, isLoading, error } = useTranslation();
29
+ *
30
+ * return (
31
+ * <div>
32
+ * <h1>{t('welcome')}</h1>
33
+ * <p>Current language: {currentLanguage}</p>
34
+ * <button onClick={() => setLanguage('en')}>Switch to English</button>
35
+ * </div>
36
+ * );
37
+ * }
38
+ * ```
39
+ */
40
+ declare function useTranslation(): {
41
+ t: (key: ResolveStringKey, paramsOrLang?: TranslationParams | string, language?: string) => string;
42
+ tPlural: (key: ResolvePluralKey, count: number, params?: Record<string, unknown>, language?: string) => string;
43
+ tArray: (key: ResolveArrayKey, language?: string) => string[];
44
+ currentLanguage: string;
45
+ setLanguage: (language: string) => void | Promise<void>;
46
+ getRawValue: (key: string, language?: string) => unknown;
47
+ isLoading: boolean;
48
+ error: TranslationError | null;
49
+ supportedLanguages: LanguageConfig[];
50
+ debug: {
51
+ getCurrentLanguage: () => string;
52
+ getSupportedLanguages: () => string[];
53
+ getLoadedNamespaces: () => string[];
54
+ getAllTranslations: () => Record<string, Record<string, unknown>>;
55
+ isReady: () => boolean;
56
+ getInitializationError: () => TranslationError | null;
57
+ clearCache: () => void;
58
+ reloadTranslations: () => Promise<void>;
59
+ getCacheStats: () => {
60
+ size: number;
61
+ hits: number;
62
+ misses: number;
63
+ };
64
+ };
65
+ isInitialized: boolean;
66
+ };
67
+ /**
68
+ * 언어 변경 전용 훅
69
+ */
70
+ declare function useLanguageChange(): {
71
+ currentLanguage: string;
72
+ changeLanguage: (language: string) => void;
73
+ supportedLanguages: LanguageConfig[];
74
+ };
75
+
1
76
  /**
2
77
  * @hua-labs/i18n-core - 핵심 기능 전용 엔트리포인트
3
78
  *
4
79
  * 이 모듈은 기본적인 번역 기능만 필요한 경우 사용합니다.
5
80
  * 플러그인, 고급 기능, 디버깅 도구 없이 순수한 번역 기능만 제공합니다.
6
81
  */
7
- import React from 'react';
8
- import { I18nProvider, useI18n } from './hooks/useI18n';
9
- import { useTranslation, useLanguageChange } from './hooks/useTranslation';
10
- import { Translator, ssrTranslate, serverTranslate } from './core/translator';
11
- import { I18nConfig } from './types';
82
+
12
83
  declare global {
13
84
  interface Window {
14
85
  __I18N_DEBUG_MODE__?: boolean;
@@ -75,7 +146,7 @@ declare global {
75
146
  * }
76
147
  * ```
77
148
  */
78
- export declare function createCoreI18n(options?: {
149
+ declare function createCoreI18n(options?: {
79
150
  defaultLanguage?: string;
80
151
  fallbackLanguage?: string;
81
152
  namespaces?: string[];
@@ -98,65 +169,81 @@ export declare function createCoreI18n(options?: {
98
169
  * 형식: { [language]: { [namespace]: { [key]: value } } }
99
170
  */
100
171
  initialTranslations?: Record<string, Record<string, Record<string, string>>>;
172
+ /**
173
+ * 지원 언어 목록 (LanguageConfig 배열 또는 언어 코드 문자열 배열)
174
+ * 기본값: ['ko', 'en']
175
+ */
176
+ supportedLanguages?: Array<{
177
+ code: string;
178
+ name: string;
179
+ nativeName: string;
180
+ }> | string[];
101
181
  /**
102
182
  * 자동 언어 동기화 활성화 여부
103
183
  * 기본값: false (Zustand 어댑터 등 외부에서 직접 처리하는 경우)
104
184
  */
105
185
  autoLanguageSync?: boolean;
186
+ /**
187
+ * 서버사이드 렌더링 시 사용할 기본 URL
188
+ * 환경 변수보다 우선 적용됨
189
+ */
190
+ baseUrl?: string;
191
+ /**
192
+ * 로컬 개발 환경 fallback URL
193
+ * 기본값: 'http://localhost:3010'
194
+ */
195
+ localFallbackBaseUrl?: string;
106
196
  }): ({ children }: {
107
- children: React.ReactNode;
108
- }) => React.FunctionComponentElement<{
197
+ children: React$1.ReactNode;
198
+ }) => React$1.FunctionComponentElement<{
109
199
  config: I18nConfig & {
110
200
  autoLanguageSync?: boolean;
111
201
  };
112
- children: React.ReactNode;
202
+ children: React$1.ReactNode;
113
203
  }>;
114
204
  /**
115
205
  * 가장 기본적인 Provider (최소한의 설정)
116
206
  */
117
- export declare function CoreProvider({ children }: {
118
- children: React.ReactNode;
119
- }): React.FunctionComponentElement<{
207
+ declare function CoreProvider({ children }: {
208
+ children: React$1.ReactNode;
209
+ }): React$1.FunctionComponentElement<{
120
210
  config: I18nConfig & {
121
211
  autoLanguageSync?: boolean;
122
212
  };
123
- children: React.ReactNode;
213
+ children: React$1.ReactNode;
124
214
  }>;
125
215
  /**
126
216
  * 언어별 Provider (언어만 지정)
127
217
  */
128
- export declare function createLanguageProvider(language: string): ({ children }: {
129
- children: React.ReactNode;
130
- }) => React.FunctionComponentElement<{
218
+ declare function createLanguageProvider(language: string): ({ children }: {
219
+ children: React$1.ReactNode;
220
+ }) => React$1.FunctionComponentElement<{
131
221
  config: I18nConfig & {
132
222
  autoLanguageSync?: boolean;
133
223
  };
134
- children: React.ReactNode;
224
+ children: React$1.ReactNode;
135
225
  }>;
136
226
  /**
137
227
  * 네임스페이스별 Provider (네임스페이스만 지정)
138
228
  */
139
- export declare function createNamespaceProvider(namespaces: string[]): ({ children }: {
140
- children: React.ReactNode;
141
- }) => React.FunctionComponentElement<{
229
+ declare function createNamespaceProvider(namespaces: string[]): ({ children }: {
230
+ children: React$1.ReactNode;
231
+ }) => React$1.FunctionComponentElement<{
142
232
  config: I18nConfig & {
143
233
  autoLanguageSync?: boolean;
144
234
  };
145
- children: React.ReactNode;
235
+ children: React$1.ReactNode;
146
236
  }>;
147
237
  /**
148
238
  * 커스텀 로더 Provider (사용자 정의 번역 로더 사용)
149
239
  */
150
- export declare function createCustomLoaderProvider(loadTranslations: (language: string, namespace: string) => Promise<Record<string, string>>): ({ children }: {
151
- children: React.ReactNode;
152
- }) => React.FunctionComponentElement<{
240
+ declare function createCustomLoaderProvider(loadTranslations: (language: string, namespace: string) => Promise<Record<string, string>>): ({ children }: {
241
+ children: React$1.ReactNode;
242
+ }) => React$1.FunctionComponentElement<{
153
243
  config: I18nConfig & {
154
244
  autoLanguageSync?: boolean;
155
245
  };
156
- children: React.ReactNode;
246
+ children: React$1.ReactNode;
157
247
  }>;
158
- export { useTranslation, useLanguageChange, useI18n };
159
- export { I18nProvider };
160
- export { Translator, ssrTranslate, serverTranslate };
161
- export type { I18nConfig };
162
- //# sourceMappingURL=index.d.ts.map
248
+
249
+ export { CoreProvider, I18nConfig, I18nContextType, I18nProvider, ResolveArrayKey, ResolvePluralKey, ResolveStringKey, TranslationParams, createCoreI18n, createCustomLoaderProvider, createLanguageProvider, createNamespaceProvider, useI18n, useLanguageChange, useTranslation };