|
| 1 | +# Translation Log: Dutch → English |
| 2 | + |
| 3 | +This document records all actions taken to translate the MkDocs documentation project from Dutch into English for the [data-station-specification](https://github.com/health-ri/data-station-specification) repository. |
| 4 | + |
| 5 | +## Goal |
| 6 | + |
| 7 | +Translate the entire MkDocs project from Dutch into English. The project is a technical specification document for "Data stations for secondary use of health data" (EHDS/health data infrastructure). The i18n infrastructure uses `mkdocs-static-i18n` v1.3.0 with `docs_structure: suffix`, meaning `filename.md` is Dutch and `filename.en.md` is English. |
| 8 | + |
| 9 | +--- |
| 10 | + |
| 11 | +## Translation approach |
| 12 | + |
| 13 | +- Direct AI-assisted translation, preserving technical terminology, markdown formatting and internal links. |
| 14 | +- BibTeX citation keys (`[@key]`), admonitions, footnotes and mermaid/tab content blocks are preserved exactly as-is. |
| 15 | +- SVG diagrams: English `.en.svg` variants were generated for all diagrams containing Dutch text; image references in `.en.md` files point to these translated variants. |
| 16 | +- For the glossary: a separate `includes/woordenlijst.en.md` was created with English definitions (not an in-place replacement). |
| 17 | +- The DataSHIELD section (commented out of nav) was translated but kept commented out. |
| 18 | +- `docs/applicatie/data-pooling.en.md` is empty — the Dutch original is also 0 bytes. |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## Infrastructure changes |
| 23 | + |
| 24 | +| File | Action | Description | |
| 25 | +|------|--------|-------------| |
| 26 | +| `mkdocs.yml` | Modified | Added comprehensive `nav_translations` for all numbered sections and subsections (~45 entries); added `hooks: - hooks.py` | |
| 27 | +| `overrides/main.html` | Modified | Made announce banner language-aware using Jinja2 `{% if config.theme.language == 'en' %}` conditional | |
| 28 | +| `hooks.py` | Created | New file — swaps `auto_append` in `pymdownx.snippets` config at build time to use `woordenlijst.en.md` for English builds | |
| 29 | +| `includes/woordenlijst.en.md` | Created | Full English translation of all 47 glossary entries | |
| 30 | + |
| 31 | +### Technical notes |
| 32 | + |
| 33 | +- `pymdownx.snippets` `auto_append` is static and cannot switch per locale natively; `hooks.py` reads `config.plugins['i18n'].current_language` to swap the appended file at build time. |
| 34 | +- LSP errors in `mkdocs.yml` (unresolved Python name tags) are false positives — the YAML is valid for MkDocs. |
| 35 | +- The `toc` title `"Op deze pagina"` in `mkdocs.yml` applies only to the Dutch build; the English build uses the Material theme's built-in English label automatically. |
| 36 | + |
| 37 | +--- |
| 38 | + |
| 39 | +## Content translations |
| 40 | + |
| 41 | +### Pre-existing English files (not translated in this project) |
| 42 | + |
| 43 | +These files already existed in English before work began and have not been replaced: |
| 44 | + |
| 45 | +| File | |
| 46 | +|------| |
| 47 | +| `docs/appendix/tehdas2-requirements.en.md` | |
| 48 | +| `docs/scratch.en.md` | |
| 49 | + |
| 50 | +### Session 1 — Infrastructure setup + sections 1–4 |
| 51 | + |
| 52 | +| Created file | Dutch source | |
| 53 | +|-------------|--------------| |
| 54 | +| `docs/waarom.en.md` | `docs/waarom.md` | |
| 55 | +| `docs/proces/vinden.en.md` | `docs/proces/vinden.md` | |
| 56 | +| `docs/proces/aanvragen.en.md` | `docs/proces/aanvragen.md` | |
| 57 | +| `docs/proces/klaarzetten.en.md` | `docs/proces/klaarzetten.md` | |
| 58 | +| `docs/proces/analyseren.en.md` | `docs/proces/analyseren.md` | |
| 59 | +| `docs/proces/publiceren.en.md` | `docs/proces/publiceren.md` | |
| 60 | +| `docs/informatie/index.en.md` | `docs/informatie/index.md` | |
| 61 | +| `docs/informatie/syntactisch.en.md` | `docs/informatie/syntactisch.md` | |
| 62 | +| `docs/informatie/semantisch.en.md` | `docs/informatie/semantisch.md` | |
| 63 | +| `docs/informatie/metadata.en.md` | `docs/informatie/metadata.md` | |
| 64 | +| `docs/applicatie/index.en.md` | `docs/applicatie/index.md` | |
| 65 | +| `docs/applicatie/data-station.en.md` | `docs/applicatie/data-station.md` | |
| 66 | +| `docs/applicatie/catalogus.en.md` | `docs/applicatie/catalogus.md` | |
| 67 | +| `docs/applicatie/daams.en.md` | `docs/applicatie/daams.md` | |
| 68 | +| `docs/applicatie/processing-hub.en.md` | `docs/applicatie/processing-hub.md` | |
| 69 | +| `docs/applicatie/federatieve-analyse.en.md` | `docs/applicatie/federatieve-analyse.md` | |
| 70 | +| `docs/applicatie/federatief-leren.en.md` | `docs/applicatie/federatief-leren.md` | |
| 71 | +| `docs/applicatie/data-pooling.en.md` | `docs/applicatie/data-pooling.md` (both empty) | |
| 72 | + |
| 73 | +### Session 2 — Sections 5–7 + appendix + DataSHIELD |
| 74 | + |
| 75 | +| Created file | Dutch source | Notes | |
| 76 | +|-------------|--------------|-------| |
| 77 | +| `docs/infrastructuur/index.en.md` | `docs/infrastructuur/index.md` | | |
| 78 | +| `docs/infrastructuur/evolutie.en.md` | `docs/infrastructuur/evolutie.md` | | |
| 79 | +| `docs/infrastructuur/composable-data-stack.en.md` | `docs/infrastructuur/composable-data-stack.md` | | |
| 80 | +| `docs/implementaties/KIK-V/index.en.md` | `docs/implementaties/KIK-V/index.md` | | |
| 81 | +| `docs/implementaties/KIK-V/proces.en.md` | `docs/implementaties/KIK-V/proces.md` | | |
| 82 | +| `docs/implementaties/KIK-V/informatie.en.md` | `docs/implementaties/KIK-V/informatie.md` | | |
| 83 | +| `docs/implementaties/KIK-V/applicatie.en.md` | `docs/implementaties/KIK-V/applicatie.md` | | |
| 84 | +| `docs/implementaties/KIK-V/infrastructuur.en.md` | `docs/implementaties/KIK-V/infrastructuur.md` | | |
| 85 | +| `docs/implementaties/PLUGIN/index.en.md` | `docs/implementaties/PLUGIN/index.md` | | |
| 86 | +| `docs/implementaties/PLUGIN/proces.en.md` | `docs/implementaties/PLUGIN/proces.md` | Mermaid diagram labels translated | |
| 87 | +| `docs/implementaties/PLUGIN/informatie.en.md` | `docs/implementaties/PLUGIN/informatie.md` | | |
| 88 | +| `docs/implementaties/PLUGIN/applicatie.en.md` | `docs/implementaties/PLUGIN/applicatie.md` | | |
| 89 | +| `docs/implementaties/PLUGIN/infrastructuur.en.md` | `docs/implementaties/PLUGIN/infrastructuur.md` | HTML comment block preserved | |
| 90 | +| `docs/implementaties/DataSHIELD/index.en.md` | `docs/implementaties/DataSHIELD/index.md` | Empty (nav commented out) | |
| 91 | +| `docs/implementaties/DataSHIELD/informatie.en.md` | `docs/implementaties/DataSHIELD/informatie.md` | Empty (nav commented out) | |
| 92 | +| `docs/implementaties/DataSHIELD/applicatie.en.md` | `docs/implementaties/DataSHIELD/applicatie.md` | Captions already in English; minor typo fix | |
| 93 | +| `docs/discussie/index.en.md` | `docs/discussie/index.md` | | |
| 94 | +| `docs/discussie/centraal-vs-decentraal.en.md` | `docs/discussie/centraal-vs-decentraal.md` | | |
| 95 | +| `docs/discussie/primair-vs-secundair.en.md` | `docs/discussie/primair-vs-secundair.md` | | |
| 96 | +| `docs/discussie/permit-vs-request.en.md` | `docs/discussie/permit-vs-request.md` | | |
| 97 | +| `docs/discussie/dataspace-initiatieven.en.md` | `docs/discussie/dataspace-initiatieven.md` | | |
| 98 | +| `docs/discussie/ontwikkelagenda.en.md` | `docs/discussie/ontwikkelagenda.md` | | |
| 99 | +| `docs/appendix/index.en.md` | `docs/appendix/index.md` | Empty | |
| 100 | +| `docs/appendix/tehdas2-hdab.en.md` | `docs/appendix/tehdas2-hdab.md` | PDF embed, no text to translate | |
| 101 | +| `docs/appendix/tehdas2-spe.en.md` | `docs/appendix/tehdas2-spe.md` | PDF embed, no text to translate | |
| 102 | + |
| 103 | +### Session 3 — Re-translation of pre-existing stub files |
| 104 | + |
| 105 | +The following files existed before session 1 but contained incorrect, incomplete or empty content. They have been replaced with full translations of their Dutch source files. |
| 106 | + |
| 107 | +| Updated file | Dutch source | Notes | |
| 108 | +|-------------|--------------|-------| |
| 109 | +| `docs/index.en.md` | `docs/index.md` | Previous content was a generic Health-RI intro stub; replaced with full Section 1 translation including LDN description, key concepts admonition (6 tabs), scope, EHDS timeline info box, and attribution | |
| 110 | +| `docs/leeswijzer.en.md` | `docs/leeswijzer.md` | File was empty (0 bytes); filled with translation of research questions and reading guide | |
| 111 | +| `docs/proces/index.en.md` | `docs/proces/index.md` | Previous content was an unrelated academic abstract; replaced with full process perspective translation including EHDS process steps, use-case methodology, and communication patterns info box | |
| 112 | + |
| 113 | +`docs/waarom.en.md` (also listed as a stub) was reviewed against `docs/waarom.md` and found to be a faithful existing translation — left unchanged. |
| 114 | + |
| 115 | +### Session 4 — Re-translation of remaining pre-existing stub files |
| 116 | + |
| 117 | +The following files existed before session 1 but contained incorrect or empty content. They have been replaced with full translations of their Dutch source files. |
| 118 | + |
| 119 | +| Updated file | Dutch source | Notes | |
| 120 | +|-------------|--------------|-------| |
| 121 | +| `docs/data-stations-als-hoeksteen.en.md` | `docs/data-stations-als-hoeksteen.md` | Previous content was an unrelated generic FAIR hourglass description with `[cite:]` tags; replaced with full Section 1.2 translation including hourglass model, FAIR principles admonition, five-layer description, data product admonition, and footnote | |
| 122 | +| `docs/implementaties/index.en.md` | `docs/implementaties/index.md` | File was empty (0 bytes); filled with grid cards layout for KIK-V and PLUGIN implementations (DataSHIELD card kept commented out) | |
| 123 | +| `docs/infrastructuur/standaarden.en.md` | `docs/infrastructuur/standaarden.md` | Previous content was outdated (missing `DuckLake` and `CSVW` entries, had `Kuzu` instead of `LadybugDB`, different intro text and section structure); replaced with full translation of the current Dutch source | |
| 124 | + |
| 125 | +--- |
| 126 | + |
| 127 | +## Bug fixes |
| 128 | + |
| 129 | +### Broken links in `implementaties/PLUGIN/proces.md` and `proces.en.md` |
| 130 | + |
| 131 | +Three anchor links in the Dutch file pointed to non-existent section numbers (the use-case headings in `applicatie/data-station.md` had shifted from 4.1.3/4/5 to 4.1.5/6/7 at some point). The English translation initially inherited these stale links plus two additional path errors introduced during translation. All six links were corrected: |
| 132 | + |
| 133 | +| File | Old anchor | Fixed anchor | |
| 134 | +|------|-----------|--------------| |
| 135 | +| `implementaties/PLUGIN/proces.md` | `#414-verwerk-algoritme-en-geef-resultaat-terug` | `#416-verwerk-algoritme-en-geef-resultaat-terug` | |
| 136 | +| `implementaties/PLUGIN/proces.md` | `#415-geef-antwoord-op-dataverzoek` | `#417-geef-antwoord-op-dataverzoek` | |
| 137 | +| `implementaties/PLUGIN/proces.md` | `#413-maak-data-beschikbaar-voor-secundair-gebruik` | `#415-maak-data-beschikbaar-voor-secundair-gebruik` | |
| 138 | +| `implementaties/PLUGIN/proces.en.md` | `../applicatie/data-station.en.md#416-…` (wrong relative path) | `../../applicatie/data-station.md#416-process-algorithm-and-return-result` | |
| 139 | +| `implementaties/PLUGIN/proces.en.md` | `../../applicatie/laag-3/data-station.md#415-…` (phantom path) | `../../applicatie/data-station.md#417-answer-data-request` | |
| 140 | +| `implementaties/PLUGIN/proces.en.md` | `../../applicatie/laag-3/data-station.md#413-…` (phantom path) | `../../applicatie/data-station.md#415-make-data-available-for-secondary-use` | |
| 141 | + |
| 142 | +--- |
| 143 | + |
| 144 | +## SVG diagram translations |
| 145 | + |
| 146 | +### Approach |
| 147 | + |
| 148 | +Draw.io-exported SVGs store each label in up to three redundant locations within the file: |
| 149 | +1. As `value="..."` attributes inside a HTML-entity-encoded `<mxfile>` / `<mxGraphModel>` blob in the `content=` attribute on the `<svg>` root. |
| 150 | +2. As literal text inside `<foreignObject><div>` elements in the SVG body (the visual rendering). |
| 151 | +3. As `<text>` fallback elements inside `<switch>` blocks (older draw.io web exports only). |
| 152 | + |
| 153 | +Some labels contain inline HTML with ` ` entities that split words across markup boundaries. The translation script normalises these before matching. |
| 154 | + |
| 155 | +Plain Inkscape SVGs (`ehds-simpel.svg`) store text directly as `<text>` / `<tspan>` content nodes. |
| 156 | + |
| 157 | +A one-shot Python script (`translate_svgs.py`, not committed) applied a ~100-entry Dutch→English dictionary across all three locations for each file. |
| 158 | + |
| 159 | +### SVGs translated (18 `.en.svg` files created) |
| 160 | + |
| 161 | +| Original SVG | English variant | Dutch labels | |
| 162 | +|---|---|---| |
| 163 | +| `docs/proces/uc-vinden.drawio.svg` | `uc-vinden.drawio.en.svg` | 8 | |
| 164 | +| `docs/proces/uc-aanvragen.drawio.svg` | `uc-aanvragen.drawio.en.svg` | 13 | |
| 165 | +| `docs/proces/uc-aanvragen-state.drawio.svg` | `uc-aanvragen-state.drawio.en.svg` | 19 | |
| 166 | +| `docs/proces/uc-klaarzetten.drawio.svg` | `uc-klaarzetten.drawio.en.svg` | 2 | |
| 167 | +| `docs/proces/uc-analyseren.drawio.svg` | `uc-analyseren.drawio.en.svg` | 9 | |
| 168 | +| `docs/proces/uc-publiceren.drawio.svg` | `uc-publiceren.drawio.en.svg` | 5 | |
| 169 | +| `docs/applicatie/datastation-4corner.drawio.svg` | `datastation-4corner.drawio.en.svg` | 9 | |
| 170 | +| `docs/applicatie/datastation-netwerk.drawio.svg` | `datastation-netwerk.drawio.en.svg` | 5 | |
| 171 | +| `docs/applicatie/uc-datastation.drawio.svg` | `uc-datastation.drawio.en.svg` | 10 | |
| 172 | +| `docs/applicatie/datastation-beheren.drawio.svg` | `datastation-beheren.drawio.en.svg` | 5 | |
| 173 | +| `docs/applicatie/datastation-ophalen.drawio.svg` | `datastation-ophalen.drawio.en.svg` | 4 | |
| 174 | +| `docs/applicatie/datastation-organiseren.drawio.svg` | `datastation-organiseren.drawio.en.svg` | 12 | |
| 175 | +| `docs/applicatie/datastation-klaarzetten.drawio.svg` | `datastation-klaarzetten.drawio.en.svg` | 8 | |
| 176 | +| `docs/applicatie/datastation-analyseren.drawio.svg` | `datastation-analyseren.drawio.en.svg` | 7 | |
| 177 | +| `docs/applicatie/datastation-leveren.drawio.svg` | `datastation-leveren.drawio.en.svg` | 7 | |
| 178 | +| `docs/applicatie/datastation-dataverzoek.drawio.svg` | `datastation-dataverzoek.drawio.en.svg` | 7 | |
| 179 | +| `docs/implementaties/PLUGIN/plugin-overzicht.drawio.svg` | `plugin-overzicht.drawio.en.svg` | 7 | |
| 180 | +| `docs/ehds-simpel.svg` | `ehds-simpel.en.svg` | 4 | |
| 181 | + |
| 182 | +### SVGs without `.en.svg` (no translation needed) |
| 183 | + |
| 184 | +| SVG | Reason | |
| 185 | +|-----|--------| |
| 186 | +| `docs/proces/fair-hourglass.svg` | Text rendered as path geometry — no text nodes | |
| 187 | +| `docs/implementaties/PLUGIN/vantage6-rollen.svg` | Already fully English | |
| 188 | +| `docs/implementaties/kik-v.svg` | Logo, no text content | |
| 189 | +| `docs/assets/noun-hourglass-7893158.svg` | Attribution text only | |
| 190 | + |
| 191 | +### `.en.md` files updated (19 image references) |
| 192 | + |
| 193 | +| File | References updated | |
| 194 | +|------|--------------------| |
| 195 | +| `docs/proces/publiceren.en.md` | 1 | |
| 196 | +| `docs/proces/vinden.en.md` | 1 | |
| 197 | +| `docs/proces/klaarzetten.en.md` | 1 | |
| 198 | +| `docs/proces/aanvragen.en.md` | 2 | |
| 199 | +| `docs/proces/analyseren.en.md` | 1 | |
| 200 | +| `docs/applicatie/data-station.en.md` | 10 | |
| 201 | +| `docs/implementaties/PLUGIN/applicatie.en.md` | 1 | |
| 202 | +| `docs/implementaties/PLUGIN/index.en.md` | 1 | |
| 203 | + |
| 204 | +Note: `docs/implementaties/PLUGIN/proces.en.md` references `vantage6-rollen.svg` which is already English — no change needed. |
| 205 | + |
| 206 | +`docs/ehds-simpel.en.svg` was created for completeness but is not currently referenced by any `.en.md` file. |
| 207 | + |
| 208 | +--- |
| 209 | + |
| 210 | +## Known limitations |
| 211 | + |
| 212 | +- **Bibtex citation warnings**: `informatie/metadata.md` and `informatie/metadata.en.md` contain Turtle (RDF) code blocks with `@prefix`, `@nl` and `@en` language tags. The `mkdocs-bibtex` plugin mistakenly scans these as citation keys, producing four `WARNING - Inline reference to unknown key` messages per build. This is a known plugin limitation and the warnings are harmless. |
| 213 | + |
| 214 | +--- |
| 215 | + |
| 216 | +## Total files |
| 217 | + |
| 218 | +| Category | Count | |
| 219 | +|----------|-------| |
| 220 | +| Infrastructure files modified/created | 4 | |
| 221 | +| Pre-existing English files (untouched) | 2 | |
| 222 | +| English translations created — session 1 | 18 | |
| 223 | +| English translations created — session 2 | 25 | |
| 224 | +| Pre-existing stub files re-translated — session 3 | 3 | |
| 225 | +| Pre-existing stub files re-translated — session 4 | 3 | |
| 226 | +| **Total `.en.md` files in project** | **51** | |
| 227 | +| English SVG diagrams created | 18 | |
| 228 | +| **Total `.en.svg` files in project** | **18** | |
0 commit comments