Pular para o conteúdo

Internacionalização (i18n)

O FireCMS vem com um sistema de internacionalização integrado, baseado em i18next e react-i18next. Por padrão, os seguintes idiomas são suportados:

CódigoIdioma
enInglês (padrão)
esEspanhol
deAlemão
frFrancês
itItaliano
hiHindi

Toda a troca de idioma, persistência entre sessões e busca de strings são gerenciadas automaticamente pelo FireCMSi18nProvider, que você monta na raiz da sua árvore de componentes FireCMS.


Envolva sua árvore FireCMS com FireCMSi18nProvider. Você pode ver um exemplo completo na página Projeto PRO de Exemplo — o trecho abaixo foca apenas na parte do i18n:

import {
FireCMS,
FireCMSi18nProvider,
ModeControllerProvider,
Scaffold, AppBar, Drawer, NavigationRoutes, SideDialogs,
SnackbarProvider,
// … outros imports
} from "@firecms/core";
export function MyCMSApp() {
// … configure controllers (auth, navigation, storage, etc.)
return (
<SnackbarProvider>
<FireCMSi18nProvider locale="pt">
<ModeControllerProvider value={modeController}>
<FireCMS
navigationController={navigationController}
authController={authController}
dataSourceDelegate={firestoreDelegate}
storageSource={storageSource}
>
{({ context, loading }) => {
if (loading) return <CircularProgressCenter size="large" />;
return (
<Scaffold>
<AppBar title="My CMS" />
<Drawer />
<NavigationRoutes />
<SideDialogs />
</Scaffold>
);
}}
</FireCMS>
</ModeControllerProvider>
</FireCMSi18nProvider>
</SnackbarProvider>
);
}

A prop locale aceita qualquer tag de idioma BCP-47 ("en", "es", "de", …).

Quando um usuário muda o idioma pela UI do FireCMS, a escolha é salva em localStorage com a chave firecms_locale. Na próxima visita, a preferência armazenada tem prioridade sobre a prop locale — a menos que você a limpe manualmente.


Você pode substituir qualquer string da UI do FireCMS sem tocar no código-fonte da biblioteca. Use a prop translations no FireCMSi18nProvider:

import { FireCMSi18nProvider } from "@firecms/core";
import type { FireCMSTranslations } from "@firecms/core";
// Inclua apenas as chaves que você quiser alterar — todo o resto mantém seu valor padrão.
const myTranslations: { [locale: string]: Partial<FireCMSTranslations> } = {
en: {
save: "Publish",
discard: "Throw away",
delete: "Remove",
},
pt: {
save: "Publicar",
discard: "Descartar",
},
};
// Dentro da sua árvore de componentes:
<FireCMSi18nProvider locale="pt" translations={myTranslations}>
{/* … */}
</FireCMSi18nProvider>

As sobrescritas são mescladas profundamente sobre as strings integradas — as chaves que você não fornecer mantêm seus valores padrão.


Se o idioma-alvo não estiver listado acima, crie um objeto que satisfaça DeepPartial<FireCMSTranslations> (você não precisa fornecer todas as chaves — chaves ausentes automaticamente retornam ao inglês) e passe-o sob um novo código de idioma:

import { FireCMSi18nProvider } from "@firecms/core";
const ptTranslations = {
save: "Guardar",
create: "Criar",
discard: "Descartar",
cancel: "Cancelar",
delete: "Eliminar",
edit: "Editar",
copy: "Copiar",
search: "Pesquisar",
filter: "Filtro",
loading: "A carregar...",
// … adicione quantas chaves precisar; o restante usa inglês como padrão
};
<FireCMSi18nProvider
locale="pt" // ativar o novo idioma
translations={{ pt: ptTranslations }} // fornecer suas strings
>
{/* … */}
</FireCMSi18nProvider>

PropTipoPadrãoDescrição
localestring"en"Tag de idioma BCP-47 para o idioma ativo.
translationsRecord<string, DeepPartial<FireCMSTranslations>>Sobrescritas/adições de strings por idioma.

Todas as strings traduzíveis são definidas na interface FireCMSTranslations exportada de @firecms/core. Abaixo está um resumo categorizado das chaves mais comumente personalizadas:

ChavePadrão (en)
saveSave
createCreate
save_and_closeSave and close
create_and_closeCreate and close
create_copyCreate copy
discardDiscard
clearClear
cancelCancel
ChavePadrão (en)
editEdit
copyCopy
deleteDelete
delete_selectedDelete
ChavePadrão (en)
searchSearch
filterFilter
no_itemsNo items
no_entries_foundNo entries found
create_your_first_entryCreate your first entry
addAdd
removeRemove
ChavePadrão (en)
delete_confirmation_titleDelete?
delete_confirmation_bodyThis will delete the entity. Are you sure?
unsaved_changes_titleUnsaved changes
unsaved_changes_bodyYou have unsaved changes. Do you want to discard them?
discard_changesDiscard changes
keep_editingKeep editing
ChavePadrão (en)
open_menuOpen menu
close_drawerClose drawer
homeHome
adminAdmin
log_outLog out
ChavePadrão (en)
errorError
error_uploading_fileError uploading file
error_deletingError deleting
internal_errorInternal ERROR
page_not_foundPage not found
back_to_homeBack to home
ChavePadrão (en)
auth_sign_inSign In
auth_sign_upSign Up
auth_passwordPassword
auth_reset_passwordReset password
auth_wrong_passwordWrong password. Please try again.
auth_user_not_foundUser not found
ChavePadrão (en)
importImport
import_dataImport data
exportExport
export_dataExport data
downloadDownload

Para a lista completa de chaves com suas definições TypeScript, veja o arquivo fonte FireCMSTranslations e o idioma base em inglês no GitHub.


Alternando idiomas dinamicamente em tempo de execução

Seção intitulada “Alternando idiomas dinamicamente em tempo de execução”

Você pode alterar o idioma ativo em tempo de execução atualizando a prop locale. O FireCMS alternará automaticamente a menos que o usuário já tenha armazenado uma preferência pessoal em localStorage.

Para limpar a preferência armazenada e forçar uma mudança de idioma:

import { FIRECMS_LOCALE_STORAGE_KEY } from "@firecms/core";
// Limpar preferência do usuário, depois definir o novo idioma via prop `locale`
localStorage.removeItem(FIRECMS_LOCALE_STORAGE_KEY);

Se você adicionar uma tradução completa para um novo idioma e quiser compartilhá-la com a comunidade, pull requests são bem-vindos!

  1. Adicione um novo arquivo packages/firecms_core/src/locales/<código>.ts seguindo a estrutura do en.ts existente.
  2. Registre-o dentro do FireCMSi18nProvider.tsx.
  3. Abra um pull request — obrigado! 🎉

Tem dúvidas? Entre na comunidade Discord.