refactor: divide language parts to separate folders

This commit is contained in:
BunyodL 2025-04-26 19:11:31 +05:00
parent 8f52988b6c
commit 6810f1c844
4 changed files with 29 additions and 26 deletions

View File

@ -1,16 +1,9 @@
'use client'; 'use client';
import { Loader } from 'lucide-react'; import { createContext, type ReactNode, useEffect, useState } from 'react';
import {
createContext,
type ReactNode,
useContext,
useEffect,
useState,
} from 'react';
import enTranslations from './locales/en.json'; import enTranslations from '../locales/en.json';
import ruTranslations from './locales/ru.json'; import ruTranslations from '../locales/ru.json';
// Define available languages // Define available languages
export const languages = { export const languages = {
@ -36,7 +29,7 @@ type LanguageContextType = {
t: (key: string) => string; t: (key: string) => string;
}; };
const LanguageContext = createContext<LanguageContextType | undefined>( export const LanguageContext = createContext<LanguageContextType | undefined>(
undefined, undefined,
); );
@ -80,17 +73,3 @@ export function LanguageProvider({ children }: { children: ReactNode }) {
</LanguageContext.Provider> </LanguageContext.Provider>
); );
} }
// Create hook
export function useLanguage() {
const context = useContext(LanguageContext);
if (context === undefined) {
throw new Error('useLanguage must be used within a LanguageProvider');
}
if (typeof context.t !== 'function') {
throw new Error('Translation function (t) is not available');
}
return context;
}

View File

@ -0,0 +1,18 @@
'use client';
import { useContext } from 'react';
import { LanguageContext } from '../context/language-provider';
export function useLanguage() {
const context = useContext(LanguageContext);
if (context === undefined) {
throw new Error('useLanguage must be used within a LanguageProvider');
}
if (typeof context.t !== 'function') {
throw new Error('Translation function (t) is not available');
}
return context;
}

View File

@ -0,0 +1,6 @@
export {
LanguageProvider,
languages,
type Language,
} from './context/language-provider';
export { useLanguage } from './hooks/use-language';

View File

@ -2,11 +2,11 @@
import { Provider } from 'react-redux'; import { Provider } from 'react-redux';
import { LanguageProvider } from '../language';
import { store } from '../store'; import { store } from '../store';
import { ThemeProvider } from '../theme/theme-provider'; import { ThemeProvider } from '../theme/theme-provider';
import { AosProvider } from './aos-provider'; import { AosProvider } from './aos-provider';
import { Toaster } from './toaster'; import { Toaster } from './toaster';
import { LanguageProvider } from '../language';
type ProvidersProps = { type ProvidersProps = {
children: React.ReactNode; children: React.ReactNode;