i18n: Dutch (nl) interface language

Adds a Dutch catalog (`i18n/nl.rs`, 518 labels) covering every key the
other catalogs translate: ribbon, context menus, File view, dialog
titles and the Options page. `nl-NL` and `nl-BE` locale tags resolve
to Dutch. Updates localization parity and the roadmap.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Stefan Fransen
2026-10-20 18:10:09 +02:00
co-authored by Claude Fable 5.1
parent a2cc4b42ca
commit 60e113bcd7
6 changed files with 564 additions and 5 deletions
+4 -2
View File
@@ -2,7 +2,7 @@
**Stage: alpha** · next: beta, ~25 points of "ready for real work" and ~160–240 h away
> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-12 · **Change:** minor (rows auto-fit oversized fonts on open and whole-row/column formatting) · **Target:** Microsoft Excel (Microsoft 365)
> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-20 · **Change:** minor (Dutch interface language) · **Target:** Microsoft Excel (Microsoft 365)
GridCraft aims at full Microsoft Excel parity, and at being better in places: faster, open (XLSX
is the native format), fully scriptable by agents (MCP, control channel, CLI), and on the web.
@@ -111,7 +111,7 @@ Localized German formulas and numbers are in PR #163. Detail: [localization-pari
| Korean | ko | menus only | ~12% |
| Vietnamese | vi | none | 0% |
Other shipped languages: 2 (Russian and German, menus only, ~12%).
Other shipped languages: 3 (Russian and German, menus only, ~12%; Dutch, menus, File view and dialog titles, ~24%).
## Upcoming
@@ -132,6 +132,7 @@ Ranked; estimates in Opus 5.5 agent-hours. Detail and the full beta-gate list in
| Date | What landed |
|---|---|
| 2026-10-20 | Interface translated into Dutch (518 labels: ribbon, context menus, File view, dialog titles, Options); `nl`, `nl-NL`, `nl-BE` locale tags resolve to Dutch |
| 2026-10-12 | Rows auto-fit oversized fonts: opening a file and whole-row/column formatting grow non-custom rows to their tallest font (#833) |
| 2026-10-12 | Number formats: parsing a format code is linear in its length (long runs of `[`, `,` or `/` no longer take quadratic time), and an unclosed `[` is a literal when splitting sections as well as when tokenizing (#810) |
| 2026-10-12 | Number formats: a fraction denominator with 65,536 zeros no longer crashes; format codes are capped at 255 characters like Excel (longer codes display as General, `TEXT` gives `#VALUE!`) (#807) |
@@ -193,6 +194,7 @@ Ranked; estimates in Opus 5.5 agent-hours. Detail and the full beta-gate list in
| Date | Change | Summary |
|---|---|---|
| 2026-10-20 | minor | Dutch (nl) listed under other shipped languages; progress log row |
| 2026-10-12 | minor | Rows auto-fit oversized fonts on open and whole-row/column formatting (#833); progress log row |
| 2026-10-12 | minor | Progress log: multi-area row/column delete (#758) |
| 2026-10-12 | trivial | Progress log: XLSX chart sheets kept on save (#727) |
+4
View File
@@ -68,3 +68,7 @@ sync_github_name = false
[people.Shnrqpdr]
sync_github_name = true
[people.Stefanfra]
real_name = "Stefan Fransen"
sync_github_name = true
+19 -1
View File
@@ -14,6 +14,7 @@ mod de;
mod es;
mod fr;
mod ko;
mod nl;
mod pt;
mod ru;
mod sr;
@@ -35,10 +36,12 @@ pub enum Language {
Cs,
Fr,
Sr,
Nl,
}
impl Language {
pub const ALL: [Self; 11] = [Self::En, Self::Es, Self::Zh, Self::Ja, Self::Ko, Self::Ru, Self::PtBr, Self::De, Self::Cs, Self::Fr, Self::Sr];
pub const ALL: [Self; 12] =
[Self::En, Self::Es, Self::Zh, Self::Ja, Self::Ko, Self::Ru, Self::PtBr, Self::De, Self::Cs, Self::Fr, Self::Sr, Self::Nl];
/// The language's own name, shown in the switcher.
pub fn name(self) -> &'static str {
@@ -54,6 +57,7 @@ impl Language {
Self::Cs => "Čeština",
Self::Fr => "Français",
Self::Sr => "Srpski",
Self::Nl => "Nederlands",
}
}
@@ -71,6 +75,7 @@ impl Language {
Self::Cs => "cs",
Self::Fr => "fr",
Self::Sr => "sr",
Self::Nl => "nl",
}
}
@@ -91,6 +96,7 @@ impl Language {
"cs" => Some(Self::Cs),
"fr" => Some(Self::Fr),
"sr" => Some(Self::Sr),
"nl" => Some(Self::Nl),
_ => None,
}
}
@@ -129,6 +135,7 @@ impl Language {
Self::Cs => cs::translate(text),
Self::Fr => fr::translate(text),
Self::Sr => sr::translate(text),
Self::Nl => nl::translate(text),
};
translated.unwrap_or_else(|| text.rsplit_once('|').map_or(text, |(_, label)| label))
}
@@ -611,6 +618,7 @@ mod tests {
assert!(cs::translate(english).is_some_and(|text| !text.is_empty()), "missing Czech: {english}");
assert!(fr::translate(english).is_some_and(|text| !text.is_empty()), "missing French: {english}");
assert!(sr::translate(english).is_some_and(|text| !text.is_empty()), "missing Serbian: {english}");
assert!(nl::translate(english).is_some_and(|text| !text.is_empty()), "missing Dutch: {english}");
}
assert_eq!(Language::Ja.tr("Data"), "データ");
assert_eq!(Language::Zh.tr("Data"), "数据");
@@ -644,6 +652,10 @@ mod tests {
assert_eq!(Language::Sr.tr("Sheet1!A1"), "Sheet1!A1");
assert_eq!(Language::Sr.tr("Page Layout|Orientation"), "Orijentacija");
assert_eq!(Language::Sr.tr("Orientation"), "Orijentacija");
assert_eq!(Language::Nl.tr("Data"), "Gegevens");
assert_eq!(Language::Nl.tr("Sheet1!A1"), "Sheet1!A1");
assert_eq!(Language::Nl.tr("Page Layout|Orientation"), "Paginastand");
assert_eq!(Language::Nl.tr("Orientation"), "Richting");
assert_eq!(Language::parse("xx"), None);
}
@@ -698,6 +710,9 @@ mod tests {
assert_eq!(Language::Sr.tr("Options|General"), "Opšte");
assert_eq!(Language::Sr.tr("Options|Save"), "Sačuvaj");
assert_eq!(Language::Sr.tr("Sheet Options|View"), "Prikaz");
assert_eq!(Language::Nl.tr("Options|General"), "Algemeen");
assert_eq!(Language::Nl.tr("Options|Save"), "Opslaan");
assert_eq!(Language::Nl.tr("Sheet Options|View"), "Weergeven");
}
#[test]
@@ -738,6 +753,9 @@ mod tests {
assert_eq!(Language::from_tag("sr-Latn-RS"), Some(Language::Sr));
assert_eq!(Language::from_tag("sr-RS"), Some(Language::Sr));
assert_eq!(Language::parse("sr"), Some(Language::Sr));
assert_eq!(Language::from_tag("nl-NL"), Some(Language::Nl));
assert_eq!(Language::from_tag("nl_BE"), Some(Language::Nl));
assert_eq!(Language::parse("nl"), Some(Language::Nl));
}
#[test]
+533
View File
@@ -0,0 +1,533 @@
//! Dutch translations for the interface strings in i18n.rs.
pub(super) fn translate(text: &str) -> Option<&'static str> {
Some(match text {
"Paste" => "Plakken",
"Paste Values" => "Waarden plakken",
"Paste Formulas" => "Formules plakken",
"Paste Formatting" => "Opmaak plakken",
"Transpose" => "Transponeren",
"Paste Link" => "Koppeling plakken",
"Paste Special…" => "Speciaal plakken…",
"Insert Copied Cells" => "Gekopieerde cellen invoegen",
"Insert Copied Cells…" => "Gekopieerde cellen invoegen…",
"Insert Cut Cells" => "Geknipte cellen invoegen",
"Insert Paste" => "Invoegen en plakken",
"Cut (⌘X)" => "Knippen (⌘X)",
"Copy (⌘C)" => "Kopiëren (⌘C)",
"Format Painter (double-click to keep it on)" => "Opmaak kopiëren (dubbelklik om vast te zetten)",
"Bold (⌘B)" => "Vet (⌘B)",
"Italic (⌘I)" => "Cursief (⌘I)",
"Underline (⌘U)" => "Onderstrepen (⌘U)",
"Double Underline" => "Dubbel onderstrepen",
"Strikethrough" => "Doorhalen",
"Underline" => "Onderstrepen",
"Increase Font Size" => "Tekengrootte vergroten",
"Decrease Font Size" => "Tekengrootte verkleinen",
"Wrap Text" => "Tekstterugloop",
"Merge & Center" => "Samenvoegen & centreren",
"Merge Cells" => "Cellen samenvoegen",
"Merge Across" => "Rijen samenvoegen",
"Unmerge Cells" => "Samenvoeging opheffen",
"Fill Color" => "Opvulkleur",
"Font Color" => "Tekstkleur",
"Borders" => "Celranden",
"Top\nAlign" => "Boven\nuitlijnen",
"Middle\nAlign" => "Midden\nuitlijnen",
"Bottom\nAlign" => "Onder\nuitlijnen",
"Left" => "Links",
"Right" => "Rechts",
"Center" => "Centreren",
"Horizontal" => "Horizontaal",
"Vertical Text" => "Verticale tekst",
"Decrease Indent" => "Inspringing verkleinen",
"Increase Indent" => "Inspringing vergroten",
"Orientation" => "Richting",
"Page Layout|Orientation" => "Paginastand",
"Angle Counterclockwise" => "Tegen de klok in draaien",
"Angle Clockwise" => "Met de klok mee draaien",
"Rotate Text Up" => "Tekst omhoog draaien",
"Rotate Text Down" => "Tekst omlaag draaien",
"Accounting Number Format" => "Valutanotatie (financieel)",
"Percent Style" => "Procentnotatie",
"Comma Style" => "Notatie met scheidingstekens",
"Increase Decimal" => "Decimaal toevoegen",
"Decrease Decimal" => "Decimaal verwijderen",
"More Accounting Formats…" => "Meer boekhoudkundige notaties…",
"Conditional\nFormatting" => "Voorwaardelijke\nopmaak",
"Conditional Formatting" => "Voorwaardelijke opmaak",
"Format\nas Table" => "Opmaken\nals tabel",
"Cell\nStyles" => "Cel-\nstijlen",
"Format Cells…" => "Cellen opmaken…",
"Format Cell Alignment…" => "Celuitlijning…",
"Format\nPane" => "Opmaak-\nvenster",
"Format" => "Opmaak",
"Insert" => "Invoegen",
"Insert Cells…" => "Cellen invoegen…",
"Delete" => "Verwijderen",
"Delete Cells…" => "Cellen verwijderen…",
"Insert Sheet Rows" => "Bladrijen invoegen",
"Insert Sheet Columns" => "Bladkolommen invoegen",
"Delete Sheet Rows" => "Bladrijen verwijderen",
"Delete Sheet Columns" => "Bladkolommen verwijderen",
"Row Height…" => "Rijhoogte…",
"AutoFit Row Height" => "Rijhoogte automatisch aanpassen",
"Column Width…" => "Kolombreedte…",
"AutoFit Column Width" => "Kolombreedte automatisch aanpassen",
"Default Width…" => "Standaardkolombreedte…",
"Hide Rows" => "Rijen verbergen",
"Unhide Rows" => "Verborgen rijen tonen",
"Hide Columns" => "Kolommen verbergen",
"Unhide Columns" => "Verborgen kolommen tonen",
"Lock Cell" => "Cel vergrendelen",
"Clear" => "Wissen",
"Clear All" => "Alles wissen",
"Clear Formats" => "Opmaak wissen",
"Clear Contents" => "Celinhoud wissen",
"Clear Comments and Notes" => "Opmerkingen en notities wissen",
"Clear Hyperlinks" => "Hyperlinks wissen",
"AutoSum" => "AutoSom",
"AutoSum (⌘⇧T)" => "AutoSom (⌘⇧T)",
"Flash\nFill" => "Automatisch\ninvullen",
"Flash Fill" => "Automatisch invullen",
"Fill" => "Vullen",
"Clear Print Area" => "Afdrukbereik wissen",
"Find &\nSelect" => "Zoeken &\nselecteren",
"Find…" => "Zoeken…",
"Replace…" => "Vervangen…",
"Go To…" => "Ga naar…",
"Go To Special…" => "Ga naar speciaal…",
"PivotTable" => "Draaitabel",
"Recommended\nCharts" => "Aanbevolen\ngrafieken",
"Table" => "Tabel",
"Pictures" => "Afbeeldingen",
"Shapes" => "Vormen",
"Icons" => "Pictogrammen",
"Text\nBox" => "Tekst-\nvak",
"Comment" => "Opmerking",
"New\nComment" => "Nieuwe\nopmerking",
"New Note" => "Nieuwe notitie",
"Show/Hide Note" => "Notitie weergeven/verbergen",
"Header &\nFooter" => "Koptekst &\nvoettekst",
"Text to\nColumns" => "Tekst naar\nkolommen",
"Link" => "Link",
"Symbol" => "Symbool",
"Sparklines" => "Sparklines",
"Checkbox" => "Checkbox",
"Insert checkboxes in the selected cells" => "Checkboxes invoegen in de geselecteerde cellen",
"Header & Footer" => "Koptekst & voettekst",
"Draw with ink" => "Tekenen met inkt",
"Eraser" => "Gum",
"Ink to\nShape" => "Inkt naar\nvorm",
"Select\nObjects" => "Objecten\nselecteren",
"Themes" => "Thema's",
"Margins" => "Marges",
"Left Margin" => "Linkermarge",
"Right Margin" => "Rechtermarge",
"Top Margin" => "Bovenmarge",
"Bottom Margin" => "Ondermarge",
"Header Margin" => "Koptekstmarge",
"Footer Margin" => "Voettekstmarge",
"Size" => "Formaat",
"Print\nArea" => "Afdruk-\nbereik",
"Set Print Area" => "Afdrukbereik instellen",
"Breaks" => "Eindemarkeringen",
"Insert Page Break" => "Pagina-einde invoegen",
"Remove Page Break" => "Pagina-einde verwijderen",
"Reset All Page Breaks" => "Alle pagina-einden herstellen",
"Print\nTitles" => "Titels\nafdrukken",
"Sheet\nRight-to-Left" => "Blad van rechts\nnaar links",
"Sheet Right-to-Left" => "Blad van rechts naar links",
"Narrow" => "Smal",
"Wide" => "Breed",
"Normal" => "Normaal",
"Portrait" => "Staand",
"Landscape" => "Liggend",
"Custom Margins…" => "Aangepaste marges…",
"Insert\nFunction" => "Functie\ninvoegen",
"Name\nManager" => "Naam-\nbeheer",
"Define Name" => "Naam definiëren",
"Use in Formula" => "Gebruiken in formule",
"Create from Selection" => "Maken op basis van selectie",
"Trace Precedents" => "Broncellen aanwijzen",
"Trace Dependents" => "Doelcellen aanwijzen",
"Remove Arrows" => "Pijlen verwijderen",
"Show Formulas" => "Formules weergeven",
"Error Checking" => "Foutopsporing",
"Evaluate Formula" => "Formule evalueren",
"Watch Window" => "Bewakingsvenster",
"Calculation\nOptions" => "Berekenings-\nopties",
"Calculate Now" => "Nu berekenen",
"Calculate Sheet" => "Blad berekenen",
"Automatic" => "Automatisch",
"Automatic Except for Data Tables" => "Automatisch (geen gegevenstabellen)",
"Manual" => "Handmatig",
"Sort &\nFilter" => "Sorteren en\nfilteren",
"Sort" => "Sorteren",
"Sort A to Z" => "Sorteren van A naar Z",
"Sort Z to A" => "Sorteren van Z naar A",
"Custom Sort…" => "Aangepast sorteren…",
"Filter" => "Filteren",
"Reapply" => "Opnieuw toepassen",
"Get Data\n(Text/CSV)" => "Gegevens ophalen\n(tekst/CSV)",
"Remove\nDuplicates" => "Duplicaten\nverwijderen",
"Data\nValidation" => "Gegevens-\nvalidatie",
"Data Validation" => "Gegevensvalidatie",
"Data Validation…" => "Gegevensvalidatie…",
"Circle Invalid Data" => "Ongeldige gegevens omcirkelen",
"Clear Validation" => "Validatie wissen",
"Group" => "Groeperen",
"Ungroup" => "Groep opheffen",
"Show Detail" => "Details weergeven",
"Hide Detail" => "Details verbergen",
"Subtotal" => "Subtotaal",
"Data\nAnalysis" => "Gegevens-\nanalyse",
"Data Analysis" => "Gegevensanalyse",
"Solver" => "Solver",
"What-If\nAnalysis" => "Wat-als-\nanalyse",
"Data Table…" => "Gegevenstabel…",
"Scenario Manager…" => "Scenariobeheer…",
"Goal Seek…" => "Doelzoeken…",
"Forecast\nSheet" => "Prognose-\nblad",
"Spelling" => "Spelling",
"Check\nAccessibility" => "Toegankelijkheid\ncontroleren",
"Threaded Comments" => "Opmerkingen met threads",
"Show\nComments" => "Opmerkingen\nweergeven",
"Previous" => "Vorige",
"Next" => "Volgende",
"Previous Comment" => "Vorige opmerking",
"Next Comment" => "Volgende opmerking",
"Show All Notes" => "Alle notities weergeven",
"Convert to Comments" => "Converteren naar opmerkingen",
"Protect\nWorkbook" => "Werkmap\nbeveiligen",
"Allow Edit\nRanges" => "Bereiken bewerken\ntoestaan",
"Allow Edit Ranges" => "Bereiken bewerken toestaan",
"Unprotect\nSheet" => "Bladbeveiliging\nopheffen",
"Protect Sheet…" => "Blad beveiligen…",
"Comments" => "Opmerkingen",
"Notes" => "Notities",
"Page Break\nPreview" => "Pagina-einde-\nweergave",
"Page\nLayout" => "Pagina-\nindeling",
"Formula Bar" => "Formulebalk",
"Gridlines" => "Celrasterlijnen",
"Headings" => "Kopteksten",
"Zoom" => "Zoomen",
"100%" => "100%",
"Zoom to\nSelection" => "Inzoomen op\nselectie",
"Freeze\nPanes" => "Titels\nblokkeren",
"Freeze Panes" => "Titels blokkeren",
"Freeze Top Row" => "Bovenste rij vastzetten",
"Freeze First Column" => "Eerste kolom vastzetten",
"Unfreeze Panes" => "Titelblokkering opheffen",
"Dark Mode" => "Donkere modus",
"Display theme" => "Weergavethema",
"Animations" => "Animaties",
"Glide the selection outline to the cell you move to instead of jumping there" => {
"De selectierand naar de nieuwe cel laten glijden in plaats van erheen springen"
}
"System" => "Systeem",
"Light" => "Licht",
"Dark" => "Donker",
"Interface language" => "Weergavetaal",
"Interface size" => "Grootte van de interface",
"Auto" => "Automatisch",
"Drag to freeze columns" => "Sleep om kolommen vast te zetten",
"Drag to freeze rows" => "Sleep om rijen vast te zetten",
"Command\nPalette" => "Opdracht-\npalet",
"Agent\nControl" => "Agent-\nbesturing",
"Action\nJournal" => "Actie-\nlogboek",
"About\nGridCraft" => "Over\nGridCraft",
"Share" => "Delen",
"Add Chart\nElement" => "Grafiekelement\ntoevoegen",
"Change\nChart Type" => "Ander\ngrafiektype",
"Switch\nRow/Column" => "Rij/kolom\nomwisselen",
"Select\nData" => "Gegevens\nselecteren",
"Data Labels: None" => "Gegevenslabels: geen",
"Data Labels: Show" => "Gegevenslabels: weergeven",
"Legend: None" => "Legenda: geen",
"Legend: Bottom" => "Legenda: onder",
"Legend: Top" => "Legenda: boven",
"Legend: Right" => "Legenda: rechts",
"Gridlines: None" => "Rasterlijnen: geen",
"Gridlines: Show" => "Rasterlijnen: weergeven",
"Chart\nTitle" => "Grafiek-\ntitel",
"Delete\nChart" => "Grafiek\nverwijderen",
"Convert\nto Range" => "Converteren\nnaar bereik",
"Table\nStyles" => "Tabel-\nstijlen",
"Top 10 Items" => "Top 10-items",
"Top 10%" => "Top 10%",
"Bottom 10 Items" => "Onderste 10 items",
"Bottom 10%" => "Onderste 10%",
"Above Average" => "Boven het gemiddelde",
"Below Average" => "Onder het gemiddelde",
"Clear Rules from Entire Sheet" => "Regels van hele blad wissen",
"Clear Rules from Selected Cells" => "Regels van geselecteerde cellen wissen",
"Constants" => "Constanten",
"Data Bars" => "Gegevensbalken",
"Color Scales" => "Kleurenschalen",
"Icon Sets" => "Symboolsets",
"Home" => "Start",
"Draw" => "Tekenen",
"Page Layout" => "Pagina-indeling",
"Formulas" => "Formules",
"Data" => "Gegevens",
"Review" => "Controleren",
"View" => "Weergave",
"Automate" => "Automatiseren",
"Table Design" => "Tabelontwerp",
"Chart Design" => "Grafiekontwerp",
"Ready" => "Gereed",
"Enter" => "Invoeren",
"Edit" => "Bewerken",
"Point" => "Aanwijzen",
"Calculate" => "Berekenen",
"Select destination and press Enter or choose Paste" => "Selecteer de bestemming en druk op Enter of kies Plakken",
"General" => "Algemeen",
"Number" => "Getal",
"Currency" => "Valuta",
"Accounting" => "Boekhoudkundig",
"Date" => "Datum",
"Time" => "Tijd",
"Percentage" => "Percentage",
"Fraction" => "Breuk",
"Scientific" => "Wetenschappelijk",
"Text" => "Tekst",
"Special" => "Speciaal",
"Custom" => "Aangepast",
"Short Date" => "Korte datumnotatie",
"Long Date" => "Lange datumnotatie",
"More Number Formats…" => "Meer getalnotaties…",
"Financial" => "Financieel",
"Logical" => "Logisch",
"Date &\nTime" => "Datum en\ntijd",
"Lookup &\nReference" => "Zoeken en\nverwijzen",
"Math &\nTrig" => "Wiskunde en\ntrigonometrie",
"More\nFunctions" => "Meer\nfuncties",
"Sheet Options|View" => "Weergeven",
"Print" => "Afdrukken",
"Click to add data" => "Klik om gegevens toe te voegen",
"Add header" => "Koptekst toevoegen",
"Add footer" => "Voettekst toevoegen",
"(none)" => "(geen)",
"Header" => "Koptekst",
"Footer" => "Voettekst",
"Page\nNumber" => "Pagina-\nnummer",
"Number\nof Pages" => "Aantal\npagina's",
"Current\nDate" => "Huidige\ndatum",
"Current\nTime" => "Huidige\ntijd",
"File\nPath" => "Bestands-\npad",
"File\nName" => "Bestands-\nnaam",
"Sheet\nName" => "Blad-\nnaam",
"Go to\nHeader" => "Naar\nkoptekst",
"Go to\nFooter" => "Naar\nvoettekst",
"Page Number" => "Paginanummer",
"Number of Pages" => "Aantal pagina's",
"Current Date" => "Huidige datum",
"Current Time" => "Huidige tijd",
"File Path" => "Bestandspad",
"File Name" => "Bestandsnaam",
"Sheet Name" => "Bladnaam",
"Go to Header" => "Naar koptekst",
"Different First Page" => "Eerste pagina afwijkend",
"Different Odd & Even Pages" => "Even en oneven pagina's afwijkend",
"Go to Footer" => "Naar voettekst",
"Ruler" => "Liniaal",
"File" => "Bestand",
"Back" => "Terug",
"New" => "Nieuw",
"Open" => "Openen",
"Info" => "Info",
"Save" => "Opslaan",
"Save As" => "Opslaan als",
"Export" => "Exporteren",
"Close" => "Sluiten",
"Options" => "Opties",
"Blank workbook" => "Lege werkmap",
"Recent" => "Recent",
"No recent workbooks yet." => "Nog geen recente werkmappen.",
"More workbooks" => "Meer werkmappen",
"Modified" => "Gewijzigd",
"Not available" => "Niet beschikbaar",
"Just now" => "Zojuist",
"Yesterday" => "Gisteren",
"{n} min ago" => "{n} min. geleden",
"{n} h ago" => "{n} uur geleden",
"{n} days ago" => "{n} dagen geleden",
"{n} weeks ago" => "{n} weken geleden",
"{n} months ago" => "{n} maanden geleden",
"{n} years ago" => "{n} jaar geleden",
"Browse…" => "Bladeren…",
"Not saved yet" => "Nog niet opgeslagen",
"Location" => "Locatie",
"Sheets" => "Bladen",
"Protect Workbook" => "Werkmap beveiligen",
"Sheet structure is locked: sheets can't be added, moved, renamed or deleted." => {
"De bladstructuur is vergrendeld: bladen kunnen niet worden toegevoegd, verplaatst, hernoemd of verwijderd."
}
"Lock the sheet structure so sheets can't be added, moved, renamed or deleted." => {
"Vergrendel de bladstructuur zodat bladen niet kunnen worden toegevoegd, verplaatst, hernoemd of verwijderd."
}
"Properties" => "Eigenschappen",
"Title" => "Titel",
"Subject" => "Onderwerp",
"Author" => "Auteur",
"Company" => "Bedrijf",
"Keywords" => "Trefwoorden",
"Description" => "Beschrijving",
"No workbook is open." => "Er is geen werkmap geopend.",
"Save as type" => "Opslaan als type",
"Excel Workbook (*.xlsx)" => "Excel-werkmap (*.xlsx)",
"CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (door komma's gescheiden) (*.csv)",
"Web Page (*.html)" => "Webpagina (*.html)",
"PDF (*.pdf)" => "PDF (*.pdf)",
"Download" => "Downloaden",
"A CSV file, web page or PDF is a copy: the workbook keeps its own file." => {
"Een CSV-bestand, webpagina of PDF is een kopie: de werkmap behoudt haar eigen bestand."
}
"Save the workbook under another name or in another folder." => "De werkmap onder een andere naam of in een andere map opslaan.",
"Print Active Sheets" => "Actieve bladen afdrukken",
"Print Entire Workbook" => "Hele werkmap afdrukken",
"Fit Sheet on One Page" => "Blad op één pagina passen",
"Page Setup…" => "Pagina-instelling…",
"Page {page} of {pages}" => "Pagina {page} van {pages}",
"Nothing to print." => "Niets om af te drukken.",
"Previous page" => "Vorige pagina",
"Next page" => "Volgende pagina",
"Create PDF" => "PDF maken",
"Save the sheet as a PDF document that keeps its page layout." => "Het blad opslaan als PDF-document met behoud van de pagina-indeling.",
"Change File Type" => "Bestandstype wijzigen",
"CSV (Comma delimited)" => "CSV (door komma's gescheiden)",
"Save the active sheet as comma-separated text." => "Het actieve blad opslaan als door komma's gescheiden tekst.",
"Web Page (.html)" => "Webpagina (.html)",
"Save the workbook as a web page." => "De werkmap opslaan als webpagina.",
"Options|General" => "Algemeen",
"Options|Save" => "Opslaan",
"Show formula bar" => "Formulebalk weergeven",
"Enable AutoComplete for cell values" => "Automatisch aanvullen van celwaarden inschakelen",
"Save .xlsx workbooks automatically after every change" => ".xlsx-werkmappen na elke wijziging automatisch opslaan",
"Workbook calculation" => "Werkmapberekening",
"Enable iterative calculation" => "Iteratieve berekening inschakelen",
"Calculation settings are saved with the workbook." => "Berekeningsinstellingen worden bij de werkmap opgeslagen.",
"Cut" => "Knippen",
"Copy" => "Kopiëren",
"Insert…" => "Invoegen…",
"Delete…" => "Verwijderen…",
"Filter by Selected Cell's Value" => "Filteren op waarde van geselecteerde cel",
"New Comment" => "Nieuwe opmerking",
"Pick From Drop-down List…" => "Kiezen uit keuzelijst…",
"Define Name…" => "Naam definiëren…",
"Link…" => "Link…",
"Hide" => "Verbergen",
"Unhide" => "Zichtbaar maken",
"Cancel" => "Annuleren",
"Expand formula bar" => "Formulebalk uitvouwen",
"Insert Function" => "Functie invoegen",
"$ English (United States)" => "$ Engels (Verenigde Staten)",
"Add Chart Element" => "Grafiekelement toevoegen",
"Align Left" => "Links uitlijnen",
"Align Right" => "Rechts uitlijnen",
"Bottom Align" => "Onder uitlijnen",
"Calculate Now (F9)" => "Nu berekenen (F9)",
"Calculate Sheet (⇧F9)" => "Blad berekenen (⇧F9)",
"Calculation Options" => "Berekeningsopties",
"Cell Styles" => "Celstijlen",
"Change Chart Type" => "Ander grafiektype",
"Check Accessibility" => "Toegankelijkheid controleren",
"Clear Filter" => "Filter wissen",
"Column or Bar" => "Kolom of staaf",
"Comments pane" => "Opmerkingenvenster",
"Convert the last ink stroke to a shape" => "De laatste inktstreek omzetten in een vorm",
"Convert to Range" => "Converteren naar bereik",
"Custom Sort" => "Aangepast sorteren",
"Delete Comment" => "Opmerking verwijderen",
"Delete Sheet" => "Blad verwijderen",
"Delete chart" => "Grafiek verwijderen",
"Down" => "Omlaag",
"Edit chart title" => "Grafiektitel bewerken",
"Erase ink strokes" => "Inktstreken wissen",
"Every command run in this session (replayable)" => "Elke opdracht die in deze sessie is uitgevoerd (opnieuw af te spelen)",
"Filter (⌘⇧F)" => "Filteren (⌘⇧F)",
"Find & Select" => "Zoeken & selecteren",
"Flash Fill (⌘E)" => "Automatisch invullen (⌘E)",
"Forecast Sheet" => "Prognoseblad",
"Format Chart pane" => "Venster Grafiek opmaken",
"Format as Table" => "Opmaken als tabel",
"Hide Sheet" => "Blad verbergen",
"Hierarchy & more" => "Hiërarchie en meer",
"Highlighter" => "Markeerstift",
"How agents drive GridCraft (MCP / control channel)" => "Hoe agents GridCraft besturen (MCP / besturingskanaal)",
"Import a text or CSV file" => "Een tekst- of CSV-bestand importeren",
"Insert\nSlicer" => "Gegevensfilter\ninvoegen",
"Insert Function (⇧F3)" => "Functie invoegen (⇧F3)",
"Insert Link (⌘K)" => "Link invoegen (⌘K)",
"Insert Sheet" => "Blad invoegen",
"Insert Slicer" => "Gegevensfilter invoegen",
"Insert a picture" => "Een afbeelding invoegen",
"Insert a slicer to filter a table" => "Een gegevensfilter invoegen om een tabel te filteren",
"Insert an icon" => "Een pictogram invoegen",
"Line or Area" => "Lijn of vlak",
"Macros" => "Macro's",
"Macros and scripts in this workbook (Alt+F8)" => "Macro's en scripts in deze werkmap (Alt+F8)",
"Middle Align" => "Midden uitlijnen",
"More commands" => "Meer opdrachten",
"Move or Copy Sheet…" => "Blad verplaatsen of kopiëren…",
"Name Manager" => "Naambeheer",
"Page Breaks" => "Pagina-einden",
"Paper Size" => "Papierformaat",
"Paste (⌘V)" => "Plakken (⌘V)",
"Pen\nBlack" => "Pen\nzwart",
"Pen\nBlue" => "Pen\nblauw",
"Pen\nRed" => "Pen\nrood",
"Pie or Doughnut" => "Taart of ring",
"Print Area" => "Afdrukbereik",
"Print Titles" => "Titels afdrukken",
"Protect\nSheet" => "Blad\nbeveiligen",
"Protect Sheet" => "Blad beveiligen",
"Protect Workbook structure" => "Werkmapstructuur beveiligen",
"Recommended Charts" => "Aanbevolen grafieken",
"Redo (⌘Y)" => "Opnieuw (⌘Y)",
"Remove Duplicates" => "Duplicaten verwijderen",
"Rename Sheet" => "Blad hernoemen",
"Save (⌘S)" => "Opslaan (⌘S)",
"Scatter or Bubble" => "Punten of bellen",
"Search and run any command" => "Een opdracht zoeken en uitvoeren",
"Search commands (⌘⇧Space)" => "Opdrachten zoeken (⌘⇧Spatie)",
"Select Data" => "Gegevens selecteren",
"Select and move ink and shapes" => "Inkt en vormen selecteren en verplaatsen",
"Series…" => "Reeks…",
"Share: export or save a copy" => "Delen: exporteren of een kopie opslaan",
"Show Formulas (⌃`)" => "Formules weergeven (⌃`)",
"Slicer" => "Gegevensfilter",
"Sort & Filter" => "Sorteren en filteren",
"Spelling (F7)" => "Spelling (F7)",
"Statistic" => "Statistisch",
"Switch Row/Column" => "Rij/kolom omwisselen",
"Table (⌘T)" => "Tabel (⌘T)",
"Table Styles" => "Tabelstijlen",
"Text Box" => "Tekstvak",
"Text to Columns" => "Tekst naar kolommen",
"Top Align" => "Boven uitlijnen",
"Undo (⌘Z)" => "Ongedaan maken (⌘Z)",
"Undo list" => "Ongedaan maken-lijst",
"Unhide Sheet…" => "Blad zichtbaar maken…",
"Up" => "Omhoog",
"Version, contributors and the AI models that helped" => "Versie, bijdragers en de AI-modellen die hielpen",
"Watch\nWindow" => "Bewakings-\nvenster",
"What-If Analysis" => "Wat-als-analyse",
"Workbook\nStatistics" => "Werkmap-\nstatistieken",
"Workbook Statistics" => "Werkmapstatistieken",
"Zoom to 100%" => "Zoomen naar 100%",
"Zoom to Selection" => "Inzoomen op selectie",
"Zoom…" => "Zoomen…",
"£ English (United Kingdom)" => "£ Engels (Verenigd Koninkrijk)",
"¥ Japanese" => "¥ Japans",
"€ Euro" => "€ Euro",
"New sheet (⇧F11)" => "Nieuw blad (⇧F11)",
"Next sheet" => "Volgend blad",
"Previous sheet" => "Vorig blad",
"Zoom In" => "Inzoomen",
"Zoom Out" => "Uitzoomen",
"Dismiss" => "Negeren",
_ => return None,
})
}
+1
View File
@@ -137,6 +137,7 @@ fn translated_options_headings_show_no_context_prefix() {
for (code, headings, prefixed, (view, view_prefixed)) in [
("fr", ["Général", "Enregistrer"], ["Options|Général", "Options|Enregistrer"], ("Affichage", "Options de la feuille|Affichage")),
("sr", ["Opšte", "Sačuvaj"], ["Opcije|Opšte", "Opcije|Sačuvaj"], ("Prikaz", "Opcije lista|Prikaz")),
("nl", ["Algemeen", "Opslaan"], ["Opties|Algemeen", "Opties|Opslaan"], ("Weergeven", "Bladopties|Weergeven")),
] {
let mut h = harness(Services::default());
h.state_mut().run("app.language.set", serde_json::json!({"language": code})).unwrap();
+3 -2
View File
@@ -1,6 +1,6 @@
# Localization parity
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-19 · **Change:** minor (defined-name length limit counts characters, so long Arabic names are accepted; Table names are limited to 255 characters; right-to-left sheets in `.xls` files open right-to-left; text boxes and shapes keep right-to-left paragraph direction through XLSX save; Save as Web Page and copied HTML keep right-to-left; French and Serbian `context|label` translations no longer show the context) · **Target:** Microsoft Excel (Microsoft 365), Excel for Mac 16.113.4
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-20 · **Change:** minor (Dutch interface language; defined-name length limit counts characters, so long Arabic names are accepted; Table names are limited to 255 characters; right-to-left sheets in `.xls` files open right-to-left; text boxes and shapes keep right-to-left paragraph direction through XLSX save; Save as Web Page and copied HTML keep right-to-left; French and Serbian `context|label` translations no longer show the context) · **Target:** Microsoft Excel (Microsoft 365), Excel for Mac 16.113.4
Per-language status against Excel, which ships its UI in dozens of languages (Windows language
packs cover 100+), with localized function names, argument separators, number and date formats,
@@ -61,7 +61,7 @@ separators, number/date formats, machine translation with agent review, and scri
| Korean | ko | 266 (~12%) | no | Hangul via the CJK fallback; IME unverified | no | menus only | 6–10 h |
| Vietnamese | vi | 0 (0%) | no | Latin with stacked diacritics: unverified | no | none | 6–10 h |
Other shipped languages: Russian (ru) and German (de), 266 labels each (~12%), menus only.
Other shipped languages: Russian (ru) and German (de), 266 labels each (~12%), menus only; Dutch (nl), 518 labels (~24%): ribbon, context menus, File view, dialog titles and the Options page.
**Total:** catalog work 10–20 h + languages 92–144 h ≈ **100–165 h**. Parallelizes almost fully
once the catalog covers dialogs and commands. **Needs a human:** native-speaker review of every
@@ -83,6 +83,7 @@ language (none so far) and of localized function names.
| Date | Change | Summary |
|---|---|---|
| 2026-10-20 | minor | Dutch (nl) interface catalog (`i18n/nl.rs`, 518 labels, ~24%): every key the other catalogs translate; `nl-NL`, `nl-BE` locale tags resolve to Dutch |
| 2026-10-19 | minor | Defined-name length counts characters, not bytes: Arabic names up to 255 letters are accepted, and Create from Selection keeps long Arabic headers |
| 2026-10-19 | minor | Table names are limited to 255 Unicode characters |
| 2026-10-19 | minor | Right-to-left sheets in legacy `.xls` files (common in older Arabic workbooks) open right-to-left |