i18n: Czech interface language (cs)

Add a Czech table with all 266 interface labels (the same key set as
Korean, Russian, Simplified Chinese and Brazilian Portuguese) and
register `cs` in Language: name "Čeština", code `cs`, system tags
`cs-*` / `cs_*`, appended to the end of the switcher. The language
command help, its error text and the snapshot example usage list `cs`.

Like the other ribbon tables, it covers the ribbon, sheet tabs and
widgets; dialogs, menus and messages stay English. Formulas stay
canonical English: Czech uses the English formula locale like every
non-Spanish language.

Translated from the meaning of each English label (clean-room, not from
another product's localization), with AI assistance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Losminek 2026-10-11 13:35:04 +02:00
parent 9f896c1249
commit c8ce333a74
5 changed files with 283 additions and 4 deletions

View File

@ -1,7 +1,7 @@
//! Renders the whole GridCraft window offscreen (wgpu, no window) to a PNG.
//!
//! `cargo run --release -p gridcraft-ui-egui --example snapshot -- [--sample sales] [--in file.xlsx]
//! [--size 1440x900] [--scale 2] [--cmd 'id={json}']... [--tab Insert] [--dark] [--language en|zh|ja|ko|ru|pt]
//! [--size 1440x900] [--scale 2] [--cmd 'id={json}']... [--tab Insert] [--dark] [--language en|zh|ja|ko|ru|pt|cs]
//! [--dialog 'name={json}'] out.png`
use gridcraft_engine::Session;

View File

@ -174,7 +174,7 @@ pub fn handle(app: &mut SheetApp, ctx: &egui::Context, method: &str, p: &Json) -
("view.theme", "Display Theme", ""),
("view.zoom100", "100%", ""),
("ui.dialog", "Open Dialog", ""),
("app.language.set", "Interface Language", "{language: \"en\"|\"zh\"|\"ja\"|\"ko\"|\"ru\"|\"pt\"} (alias: code)"),
("app.language.set", "Interface Language", "{language: \"en\"|\"zh\"|\"ja\"|\"ko\"|\"ru\"|\"pt\"|\"cs\"} (alias: code)"),
("app.language.english", "Interface Language: English", ""),
("app.language.japanese", "Interface Language: Japanese", ""),
] {

View File

@ -9,6 +9,7 @@
use serde::{Deserialize, Serialize};
mod cs;
mod ko;
mod pt;
mod ru;
@ -26,10 +27,11 @@ pub enum Language {
Ru,
#[serde(rename = "pt")]
PtBr,
Cs,
}
impl Language {
pub const ALL: [Self; 7] = [Self::En, Self::Es, Self::Zh, Self::Ja, Self::Ko, Self::Ru, Self::PtBr];
pub const ALL: [Self; 8] = [Self::En, Self::Es, Self::Zh, Self::Ja, Self::Ko, Self::Ru, Self::PtBr, Self::Cs];
/// The language's own name, shown in the switcher.
pub fn name(self) -> &'static str {
@ -41,6 +43,7 @@ impl Language {
Self::Ko => "한국어",
Self::Ru => "Русский",
Self::PtBr => "Português (Brasil)",
Self::Cs => "Čeština",
}
}
@ -54,6 +57,7 @@ impl Language {
Self::Ko => "ko",
Self::Ru => "ru",
Self::PtBr => "pt",
Self::Cs => "cs",
}
}
@ -70,6 +74,7 @@ impl Language {
"ko" => Some(Self::Ko),
"ru" => Some(Self::Ru),
"pt" => Some(Self::PtBr),
"cs" => Some(Self::Cs),
_ => None,
}
}
@ -103,6 +108,7 @@ impl Language {
Self::Ko => ko::translate(text),
Self::Ru => ru::translate(text),
Self::PtBr => pt::translate(text),
Self::Cs => cs::translate(text),
};
translated.unwrap_or_else(|| text.rsplit_once('|').map_or(text, |(_, label)| label))
}

View File

@ -0,0 +1,273 @@
//! Czech translations for the interface strings in i18n.rs.
pub(super) fn translate(text: &str) -> Option<&'static str> {
Some(match text {
"Paste" => "Vložit",
"Paste Values" => "Vložit hodnoty",
"Paste Formulas" => "Vložit vzorce",
"Paste Formatting" => "Vložit formátování",
"Transpose" => "Transponovat",
"Paste Link" => "Vložit propojení",
"Paste Special…" => "Vložit jinak…",
"Cut (⌘X)" => "Vyjmout (⌘X)",
"Copy (⌘C)" => "Kopírovat (⌘C)",
"Format Painter (double-click to keep it on)" => "Štětec formátu (dvojklikem zůstane zapnutý)",
"Bold (⌘B)" => "Tučné (⌘B)",
"Italic (⌘I)" => "Kurzíva (⌘I)",
"Underline (⌘U)" => "Podtržení (⌘U)",
"Double Underline" => "Dvojité podtržení",
"Strikethrough" => "Přeškrtnutí",
"Underline" => "Podtržení",
"Increase Font Size" => "Zvětšit písmo",
"Decrease Font Size" => "Zmenšit písmo",
"Wrap Text" => "Zalamovat text",
"Merge & Center" => "Sloučit a vycentrovat",
"Merge Cells" => "Sloučit buňky",
"Merge Across" => "Sloučit po řádcích",
"Unmerge Cells" => "Zrušit sloučení buněk",
"Fill Color" => "Barva výplně",
"Font Color" => "Barva písma",
"Borders" => "Ohraničení",
"Top\nAlign" => "Zarovnat\nnahoru",
"Middle\nAlign" => "Zarovnat\ndoprostřed",
"Bottom\nAlign" => "Zarovnat\ndolů",
"Left" => "Doleva",
"Right" => "Doprava",
"Center" => "Zarovnat na střed",
"Horizontal" => "Vodorovně",
"Vertical Text" => "Svislý text",
"Decrease Indent" => "Zmenšit odsazení",
"Increase Indent" => "Zvětšit odsazení",
"Orientation" => "Orientace textu",
"Page Layout|Orientation" => "Orientace",
"Angle Counterclockwise" => "Natočit proti směru hodin",
"Angle Clockwise" => "Natočit po směru hodin",
"Rotate Text Up" => "Otočit text nahoru",
"Rotate Text Down" => "Otočit text dolů",
"Accounting Number Format" => "Účetnický formát čísla",
"Percent Style" => "Styl procent",
"Comma Style" => "Styl s oddělovačem tisíců",
"Increase Decimal" => "Přidat desetinné místo",
"Decrease Decimal" => "Odebrat desetinné místo",
"More Accounting Formats…" => "Další účetnické formáty…",
"Conditional\nFormatting" => "Podmíněné\nformátování",
"Conditional Formatting" => "Podmíněné formátování",
"Format\nas Table" => "Formátovat\njako tabulku",
"Cell\nStyles" => "Styly\nbuněk",
"Format Cells…" => "Formát buněk…",
"Format Cell Alignment…" => "Zarovnání buněk…",
"Format\nPane" => "Podokno\nformátu",
"Format" => "Formát",
"Insert" => "Vložit",
"Insert Cells…" => "Vložit buňky…",
"Delete" => "Odstranit",
"Delete Cells…" => "Odstranit buňky…",
"Insert Sheet Rows" => "Vložit řádky listu",
"Insert Sheet Columns" => "Vložit sloupce listu",
"Delete Sheet Rows" => "Odstranit řádky listu",
"Delete Sheet Columns" => "Odstranit sloupce listu",
"Row Height…" => "Výška řádku…",
"AutoFit Row Height" => "Přizpůsobit výšku řádku",
"Column Width…" => "Šířka sloupce…",
"AutoFit Column Width" => "Přizpůsobit šířku sloupce",
"Default Width…" => "Výchozí šířka…",
"Hide Rows" => "Skrýt řádky",
"Unhide Rows" => "Zobrazit řádky",
"Hide Columns" => "Skrýt sloupce",
"Unhide Columns" => "Zobrazit sloupce",
"Lock Cell" => "Zamknout buňku",
"Clear" => "Vymazat",
"Clear All" => "Vymazat vše",
"Clear Formats" => "Vymazat formáty",
"Clear Contents" => "Vymazat obsah",
"Clear Comments and Notes" => "Vymazat komentáře a poznámky",
"Clear Hyperlinks" => "Vymazat hypertextové odkazy",
"AutoSum" => "Automatický\nsoučet",
"AutoSum (⌘⇧T)" => "Automatický součet (⌘⇧T)",
"Flash\nFill" => "Dynamické\ndoplňování",
"Flash Fill" => "Dynamické doplňování",
"Fill" => "Vyplnit",
"Clear Print Area" => "Vymazat oblast tisku",
"Find &\nSelect" => "Najít a\nvybrat",
"Find…" => "Najít…",
"Replace…" => "Nahradit…",
"Go To…" => "Přejít na…",
"Go To Special…" => "Přejít na jinak…",
"PivotTable" => "Kontingenční\ntabulka",
"Recommended\nCharts" => "Doporučené\ngrafy",
"Table" => "Tabulka",
"Pictures" => "Obrázky",
"Shapes" => "Obrazce",
"Icons" => "Ikony",
"Text\nBox" => "Textové\npole",
"Comment" => "Komentář",
"New\nComment" => "Nový\nkomentář",
"New Note" => "Nová poznámka",
"Show/Hide Note" => "Zobrazit/skrýt poznámku",
"Header &\nFooter" => "Záhlaví a\nzápatí",
"Text to\nColumns" => "Text do\nsloupců",
"Link" => "Odkaz",
"Symbol" => "Symbol",
"Sparklines" => "Minigrafy",
"Header & Footer" => "Záhlaví a zápatí",
"Draw with ink" => "Kreslit od ruky",
"Eraser" => "Guma",
"Ink to\nShape" => "Rukopis\nna obrazec",
"Select\nObjects" => "Vybrat\nobjekty",
"Themes" => "Motivy",
"Margins" => "Okraje",
"Size" => "Velikost",
"Print\nArea" => "Oblast\ntisku",
"Set Print Area" => "Nastavit oblast tisku",
"Breaks" => "Konce",
"Insert Page Break" => "Vložit konec stránky",
"Remove Page Break" => "Odebrat konec stránky",
"Reset All Page Breaks" => "Obnovit všechny konce stránek",
"Print\nTitles" => "Tisk\nnázvů",
"Narrow" => "Úzké",
"Wide" => "Široké",
"Normal" => "Normální",
"Portrait" => "Na výšku",
"Landscape" => "Na šířku",
"Custom Margins…" => "Vlastní okraje…",
"Insert\nFunction" => "Vložit\nfunkci",
"Name\nManager" => "Správce\nnázvů",
"Define Name" => "Definovat název",
"Use in Formula" => "Použít ve vzorci",
"Create from Selection" => "Vytvořit z výběru",
"Trace Precedents" => "Sledovat předchůdce",
"Trace Dependents" => "Sledovat následníky",
"Remove Arrows" => "Odebrat šipky",
"Show Formulas" => "Zobrazit vzorce",
"Error Checking" => "Kontrola chyb",
"Evaluate Formula" => "Vyhodnotit vzorec",
"Watch Window" => "Okno sledování",
"Calculation\nOptions" => "Možnosti\nvýpočtu",
"Calculate Now" => "Přepočítat",
"Calculate Sheet" => "Přepočítat list",
"Automatic" => "Automaticky",
"Automatic Except for Data Tables" => "Automaticky kromě tabulek dat",
"Manual" => "Ručně",
"Sort &\nFilter" => "Seřadit a\nfiltrovat",
"Sort" => "Seřadit",
"Sort A to Z" => "Seřadit od A do Z",
"Sort Z to A" => "Seřadit od Z do A",
"Custom Sort…" => "Vlastní řazení…",
"Filter" => "Filtr",
"Reapply" => "Použít znovu",
"Get Data\n(Text/CSV)" => "Načíst data\n(text/CSV)",
"Remove\nDuplicates" => "Odebrat\nduplicity",
"Data\nValidation" => "Ověření\ndat",
"Data Validation" => "Ověření dat",
"Data Validation…" => "Ověření dat…",
"Circle Invalid Data" => "Zakroužkovat neplatná data",
"Clear Validation" => "Vymazat ověření",
"Group" => "Seskupit",
"Ungroup" => "Zrušit seskupení",
"Subtotal" => "Mezisoučet",
"What-If\nAnalysis" => "Citlivostní\nanalýza",
"Data Table…" => "Tabulka dat…",
"Scenario Manager…" => "Správce scénářů…",
"Goal Seek…" => "Hledat řešení…",
"Spelling" => "Pravopis",
"Check\nAccessibility" => "Zkontrolovat\npřístupnost",
"Threaded Comments" => "Komentáře ve vláknech",
"Show\nComments" => "Zobrazit\nkomentáře",
"Protect\nWorkbook" => "Zamknout\nsešit",
"Unprotect\nSheet" => "Odemknout\nlist",
"Protect Sheet…" => "Zamknout list…",
"Comments" => "Komentáře",
"Notes" => "Poznámky",
"Page Break\nPreview" => "Náhled\nkonců stránek",
"Page\nLayout" => "Rozložení\nstránky",
"Formula Bar" => "Řádek vzorců",
"Gridlines" => "Mřížka",
"Headings" => "Záhlaví",
"Zoom" => "Lupa",
"100%" => "100 %",
"Zoom to\nSelection" => "Přiblížit\nna výběr",
"Freeze\nPanes" => "Ukotvit\npříčky",
"Freeze Panes" => "Ukotvit příčky",
"Freeze Top Row" => "Ukotvit horní řádek",
"Freeze First Column" => "Ukotvit první sloupec",
"Unfreeze Panes" => "Uvolnit příčky",
"Dark Mode" => "Tmavý režim",
"Display theme" => "Vzhled",
"System" => "Podle systému",
"Light" => "Světlý",
"Dark" => "Tmavý",
"Interface language" => "Jazyk rozhraní",
"Command\nPalette" => "Paleta\npříkazů",
"Agent\nControl" => "Řízení\nagenty",
"Action\nJournal" => "Deník\nakcí",
"About\nGridCraft" => "O aplikaci\nGridCraft",
"Share" => "Sdílet",
"Add Chart\nElement" => "Přidat prvek\ngrafu",
"Change\nChart Type" => "Změnit\ntyp grafu",
"Switch\nRow/Column" => "Prohodit\nřádky/sloupce",
"Data Labels: None" => "Popisky dat: žádné",
"Data Labels: Show" => "Popisky dat: zobrazit",
"Legend: None" => "Legenda: žádná",
"Legend: Bottom" => "Legenda: dole",
"Legend: Top" => "Legenda: nahoře",
"Legend: Right" => "Legenda: vpravo",
"Gridlines: None" => "Mřížka: žádná",
"Gridlines: Show" => "Mřížka: zobrazit",
"Chart\nTitle" => "Název\ngrafu",
"Delete\nChart" => "Odstranit\ngraf",
"Convert\nto Range" => "Převést\nna rozsah",
"Table\nStyles" => "Styly\ntabulky",
"Top 10 Items" => "Prvních 10 položek",
"Top 10%" => "Prvních 10 %",
"Bottom 10 Items" => "Posledních 10 položek",
"Bottom 10%" => "Posledních 10 %",
"Above Average" => "Nad průměrem",
"Below Average" => "Pod průměrem",
"Clear Rules from Entire Sheet" => "Vymazat pravidla z celého listu",
"Clear Rules from Selected Cells" => "Vymazat pravidla z vybraných buněk",
"Constants" => "Konstanty",
"Data Bars" => "Datové pruhy",
"Color Scales" => "Barevné škály",
"Icon Sets" => "Sady ikon",
"Home" => "Domů",
"Draw" => "Kreslení",
"Page Layout" => "Rozložení stránky",
"Formulas" => "Vzorce",
"Data" => "Data",
"Review" => "Revize",
"View" => "Zobrazení",
"Automate" => "Automatizace",
"Table Design" => "Návrh tabulky",
"Chart Design" => "Návrh grafu",
"Ready" => "Připraveno",
"Enter" => "Zadávání",
"Edit" => "Úpravy",
"Point" => "Výběr odkazu",
"Calculate" => "Přepočítat",
"Select destination and press Enter or choose Paste" => "Vyberte cíl a stiskněte Enter nebo zvolte Vložit",
"General" => "Obecný",
"Number" => "Číslo",
"Currency" => "Měna",
"Accounting" => "Účetnický",
"Date" => "Datum",
"Time" => "Čas",
"Percentage" => "Procenta",
"Fraction" => "Zlomek",
"Scientific" => "Vědecký",
"Text" => "Text",
"Special" => "Speciální",
"Custom" => "Vlastní",
"Short Date" => "Krátké datum",
"Long Date" => "Dlouhé datum",
"More Number Formats…" => "Další formáty čísel…",
"Financial" => "Finanční",
"Logical" => "Logické",
"Date &\nTime" => "Datum a\nčas",
"Lookup &\nReference" => "Vyhledávání\na odkazy",
"Math &\nTrig" => "Matematika a\ntrigonometrie",
"More\nFunctions" => "Další\nfunkce",
"Sheet Options|View" => "Zobrazit",
"Print" => "Tisknout",
_ => return None,
})
}

View File

@ -328,7 +328,7 @@ impl SheetApp {
self.ui.language = l;
Ok(json!({"language": l}))
}
None => Err(format!("unknown language {code:?} (use \"en\", \"es\", \"zh\", \"ja\", \"ko\", \"ru\" or \"pt\")")),
None => Err(format!("unknown language {code:?} (use \"en\", \"es\", \"zh\", \"ja\", \"ko\", \"ru\", \"pt\" or \"cs\")")),
}
}
"app.language.english" => {