@hua-labs/i18n-core 1.0.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.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +636 -0
  3. package/dist/components/MissingKeyOverlay.d.ts +33 -0
  4. package/dist/components/MissingKeyOverlay.d.ts.map +1 -0
  5. package/dist/components/MissingKeyOverlay.js +138 -0
  6. package/dist/components/MissingKeyOverlay.js.map +1 -0
  7. package/dist/core/debug-tools.d.ts +37 -0
  8. package/dist/core/debug-tools.d.ts.map +1 -0
  9. package/dist/core/debug-tools.js +241 -0
  10. package/dist/core/debug-tools.js.map +1 -0
  11. package/dist/core/i18n-resource.d.ts +59 -0
  12. package/dist/core/i18n-resource.d.ts.map +1 -0
  13. package/dist/core/i18n-resource.js +153 -0
  14. package/dist/core/i18n-resource.js.map +1 -0
  15. package/dist/core/lazy-loader.d.ts +82 -0
  16. package/dist/core/lazy-loader.d.ts.map +1 -0
  17. package/dist/core/lazy-loader.js +193 -0
  18. package/dist/core/lazy-loader.js.map +1 -0
  19. package/dist/core/translator-factory.d.ts +50 -0
  20. package/dist/core/translator-factory.d.ts.map +1 -0
  21. package/dist/core/translator-factory.js +117 -0
  22. package/dist/core/translator-factory.js.map +1 -0
  23. package/dist/core/translator.d.ts +202 -0
  24. package/dist/core/translator.d.ts.map +1 -0
  25. package/dist/core/translator.js +912 -0
  26. package/dist/core/translator.js.map +1 -0
  27. package/dist/hooks/useI18n.d.ts +39 -0
  28. package/dist/hooks/useI18n.d.ts.map +1 -0
  29. package/dist/hooks/useI18n.js +531 -0
  30. package/dist/hooks/useI18n.js.map +1 -0
  31. package/dist/hooks/useTranslation.d.ts +55 -0
  32. package/dist/hooks/useTranslation.d.ts.map +1 -0
  33. package/dist/hooks/useTranslation.js +58 -0
  34. package/dist/hooks/useTranslation.js.map +1 -0
  35. package/dist/index.d.ts +162 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +191 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/types/index.d.ts +162 -0
  40. package/dist/types/index.d.ts.map +1 -0
  41. package/dist/types/index.js +191 -0
  42. package/dist/types/index.js.map +1 -0
  43. package/dist/utils/default-translations.d.ts +20 -0
  44. package/dist/utils/default-translations.d.ts.map +1 -0
  45. package/dist/utils/default-translations.js +123 -0
  46. package/dist/utils/default-translations.js.map +1 -0
  47. package/package.json +60 -0
  48. package/src/components/MissingKeyOverlay.tsx +223 -0
  49. package/src/core/debug-tools.ts +298 -0
  50. package/src/core/i18n-resource.ts +180 -0
  51. package/src/core/lazy-loader.ts +255 -0
  52. package/src/core/translator-factory.ts +137 -0
  53. package/src/core/translator.tsx +1194 -0
  54. package/src/hooks/useI18n.tsx +595 -0
  55. package/src/hooks/useTranslation.tsx +62 -0
  56. package/src/index.ts +298 -0
  57. package/src/types/index.ts +443 -0
  58. package/src/utils/default-translations.ts +129 -0
@@ -0,0 +1,162 @@
1
+ export interface TranslationNamespace {
2
+ [key: string]: string | TranslationNamespace;
3
+ }
4
+ export interface TranslationData {
5
+ [namespace: string]: TranslationNamespace;
6
+ }
7
+ export interface LanguageConfig {
8
+ code: string;
9
+ name: string;
10
+ nativeName: string;
11
+ tone?: 'emotional' | 'encouraging' | 'calm' | 'gentle' | 'formal' | 'technical' | 'informal';
12
+ formality?: 'informal' | 'casual' | 'formal' | 'polite';
13
+ }
14
+ export interface I18nConfig {
15
+ defaultLanguage: string;
16
+ fallbackLanguage?: string;
17
+ supportedLanguages: LanguageConfig[];
18
+ namespaces?: string[];
19
+ loadTranslations: (language: string, namespace: string) => Promise<TranslationNamespace>;
20
+ initialTranslations?: Record<string, Record<string, TranslationNamespace>>;
21
+ debug?: boolean;
22
+ missingKeyHandler?: (key: string, language: string, namespace: string) => string;
23
+ errorHandler?: (error: Error, language: string, namespace: string) => void;
24
+ cacheOptions?: {
25
+ maxSize?: number;
26
+ ttl?: number;
27
+ };
28
+ performanceOptions?: {
29
+ preloadAll?: boolean;
30
+ lazyLoad?: boolean;
31
+ };
32
+ errorHandling?: {
33
+ recoveryStrategy?: ErrorRecoveryStrategy;
34
+ logging?: ErrorLoggingConfig;
35
+ userFriendlyMessages?: boolean;
36
+ suppressErrors?: boolean;
37
+ };
38
+ autoLanguageSync?: boolean;
39
+ }
40
+ export interface TranslationError extends Error {
41
+ code: 'MISSING_KEY' | 'LOAD_FAILED' | 'INVALID_KEY' | 'NETWORK_ERROR' | 'INITIALIZATION_ERROR' | 'VALIDATION_ERROR' | 'CACHE_ERROR' | 'FALLBACK_LOAD_FAILED' | 'INITIALIZATION_FAILED' | 'RETRY_FAILED';
42
+ language?: string;
43
+ namespace?: string;
44
+ key?: string;
45
+ originalError?: Error;
46
+ retryCount?: number;
47
+ maxRetries?: number;
48
+ timestamp: number;
49
+ context?: Record<string, unknown>;
50
+ }
51
+ export interface ErrorRecoveryStrategy {
52
+ maxRetries: number;
53
+ retryDelay: number;
54
+ backoffMultiplier: number;
55
+ shouldRetry: (error: TranslationError) => boolean;
56
+ onRetry: (error: TranslationError, attempt: number) => void;
57
+ onMaxRetriesExceeded: (error: TranslationError) => void;
58
+ }
59
+ export interface ErrorLoggingConfig {
60
+ enabled: boolean;
61
+ level: 'error' | 'warn' | 'info' | 'debug';
62
+ includeStack: boolean;
63
+ includeContext: boolean;
64
+ customLogger?: (error: TranslationError) => void;
65
+ }
66
+ export interface UserFriendlyError {
67
+ code: string;
68
+ message: string;
69
+ suggestion?: string;
70
+ action?: string;
71
+ severity: 'low' | 'medium' | 'high' | 'critical';
72
+ }
73
+ export interface CacheEntry {
74
+ data: TranslationNamespace;
75
+ timestamp: number;
76
+ ttl: number;
77
+ }
78
+ export interface LoadingState {
79
+ isLoading: boolean;
80
+ error: TranslationError | null;
81
+ progress?: {
82
+ loaded: number;
83
+ total: number;
84
+ };
85
+ }
86
+ export interface TranslationResult {
87
+ text: string;
88
+ language: string;
89
+ namespace: string;
90
+ key: string;
91
+ isFallback: boolean;
92
+ cacheHit: boolean;
93
+ }
94
+ export interface I18nContextType {
95
+ currentLanguage: string;
96
+ setLanguage: (language: string) => void;
97
+ t: (key: string, language?: string) => string;
98
+ tWithParams: (key: string, params?: TranslationParams, language?: string) => string;
99
+ tAsync: (key: string, params?: TranslationParams) => Promise<string>;
100
+ tSync: (key: string, namespace?: string, params?: TranslationParams) => string;
101
+ getRawValue: (key: string, language?: string) => unknown;
102
+ isLoading: boolean;
103
+ error: TranslationError | null;
104
+ supportedLanguages: LanguageConfig[];
105
+ isInitialized: boolean;
106
+ debug: {
107
+ getCurrentLanguage: () => string;
108
+ getSupportedLanguages: () => string[];
109
+ getLoadedNamespaces: () => string[];
110
+ getAllTranslations: () => Record<string, Record<string, unknown>>;
111
+ isReady: () => boolean;
112
+ getInitializationError: () => TranslationError | null;
113
+ clearCache: () => void;
114
+ reloadTranslations: () => Promise<void>;
115
+ getCacheStats: () => {
116
+ size: number;
117
+ hits: number;
118
+ misses: number;
119
+ };
120
+ };
121
+ }
122
+ export interface TranslationParams {
123
+ [key: string]: string | number;
124
+ }
125
+ export type TranslationKey<T> = T extends Record<string, unknown> ? {
126
+ [K in keyof T]: T[K] extends string ? K : T[K] extends Record<string, unknown> ? `${K & string}.${TranslationKey<T[K]> & string}` : never;
127
+ }[keyof T] : never;
128
+ export interface TypedI18nContextType<T extends TranslationData> extends Omit<I18nContextType, 't' | 'tWithParams' | 'tSync'> {
129
+ t: <K extends TranslationKey<T>>(key: K, language?: string) => string;
130
+ tWithParams: <K extends TranslationKey<T>>(key: K, params?: TranslationParams, language?: string) => string;
131
+ tSync: <K extends TranslationKey<T>>(key: K, namespace?: string, params?: TranslationParams) => string;
132
+ }
133
+ export type SimpleTranslationKey = string;
134
+ export type TranslationKeyLegacy<T extends Record<string, unknown>, D extends number = 3> = [
135
+ D
136
+ ] extends [never] ? never : T extends Record<string, unknown> ? {
137
+ [K in keyof T]: T[K] extends string ? K : T[K] extends Record<string, unknown> ? `${K & string}.${TranslationKeyLegacy<T[K], Prev<D>> & string}` : never;
138
+ }[keyof T] : never;
139
+ type Prev<T extends number> = T extends 0 ? never : T extends 1 ? 0 : T extends 2 ? 1 : T extends 3 ? 2 : never;
140
+ export type ExtractTranslationKeys<T> = T extends Record<string, unknown> ? {
141
+ [K in keyof T]: T[K] extends string ? K : T[K] extends Record<string, unknown> ? `${K & string}.${ExtractTranslationKeys<T[K]> & string}` : never;
142
+ }[keyof T] : never;
143
+ export type NamespaceKeys<T extends TranslationData, N extends keyof T> = ExtractTranslationKeys<T[N]>;
144
+ export declare const createTranslationKey: <T extends TranslationData, N extends keyof T, K extends NamespaceKeys<T, N>>(namespace: N, key: K) => `${N & string}.${K & string}`;
145
+ export declare function isTranslationNamespace(value: unknown): value is TranslationNamespace;
146
+ export declare function isLanguageConfig(value: unknown): value is LanguageConfig;
147
+ export declare function isTranslationError(value: unknown): value is TranslationError;
148
+ export declare function validateI18nConfig(config: unknown): config is I18nConfig;
149
+ export declare function createTranslationError(code: TranslationError['code'], message: string, originalError?: Error, context?: {
150
+ language?: string;
151
+ namespace?: string;
152
+ key?: string;
153
+ retryCount?: number;
154
+ maxRetries?: number;
155
+ }): TranslationError;
156
+ export declare function createUserFriendlyError(error: TranslationError): UserFriendlyError;
157
+ export declare function isRecoverableError(error: TranslationError): boolean;
158
+ export declare const defaultErrorRecoveryStrategy: ErrorRecoveryStrategy;
159
+ export declare const defaultErrorLoggingConfig: ErrorLoggingConfig;
160
+ export declare function logTranslationError(error: TranslationError, config?: ErrorLoggingConfig): void;
161
+ export {};
162
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ // 타입 안전한 번역 키 생성 헬퍼
2
+ export const createTranslationKey = (namespace, key) => `${String(namespace)}.${String(key)}`;
3
+ // 타입 가드 함수들
4
+ export function isTranslationNamespace(value) {
5
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
6
+ }
7
+ export function isLanguageConfig(value) {
8
+ return (typeof value === 'object' &&
9
+ value !== null &&
10
+ typeof value.code === 'string' &&
11
+ typeof value.name === 'string' &&
12
+ typeof value.nativeName === 'string');
13
+ }
14
+ export function isTranslationError(value) {
15
+ return (value instanceof Error &&
16
+ typeof value.code === 'string' &&
17
+ ['MISSING_KEY', 'LOAD_FAILED', 'INVALID_KEY', 'NETWORK_ERROR', 'INITIALIZATION_ERROR'].includes(value.code));
18
+ }
19
+ // 설정 검증 함수
20
+ export function validateI18nConfig(config) {
21
+ if (!config || typeof config !== 'object') {
22
+ return false;
23
+ }
24
+ const c = config;
25
+ return (typeof c.defaultLanguage === 'string' &&
26
+ Array.isArray(c.supportedLanguages) &&
27
+ c.supportedLanguages.every(isLanguageConfig) &&
28
+ typeof c.loadTranslations === 'function');
29
+ }
30
+ // 에러 처리 유틸리티 함수들
31
+ export function createTranslationError(code, message, originalError, context) {
32
+ const error = new Error(message);
33
+ error.code = code;
34
+ error.language = context?.language;
35
+ error.namespace = context?.namespace;
36
+ error.key = context?.key;
37
+ error.originalError = originalError;
38
+ error.retryCount = context?.retryCount || 0;
39
+ error.maxRetries = context?.maxRetries || 3;
40
+ error.timestamp = Date.now();
41
+ error.name = 'TranslationError';
42
+ return error;
43
+ }
44
+ // 사용자 친화적 에러 메시지 생성
45
+ export function createUserFriendlyError(error) {
46
+ const errorMessages = {
47
+ MISSING_KEY: {
48
+ code: 'MISSING_KEY',
49
+ message: '번역 키를 찾을 수 없습니다',
50
+ suggestion: '번역 파일에 해당 키가 있는지 확인해주세요',
51
+ action: '번역 파일 업데이트',
52
+ severity: 'low'
53
+ },
54
+ LOAD_FAILED: {
55
+ code: 'LOAD_FAILED',
56
+ message: '번역 파일을 불러오는데 실패했습니다',
57
+ suggestion: '네트워크 연결과 파일 경로를 확인해주세요',
58
+ action: '재시도',
59
+ severity: 'medium'
60
+ },
61
+ INVALID_KEY: {
62
+ code: 'INVALID_KEY',
63
+ message: '잘못된 번역 키 형식입니다',
64
+ suggestion: '키 형식을 "namespace.key" 형태로 입력해주세요',
65
+ action: '키 형식 수정',
66
+ severity: 'low'
67
+ },
68
+ NETWORK_ERROR: {
69
+ code: 'NETWORK_ERROR',
70
+ message: '네트워크 오류가 발생했습니다',
71
+ suggestion: '인터넷 연결을 확인하고 다시 시도해주세요',
72
+ action: '재시도',
73
+ severity: 'high'
74
+ },
75
+ INITIALIZATION_ERROR: {
76
+ code: 'INITIALIZATION_ERROR',
77
+ message: '번역 시스템 초기화에 실패했습니다',
78
+ suggestion: '설정을 확인하고 페이지를 새로고침해주세요',
79
+ action: '페이지 새로고침',
80
+ severity: 'critical'
81
+ },
82
+ VALIDATION_ERROR: {
83
+ code: 'VALIDATION_ERROR',
84
+ message: '설정 검증에 실패했습니다',
85
+ suggestion: '번역 설정을 확인해주세요',
86
+ action: '설정 수정',
87
+ severity: 'medium'
88
+ },
89
+ CACHE_ERROR: {
90
+ code: 'CACHE_ERROR',
91
+ message: '캐시 처리 중 오류가 발생했습니다',
92
+ suggestion: '캐시를 초기화하고 다시 시도해주세요',
93
+ action: '캐시 초기화',
94
+ severity: 'low'
95
+ },
96
+ FALLBACK_LOAD_FAILED: {
97
+ code: 'FALLBACK_LOAD_FAILED',
98
+ message: '폴백 언어 로딩에 실패했습니다',
99
+ suggestion: '폴백 언어 파일을 확인해주세요',
100
+ action: '폴백 언어 파일 수정',
101
+ severity: 'medium'
102
+ },
103
+ INITIALIZATION_FAILED: {
104
+ code: 'INITIALIZATION_FAILED',
105
+ message: '초기화에 실패했습니다',
106
+ suggestion: '설정을 확인하고 다시 시도해주세요',
107
+ action: '설정 확인',
108
+ severity: 'critical'
109
+ },
110
+ RETRY_FAILED: {
111
+ code: 'RETRY_FAILED',
112
+ message: '재시도에 실패했습니다',
113
+ suggestion: '네트워크 연결을 확인해주세요',
114
+ action: '재시도',
115
+ severity: 'high'
116
+ }
117
+ };
118
+ return errorMessages[error.code];
119
+ }
120
+ // 에러 복구 가능 여부 확인
121
+ export function isRecoverableError(error) {
122
+ const recoverableCodes = [
123
+ 'LOAD_FAILED',
124
+ 'NETWORK_ERROR',
125
+ 'CACHE_ERROR'
126
+ ];
127
+ return recoverableCodes.includes(error.code) &&
128
+ (error.retryCount || 0) < (error.maxRetries || 3);
129
+ }
130
+ // 기본 에러 복구 전략
131
+ export const defaultErrorRecoveryStrategy = {
132
+ maxRetries: 3,
133
+ retryDelay: 1000,
134
+ backoffMultiplier: 2,
135
+ shouldRetry: isRecoverableError,
136
+ onRetry: (error, attempt) => {
137
+ console.warn(`Retrying translation operation (attempt ${attempt}/${error.maxRetries}):`, error.message);
138
+ },
139
+ onMaxRetriesExceeded: (error) => {
140
+ console.error('Max retries exceeded for translation operation:', error.message);
141
+ }
142
+ };
143
+ // 기본 에러 로깅 설정
144
+ export const defaultErrorLoggingConfig = {
145
+ enabled: true,
146
+ level: 'error',
147
+ includeStack: true,
148
+ includeContext: true,
149
+ customLogger: undefined
150
+ };
151
+ // 에러 로깅 함수
152
+ export function logTranslationError(error, config = defaultErrorLoggingConfig) {
153
+ if (!config.enabled)
154
+ return;
155
+ const logData = {
156
+ code: error.code,
157
+ message: error.message,
158
+ timestamp: error.timestamp,
159
+ retryCount: error.retryCount,
160
+ maxRetries: error.maxRetries
161
+ };
162
+ if (config.includeContext) {
163
+ logData.language = error.language;
164
+ logData.namespace = error.namespace;
165
+ logData.key = error.key;
166
+ logData.context = error.context;
167
+ }
168
+ if (config.includeStack && error.stack) {
169
+ logData.stack = error.stack;
170
+ }
171
+ if (config.customLogger) {
172
+ config.customLogger(error);
173
+ }
174
+ else {
175
+ switch (config.level) {
176
+ case 'error':
177
+ console.error('Translation Error:', logData);
178
+ break;
179
+ case 'warn':
180
+ console.warn('Translation Warning:', logData);
181
+ break;
182
+ case 'info':
183
+ console.info('Translation Info:', logData);
184
+ break;
185
+ case 'debug':
186
+ console.debug('Translation Debug:', logData);
187
+ break;
188
+ }
189
+ }
190
+ }
191
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 기본 번역 데이터 유틸리티
3
+ *
4
+ * 번역 파일을 로드할 수 없을 때 사용되는 기본 번역 데이터를 제공합니다.
5
+ */
6
+ /**
7
+ * 기본 번역 데이터 가져오기
8
+ *
9
+ * @param language - 언어 코드 (예: 'ko', 'en')
10
+ * @param namespace - 네임스페이스 (예: 'common', 'auth')
11
+ * @returns 해당 언어와 네임스페이스의 기본 번역 데이터
12
+ */
13
+ export declare function getDefaultTranslations(language: string, namespace: string): Record<string, string>;
14
+ /**
15
+ * 모든 기본 번역 데이터 가져오기
16
+ *
17
+ * @returns 모든 언어와 네임스페이스의 기본 번역 데이터
18
+ */
19
+ export declare function getAllDefaultTranslations(): Record<string, Record<string, Record<string, string>>>;
20
+ //# sourceMappingURL=default-translations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-translations.d.ts","sourceRoot":"","sources":["../../src/utils/default-translations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsGH;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAElG"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * 기본 번역 데이터 유틸리티
3
+ *
4
+ * 번역 파일을 로드할 수 없을 때 사용되는 기본 번역 데이터를 제공합니다.
5
+ */
6
+ /**
7
+ * 기본 번역 데이터
8
+ */
9
+ const DEFAULT_TRANSLATIONS = {
10
+ ko: {
11
+ common: {
12
+ welcome: "환영합니다",
13
+ greeting: "안녕하세요",
14
+ goodbye: "안녕히 가세요",
15
+ loading: "로딩 중...",
16
+ error: "오류가 발생했습니다",
17
+ success: "성공했습니다",
18
+ cancel: "취소",
19
+ confirm: "확인",
20
+ save: "저장",
21
+ delete: "삭제",
22
+ edit: "편집",
23
+ add: "추가",
24
+ search: "검색",
25
+ filter: "필터",
26
+ sort: "정렬",
27
+ refresh: "새로고침",
28
+ back: "뒤로",
29
+ next: "다음",
30
+ previous: "이전",
31
+ home: "홈",
32
+ about: "소개",
33
+ contact: "연락처",
34
+ settings: "설정",
35
+ profile: "프로필",
36
+ logout: "로그아웃",
37
+ login: "로그인",
38
+ register: "회원가입"
39
+ },
40
+ auth: {
41
+ login: "로그인",
42
+ logout: "로그아웃",
43
+ register: "회원가입",
44
+ email: "이메일",
45
+ password: "비밀번호",
46
+ forgot_password: "비밀번호 찾기",
47
+ remember_me: "로그인 상태 유지"
48
+ },
49
+ errors: {
50
+ not_found: "페이지를 찾을 수 없습니다",
51
+ server_error: "서버 오류가 발생했습니다",
52
+ network_error: "네트워크 오류가 발생했습니다",
53
+ unauthorized: "인증이 필요합니다",
54
+ forbidden: "접근이 거부되었습니다"
55
+ }
56
+ },
57
+ en: {
58
+ common: {
59
+ welcome: "Welcome",
60
+ greeting: "Hello",
61
+ goodbye: "Goodbye",
62
+ loading: "Loading...",
63
+ error: "An error occurred",
64
+ success: "Success",
65
+ cancel: "Cancel",
66
+ confirm: "Confirm",
67
+ save: "Save",
68
+ delete: "Delete",
69
+ edit: "Edit",
70
+ add: "Add",
71
+ search: "Search",
72
+ filter: "Filter",
73
+ sort: "Sort",
74
+ refresh: "Refresh",
75
+ back: "Back",
76
+ next: "Next",
77
+ previous: "Previous",
78
+ home: "Home",
79
+ about: "About",
80
+ contact: "Contact",
81
+ settings: "Settings",
82
+ profile: "Profile",
83
+ logout: "Logout",
84
+ login: "Login",
85
+ register: "Register"
86
+ },
87
+ auth: {
88
+ login: "Login",
89
+ logout: "Logout",
90
+ register: "Register",
91
+ email: "Email",
92
+ password: "Password",
93
+ forgot_password: "Forgot Password",
94
+ remember_me: "Remember Me"
95
+ },
96
+ errors: {
97
+ not_found: "Page not found",
98
+ server_error: "Server error occurred",
99
+ network_error: "Network error occurred",
100
+ unauthorized: "Authentication required",
101
+ forbidden: "Access denied"
102
+ }
103
+ }
104
+ };
105
+ /**
106
+ * 기본 번역 데이터 가져오기
107
+ *
108
+ * @param language - 언어 코드 (예: 'ko', 'en')
109
+ * @param namespace - 네임스페이스 (예: 'common', 'auth')
110
+ * @returns 해당 언어와 네임스페이스의 기본 번역 데이터
111
+ */
112
+ export function getDefaultTranslations(language, namespace) {
113
+ return DEFAULT_TRANSLATIONS[language]?.[namespace] || {};
114
+ }
115
+ /**
116
+ * 모든 기본 번역 데이터 가져오기
117
+ *
118
+ * @returns 모든 언어와 네임스페이스의 기본 번역 데이터
119
+ */
120
+ export function getAllDefaultTranslations() {
121
+ return DEFAULT_TRANSLATIONS;
122
+ }
123
+ //# sourceMappingURL=default-translations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-translations.js","sourceRoot":"","sources":["../../src/utils/default-translations.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@hua-labs/i18n-core",
3
+ "version": "1.0.0",
4
+ "description": "HUA Labs - Core i18n functionality with SSR/CSR support and state management integration",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "src"
10
+ ],
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
17
+ },
18
+ "sideEffects": false,
19
+ "dependencies": {},
20
+ "devDependencies": {
21
+ "@types/jest": "^29.0.0",
22
+ "@types/node": "^20.0.0",
23
+ "@types/react": "^19.2.7",
24
+ "eslint": "^9.39.1",
25
+ "jest": "^29.0.0",
26
+ "react": "^19.2.0",
27
+ "typescript": "^5.9.3"
28
+ },
29
+ "peerDependencies": {
30
+ "react": ">=16.8.0"
31
+ },
32
+ "keywords": [
33
+ "i18n",
34
+ "internationalization",
35
+ "react",
36
+ "typescript",
37
+ "ssr",
38
+ "csr",
39
+ "zustand",
40
+ "state-management"
41
+ ],
42
+ "author": "HUA Labs",
43
+ "license": "MIT",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "https://github.com/HUA-Labs/HUA-Labs-public.git"
47
+ },
48
+ "bugs": {
49
+ "url": "https://github.com/HUA-Labs/HUA-Labs-public/issues"
50
+ },
51
+ "homepage": "https://github.com/HUA-Labs/HUA-Labs-public#readme",
52
+ "scripts": {
53
+ "build": "tsc",
54
+ "dev": "tsc --watch",
55
+ "clean": "rm -rf dist",
56
+ "test": "jest",
57
+ "lint": "echo 'Skipping lint for hua-i18n-core (ESLint 8, needs separate config)'",
58
+ "type-check": "tsc --noEmit"
59
+ }
60
+ }