chore: transfer repo
This commit is contained in:
65
lib/hooks/useTranslation.ts
Normal file
65
lib/hooks/useTranslation.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
'use client';
|
||||
|
||||
import { usePathname } from 'next/navigation';
|
||||
import { useEffect, useMemo, useState } from 'react';
|
||||
import enTranslations from '../../messages/en.json';
|
||||
import hrTranslations from '../../messages/hr.json';
|
||||
|
||||
type NestedMessages = {
|
||||
[key: string]: string | NestedMessages;
|
||||
};
|
||||
|
||||
// Dobavi vrijednost po path-u (npr. 'common.button.submit')
|
||||
function getNestedTranslation(obj: NestedMessages, path: string): string {
|
||||
const keys = path.split('.');
|
||||
let current: any = obj;
|
||||
|
||||
for (const key of keys) {
|
||||
if (current[key] === undefined) {
|
||||
console.warn(`Translation key not found: ${path}`);
|
||||
return path;
|
||||
}
|
||||
current = current[key];
|
||||
}
|
||||
|
||||
if (typeof current !== 'string') {
|
||||
console.warn(`Translation value for ${path} is not a string`);
|
||||
return path;
|
||||
}
|
||||
|
||||
return current;
|
||||
}
|
||||
|
||||
export function useTranslation() {
|
||||
const pathname = usePathname();
|
||||
|
||||
// Koristimo useState za praćenje locale-a kako bi izbjegli hydration error
|
||||
const [locale, setLocale] = useState('hr'); // Default na 'hr' za prvo renderiranje
|
||||
|
||||
// Detekcija trenutnog jezika iz URL-a - ovo će biti u useEffect da bi radilo samo na klijentu
|
||||
useEffect(() => {
|
||||
const detectedLocale = pathname.startsWith('/en') ? 'en' : 'hr';
|
||||
setLocale(detectedLocale);
|
||||
}, [pathname]);
|
||||
|
||||
// Odabir odgovarajućeg prijevoda
|
||||
const translations = useMemo(() => {
|
||||
return locale === 'en' ? enTranslations : hrTranslations;
|
||||
}, [locale]);
|
||||
|
||||
// Funkcija za dohvaćanje prevedenog stringa
|
||||
const t = (key: string, variables?: Record<string, string | number>) => {
|
||||
let text = getNestedTranslation(translations as unknown as NestedMessages, key);
|
||||
|
||||
// Replace variables if they exist
|
||||
if (variables) {
|
||||
Object.entries(variables).forEach(([varName, value]) => {
|
||||
text = text.replace(new RegExp(`{${varName}}`, 'g'), String(value));
|
||||
});
|
||||
}
|
||||
|
||||
return text;
|
||||
};
|
||||
|
||||
return { t, locale };
|
||||
}
|
||||
Reference in New Issue
Block a user