diff --git a/crates/ui-egui/src/i18n.rs b/crates/ui-egui/src/i18n.rs index 99774b837..9ecfdcc46 100644 --- a/crates/ui-egui/src/i18n.rs +++ b/crates/ui-egui/src/i18n.rs @@ -22,6 +22,7 @@ mod pt; mod ru; mod sr; mod zh; +mod uk; #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] @@ -42,11 +43,12 @@ pub enum Language { Sr, Pl, It, + Uk, } impl Language { - pub const ALL: [Self; 14] = [ - 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, + pub const ALL: [Self; 15] = [ + 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, ]; /// The language's own name, shown in the switcher. @@ -66,6 +68,7 @@ impl Language { Self::Sr => "Srpski", Self::Pl => "Polski", Self::It => "Italiano", + Self::Uk => "Українська", } } @@ -86,6 +89,7 @@ impl Language { Self::Sr => "sr", Self::Pl => "pl", Self::It => "it", + Self::Uk => "uk", } } @@ -109,6 +113,7 @@ impl Language { "sr" => Some(Self::Sr), "pl" => Some(Self::Pl), "it" => Some(Self::It), + "uk" => Some(Self::Uk), _ => None, } } @@ -150,6 +155,7 @@ impl Language { Self::Sr => sr::translate(text), Self::Pl => pl::translate(text), Self::It => it::translate(text), + Self::Uk => uk::translate(text), }; translated.unwrap_or_else(|| text.rsplit_once('|').map_or(text, |(_, label)| label)) } @@ -218,6 +224,7 @@ mod tests { assert!(sr::translate(english).is_some_and(|text| !text.is_empty()), "missing Serbian: {english}"); assert!(pl::translate(english).is_some_and(|text| !text.is_empty()), "missing Polish: {english}"); 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_eq!(Language::Ja.tr("Data"), "データ"); assert_eq!(Language::Zh.tr("Data"), "数据"); @@ -263,6 +270,8 @@ mod tests { assert_eq!(Language::It.tr("Freeze Panes"), "Blocca riquadri"); assert_eq!(Language::It.tr("Page Layout|Orientation"), "Orientamento"); assert_eq!(Language::It.tr("Orientation"), "Orientamento"); + assert_eq!(Language::Uk.tr("Data"), "Дані"); + assert_eq!(Language::Uk.tr("Sheet1!A1"), "Sheet1!A1"); assert_eq!(Language::parse("xx"), None); } @@ -398,6 +407,8 @@ mod tests { assert_eq!(Language::from_tag("it-IT"), Some(Language::It)); assert_eq!(Language::from_tag("it_CH.UTF-8"), Some(Language::It)); assert_eq!(Language::parse("it"), Some(Language::It)); + assert_eq!(Language::from_tag("uk-XX"), Some(Language::Uk)); + assert_eq!(Language::parse("uk"), Some(Language::Uk)); } #[test] diff --git a/crates/ui-egui/src/i18n/uk.rs b/crates/ui-egui/src/i18n/uk.rs index 389f3b68e..458bd912f 100644 --- a/crates/ui-egui/src/i18n/uk.rs +++ b/crates/ui-egui/src/i18n/uk.rs @@ -410,6 +410,579 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Workbook calculation" => "Обчислення в книзі", "Enable iterative calculation" => "Увімкнути ітеративні обчислення", "Calculation settings are saved with the workbook." => "Параметри обчислень зберігаються разом із книгою.", + "OK" => "OK", + "Cancel" => "Cancel", + "Don't Save" => "Don't Save", + "Open…" => "Open…", + "Show password" => "Show password", + "Start a new workbook" => "Start a new workbook", + "Household Budget" => "Household Budget", + "Quarterly Sales Dashboard" => "Quarterly Sales Dashboard", + "Gradebook" => "Gradebook", + "this workbook" => "this workbook", + "This workbook" => "This workbook", + "Do you want to save the changes you made to {title}?" => "Do you want to save the changes you made to {title}?", + "Save a copy as .{format}" => "Save a copy as .{format}", + "Select a chart first." => "Select a chart first.", + "Text Box" => "Text Box", + "Select Data" => "Select Data", + "Row Height" => "Row Height", + "Column Width" => "Column Width", + "Standard Width" => "Standard Width", + "Rename Sheet" => "Rename Sheet", + "Move or Copy" => "Move or Copy", + "Protect Sheet" => "Protect Sheet", + "Protect Structure and Windows" => "Protect Structure and Windows", + "Unprotect Workbook" => "Unprotect Workbook", + "Unprotect Sheet" => "Unprotect Sheet", + "Password" => "Password", + "Unhide" => "Unhide", + "Paste Special" => "Paste Special", + "Series" => "Series", + "New Comment" => "New Comment", + "Insert Hyperlink" => "Insert Hyperlink", + "Create Sparklines" => "Create Sparklines", + "Page Setup" => "Page Setup", + "Convert Text to Columns" => "Convert Text to Columns", + "Remove Duplicates" => "Remove Duplicates", + "Goal Seek" => "Goal Seek", + "Create Forecast Worksheet" => "Create Forecast Worksheet", + "Solver Parameters" => "Solver Parameters", + "Solver Results" => "Solver Results", + "Edit Name" => "Edit Name", + "New Name" => "New Name", + "Format Cells" => "Format Cells", + "Formula Builder" => "Formula Builder", + "Find and Replace" => "Find and Replace", + "Go To" => "Go To", + "Insert Calculated Field" => "Insert Calculated Field", + "Go To Special" => "Go To Special", + "Name Manager" => "Name Manager", + "Conditional Formatting Rules Manager" => "Conditional Formatting Rules Manager", + "Search Commands" => "Search Commands", + "Agent Control" => "Agent Control", + "About GridCraft" => "About GridCraft", + "Insert Chart" => "Insert Chart", + "Select Data Source" => "Select Data Source", + "Action Journal" => "Action Journal", + "Macros" => "Macros", + "Workbook Statistics" => "Workbook Statistics", + "Accessibility" => "Accessibility", + "Chart Title" => "Chart Title", + "Place Picture in Cell" => "Place Picture in Cell", + "Place Picture over Cells" => "Place Picture over Cells", + "Pick From List" => "Pick From List", + "Save a Copy" => "Save a Copy", + "Save Changes?" => "Save Changes?", + "Shift cells right" => "Shift cells right", + "Shift cells down" => "Shift cells down", + "Shift cells left" => "Shift cells left", + "Shift cells up" => "Shift cells up", + "Entire row" => "Entire row", + "Entire column" => "Entire column", + "Row height (pixels):" => "Row height (pixels):", + "Column width (characters):" => "Column width (characters):", + "Standard column width (pixels):" => "Standard column width (pixels):", + "Name:" => "Name:", + "Before sheet (position, 0 = first):" => "Before sheet (position, 0 = first):", + "Create a copy" => "Create a copy", + "Sheets: {sheets}" => "Sheets: {sheets}", + "Password (optional):" => "Password (optional):", + "Password:" => "Password:", + "Allow all users of this sheet to:" => "Allow all users of this sheet to:", + "Format cells" => "Format cells", + "Format columns" => "Format columns", + "Format rows" => "Format rows", + "Insert rows" => "Insert rows", + "Delete rows" => "Delete rows", + "Use AutoFilter" => "Use AutoFilter", + " (password, unlocked)" => " (password, unlocked)", + " (password)" => " (password)", + "No ranges yet." => "No ranges yet.", + "Ranges that stay editable when the sheet is protected:" => "Ranges that stay editable when the sheet is protected:", + "Action" => "Action", + "Modify" => "Modify", + "Unlock with password" => "Unlock with password", + "Title:" => "Title:", + "Refers to cells:" => "Refers to cells:", + "Range password:" => "Range password:", + "New title (Modify):" => "New title (Modify):", + "Remove the password (Modify)" => "Remove the password (Modify)", + "'{file}' is protected." => "'{file}' is protected.", + "Unhide sheet:" => "Unhide sheet:", + "Hidden: {sheets}" => "Hidden: {sheets}", + "All" => "All", + "Formulas (F)" => "Formulas (F)", + "Values (V)" => "Values (V)", + "Formats (T)" => "Formats (T)", + "Comments and notes (C)" => "Comments and notes (C)", + "Validation" => "Validation", + "All except borders" => "All except borders", + "Column widths" => "Column widths", + "Formulas and number formats" => "Formulas and number formats", + "Values and number formats" => "Values and number formats", + "Operation" => "Operation", + "Add" => "Add", + "Subtract" => "Subtract", + "Multiply" => "Multiply", + "Divide" => "Divide", + "Skip blanks" => "Skip blanks", + "Transpose (E)" => "Transpose (E)", + "Series in" => "Series in", + "Columns" => "Columns", + "Rows" => "Rows", + "Type" => "Type", + "Linear" => "Linear", + "Growth" => "Growth", + "Date unit" => "Date unit", + "Day" => "Day", + "Weekday" => "Weekday", + "Month" => "Month", + "Year" => "Year", + "Step value:" => "Step value:", + "Stop value:" => "Stop value:", + "Start a conversation:" => "Start a conversation:", + "Note:" => "Note:", + "Display:" => "Display:", + "Link to (web address, e-mail or Sheet!A1):" => "Link to (web address, e-mail or Sheet!A1):", + "ScreenTip:" => "ScreenTip:", + "Data Range:" => "Data Range:", + "Location Range:" => "Location Range:", + "Markers" => "Markers", + "Footer:" => "Footer:", + "Left margin (in):" => "Left margin (in):", + "Right margin (in):" => "Right margin (in):", + "Top margin (in):" => "Top margin (in):", + "Bottom margin (in):" => "Bottom margin (in):", + "Header (in):" => "Header (in):", + "Footer (in):" => "Footer (in):", + "Tab" => "Tab", + "Semicolon" => "Semicolon", + "Comma" => "Comma", + "Space" => "Space", + "Other:" => "Other:", + "Treat consecutive delimiters as one" => "Treat consecutive delimiters as one", + "Destination:" => "Destination:", + "My data has headers" => "My data has headers", + "Columns (blank = all, e.g. A,C):" => "Columns (blank = all, e.g. A,C):", + "Timeline range (blank: first column of the selection):" => "Timeline range (blank: first column of the selection):", + "Values range (blank: second column of the selection):" => "Values range (blank: second column of the selection):", + "Confidence interval" => "Confidence interval", + "Confidence level (%):" => "Confidence level (%):", + "Seasonality (auto, 0 for none, or a season length):" => "Seasonality (auto, 0 for none, or a season length):", + "Fill missing points using" => "Fill missing points using", + "Interpolation" => "Interpolation", + "Zeros" => "Zeros", + "Aggregate duplicates using" => "Aggregate duplicates using", + "Average" => "Average", + "Count" => "Count", + "CountA" => "CountA", + "Max" => "Max", + "Median" => "Median", + "Min" => "Min", + "Sum" => "Sum", + "Product" => "Product", + "Include forecast statistics" => "Include forecast statistics", + "Chart" => "Chart", + "Line chart" => "Line chart", + "Column chart" => "Column chart", + "At each change in (column letter):" => "At each change in (column letter):", + "Use function" => "Use function", + "Add subtotal to (columns, e.g. C,D):" => "Add subtotal to (columns, e.g. C,D):", + "Magnification" => "Magnification", + "Custom (%):" => "Custom (%):", + "Scope (Workbook or sheet name):" => "Scope (Workbook or sheet name):", + "Comment:" => "Comment:", + "Refers to:" => "Refers to:", + "Allow" => "Allow", + "Any value" => "Any value", + "Whole number" => "Whole number", + "Decimal" => "Decimal", + "List" => "List", + "Text length" => "Text length", + "between" => "between", + "not between" => "not between", + "equal to" => "equal to", + "not equal to" => "not equal to", + "greater than" => "greater than", + "less than" => "less than", + "greater than or equal to" => "greater than or equal to", + "less than or equal to" => "less than or equal to", + "Minimum / Source / Formula:" => "Minimum / Source / Formula:", + "Maximum:" => "Maximum:", + "Ignore blank" => "Ignore blank", + "In-cell dropdown" => "In-cell dropdown", + "Input message:" => "Input message:", + "Error style" => "Error style", + "Stop" => "Stop", + "Warning" => "Warning", + "Information" => "Information", + "Error message:" => "Error message:", + "Format cells that are (value):" => "Format cells that are (value):", + "and:" => "and:", + "Format cells that contain the text:" => "Format cells that contain the text:", + "Format cells that contain a date occurring:" => "Format cells that contain a date occurring:", + "Today" => "Today", + "Tomorrow" => "Tomorrow", + "In the last 7 days" => "In the last 7 days", + "Last week" => "Last week", + "This week" => "This week", + "Next week" => "Next week", + "Last month" => "Last month", + "This month" => "This month", + "Next month" => "Next month", + "Format values where this formula is true:" => "Format values where this formula is true:", + "with" => "with", + "Light Red Fill with Dark Red Text" => "Light Red Fill with Dark Red Text", + "Yellow Fill with Dark Yellow Text" => "Yellow Fill with Dark Yellow Text", + "Green Fill with Dark Green Text" => "Green Fill with Dark Green Text", + "Light Red Fill" => "Light Red Fill", + "Red Text" => "Red Text", + "Red Border" => "Red Border", + "Formula:" => "Formula:", + "Select" => "Select", + "Blanks" => "Blanks", + "Errors" => "Errors", + "Numbers" => "Numbers", + "Current region" => "Current region", + "Last cell" => "Last cell", + "Visible cells only" => "Visible cells only", + "Conditional formats" => "Conditional formats", + "Data validation" => "Data validation", + "Horizontal axis title:" => "Horizontal axis title:", + "Vertical axis title:" => "Vertical axis title:", + "No picture selected" => "No picture selected", + "Picture file path (PNG or JPEG):" => "Picture file path (PNG or JPEG):", + "Description (optional):" => "Description (optional):", + "Fits inside the selected cell and moves with its content." => "Fits inside the selected cell and moves with its content.", + "Choose a PNG or JPEG no larger than 16 MB." => "Choose a PNG or JPEG no larger than 16 MB.", + "About" => "About", + "Contributors" => "Contributors", + "Models" => "Models", + "Version {version}" => "Version {version}", + "Join the ArtCraft Discord" => "Join the ArtCraft Discord", + "This workbook has no scripts or macros." => "This workbook has no scripts or macros.", + "(unnamed)" => "(unnamed)", + "— VBA project (preserved, not run)" => "— VBA project (preserved, not run)", + "— 1 step" => "— 1 step", + "— {steps} steps" => "— {steps} steps", + "Alignment" => "Alignment", + "Font" => "Font", + "Border" => "Border", + "Format Cells|Fill" => "Fill", + "Protection" => "Protection", + "Category:" => "Category:", + "Sample" => "Sample", + "Type (custom format code):" => "Type (custom format code):", + "Vertical" => "Vertical", + "Justify" => "Justify", + "Center Across Selection" => "Center Across Selection", + "Distributed" => "Distributed", + "Top" => "Top", + "Bottom" => "Bottom", + "Indent" => "Indent", + "Orientation (degrees)" => "Orientation (degrees)", + "Wrap text" => "Wrap text", + "Shrink to fit" => "Shrink to fit", + "Bold" => "Bold", + "Italic" => "Italic", + "None" => "None", + "Single" => "Single", + "Double" => "Double", + "Single Accounting" => "Single Accounting", + "Double Accounting" => "Double Accounting", + "Superscript" => "Superscript", + "Subscript" => "Subscript", + "Color:" => "Color:", + "Outline" => "Outline", + "Diagonal ↘" => "Diagonal ↘", + "Diagonal ↗" => "Diagonal ↗", + "none" => "none", + "thin" => "thin", + "medium" => "medium", + "thick" => "thick", + "dashed" => "dashed", + "dotted" => "dotted", + "double" => "double", + "Background Color:" => "Background Color:", + "Locked" => "Locked", + "Hidden" => "Hidden", + "Search:" => "Search:", + "e.g. lookup, average, date" => "e.g. lookup, average, date", + "Date & Time" => "Date & Time", + "Lookup & Reference" => "Lookup & Reference", + "Math & Trig" => "Math & Trig", + "Statistical" => "Statistical", + "Engineering" => "Engineering", + "Database" => "Database", + "Compatibility" => "Compatibility", + "Web" => "Web", + "Cube" => "Cube", + "Add-in and Automation" => "Add-in and Automation", + "Find" => "Find", + "Replace" => "Replace", + "Find what:" => "Find what:", + "Replace with:" => "Replace with:", + "Match case" => "Match case", + "Match entire cell contents" => "Match entire cell contents", + "Within workbook" => "Within workbook", + "Replace All" => "Replace All", + "Find All" => "Find All", + "Find Next" => "Find Next", + "All done. We made {count} replacements." => "All done. We made {count} replacements.", + "{count} cell(s) found" => "{count} cell(s) found", + "Reference:" => "Reference:", + "Special…" => "Special…", + "My list has headers" => "My list has headers", + "Sort by" => "Sort by", + "Then by" => "Then by", + "Cell Values" => "Cell Values", + "Cell Color" => "Cell Color", + "A to Z" => "A to Z", + "Z to A" => "Z to A", + "+ Add Level" => "+ Add Level", + "New…" => "New…", + "Edit…" => "Edit…", + "Name" => "Name", + "Value" => "Value", + "Refers To" => "Refers To", + "Scope" => "Scope", + "Workbook" => "Workbook", + "No names defined" => "No names defined", + "Recommended Charts" => "Recommended Charts", + "All Charts" => "All Charts", + "Clustered Column" => "Clustered Column", + "Stacked Column" => "Stacked Column", + "100% Stacked Column" => "100% Stacked Column", + "Clustered Bar" => "Clustered Bar", + "Stacked Bar" => "Stacked Bar", + "100% Stacked Bar" => "100% Stacked Bar", + "Line" => "Line", + "Line with Markers" => "Line with Markers", + "Stacked Line" => "Stacked Line", + "Pie" => "Pie", + "Doughnut" => "Doughnut", + "Area" => "Area", + "Stacked Area" => "Stacked Area", + "Scatter" => "Scatter", + "Scatter with Lines" => "Scatter with Lines", + "Radar" => "Radar", + "Histogram" => "Histogram", + "Waterfall" => "Waterfall", + "Funnel" => "Funnel", + "Combo" => "Combo", + "Chart data range:" => "Chart data range:", + "Legend Entries (Series)" => "Legend Entries (Series)", + "Series{n}" => "Series{n}", + "Keep" => "Keep", + "Remove" => "Remove", + "Horizontal (Category) Axis Labels:" => "Horizontal (Category) Axis Labels:", + "There are no conditional formatting rules on this sheet." => "There are no conditional formatting rules on this sheet.", + "applies to" => "applies to", + "Type a command, e.g. freeze, chart, bold…" => "Type a command, e.g. freeze, chart, bold…", + "Set cell:" => "Set cell:", + "To value:" => "To value:", + "By changing cell:" => "By changing cell:", + "Goal Seeking found a solution: {value}" => "Goal Seeking found a solution: {value}", + "Analysis Tools" => "Analysis Tools", + "Anova: Single Factor" => "Anova: Single Factor", + "Correlation" => "Correlation", + "Covariance" => "Covariance", + "Descriptive Statistics" => "Descriptive Statistics", + "Exponential Smoothing" => "Exponential Smoothing", + "F-Test Two-Sample for Variances" => "F-Test Two-Sample for Variances", + "Moving Average" => "Moving Average", + "Rank and Percentile" => "Rank and Percentile", + "Regression" => "Regression", + "t-Test: Paired Two Sample for Means" => "t-Test: Paired Two Sample for Means", + "t-Test: Two-Sample Assuming Equal Variances" => "t-Test: Two-Sample Assuming Equal Variances", + "t-Test: Two-Sample Assuming Unequal Variances" => "t-Test: Two-Sample Assuming Unequal Variances", + "Output options" => "Output options", + "Output Range:" => "Output Range:", + "New Worksheet Ply:" => "New Worksheet Ply:", + "Grouped By:" => "Grouped By:", + "Labels in first row" => "Labels in first row", + "Input Range:" => "Input Range:", + "Variable 1 Range:" => "Variable 1 Range:", + "Variable 2 Range:" => "Variable 2 Range:", + "Summary statistics" => "Summary statistics", + "Confidence Level for Mean (%), blank for none:" => "Confidence Level for Mean (%), blank for none:", + "Kth Largest (blank for none):" => "Kth Largest (blank for none):", + "Kth Smallest (blank for none):" => "Kth Smallest (blank for none):", + "Bin Range (blank for automatic bins):" => "Bin Range (blank for automatic bins):", + "Pareto (sorted histogram)" => "Pareto (sorted histogram)", + "Cumulative Percentage" => "Cumulative Percentage", + "Alpha:" => "Alpha:", + "Input Y Range:" => "Input Y Range:", + "Input X Range:" => "Input X Range:", + "Constant is Zero" => "Constant is Zero", + "Confidence Level (%):" => "Confidence Level (%):", + "Residuals" => "Residuals", + "Standardized Residuals" => "Standardized Residuals", + "Normal Probability" => "Normal Probability", + "Interval:" => "Interval:", + "Standard Errors" => "Standard Errors", + "Damping factor:" => "Damping factor:", + "Hypothesized Mean Difference:" => "Hypothesized Mean Difference:", + "Set Objective:" => "Set Objective:", + "To:" => "To:", + "Value Of:" => "Value Of:", + "By Changing Variable Cells:" => "By Changing Variable Cells:", + "Subject to the Constraints:" => "Subject to the Constraints:", + "Make Unconstrained Variables Non-Negative" => "Make Unconstrained Variables Non-Negative", + "Select a Solving Method:" => "Select a Solving Method:", + "GRG Nonlinear" => "GRG Nonlinear", + "Solve" => "Solve", + "Keep Solver Solution" => "Keep Solver Solution", + "Restore Original Values" => "Restore Original Values", + "The spelling check is complete for the entire sheet." => "The spelling check is complete for the entire sheet.", + "Not in Dictionary ({cell}):" => "Not in Dictionary ({cell}):", + "Suggestions:" => "Suggestions:", + "(No suggestions)" => "(No suggestions)", + "Ignore Once" => "Ignore Once", + "Add to Dictionary" => "Add to Dictionary", + "Change" => "Change", + "Change All" => "Change All", + "$ English (United States)" => "$ English (United States)", + "Add Chart Element" => "Add Chart Element", + "Align Left" => "Align Left", + "Align Right" => "Align Right", + "Bottom Align" => "Bottom Align", + "Calculate Now (F9)" => "Calculate Now (F9)", + "Calculate Sheet (⇧F9)" => "Calculate Sheet (⇧F9)", + "Calculation Options" => "Calculation Options", + "Cell Styles" => "Cell Styles", + "Change Chart Type" => "Change Chart Type", + "Check Accessibility" => "Check Accessibility", + "Clear Filter" => "Clear Filter", + "Column or Bar" => "Column or Bar", + "Comments pane" => "Comments pane", + "Convert the last ink stroke to a shape" => "Convert the last ink stroke to a shape", + "Convert to Range" => "Convert to Range", + "Copy" => "Copy", + "Custom Sort" => "Custom Sort", + "Cut" => "Cut", + "Define Name…" => "Define Name…", + "Delete Comment" => "Delete Comment", + "Delete Sheet" => "Delete Sheet", + "Delete chart" => "Delete chart", + "Delete…" => "Delete…", + "Dismiss" => "Dismiss", + "Down" => "Down", + "Edit chart title" => "Edit chart title", + "Erase ink strokes" => "Erase ink strokes", + "Every command run in this session (replayable)" => "Every command run in this session (replayable)", + "Expand formula bar" => "Expand formula bar", + "Filter (⌘⇧F)" => "Filter (⌘⇧F)", + "Filter by Selected Cell's Value" => "Filter by Selected Cell's Value", + "Find & Select" => "Find & Select", + "Flash Fill (⌘E)" => "Flash Fill (⌘E)", + "Forecast Sheet" => "Forecast Sheet", + "Forecast end (date or number; blank: a third of the history):" => "Forecast end (date or number; blank: a third of the history):", + "Format Chart pane" => "Format Chart pane", + "Format as Table" => "Format as Table", + "Hide" => "Hide", + "Hide Sheet" => "Hide Sheet", + "Hierarchy & more" => "Hierarchy & more", + "Highlighter" => "Highlighter", + "How agents drive GridCraft (MCP / control channel)" => "How agents drive GridCraft (MCP / control channel)", + "Import a text or CSV file" => "Import a text or CSV file", + "Insert Function" => "Insert Function", + "Insert Function (⇧F3)" => "Insert Function (⇧F3)", + "Insert Link (⌘K)" => "Insert Link (⌘K)", + "Insert Sheet" => "Insert Sheet", + "Insert Slicer" => "Insert Slicer", + "Insert a picture" => "Insert a picture", + "Insert a slicer to filter a table" => "Insert a slicer to filter a table", + "Insert an icon" => "Insert an icon", + "Insert…" => "Insert…", + "Line or Area" => "Line or Area", + "Link…" => "Link…", + "Macros and scripts in this workbook (Alt+F8)" => "Macros and scripts in this workbook (Alt+F8)", + "Middle Align" => "Middle Align", + "More commands" => "More commands", + "Move or Copy Sheet…" => "Move or Copy Sheet…", + "New sheet (⇧F11)" => "New sheet (⇧F11)", + "Next sheet" => "Next sheet", + "Page Breaks" => "Page Breaks", + "Paper Size" => "Paper Size", + "Paste (⌘V)" => "Paste (⌘V)", + "Pick From Drop-down List…" => "Pick From Drop-down List…", + "Pie or Doughnut" => "Pie or Doughnut", + "Previous sheet" => "Previous sheet", + "Print Area" => "Print Area", + "Print Titles" => "Print Titles", + "Protect Workbook structure" => "Protect Workbook structure", + "Redo (⌘Y)" => "Redo (⌘Y)", + "Save (⌘S)" => "Save (⌘S)", + "Scatter or Bubble" => "Scatter or Bubble", + "Search and run any command" => "Search and run any command", + "Search commands (⌘⇧Space)" => "Search commands (⌘⇧Space)", + "Select and move ink and shapes" => "Select and move ink and shapes", + "Series…" => "Series…", + "Share: export or save a copy" => "Share: export or save a copy", + "Show Formulas (⌃`)" => "Show Formulas (⌃`)", + "Slicer" => "Slicer", + "Sort & Filter" => "Sort & Filter", + "Spelling (F7)" => "Spelling (F7)", + "Statistic" => "Statistic", + "Switch Row/Column" => "Switch Row/Column", + "Table (⌘T)" => "Table (⌘T)", + "Table Styles" => "Table Styles", + "Text to Columns" => "Text to Columns", + "The output range already holds data. Replace it with the report?" => "The output range already holds data. Replace it with the report?", + "Top Align" => "Top Align", + "Undo (⌘Z)" => "Undo (⌘Z)", + "Undo list" => "Undo list", + "Unhide Sheet…" => "Unhide Sheet…", + "Up" => "Up", + "Version, contributors and the AI models that helped" => "Version, contributors and the AI models that helped", + "What-If Analysis" => "What-If Analysis", + "Zoom In" => "Zoom In", + "Zoom Out" => "Zoom Out", + "Zoom to 100%" => "Zoom to 100%", + "Zoom to Selection" => "Zoom to Selection", + "Zoom…" => "Zoom…", + "£ English (United Kingdom)" => "£ English (United Kingdom)", + "¥ Japanese" => "¥ Japanese", + "€ Euro" => "€ Euro", + "Tab|Insert" => "Insert", + "AutoSave" => "AutoSave", + "Insert\nSlicer" => "Insert\nSlicer", + "Pen\nBlack" => "Pen\nBlack", + "Pen\nBlue" => "Pen\nBlue", + "Pen\nRed" => "Pen\nRed", + "Protect\nSheet" => "Protect\nSheet", + "Watch\nWindow" => "Watch\nWindow", + "Workbook\nStatistics" => "Workbook\nStatistics", + "Options|Editing" => "Editing", + "PivotTable Fields" => "PivotTable Fields", + "Choose fields to add to report:" => "Choose fields to add to report:", + "Use a field's menu to move it between areas:" => "Use a field's menu to move it between areas:", + "Filters" => "Filters", + "Values" => "Values", + "Move to Row Labels" => "Move to Row Labels", + "Move to Column Labels" => "Move to Column Labels", + "Move to Report Filter" => "Move to Report Filter", + "Move to Values" => "Move to Values", + "Summarize by Sum" => "Summarize by Sum", + "Summarize by Count" => "Summarize by Count", + "Summarize by Average" => "Summarize by Average", + "Summarize by Max" => "Summarize by Max", + "Summarize by Min" => "Summarize by Min", + "Show as No Calculation" => "Show as No Calculation", + "Show as % of Grand Total" => "Show as % of Grand Total", + "Show as Running Total" => "Show as Running Total", + "Show as Rank" => "Show as Rank", + "Group by Years" => "Group by Years", + "Group by Quarters" => "Group by Quarters", + "Group by Months" => "Group by Months", + "Remove Field" => "Remove Field", + "Refresh" => "Refresh", + "Calculated Field…" => "Calculated Field…", + "Report Layout" => "Report Layout", + "Compact" => "Compact", + "Tabular" => "Tabular", _ => return None, }) }