feat: CMS com limites de caracteres, traduções auto e painel de notificações
This commit is contained in:
44
frontend/src/lib/i18n.ts
Normal file
44
frontend/src/lib/i18n.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user