|
1 | 1 | 'use client' |
2 | 2 |
|
3 | 3 | import { createContext, useContext, ReactNode, useMemo } from 'react' |
4 | | -import { |
5 | | - clientLanguages, |
6 | | - clientLanguageKeys, |
7 | | - type ClientLanguageCode, |
8 | | -} from '@/languages/lib/client-languages' |
| 4 | +import { languages, languageKeys, type LanguageCode } from '@/languages/lib/languages' |
9 | 5 |
|
10 | 6 | interface LocaleContextType { |
11 | | - readonly locale: ClientLanguageCode |
12 | | - readonly isValidLocale: (locale: string) => locale is ClientLanguageCode |
13 | | - readonly getSupportedLocales: () => readonly ClientLanguageCode[] |
14 | | - readonly getLocaleDisplayName: (locale: ClientLanguageCode) => string |
15 | | - readonly getLocaleNativeName: (locale: ClientLanguageCode) => string |
| 7 | + readonly locale: LanguageCode |
| 8 | + readonly isValidLocale: (locale: string) => locale is LanguageCode |
| 9 | + readonly getSupportedLocales: () => readonly LanguageCode[] |
| 10 | + readonly getLocaleDisplayName: (locale: LanguageCode) => string |
| 11 | + readonly getLocaleNativeName: (locale: LanguageCode) => string |
16 | 12 | } |
17 | 13 |
|
18 | 14 | const LocaleContext = createContext<LocaleContextType | null>(null) |
19 | 15 |
|
20 | 16 | interface LocaleProviderProps { |
21 | 17 | readonly children: ReactNode |
22 | | - readonly locale: ClientLanguageCode |
| 18 | + readonly locale: LanguageCode |
23 | 19 | } |
24 | 20 |
|
25 | 21 | // Use client languages as the source of truth for supported locales |
26 | | -const SUPPORTED_LOCALES: readonly ClientLanguageCode[] = clientLanguageKeys as ClientLanguageCode[] |
| 22 | +const SUPPORTED_LOCALES: readonly LanguageCode[] = languageKeys as LanguageCode[] |
27 | 23 |
|
28 | 24 | /** |
29 | 25 | * Validates if a string is a supported locale |
30 | 26 | */ |
31 | | -function isValidLocale(locale: string): locale is ClientLanguageCode { |
32 | | - return clientLanguageKeys.includes(locale) |
| 27 | +function isValidLocale(locale: string): locale is LanguageCode { |
| 28 | + return languageKeys.includes(locale) |
33 | 29 | } |
34 | 30 |
|
35 | 31 | /** |
36 | | - * Gets display name for a locale from client languages data |
| 32 | + * Gets display name for a locale from languages module |
37 | 33 | */ |
38 | | -function getLocaleDisplayName(locale: ClientLanguageCode): string { |
39 | | - return clientLanguages[locale]?.name || locale |
| 34 | +function getLocaleDisplayName(locale: LanguageCode): string { |
| 35 | + return languages[locale]?.name || locale |
40 | 36 | } |
41 | 37 |
|
42 | 38 | /** |
43 | | - * Gets native name for a locale from client languages data |
| 39 | + * Gets native name for a locale from languages module |
44 | 40 | */ |
45 | | -function getLocaleNativeName(locale: ClientLanguageCode): string { |
46 | | - return clientLanguages[locale]?.nativeName || clientLanguages[locale]?.name || locale |
| 41 | +function getLocaleNativeName(locale: LanguageCode): string { |
| 42 | + return languages[locale]?.nativeName || languages[locale]?.name || locale |
47 | 43 | } |
48 | 44 |
|
49 | 45 | /** |
50 | 46 | * Gets browser language preference as a valid locale |
51 | 47 | */ |
52 | | -function getBrowserLocale(): ClientLanguageCode { |
| 48 | +function getBrowserLocale(): LanguageCode { |
53 | 49 | if (typeof window === 'undefined') return 'en' |
54 | 50 |
|
55 | 51 | const browserLang = window.navigator.language.split('-')[0] |
@@ -77,7 +73,7 @@ export function LocaleProvider({ children, locale }: LocaleProviderProps): JSX.E |
77 | 73 | /** |
78 | 74 | * Hook to get current locale with enhanced error handling |
79 | 75 | */ |
80 | | -export function useLocale(): ClientLanguageCode { |
| 76 | +export function useLocale(): LanguageCode { |
81 | 77 | const context = useContext(LocaleContext) |
82 | 78 |
|
83 | 79 | if (context) { |
@@ -118,4 +114,4 @@ export function useLocaleContext(): LocaleContextType { |
118 | 114 | } |
119 | 115 |
|
120 | 116 | export { isValidLocale, getLocaleDisplayName, getLocaleNativeName } |
121 | | -export type { LocaleContextType, ClientLanguageCode } |
| 117 | +export type { LocaleContextType, LanguageCode } |
0 commit comments