Interface: traduz rótulos do núcleo e redesenha o explorador ao trocar de idioma
Achados ao rodar a interface real em inglês e varrer o DOM:
- campos de metadados (EXIF, PDF, MP4), tipos de arquivo e rótulos de
saúde do disco que vêm do núcleo em Rust;
- textos que a interface divide em nós separados ("1 selecionado",
"Sessão: nome", "Imagem · 27 KB", categorias com emoji);
- avisos do visualizador de SQLite.
Datas e títulos de mês são montados em JS no momento do desenho e
ficavam no idioma antigo depois de trocar em Configurações. O
explorador ganha relang() e a janela de Configurações o chama.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RRZm8uTVN3WLTwcbrDQAUM
This commit is contained in:
1 parent
bb6f9cbde3
commit
16eced75d9
3 files changed
+60
No files matched your search
@@ -752,6 +752,7 @@ $('#settingsBtn')?.addEventListener('click', () => {
|
||||
const patch = { lang: d.querySelector('[name=lang]').value, notify: d.querySelector('[name=notify]').checked, maps: d.querySelector('[name=maps]').checked };
|
||||
saveSettings(patch);
|
||||
setLang(patch.lang);
|
||||
EX?.relang?.();
|
||||
toast('Salvo');
|
||||
};
|
||||
d.showModal();
|
||||
|
||||
@@ -669,6 +669,8 @@ export function createExplorer(deps) {
|
||||
},
|
||||
query: () => toQuery(),
|
||||
destroy() { E.reloadToken++; stopPv?.(); stopLb?.(); host.innerHTML = ''; },
|
||||
/** Idioma trocado em Configurações: refaz o que foi montado em JS (datas, meses, rótulos). */
|
||||
relang() { paintCrumb(); paintChips(); paintNav(); paintActions(); paintInspector(); relayout(); },
|
||||
focus() { scroll.focus({ preventScroll: true }); },
|
||||
};
|
||||
}
|
||||
@@ -448,4 +448,61 @@ export const EN = {
|
||||
'diretório do ZIP não encontrado (arquivo possivelmente incompleto)': 'ZIP directory not found (file possibly incomplete)',
|
||||
'visualizador indisponível': 'viewer unavailable',
|
||||
'© colaboradores do OpenStreetMap': '© OpenStreetMap contributors',
|
||||
// explorador: textos que a interface divide em nós separados
|
||||
'selecionado': 'selected',
|
||||
'selecionados': 'selected',
|
||||
'selecionado (todos desta vista)': 'selected (all in this view)',
|
||||
'selecionados (todos desta vista)': 'selected (all in this view)',
|
||||
'Sessão: {n}': 'Session: {n}',
|
||||
'🖼 Fotos': '🖼 Photos',
|
||||
'📄 Documentos': '📄 Documents',
|
||||
'🎞 Vídeos': '🎞 Videos',
|
||||
'🎵 Áudio': '🎵 Audio',
|
||||
'🗜 Compactados': '🗜 Archives',
|
||||
'🗄 Bancos de dados': '🗄 Databases',
|
||||
'📦 Outros': '📦 Other',
|
||||
'Imagem · {n}': 'Image · {n}',
|
||||
'Vídeo · {n}': 'Video · {n}',
|
||||
'Áudio · {n}': 'Audio · {n}',
|
||||
'Texto · {n}': 'Text · {n}',
|
||||
'Documento (texto extraído) · {n}': 'Document (extracted text) · {n}',
|
||||
'Conteúdo do arquivo compactado · {n}': 'Archive contents · {n}',
|
||||
'Banco de dados SQLite · {n}': 'SQLite database · {n}',
|
||||
'Dados brutos (hexadecimal) · {n}': 'Raw data (hexadecimal) · {n}',
|
||||
// tipos e campos de metadados vindos do núcleo
|
||||
'Imagem JPEG': 'JPEG image',
|
||||
'Imagem PNG': 'PNG image',
|
||||
'Imagem GIF': 'GIF image',
|
||||
'Imagem BMP': 'BMP image',
|
||||
'Mídia MP4/MOV': 'MP4/MOV media',
|
||||
'Fabricante da câmera': 'Camera make',
|
||||
'Modelo da câmera': 'Camera model',
|
||||
'Data (EXIF)': 'Date (EXIF)',
|
||||
'Foto tirada em': 'Photo taken on',
|
||||
'Nº de série do corpo': 'Body serial number',
|
||||
'Proprietário da câmera': 'Camera owner',
|
||||
'Exposição': 'Exposure',
|
||||
'Distância focal': 'Focal length',
|
||||
'Data do GPS': 'GPS date',
|
||||
'Localização (GPS)': 'Location (GPS)',
|
||||
'Versão do PDF': 'PDF version',
|
||||
'Título': 'Title',
|
||||
'Criado com': 'Created with',
|
||||
'Páginas (aprox.)': 'Pages (approx.)',
|
||||
'Última modificação por': 'Last modified by',
|
||||
'Páginas': 'Pages',
|
||||
'Duração': 'Duration',
|
||||
// saúde do disco e confiança vindas do núcleo
|
||||
'SSD (sem rotação)': 'SSD (no rotation)',
|
||||
'Cache de gravação': 'Write cache',
|
||||
'Segurança ATA': 'ATA security',
|
||||
'{n} (máx. {n})': '{n} (max. {n})',
|
||||
'membro de RAID': 'RAID member',
|
||||
'sem rodapé/estrutura completa: pode estar truncado': 'no footer/complete structure: may be truncated',
|
||||
'vídeo sem índice (moov)': 'video without index (moov)',
|
||||
// visualizador de SQLite
|
||||
'Nenhuma tabela encontrada no esquema. A primeira página pode estar danificada.': 'No table found in the schema. The first page may be damaged.',
|
||||
'Tabela virtual: o conteúdo não fica armazenado como linhas comuns.': 'Virtual table: the content is not stored as ordinary rows.',
|
||||
'Tabela WITHOUT ROWID: as linhas ficam numa árvore de índice, ainda não exibida.': 'WITHOUT ROWID table: the rows live in an index tree, not shown yet.',
|
||||
'Arquivo truncado: o cabeçalho indica {n} páginas, mas só há {n}. Parte dos dados pode estar faltando.': 'Truncated file: the header says {n} pages, but there are only {n}. Part of the data may be missing.',
|
||||
};
|
||||
Reference in new issue
Block a user