Changeset bfadc15 in Klonkt for test


Ignore:
Timestamp:
08/14/2026 03:19:09 AM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
a5515b4
Parents:
7e474f7
Message:

De teksten op de migrate-pagina in mensentaal

Robin: er zijn miljoenen Klonkt-gebruikers, dus het moet gebruiksvriendelijk
worden gemaakt. Ik had die opmerking eerst gelezen als een schaalwaarschuwing
en zat prestaties te repareren. Dat leverde wel een echte fout op (7e474f7),
maar het was zijn vraag niet.

Wat er stond was voor mij geschreven, niet voor wie verhuist:

claimen, alias, actor-adres, instantie, AP-ids, fediverse,
"een bericht met dezelfde webadres-naam maar een ander id"

Achttien teksten herschreven in nl/en/de. "Je oude account claimen" werd "je
vorige account koppelen". De overschrijf-waarschuwing gaat niet meer over
unieke sleutels maar over wat je kwijtraakt. De foutmelding bij een ontbrekende
koppeling verwijst nu naar stap 1 op het scherm in plaats van naar een begrip.

DE VOORBEELDEN TONEN HANDLES. Er stond https://oude-klonkt.nl/ap/users/jij als
placeholder. Niemand kent zijn eigen actor-URL; mensen kennen
@robo@….

EN HET VELD GEEFT TERUG WAT JE GAF. Je typte een handle, wij slaan de actor-URL
op omdat het protocol daarop draait, en dan kreeg je een adres terug dat je
nooit had ingetypt. Nu tonen we de handle, en alleen als er echt een uit te
halen valt: een verkeerde handle is erger dan een lelijke URL. Opslaan leest
beide vormen, dus daar verandert niets.

Changed files:
src/services/i18n.js

  • 19 teksten herschreven in drie talen, jargon eruit

src/views/pages/admin-migrate.ejs

  • placeholders tonen @handle in plaats van een actor-URL

src/routes/admin-migrate.js

  • aliasTekst() toont handles, met de URL als terugval

test/migrate-page.test.js

  • een jargonwacht over 23 sleutels maal drie talen
  • de handle-heenweg en -terugweg
  • de stap-5-test toetst nu op BETEKENIS; hij brak omdat het woord "alias" verdween, en dat was precies de bedoeling

remarks: de indeling blijft zoals hij was (Robins keuze). Het grotere idee, een
vraag bovenaan of je hier binnenkomt of weggaat en dan alleen die helft tonen,
is niet gedaan. Suite 1016 groen.

-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/migrate-page.test.js

    r7e474f7 rbfadc15  
    1212import assert from 'node:assert/strict';
    1313import fs from 'fs';
     14const i18nMod = await import('../src/services/i18n.js');
    1415
    1516process.env.DATABASE_PATH = ':memory:';
     
    107108  // beschrijft die niet bestaat is erger dan geen stappenplan.
    108109  const i18n = await import('../src/services/i18n.js');
     110  // Op BETEKENIS toetsen, niet op een woord. Deze test brak toen "alias" uit de
     111  // teksten verdween, en dat is precies de verkeerde reden om rood te worden:
     112  // het jargon weghalen was de bedoeling.
    109113  const nl = i18n.t('nl', 'mig.plan_5_why');
    110   assert.match(nl, /verwijder/i, 'de Delete-ronde');
    111   assert.match(nl, /alias/i, 'en de alias weghalen');
     114  assert.match(nl, /verwijder/i, 'de berichten opruimen');
     115  assert.match(nl, /stap 1/i, 'en de koppeling met je vorige account weghalen');
    112116  assert.match(nl, /nog geen knop/i, 'en eerlijk dat het handwerk is');
    113117});
     118
     119test('de teksten praten geen jargon', () => {
     120  // Robin: er zijn miljoenen Klonkt-gebruikers, dus het moet gebruiksvriendelijk.
     121  // Woorden als alias, actor, instantie en fediverse zeggen een ontwikkelaar
     122  // alles en een gebruiker niets. Deze test bewaakt dat ze niet terugsluipen.
     123  const jargon = /\b(alias(sen)?|claimen|actor|instantie|AP-id|origin|slug|URI)\b/i;
     124  const sleutels = [
     125    'lead', 'alias_title', 'alias_hint', 'alias_label', 'alias_note', 'alias_btn',
     126    'import_hint', 'file_label', 'overwrite_label', 'overwrite_hint', 'r_new_ids',
     127    'pull_hint', 'pull_source', 'pull_source_hint', 'move_hint', 'move_warn',
     128    'plan_hint', 'plan_1', 'plan_1_why', 'plan_5_why',
     129    'e_no_backreference', 'e_not_moved_here', 'e_no_source',
     130  ];
     131  const fout = [];
     132  for (const l of ['nl', 'en', 'de']) {
     133    for (const k of sleutels) {
     134      const t = i18nMod.t(l, `mig.${k}`);
     135      const m = jargon.exec(t);
     136      if (m) fout.push(`${l}/${k}: "${m[0]}"`);
     137    }
     138  }
     139  assert.deepEqual(fout, [], `jargon teruggeslopen: ${fout.join(', ')}`);
     140});
     141
     142test('een gekoppeld account komt terug als handle, niet als URL', async () => {
     143  // Je typt @jij@mastodon.social en wij slaan de actor-URL op, want daar draait
     144  // het protocol op. Zonder deze vertaling terug kreeg je een adres te zien dat
     145  // je nooit hebt ingetypt en niet herkent.
     146  const AP = await import('../src/services/ActivityPubService.js');
     147  assert.equal(AP.deriveHandle('https://oud.example/ap/users/robo'), '@robo@oud.example');
     148  // En als er geen fatsoenlijke handle uit te halen valt blijft de URL staan:
     149  // een verkeerde handle is erger dan een lelijke URL.
     150  const raar = AP.deriveHandle('https://oud.example/');
     151  assert.ok(!/^@[^@\s]+@[^@\s]+$/.test(raar) || raar === '@oud.example@oud.example',
     152    `onverwachte handle uit een pad zonder naam: ${raar}`);
     153});
Note: See TracChangeset for help on using the changeset viewer.