Linkurile din articole rămân în limba cititorului
Corpurile articolelor sunt HTML brut, randate cu dangerouslySetInnerHTML, deci
ancorele lor nu au trecut niciodată prin router: browserul le urma ca navigare de
document, iar adresele sunt scrise fără prefix de limbă, pentru că un singur
tabel de linkuri servește toate cele trei limbi. Un cititor rus care apăsa
/collections/hypervolt ajungea pe versiunea română, cu repornirea completă a
aplicației. Măsurat pe API-ul de producție: 189 de linkuri în corpurile ru și
190 în en, în 71 din 72 de articole.
Corectez atributul, nu doar apăsarea. HTML-ul sanitizat trece printr-un
<template> inert, unde fiecare ancoră internă își primește prefixul limbii
curente; apăsarea principală rămâne interceptată, dar doar ca să evite
repornirea aplicației. Așa se repară și „deschide în filă nouă", „copiază adresa
linkului" și previzualizarea din bara de stare — niciuna nu ajunge la un
gestionar de click.
Rămân pe seama browserului: alt origin (de acolo cad și mailto: și tel:), un
#fragment, o adresă servită ca fișier (/uploads/, /assets/, pozele din
public/) și o adresă care numește explicit altă limbă — un router montat
nu-și poate schimba basename-ul, deci acela chiar are nevoie de încărcare
completă.
Verificare rulată
npm run lint, npm run build, npx vitest run în frontend/:
34 de fișiere, 455 de teste, toate trec. Singura avertizare de lint e cea
preexistentă de la src/App.tsx:70.
Pe un articol rusesc real, servit din build-ul acestei ramuri cu backendul local:
- toate linkurile din corp au
href="/ru/..."—/ru/shop,/ru/collections/hypervolt,/ru/collections/normatec,/ru/collections/venom; - apăsarea unuia duce la
/ru/collections/hypervolt, iar un martor pus pewindowsupraviețuiește, deci aplicația nu a repornit; - linkurile externe au rămas neatinse.
Closes #42 (closed)