45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
export const locales = ['pt', 'en', 'es'] as const;
|
|
export type Locale = (typeof locales)[number];
|
|
|
|
export const defaultLocale: Locale = 'pt';
|
|
|
|
export const localeNames: Record<Locale, string> = {
|
|
pt: 'Português',
|
|
en: 'English',
|
|
es: 'Español',
|
|
};
|
|
|
|
export const localeFlags: Record<Locale, string> = {
|
|
pt: '🇧🇷',
|
|
en: '🇺🇸',
|
|
es: '🇪🇸',
|
|
};
|
|
|
|
// Função para carregar traduções
|
|
export async function getTranslations(locale: Locale) {
|
|
try {
|
|
const translations = await import(`@/locales/${locale}.json`);
|
|
return translations.default;
|
|
} catch {
|
|
// Fallback para português
|
|
const translations = await import(`@/locales/pt.json`);
|
|
return translations.default;
|
|
}
|
|
}
|
|
|
|
// Função para obter tradução por chave (ex: "nav.home")
|
|
export function getNestedValue(obj: Record<string, unknown>, path: string): string {
|
|
const keys = path.split('.');
|
|
let current: unknown = obj;
|
|
|
|
for (const key of keys) {
|
|
if (current && typeof current === 'object' && key in current) {
|
|
current = (current as Record<string, unknown>)[key];
|
|
} else {
|
|
return path; // Retorna a chave se não encontrar
|
|
}
|
|
}
|
|
|
|
return typeof current === 'string' ? current : path;
|
|
}
|