mirror of
https://github.com/storytold/gridcraft.git
synced 2026-10-24 10:46:50 -06:00
Merge PR #2061: i18n: Dutch (nl) interface language
Conflicts: - crates/ui-egui/src/i18n.rs: language registration lines kept from both sides (Language::ALL has 17 entries). - ROADMAP.md: one Last updated line naming both changes; both progress-log rows kept. - docs/localization-parity.md: one Last updated line naming both changes; both revision rows kept.
This commit is contained in:
+4
-2
@@ -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-20 · **Change:** minor (the Japanese catalog covers the dialogs, messages and menus) · **Target:** Microsoft Excel (Microsoft 365)
|
||||
> **Last reviewed:** 2026-10-11 · **Last updated:** 2026-10-20 · **Change:** minor (the Japanese catalog covers the dialogs, messages and menus; 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.
|
||||
@@ -113,7 +113,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
|
||||
|
||||
@@ -135,6 +135,7 @@ Ranked; estimates in Opus 5.5 agent-hours. Detail and the full beta-gate list in
|
||||
| Date | What landed |
|
||||
|---|---|
|
||||
| 2026-10-20 | Japanese interface catalog covers every key the Brazilian Portuguese catalog translates: the 398-label shared core plus 545 dialog, message, Backstage and menu strings (943 total, ~43% of ~2,200). A test parses `pt.rs`'s source, so the two catalogs stay in step |
|
||||
| 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) |
|
||||
@@ -196,6 +197,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) |
|
||||
|
||||
@@ -68,3 +68,7 @@ sync_github_name = false
|
||||
|
||||
[people.Shnrqpdr]
|
||||
sync_github_name = true
|
||||
|
||||
[people.Stefanfra]
|
||||
real_name = "Stefan Fransen"
|
||||
sync_github_name = true
|
||||
|
||||
@@ -18,6 +18,7 @@ mod it;
|
||||
mod ja;
|
||||
mod ko;
|
||||
mod pl;
|
||||
mod nl;
|
||||
mod pt;
|
||||
mod ru;
|
||||
mod sr;
|
||||
@@ -46,11 +47,12 @@ pub enum Language {
|
||||
It,
|
||||
Uk,
|
||||
Vi,
|
||||
Nl,
|
||||
}
|
||||
|
||||
impl Language {
|
||||
pub const ALL: [Self; 16] = [
|
||||
Self::En, Self::Es, Self::El, Self::Zh, Self::Ja, Self::Ko, Self::Ru, Self::PtBr, Self::De, Self::Cs, Self::Fr, Self::Sr, Self::Pl, Self::It, Self::Uk, Self::Vi,
|
||||
pub const ALL: [Self; 17] = [
|
||||
Self::En, Self::Es, Self::El, Self::Zh, Self::Ja, Self::Ko, Self::Ru, Self::PtBr, Self::De, Self::Cs, Self::Fr, Self::Sr, Self::Pl, Self::It, Self::Uk, Self::Vi, Self::Nl,
|
||||
];
|
||||
|
||||
/// The language's own name, shown in the switcher.
|
||||
@@ -72,6 +74,7 @@ impl Language {
|
||||
Self::It => "Italiano",
|
||||
Self::Uk => "Українська",
|
||||
Self::Vi => "Tiếng Việt",
|
||||
Self::Nl => "Nederlands",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,6 +97,7 @@ impl Language {
|
||||
Self::It => "it",
|
||||
Self::Uk => "uk",
|
||||
Self::Vi => "vi",
|
||||
Self::Nl => "nl",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,6 +123,7 @@ impl Language {
|
||||
"it" => Some(Self::It),
|
||||
"uk" => Some(Self::Uk),
|
||||
"vi" => Some(Self::Vi),
|
||||
"nl" => Some(Self::Nl),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -162,6 +167,7 @@ impl Language {
|
||||
Self::It => it::translate(text),
|
||||
Self::Uk => uk::translate(text),
|
||||
Self::Vi => vi::translate(text),
|
||||
Self::Nl => nl::translate(text),
|
||||
};
|
||||
translated.unwrap_or_else(|| text.rsplit_once('|').map_or(text, |(_, label)| label))
|
||||
}
|
||||
@@ -232,6 +238,7 @@ mod tests {
|
||||
assert!(it::translate(english).is_some_and(|text| !text.is_empty()), "missing Italian: {english}");
|
||||
assert!(uk::translate(english).is_some_and(|text| !text.is_empty()), "missing Ukrainian: {english}");
|
||||
assert!(vi::translate(english).is_some_and(|text| !text.is_empty()), "missing Vietnamese: {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"), "数据");
|
||||
@@ -283,6 +290,10 @@ mod tests {
|
||||
assert_eq!(Language::Vi.tr("Sheet1!A1"), "Sheet1!A1");
|
||||
assert_eq!(Language::Vi.tr("Page Layout|Orientation"), "Hướng giấy");
|
||||
assert_eq!(Language::Vi.tr("Orientation"), "Hướng chữ");
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -369,6 +380,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]
|
||||
@@ -422,6 +436,9 @@ mod tests {
|
||||
assert_eq!(Language::parse("uk"), Some(Language::Uk));
|
||||
assert_eq!(Language::from_tag("vi-VN"), Some(Language::Vi));
|
||||
assert_eq!(Language::parse("vi"), Some(Language::Vi));
|
||||
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]
|
||||
|
||||
@@ -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 blokkeren",
|
||||
"Freeze First Column" => "Eerste kolom blokkeren",
|
||||
"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 te blokkeren",
|
||||
"Drag to freeze rows" => "Sleep om rijen te blokkeren",
|
||||
"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,
|
||||
})
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Localization parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-20 · **Change:** minor (the Japanese catalog covers the dialogs, messages and menus) · **Target:** Microsoft Excel (Microsoft 365), Excel for Mac 16.113.4
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-20 · **Change:** minor (the Japanese catalog covers the dialogs, messages and menus; Dutch interface language) · **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,
|
||||
@@ -63,7 +63,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 | 398 (~18%) | no | Latin with stacked diacritics: unverified | no | menus, File view | 5–9 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
|
||||
@@ -87,6 +87,7 @@ language (none so far) and of localized function names.
|
||||
|---|---|---|
|
||||
| 2026-10-20 | minor | Japanese catalog (`i18n/ja.rs`) covers every key the Brazilian Portuguese catalog translates: the 398-label shared core moved verbatim plus 545 dialog, message, Backstage and menu strings — 943 keys, ~12% → ~43%. A test parses `pt.rs`'s source, so the two catalogs can't drift apart again. Portuguese re-measured at 943 (was 923) |
|
||||
| 2026-10-15 | minor | Italian catalog (`i18n/it.rs`, 971 entries, ~44%): every key the Brazilian Portuguese catalog translates plus the PivotTable Fields pane strings; `it` locale tags (it-IT, it-CH…) resolve to Italian. Labels follow Excel's Italian terminology; native-speaker review still pending |
|
||||
| 2026-10-20 | minor | Dutch (nl) interface catalog (`i18n/nl.rs`, 518 labels, ~24%): the shared key set every language must cover (ribbon, context menus, File view, dialog titles, Options page), matching the German, French and Czech catalogs; `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 |
|
||||
|
||||
Reference in New Issue
Block a user