fix(extension): corriger les traductions 'clip' et améliorer le diagnostic 401
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 7m24s
CI / Deploy production (on server) (push) Successful in 23s

Traductions:
- 'Tondeuse Web' (FR), 'Cortadora web' (ES), 'Schneiden Sie aus' (DE),
  'ritagliare' (IT) etc. — le terme 'clip' était traduit littéralement
  (tondeuse = mower, ausschneiden = cut out, ritagliare = trim).
- Garder 'clip' comme terme technique dans les 15 locales, sauf les
  formulations verbe qui prennent une conjugaison locale correcte.
- 87 chaînes corrigées dans le bundle de traductions embarqué.

Diagnostic 401:
- Le message 'Veuillez vous connecter à Memento' s'affichait même
  quand l'utilisateur était connecté, simplement sur une URL différente
  (localhost vs 127.0.0.1 vs LAN IP — les cookies sont scopés par host).
- Nouveau message multi-ligne incluant l'URL configurée + bouton
  'Ouvrir Memento' qui ouvre l'onglet directement à cette URL.
- Nouvelle clé i18n errLoginHintUrl (placeholder $URL$) traduite
  dans les 15 locales.

Rebuilt :
- memento-web-clipper-chrome-store.zip (44 Ko)
- memento-web-clipper-firefox.xpi (44 Ko)
This commit is contained in:
Antigravity
2026-07-18 09:28:08 +00:00
parent 6eb46fd1b7
commit cf3b5483d2
66 changed files with 1134 additions and 633 deletions

View File

@@ -252,6 +252,9 @@ function bindIdleHandlers() {
document.getElementById('clipSelBtn')?.addEventListener('click', () => void runAnalyze('selection'))
document.getElementById('clipPageBtn')?.addEventListener('click', () => void runAnalyze('page'))
document.getElementById('clipLinkBtn')?.addEventListener('click', () => void runAnalyze('link'))
document.getElementById('openLoginFromHint')?.addEventListener('click', () => {
chrome.tabs.create({ url: apiBase() })
})
// Gérer l'erreur de chargement du favicon
document.querySelector('.page-favicon')?.addEventListener('error', function() {
@@ -363,12 +366,15 @@ async function loadSettings() {
async function loadNotebooks(preferredId) {
try {
await ensureApiPermission()
const res = await fetch(`${apiBase()}/api/clip/notebooks`, { credentials: 'include' })
const url = `${apiBase()}/api/clip/notebooks`
const res = await fetch(url, { credentials: 'include' })
if (!res.ok) {
connected = false
updateConnBadge()
if (res.status === 401) {
throw new Error(t('errLoginRequired'))
// Diagnostic : préciser l'URL configurée pour aider l'utilisateur à
// diagnostiquer un mismatch (localhost vs 127.0.0.1 vs LAN IP).
throw new Error(`${t('errLoginRequired')}\n${t('errLoginHintUrl', apiBase())}`)
}
throw new Error(t('errLoadNotebooks'))
}
@@ -409,7 +415,11 @@ function renderIdle() {
const authHint =
!connected && errorMessage
? `<div class="auth-hint">${escapeHtml(errorMessage)}</div>`
? `<div class="auth-hint">${escapeHtml(errorMessage).replace(/\n/g, '<br/>')}
<div style="margin-top:8px">
<button type="button" class="btn btn-secondary btn-sm" id="openLoginFromHint">${escapeHtml(t('openMomento'))}</button>
</div>
</div>`
: ''
els.screen.innerHTML = `