diff --git a/Cargo.lock b/Cargo.lock index 395518b46c..4901f9399a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -937,6 +937,29 @@ name = "craft-fonts-build" version = "0.1.0" source = "git+https://github.com/storytold/craft-libs?rev=aa84415bae3b765fef6b7ef42404f66ad1cff9d9#aa84415bae3b765fef6b7ef42404f66ad1cff9d9" +[[package]] +name = "craft-i18n" +version = "0.1.0" +source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d" +dependencies = [ + "fixed_decimal", + "icu_decimal", + "icu_locale_core", + "icu_locale_fallback", + "icu_normalizer", + "icu_plurals", + "icu_properties", + "icu_provider", + "icu_provider_adapters", + "icu_provider_blob", + "log", + "objc2-foundation 0.3.2", + "sys-locale", + "unicode-bidi", + "windows-registry", + "writeable", +] + [[package]] name = "craft-i18n" version = "0.1.0" @@ -1013,7 +1036,7 @@ version = "0.1.0" source = "git+https://github.com/storytold/craft-libs?rev=aa84415bae3b765fef6b7ef42404f66ad1cff9d9#aa84415bae3b765fef6b7ef42404f66ad1cff9d9" dependencies = [ "craft-fonts-build", - "craft-i18n", + "craft-i18n 0.1.0 (git+https://github.com/storytold/craft-libs?rev=aa84415bae3b765fef6b7ef42404f66ad1cff9d9)", "egui", "epaint", "js-sys", @@ -2298,6 +2321,7 @@ dependencies = [ name = "gridcraft-ui-egui" version = "0.19.1" dependencies = [ + "craft-i18n 0.1.0 (git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d)", "craft-ui", "craft-update", "craft-window", diff --git a/Cargo.toml b/Cargo.toml index debe801190..c1ae92a275 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,8 @@ craft-csv = { git = "https://github.com/storytold/craft-libs", rev = "bb57d422d0 # Excel 97-2003 (.xls, BIFF8) workbooks; `crates/xlsx/src/xls.rs` maps them onto the model. craft-xls = { git = "https://github.com/storytold/craft-libs", rev = "bb57d422d0bc842cbde430955825553ab7b976f4", version = "0.1.0" } +craft-i18n = { git = "https://github.com/storytold/craft-libs", rev = "1b34eba41e62138fc2438d2734523b302840b45d", version = "=0.1.0" } + # foundation thiserror = "2" serde = { version = "1", features = ["derive", "rc"] } diff --git a/NOTICE b/NOTICE index 64753f94ae..356fd88f1d 100644 --- a/NOTICE +++ b/NOTICE @@ -354,3 +354,29 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Polish formula names (crates/formula/src/input/pl.rs) +Source: https://github.com/PHPOffice/PhpSpreadsheet/tree/master/src/PhpSpreadsheet/Calculation/locale/pl + +MIT License + +Copyright (c) 2019-2026 PhpSpreadsheet Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index f2d9a930e4..af1403a702 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ cargo run --release -p gridcraft -- --sample sales --control 7979 # + JSON con cargo xtask ci # fmt, clippy, tests, assets, layering, wasm ``` -Choose Español under View → Interface language for [Spanish formula names, decimal commas, and semicolon arguments](docs/formula-input.md). +Under View → Interface language, choose Spanish, Russian, Polish, French, German, Italian, Brazilian Portuguese, or Turkish for [localized formula names, decimal commas, and semicolon arguments](docs/formula-input.md). Workbooks, clipboard exchange, and programmatic APIs retain canonical English syntax. ### Web diff --git a/apps/gridcraft-cli/src/check.rs b/apps/gridcraft-cli/src/check.rs index cfd583baf2..f1586856c5 100644 --- a/apps/gridcraft-cli/src/check.rs +++ b/apps/gridcraft-cli/src/check.rs @@ -283,7 +283,7 @@ fn collect_inputs(inputs: &[String]) -> Discovery { /// Returns false only when the global file budget stops traversal. `seen` holds the shallowest /// depth each directory was scanned from; `rescan` is set below a directory reached again from a /// shallower path (its depth-limited subtree may now fit), where already collected files are skipped. -#[cfg_attr(not(unix), allow(unused_mut))] +#[cfg_attr(not(unix), allow(unused_mut, clippy::only_used_in_recursion))] fn walk(dir: &Path, depth: usize, mut rescan: bool, out: &mut Discovery, seen: &mut std::collections::HashMap<(u64, u64), usize>) -> bool { // A directory is visited once by identity (dev+inode on unix) unless reached from a shallower // path: several links to the same directory are aliases, not exponential branches of the scan diff --git a/apps/gridcraft-cli/tests/it/sandbox.rs b/apps/gridcraft-cli/tests/it/sandbox.rs index 19861f8d8c..181368ade9 100644 --- a/apps/gridcraft-cli/tests/it/sandbox.rs +++ b/apps/gridcraft-cli/tests/it/sandbox.rs @@ -105,6 +105,7 @@ fn a_confined_program_reads_only_what_it_is_given() { } #[test] +#[cfg(unix)] fn a_launch_whose_check_fails_runs_nothing() { // A run that says it is already confined and isn't finds the canary readable and must refuse. // On macOS that is the second stage started without `sandbox-exec`; on Linux the launcher never diff --git a/apps/gridcraft-web/src/web.rs b/apps/gridcraft-web/src/web.rs index 1108c4c11b..9802abbe8b 100644 --- a/apps/gridcraft-web/src/web.rs +++ b/apps/gridcraft-web/src/web.rs @@ -82,7 +82,10 @@ pub fn start() { let browser = gridcraft_ui_egui::i18n::Language::system(); if !matches!( browser, - gridcraft_ui_egui::i18n::Language::Zh | gridcraft_ui_egui::i18n::Language::Ja | gridcraft_ui_egui::i18n::Language::Ko + gridcraft_ui_egui::i18n::Language::Zh + | gridcraft_ui_egui::i18n::Language::ZhTw + | gridcraft_ui_egui::i18n::Language::Ja + | gridcraft_ui_egui::i18n::Language::Ko ) { app.ui.language = browser; } diff --git a/apps/gridcraft/src/main.rs b/apps/gridcraft/src/main.rs index f05b421dfc..1e73b83d2d 100644 --- a/apps/gridcraft/src/main.rs +++ b/apps/gridcraft/src/main.rs @@ -35,7 +35,7 @@ impl eframe::App for App { #[cfg(target_os = "macos")] { if self.2.is_none() && std::env::var_os("GRIDCRAFT_NO_NATIVE_MENU").is_none() { - self.2 = Some(native_menu::NativeMenu::install(ctx)); + self.2 = Some(native_menu::NativeMenu::install(ctx, self.0.ui.language)); } if let Some(m) = &mut self.2 { m.poll(&mut self.0, ctx, self.1.focused_viewport()); @@ -240,6 +240,17 @@ fn icon() -> Option { Some(egui::IconData { width: img.width(), height: img.height(), rgba: img.into_raw() }) } +/// Creates the desktop's initial blank book after preferences load; supplied documents are kept. +fn ensure_startup_workbook(app: &mut SheetApp) { + let language = app.ui.language; + if app.session.documents().is_empty() + && let Err(error) = app.run("file.new", json!({"bookPrefix": language.tr("Book"), "sheetPrefix": language.tr("Sheet")})) + { + log::warn!("new workbook: {error}"); + } +} + +/// Starts the desktop application with persisted preferences, localized new-document names and native services. fn main() -> eframe::Result<()> { // A confined launcher run (`gridcraft_sandbox::launch_command`) comes before everything else: // it opens no window, writes no log, and becomes the program it confines. @@ -329,10 +340,8 @@ fn main() -> eframe::Result<()> { app.start_update_check(); let control_port = control_port; load_prefs(&mut app); - // Stamp the startup workbook's author from the persisted user name. - if app.session.documents().is_empty() { - app.session.new_workbook(); - } + // Stamp the localized startup workbook's author from the persisted user name. + ensure_startup_workbook(&mut app); app.after_engine(); // Show warnings from the sample. // Files named on the command line (a double-click on Windows and Linux) open as File › Open // opens them: a password-protected one asks for its password, and errors are shown, not @@ -462,3 +471,26 @@ mod packaging_tests { } } } + +#[cfg(test)] +mod startup_tests { + /// Saved interface language applies on launch, while existing documents are never renamed or replaced. + #[test] + fn startup_workbook_uses_loaded_language_and_keeps_existing_documents() { + let mut app = gridcraft_ui_egui::SheetApp::new(gridcraft_engine::Session::new(), Default::default()); + app.ui.language = gridcraft_ui_egui::i18n::Language::Ru; + super::ensure_startup_workbook(&mut app); + assert_eq!(app.session.active().unwrap().title, "Книга1"); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().name, "Лист1"); + super::ensure_startup_workbook(&mut app); + assert_eq!(app.session.documents().len(), 1); + let mut session = gridcraft_engine::Session::new(); + session.new_workbook_named("Existing", "Data"); + let mut app = gridcraft_ui_egui::SheetApp::new(session, Default::default()); + app.ui.language = gridcraft_ui_egui::i18n::Language::Ru; + super::ensure_startup_workbook(&mut app); + assert_eq!(app.session.documents().len(), 1); + assert_eq!(app.session.active().unwrap().title, "Existing1"); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().name, "Data1"); + } +} diff --git a/apps/gridcraft/src/native_menu.rs b/apps/gridcraft/src/native_menu.rs index 04139297d6..956d02835e 100644 --- a/apps/gridcraft/src/native_menu.rs +++ b/apps/gridcraft/src/native_menu.rs @@ -1,9 +1,12 @@ //! macOS: the native menu bar (File, Edit, View, Insert, Format, Tools, Data, Window, Help), as -//! a desktop spreadsheet has on the Mac. Items run the same commands as the ribbon. +//! a desktop spreadsheet has on the Mac. Items run the same commands as the ribbon. Titles are in +//! the interface language and follow it when it changes. +use std::cell::Cell; use std::str::FromStr; use std::sync::mpsc::{Receiver, channel}; +use gridcraft_ui_egui::i18n::Language; use gridcraft_ui_egui::{OpenWindow, SheetApp}; use muda::accelerator::Accelerator; use muda::{CheckMenuItem, Menu, MenuEvent, MenuItem, PredefinedMenuItem, Submenu}; @@ -84,7 +87,7 @@ fn tree() -> Vec<(&'static str, Vec)> { ], ), ( - "Insert", + "Tab|Insert", vec![ ("Cells…", "dialog:insertCells", None), ("Rows", "home.insertRows", None), @@ -129,7 +132,8 @@ fn tree() -> Vec<(&'static str, Vec)> { ], ), ( - "Tools", + // Excel for Mac's name for it differs from the ribbon's Tools in some languages. + "menu|Tools", vec![ ("Spelling…", "dialog:spelling", None), ("Workbook Statistics", "dialog:statistics", None), @@ -199,6 +203,29 @@ pub struct NativeMenu { /// The Window menu's window items and what they last showed. window_items: Vec, windows: Vec, + /// Every entry with a title, and its English text (the catalog key). + titled: Vec<(Titled, &'static str)>, + /// The language the titles are in. + language: Cell, +} + +/// A menu entry whose title follows the interface language. +enum Titled { + Item(MenuItem), + Check(CheckMenuItem), + Sub(Submenu), + Predefined(PredefinedMenuItem), +} + +impl Titled { + fn set_text(&self, text: &str) { + match self { + Titled::Item(i) => i.set_text(text), + Titled::Check(i) => i.set_text(text), + Titled::Sub(i) => i.set_text(text), + Titled::Predefined(i) => i.set_text(text), + } + } } /// Menu id of the Window menu item that brings workbook `doc` forward. @@ -220,49 +247,65 @@ fn select_theme(app: &mut SheetApp, id: &str) -> bool { } impl NativeMenu { - pub fn install(ctx: &egui::Context) -> NativeMenu { + pub fn install(ctx: &egui::Context, language: Language) -> NativeMenu { + let tr = |key: &str| language.tr(key).to_owned(); + let mut titled: Vec<(Titled, &'static str)> = Vec::new(); let menu = Menu::new(); let app_menu = Submenu::new("GridCraft", true); - let about = MenuItem::with_id("dialog:about", "About GridCraft", true, None); + let about = MenuItem::with_id("dialog:about", tr("About GridCraft"), true, None); + let services = PredefinedMenuItem::services(Some(&tr("Services"))); + let hide = PredefinedMenuItem::hide(Some(&tr("Hide GridCraft"))); + let hide_others = PredefinedMenuItem::hide_others(Some(&tr("Hide Others"))); + let show_all = PredefinedMenuItem::show_all(Some(&tr("Show All"))); + let quit = MenuItem::with_id(QUIT, tr("Quit GridCraft"), true, Accelerator::from_str("CMD+Q").ok()); let _ = app_menu.append_items(&[ &about, &PredefinedMenuItem::separator(), - &PredefinedMenuItem::services(None), + &services, &PredefinedMenuItem::separator(), - &PredefinedMenuItem::hide(None), - &PredefinedMenuItem::hide_others(None), - &PredefinedMenuItem::show_all(None), + &hide, + &hide_others, + &show_all, &PredefinedMenuItem::separator(), - &MenuItem::with_id(QUIT, "Quit GridCraft", true, Accelerator::from_str("CMD+Q").ok()), + &quit, ]); + titled.push((Titled::Item(about), "About GridCraft")); + titled.push((Titled::Item(quit), "Quit GridCraft")); + for (item, key) in [(services, "Services"), (hide, "Hide GridCraft"), (hide_others, "Hide Others"), (show_all, "Show All")] { + titled.push((Titled::Predefined(item), key)); + } let _ = menu.append(&app_menu); let mut theme_items = Vec::new(); let mut window_menu = None; for (title, entries) in tree() { - let sub = Submenu::new(title, true); + let sub = Submenu::new(tr(title), true); for (label, id, acc) in entries { if label == "-" { let _ = sub.append(&PredefinedMenuItem::separator()); continue; } if id == "view.theme" { - let themes = Submenu::new(label, true); + let themes = Submenu::new(tr(label), true); for (mode, label) in [("system", "System"), ("light", "Light"), ("dark", "Dark")] { - let item = CheckMenuItem::with_id(format!("theme:{mode}"), label, true, false, None); + let item = CheckMenuItem::with_id(format!("theme:{mode}"), tr(label), true, false, None); let _ = themes.append(&item); - theme_items.push((mode, item)); + theme_items.push((mode, item.clone())); + titled.push((Titled::Check(item), label)); } let _ = sub.append(&themes); + titled.push((Titled::Sub(themes), label)); continue; } let accel = acc.and_then(|a| Accelerator::from_str(a).ok()); - let item = MenuItem::with_id(id, label, true, accel); + let item = MenuItem::with_id(id, tr(label), true, accel); let _ = sub.append(&item); + titled.push((Titled::Item(item), label)); } let _ = menu.append(&sub); if title == "Window" { - window_menu = Some(sub); + window_menu = Some(sub.clone()); } + titled.push((Titled::Sub(sub), title)); } menu.init_for_nsapp(); // NSApp's windowsMenu is where macOS adds Move & Resize, Fill and Center, the targets of the @@ -277,7 +320,16 @@ impl NativeMenu { let _ = tx.send(e); ctx.request_repaint(); })); - NativeMenu { _menu: menu, events: rx, theme_items, window_menu, window_items: Vec::new(), windows: Vec::new() } + NativeMenu { + _menu: menu, + events: rx, + theme_items, + window_menu, + window_items: Vec::new(), + windows: Vec::new(), + titled, + language: Cell::new(language), + } } /// Keeps the Window menu's list of open windows (title, unsaved bullet, active check) in @@ -315,6 +367,14 @@ impl NativeMenu { /// Runs the chosen menu items. Commands go to the active window, the most recently focused; /// `viewport` is its egui viewport, for the items that act on its input. pub fn poll(&mut self, app: &mut SheetApp, ctx: &egui::Context, viewport: egui::ViewportId) { + // The interface language changed (View › Interface Language): retitle the menus. + let language = app.ui.language; + if language != self.language.get() { + self.language.set(language); + for (entry, key) in &self.titled { + entry.set_text(language.tr(key)); + } + } while let Ok(ev) = self.events.try_recv() { let id = ev.id.as_ref().to_string(); if id == QUIT { diff --git a/apps/gridcraft/tests/mac_menu_appkit.rs b/apps/gridcraft/tests/mac_menu_appkit.rs index ca1eef5098..1c2ce314ed 100644 --- a/apps/gridcraft/tests/mac_menu_appkit.rs +++ b/apps/gridcraft/tests/mac_menu_appkit.rs @@ -19,7 +19,7 @@ fn main() { nsapp.finishLaunching(); let ctx = egui::Context::default(); - let mut menu = native_menu::NativeMenu::install(&ctx); + let mut menu = native_menu::NativeMenu::install(&ctx, gridcraft_ui_egui::i18n::Language::En); let bar = nsapp.mainMenu().expect("a main menu"); let tops: Vec = (0..bar.numberOfItems()).filter_map(|i| bar.itemAtIndex(i)?.submenu()).map(|m| m.title().to_string()).collect(); @@ -37,6 +37,14 @@ fn main() { let last = windows_menu.itemAtIndex(windows_menu.numberOfItems() - 1).expect("a Window menu item"); assert_eq!(last.title().to_string(), open[0].label(), "the Window menu lists the open workbook"); + // A contextual menu title remains a noun on a language switch, and refreshes back to English. + for (language, expected) in [("ru", "Вставка"), ("en", "Insert")] { + app.run("app.language.set", serde_json::json!({"language": language})).unwrap(); + menu.poll(&mut app, &ctx, egui::ViewportId::ROOT); + let insert = bar.itemAtIndex(4).unwrap().submenu().unwrap(); + assert_eq!(insert.title().to_string(), expected); + } + println!("mac_menu_appkit: ok"); } diff --git a/contributors/people.toml b/contributors/people.toml index 395aecf6e8..2f079915a9 100644 --- a/contributors/people.toml +++ b/contributors/people.toml @@ -111,5 +111,8 @@ sync_github_name = true [people.maxm11] sync_github_name = true +[people.reeeji] +sync_github_name = true + [people.RockerHX] sync_github_name = true diff --git a/crates/chart/src/lib.rs b/crates/chart/src/lib.rs index f4e2895fe6..bf31bf7121 100644 --- a/crates/chart/src/lib.rs +++ b/crates/chart/src/lib.rs @@ -26,7 +26,7 @@ use serde::{Deserialize, Serialize}; pub use axis::{Scale, format_number, nice_scale}; pub use raster::rasterize; pub use render::{Swatch, legend_entries, render, supports_trendline}; -pub use resolve::{default_palette, has_volatile_series, resolve, series_color, series_plot_kind}; +pub use resolve::{default_palette, has_volatile_series, resolve, resolve_with_series_names, series_color, series_plot_kind}; pub use sparkline::render_sparkline; /// Straight (non-premultiplied) RGBA colour. diff --git a/crates/chart/src/resolve.rs b/crates/chart/src/resolve.rs index e7663e0d9b..1e65d8bb4b 100644 --- a/crates/chart/src/resolve.rs +++ b/crates/chart/src/resolve.rs @@ -478,6 +478,13 @@ pub fn series_plot_kind(chart: &Chart, i: usize) -> ChartKind { /// values (scatter/bubble), bubble sizes, number formats and colours (explicit, else the /// default palette derived from the workbook theme accents). pub fn resolve(wb: &Workbook, sheet: usize, chart: &Chart) -> ChartData { + resolve_with_series_names(wb, sheet, chart, |i| format!("Series{}", i + 1)) +} + +/// Resolves chart data using `generated_name` only when a series name resolves to empty. +/// Explicit names, including literal names resembling a generated label, remain unchanged. +/// The callback receives the zero-based series index; canonical callers can keep [`resolve`]. +pub fn resolve_with_series_names(wb: &Workbook, sheet: usize, chart: &Chart, generated_name: impl Fn(usize) -> String) -> ChartData { let numeric_x = matches!(chart.kind, ChartKind::Scatter | ChartKind::ScatterLines | ChartKind::Bubble); let mut series = Vec::new(); let mut categories: Option> = None; @@ -486,7 +493,7 @@ pub fn resolve(wb: &Workbook, sheet: usize, chart: &Chart) -> ChartData { let mut category_levels = Vec::new(); for (i, s) in chart.series.iter().take(MAX_SERIES).enumerate() { let values = nums(wb, sheet, &s.values, limit); - let name = s.name.as_deref().map(|n| series_name(wb, sheet, n)).filter(|n| !n.is_empty()).unwrap_or_else(|| format!("Series{}", i + 1)); + let name = s.name.as_deref().map(|n| series_name(wb, sheet, n)).filter(|n| !n.is_empty()).unwrap_or_else(|| generated_name(i)); let color = s.color.as_ref().and_then(|c| c.resolve(&wb.theme)).map(|[r, g, b]| [r, g, b, 0xFF]).unwrap_or_else(|| series_color(&wb.theme, i)); let kind = effective_kind(chart.kind, s.kind, i); diff --git a/crates/engine/src/cmd.rs b/crates/engine/src/cmd.rs index 37e9cd082d..2a3ff160ad 100644 --- a/crates/engine/src/cmd.rs +++ b/crates/engine/src/cmd.rs @@ -253,6 +253,18 @@ fn test_commands() -> std::sync::MutexGuard<'static, Vec<&'static CommandSpec>> pub(crate) fn bad(cmd: &str, msg: impl Into) -> EngineError { EngineError::BadParams { cmd: cmd.into(), msg: msg.into() } } +/// Validates common generated-name limits; sheet prefixes also reject a leading quote. +pub(crate) fn check_generated_prefix(command: &str, prefix: &str, sheet: bool) -> Result<()> { + if prefix.trim().is_empty() + || prefix.chars().count() > 16 + || prefix.chars().any(|c| c.is_control() || "[]:*?/\\".contains(c)) + || (sheet && prefix.starts_with('\'')) + { + return Err(bad(command, "invalid generated-name prefix")); + } + Ok(()) +} + pub(crate) fn str_param<'a>(p: &'a Json, key: &str) -> Option<&'a str> { p.get(key).and_then(Json::as_str) } diff --git a/crates/engine/src/cmd/data.rs b/crates/engine/src/cmd/data.rs index c87906deec..f670dc7f9d 100644 --- a/crates/engine/src/cmd/data.rs +++ b/crates/engine/src/cmd/data.rs @@ -23,7 +23,7 @@ mod sort; mod tools; mod validation; -pub use filter::filter_values; +pub use filter::{FilterValue, filter_entries, filter_values}; pub(crate) use filter::{apply_filter, grow_autofilter}; use filter::{clear_filter, filter_by, reapply, toggle_filter}; use grouping::{detail, group, outline_settings, show_levels, subtotal}; @@ -31,7 +31,7 @@ use sort::{quick_sort, sort}; #[cfg(test)] use tools::split_delimited; use tools::{remove_duplicates, text_to_columns}; -pub use validation::{check_validation, list_items}; +pub use validation::{check_literal_array_validation, check_literal_fill_validation, check_literal_validation, check_validation, list_items}; use validation::{circle_invalid, validate_cmd, validation}; pub(super) use validation::{move_rule_formula, remove_validation_cells}; diff --git a/crates/engine/src/cmd/data/filter.rs b/crates/engine/src/cmd/data/filter.rs index 179dc04a18..6f3091d14b 100644 --- a/crates/engine/src/cmd/data/filter.rs +++ b/crates/engine/src/cmd/data/filter.rs @@ -295,6 +295,23 @@ pub(super) fn reapply(s: &mut Session, _: &Json) -> Result { /// Distinct display values of a filter column (for the dropdown list). pub fn filter_values(wb: &Workbook, sheet: usize, col: u32) -> Vec<(String, bool)> { + filter_entries(wb, sheet, col).into_iter().map(|entry| (entry.label, entry.selected)).collect() +} + +/// A canonical filter label with its underlying type, so interfaces can localize constants without changing text. +#[derive(Clone)] +pub struct FilterValue { + pub label: String, + pub selected: bool, + pub value: Value, + pub formula_shown: bool, + /// Representative source cell, allowing interfaces to retain its numeric format for display. + /// Commands continue to use the canonical `label`, independently of this presentation metadata. + pub source: CellRef, +} + +/// Distinct filter choices retaining typed values; blanks use Empty while command labels stay canonical. +pub fn filter_entries(wb: &Workbook, sheet: usize, col: u32) -> Vec { let Some(sh) = wb.sheet(sheet) else { return vec![] }; let Some(af) = &sh.autofilter else { return vec![] }; let off = col.saturating_sub(af.range.start.col); @@ -316,11 +333,16 @@ pub fn filter_values(wb: &Workbook, sheet: usize, col: u32) -> Vec<(String, bool _ => true, }; let key = if blank { sort_key(&Value::Empty) } else { sort_key(&v) }; - seen.entry((key, t)).or_insert(on); + let formula_shown = + !blank && sh.show_formulas && sh.cell(c).is_some_and(|cell| cell.formula.is_some()) && !crate::display::formula_hidden(wb, sh, c); + seen.entry((key, t)).or_insert((on, if blank { Value::Empty } else { v }, c, formula_shown)); } let mut values: Vec<_> = seen.into_iter().collect(); values.sort_by(|((a, ta), _), ((b, tb), _)| { a.0.cmp(&b.0).then(a.1.cmp(&b.1)).then_with(|| gridcraft_core::compare_text(&a.2, &b.2)).then_with(|| ta.cmp(tb)) }); - values.into_iter().map(|((_, t), on)| (t, on)).collect() + values + .into_iter() + .map(|((_, label), (selected, value, source, formula_shown))| FilterValue { label, selected, value, formula_shown, source }) + .collect() } diff --git a/crates/engine/src/cmd/data/tests.rs b/crates/engine/src/cmd/data/tests.rs index e073e23a54..4974c17a5b 100644 --- a/crates/engine/src/cmd/data/tests.rs +++ b/crates/engine/src/cmd/data/tests.rs @@ -557,3 +557,100 @@ fn a_rule_with_an_unknown_type_operator_or_error_style_is_refused() { assert_eq!(sh.validations.len(), 3); assert!(check_validation(&s.doc().unwrap().wb, 0, CellRef::parse("A2").unwrap(), "0").is_some()); } + +/// Custom rules see all proposed destinations, while validation preserves the original workbook. +#[test] +fn literal_fill_validation_keeps_the_original_workbook_unchanged() { + let mut session = Session::new(); + session.new_workbook(); + session.execute("range.setValues", json!({"range":"A1", "values":[["old","old"]]})).unwrap(); + session.execute("data.validation", json!({"range":"A1", "type":"custom", "formula1":"=A1=\"new\""})).unwrap(); + session.execute("data.validation", json!({"range":"B1", "type":"custom", "formula1":"=AND(A1=\"old\",B1=\"new\")"})).unwrap(); + let range = RangeRef::parse("A1:B1").unwrap(); + let wb = &session.doc().unwrap().wb; + assert!(super::check_literal_fill_validation(wb, 0, &[range], "new").is_some()); + assert!(super::check_literal_fill_validation(wb, 0, &[range], "other").is_some()); + + // Direct command calls retain their existing behavior, independently of UI validation. + session.execute("range.fill", json!({"range":"A1:B1", "input":"other", "literal":true})).unwrap(); + assert_eq!(session.doc().unwrap().wb.active().unwrap().value(CellRef::new(0, 1)), Value::text("other")); +} + +#[test] +fn literal_validation_rechecks_formula_destinations_and_dependents() { + let mut session = Session::default(); + session.new_workbook(); + session.execute("cell.set", json!({"cell":"A1", "input":"=\"same\""})).unwrap(); + session.execute("data.validation", json!({"range":"A1", "type":"custom", "formula1":"=ISFORMULA(A1)"})).unwrap(); + let wb = &session.doc().unwrap().wb; + assert!(super::check_literal_validation(wb, 0, CellRef::parse("A1").unwrap(), "same").is_some()); + + session.execute("cell.set", json!({"cell":"A1", "input":"5"})).unwrap(); + session.execute("cell.set", json!({"cell":"B1", "input":"=A1*1"})).unwrap(); + session.execute("data.validation", json!({"range":"A1", "type":"custom", "formula1":"=B1>0"})).unwrap(); + let wb = &session.doc().unwrap().wb; + assert!(super::check_literal_validation(wb, 0, CellRef::parse("A1").unwrap(), "-1").is_some()); +} + +#[test] +fn literal_fill_validation_ignores_filtered_rows() { + let mut session = Session::new(); + session.new_workbook(); + session + .execute("range.setValues", json!({"range":"A1", "values":[["Value", "Tag"], ["old", "show"], ["old", "hide"], ["old", "show"]]})) + .unwrap(); + session.execute("data.filter", json!({"range":"A1:B4"})).unwrap(); + session.execute("data.filterBy", json!({"column":"B", "values":["show"]})).unwrap(); + session.execute("data.validation", json!({"range":"A3", "type":"custom", "formula1":"=A3=\"allow\""})).unwrap(); + + let range = RangeRef::parse("A2:A4").unwrap(); + let wb = &session.doc().unwrap().wb; + assert!(super::check_literal_fill_validation(wb, 0, &[range], "blocked").is_none()); + + session.execute("data.validation", json!({"range":"A4", "type":"custom", "formula1":"=A4=\"allow\""})).unwrap(); + let wb = &session.doc().unwrap().wb; + assert!(super::check_literal_fill_validation(wb, 0, &[range], "blocked").is_some()); +} + +#[test] +fn formula_and_literal_with_the_same_filter_label_are_one_choice() { + let mut session = Session::new(); + session.new_workbook(); + for cell in ["A1", "A2"] { + session.execute("cell.set", json!({"cell":cell,"input":"=A1","literal":true})).unwrap(); + } + session.execute("cell.set", json!({"cell":"A3","input":"=A1"})).unwrap(); + session.execute("formulas.showFormulas", json!({"on":true})).unwrap(); + session.execute("data.filter", json!({"range":"A1:A3"})).unwrap(); + let rows = super::filter_entries(&session.doc().unwrap().wb, 0, 0); + assert_eq!(rows.iter().map(|row| row.label.as_str()).collect::>(), ["=A1"]); +} + +#[test] +fn literal_fill_validates_the_completed_range() { + let mut s = Session::new(); + s.new_workbook(); + s.execute("range.setValues", json!({"range":"A1","values":[["x"]],"parse":false})).unwrap(); + s.execute("data.validation", json!({"range":"A1:A3","type":"custom","formula1":"=COUNTIF($A$1:$A$3,\"x\")<=2"})).unwrap(); + let wb = &s.doc().unwrap().wb; + assert!(super::check_literal_fill_validation(wb, 0, &[RangeRef::parse("A1:A3").unwrap()], "x").is_some()); +} + +#[test] +fn literal_fill_rejects_a_simple_stop_rule_before_snapshotting_a_column() { + let mut session = Session::new(); + session.new_workbook(); + session.execute("data.validation", json!({"range":"A1","type":"custom","formula1":"=FALSE"})).unwrap(); + let wb = &session.doc().unwrap().wb; + assert!(super::check_literal_fill_validation(wb, 0, &[RangeRef::parse("A1:A1048576").unwrap()], "x").is_some()); + assert_eq!(wb.active().unwrap().value(CellRef::new(0, 0)), Value::Empty); +} + +#[test] +fn literal_empty_text_is_validated_even_when_blank_cells_are_allowed() { + let mut session = Session::new(); + session.new_workbook(); + session.execute("data.validation", json!({"range":"B1","type":"custom","formula1":"=ISBLANK(B1)","allowBlank":true})).unwrap(); + let wb = &session.doc().unwrap().wb; + assert!(super::check_literal_fill_validation(wb, 0, &[RangeRef::parse("B1").unwrap()], "").is_some()); +} diff --git a/crates/engine/src/cmd/data/validation.rs b/crates/engine/src/cmd/data/validation.rs index 0d86fbc360..1a56a95f3e 100644 --- a/crates/engine/src/cmd/data/validation.rs +++ b/crates/engine/src/cmd/data/validation.rs @@ -223,48 +223,188 @@ pub fn list_items(wb: &Workbook, sheet: usize, at: CellRef, dv: &Validation) -> /// Checks typed input against the validation of a cell. `Ok(None)` = valid. pub fn check_validation(wb: &Workbook, sheet: usize, at: CellRef, input: &str) -> Option<(Validation, String)> { + check_entry(wb, sheet, at, input, false, &mut None, None) +} + +/// Checks a text entry using the same literal value that the cell command will store. +pub fn check_literal_validation(wb: &Workbook, sheet: usize, at: CellRef, input: &str) -> Option<(Validation, String)> { + check_entry(wb, sheet, at, input, true, &mut None, None) +} + +/// Checks the array anchor against the completed write, including the cells the command clears. +/// List validation still reads its choices from the original workbook, as for ordinary entries. +pub fn check_literal_array_validation(wb: &Workbook, sheet: usize, range: RangeRef, input: &str) -> Option<(Validation, String)> { + let sh = wb.sheet(sheet)?; + let dv = sh.validations.iter().find(|dv| dv.ranges.iter().any(|r| r.contains(range.start)))?; + if dv.kind == ValidationKind::Any || !dv.show_error { + return None; + } + let mut entered = wb.clone(); + let target = entered.sheet_mut(sheet)?; + let mut changed = vec![(sheet, range.start)]; + // Match cell.set's bounded legacy-array clearing, retaining destination formatting. + for at in range.iter().skip(1).take(1_000_000) { + if let Some(old) = target.cells.get(at).filter(|cell| cell.has_content()) { + let style = old.style; + target.set_cell(at, Cell { style, ..Default::default() }); + changed.push((sheet, at)); + } + } + target.set_cell(range.start, Cell { value: Value::text(input), style: sh.style_id(range.start), ..Default::default() }); + let mut calc = gridcraft_calc::Calc::new(); + calc.rebuild(&entered); + calc.cells_changed(&mut entered, &changed); + check_entry(wb, sheet, range.start, input, true, &mut None, Some(&entered)) +} + +/// Checks a literal fill against the original sheet, reusing one scratch workbook for formulas. +pub fn check_literal_fill_validation(wb: &Workbook, sheet: usize, ranges: &[RangeRef], input: &str) -> Option<(Validation, String)> { + if ranges.iter().any(|range| range.count() > 2_000_000) || wb.sheet(sheet)?.validations.is_empty() { + return None; + } + let sh = wb.sheet(sheet)?; + let applies = sh + .validations + .iter() + .any(|dv| dv.kind != ValidationKind::Any && dv.show_error && dv.ranges.iter().any(|rule| ranges.iter().any(|range| rule.intersects(range)))); + if !applies { + return None; + } + let mut scratch = None; + let mut warning = None; + let mut dependent = Vec::new(); + for range in ranges { + let filtered = crate::cmd::edit::filtered_rows(sh, *range); + for at in range.iter().filter(|at| !filtered.contains(&at.row)) { + let Some(dv) = sh.validations.iter().find(|dv| dv.ranges.iter().any(|r| r.contains(at))) else { continue }; + if dv.kind == ValidationKind::Any || !dv.show_error { + continue; + } + let numeric_bound = |f: &str| f.trim().trim_start_matches('=').parse::().is_ok(); + let depends = match dv.kind { + ValidationKind::Custom => !matches!(dv.f1.trim().trim_start_matches('=').to_ascii_uppercase().as_str(), "TRUE" | "FALSE"), + ValidationKind::TextLength => !numeric_bound(&dv.f1) || dv.f2.as_deref().is_some_and(|f| !numeric_bound(f)), + _ => false, + }; + if dv.kind == ValidationKind::Custom && dv.f1.trim().strip_prefix('=').unwrap_or(dv.f1.trim()).trim().eq_ignore_ascii_case("TRUE") { + continue; + } + if depends { + dependent.push(at); + } else if let Some(issue) = check_entry(wb, sheet, at, input, true, &mut scratch, None) { + if issue.0.error_style == ErrorStyle::Stop { + return Some(issue); + } + warning = Some(issue); + } + } + } + if dependent.is_empty() { + return warning; + } + let mut entered = wb.clone(); + let mut changed = Vec::new(); + for range in ranges { + let filtered = crate::cmd::edit::filtered_rows(sh, *range); + for at in range.iter().filter(|at| !filtered.contains(&at.row)) { + entered.sheet_mut(sheet)?.cells.set(at, Cell { value: Value::text(input), style: sh.style_id(at), ..Default::default() }); + changed.push((sheet, at)); + } + } + let mut calc = gridcraft_calc::Calc::new(); + calc.rebuild(&entered); + calc.cells_changed(&mut entered, &changed); + for at in dependent { + if let Some(issue) = check_entry(wb, sheet, at, input, true, &mut scratch, Some(&entered)) { + if issue.0.error_style == ErrorStyle::Stop { + return Some(issue); + } + warning = Some(issue); + } + } + warning +} + +/// Applies the cell's validation rule to parsed input or explicit text. +fn check_entry( + wb: &Workbook, + sheet: usize, + at: CellRef, + input: &str, + literal: bool, + scratch: &mut Option<(Workbook, gridcraft_calc::Calc)>, + completed: Option<&Workbook>, +) -> Option<(Validation, String)> { let sh = wb.sheet(sheet)?; let dv = sh.validations.iter().find(|d| d.ranges.iter().any(|r| r.contains(at)))?; if dv.kind == ValidationKind::Any || !dv.show_error { return None; } - if input.is_empty() && dv.allow_blank { + if !literal && input.is_empty() && dv.allow_blank { return None; } - let v = gridcraft_core::parse::parse_input(input, wb.date_system).value; + let v = if literal { Value::text(input) } else { gridcraft_core::parse::parse_input(input, wb.date_system).value }; // The formulas are written for the top-left cell of all the areas and see the value being entered, // as in Excel (a custom `=A1>10` on A1:A9 checks A5's new value at A5). let first = RangeRef::top_left(&dv.ranges).unwrap_or(at); - let original = wb; - let entered; - let wb = if sh.value(at) == v { - wb - } else { - let mut w = wb.clone(); - if let Some(sh) = w.sheet_mut(sheet) { - let style = sh.style_id(at); - sh.cells.set(at, Cell { value: v.clone(), style, ..Default::default() }); + let mut eval = |f: &str| { + let constant = f.trim().strip_prefix('=').unwrap_or(f.trim()).trim(); + if constant.eq_ignore_ascii_case("TRUE") { + return Value::Bool(true); + } + if constant.eq_ignore_ascii_case("FALSE") { + return Value::Bool(false); + } + if let Ok(number) = constant.parse::() + && number.is_finite() + { + return Value::Number(number); + } + let formula = formula_at(f, first, at); + if let Some(completed) = completed { + return gridcraft_calc::evaluate(completed, sheet, at, &formula); + } + let replaces_code = sh.cell(at).is_some_and(|cell| cell.formula.is_some() || cell.py.is_some()); + if sh.value(at) == v && !replaces_code { + return gridcraft_calc::evaluate(wb, sheet, at, &formula); + } + let (entered, calc) = scratch.get_or_insert_with(|| { + let entered = wb.clone(); + let mut calc = gridcraft_calc::Calc::new(); + calc.rebuild(&entered); + (entered, calc) + }); + if let Some(target) = entered.sheet_mut(sheet) { + target.cells.set(at, Cell { value: v.clone(), style: sh.style_id(at), ..Default::default() }); + } + calc.cells_changed(entered, &[(sheet, at)]); + let result = gridcraft_calc::evaluate(entered, sheet, at, &formula); + if let Some(target) = entered.sheet_mut(sheet) { + if let Some(original) = sh.cell(at) { + target.cells.set(at, original.clone()); + } else { + target.cells.remove(at); + } } - entered = w; - &entered + calc.cells_changed(entered, &[(sheet, at)]); + result }; - let eval = |f: &str| gridcraft_calc::evaluate(wb, sheet, at, &formula_at(f, first, at)); - let num = |f: &str| eval(f).to_number().ok(); + let mut num = |f: &str| eval(f).to_number().ok(); let ok = match dv.kind { // The list is the one the dropdown showed before the entry, as in Excel: a source that takes // in the cell itself (`=$A1:$A2` on A2:A3 is A2:A3 at A3) doesn't list the value being typed. - ValidationKind::List => list_items(original, sheet, at, dv).iter().any(|x| x.eq_ignore_ascii_case(input)), + ValidationKind::List => list_items(wb, sheet, at, dv).iter().any(|x| x.eq_ignore_ascii_case(input)), ValidationKind::Custom => eval(&dv.f1).to_bool().unwrap_or(false), ValidationKind::TextLength => { let n = input.chars().count() as f64; - compare_op(dv.op, n, num(&dv.f1), dv.f2.as_deref().and_then(num)) + compare_op(dv.op, n, num(&dv.f1), dv.f2.as_deref().and_then(&mut num)) } _ => match v.as_f64() { Some(n) => { if dv.kind == ValidationKind::Whole && n.fract() != 0.0 { false } else { - compare_op(dv.op, n, num(&dv.f1), dv.f2.as_deref().and_then(num)) + compare_op(dv.op, n, num(&dv.f1), dv.f2.as_deref().and_then(&mut num)) } } None => false, diff --git a/crates/engine/src/cmd/edit.rs b/crates/engine/src/cmd/edit.rs index 8c7072f520..a0c617d4b1 100644 --- a/crates/engine/src/cmd/edit.rs +++ b/crates/engine/src/cmd/edit.rs @@ -38,9 +38,18 @@ use paste_special::paste_special; pub(crate) use paste_special::{rewrite_all_formulas, rewrite_cell_links, rewrite_python_refs}; use selection::{select_all, select_col, select_region, select_row, selection_move, selection_next, selection_next_corner, selection_set}; +/// Registers cell-entry, selection, clipboard and fill commands with their canonical API parameter descriptions. pub fn specs() -> Vec { vec![ - cmd!("cell.set", "Enter Cell", [], None, "{cell?: \"B2\", input: \"text, number or =formula\", sheet?, array?: bool}", has_doc, cell_set), + cmd!( + "cell.set", + "Enter Cell", + [], + None, + "{cell?: \"B2\", input: \"text, number or =formula\", sheet?, array?: bool, literal?: bool (default false; stores input as text without parsing)}", + has_doc, + cell_set + ), cmd!( "range.setValues", "Set Values", @@ -55,7 +64,7 @@ pub fn specs() -> Vec { "Fill Range With Input", [], Some("Ctrl+Enter"), - "{range?, input}: enters the same input in every selected cell (relative formulas adjust)", + "{range?, input, literal?: bool (default false)}: enters the same input in every selected cell (relative formulas adjust); literal:true stores input as text without parsing, preserving each cell's format", has_doc, range_fill ), @@ -238,7 +247,7 @@ fn redo(s: &mut Session, p: &Json) -> Result { // ---------------------------------------------------------------- clear /// The rows of `range` an applied filter hides (rows hidden by hand are not among them). -fn filtered_rows(sh: &gridcraft_model::Sheet, range: RangeRef) -> std::collections::BTreeSet { +pub(crate) fn filtered_rows(sh: &gridcraft_model::Sheet, range: RangeRef) -> std::collections::BTreeSet { let spans = sh.filter_row_spans(); if spans.is_empty() { return Default::default(); diff --git a/crates/engine/src/cmd/edit/cell.rs b/crates/engine/src/cmd/edit/cell.rs index c3fe443856..8e5329f4e9 100644 --- a/crates/engine/src/cmd/edit/cell.rs +++ b/crates/engine/src/cmd/edit/cell.rs @@ -119,6 +119,7 @@ pub(crate) fn check_arg_counts(expr: &gridcraft_formula::Expr) -> Result<()> { } } +/// Enters parsed input or an explicitly typed text value, including the legacy array-entry path. pub(super) fn cell_set(s: &mut Session, p: &Json) -> Result { let sheet = target_sheet(s, p)?; let at = match cell_param_on(s, p, "cell", sheet)? { @@ -128,6 +129,11 @@ pub(super) fn cell_set(s: &mut Session, p: &Json) -> Result { // Both spellings take a string, number or boolean, as typed (#697). let input = p.get("input").or_else(|| p.get("value")).map(json_to_input).ok_or_else(|| bad("cell.set", "missing `input` (or `value`)"))?; let array = bool_param(p, "array").unwrap_or(false); + let literal = match p.get("literal") { + None | Some(Json::Null) => false, + Some(Json::Bool(value)) => *value, + Some(_) => return Err(bad("cell.set", "literal must be true or false")), + }; let d = s.doc()?; if let Some(sh) = d.wb.sheet(sheet) && sh.is_protected() @@ -147,23 +153,33 @@ pub(super) fn cell_set(s: &mut Session, p: &Json) -> Result { if !range.is_single() && cx.wb.sheet(sheet).is_some_and(|sh| sh.tables.iter().any(|t| t.range.intersects(&range))) { return Err(EngineError::Other("Multi-cell array formulas aren't allowed in tables.".into())); } - let mut cell = input_to_cell(&input, sheet, range.start, &mut cx.wb)?.unwrap_or_default(); + let mut cell = if literal { + literal_cell(&input, sheet, range.start, &mut cx.wb) + } else { + input_to_cell(&input, sheet, range.start, &mut cx.wb)?.unwrap_or_default() + }; if let Some(f) = cell.formula.as_mut() { std::sync::Arc::make_mut(f).array = Some(range); } let sh = cx.sheet_mut(sheet)?; // The array takes the whole range: other cells in it lose their contents. + let mut cleared = Vec::new(); for c in range.iter().skip(1).take(1_000_000) { if let Some(old) = sh.cells.get(c).filter(|x| x.has_content()) { let style = old.style; sh.set_cell(c, Cell { style, ..Cell::default() }); + cleared.push(c); } } sh.set_cell(range.start, cell); cx.touch(sheet, range.start); + // Dependents of cleared neighbours must see the completed array write too. + for at in cleared { + cx.touch(sheet, at); + } return Ok(Json::Null); } - let cell = input_to_cell(&input, sheet, at, &mut cx.wb)?; + let cell = if literal { Some(literal_cell(&input, sheet, at, &mut cx.wb)) } else { input_to_cell(&input, sheet, at, &mut cx.wb)? }; let sh = cx.sheet_mut(sheet)?; match cell { Some(c) => sh.set_cell(at, c), @@ -179,6 +195,13 @@ pub(super) fn cell_set(s: &mut Session, p: &Json) -> Result { Ok(json!({"cell": at.a1(), "value": v.display()})) } +/// Creates text without reparsing it, keeping the destination format and normal multiline wrapping. +fn literal_cell(input: &str, sheet: usize, at: CellRef, wb: &mut gridcraft_model::Workbook) -> Cell { + let style = wb.sheet(sheet).map(|sh| sh.style_id(at)).unwrap_or_default(); + let style = if input.contains('\n') && !wb.styles.get(style).align.wrap { wb.styles.derive(style, |s| s.align.wrap = true) } else { style }; + Cell { value: Value::text(input), formula: None, style, py: None } +} + pub(crate) fn json_to_input(v: &Json) -> String { match v { Json::Null => String::new(), @@ -314,10 +337,18 @@ pub(super) fn range_set_values(s: &mut Session, p: &Json) -> Result { Ok(json!({"cells": count, "convertedCount": converted_count, "converted": reported})) } +/// Fills the target ranges in one undoable edit, parsing input for each destination style. +/// `literal: true` copies an already typed text value without numeric or formula conversion. pub(super) fn range_fill(s: &mut Session, p: &Json) -> Result { let sheet = target_sheet(s, p)?; let ranges = target_ranges(s, p)?; let input = str_param(p, "input").unwrap_or("").to_string(); + // An unchanged text draft is already a typed value: filling it must not parse it again. + let literal = match p.get("literal") { + None | Some(Json::Null) => false, + Some(Json::Bool(value)) => *value, + Some(_) => return Err(bad("range.fill", "literal must be true or false")), + }; let origin = s.doc()?.selection.active; edit(s, |cx| { // Each cell gets what typing the input there gives: the automatic number format where @@ -337,7 +368,16 @@ pub(super) fn range_fill(s: &mut Session, p: &Json) -> Result { let base = match by_style.get(&style) { Some(c) => c.clone(), None => { - let c = input_to_cell(&input, sheet, at, &mut cx.wb)?; + let c = if literal { + let style = if input.contains('\n') && !cx.wb.styles.get(style).align.wrap { + cx.wb.styles.derive(style, |s| s.align.wrap = true) + } else { + style + }; + Some(Cell { value: Value::text(input.as_str()), formula: None, style, py: None }) + } else { + input_to_cell(&input, sheet, at, &mut cx.wb)? + }; by_style.insert(style, c.clone()); c } diff --git a/crates/engine/src/cmd/edit/paste_special.rs b/crates/engine/src/cmd/edit/paste_special.rs index c90dd9ec80..a7f9ce4a38 100644 --- a/crates/engine/src/cmd/edit/paste_special.rs +++ b/crates/engine/src/cmd/edit/paste_special.rs @@ -553,6 +553,8 @@ fn paste_validations( /// Applies a reference adjustment to every cell formula and defined name in the workbook. pub(crate) fn rewrite_all_formulas(wb: &mut gridcraft_model::Workbook, target: &str, e: &gridcraft_formula::adjust::Edit) -> Result<()> { + let target_index = wb.sheet_index(target); + let order: Vec<_> = wb.sheets.iter().map(|sheet| sheet.name.clone()).collect(); use gridcraft_formula::adjust::Edit; // Rows and columns inserted or deleted on the target sheet move its legacy array ranges too // (a cut moves its arrays itself). @@ -564,12 +566,13 @@ pub(crate) fn rewrite_all_formulas(wb: &mut gridcraft_model::Workbook, target: & if keys.is_empty() { continue; } - let on_target = moves_arrays && host.eq_ignore_ascii_case(target); + // Array ranges move with the lines only on the edited sheet. + let on_target = moves_arrays && Some(si) == target_index; let Some(sheet) = wb.sheet_mut(si) else { continue }; for (c, f) in keys { // Borrows the tree and copies and prints only the formulas the edit changes. A formula // the edit leaves alone keeps its stored text, even if that text is not canonical. - let Some(new) = f.with_expr(|x| gridcraft_formula::adjust::adjust_if_changed(x, &host, target, e)) else { continue }; + let Some(new) = f.with_expr(|x| gridcraft_formula::adjust::adjust_if_changed_in(x, &host, target, e, &order)) else { continue }; let array = match f.array { Some(a) if on_target => crate::cmd::sheet::map_range(a, e), a => a, @@ -587,12 +590,12 @@ pub(crate) fn rewrite_all_formulas(wb: &mut gridcraft_model::Workbook, target: & for n in wb.names.iter_mut() { if let Ok(expr) = gridcraft_formula::parse_name(&n.formula) { // Names are workbook-level: unqualified refs don't occur; qualified ones adjust. - let new = gridcraft_formula::adjust::adjust(expr, "\u{0}", target, e); + let new = gridcraft_formula::adjust::adjust_in(expr, "\u{0}", target, e, &order); n.formula = gridcraft_formula::print(&new); } } - rewrite_cell_links(wb, |host, expr| gridcraft_formula::adjust::adjust(expr, host, target, e)); - rewrite_python_refs(wb, &|host, expr| gridcraft_formula::adjust::adjust(expr, host, target, e)) + rewrite_cell_links(wb, |host, expr| gridcraft_formula::adjust::adjust_in(expr, host, target, e, &order)); + rewrite_python_refs(wb, &|host, expr| gridcraft_formula::adjust::adjust_in(expr, host, target, e, &order)) } /// Runs `f` over every reference a floating object holds (a chart's series values, categories, @@ -627,7 +630,7 @@ pub(crate) fn rewrite_cell_links(wb: &mut gridcraft_model::Workbook, f: impl Fn( } } -/// Rewrites the `xl("…")` literals in every Python cell with `f`, which maps a reference held on +/// Rewrites the `xl("…")` literals in every Python cell with `f`, which maps a reference held on /// sheet `host` to its new form. Every reference-moving edit (insert and delete of lines or cells, /// cut-move, sheet rename and delete) runs it, as it adjusts formulas. A literal is only replaced /// when the reference it names changed, and text that doesn't parse is kept. A cell's cached diff --git a/crates/engine/src/cmd/file.rs b/crates/engine/src/cmd/file.rs index aafb0850de..627585f68b 100644 --- a/crates/engine/src/cmd/file.rs +++ b/crates/engine/src/cmd/file.rs @@ -5,9 +5,10 @@ use serde_json::{Value as Json, json}; use super::{CommandSpec, Result, Session, always, bad, bool_param, cmd, edit, has_doc, ok, str_param, target_sheet, u32_param}; use crate::DocState; +/// Registers file and window commands with their public parameter metadata. pub fn specs() -> Vec { vec![ - cmd!(noundo "file.new", "New Workbook", ["File"], Some("Cmd+N"), "{sample?: \"budget\"|\"sales\"|\"grades\"}", always, new_workbook), + cmd!(noundo "file.new", "New Workbook", ["File"], Some("Cmd+N"), "{sample?: \"budget\"|\"sales\"|\"grades\", bookPrefix?: string (default Book), sheetPrefix?: string (default Sheet)} (prefixes apply to blank workbooks)", always, new_workbook), cmd!(noundo "file.open", "Open…", ["File"], Some("Cmd+O"), "{path} | {name, base64}, plus {password} for a password-protected workbook and {csvAsText?: bool} to keep every csv/tsv/txt field as text, with no number or date conversion (xlsx, xlsm, xls import, xlsb and ods data import, csv, tsv, txt, json)", always, open), cmd!(noundo "file.save", "Save", ["File"], Some("Cmd+S"), "{path?} (xlsx by default; .csv/.tsv/.json/.html/.pdf by extension)", has_doc, save), cmd!(noundo "file.saveAs", "Save As…", ["File"], Some("Cmd+Shift+S"), "{path} (.xlsx, .csv, .tsv, .json, .html, or .pdf: a PDF of the active sheet)", has_doc, save_as), @@ -31,6 +32,7 @@ pub fn specs() -> Vec { ] } +/// Creates a blank or sample workbook, validating optional UI-provided naming prefixes before using them. fn new_workbook(s: &mut Session, p: &Json) -> Result { let i = match str_param(p, "sample") { Some(name) => { @@ -38,7 +40,18 @@ fn new_workbook(s: &mut Session, p: &Json) -> Result { let title = crate::sample::title(name); s.add_document(DocState::new(wb, None, title, crate::Trust::Local)) } - None => s.new_workbook(), + None => { + for key in ["bookPrefix", "sheetPrefix"] { + if p.get(key).is_some_and(|value| !value.is_string()) { + return Err(bad("file.new", format!("`{key}` must be a string"))); + } + } + let book = str_param(p, "bookPrefix").unwrap_or("Book"); + let sheet = str_param(p, "sheetPrefix").unwrap_or("Sheet"); + super::check_generated_prefix("file.new", book, false)?; + super::check_generated_prefix("file.new", sheet, true)?; + s.new_workbook_named(book, sheet) + } }; Ok(json!({"index": i, "title": s.doc()?.display_title()})) } @@ -268,3 +281,16 @@ fn close_window(s: &mut Session, p: &Json) -> Result { s.close_window(id); Ok(json!({"closed": true, "document": true})) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn new_workbook_rejects_non_string_prefixes() { + let mut session = Session::default(); + assert!(new_workbook(&mut session, &json!({"bookPrefix": 42})).is_err()); + assert!(new_workbook(&mut session, &json!({"sheetPrefix": false})).is_err()); + assert!(new_workbook(&mut session, &json!({})).is_ok()); + } +} diff --git a/crates/engine/src/cmd/formulas.rs b/crates/engine/src/cmd/formulas.rs index 7c09045993..9f537ec79b 100644 --- a/crates/engine/src/cmd/formulas.rs +++ b/crates/engine/src/cmd/formulas.rs @@ -9,6 +9,7 @@ use super::{ target_range, target_ranges, target_sheet, u32_param, }; +/// Registers formula commands and documents explicit workbook and sheet scope identities. pub fn specs() -> Vec { vec![ cmd!( @@ -35,7 +36,7 @@ pub fn specs() -> Vec { "Define Name…", ["Formulas", "Defined Names"], None, - "{name, refersTo?: \"=Sheet1!$A$1:$A$10\" (default: the selection), scope?: \"Workbook\"|sheet name, comment?, oldName?, oldScope?, force?: bool} (oldName: edit that name (Name Manager › Edit); a new name also renames it in formulas; a hidden name GridCraft keeps its own data in, `_gc__` or `_sc_`, is refused unless force is true)", + "{name, refersTo?: \"=Sheet1!$A$1:$A$10\" (default: the selection), scope?: null|\"Workbook\"|sheet name|{sheet: name}, comment?, oldName?, oldScope?: same as scope, force?: bool} (null or Workbook means workbook scope; use {sheet: name} for a sheet named Workbook. oldName edits that name; a new name also renames it in formulas. Hidden GridCraft data names are refused unless force is true)", has_doc, define_name ), @@ -44,11 +45,11 @@ pub fn specs() -> Vec { "Delete Name", [], None, - "{name, scope?: \"Workbook\"|sheet name (default: every scope), force?: bool} (a hidden name GridCraft keeps its own data in, `_gc__` or `_sc_`, is refused unless force is true)", + "{name, scope?: null|\"Workbook\"|sheet name|{sheet: name}, force?: bool} (missing or null scope selects every scope; Workbook selects only workbook scope. When reusing nameManager scopeIdentity: null, pass scope: \"Workbook\" to delete only the workbook name. Hidden GridCraft data names are refused unless force is true)", has_doc, delete_name ), - cmd!(query "formulas.nameManager", "Name Manager", ["Formulas", "Defined Names"], Some("Cmd+F3"), "{} → names with values", has_doc, name_manager), + cmd!(query "formulas.nameManager", "Name Manager", ["Formulas", "Defined Names"], Some("Cmd+F3"), "{} → names with values, display scope and scopeIdentity (null or {sheet: name}); for deleteName, convert scopeIdentity: null to scope: \"Workbook\" because null deletes across all scopes", has_doc, name_manager), cmd!( "formulas.createFromSelection", "Create from Selection", @@ -343,6 +344,7 @@ pub(crate) fn is_r1c1(n: &str) -> bool { rest.is_empty() && !n.is_empty() } +/// Defines or edits a name in its exact scope, including a sheet literally named Workbook. fn define_name(s: &mut Session, p: &Json) -> Result { let Some(name) = str_param(p, "name").map(str::to_string) else { s.ui_requests.push(crate::UiRequest::Dialog("defineName".into(), json!({}))); @@ -355,10 +357,7 @@ fn define_name(s: &mut Session, p: &Json) -> Result { refuse_stash_name(&s.doc()?.wb, p, n)?; } let d = s.doc()?; - let scope = match str_param(p, "scope") { - None | Some("Workbook") => None, - Some(sh) => Some(d.wb.sheet_index(sh).ok_or_else(|| bad("formulas.defineName", "no such sheet"))?), - }; + let scope = defined_name_scope(&d.wb, p.get("scope"), "formulas.defineName")?; let refers = match str_param(p, "refersTo") { // As in Excel, relative references are relative to the active cell; names keep them // relative to A1, as files do. @@ -385,10 +384,7 @@ fn define_name(s: &mut Session, p: &Json) -> Result { // collide with another name in the target scope. let old = match str_param(p, "oldName") { Some(old_name) => { - let old_scope = match str_param(p, "oldScope") { - None | Some("Workbook") => None, - Some(sh) => Some(d.wb.sheet_index(sh).ok_or_else(|| bad("formulas.defineName", "no such sheet"))?), - }; + let old_scope = defined_name_scope(&d.wb, p.get("oldScope"), "formulas.defineName")?; if !d.wb.names.iter().any(|n| n.name.eq_ignore_ascii_case(old_name) && n.scope == old_scope) { return Err(bad("formulas.defineName", "no such name to edit")); } @@ -480,14 +476,28 @@ fn refuse_stash_name(wb: &Workbook, p: &Json, name: &str) -> Result<()> { Ok(()) } +/// Resolves tagged sheet identities without confusing a sheet named Workbook with workbook scope. +/// Legacy string parameters remain accepted; null explicitly denotes workbook scope. +fn defined_name_scope(wb: &Workbook, scope: Option<&Json>, command: &str) -> Result> { + let name = match scope { + None | Some(Json::Null) => return Ok(None), + Some(Json::String(name)) if name == "Workbook" => return Ok(None), + Some(Json::String(name)) => name.as_str(), + Some(Json::Object(identity)) => identity.get("sheet").and_then(Json::as_str).ok_or_else(|| bad(command, "scope must name a sheet"))?, + Some(_) => return Err(bad(command, "scope must be null, a sheet name or {sheet: name}")), + }; + wb.sheet_index(name).map(Some).ok_or_else(|| bad(command, "no such sheet")) +} + +/// Deletes a name in the requested scope, or across all scopes when the parameter is absent. fn delete_name(s: &mut Session, p: &Json) -> Result { let name = str_param(p, "name").ok_or_else(|| bad("formulas.deleteName", "missing `name`"))?.to_string(); refuse_stash_name(&s.doc()?.wb, p, &name)?; - let scope = match str_param(p, "scope") { - None => None, - Some("Workbook") => Some(None), - Some(sh) => Some(Some(s.doc()?.wb.sheet_index(sh).ok_or_else(|| bad("formulas.deleteName", "no such sheet"))?)), - }; + let scope = p + .get("scope") + .filter(|value| !value.is_null()) + .map(|value| defined_name_scope(&s.doc()?.wb, Some(value), "formulas.deleteName")) + .transpose()?; edit(s, |cx| { let before = cx.wb.names.len(); cx.wb.names.retain(|n| !(n.name.eq_ignore_ascii_case(&name) && scope.is_none_or(|sc| n.scope == sc))); @@ -499,6 +509,7 @@ fn delete_name(s: &mut Session, p: &Json) -> Result { }) } +/// Returns visible names with legacy display scopes and unambiguous identities for editing. fn name_manager(s: &mut Session, _: &Json) -> Result { let d = s.doc()?; let list: Vec = d @@ -511,7 +522,8 @@ fn name_manager(s: &mut Session, _: &Json) -> Result { // parse_name, not evaluate's parse: a name's top-level commas are unions. let v = gridcraft_formula::parse_name(&n.formula) .map_or(Value::Error(CellError::Name), |e| gridcraft_calc::recalc::evaluate_expr(&d.wb, sheet, CellRef::default(), &e)); - json!({"name": n.name, "refersTo": format!("={}", n.formula), "scope": n.scope.and_then(|i| d.wb.sheet(i)).map(|s| s.name.clone()).unwrap_or_else(|| "Workbook".into()), "value": crate::cmd::inspect::value_json(&v), "comment": n.comment}) + let scope_sheet = n.scope.and_then(|i| d.wb.sheet(i)).map(|s| s.name.as_str()); + json!({"name": n.name, "refersTo": format!("={}", n.formula), "scope": scope_sheet.unwrap_or("Workbook"), "scopeIdentity": scope_sheet.map(|sheet| json!({"sheet":sheet})), "value": crate::cmd::inspect::value_json(&v), "comment": n.comment}) }) .collect(); Ok(Json::Array(list)) diff --git a/crates/engine/src/cmd/insert.rs b/crates/engine/src/cmd/insert.rs index 4bd564db37..824427723f 100644 --- a/crates/engine/src/cmd/insert.rs +++ b/crates/engine/src/cmd/insert.rs @@ -17,6 +17,7 @@ use super::{ }; use crate::selection::current_region; +/// Registers insertion commands and their canonical parameter schemas. pub fn specs() -> Vec { vec![ cmd!( @@ -24,7 +25,7 @@ pub fn specs() -> Vec { "Table", ["Insert", "Tables"], Some("Cmd+T"), - "{range?, header?: true, style?: \"TableStyleMedium2\", name?}", + "{range?, columnPrefix?: string (default Column), header?: true, style?: \"TableStyleMedium2\", name?}", has_doc, insert_table ), @@ -33,7 +34,7 @@ pub fn specs() -> Vec { "Format as Table", ["Home", "Styles"], None, - "{range?, style: \"TableStyleMedium2\", header?} (inside a table: restyles it)", + "{range?, style: \"TableStyleMedium2\", header?, columnPrefix?: string (default Column)} (inside a table: restyles it)", has_doc, format_as_table ), @@ -270,7 +271,15 @@ fn chart_areas(s: &Session, p: &Json) -> Result> { // ---------------------------------------------------------------- tables +/// Creates a structured table, retaining supplied headers and numbering missing headers with the requested prefix. fn insert_table(s: &mut Session, p: &Json) -> Result { + let column_prefix = match p.get("columnPrefix") { + None => "Column", + Some(Json::String(value)) if !value.trim().is_empty() && value.chars().count() <= 64 && !value.chars().any(char::is_control) => { + value.as_str() + } + _ => return Err(bad("insert.table", "columnPrefix must be a nonempty string of at most 64 characters")), + }; let r = block(s, p)?; let sheet = target_sheet(s, p)?; let d = s.doc()?; @@ -328,7 +337,7 @@ fn insert_table(s: &mut Session, p: &Json) -> Result { rewrite(cx, &name, &e)?; let sh = cx.sheet_mut(sheet)?; for (i, c) in (r.start.col..=r.end.col).enumerate() { - sh.set_value(CellRef::new(r.start.row, c), gridcraft_core::Value::text(format!("Column{}", i + 1))); + sh.set_value(CellRef::new(r.start.row, c), gridcraft_core::Value::text(format!("{column_prefix}{}", i + 1))); } cx.structural = true; RangeRef::new(r.start, CellRef::new((r.end.row + 1).min(MAX_ROWS - 1), r.end.col)) @@ -342,7 +351,7 @@ fn insert_table(s: &mut Session, p: &Json) -> Result { for c in r.start.col..=r.end.col { let mut n = sh.value(CellRef::new(r.start.row, c)).display(); if n.is_empty() { - n = format!("Column{}", c - r.start.col + 1); + n = format!("{column_prefix}{}", c - r.start.col + 1); } let base = n.clone(); let key = base.to_ascii_lowercase(); @@ -475,10 +484,26 @@ fn write_totals(sh: &mut Sheet, ti: usize) { for (i, col) in t.columns.iter().enumerate() { let c = CellRef::new(row, t.range.start.col + i as u32); if let Some(code) = col.totals.subtotal_code() { - let f = format!("=SUBTOTAL({code},{}[{}])", t.name, col.name); + let f = gridcraft_formula::Expr::Call( + "SUBTOTAL".into(), + vec![ + gridcraft_formula::Expr::Number(f64::from(code)), + gridcraft_formula::Expr::Struct(gridcraft_formula::StructRef { + table: t.name.clone(), + specifiers: vec![], + col_start: Some(col.name.clone()), + col_end: None, + }), + ], + ); sh.set_cell( c, - Cell { formula: Some(std::sync::Arc::new(Formula::new(&f))), value: gridcraft_core::Value::Empty, style: sh.style_id(c), py: None }, + Cell { + formula: Some(std::sync::Arc::new(Formula::from_expr(f))), + value: gridcraft_core::Value::Empty, + style: sh.style_id(c), + py: None, + }, ); } else if let Some(l) = &col.totals_label { sh.set_value(c, gridcraft_core::Value::text(l.as_str())); diff --git a/crates/engine/src/cmd/sheet.rs b/crates/engine/src/cmd/sheet.rs index 95a0c93f58..851023c77d 100644 --- a/crates/engine/src/cmd/sheet.rs +++ b/crates/engine/src/cmd/sheet.rs @@ -16,6 +16,7 @@ mod tabs; use tabs::{activate, delete_sheet, hide_sheet, insert_sheet, move_sheet, rename_sheet, step_sheet, tab_color, unhide_sheet}; +/// Registers sheet and cell-structure commands, including optional generated-name prefixes. pub fn specs() -> Vec { vec![ cmd!( @@ -54,7 +55,15 @@ pub fn specs() -> Vec { insert_copied_cells ), cmd!("home.deleteCells", "Delete Cells…", ["Home", "Cells", "Delete"], None, "{range?, shift: left|up|row|column}", has_doc, delete_cells), - cmd!("home.insertSheet", "Insert Sheet", ["Home", "Cells", "Insert"], Some("Shift+F11"), "{name?, before?: index}", has_doc, insert_sheet), + cmd!( + "home.insertSheet", + "Insert Sheet", + ["Home", "Cells", "Insert"], + Some("Shift+F11"), + "{name?, namePrefix?: string (default Sheet; used when name is omitted), before?: index}", + has_doc, + insert_sheet + ), cmd!("home.deleteSheet", "Delete Sheet", ["Home", "Cells", "Delete"], None, "{sheet?}", has_doc, delete_sheet), cmd!("sheet.rename", "Rename Sheet", ["Home", "Cells", "Format"], None, "{sheet?, name}", has_doc, rename_sheet), cmd!("sheet.move", "Move or Copy Sheet…", ["Home", "Cells", "Format"], None, "{sheet?, to: index, copy?: bool}", has_doc, move_sheet), @@ -221,12 +230,13 @@ pub(super) fn rewrite(cx: &mut Ctx, target: &str, e: &Edit) -> Result<()> { cx.edits.push((target.to_string(), e.clone())); let wb = &mut cx.wb; super::edit::rewrite_all_formulas(wb, target, e)?; + let order: Vec<_> = wb.sheets.iter().map(|sheet| sheet.name.clone()).collect(); for si in 0..wb.sheets.len() { let host = wb.sheets.get(si).map(|s| s.name.clone()).unwrap_or_default(); let Some(sh) = wb.sheet_mut(si) else { continue }; let fix = |text: &str| -> String { match gridcraft_formula::parse(text) { - Ok(expr) => gridcraft_formula::print(&gridcraft_formula::adjust::adjust(expr, &host, target, e)), + Ok(expr) => gridcraft_formula::print(&gridcraft_formula::adjust::adjust_in(expr, &host, target, e, &order)), Err(_) => text.to_string(), } }; @@ -239,7 +249,7 @@ pub(super) fn rewrite(cx: &mut Ctx, target: &str, e: &Edit) -> Result<()> { let body = pt.source.trim().trim_start_matches('='); if let Ok(expr) = gridcraft_formula::parse(body) { let before = gridcraft_formula::print(&expr); - let after = gridcraft_formula::print(&gridcraft_formula::adjust::adjust(expr, &host, target, e)); + let after = gridcraft_formula::print(&gridcraft_formula::adjust::adjust_in(expr, &host, target, e, &order)); if after != before { pt.source = after; } diff --git a/crates/engine/src/cmd/sheet/tabs.rs b/crates/engine/src/cmd/sheet/tabs.rs index 2c1657ef90..7e67b97c7d 100644 --- a/crates/engine/src/cmd/sheet/tabs.rs +++ b/crates/engine/src/cmd/sheet/tabs.rs @@ -1,12 +1,20 @@ use super::{Arc, CellRef, Ctx, EngineError, Json, Result, Session, Sheet, Visibility, bad, bool_param, edit, json, ok, str_param, target_sheet}; +/// Inserts a sheet with a validated explicit name or a unique name built from the optional display-language prefix. pub(super) fn insert_sheet(s: &mut Session, p: &Json) -> Result { if s.doc()?.wb.protected_structure { return Err(EngineError::Other("The workbook is protected and cannot be changed.".into())); } let name = match str_param(p, "name") { Some(n) => n.to_string(), - None => s.doc()?.wb.next_sheet_name(), + None => { + if p.get("namePrefix").is_some_and(|value| !value.is_string()) { + return Err(bad("home.insertSheet", "`namePrefix` must be a string")); + } + let prefix = str_param(p, "namePrefix").unwrap_or("Sheet"); + crate::cmd::check_generated_prefix("home.insertSheet", prefix, true)?; + s.doc()?.wb.next_sheet_name_with_prefix(prefix) + } }; s.doc()?.wb.check_sheet_name(&name, None).map_err(EngineError::Other)?; let d = s.doc_mut()?; @@ -104,6 +112,7 @@ pub(super) fn rename_sheet(s: &mut Session, p: &Json) -> Result { s.doc()?.wb.check_sheet_name(&name, Some(i)).map_err(EngineError::Other)?; edit(s, |cx| { let old = cx.wb.sheet(i).map(|s| s.name.clone()).unwrap_or_default(); + let order: Vec<_> = cx.wb.sheets.iter().map(|sheet| sheet.name.clone()).collect(); cx.sheet_mut(i)?.name = name.clone(); for si in 0..cx.wb.sheets.len() { let keys: Vec<(CellRef, Arc)> = @@ -111,7 +120,7 @@ pub(super) fn rename_sheet(s: &mut Session, p: &Json) -> Result { let Some(sh) = cx.wb.sheet_mut(si) else { continue }; for (c, f) in keys { // Compares trees, so unchanged formulas are not printed; they keep their text. - let changed = f.with_expr(|e| Some(gridcraft_formula::adjust::rename_sheet(e.clone(), &old, &name)).filter(|ne| ne != e)); + let changed = f.with_expr(|e| Some(gridcraft_formula::adjust::rename_sheet_in(e.clone(), &old, &name, &order)).filter(|ne| ne != e)); if let Some(Some(ne)) = changed && let Some(cell) = sh.cells.get_mut(c) { @@ -121,19 +130,19 @@ pub(super) fn rename_sheet(s: &mut Session, p: &Json) -> Result { for ch in sh.charts.iter_mut() { // A PivotChart follows its PivotTable's sheet. if let Some((sheet, pivot)) = ch.pivot.as_deref().and_then(crate::pivot::parse_chart_link) - && sheet.eq_ignore_ascii_case(&old) + && gridcraft_formula::adjust::sheet_position(&order, &sheet) == Some(i) { ch.pivot = Some(crate::pivot::chart_link(&name, &pivot)); } } } - crate::cmd::edit::rewrite_cell_links(&mut cx.wb, |_, e| gridcraft_formula::adjust::rename_sheet(e, &old, &name)); + crate::cmd::edit::rewrite_cell_links(&mut cx.wb, |_, e| gridcraft_formula::adjust::rename_sheet_in(e, &old, &name, &order)); for n in cx.wb.names.iter_mut() { if let Ok(e) = gridcraft_formula::parse_name(&n.formula) { - n.formula = gridcraft_formula::print(&gridcraft_formula::adjust::rename_sheet(e, &old, &name)); + n.formula = gridcraft_formula::print(&gridcraft_formula::adjust::rename_sheet_in(e, &old, &name, &order)); } } - crate::cmd::edit::rewrite_python_refs(&mut cx.wb, &|_, e| gridcraft_formula::adjust::rename_sheet(e, &old, &name))?; + crate::cmd::edit::rewrite_python_refs(&mut cx.wb, &|_, e| gridcraft_formula::adjust::rename_sheet_in(e, &old, &name, &order))?; cx.structural = true; Ok(Json::Null) }) @@ -154,6 +163,7 @@ pub(super) fn move_sheet(s: &mut Session, p: &Json) -> Result { // The copy is a sheet of its own, not the one it was copied from. sh.uid = gridcraft_model::SheetUid::fresh(); let base = sh.name.clone(); + let order: Vec<_> = cx.wb.sheets.iter().map(|sheet| sheet.name.clone()).collect(); // `Name (2)`: the name is shortened so the suffix fits in Excel's 31 characters. let name = (2..) .map(|k| { @@ -165,7 +175,7 @@ pub(super) fn move_sheet(s: &mut Session, p: &Json) -> Result { .unwrap_or(base.clone()); sh.name = name; sh.tables.clear(); // table names must be unique - sh.preserved = None; // kept file content (form controls, OLE objects…) stays with the original + sh.preserved = None; // kept file content (form controls, OLE objects…) stays with the original // Object ids are unique across the workbook (selection and the `{kind, id}` commands // rely on it), so the copied objects get fresh ones (free ones, even when a file used // the largest id). @@ -190,7 +200,7 @@ pub(super) fn move_sheet(s: &mut Session, p: &Json) -> Result { .filter(|nm| nm.scope == Some(i)) .map(|nm| { let formula = gridcraft_formula::parse_name(&nm.formula) - .map(|e| gridcraft_formula::print(&gridcraft_formula::adjust::rename_sheet(e, &base, &sh.name))) + .map(|e| gridcraft_formula::print(&gridcraft_formula::adjust::rename_sheet_in(e, &base, &sh.name, &order))) .unwrap_or_else(|_| nm.formula.clone()); gridcraft_model::DefinedName { scope: Some(at), formula, ..nm.clone() } }) @@ -294,3 +304,17 @@ pub(super) fn step_sheet(s: &mut Session, dir: isize) -> Result { // No visible sheet in this direction: keep the current sheet and its selection. ok() } + +#[cfg(test)] +mod tests { + use crate::Session; + use serde_json::json; + + #[test] + fn insert_sheet_rejects_a_non_string_name_prefix() { + let mut session = Session::default(); + session.new_workbook(); + assert!(session.execute("home.insertSheet", json!({"namePrefix": 42})).is_err()); + assert!(session.execute("home.insertSheet", json!({})).is_ok()); + } +} diff --git a/crates/engine/src/lib.rs b/crates/engine/src/lib.rs index 58979526cf..45e7476ac0 100644 --- a/crates/engine/src/lib.rs +++ b/crates/engine/src/lib.rs @@ -625,14 +625,23 @@ impl Session { } /// A new blank workbook titled `BookN`. pub fn new_workbook(&mut self) -> usize { - let n = (1..).find(|n| !self.docs.iter().any(|d| d.title == format!("Book{n}") && d.path.is_none())).unwrap_or(1); + self.new_workbook_named("Book", "Sheet") + } + + /// Creates a blank workbook using caller-supplied generated-name prefixes. + /// Callers must validate the prefixes first; the `file.new` command performs that validation. + pub fn new_workbook_named(&mut self, book_prefix: &str, sheet_prefix: &str) -> usize { + let n = (1..).find(|n| !self.docs.iter().any(|d| d.title == format!("{book_prefix}{n}") && d.path.is_none())).unwrap_or(1); let mut wb = Workbook::new(); + if let Some(sheet) = wb.sheet_mut(0) { + sheet.name = format!("{sheet_prefix}1"); + } wb.props.author = self.prefs.user_name.clone(); for _ in 1..self.prefs.sheets_in_new_workbook.clamp(1, 255) { - let name = wb.next_sheet_name(); + let name = wb.next_sheet_name_with_prefix(sheet_prefix); wb.sheets.push(Arc::new(gridcraft_model::Sheet::new(name))); } - self.add_document(DocState::new(wb, None, format!("Book{n}"), Trust::Local)) + self.add_document(DocState::new(wb, None, format!("{book_prefix}{n}"), Trust::Local)) } /// Journals a command, then trims the oldest entries past either cap. A recording in progress diff --git a/crates/engine/src/macros/mod.rs b/crates/engine/src/macros/mod.rs index ecbe6f6741..97cd0a2cb2 100644 --- a/crates/engine/src/macros/mod.rs +++ b/crates/engine/src/macros/mod.rs @@ -487,7 +487,12 @@ pub fn check_new_name(wb: &Workbook, name: &str) -> Result { /// The first free `Macro1`, `Macro2`… name, also free among the kept macros ([`kept_name`]). pub fn next_name(wb: &Workbook) -> String { - (1..).map(|n| format!("Macro{n}")).find(|n| find(wb, n).is_none() && kept_name(wb, n).is_none()).unwrap_or_else(|| "Macro".into()) + next_name_with_prefix(wb, "Macro") +} + +/// Generates a unique macro name with the caller's localized prefix. +pub fn next_name_with_prefix(wb: &Workbook, prefix: &str) -> String { + (1..).map(|n| format!("{prefix}{n}")).find(|n| find(wb, n).is_none() && kept_name(wb, n).is_none()).unwrap_or_else(|| prefix.into()) } /// Every command step of `steps` (inside Repeat and If too), with its path. diff --git a/crates/engine/src/tests.rs b/crates/engine/src/tests.rs index f5c17ba169..b9815b9961 100644 --- a/crates/engine/src/tests.rs +++ b/crates/engine/src/tests.rs @@ -1,5 +1,5 @@ use gridcraft_core::{CellRef, Value}; -use serde_json::json; +use serde_json::{Value as Json, json}; use crate::Session; @@ -2540,6 +2540,21 @@ fn sheets() { assert_eq!(s.execute("cell.get", json!({"cell": "A1"})).unwrap()["formula"], "='My Data'!A1*2"); } +#[test] +fn rename_and_delete_keep_references_to_the_other_case_variant() { + let mut session = s(); + // An imported book can contain spellings the new-sheet dialog would decline. + let wb = std::sync::Arc::make_mut(&mut session.doc_mut().unwrap().wb); + for name in ["лист1", "ЛИСТ1"] { + wb.sheets.push(std::sync::Arc::new(gridcraft_model::Sheet::new(name))); + } + session.execute("cell.set", json!({"cell":"A1", "input":"=лист1!B1+ЛИСТ1!B1"})).unwrap(); + session.execute("sheet.rename", json!({"sheet":1, "name":"Data"})).unwrap(); + assert_eq!(session.execute("cell.get", json!({"cell":"A1"})).unwrap()["formula"], "=Data!B1+ЛИСТ1!B1"); + session.execute("home.deleteSheet", json!({"sheet":1})).unwrap(); + assert_eq!(session.execute("cell.get", json!({"cell":"A1"})).unwrap()["formula"], "=#REF!+ЛИСТ1!B1"); +} + #[test] fn sheet_operations_keep_names_on_their_sheets() { let names = |s: &Session| -> Vec<(String, Option, String)> { @@ -6683,6 +6698,97 @@ fn pivot_new_sheet_destination_respects_workbook_structure_protection() { assert!(s.execute("insert.pivotTable", json!({"source": "A1:B3", "location": "New"})).is_err()); } +/// Name Manager's identities distinguish a sheet literally named Workbook; null deletion stays legacy-wide. +#[test] +fn name_scope_identities_round_trip_and_null_deletion_keeps_its_contract() { + let mut s = s(); + for name in ["Workbook", "Other"] { + s.execute("home.insertSheet", json!({"name":name})).unwrap(); + } + let identities = [Json::Null, json!({"sheet":"Workbook"}), json!({"sheet":"Other"})]; + for scope in &identities { + s.execute("formulas.defineName", json!({"name":"Rate", "refersTo":"=1", "scope":scope})).unwrap(); + } + let result = s.execute("formulas.nameManager", json!({})).unwrap(); + let rows = result.as_array().unwrap(); + assert_eq!(rows.len(), 3); + for identity in &identities { + let row = rows.iter().find(|row| &row["scopeIdentity"] == identity).unwrap(); + assert_eq!(row["name"], "Rate"); + assert_eq!(row["scope"], identity.get("sheet").and_then(Json::as_str).unwrap_or("Workbook")); + } + s.execute("formulas.deleteName", json!({"name":"Rate", "scope":{"sheet":"Workbook"}})).unwrap(); + let result = s.execute("formulas.nameManager", json!({})).unwrap(); + let rows = result.as_array().unwrap(); + assert_eq!(rows.len(), 2); + assert!(rows.iter().any(|row| row["scopeIdentity"].is_null())); + assert!(rows.iter().any(|row| row["scopeIdentity"] == json!({"sheet":"Other"}))); + s.execute("formulas.deleteName", json!({"name":"Rate", "scope":"Workbook"})).unwrap(); + assert_eq!(s.doc().unwrap().wb.names.len(), 1); + s.execute("edit.undo", json!({})).unwrap(); + assert_eq!(s.doc().unwrap().wb.names.len(), 2); + s.execute("formulas.deleteName", json!({"name":"Rate", "scope":null})).unwrap(); + assert!(s.doc().unwrap().wb.names.is_empty()); + s.execute("edit.undo", json!({})).unwrap(); + assert_eq!(s.doc().unwrap().wb.names.len(), 2); +} + +/// Both naming commands apply the same limits, counting Unicode characters rather than bytes. +#[test] +fn generated_sheet_prefix_validation_is_shared_between_creation_commands() { + for prefix in ["", " ", "Bad/Name", "12345678901234567", "Bad\nName", "'Data"] { + let mut empty = Session::new(); + assert!(empty.execute("file.new", json!({"sheetPrefix":prefix})).is_err()); + assert!(empty.documents().is_empty()); + let mut existing = s(); + assert!(existing.execute("home.insertSheet", json!({"namePrefix":prefix})).is_err()); + assert_eq!(existing.doc().unwrap().wb.sheets.len(), 1); + } + let prefix = "Л".repeat(16); + let mut session = Session::new(); + session.execute("file.new", json!({"sheetPrefix":prefix})).unwrap(); + session.execute("home.insertSheet", json!({"namePrefix":prefix})).unwrap(); + assert_eq!(session.doc().unwrap().wb.sheets.len(), 2); + assert!(session.doc().unwrap().wb.sheets.iter().all(|s| s.name.starts_with(&prefix))); +} + +/// Totals use the shared formula printer for literal column names, including generated special characters. +#[test] +fn table_totals_with_special_column_names_recalculate_after_xlsx_round_trip() { + use gridcraft_formula::Expr; + for prefix in ["A[", "A]", "A#", "A'", "A,", "A:", "Лист["] { + let mut s = s(); + s.execute("range.setValues", json!({"range":"A1", "values":[[1,2],[3,5]]})).unwrap(); + s.execute("insert.table", json!({"range":"A1:B2", "header":false, "columnPrefix":prefix})).unwrap(); + let column = format!("{prefix}2"); + s.execute("table.totalRow", json!({"table":"Table1", "on":true})).unwrap(); + s.execute("table.totalFunction", json!({"table":"Table1", "column":column, "function":"sum"})).unwrap(); + assert_eq!(v(&s, "B4"), Value::Number(7.0), "{prefix}"); + let formula = &s.doc().unwrap().wb.active().unwrap().cell(CellRef::new(3, 1)).unwrap().formula.as_ref().unwrap().text; + let Expr::Call(_, args) = gridcraft_formula::parse(formula).unwrap() else { panic!("a SUBTOTAL call") }; + let Expr::Struct(reference) = &args[1] else { panic!("a structured reference") }; + assert_eq!(reference.table, "Table1"); + assert_eq!(reference.col_start.as_deref(), Some(column.as_str())); + let bytes = gridcraft_xlsx::write_xlsx(&s.doc().unwrap().wb).unwrap(); + s.execute("file.open", json!({"name":"escaped-columns.xlsx", "base64":crate::io::base64_encode(&bytes)})).unwrap(); + s.execute("formulas.calculateNow", json!({})).unwrap(); + assert_eq!(v(&s, "B4"), Value::Number(7.0), "{prefix} after saving"); + } +} + +/// The generated-name search and command validation agree on non-ASCII case collisions. +#[test] +fn generated_sheet_names_skip_unicode_case_collisions() { + let mut s = s(); + s.execute("home.insertSheet", json!({"name":"лист1"})).unwrap(); + s.execute("cell.set", json!({"sheet":"ЛИСТ1", "cell":"A1", "input":"7"})).unwrap(); + s.execute("home.insertSheet", json!({"namePrefix":"Лист"})).unwrap(); + assert_eq!(s.doc().unwrap().wb.active().unwrap().name, "Лист2"); + s.execute("cell.set", json!({"cell":"A1", "input":"=ЛИСТ1!A1"})).unwrap(); + assert_eq!(v(&s, "A1"), Value::Number(7.0)); + assert!(s.execute("home.insertSheet", json!({"name":"ЛИСТ1"})).is_err()); +} + #[test] fn circle_invalid_says_when_its_scan_allowance_ended_early() { let mut s = s(); diff --git a/crates/engine/tests/it/range_fill_formats.rs b/crates/engine/tests/it/range_fill_formats.rs index ce1d19fb6f..e1f81e2db5 100644 --- a/crates/engine/tests/it/range_fill_formats.rs +++ b/crates/engine/tests/it/range_fill_formats.rs @@ -91,3 +91,34 @@ fn a_fill_undoes_in_one_step() { assert_eq!(get(&mut s, "A2")["value"].as_f64(), Some(1.0)); assert_eq!(fmt_of(&s, "A2"), "General"); } + +/// Typed text filling does not parse any spelling and preserves destination formatting and undo. +#[test] +fn literal_fill_preserves_text_and_destination_styles_in_one_undo_step() { + for text in ["1,5", "1.5", "TRUE", "=1+2", "'quoted", "line\nbreak", ""] { + let mut s = session(); + s.execute("cell.set", json!({"cell":"A1", "input":"7"})).unwrap(); + s.execute("home.numberFormat", json!({"range":"B1", "format":"@"})).unwrap(); + s.execute("selection.set", json!({"range":"A1:B1"})).unwrap(); + s.execute("range.fill", json!({"input":text, "literal":true})).unwrap(); + for at in ["A1", "B1"] { + let filled = get(&mut s, at); + assert_eq!(filled["type"], "text", "{text}: {at}"); + assert_eq!(filled["value"], text, "{text}: {at}"); + } + assert_eq!(fmt_of(&s, "A1"), "General"); + assert_eq!(fmt_of(&s, "B1"), "@"); + s.execute("edit.undo", json!({})).unwrap(); + assert_eq!(get(&mut s, "A1")["value"], 7.0); + assert_eq!(get(&mut s, "B1")["type"], "empty"); + } +} + +/// Invalid literal modes fail before changing cells. +#[test] +fn literal_fill_rejects_non_boolean_modes() { + let mut s = session(); + s.execute("cell.set", json!({"cell":"A1", "input":"7"})).unwrap(); + assert!(s.execute("range.fill", json!({"input":"9", "literal":"yes"})).is_err()); + assert_eq!(get(&mut s, "A1")["value"], 7.0); +} diff --git a/crates/engine/tests/it/structural_edit_rewrite.rs b/crates/engine/tests/it/structural_edit_rewrite.rs index bb87ba3c43..f66aa708e2 100644 --- a/crates/engine/tests/it/structural_edit_rewrite.rs +++ b/crates/engine/tests/it/structural_edit_rewrite.rs @@ -82,3 +82,20 @@ fn deleting_an_unrelated_sheet_keeps_legacy_arrays() { run(&mut s, "home.deleteSheet", json!({"sheet": "Spare"})); assert_eq!(formula(&s, "Sheet1", "C1").array, Some(RangeRef::parse("C1:C2").unwrap())); } + +/// A reference compares sheet names the way `Workbook::sheet_index` resolves them, folding case in +/// any script: `лист1!A1` reaches the sheet named `Лист1`, so a structural edit on that sheet moves +/// it, a rename renames it, and a delete gives `#REF!` instead of leaving a stale name behind. +#[test] +fn a_case_variant_sheet_reference_follows_structural_edits() { + let mut s = workbook(); + run(&mut s, "sheet.rename", json!({"sheet": "Other", "name": "Лист1"})); + put_raw(&mut s, "C1", "лист1!A1"); + run(&mut s, "sheet.activate", json!({"sheet": "Лист1"})); + run(&mut s, "home.insertRows", json!({"rows": "1:1"})); + assert_eq!(formula(&s, "Sheet1", "C1").text, "лист1!A2"); + run(&mut s, "sheet.rename", json!({"sheet": "Лист1", "name": "Данные"})); + assert_eq!(formula(&s, "Sheet1", "C1").text, "Данные!A2"); + run(&mut s, "home.deleteSheet", json!({"sheet": "Данные"})); + assert_eq!(formula(&s, "Sheet1", "C1").text, "#REF!"); +} diff --git a/crates/formula/src/adjust.rs b/crates/formula/src/adjust.rs index ba6616d64c..6a4d419fcb 100644 --- a/crates/formula/src/adjust.rs +++ b/crates/formula/src/adjust.rs @@ -4,6 +4,7 @@ use gridcraft_core::{CellError, MAX_COLS, MAX_ROWS, RangeRef}; use crate::ast::{Anchor, Expr, RefKind, Reference, SheetSel, clamp_anchor}; +use crate::same_name; /// Copy/fill: relative parts move by `(dr, dc)`. References pushed off the sheet become `#REF!`. pub fn shift_relative(e: Expr, dr: i64, dc: i64) -> Expr { @@ -95,11 +96,22 @@ pub enum Edit { MoveToSheet { from: RangeRef, to_sheet: String, to_row: u32, to_col: u32 }, } -/// Whether `r`, in a formula living on sheet `host`, points into sheet `target`. -fn on_target(r: &Reference, host: &str, target: &str) -> bool { +/// Resolve an exact spelling first, then a folded spelling in tab order, like Workbook::sheet_index. +pub fn sheet_position(order: &[String], name: &str) -> Option { + order.iter().position(|s| s == name).or_else(|| order.iter().position(|s| same_name(s, name))) +} + +/// An imported workbook may contain distinct tabs whose names fold to the same spelling. +fn targets_sheet(reference: &str, target: &str, order: &[String]) -> bool { + reference == target + || (same_name(reference, target) + && sheet_position(order, reference).is_none_or(|i| order[i] == target || sheet_position(order, target) == Some(i))) +} + +fn on_target(r: &Reference, host: &str, target: &str, order: &[String]) -> bool { match &r.sheet { - SheetSel::Current => host.eq_ignore_ascii_case(target), - SheetSel::Named(n) => n.eq_ignore_ascii_case(target), + SheetSel::Current => targets_sheet(host, target, order), + SheetSel::Named(n) => targets_sheet(n, target, order), SheetSel::Span(..) => false, } } @@ -116,11 +128,11 @@ fn ref_changes(r: &Reference, edit: &Edit) -> bool { } /// Whether [`adjust`] would change the formula `e` at all, without copying or rebuilding it. -fn changes(e: &Expr, host: &str, target: &str, edit: &Edit) -> bool { +fn changes(e: &Expr, host: &str, target: &str, edit: &Edit, order: &[String]) -> bool { let mut changed = false; e.walk(&mut |x| { if !changed && let Expr::Ref(r) = x { - changed = on_target(r, host, target) && ref_changes(r, edit); + changed = on_target(r, host, target, order) && ref_changes(r, edit); } }); changed @@ -128,8 +140,13 @@ fn changes(e: &Expr, host: &str, target: &str, edit: &Edit) -> bool { /// Adjusts a formula living on sheet `host` after `edit` on sheet `target`. pub fn adjust(e: Expr, host: &str, target: &str, edit: &Edit) -> Expr { + adjust_in(e, host, target, edit, &[]) +} + +/// Adjusts references using the original tab order to resolve ambiguous names. +pub fn adjust_in(e: Expr, host: &str, target: &str, edit: &Edit, order: &[String]) -> Expr { e.map(&mut |x| match x { - Expr::Ref(r) if on_target(&r, host, target) => match adjust_ref(r, edit) { + Expr::Ref(r) if on_target(&r, host, target, order) => match adjust_ref(r, edit) { Some(r) => Expr::Ref(r), None => Expr::Error(CellError::Ref), }, @@ -140,7 +157,12 @@ pub fn adjust(e: Expr, host: &str, target: &str, edit: &Edit) -> Expr { /// [`adjust`] for a borrowed formula: `None` when the edit leaves it exactly as it is, so a /// caller can skip unaffected formulas without copying, rebuilding or printing them. pub fn adjust_if_changed(e: &Expr, host: &str, target: &str, edit: &Edit) -> Option { - changes(e, host, target, edit).then(|| adjust(e.clone(), host, target, edit)) + adjust_if_changed_in(e, host, target, edit, &[]) +} + +/// Borrowed form of [`adjust_in`]. +pub fn adjust_if_changed_in(e: &Expr, host: &str, target: &str, edit: &Edit, order: &[String]) -> Option { + changes(e, host, target, edit, order).then(|| adjust_in(e.clone(), host, target, edit, order)) } /// New position of an index after an insert (`None` never) or delete (`None` = deleted). @@ -273,17 +295,23 @@ fn adjust_ref(r: Reference, edit: &Edit) -> Option { } } -/// Renames sheet references `old` → `new`. +/// Renames sheet references `old` в†’ `new`. Names compare with `same_name`, like +/// `Workbook::sheet_index`, so a case variant in another script is renamed too. pub fn rename_sheet(e: Expr, old: &str, new: &str) -> Expr { + rename_sheet_in(e, old, new, &[]) +} + +/// Rewrites only references which resolved to the renamed tab before the rename. +pub fn rename_sheet_in(e: Expr, old: &str, new: &str, order: &[String]) -> Expr { e.map(&mut |x| match x { Expr::Ref(mut r) => { match &mut r.sheet { - SheetSel::Named(n) if n.eq_ignore_ascii_case(old) => *n = new.to_string(), + SheetSel::Named(n) if targets_sheet(n, old, order) => *n = new.to_string(), SheetSel::Span(a, b) => { - if a.eq_ignore_ascii_case(old) { + if targets_sheet(a, old, order) { *a = new.to_string(); } - if b.eq_ignore_ascii_case(old) { + if targets_sheet(b, old, order) { *b = new.to_string(); } } @@ -292,9 +320,10 @@ pub fn rename_sheet(e: Expr, old: &str, new: &str) -> Expr { Expr::Ref(r) } // Sheet-qualified defined name `Old!MyName` is stored as one string, with the bare sheet name as the parser - // stores it (the printer adds the quotes). - Expr::Name(n) => match n.split_at_checked(old.len()) { - Some((head, rest)) if head.eq_ignore_ascii_case(old) && rest.starts_with('!') => Expr::Name(format!("{new}{rest}")), + // stores it (the printer adds the quotes). Split at the last `!`: `same_name` folds names of different + // byte lengths (`K` U+212A and `K`, `Гџ` and `SS`), so `old.len()` is not where this name ends. + Expr::Name(n) => match n.rsplit_once('!') { + Some((head, rest)) if targets_sheet(head, old, order) => Expr::Name(format!("{new}!{rest}")), _ => Expr::Name(n), }, other => other, @@ -304,12 +333,12 @@ pub fn rename_sheet(e: Expr, old: &str, new: &str) -> Expr { /// References to a deleted sheet become `#REF!`. `order` lists the sheet names (before the deletion) in tab order: /// a 3-D span that loses an end sheet shrinks to the neighbouring surviving sheet, as in Excel. pub fn delete_sheet(e: Expr, name: &str, order: &[String]) -> Expr { - let pos = |n: &str| order.iter().position(|o| o.eq_ignore_ascii_case(n)); + let pos = |n: &str| sheet_position(order, n); e.map(&mut |x| match x { - Expr::Ref(r) if r.sheet_name().is_some_and(|n| n.eq_ignore_ascii_case(name)) => Expr::Error(CellError::Ref), + Expr::Ref(r) if r.sheet_name().is_some_and(|n| targets_sheet(n, name, order)) => Expr::Error(CellError::Ref), Expr::Ref(mut r) => { if let SheetSel::Span(a, b) = &r.sheet - && (a.eq_ignore_ascii_case(name) || b.eq_ignore_ascii_case(name)) + && (targets_sheet(a, name, order) || targets_sheet(b, name, order)) { let (Some(ia), Some(ib)) = (pos(a), pos(b)) else { return Expr::Ref(r) }; if ia == ib { @@ -317,12 +346,13 @@ pub fn delete_sheet(e: Expr, name: &str, order: &[String]) -> Expr { } // The deleted end moves one sheet towards the other end; the span keeps its direction. let inward = |from: usize, to: usize| order.get(if from < to { from + 1 } else { from.saturating_sub(1) }); - let (na, nb) = if a.eq_ignore_ascii_case(name) { (inward(ia, ib), order.get(ib)) } else { (order.get(ia), inward(ib, ia)) }; + let (na, nb) = if targets_sheet(a, name, order) { (inward(ia, ib), order.get(ib)) } else { (order.get(ia), inward(ib, ia)) }; let (Some(na), Some(nb)) = (na, nb) else { return Expr::Error(CellError::Ref) }; - r.sheet = if na.eq_ignore_ascii_case(nb) { SheetSel::Named(na.clone()) } else { SheetSel::Span(na.clone(), nb.clone()) }; + r.sheet = if na == nb { SheetSel::Named(na.clone()) } else { SheetSel::Span(na.clone(), nb.clone()) }; } Expr::Ref(r) } + Expr::Name(n) if n.rsplit_once('!').is_some_and(|(sheet, _)| targets_sheet(sheet, name, order)) => Expr::Error(CellError::Ref), other => other, }) } diff --git a/crates/formula/src/input.rs b/crates/formula/src/input.rs index 6d95587a74..eaf9e0425f 100644 --- a/crates/formula/src/input.rs +++ b/crates/formula/src/input.rs @@ -1,5 +1,19 @@ //! Localized aliases accepted at user-entry boundaries; file syntax stays English. +use gridcraft_core::CellError; +use std::collections::HashMap; +use std::sync::OnceLock; + +mod de; +mod en; +mod es; +mod fr; +mod it; +mod pl; +mod pt; +mod ru; +mod tr; + use crate::{Expr, ParseError, parser}; /// Formula-entry syntax selected by the interface language. Other interface languages @@ -8,60 +22,202 @@ use crate::{Expr, ParseError, parser}; pub enum FormulaLocale { #[default] En, + De, Es, + Pl, + Fr, + It, + PtBr, + Ru, + Tr, +} + +/// Per-locale data consumed by one parser/printer and one UI boundary. +struct LocaleData { + functions: &'static [(&'static str, &'static str)], + errors: &'static [(CellError, &'static str)], + separators: Separators, + table_items: Option<[&'static str; 5]>, + fold_alias: fn(&str) -> String, + aliases: OnceLock>, } -const SPANISH: &[(&str, &str)] = &[ - ("SUM", "SUMA"), - ("AVERAGE", "PROMEDIO"), - ("IF", "SI"), - ("COUNT", "CONTAR"), - ("SUMIF", "SUMAR.SI"), - ("COUNTIF", "CONTAR.SI"), - ("VLOOKUP", "BUSCARV"), - ("TODAY", "HOY"), - // Financial block (#1986): the loan-schedule and investment staples. - ("NPV", "VNA"), - ("IRR", "TIR"), - ("PMT", "PAGO"), - ("PV", "VA"), - ("FV", "VF"), - ("TRUE", "VERDADERO"), - ("FALSE", "FALSO"), -]; +#[derive(Clone, Copy)] +struct Separators { + decimal: char, + list: char, + array_column: char, + array_row: char, +} + +const ENGLISH_SEPARATORS: Separators = Separators { decimal: '.', list: ',', array_column: ',', array_row: ';' }; +const COMMA_DECIMAL_SEPARATORS: Separators = Separators { decimal: ',', list: ';', array_column: '\\', array_row: ';' }; + +/// Preserve a token until alias lookup if canonical ASCII casing changes its locale identity. +fn normalize_function_case(name: &str, fold: fn(&str) -> String) -> String { + let upper = name.to_ascii_uppercase(); + if upper == name || fold(name) == fold(&upper) { parser::normalize_function_name(name) } else { name.to_string() } +} impl FormulaLocale { + /// Returns the static syntax tables and alias cache for this formula locale. + fn data(self) -> &'static LocaleData { + match self { + Self::En => &en::DATA, + Self::De => &de::DATA, + Self::Es => &es::DATA, + Self::Pl => &pl::DATA, + Self::Fr => &fr::DATA, + Self::It => &it::DATA, + Self::PtBr => &pt::DATA, + Self::Ru => &ru::DATA, + Self::Tr => &tr::DATA, + } + } + + /// Separates function arguments and reference unions. pub fn list_separator(self) -> char { - if self == Self::Es { ';' } else { ',' } + self.data().separators.list } + /// Separates the integer and fractional parts of numeric literals. pub fn decimal_separator(self) -> char { - if self == Self::Es { ',' } else { '.' } + self.data().separators.decimal } + /// Separates columns inside array constants. pub fn array_column_separator(self) -> char { - if self == Self::Es { '\\' } else { ',' } + self.data().separators.array_column + } + /// Separates rows inside array constants. + pub fn array_row_separator(self) -> char { + self.data().separators.array_row + } + + /// Whether a character separates either rows or columns in a localized array constant. + pub(crate) fn is_array_separator(self, character: char) -> bool { + character == self.array_column_separator() || character == self.array_row_separator() } + + /// Case folding for formula aliases only; workbook names keep their own identity. + pub fn fold_alias(self, name: &str) -> String { + (self.data().fold_alias)(name) + } + + /// Normalizes a function token without erasing locale-specific case distinctions. + pub fn normalize_function_name(self, name: &str) -> String { + normalize_function_case(name, self.data().fold_alias) + } + + /// Preferred local spelling of a built-in; unmapped names keep their canonical spelling. pub fn function_name(self, canonical: &str) -> &str { - if self == Self::Es { - SPANISH.iter().find(|(en, _)| en.eq_ignore_ascii_case(canonical)).map(|(_, es)| *es).unwrap_or(canonical) - } else { - canonical + self.data().functions.iter().find(|(en, _)| en.eq_ignore_ascii_case(canonical)).map_or(canonical, |(_, local)| *local) + } + + /// Spells a built-in without capturing a workbook name or another localized built-in. + pub fn unshadowed_function_name<'a>(self, name: &'a str, bound: impl Fn(&str) -> bool) -> std::borrow::Cow<'a, str> { + let alias = self.function_name(name); + if !bound(alias) { + return alias.into(); } + if self.canonical_name(name) != name { format!("_xlfn.{name}").into() } else { name.into() } } + + /// Resolves a local alias; unmapped names remain unchanged. pub fn canonical_name(self, localized: &str) -> &str { - if self == Self::Es { - SPANISH.iter().find(|(_, es)| es.eq_ignore_ascii_case(localized)).map(|(en, _)| *en).unwrap_or(localized) - } else { - localized + let data = self.data(); + if data.functions.is_empty() { + return localized; } + data.aliases + .get_or_init(|| data.functions.iter().map(|(en, local)| (self.fold_alias(local), *en)).collect()) + .get(&self.fold_alias(localized)) + .copied() + .unwrap_or(localized) + } + + /// Localized error spelling at the editor boundary. Files keep CellError's canonical text. + pub fn error_name(self, error: CellError) -> &'static str { + self.data().errors.iter().find(|(value, _)| *value == error).map_or(error.as_str(), |(_, text)| *text) + } + + /// Both a locale's spelling and the canonical spelling identify the same error value. + pub fn parse_error(self, text: &str) -> Option { + CellError::parse(text).or_else(|| { + let folded = self.fold_alias(text); + self.data().errors.iter().find(|(_, spelling)| self.fold_alias(spelling) == folded).map(|(error, _)| *error) + }) } } +const TABLE_ITEMS: [&str; 5] = ["#All", "#Data", "#Headers", "#Totals", "#This Row"]; + +impl FormulaLocale { + /// Converts localized structured-reference specifiers to canonical parser input. + pub(crate) fn canonical_struct_body(self, body: &str) -> std::borrow::Cow<'_, str> { + match self.data().table_items.as_ref() { + Some(items) => translate_struct(body, items, &TABLE_ITEMS, self.list_separator(), ',').into(), + None => body.into(), + } + } +} + +/// Rewrites specifiers (`#Headers` <-> `#Kopfzeilen`) and the separator between bracketed +/// items, leaving column names and `'` escapes alone. +fn translate_struct(inner: &str, from: &[&'static str; 5], to: &[&'static str; 5], from_sep: char, to_sep: char) -> String { + let item = |text: &str| -> Option<&'static str> { from.iter().position(|f| crate::same_name(text.trim(), f)).and_then(|i| to.get(i).copied()) }; + // Excel allows spaces around bracketed items (`Tabla1[ [#Datos]; [Col1] ]`). + if !inner.trim_start().starts_with('[') { + return item(inner).map_or_else(|| inner.to_string(), str::to_string); + } + let mut out = String::with_capacity(inner.len()); + let mut group = String::new(); + let mut depth = 0usize; + let mut chars = inner.chars(); + while let Some(c) = chars.next() { + match c { + '\'' => { + let target = if depth > 0 { &mut group } else { &mut out }; + target.push(c); + if let Some(escaped) = chars.next() { + target.push(escaped); + } + } + '[' => { + if depth == 0 { + group.clear(); + } else { + group.push(c); + } + depth += 1; + } + ']' if depth > 0 => { + depth -= 1; + if depth == 0 { + out.push('['); + out.push_str(item(&group).unwrap_or(&group)); + out.push(']'); + } else { + group.push(c); + } + } + c if depth == 0 && c == from_sep => out.push(to_sep), + c if depth > 0 => group.push(c), + c => out.push(c), + } + } + if depth > 0 { + // Unbalanced input: keep what was read so the parser reports the error. + out.push('['); + out.push_str(&group); + } + out +} + /// Parses UI input using the selected function table and separators. Existing names and /// LET/LAMBDA bindings take precedence over aliases. File and API syntax uses [`crate::parse`]. pub fn parse_input(src: &str, locale: FormulaLocale, known_name: impl Fn(&str) -> bool) -> Result { let mut expr = parser::parse_syntax(src, locale)?; - if locale == FormulaLocale::Es { - normalize(&mut expr, &known_name, &mut Bindings::default(), 0, false)?; + if locale != FormulaLocale::En { + normalize(&mut expr, locale, &known_name, &mut Bindings::default(), 0, false)?; } Ok(expr) } @@ -96,7 +252,7 @@ pub fn print_input(expr: &Expr, locale: FormulaLocale, known_name: impl Fn(&str) return Ok(crate::print(expr)); } let mut expr = expr.clone(); - normalize(&mut expr, &known_name, &mut Bindings::default(), 0, true)?; + normalize(&mut expr, locale, &known_name, &mut Bindings::default(), 0, true)?; let canonical = crate::print(&expr); let tokens = crate::lexer::tokenize(&canonical).map_err(|e| ParseError { msg: e.msg, pos: e.pos })?; let mut out = String::new(); @@ -113,6 +269,17 @@ pub fn print_input(expr: &Expr, locale: FormulaLocale, known_name: impl Fn(&str) array_depth = array_depth.saturating_sub(1); out.push_str(text); } + Tok::Struct(body) => { + if let Some(items) = locale.data().table_items.as_ref() { + out.push('['); + out.push_str(&translate_struct(&body, &TABLE_ITEMS, items, ',', locale.list_separator())); + out.push(']'); + } else { + out.push_str(text); + } + } + Tok::Error(error) => out.push_str(locale.error_name(error)), + Tok::Semicolon if array_depth > 0 => out.push(locale.array_row_separator()), Tok::Number(_) => out.push_str(&text.replace('.', &locale.decimal_separator().to_string())), Tok::Comma => out.push(if array_depth > 0 { locale.array_column_separator() } else { locale.list_separator() }), _ => out.push_str(text), @@ -121,13 +288,15 @@ pub fn print_input(expr: &Expr, locale: FormulaLocale, known_name: impl Fn(&str) Ok(out) } -pub(crate) fn boolean_alias(name: &str) -> Option { - if name.eq_ignore_ascii_case("VERDADERO") { - Some(true) - } else if name.eq_ignore_ascii_case("FALSO") { - Some(false) - } else { - None +/// Resolves a localized Boolean alias; English literals are handled by the canonical parser. +pub(crate) fn boolean_alias(name: &str, locale: FormulaLocale) -> Option { + if locale == FormulaLocale::En { + return None; + } + match locale.canonical_name(name) { + "TRUE" => Some(true), + "FALSE" => Some(false), + _ => None, } } @@ -167,21 +336,36 @@ impl Bindings { } } -fn normalize(expr: &mut Expr, known_name: &impl Fn(&str) -> bool, bindings: &mut Bindings, depth: usize, display: bool) -> Result<(), ParseError> { +/// Rewrites aliases between canonical and display forms while preserving workbook and local bindings. +/// Bounds nested expressions and walks flat binary chains iteratively; display selects the direction. +fn normalize( + expr: &mut Expr, + locale: FormulaLocale, + known_name: &impl Fn(&str) -> bool, + bindings: &mut Bindings, + depth: usize, + display: bool, +) -> Result<(), ParseError> { if depth > parser::MAX_DEPTH { return Err(ParseError { msg: "formula is nested too deeply".into(), pos: 0 }); } let bound = |name: &str, bindings: &Bindings| bindings.contains(name) || known_name(name); match expr { Expr::Bool(value) if display => { - let alias = if *value { "VERDADERO" } else { "FALSO" }; + let alias = locale.function_name(if *value { "TRUE" } else { "FALSE" }); if !bound(alias, bindings) { *expr = Expr::Name(alias.into()); } } - Expr::Name(name) if !display && !bound(name, bindings) => { - if let Some(value) = boolean_alias(name) { + Expr::Name(name) if !bound(name, bindings) => { + if display { + *name = locale.unshadowed_function_name(name, |alias| bound(alias, bindings)).into_owned(); + } else if let Some(canonical) = name.strip_prefix("_xlfn.") { + *name = canonical.to_owned(); + } else if let Some(value) = boolean_alias(name, locale) { *expr = Expr::Bool(value); + } else { + *name = locale.canonical_name(name).to_owned(); } } Expr::Call(name, args) if name == "LET" && args.len() >= 3 && !args.len().is_multiple_of(2) => { @@ -190,13 +374,13 @@ fn normalize(expr: &mut Expr, known_name: &impl Fn(&str) -> bool, bindings: &mut for pair in pairs.chunks_mut(2) { if let [declaration, value] = pair { // The new name is not in scope in its own value expression. - normalize(value, known_name, bindings, depth + 1, display)?; + normalize(value, locale, known_name, bindings, depth + 1, display)?; if let Expr::Name(name) = declaration { bindings.push(name); } } } - normalize(body, known_name, bindings, depth + 1, display)?; + normalize(body, locale, known_name, bindings, depth + 1, display)?; } bindings.truncate(saved); } @@ -208,40 +392,45 @@ fn normalize(expr: &mut Expr, known_name: &impl Fn(&str) -> bool, bindings: &mut bindings.push(name); } } - normalize(body, known_name, bindings, depth + 1, display)?; + normalize(body, locale, known_name, bindings, depth + 1, display)?; } bindings.truncate(saved); } Expr::Call(name, args) => { - let alias = if display { FormulaLocale::Es.function_name(name) } else { FormulaLocale::Es.canonical_name(name) }; - if !bound(name, bindings) && (!display || !bound(alias, bindings)) { - *name = alias.to_string(); + if !display && let Some(explicit) = name.strip_prefix("_xlfn.") { + *name = explicit.to_owned(); + } else if !bound(name, bindings) { + *name = if display { + locale.unshadowed_function_name(name, |alias| bound(alias, bindings)).into_owned() + } else { + parser::normalize_function_name(locale.canonical_name(name)) + }; } for arg in args { - normalize(arg, known_name, bindings, depth + 1, display)?; + normalize(arg, locale, known_name, bindings, depth + 1, display)?; } } Expr::Invoke(callee, args) => { - normalize(callee, known_name, bindings, depth + 1, display)?; + normalize(callee, locale, known_name, bindings, depth + 1, display)?; for arg in args { - normalize(arg, known_name, bindings, depth + 1, display)?; + normalize(arg, locale, known_name, bindings, depth + 1, display)?; } } - Expr::Unary(_, child) | Expr::Paren(child) => normalize(child, known_name, bindings, depth + 1, display)?, + Expr::Unary(_, child) | Expr::Paren(child) => normalize(child, locale, known_name, bindings, depth + 1, display)?, Expr::Binary(..) => { // Follow the left spine of a flat chain (A1+A2+…) in a loop: it is not nesting. // Each call leaves `bindings` as it found them, so the order does not matter. let mut node = expr; while let Expr::Binary(_, left, right) = node { - normalize(right, known_name, bindings, depth + 1, display)?; + normalize(right, locale, known_name, bindings, depth + 1, display)?; node = left; } - normalize(node, known_name, bindings, depth, display)?; + normalize(node, locale, known_name, bindings, depth, display)?; } Expr::Array(rows) if display => { for row in rows { for child in row { - normalize(child, known_name, bindings, depth + 1, display)?; + normalize(child, locale, known_name, bindings, depth + 1, display)?; } } } @@ -251,3 +440,24 @@ fn normalize(expr: &mut Expr, known_name: &impl Fn(&str) -> bool, bindings: &mut } Ok(()) } + +#[cfg(test)] +mod case_rule_tests { + use super::normalize_function_case; + + /// Verifies token normalization preserves distinctions required by a locale-specific case fold. + #[test] + fn locale_case_rules_survive_token_normalization() { + // A data-only example of a case rule where ASCII upper-casing loses information. + /// Models dotted-I alias folding to exercise a case distinction lost by ASCII uppercasing. + fn dotted_i_fold(name: &str) -> String { + name.chars().flat_map(|c| if c == 'i' { 'İ'.to_uppercase() } else { c.to_uppercase() }).collect() + } + assert_eq!(normalize_function_case("indis", dotted_i_fold), "indis"); + assert_eq!(normalize_function_case("sum", dotted_i_fold), "SUM"); + assert_eq!(normalize_function_case("sum", str::to_lowercase), "SUM"); + assert_eq!(normalize_function_case("_xlfn.sum", str::to_lowercase), "SUM"); + assert_eq!(normalize_function_case("_XLUDF.sum", str::to_lowercase), "_xludf.SUM"); + assert_eq!(normalize_function_case("İNDİS", dotted_i_fold), "İNDİS"); + } +} diff --git a/crates/formula/src/input/de.rs b/crates/formula/src/input/de.rs new file mode 100644 index 0000000000..d74946194a --- /dev/null +++ b/crates/formula/src/input/de.rs @@ -0,0 +1,485 @@ +//! German (de-DE) function names for formula entry and display. +//! +//! Taken from PR #1201 by Herr-Enklo (`crates/formula/src/input/de.rs`), which observed them +//! black-box in Excel 365 (German interface, de-DE regional format) on 2026-10-13 through its +//! automation interface, in synthetic workbooks that were never saved: every function GridCraft +//! knows was entered in canonical form (`Range.Formula2`) and read back as German Excel shows it +//! (`Range.Formula2Local`). Functions not listed keep their English name in German Excel (ABS, +//! FILTER, INDEX, LAMBDA, LET, MAP, MAX, MIN, TEXT and others). +//! +//! Separators: `;` between arguments, `,` decimal, `.` between array columns, `;` between rows. +//! `#CALC!` stays English. German Excel does not take `#ÜBERLAUF!` or `#CALC!` as typed literals; +//! GridCraft accepts them, as it accepts `#SPILL!` in English. +//! Table specifiers (`#Alle`, `#Daten`, `#Kopfzeilen`, `#Ergebnisse`, `#Diese Zeile`) are not +//! localized yet. + +use gridcraft_core::CellError; + +pub(super) static DATA: super::LocaleData = super::LocaleData { + functions: GERMAN, + errors: GERMAN_ERRORS, + table_items: None, + separators: super::Separators { array_column: '.', ..super::COMMA_DECIMAL_SEPARATORS }, + fold_alias: str::to_lowercase, + aliases: std::sync::OnceLock::new(), +}; + +/// Canonical function names and their German spellings. +pub(crate) const GERMAN: &[(&str, &str)] = &[ + ("ACCRINT", "AUFGELZINS"), + ("ACCRINTM", "AUFGELZINSF"), + ("ACOS", "ARCCOS"), + ("ACOSH", "ARCCOSHYP"), + ("ACOT", "ARCCOT"), + ("ACOTH", "ARCCOTHYP"), + ("ADDRESS", "ADRESSE"), + ("AGGREGATE", "AGGREGAT"), + ("AMORDEGRC", "AMORDEGRK"), + ("AMORLINC", "AMORLINEARK"), + ("AND", "UND"), + ("ARABIC", "ARABISCH"), + ("AREAS", "BEREICHE"), + ("ARRAYTOTEXT", "MATRIXZUTEXT"), + ("ASIN", "ARCSIN"), + ("ASINH", "ARCSINHYP"), + ("ATAN", "ARCTAN"), + ("ATAN2", "ARCTAN2"), + ("ATANH", "ARCTANHYP"), + ("AVEDEV", "MITTELABW"), + ("AVERAGE", "MITTELWERT"), + ("AVERAGEA", "MITTELWERTA"), + ("AVERAGEIF", "MITTELWERTWENN"), + ("AVERAGEIFS", "MITTELWERTWENNS"), + ("BASE", "BASIS"), + ("BETA.DIST", "BETA.VERT"), + ("BETADIST", "BETAVERT"), + ("BIN2DEC", "BININDEZ"), + ("BIN2HEX", "BININHEX"), + ("BIN2OCT", "BININOKT"), + ("BINOM.DIST", "BINOM.VERT"), + ("BINOM.DIST.RANGE", "BINOM.VERT.BEREICH"), + ("BINOMDIST", "BINOMVERT"), + ("BITAND", "BITUND"), + ("BITLSHIFT", "BITLVERSCHIEB"), + ("BITOR", "BITODER"), + ("BITRSHIFT", "BITRVERSCHIEB"), + ("BITXOR", "BITXODER"), + ("BYCOL", "NACHSPALTE"), + ("BYROW", "NACHZEILE"), + ("CEILING", "OBERGRENZE"), + ("CEILING.MATH", "OBERGRENZE.MATHEMATIK"), + ("CEILING.PRECISE", "OBERGRENZE.GENAU"), + ("CELL", "ZELLE"), + ("CHAR", "ZEICHEN"), + ("CHIDIST", "CHIVERT"), + ("CHISQ.DIST", "CHIQU.VERT"), + ("CHISQ.DIST.RT", "CHIQU.VERT.RE"), + ("CHISQ.INV", "CHIQU.INV"), + ("CHISQ.INV.RT", "CHIQU.INV.RE"), + ("CHISQ.TEST", "CHIQU.TEST"), + ("CHOOSE", "WAHL"), + ("CHOOSECOLS", "SPALTENWAHL"), + ("CHOOSEROWS", "ZEILENWAHL"), + ("CLEAN", "SÄUBERN"), + ("COLUMN", "SPALTE"), + ("COLUMNS", "SPALTEN"), + ("COMBIN", "KOMBINATIONEN"), + ("COMBINA", "KOMBINATIONEN2"), + ("COMPLEX", "KOMPLEXE"), + ("CONCAT", "TEXTKETTE"), + ("CONCATENATE", "VERKETTEN"), + ("CONFIDENCE", "KONFIDENZ"), + ("CONFIDENCE.NORM", "KONFIDENZ.NORM"), + ("CONFIDENCE.T", "KONFIDENZ.T"), + ("CONVERT", "UMWANDELN"), + ("CORREL", "KORREL"), + ("COSH", "COSHYP"), + ("COTH", "COTHYP"), + ("COUNT", "ANZAHL"), + ("COUNTA", "ANZAHL2"), + ("COUNTBLANK", "ANZAHLLEEREZELLEN"), + ("COUNTIF", "ZÄHLENWENN"), + ("COUNTIFS", "ZÄHLENWENNS"), + ("COUPDAYBS", "ZINSTERMTAGVA"), + ("COUPDAYS", "ZINSTERMTAGE"), + ("COUPDAYSNC", "ZINSTERMTAGNZ"), + ("COUPNCD", "ZINSTERMNZ"), + ("COUPNUM", "ZINSTERMZAHL"), + ("COUPPCD", "ZINSTERMVZ"), + ("COVAR", "KOVAR"), + ("COVARIANCE.P", "KOVARIANZ.P"), + ("COVARIANCE.S", "KOVARIANZ.S"), + ("CRITBINOM", "KRITBINOM"), + ("CSC", "COSEC"), + ("CSCH", "COSECHYP"), + ("CUBEKPIMEMBER", "CUBEKPIELEMENT"), + ("CUBEMEMBER", "CUBEELEMENT"), + ("CUBEMEMBERPROPERTY", "CUBEELEMENTEIGENSCHAFT"), + ("CUBERANKEDMEMBER", "CUBERANGELEMENT"), + ("CUBESET", "CUBEMENGE"), + ("CUBESETCOUNT", "CUBEMENGENANZAHL"), + ("CUBEVALUE", "CUBEWERT"), + ("CUMIPMT", "KUMZINSZ"), + ("CUMPRINC", "KUMKAPITAL"), + ("DATE", "DATUM"), + ("DATEVALUE", "DATWERT"), + ("DAVERAGE", "DBMITTELWERT"), + ("DAY", "TAG"), + ("DAYS", "TAGE"), + ("DAYS360", "TAGE360"), + ("DB", "GDA2"), + ("DCOUNT", "DBANZAHL"), + ("DCOUNTA", "DBANZAHL2"), + ("DDB", "GDA"), + ("DEC2BIN", "DEZINBIN"), + ("DEC2HEX", "DEZINHEX"), + ("DEC2OCT", "DEZINOKT"), + ("DECIMAL", "DEZIMAL"), + ("DEGREES", "GRAD"), + ("DETECTLANGUAGE", "SPRACHEERKENNEN"), + ("DEVSQ", "SUMQUADABW"), + ("DGET", "DBAUSZUG"), + ("DISC", "DISAGIO"), + ("DMAX", "DBMAX"), + ("DMIN", "DBMIN"), + ("DOLLAR", "DM"), + ("DOLLARDE", "NOTIERUNGDEZ"), + ("DOLLARFR", "NOTIERUNGBRU"), + ("DPRODUCT", "DBPRODUKT"), + ("DROP", "WEGLASSEN"), + ("DSTDEV", "DBSTDABW"), + ("DSTDEVP", "DBSTDABWN"), + ("DSUM", "DBSUMME"), + ("DVAR", "DBVARIANZ"), + ("DVARP", "DBVARIANZEN"), + ("EDATE", "EDATUM"), + ("EFFECT", "EFFEKTIV"), + ("ENCODEURL", "URLCODIEREN"), + ("EOMONTH", "MONATSENDE"), + ("ERF", "GAUSSFEHLER"), + ("ERF.PRECISE", "GAUSSF.GENAU"), + ("ERFC", "GAUSSFKOMPL"), + ("ERFC.PRECISE", "GAUSSFKOMPL.GENAU"), + ("ERROR.TYPE", "FEHLER.TYP"), + ("EVEN", "GERADE"), + ("EXACT", "IDENTISCH"), + ("EXPAND", "ERWEITERN"), + ("EXPON.DIST", "EXPON.VERT"), + ("EXPONDIST", "EXPONVERT"), + ("F.DIST", "F.VERT"), + ("F.DIST.RT", "F.VERT.RE"), + ("F.INV.RT", "F.INV.RE"), + ("FACT", "FAKULTÄT"), + ("FACTDOUBLE", "ZWEIFAKULTÄT"), + ("FALSE", "FALSCH"), + ("FDIST", "FVERT"), + ("FILTERXML", "XMLFILTERN"), + ("FIND", "FINDEN"), + ("FINDB", "FINDENB"), + ("FIXED", "FEST"), + ("FLOOR", "UNTERGRENZE"), + ("FLOOR.MATH", "UNTERGRENZE.MATHEMATIK"), + ("FLOOR.PRECISE", "UNTERGRENZE.GENAU"), + ("FORECAST", "SCHÄTZER"), + ("FORECAST.ETS", "PROGNOSE.ETS"), + ("FORECAST.ETS.CONFINT", "PROGNOSE.ETS.KONFINT"), + ("FORECAST.ETS.SEASONALITY", "PROGNOSE.ETS.SAISONALITÄT"), + ("FORECAST.ETS.STAT", "PROGNOSE.ETS.STAT"), + ("FORECAST.LINEAR", "PROGNOSE.LINEAR"), + ("FORMULATEXT", "FORMELTEXT"), + ("FREQUENCY", "HÄUFIGKEIT"), + ("FV", "ZW"), + ("FVSCHEDULE", "ZW2"), + ("GAMMA.DIST", "GAMMA.VERT"), + ("GAMMADIST", "GAMMAVERT"), + ("GAMMALN.PRECISE", "GAMMALN.GENAU"), + ("GCD", "GGT"), + ("GEOMEAN", "GEOMITTEL"), + ("GESTEP", "GGANZZAHL"), + ("GETPIVOTDATA", "PIVOTDATENZUORDNEN"), + ("GROUPBY", "GRUPPIERENNACH"), + ("GROWTH", "VARIATION"), + ("HARMEAN", "HARMITTEL"), + ("HEX2BIN", "HEXINBIN"), + ("HEX2DEC", "HEXINDEZ"), + ("HEX2OCT", "HEXINOKT"), + ("HLOOKUP", "WVERWEIS"), + ("HOUR", "STUNDE"), + ("HSTACK", "HSTAPELN"), + ("HYPGEOM.DIST", "HYPGEOM.VERT"), + ("HYPGEOMDIST", "HYPGEOMVERT"), + ("IF", "WENN"), + ("IFERROR", "WENNFEHLER"), + ("IFNA", "WENNNV"), + ("IFS", "WENNS"), + ("IMAGE", "BILD"), + ("IMAGINARY", "IMAGINÄRTEIL"), + ("IMCONJUGATE", "IMKONJUGIERTE"), + ("IMCOSH", "IMCOSHYP"), + ("IMCSC", "IMCOSEC"), + ("IMCSCH", "IMCOSECHYP"), + ("IMPOWER", "IMAPOTENZ"), + ("IMPRODUCT", "IMPRODUKT"), + ("IMREAL", "IMREALTEIL"), + ("IMSECH", "IMSECHYP"), + ("IMSINH", "IMSINHYP"), + ("IMSQRT", "IMWURZEL"), + ("IMSUM", "IMSUMME"), + ("INDIRECT", "INDIREKT"), + ("INT", "GANZZAHL"), + ("INTERCEPT", "ACHSENABSCHNITT"), + ("INTRATE", "ZINSSATZ"), + ("IPMT", "ZINSZ"), + ("IRR", "IKV"), + ("ISBLANK", "ISTLEER"), + ("ISERR", "ISTFEHL"), + ("ISERROR", "ISTFEHLER"), + ("ISEVEN", "ISTGERADE"), + ("ISFORMULA", "ISTFORMEL"), + ("ISLOGICAL", "ISTLOG"), + ("ISNA", "ISTNV"), + ("ISNONTEXT", "ISTKTEXT"), + ("ISNUMBER", "ISTZAHL"), + ("ISO.CEILING", "ISO.OBERGRENZE"), + ("ISODD", "ISTUNGERADE"), + ("ISOMITTED", "WURDEAUSGELASSEN"), + ("ISOWEEKNUM", "ISOKALENDERWOCHE"), + ("ISREF", "ISTBEZUG"), + ("ISTEXT", "ISTTEXT"), + ("LARGE", "KGRÖSSTE"), + ("LCM", "KGV"), + ("LEFT", "LINKS"), + ("LEFTB", "LINKSB"), + ("LEN", "LÄNGE"), + ("LENB", "LÄNGEB"), + ("LINEST", "RGP"), + ("LOGEST", "RKP"), + ("LOGNORM.DIST", "LOGNORM.VERT"), + ("LOGNORMDIST", "LOGNORMVERT"), + ("LOOKUP", "VERWEIS"), + ("LOWER", "KLEIN"), + ("MAKEARRAY", "MATRIXERSTELLEN"), + ("MATCH", "VERGLEICH"), + ("MAXIFS", "MAXWENNS"), + ("MDETERM", "MDET"), + ("MID", "TEIL"), + ("MIDB", "TEILB"), + ("MINIFS", "MINWENNS"), + ("MINVERSE", "MINV"), + ("MIRR", "QIKV"), + ("MOD", "REST"), + ("MODE", "MODALWERT"), + ("MODE.MULT", "MODUS.VIELF"), + ("MODE.SNGL", "MODUS.EINF"), + ("MONTH", "MONAT"), + ("MROUND", "VRUNDEN"), + ("MULTINOMIAL", "POLYNOMIAL"), + ("MUNIT", "MEINHEIT"), + ("NA", "NV"), + ("NEGBINOM.DIST", "NEGBINOM.VERT"), + ("NEGBINOMDIST", "NEGBINOMVERT"), + ("NETWORKDAYS", "NETTOARBEITSTAGE"), + ("NETWORKDAYS.INTL", "NETTOARBEITSTAGE.INTL"), + ("NORM.DIST", "NORM.VERT"), + ("NORM.S.DIST", "NORM.S.VERT"), + ("NORMDIST", "NORMVERT"), + ("NORMSDIST", "STANDNORMVERT"), + ("NORMSINV", "STANDNORMINV"), + ("NOT", "NICHT"), + ("NOW", "JETZT"), + ("NPER", "ZZR"), + ("NPV", "NBW"), + ("NUMBERVALUE", "ZAHLENWERT"), + ("OCT2BIN", "OKTINBIN"), + ("OCT2DEC", "OKTINDEZ"), + ("OCT2HEX", "OKTINHEX"), + ("ODD", "UNGERADE"), + ("ODDFPRICE", "UNREGER.KURS"), + ("ODDFYIELD", "UNREGER.REND"), + ("ODDLPRICE", "UNREGLE.KURS"), + ("ODDLYIELD", "UNREGLE.REND"), + ("OFFSET", "BEREICH.VERSCHIEBEN"), + ("OR", "ODER"), + ("PERCENTILE", "QUANTIL"), + ("PERCENTILE.EXC", "QUANTIL.EXKL"), + ("PERCENTILE.INC", "QUANTIL.INKL"), + ("PERCENTOF", "PROZENTVON"), + ("PERCENTRANK", "QUANTILSRANG"), + ("PERCENTRANK.EXC", "QUANTILSRANG.EXKL"), + ("PERCENTRANK.INC", "QUANTILSRANG.INKL"), + ("PERMUT", "VARIATIONEN"), + ("PERMUTATIONA", "VARIATIONEN2"), + ("PIVOTBY", "PIVOTMIT"), + ("PMT", "RMZ"), + ("POISSON.DIST", "POISSON.VERT"), + ("POWER", "POTENZ"), + ("PPMT", "KAPZ"), + ("PRICE", "KURS"), + ("PRICEDISC", "KURSDISAGIO"), + ("PRICEMAT", "KURSFÄLLIG"), + ("PROB", "WAHRSCHBEREICH"), + ("PRODUCT", "PRODUKT"), + ("PROPER", "GROSS2"), + ("PV", "BW"), + ("QUARTILE.EXC", "QUARTILE.EXKL"), + ("QUARTILE.INC", "QUARTILE.INKL"), + ("RADIANS", "BOGENMASS"), + ("RAND", "ZUFALLSZAHL"), + ("RANDARRAY", "ZUFALLSMATRIX"), + ("RANDBETWEEN", "ZUFALLSBEREICH"), + ("RANK", "RANG"), + ("RANK.AVG", "RANG.MITTELW"), + ("RANK.EQ", "RANG.GLEICH"), + ("RATE", "ZINS"), + ("RECEIVED", "AUSZAHLUNG"), + ("REGEXEXTRACT", "REGEXEXTRAHIEREN"), + ("REGEXREPLACE", "REGEXERSETZEN"), + ("REGEXTEST", "REGEXTESTEN"), + ("REPLACE", "ERSETZEN"), + ("REPLACEB", "ERSETZENB"), + ("REPT", "WIEDERHOLEN"), + ("RIGHT", "RECHTS"), + ("RIGHTB", "RECHTSB"), + ("ROMAN", "RÖMISCH"), + ("ROUND", "RUNDEN"), + ("ROUNDDOWN", "ABRUNDEN"), + ("ROUNDUP", "AUFRUNDEN"), + ("ROW", "ZEILE"), + ("ROWS", "ZEILEN"), + ("RRI", "ZSATZINVEST"), + ("RSQ", "BESTIMMTHEITSMASS"), + ("SEARCH", "SUCHEN"), + ("SEARCHB", "SUCHENB"), + ("SECH", "SECHYP"), + ("SECOND", "SEKUNDE"), + ("SEQUENCE", "SEQUENZ"), + ("SERIESSUM", "POTENZREIHE"), + ("SHEET", "BLATT"), + ("SHEETS", "BLÄTTER"), + ("SIGN", "VORZEICHEN"), + ("SINH", "SINHYP"), + ("SKEW", "SCHIEFE"), + ("SKEW.P", "SCHIEFE.P"), + ("SLN", "LIA"), + ("SLOPE", "STEIGUNG"), + ("SMALL", "KKLEINSTE"), + ("SORT", "SORTIEREN"), + ("SORTBY", "SORTIERENNACH"), + ("SQRT", "WURZEL"), + ("SQRTPI", "WURZELPI"), + ("STANDARDIZE", "STANDARDISIERUNG"), + ("STDEV", "STABW"), + ("STDEV.P", "STABW.N"), + ("STDEV.S", "STABW.S"), + ("STDEVA", "STABWA"), + ("STDEVP", "STABWN"), + ("STDEVPA", "STABWNA"), + ("STEYX", "STFEHLERYX"), + ("SUBSTITUTE", "WECHSELN"), + ("SUBTOTAL", "TEILERGEBNIS"), + ("SUM", "SUMME"), + ("SUMIF", "SUMMEWENN"), + ("SUMIFS", "SUMMEWENNS"), + ("SUMPRODUCT", "SUMMENPRODUKT"), + ("SUMSQ", "QUADRATESUMME"), + ("SUMX2MY2", "SUMMEX2MY2"), + ("SUMX2PY2", "SUMMEX2PY2"), + ("SUMXMY2", "SUMMEXMY2"), + ("SWITCH", "ERSTERWERT"), + ("SYD", "DIA"), + ("T.DIST", "T.VERT"), + ("T.DIST.2T", "T.VERT.2S"), + ("T.DIST.RT", "T.VERT.RE"), + ("T.INV.2T", "T.INV.2S"), + ("TABLE", "MEHRFACHOPERATION"), + ("TAKE", "ÜBERNEHMEN"), + ("TANH", "TANHYP"), + ("TBILLEQ", "TBILLÄQUIV"), + ("TBILLPRICE", "TBILLKURS"), + ("TBILLYIELD", "TBILLRENDITE"), + ("TDIST", "TVERT"), + ("TEXTAFTER", "TEXTNACH"), + ("TEXTBEFORE", "TEXTVOR"), + ("TEXTJOIN", "TEXTVERKETTEN"), + ("TEXTSPLIT", "TEXTTEILEN"), + ("TIME", "ZEIT"), + ("TIMEVALUE", "ZEITWERT"), + ("TOCOL", "ZUSPALTE"), + ("TODAY", "HEUTE"), + ("TOROW", "ZUZEILE"), + ("TRANSLATE", "ÜBERSETZEN"), + ("TRANSPOSE", "MTRANS"), + ("TRIM", "GLÄTTEN"), + ("TRIMMEAN", "GESTUTZTMITTEL"), + ("TRIMRANGE", "ABSCHNBEREICH"), + ("TRUE", "WAHR"), + ("TRUNC", "KÜRZEN"), + ("TYPE", "TYP"), + ("UNICHAR", "UNIZEICHEN"), + ("UNIQUE", "EINDEUTIG"), + ("UPPER", "GROSS"), + ("VALUE", "WERT"), + ("VALUETOTEXT", "WERTZUTEXT"), + ("VAR", "VARIANZ"), + ("VARA", "VARIANZA"), + ("VARP", "VARIANZEN"), + ("VARPA", "VARIANZENA"), + ("VLOOKUP", "SVERWEIS"), + ("VSTACK", "VSTAPELN"), + ("WEBSERVICE", "WEBDIENST"), + ("WEEKDAY", "WOCHENTAG"), + ("WEEKNUM", "KALENDERWOCHE"), + ("WEIBULL.DIST", "WEIBULL.VERT"), + ("WORKDAY", "ARBEITSTAG"), + ("WORKDAY.INTL", "ARBEITSTAG.INTL"), + ("WRAPCOLS", "SPALTENUMBRUCH"), + ("WRAPROWS", "ZEILENUMBRUCH"), + ("XIRR", "XINTZINSFUSS"), + ("XLOOKUP", "XVERWEIS"), + ("XMATCH", "XVERGLEICH"), + ("XNPV", "XKAPITALWERT"), + ("XOR", "XODER"), + ("YEAR", "JAHR"), + ("YEARFRAC", "BRTEILJAHRE"), + ("YIELD", "RENDITE"), + ("YIELDDISC", "RENDITEDIS"), + ("YIELDMAT", "RENDITEFÄLL"), + ("Z.TEST", "G.TEST"), + ("ZTEST", "GTEST"), +]; + +/// Error values as German Excel shows them; `#CALC!` (and `#CIRC!`) keep the English name. +pub(crate) const GERMAN_ERRORS: &[(CellError, &str)] = &[ + (CellError::Value, "#WERT!"), + (CellError::Ref, "#BEZUG!"), + (CellError::Num, "#ZAHL!"), + (CellError::NA, "#NV"), + (CellError::GettingData, "#DATEN_ABRUFEN"), + (CellError::Spill, "#ÜBERLAUF!"), +]; + +#[cfg(test)] +mod tests { + use crate::{FormulaLocale, parse_input, print, print_input}; + + /// Checks every German alias, error spelling and separator against the shared parser. + #[test] + fn german_formula_syntax_round_trips() { + let locale = FormulaLocale::De; + for &(canonical, local) in super::GERMAN { + let input = format!("{local}(1,25;2)"); + let expr = parse_input(&input, locale, |_| false).unwrap(); + assert_eq!(print(&expr), format!("{canonical}(1.25,2)")); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), input); + } + for &(error, spelling) in super::GERMAN_ERRORS { + let expr = parse_input(&spelling.to_lowercase(), locale, |_| false).unwrap(); + assert_eq!(print(&expr), error.as_str()); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), spelling); + } + let array = "SUMME({1,5.2,25;3.4};0)"; + let expr = parse_input(array, locale, |_| false).unwrap(); + assert_eq!(print(&expr), "SUM({1.5,2.25;3,4},0)"); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), array); + } +} diff --git a/crates/formula/src/input/en.rs b/crates/formula/src/input/en.rs new file mode 100644 index 0000000000..7e0a272d3d --- /dev/null +++ b/crates/formula/src/input/en.rs @@ -0,0 +1,10 @@ +//! Canonical English syntax, used by files/APIs and by untranslated formula locales. + +pub(super) static DATA: super::LocaleData = super::LocaleData { + functions: &[], + errors: &[], + table_items: None, + separators: super::ENGLISH_SEPARATORS, + fold_alias: str::to_lowercase, + aliases: std::sync::OnceLock::new(), +}; diff --git a/crates/formula/src/input/es.rs b/crates/formula/src/input/es.rs new file mode 100644 index 0000000000..bfc14d69d7 --- /dev/null +++ b/crates/formula/src/input/es.rs @@ -0,0 +1,29 @@ +//! Spanish formula-entry data, moved from the original shared input module. + +pub(super) static DATA: super::LocaleData = super::LocaleData { + functions: FUNCTIONS, + errors: &[], + table_items: Some(["#Todo", "#Datos", "#Encabezados", "#Totales", "#Esta fila"]), + separators: super::COMMA_DECIMAL_SEPARATORS, + fold_alias: str::to_lowercase, + aliases: std::sync::OnceLock::new(), +}; + +const FUNCTIONS: &[(&str, &str)] = &[ + ("SUM", "SUMA"), + ("AVERAGE", "PROMEDIO"), + ("IF", "SI"), + ("COUNT", "CONTAR"), + ("SUMIF", "SUMAR.SI"), + ("COUNTIF", "CONTAR.SI"), + ("VLOOKUP", "BUSCARV"), + ("TODAY", "HOY"), + // Financial block (#1986): the loan-schedule and investment staples. + ("NPV", "VNA"), + ("IRR", "TIR"), + ("PMT", "PAGO"), + ("PV", "VA"), + ("FV", "VF"), + ("TRUE", "VERDADERO"), + ("FALSE", "FALSO"), +]; diff --git a/crates/formula/src/input/fr.rs b/crates/formula/src/input/fr.rs new file mode 100644 index 0000000000..96e3af5a4f --- /dev/null +++ b/crates/formula/src/input/fr.rs @@ -0,0 +1,482 @@ +//! Formula names and error spellings for Fr, adapted from PR #2655. +use gridcraft_core::CellError; + +pub(super) static DATA: super::LocaleData = super::LocaleData { + functions: FUNCTIONS, + errors: ERRORS, + table_items: None, + separators: super::Separators { array_column: '.', ..super::COMMA_DECIMAL_SEPARATORS }, + fold_alias: str::to_lowercase, + aliases: std::sync::OnceLock::new(), +}; + +const FUNCTIONS: &[(&str, &str)] = &[ + // Logical + ("IF", "SI"), + ("IFS", "SI.CONDITIONS"), + ("IFERROR", "SIERREUR"), + ("IFNA", "SI.NON.DISP"), + ("SWITCH", "SI.MULTIPLE"), + ("AND", "ET"), + ("OR", "OU"), + ("NOT", "NON"), + ("XOR", "OUX"), + ("TRUE", "VRAI"), + ("FALSE", "FAUX"), + // Math and trigonometry + ("AGGREGATE", "AGREGAT"), + ("ARABIC", "CHIFFRE.ARABE"), + ("CEILING", "PLAFOND"), + ("CEILING.MATH", "PLAFOND.MATH"), + ("CEILING.PRECISE", "PLAFOND.PRECIS"), + ("ECMA.CEILING", "ECMA.PLAFOND"), + ("DEGREES", "DEGRES"), + ("EVEN", "PAIR"), + ("FLOOR", "PLANCHER"), + ("FLOOR.MATH", "PLANCHER.MATH"), + ("FLOOR.PRECISE", "PLANCHER.PRECIS"), + ("GCD", "PGCD"), + ("INT", "ENT"), + ("ISO.CEILING", "ISO.PLAFOND"), + ("LCM", "PPCM"), + ("MDETERM", "DETERMAT"), + ("MINVERSE", "INVERSEMAT"), + ("MMULT", "PRODUITMAT"), + ("MROUND", "ARRONDI.AU.MULTIPLE"), + ("MULTINOMIAL", "MULTINOMIALE"), + ("MUNIT", "MATRICE.UNITAIRE"), + ("ODD", "IMPAIR"), + ("POWER", "PUISSANCE"), + ("PRODUCT", "PRODUIT"), + ("RAND", "ALEA"), + ("RANDARRAY", "TABLEAU.ALEA"), + ("RANDBETWEEN", "ALEA.ENTRE.BORNES"), + ("ROMAN", "ROMAIN"), + ("ROUND", "ARRONDI"), + ("ROUNDDOWN", "ARRONDI.INF"), + ("ROUNDUP", "ARRONDI.SUP"), + ("SERIESSUM", "SOMME.SERIES"), + ("SIGN", "SIGNE"), + ("SQRT", "RACINE"), + ("SQRTPI", "RACINE.PI"), + ("SUBTOTAL", "SOUS.TOTAL"), + ("SUM", "SOMME"), + ("SUMIF", "SOMME.SI"), + ("SUMIFS", "SOMME.SI.ENS"), + ("SUMPRODUCT", "SOMMEPROD"), + ("SUMSQ", "SOMME.CARRES"), + ("SUMX2MY2", "SOMME.X2MY2"), + ("SUMX2PY2", "SOMME.X2PY2"), + ("SUMXMY2", "SOMME.XMY2"), + ("TRUNC", "TRONQUE"), + // Statistical + ("AVEDEV", "ECART.MOYEN"), + ("AVERAGE", "MOYENNE"), + ("AVERAGEIF", "MOYENNE.SI"), + ("AVERAGEIFS", "MOYENNE.SI.ENS"), + ("BETA.DIST", "LOI.BETA.N"), + ("BETADIST", "LOI.BETA"), + ("BETA.INV", "BETA.INVERSE.N"), + ("BETAINV", "BETA.INVERSE"), + ("BINOM.DIST", "LOI.BINOMIALE.N"), + ("BINOMDIST", "LOI.BINOMIALE"), + ("BINOM.DIST.RANGE", "LOI.BINOMIALE.SERIE"), + ("BINOM.INV", "LOI.BINOMIALE.INVERSE"), + ("CHIDIST", "LOI.KHIDEUX"), + ("CHIINV", "KHIDEUX.INVERSE"), + ("CHISQ.DIST", "LOI.KHIDEUX.N"), + ("CHISQ.DIST.RT", "LOI.KHIDEUX.DROITE"), + ("CHISQ.INV", "LOI.KHIDEUX.INVERSE"), + ("CHISQ.INV.RT", "LOI.KHIDEUX.INVERSE.DROITE"), + ("CHITEST", "TEST.KHIDEUX"), + ("CONFIDENCE", "INTERVALLE.CONFIANCE"), + ("CONFIDENCE.NORM", "INTERVALLE.CONFIANCE.NORMAL"), + ("CONFIDENCE.T", "INTERVALLE.CONFIANCE.STUDENT"), + ("CORREL", "COEFFICIENT.CORRELATION"), + ("COUNT", "NB"), + ("COUNTA", "NBVAL"), + ("COUNTBLANK", "NB.VIDE"), + ("COUNTIF", "NB.SI"), + ("COUNTIFS", "NB.SI.ENS"), + ("COVAR", "COVARIANCE"), + ("COVARIANCE.P", "COVARIANCE.PEARSON"), + ("COVARIANCE.S", "COVARIANCE.STANDARD"), + ("CRITBINOM", "CRITERE.LOI.BINOMIALE"), + ("DEVSQ", "SOMME.CARRES.ECARTS"), + ("EXPON.DIST", "LOI.EXPONENTIELLE.N"), + ("EXPONDIST", "LOI.EXPONENTIELLE"), + ("F.DIST", "LOI.F.N"), + ("FDIST", "LOI.F"), + ("F.DIST.RT", "LOI.F.DROITE"), + ("F.INV", "INVERSE.LOI.F.N"), + ("FINV", "INVERSE.LOI.F"), + ("F.INV.RT", "INVERSE.LOI.F.DROITE"), + ("FISHERINV", "FISHER.INVERSE"), + ("FORECAST", "PREVISION"), + ("FORECAST.ETS", "PREVISION.ETS"), + ("FORECAST.ETS.CONFINT", "PREVISION.ETS.CONFINT"), + ("FORECAST.ETS.SEASONALITY", "PREVISION.ETS.CARACTERESAISONNIER"), + ("FORECAST.ETS.STAT", "PREVISION.ETS.STAT"), + ("FORECAST.LINEAR", "PREVISION.LINEAIRE"), + ("FREQUENCY", "FREQUENCE"), + ("FTEST", "TEST.F"), + ("GAMMA.DIST", "LOI.GAMMA.N"), + ("GAMMADIST", "LOI.GAMMA"), + ("GAMMA.INV", "LOI.GAMMA.INVERSE.N"), + ("GAMMAINV", "LOI.GAMMA.INVERSE"), + ("GAMMALN", "LNGAMMA"), + ("GAMMALN.PRECISE", "LNGAMMA.PRECIS"), + ("GEOMEAN", "MOYENNE.GEOMETRIQUE"), + ("GROWTH", "CROISSANCE"), + ("HARMEAN", "MOYENNE.HARMONIQUE"), + ("HYPGEOM.DIST", "LOI.HYPERGEOMETRIQUE.N"), + ("HYPGEOMDIST", "LOI.HYPERGEOMETRIQUE"), + ("INTERCEPT", "ORDONNEE.ORIGINE"), + ("KURT", "KURTOSIS"), + ("LARGE", "GRANDE.VALEUR"), + ("LINEST", "DROITEREG"), + ("LOGEST", "LOGREG"), + ("LOGINV", "LOI.LOGNORMALE.INVERSE"), + ("LOGNORM.DIST", "LOI.LOGNORMALE.N"), + ("LOGNORMDIST", "LOI.LOGNORMALE"), + ("LOGNORM.INV", "LOI.LOGNORMALE.INVERSE.N"), + ("MAXIFS", "MAX.SI.ENS"), + ("MEDIAN", "MEDIANE"), + ("MINIFS", "MIN.SI.ENS"), + ("MODE.MULT", "MODE.MULTIPLE"), + ("MODE.SNGL", "MODE.SIMPLE"), + ("NEGBINOM.DIST", "LOI.BINOMIALE.NEG.N"), + ("NEGBINOMDIST", "LOI.BINOMIALE.NEG"), + ("NORM.DIST", "LOI.NORMALE.N"), + ("NORMDIST", "LOI.NORMALE"), + ("NORM.INV", "LOI.NORMALE.INVERSE.N"), + ("NORMINV", "LOI.NORMALE.INVERSE"), + ("NORM.S.DIST", "LOI.NORMALE.STANDARD.N"), + ("NORMSDIST", "LOI.NORMALE.STANDARD"), + ("NORM.S.INV", "LOI.NORMALE.STANDARD.INVERSE.N"), + ("NORMSINV", "LOI.NORMALE.STANDARD.INVERSE"), + ("PERCENTILE", "CENTILE"), + ("PERCENTILE.EXC", "CENTILE.EXCLURE"), + ("PERCENTILE.INC", "CENTILE.INCLURE"), + ("PERCENTRANK", "RANG.POURCENTAGE"), + ("PERCENTOF", "POURCENTAGEDE"), + ("PERCENTRANK.EXC", "RANG.POURCENTAGE.EXCLURE"), + ("PERCENTRANK.INC", "RANG.POURCENTAGE.INCLURE"), + ("PERMUT", "PERMUTATION"), + ("POISSON", "LOI.POISSON"), + ("POISSON.DIST", "LOI.POISSON.N"), + ("PROB", "PROBABILITE"), + ("QUARTILE.EXC", "QUARTILE.EXCLURE"), + ("QUARTILE.INC", "QUARTILE.INCLURE"), + ("RANK", "RANG"), + ("RANK.AVG", "MOYENNE.RANG"), + ("RANK.EQ", "EQUATION.RANG"), + ("RSQ", "COEFFICIENT.DETERMINATION"), + ("SKEW", "COEFFICIENT.ASYMETRIE"), + ("SKEW.P", "COEFFICIENT.ASYMETRIE.P"), + ("SLOPE", "PENTE"), + ("SMALL", "PETITE.VALEUR"), + ("STANDARDIZE", "CENTREE.REDUITE"), + ("STDEV", "ECARTYPE"), + ("STDEV.P", "ECARTYPE.PEARSON"), + ("STDEVP", "ECARTYPEP"), + ("STDEV.S", "ECARTYPE.STANDARD"), + ("STEYX", "ERREUR.TYPE.XY"), + ("T.DIST", "LOI.STUDENT.N"), + ("TDIST", "LOI.STUDENT"), + ("T.DIST.2T", "LOI.STUDENT.BILATERALE"), + ("T.DIST.RT", "LOI.STUDENT.DROITE"), + ("T.INV", "LOI.STUDENT.INVERSE.N"), + ("TINV", "LOI.STUDENT.INVERSE"), + ("T.INV.2T", "LOI.STUDENT.INVERSE.BILATERALE"), + ("TREND", "TENDANCE"), + ("TRIMMEAN", "MOYENNE.REDUITE"), + ("TTEST", "TEST.STUDENT"), + ("VAR.P", "VAR.P.N"), + ("VARP", "VAR.P"), + ("WEIBULL", "LOI.WEIBULL"), + ("WEIBULL.DIST", "LOI.WEIBULL.N"), + ("ZTEST", "TEST.Z"), + // Text + ("ARRAYTOTEXT", "TABLEAU.EN.TEXTE"), + ("CHAR", "CAR"), + ("CLEAN", "EPURAGE"), + ("CONCATENATE", "CONCATENER"), + ("DOLLAR", "DEVISE"), + ("FIND", "TROUVE"), + ("FINDB", "TROUVERB"), + ("FIXED", "CTXT"), + ("LEFT", "GAUCHE"), + ("LEFTB", "GAUCHEB"), + ("LEN", "NBCAR"), + ("LOWER", "MINUSCULE"), + ("MID", "STXT"), + ("MIDB", "STXTB"), + ("NUMBERVALUE", "VALEURNOMBRE"), + ("PHONETIC", "PHONETIQUE"), + ("PROPER", "NOMPROPRE"), + ("REPLACE", "REMPLACER"), + ("REPLACEB", "REMPLACERB"), + ("RIGHT", "DROITE"), + ("RIGHTB", "DROITEB"), + ("SEARCH", "CHERCHE"), + ("SEARCHB", "CHERCHERB"), + ("SUBSTITUTE", "SUBSTITUE"), + ("TEXT", "TEXTE"), + ("TEXTAFTER", "TEXTE.APRES"), + ("TEXTBEFORE", "TEXTE.AVANT"), + ("TEXTJOIN", "JOINDRE.TEXTE"), + ("TEXTSPLIT", "FRACTIONNER.TEXTE"), + ("TRIM", "SUPPRESPACE"), + ("UNICHAR", "UNICAR"), + ("UPPER", "MAJUSCULE"), + ("VALUE", "CNUM"), + ("VALUETOTEXT", "VALEUR.EN.TEXTE"), + // Date and time + ("DATEVALUE", "DATEVAL"), + ("DAY", "JOUR"), + ("DAYS", "JOURS"), + ("DAYS360", "JOURS360"), + ("EDATE", "MOIS.DECALER"), + ("EOMONTH", "FIN.MOIS"), + ("HOUR", "HEURE"), + ("ISOWEEKNUM", "NO.SEMAINE.ISO"), + ("MONTH", "MOIS"), + ("NETWORKDAYS", "NB.JOURS.OUVRES"), + ("NETWORKDAYS.INTL", "NB.JOURS.OUVRES.INTL"), + ("NOW", "MAINTENANT"), + ("SECOND", "SECONDE"), + ("TIME", "TEMPS"), + ("TIMEVALUE", "TEMPSVAL"), + ("TODAY", "AUJOURDHUI"), + ("WEEKDAY", "JOURSEM"), + ("WEEKNUM", "NO.SEMAINE"), + ("WORKDAY", "SERIE.JOUR.OUVRE"), + ("WORKDAY.INTL", "SERIE.JOUR.OUVRE.INTL"), + ("YEAR", "ANNEE"), + ("YEARFRAC", "FRACTION.ANNEE"), + // Lookup and reference + ("ADDRESS", "ADRESSE"), + ("AREAS", "ZONES"), + ("CHOOSE", "CHOISIR"), + ("CHOOSECOLS", "CHOISIRCOLS"), + ("CHOOSEROWS", "CHOISIRLIGNES"), + ("COLUMN", "COLONNE"), + ("COLUMNS", "COLONNES"), + ("DROP", "EXCLURE"), + ("EXPAND", "ETENDRE"), + ("FILTER", "FILTRE"), + ("FORMULATEXT", "FORMULETEXTE"), + ("GROUPBY", "GROUPER.PAR"), + ("HLOOKUP", "RECHERCHEH"), + ("HSTACK", "ASSEMB.H"), + ("HYPERLINK", "LIEN_HYPERTEXTE"), + ("LOOKUP", "RECHERCHE"), + ("MATCH", "EQUIV"), + ("OFFSET", "DECALER"), + ("PIVOTBY", "PIVOTER.PAR"), + ("ROW", "LIGNE"), + ("ROWS", "LIGNES"), + ("SORT", "TRIER"), + ("SORTBY", "TRIERPAR"), + ("TAKE", "PRENDRE"), + ("VLOOKUP", "RECHERCHEV"), + ("VSTACK", "ASSEMB.V"), + ("WRAPCOLS", "ORGA.COLS"), + ("WRAPROWS", "ORGA.LIGNES"), + ("TOCOL", "DANSCOL"), + ("TOROW", "DANSLIGNE"), + ("XLOOKUP", "RECHERCHEX"), + ("XMATCH", "EQUIVX"), + // Information + ("CELL", "CELLULE"), + ("ERROR.TYPE", "TYPE.ERREUR"), + ("INFO", "INFORMATIONS"), + ("ISBLANK", "ESTVIDE"), + ("ISERR", "ESTERR"), + ("ISERROR", "ESTERREUR"), + ("ISEVEN", "EST.PAIR"), + ("ISFORMULA", "ESTFORMULE"), + ("ISLOGICAL", "ESTLOGIQUE"), + ("ISNA", "ESTNA"), + ("ISNONTEXT", "ESTNONTEXTE"), + ("ISNUMBER", "ESTNUM"), + ("ISODD", "EST.IMPAIR"), + ("ISREF", "ESTREF"), + ("ISTEXT", "ESTTEXTE"), + ("SHEET", "FEUILLE"), + ("SHEETS", "FEUILLES"), + // Financial + ("ACCRINT", "INTERET.ACC"), + ("ACCRINTM", "INTERET.ACC.MAT"), + ("COUPDAYBS", "NB.JOURS.COUPON.PREC"), + ("COUPDAYS", "NB.JOURS.COUPONS"), + ("COUPDAYSNC", "NB.JOURS.COUPON.SUIV"), + ("COUPNCD", "DATE.COUPON.SUIV"), + ("COUPNUM", "NB.COUPONS"), + ("COUPPCD", "DATE.COUPON.PREC"), + ("CUMIPMT", "CUMUL.INTER"), + ("CUMPRINC", "CUMUL.PRINCPER"), + ("DISC", "TAUX.ESCOMPTE"), + ("DOLLARDE", "PRIX.DEC"), + ("DOLLARFR", "PRIX.FRAC"), + ("DURATION", "DUREE"), + ("EFFECT", "TAUX.EFFECTIF"), + ("FV", "VC"), + ("FVSCHEDULE", "VC.PAIEMENTS"), + ("INTRATE", "TAUX.INTERET"), + ("IPMT", "INTPER"), + ("IRR", "TRI"), + ("MDURATION", "DUREE.MODIFIEE"), + ("MIRR", "TRIM"), + ("NOMINAL", "TAUX.NOMINAL"), + ("NPER", "NPM"), + ("NPV", "VAN"), + ("ODDFPRICE", "PRIX.PCOUPON.IRREG"), + ("ODDFYIELD", "REND.PCOUPON.IRREG"), + ("ODDLPRICE", "PRIX.DCOUPON.IRREG"), + ("ODDLYIELD", "REND.DCOUPON.IRREG"), + ("PDURATION", "PDUREE"), + ("PMT", "VPM"), + ("PPMT", "PRINCPER"), + ("PRICE", "PRIX.TITRE"), + ("PRICEDISC", "VALEUR.ENCAISSEMENT"), + ("PRICEMAT", "PRIX.TITRE.ECHEANCE"), + ("PV", "VA"), + ("RATE", "TAUX"), + ("RECEIVED", "VALEUR.NOMINALE"), + ("RRI", "TAUX.INT.EQUIV"), + ("SLN", "AMORLIN"), + ("TBILLEQ", "TAUX.ESCOMPTE.R"), + ("TBILLPRICE", "PRIX.BON.TRESOR"), + ("TBILLYIELD", "RENDEMENT.BON.TRESOR"), + ("XIRR", "TRI.PAIEMENTS"), + ("XNPV", "VAN.PAIEMENTS"), + ("YIELD", "RENDEMENT.TITRE"), + ("YIELDDISC", "RENDEMENT.SIMPLE"), + ("YIELDMAT", "RENDEMENT.TITRE.ECHEANCE"), + // Engineering + ("BIN2DEC", "BINDEC"), + ("BIN2HEX", "BINHEX"), + ("BIN2OCT", "BINOCT"), + ("BITAND", "BITET"), + ("BITLSHIFT", "BITDECALG"), + ("BITOR", "BITOU"), + ("BITRSHIFT", "BITDECALD"), + ("BITXOR", "BITOUEXCLUSIF"), + ("COMPLEX", "COMPLEXE"), + ("DEC2BIN", "DECBIN"), + ("DEC2HEX", "DECHEX"), + ("DEC2OCT", "DECOCT"), + ("ERF.PRECISE", "ERF.PRECIS"), + ("ERFC.PRECISE", "ERFC.PRECIS"), + ("GESTEP", "SUP.SEUIL"), + ("HEX2BIN", "HEXBIN"), + ("HEX2DEC", "HEXDEC"), + ("HEX2OCT", "HEXOCT"), + ("IMABS", "COMPLEXE.MODULE"), + ("IMAGINARY", "COMPLEXE.IMAGINAIRE"), + ("IMARGUMENT", "COMPLEXE.ARGUMENT"), + ("IMCONJUGATE", "COMPLEXE.CONJUGUE"), + ("IMCOS", "COMPLEXE.COS"), + ("IMCOSH", "COMPLEXE.COSH"), + ("IMCOT", "COMPLEXE.COT"), + ("IMCSC", "COMPLEXE.CSC"), + ("IMCSCH", "COMPLEXE.CSCH"), + ("IMDIV", "COMPLEXE.DIV"), + ("IMEXP", "COMPLEXE.EXP"), + ("IMLN", "COMPLEXE.LN"), + ("IMLOG10", "COMPLEXE.LOG10"), + ("IMLOG2", "COMPLEXE.LOG2"), + ("IMPOWER", "COMPLEXE.PUISSANCE"), + ("IMPRODUCT", "COMPLEXE.PRODUIT"), + ("IMREAL", "COMPLEXE.REEL"), + ("IMSEC", "COMPLEXE.SEC"), + ("IMSECH", "COMPLEXE.SECH"), + ("IMSIN", "COMPLEXE.SIN"), + ("IMSINH", "COMPLEXE.SINH"), + ("IMSQRT", "COMPLEXE.RACINE"), + ("IMSUB", "COMPLEXE.DIFFERENCE"), + ("IMSUM", "COMPLEXE.SOMME"), + ("IMTAN", "COMPLEXE.TAN"), + ("OCT2BIN", "OCTBIN"), + ("OCT2DEC", "OCTDEC"), + ("OCT2HEX", "OCTHEX"), + // Database + ("DAVERAGE", "BDMOYENNE"), + ("DCOUNT", "BDNB"), + ("DCOUNTA", "BDNBVAL"), + ("DGET", "BDLIRE"), + ("DMAX", "BDMAX"), + ("DMIN", "BDMIN"), + ("DPRODUCT", "BDPRODUIT"), + ("DSTDEV", "BDECARTYPE"), + ("DSTDEVP", "BDECARTYPEP"), + ("DSUM", "BDSOMME"), + ("DVAR", "BDVAR"), + ("DVARP", "BDVARP"), + // Cube + ("CUBEKPIMEMBER", "MEMBREKPICUBE"), + ("CUBEMEMBER", "MEMBRECUBE"), + ("CUBEMEMBERPROPERTY", "PROPRIETEMEMBRECUBE"), + ("CUBERANKEDMEMBER", "RANGMEMBRECUBE"), + ("CUBESET", "JEUCUBE"), + ("CUBESETCOUNT", "NBJEUCUBE"), + ("CUBEVALUE", "VALEURCUBE"), + // Web + ("ENCODEURL", "URLENCODAGE"), + ("FILTERXML", "FILTRE.XML"), + ("WEBSERVICE", "SERVICEWEB"), +]; + +const ERRORS: &[(CellError, &str)] = &[ + (CellError::Null, "#NUL!"), + (CellError::Div0, "#DIV/0!"), + (CellError::Value, "#VALEUR!"), + (CellError::Ref, "#REF!"), + (CellError::Name, "#NOM?"), + (CellError::Num, "#NOMBRE!"), + (CellError::NA, "#N/A"), + (CellError::GettingData, "#CHARGEMENT_DONNEES"), + (CellError::Spill, "#PROPAGATION!"), + (CellError::Calc, "#CALC!"), +]; + +#[cfg(test)] +mod tests { + use crate::{FormulaLocale, parse, parse_input, print, print_input}; + + /// Checks each mapped name with decimal commas and argument separators. + #[test] + fn aliases_round_trip() { + let locale = FormulaLocale::Fr; + for &(canonical, local) in super::FUNCTIONS { + assert_eq!(locale.canonical_name(local), canonical, "{local}"); + let input = format!("{local}(1,25;2)"); + let expr = parse_input(&input, locale, |_| false).unwrap(); + assert_eq!(print(&expr), format!("{canonical}(1.25,2)")); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), input); + } + for &(error, spelling) in super::ERRORS { + let expr = parse_input(&spelling.to_lowercase(), locale, |_| false).unwrap(); + assert_eq!(print(&expr), error.as_str()); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), spelling); + } + } + + /// French uses a dot for array columns, distinct from its decimal comma. + #[test] + fn french_arrays_and_local_alias_collisions_preserve_canonical_syntax() { + let locale = FormulaLocale::Fr; + let input = "SOMME({1,5.2,25;3.4};0)"; + let expr = parse_input(input, locale, |_| false).unwrap(); + assert_eq!(print(&expr), "SUM({1.5,2.25;3,4},0)"); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), input); + assert_eq!(print(&parse_input("TRIM(A1;0,1;0,2)", locale, |_| false).unwrap()), "MIRR(A1,0.1,0.2)"); + let canonical = parse("TRIM(A1)").unwrap(); + let bound = |name: &str| name == "SUPPRESPACE"; + let displayed = print_input(&canonical, locale, bound).unwrap(); + assert_eq!(displayed, "_xlfn.TRIM(A1)"); + assert_eq!(parse_input(&displayed, locale, bound).unwrap(), canonical); + } +} diff --git a/crates/formula/src/input/it.rs b/crates/formula/src/input/it.rs new file mode 100644 index 0000000000..ebb95f9047 --- /dev/null +++ b/crates/formula/src/input/it.rs @@ -0,0 +1,535 @@ +//! Formula names and error spellings for It, adapted from PR #1894. +use gridcraft_core::CellError; + +pub(super) static DATA: super::LocaleData = super::LocaleData { + functions: FUNCTIONS, + errors: ERRORS, + table_items: None, + separators: super::COMMA_DECIMAL_SEPARATORS, + fold_alias: fold_name, + aliases: std::sync::OnceLock::new(), +}; + +fn fold_name(name: &str) -> String { + name.to_uppercase().chars().map(base_letter).collect() +} + +/// The base letter of an accented Latin character, or the character itself. +fn base_letter(ch: char) -> char { + match ch { + 'À' | 'Á' | 'Â' | 'Ã' | 'Ä' | 'Å' => 'A', + 'Ç' => 'C', + 'È' | 'É' | 'Ê' | 'Ë' => 'E', + 'Ì' | 'Í' | 'Î' | 'Ï' => 'I', + 'Ñ' => 'N', + 'Ò' | 'Ó' | 'Ô' | 'Õ' | 'Ö' => 'O', + 'Ù' | 'Ú' | 'Û' | 'Ü' => 'U', + 'Ý' | 'Ÿ' => 'Y', + other => other, + } +} + +const FUNCTIONS: &[(&str, &str)] = &[ + ("ABS", "ASS"), + ("ACCRINT", "INT.MATURATO.PER"), + ("ACCRINTM", "INT.MATURATO.SCAD"), + ("ACOS", "ARCCOS"), + ("ACOSH", "ARCCOSH"), + ("ACOT", "ARCCOT"), + ("ACOTH", "ARCCOTH"), + ("ADDRESS", "INDIRIZZO"), + ("AGGREGATE", "AGGREGA"), + ("AMORDEGRC", "AMMORT.DEGR"), + ("AMORLINC", "AMMORT.PER"), + ("AND", "E"), + ("ARABIC", "ARABO"), + ("AREAS", "AREE"), + ("ARRAYTOTEXT", "MATRICE.A.TESTO"), + ("ASIN", "ARCSEN"), + ("ASINH", "ARCSENH"), + ("ATAN", "ARCTAN"), + ("ATAN2", "ARCTAN.2"), + ("ATANH", "ARCTANH"), + ("AVEDEV", "MEDIA.DEV"), + ("AVERAGE", "MEDIA"), + ("AVERAGEA", "MEDIA.VALORI"), + ("AVERAGEIF", "MEDIA.SE"), + ("AVERAGEIFS", "MEDIA.PIÙ.SE"), + ("BAHTTEXT", "BAHTTESTO"), + ("BESSELI", "BESSEL.I"), + ("BESSELJ", "BESSEL.J"), + ("BESSELK", "BESSEL.K"), + ("BESSELY", "BESSEL.Y"), + ("BETA.DIST", "DISTRIB.BETA.N"), + ("BETA.INV", "INV.BETA.N"), + ("BETADIST", "DISTRIB.BETA"), + ("BETAINV", "INV.BETA"), + ("BIN2DEC", "BINARIO.DECIMALE"), + ("BIN2HEX", "BINARIO.HEX"), + ("BIN2OCT", "BINARIO.OCT"), + ("BINOM.DIST", "DISTRIB.BINOM.N"), + ("BINOM.DIST.RANGE", "INTERVALLO.DISTRIB.BINOM.N."), + ("BINOM.INV", "INV.BINOM"), + ("BINOMDIST", "DISTRIB.BINOM"), + ("BITLSHIFT", "BIT.SPOSTA.SX"), + ("BITRSHIFT", "BIT.SPOSTA.DX"), + ("BYCOL", "PERCOL"), + ("BYROW", "PERRIGA"), + ("CEILING", "ARROTONDA.ECCESSO"), + ("CEILING.MATH", "ARROTONDA.ECCESSO.MAT"), + ("CEILING.PRECISE", "ARROTONDA.ECCESSO.PRECISA"), + ("CELL", "CELLA"), + ("CHAR", "CODICE.CARATT"), + ("CHIDIST", "DISTRIB.CHI"), + ("CHIINV", "INV.CHI"), + ("CHISQ.DIST", "DISTRIB.CHI.QUAD"), + ("CHISQ.DIST.RT", "DISTRIB.CHI.QUAD.DS"), + ("CHISQ.INV", "INV.CHI.QUAD"), + ("CHISQ.INV.RT", "INV.CHI.QUAD.DS"), + ("CHISQ.TEST", "TEST.CHI.QUAD"), + ("CHITEST", "TEST.CHI"), + ("CHOOSE", "SCEGLI"), + ("CHOOSECOLS", "SCEGLI.COL"), + ("CHOOSEROWS", "SCEGLI.RIGA"), + ("CLEAN", "LIBERA"), + ("CODE", "CODICE"), + ("COLUMN", "RIF.COLONNA"), + ("COLUMNS", "COLONNE"), + ("COMBIN", "COMBINAZIONE"), + ("COMBINA", "COMBINAZIONE.VALORI"), + ("COMPLEX", "COMPLESSO"), + ("CONCATENATE", "CONCATENA"), + ("CONFIDENCE", "CONFIDENZA"), + ("CONFIDENCE.NORM", "CONFIDENZA.NORM"), + ("CONFIDENCE.T", "CONFIDENZA.T"), + ("CONVERT", "CONVERTI"), + ("CORREL", "CORRELAZIONE"), + ("COUNT", "CONTA.NUMERI"), + ("COUNTA", "CONTA.VALORI"), + ("COUNTBLANK", "CONTA.VUOTE"), + ("COUNTIF", "CONTA.SE"), + ("COUNTIFS", "CONTA.PIÙ.SE"), + ("COUPDAYBS", "GIORNI.CED.INIZ.LIQ"), + ("COUPDAYS", "GIORNI.CED"), + ("COUPDAYSNC", "GIORNI.CED.NUOVA"), + ("COUPNCD", "DATA.CED.SUCC"), + ("COUPNUM", "NUM.CED"), + ("COUPPCD", "DATA.CED.PREC"), + ("COVAR", "COVARIANZA"), + ("COVARIANCE.P", "COVARIANZA.P"), + ("COVARIANCE.S", "COVARIANZA.C"), + ("CRITBINOM", "CRIT.BINOM"), + ("CUBEKPIMEMBER", "MEMBRO.KPI.CUBO"), + ("CUBEMEMBER", "MEMBRO.CUBO"), + ("CUBEMEMBERPROPERTY", "PROPRIETÀ.MEMBRO.CUBO"), + ("CUBERANKEDMEMBER", "MEMBRO.CUBO.CON.RANGO"), + ("CUBESET", "SET.CUBO"), + ("CUBESETCOUNT", "CONTA.SET.CUBO"), + ("CUBEVALUE", "VALORE.CUBO"), + ("CUMIPMT", "INT.CUMUL"), + ("CUMPRINC", "CAP.CUM"), + ("DATE", "DATA"), + ("DATEDIF", "DATA.DIFF"), + ("DATEVALUE", "DATA.VALORE"), + ("DAVERAGE", "DB.MEDIA"), + ("DAY", "GIORNO"), + ("DAYS", "GIORNI"), + ("DAYS360", "GIORNO360"), + ("DB", "AMMORT.FISSO"), + ("DCOUNT", "DB.CONTA.NUMERI"), + ("DCOUNTA", "DB.CONTA.VALORI"), + ("DDB", "AMMORT"), + ("DEC2BIN", "DECIMALE.BINARIO"), + ("DEC2HEX", "DECIMALE.HEX"), + ("DEC2OCT", "DECIMALE.OCT"), + ("DECIMAL", "DECIMALE"), + ("DEGREES", "GRADI"), + ("DEVSQ", "DEV.Q"), + ("DGET", "DB.VALORI"), + ("DISC", "TASSO.SCONTO"), + ("DMAX", "DB.MAX"), + ("DMIN", "DB.MIN"), + ("DOLLAR", "VALUTA"), + ("DOLLARDE", "VALUTA.DEC"), + ("DOLLARFR", "VALUTA.FRAZ"), + ("DPRODUCT", "DB.PRODOTTO"), + ("DROP", "ESCLUDI"), + ("DSTDEV", "DB.DEV.ST"), + ("DSTDEVP", "DB.DEV.ST.POP"), + ("DSUM", "DB.SOMMA"), + ("DURATION", "DURATA"), + ("DVAR", "DB.VAR"), + ("DVARP", "DB.VAR.POP"), + ("EDATE", "DATA.MESE"), + ("EFFECT", "EFFETTIVO"), + ("ENCODEURL", "CODIFICA.URL"), + ("EOMONTH", "FINE.MESE"), + ("ERF", "FUNZ.ERRORE"), + ("ERF.PRECISE", "FUNZ.ERRORE.PRECISA"), + ("ERFC", "FUNZ.ERRORE.COMP"), + ("ERFC.PRECISE", "FUNZ.ERRORE.COMP.PRECISA"), + ("ERROR.TYPE", "ERRORE.TIPO"), + ("EVEN", "PARI"), + ("EXACT", "IDENTICO"), + ("EXPAND", "ESPANDI"), + ("EXPON.DIST", "DISTRIB.EXP.N"), + ("EXPONDIST", "DISTRIB.EXP"), + ("F.DIST", "DISTRIBF"), + ("F.DIST.RT", "DISTRIB.F.DS"), + ("F.INV", "INVF"), + ("F.INV.RT", "INV.F.DS"), + ("F.TEST", "TESTF"), + ("FACT", "FATTORIALE"), + ("FACTDOUBLE", "FATT.DOPPIO"), + ("FALSE", "FALSO"), + ("FDIST", "DISTRIB.F"), + ("FILTER", "FILTRO"), + ("FILTERXML", "FILTRO.XML"), + ("FIND", "TROVA"), + ("FINDB", "TROVA.B"), + ("FINV", "INV.F"), + ("FISHERINV", "INV.FISHER"), + ("FIXED", "FISSO"), + ("FLOOR", "ARROTONDA.DIFETTO"), + ("FLOOR.MATH", "ARROTONDA.DIFETTO.MAT"), + ("FLOOR.PRECISE", "ARROTONDA.DIFETTO.PRECISA"), + ("FORECAST", "PREVISIONE"), + ("FORECAST.ETS", "PREVISIONE.ETS"), + ("FORECAST.ETS.CONFINT", "PREVISIONE.ETS.INTCONF"), + ("FORECAST.ETS.SEASONALITY", "PREVISIONE.ETS.STAGIONALITÀ"), + ("FORECAST.ETS.STAT", "PREVISIONE.ETS.STAT"), + ("FORECAST.LINEAR", "PREVISIONE.LINEARE"), + ("FORMULATEXT", "TESTO.FORMULA"), + ("FREQUENCY", "FREQUENZA"), + ("FTEST", "TEST.F"), + ("FV", "VAL.FUT"), + ("FVSCHEDULE", "VAL.FUT.CAPITALE"), + ("GAMMA.DIST", "DISTRIB.GAMMA.N"), + ("GAMMA.INV", "INV.GAMMA.N"), + ("GAMMADIST", "DISTRIB.GAMMA"), + ("GAMMAINV", "INV.GAMMA"), + ("GAMMALN", "LN.GAMMA"), + ("GAMMALN.PRECISE", "LN.GAMMA.PRECISA"), + ("GCD", "MCD"), + ("GEOMEAN", "MEDIA.GEOMETRICA"), + ("GESTEP", "SOGLIA"), + ("GROUPBY", "RAGGRUPPAPER"), + ("GROWTH", "CRESCITA"), + ("HARMEAN", "MEDIA.ARMONICA"), + ("HEX2BIN", "HEX.BINARIO"), + ("HEX2DEC", "HEX.DECIMALE"), + ("HEX2OCT", "HEX.OCT"), + ("HLOOKUP", "CERCA.ORIZZ"), + ("HOUR", "ORA"), + ("HSTACK", "STACK.ORIZ"), + ("HYPERLINK", "COLLEG.IPERTESTUALE"), + ("HYPGEOM.DIST", "DISTRIB.IPERGEOM.N"), + ("HYPGEOMDIST", "DISTRIB.IPERGEOM"), + ("IF", "SE"), + ("IFERROR", "SE.ERRORE"), + ("IFNA", "SE.NON.DISP."), + ("IFS", "PIÙ.SE"), + ("IMABS", "COMP.MODULO"), + ("IMAGINARY", "COMP.IMMAGINARIO"), + ("IMARGUMENT", "COMP.ARGOMENTO"), + ("IMCONJUGATE", "COMP.CONIUGATO"), + ("IMCOS", "COMP.COS"), + ("IMCOSH", "COMP.COSH"), + ("IMCOT", "COMP.COT"), + ("IMCSC", "COMP.CSC"), + ("IMCSCH", "COMP.CSCH"), + ("IMDIV", "COMP.DIV"), + ("IMEXP", "COMP.EXP"), + ("IMLN", "COMP.LN"), + ("IMLOG10", "COMP.LOG10"), + ("IMLOG2", "COMP.LOG2"), + ("IMPOWER", "COMP.POTENZA"), + ("IMPRODUCT", "COMP.PRODOTTO"), + ("IMREAL", "COMP.PARTE.REALE"), + ("IMSEC", "COMP.SEC"), + ("IMSECH", "COMP.SECH"), + ("IMSIN", "COMP.SEN"), + ("IMSINH", "COMP.SENH"), + ("IMSQRT", "COMP.RADQ"), + ("IMSUB", "COMP.DIFF"), + ("IMSUM", "COMP.SOMMA"), + ("IMTAN", "COMP.TAN"), + ("INDEX", "INDICE"), + ("INDIRECT", "INDIRETTO"), + ("INFO", "AMBIENTE.INFO"), + ("INTERCEPT", "INTERCETTA"), + ("INTRATE", "TASSO.INT"), + ("IPMT", "INTERESSI"), + ("IRR", "TIR.COST"), + ("ISBLANK", "VAL.VUOTO"), + ("ISERR", "VAL.ERR"), + ("ISERROR", "VAL.ERRORE"), + ("ISEVEN", "VAL.PARI"), + ("ISFORMULA", "VAL.FORMULA"), + ("ISLOGICAL", "VAL.LOGICO"), + ("ISNA", "VAL.NON.DISP"), + ("ISNONTEXT", "VAL.NON.TESTO"), + ("ISNUMBER", "VAL.NUMERO"), + ("ISO.CEILING", "ISO.ARROTONDA.ECCESSO"), + ("ISODD", "VAL.DISPARI"), + ("ISOWEEKNUM", "NUM.SETTIMANA.ISO"), + ("ISPMT", "INTERESSE.RATA"), + ("ISREF", "VAL.RIF"), + ("ISTEXT", "VAL.TESTO"), + ("KURT", "CURTOSI"), + ("LARGE", "GRANDE"), + ("LCM", "MCM"), + ("LEFT", "SINISTRA"), + ("LEFTB", "SINISTRAB"), + ("LEN", "LUNGHEZZA"), + ("LENB", "LUNGB"), + ("LINEST", "REGR.LIN"), + ("LOGEST", "REGR.LOG"), + ("LOGINV", "INV.LOGNORM"), + ("LOGNORM.DIST", "DISTRIB.LOGNORM.N"), + ("LOGNORM.INV", "INV.LOGNORM.N"), + ("LOGNORMDIST", "DISTRIB.LOGNORM"), + ("LOOKUP", "CERCA"), + ("LOWER", "MINUSC"), + ("MATCH", "CONFRONTA"), + ("MAXA", "MAX.VALORI"), + ("MAXIFS", "MAX.PIÙ.SE"), + ("MDETERM", "MATR.DETERM"), + ("MDURATION", "DURATA.M"), + ("MEDIAN", "MEDIANA"), + ("MID", "STRINGA.ESTRAI"), + ("MIDB", "MEDIA.B"), + ("MINA", "MIN.VALORI"), + ("MINIFS", "MIN.PIÙ.SE"), + ("MINUTE", "MINUTO"), + ("MINVERSE", "MATR.INVERSA"), + ("MIRR", "TIR.VAR"), + ("MMULT", "MATR.PRODOTTO"), + ("MOD", "RESTO"), + ("MODE", "MODA"), + ("MODE.MULT", "MODA.MULT"), + ("MODE.SNGL", "MODA.SNGL"), + ("MONTH", "MESE"), + ("MROUND", "ARROTONDA.MULTIPLO"), + ("MULTINOMIAL", "MULTINOMIALE"), + ("MUNIT", "MATR.UNIT"), + ("N", "NUM"), + ("NA", "NON.DISP"), + ("NEGBINOM.DIST", "DISTRIB.BINOM.NEG.N"), + ("NEGBINOMDIST", "DISTRIB.BINOM.NEG"), + ("NETWORKDAYS", "GIORNI.LAVORATIVI.TOT"), + ("NETWORKDAYS.INTL", "GIORNI.LAVORATIVI.TOT.INTL"), + ("NOMINAL", "NOMINALE"), + ("NORM.DIST", "DISTRIB.NORM.N"), + ("NORM.INV", "INV.NORM.N"), + ("NORM.S.DIST", "DISTRIB.NORM.ST.N"), + ("NORM.S.INV", "INV.NORM.S"), + ("NORMDIST", "DISTRIB.NORM"), + ("NORMINV", "INV.NORM"), + ("NORMSDIST", "DISTRIB.NORM.ST"), + ("NORMSINV", "INV.NORM.ST"), + ("NOT", "NON"), + ("NOW", "ADESSO"), + ("NPER", "NUM.RATE"), + ("NPV", "VAN"), + ("NUMBERVALUE", "NUMERO.VALORE"), + ("OCT2BIN", "OCT.BINARIO"), + ("OCT2DEC", "OCT.DECIMALE"), + ("OCT2HEX", "OCT.HEX"), + ("ODD", "DISPARI"), + ("ODDFPRICE", "PREZZO.PRIMO.IRR"), + ("ODDFYIELD", "REND.PRIMO.IRR"), + ("ODDLPRICE", "PREZZO.ULTIMO.IRR"), + ("ODDLYIELD", "REND.ULTIMO.IRR"), + ("OFFSET", "SCARTO"), + ("OR", "O"), + ("PDURATION", "DURATA.P"), + ("PERCENTILE.EXC", "ESC.PERCENTILE"), + ("PERCENTILE.INC", "INC.PERCENTILE"), + ("PERCENTOF", "PERCENTUALE.DI"), + ("PERCENTRANK", "PERCENT.RANGO"), + ("PERCENTRANK.EXC", "ESC.PERCENT.RANGO"), + ("PERCENTRANK.INC", "INC.PERCENT.RANGO"), + ("PERMUT", "PERMUTAZIONE"), + ("PERMUTATIONA", "PERMUTAZIONE.VALORI"), + ("PHONETIC", "FURIGANA"), + ("PI", "PI.GRECO"), + ("PIVOTBY", "PIVOTPER"), + ("PMT", "RATA"), + ("POISSON.DIST", "DISTRIB.POISSON"), + ("POWER", "POTENZA"), + ("PPMT", "P.RATA"), + ("PRICE", "PREZZO"), + ("PRICEDISC", "PREZZO.SCONT"), + ("PRICEMAT", "PREZZO.SCAD"), + ("PROB", "PROBABILITÀ"), + ("PRODUCT", "PRODOTTO"), + ("PROPER", "MAIUSC.INIZ"), + ("PV", "VA"), + ("QUARTILE.EXC", "ESC.QUARTILE"), + ("QUARTILE.INC", "INC.QUARTILE"), + ("QUOTIENT", "QUOZIENTE"), + ("RADIANS", "RADIANTI"), + ("RAND", "CASUALE"), + ("RANDARRAY", "MATR.CASUALE"), + ("RANDBETWEEN", "CASUALE.TRA"), + ("RANK", "RANGO"), + ("RANK.AVG", "RANGO.MEDIA"), + ("RANK.EQ", "RANGO.UG"), + ("RATE", "TASSO"), + ("RECEIVED", "RICEV.SCAD"), + ("REGEXEXTRACT", "REGEX.ESTRAI"), + ("REGEXREPLACE", "REGEX.SOSTITUISCI"), + ("REGEXTEST", "REGEX.TEST"), + ("REPLACE", "RIMPIAZZA"), + ("REPLACEB", "SOSTITUISCI.B"), + ("REPT", "RIPETI"), + ("RIGHT", "DESTRA"), + ("RIGHTB", "DESTRA.B"), + ("ROMAN", "ROMANO"), + ("ROUND", "ARROTONDA"), + ("ROUNDDOWN", "ARROTONDA.PER.DIF"), + ("ROUNDUP", "ARROTONDA.PER.ECC"), + ("ROW", "RIF.RIGA"), + ("ROWS", "RIGHE"), + ("RRI", "RIT.INVEST.EFFETT"), + ("RSQ", "RQ"), + ("SEARCH", "RICERCA"), + ("SEARCHB", "CERCA.B"), + ("SECOND", "SECONDO"), + ("SEQUENCE", "SEQUENZA"), + ("SERIESSUM", "SOMMA.SERIE"), + ("SHEET", "FOGLIO"), + ("SHEETS", "FOGLI"), + ("SIGN", "SEGNO"), + ("SIN", "SEN"), + ("SINH", "SENH"), + ("SKEW", "ASIMMETRIA"), + ("SKEW.P", "ASIMMETRIA.P"), + ("SLN", "AMMORT.COST"), + ("SLOPE", "PENDENZA"), + ("SMALL", "PICCOLO"), + ("SORT", "DATI.ORDINA"), + ("SORTBY", "DATI.ORDINA.PER"), + ("SQRT", "RADQ"), + ("SQRTPI", "RADQ.PI.GRECO"), + ("STANDARDIZE", "NORMALIZZA"), + ("STDEV", "DEV.ST"), + ("STDEV.P", "DEV.ST.P"), + ("STDEV.S", "DEV.ST.C"), + ("STDEVA", "DEV.ST.VALORI"), + ("STDEVP", "DEV.ST.POP"), + ("STDEVPA", "DEV.ST.POP.VALORI"), + ("STEYX", "ERR.STD.YX"), + ("SUBSTITUTE", "SOSTITUISCI"), + ("SUBTOTAL", "SUBTOTALE"), + ("SUM", "SOMMA"), + ("SUMIF", "SOMMA.SE"), + ("SUMIFS", "SOMMA.PIÙ.SE"), + ("SUMPRODUCT", "MATR.SOMMA.PRODOTTO"), + ("SUMSQ", "SOMMA.Q"), + ("SUMX2MY2", "SOMMA.DIFF.Q"), + ("SUMX2PY2", "SOMMA.SOMMA.Q"), + ("SUMXMY2", "SOMMA.Q.DIFF"), + ("SYD", "AMMORT.ANNUO"), + ("T.DIST", "DISTRIB.T.N"), + ("T.DIST.2T", "DISTRIB.T.2T"), + ("T.DIST.RT", "DISTRIB.T.DS"), + ("T.INV", "INVT"), + ("T.INV.2T", "INV.T.2T"), + ("T.TEST", "TESTT"), + ("TAKE", "INCLUDI"), + ("TBILLEQ", "BOT.EQUIV"), + ("TBILLPRICE", "BOT.PREZZO"), + ("TBILLYIELD", "BOT.REND"), + ("TDIST", "DISTRIB.T"), + ("TEXT", "TESTO"), + ("TEXTAFTER", "TESTO.SUCCESSIVO"), + ("TEXTBEFORE", "TESTO.PRECEDENTE"), + ("TEXTJOIN", "TESTO.UNISCI"), + ("TEXTSPLIT", "DIVIDI.TESTO"), + ("TIME", "ORARIO"), + ("TIMEVALUE", "ORARIO.VALORE"), + ("TINV", "INV.T"), + ("TOCOL", "A.COL"), + ("TODAY", "OGGI"), + ("TOROW", "A.RIGA"), + ("TRANSPOSE", "MATR.TRASPOSTA"), + ("TREND", "TENDENZA"), + ("TRIM", "ANNULLA.SPAZI"), + ("TRIMMEAN", "MEDIA.TRONCATA"), + ("TRIMRANGE", "ESCLUDI.VUOTE"), + ("TRUE", "VERO"), + ("TRUNC", "TRONCA"), + ("TTEST", "TEST.T"), + ("TYPE", "TIPO"), + ("UNICHAR", "CARATT.UNI"), + ("UNIQUE", "UNICI"), + ("UPPER", "MAIUSC"), + ("VALUE", "VALORE"), + ("VALUETOTEXT", "VALORE.A.TESTO"), + ("VAR.S", "VAR.C"), + ("VARA", "VAR.VALORI"), + ("VARP", "VAR.POP"), + ("VARPA", "VAR.POP.VALORI"), + ("VDB", "AMMORT.VAR"), + ("VLOOKUP", "CERCA.VERT"), + ("VSTACK", "STACK.VERT"), + ("WEBSERVICE", "SERVIZIO.WEB"), + ("WEEKDAY", "GIORNO.SETTIMANA"), + ("WEEKNUM", "NUM.SETTIMANA"), + ("WEIBULL.DIST", "DISTRIB.WEIBULL"), + ("WORKDAY", "GIORNO.LAVORATIVO"), + ("WORKDAY.INTL", "GIORNO.LAVORATIVO.INTL"), + ("WRAPCOLS", "A.CAPO.COL"), + ("WRAPROWS", "A.CAPO.RIGA"), + ("XIRR", "TIR.X"), + ("XLOOKUP", "CERCA.X"), + ("XMATCH", "CONFRONTA.X"), + ("XNPV", "VAN.X"), + ("YEAR", "ANNO"), + ("YEARFRAC", "FRAZIONE.ANNO"), + ("YIELD", "REND"), + ("YIELDDISC", "REND.TITOLI.SCONT"), + ("YIELDMAT", "REND.SCAD"), + ("Z.TEST", "TESTZ"), + ("ZTEST", "TEST.Z"), +]; + +const ERRORS: &[(CellError, &str)] = &[ + (CellError::Null, "#NULLO!"), + (CellError::Value, "#VALORE!"), + (CellError::Ref, "#RIF!"), + (CellError::Name, "#NOME?"), + (CellError::Num, "#NUM!"), + (CellError::NA, "#N/D"), + (CellError::Spill, "#ESPANSIONE!"), +]; + +#[cfg(test)] +mod tests { + use crate::{FormulaLocale, parse_input, print, print_input}; + + /// Checks each mapped name with decimal commas and argument separators. + #[test] + fn aliases_round_trip() { + let locale = FormulaLocale::It; + for &(canonical, local) in super::FUNCTIONS { + assert_eq!(locale.canonical_name(local), canonical, "{local}"); + let input = format!("{local}(1,25;2)"); + let expr = parse_input(&input, locale, |_| false).unwrap(); + assert_eq!(print(&expr), format!("{canonical}(1.25,2)")); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), input); + } + for &(error, spelling) in super::ERRORS { + let expr = parse_input(&spelling.to_lowercase(), locale, |_| false).unwrap(); + assert_eq!(print(&expr), error.as_str()); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), spelling); + } + + let array = r"SOMMA({1,5\2;3\4};0)"; + let expr = parse_input(array, locale, |_| false).unwrap(); + assert_eq!(print(&expr), "SUM({1.5,2;3,4},0)"); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), array); + } +} diff --git a/crates/formula/src/input/pl.rs b/crates/formula/src/input/pl.rs new file mode 100644 index 0000000000..77a32bfb90 --- /dev/null +++ b/crates/formula/src/input/pl.rs @@ -0,0 +1,491 @@ +//! Polish formula words: function names as Polish Excel shows them, and error values. +//! +//! Sources for the function names: PhpSpreadsheet's `locale/pl/functions` table (MIT), checked +//! against a second independent table; every name the two agree on is used. Where they disagree +//! or one is missing, Microsoft's pl-pl support pages decide (`X.WYSZUKAJ`, `REGLINX.ETS`…), and +//! the names #1678 observed in Excel for the web (BYROW, GROUPBY, PIVOTBY, PERCENTOF, TRIMRANGE, +//! VALUETOTEXT) fill the rest. Functions not listed keep their English name in Polish Excel +//! (COS, MAX, MOD, LET, LAMBDA, MAP…). +//! Errors: Microsoft's pl-pl pages (`#ROZLANIE!`, `#OBL!`). No alias may equal another function's canonical English name, or committing it +//! would call the wrong function. + +use gridcraft_core::CellError; + +// The upstream MIT license for the name data is recorded in NOTICE. +pub(super) static DATA: super::LocaleData = super::LocaleData { + functions: FUNCTIONS, + errors: ERRORS, + table_items: None, + separators: super::COMMA_DECIMAL_SEPARATORS, + fold_alias: str::to_lowercase, + aliases: std::sync::OnceLock::new(), +}; + +pub(super) const FUNCTIONS: &[(&str, &str)] = &[ + ("ABS", "MODUŁ.LICZBY"), + ("ACCRINT", "NAL.ODS"), + ("ACCRINTM", "NAL.ODS.WYKUP"), + ("ADDRESS", "ADRES"), + ("AGGREGATE", "AGREGUJ"), + ("AMORDEGRC", "AMORT.NIELIN"), + ("AMORLINC", "AMORT.LIN"), + ("AND", "ORAZ"), + ("ARABIC", "ARABSKIE"), + ("AREAS", "OBSZARY"), + ("ARRAYTOTEXT", "TABLICA.NA.TEKST"), + ("AVEDEV", "ODCH.ŚREDNIE"), + ("AVERAGE", "ŚREDNIA"), + ("AVERAGEA", "ŚREDNIA.A"), + ("AVERAGEIF", "ŚREDNIA.JEŻELI"), + ("AVERAGEIFS", "ŚREDNIA.WARUNKÓW"), + ("BAHTTEXT", "BAT.TEKST"), + ("BASE", "PODSTAWA"), + ("BESSELI", "BESSEL.I"), + ("BESSELJ", "BESSEL.J"), + ("BESSELK", "BESSEL.K"), + ("BESSELY", "BESSEL.Y"), + ("BETA.DIST", "ROZKŁ.BETA"), + ("BETA.INV", "ROZKŁ.BETA.ODWR"), + ("BETADIST", "ROZKŁAD.BETA"), + ("BETAINV", "ROZKŁAD.BETA.ODW"), + ("BIN2DEC", "DWÓJK.NA.DZIES"), + ("BIN2HEX", "DWÓJK.NA.SZESN"), + ("BIN2OCT", "DWÓJK.NA.ÓSM"), + ("BINOM.DIST", "ROZKŁ.DWUM"), + ("BINOM.DIST.RANGE", "ROZKŁ.DWUM.ZAKRES"), + ("BINOM.INV", "ROZKŁ.DWUM.ODWR"), + ("BINOMDIST", "ROZKŁAD.DWUM"), + ("BITLSHIFT", "BIT.PRZESUNIĘCIE.W.LEWO"), + ("BITRSHIFT", "BIT.PRZESUNIĘCIE.W.PRAWO"), + ("BYROW", "WIERSZAMI"), + ("CEILING", "ZAOKR.W.GÓRĘ"), + ("CEILING.MATH", "ZAOKR.W.GÓRĘ.MATEMATYCZNE"), + ("CEILING.PRECISE", "ZAOKR.W.GÓRĘ.DOKŁ"), + ("CELL", "KOMÓRKA"), + ("CHAR", "ZNAK"), + ("CHIDIST", "ROZKŁAD.CHI"), + ("CHIINV", "ROZKŁAD.CHI.ODW"), + ("CHISQ.DIST", "ROZKŁ.CHI"), + ("CHISQ.DIST.RT", "ROZKŁ.CHI.PS"), + ("CHISQ.INV", "ROZKŁ.CHI.ODWR"), + ("CHISQ.INV.RT", "ROZKŁ.CHI.ODWR.PS"), + ("CHISQ.TEST", "CHI.TEST"), + ("CHITEST", "TEST.CHI"), + ("CHOOSE", "WYBIERZ"), + ("CHOOSECOLS", "WYBIERZ.KOLUMNY"), + ("CHOOSEROWS", "WYBIERZ.WIERSZE"), + ("CLEAN", "OCZYŚĆ"), + ("CODE", "KOD"), + ("COLUMN", "NR.KOLUMNY"), + ("COLUMNS", "LICZBA.KOLUMN"), + ("COMBIN", "KOMBINACJE"), + ("COMBINA", "KOMBINACJE.A"), + ("COMPLEX", "LICZBA.ZESP"), + ("CONCAT", "ZŁĄCZ.TEKST"), + ("CONCATENATE", "ZŁĄCZ.TEKSTY"), + ("CONFIDENCE", "UFNOŚĆ"), + ("CONFIDENCE.NORM", "UFNOŚĆ.NORM"), + ("CONFIDENCE.T", "UFNOŚĆ.T"), + ("CONVERT", "KONWERTUJ"), + ("CORREL", "WSP.KORELACJI"), + ("COUNT", "ILE.LICZB"), + ("COUNTA", "ILE.NIEPUSTYCH"), + ("COUNTBLANK", "LICZ.PUSTE"), + ("COUNTIF", "LICZ.JEŻELI"), + ("COUNTIFS", "LICZ.WARUNKI"), + ("COUPDAYBS", "WYPŁ.DNI.OD.POCZ"), + ("COUPDAYS", "WYPŁ.DNI"), + ("COUPDAYSNC", "WYPŁ.DNI.NAST"), + ("COUPNCD", "WYPŁ.DATA.NAST"), + ("COUPNUM", "WYPŁ.LICZBA"), + ("COUPPCD", "WYPŁ.DATA.POPRZ"), + ("COVAR", "KOWARIANCJA"), + ("COVARIANCE.P", "KOWARIANCJA.POPUL"), + ("COVARIANCE.S", "KOWARIANCJA.PRÓBKI"), + ("CRITBINOM", "PRÓG.ROZKŁAD.DWUM"), + ("CUBEKPIMEMBER", "ELEMENT.KPI.MODUŁU"), + ("CUBEMEMBER", "ELEMENT.MODUŁU"), + ("CUBEMEMBERPROPERTY", "WŁAŚCIWOŚĆ.ELEMENTU.MODUŁU"), + ("CUBERANKEDMEMBER", "USZEREGOWANY.ELEMENT.MODUŁU"), + ("CUBESET", "ZESTAW.MODUŁÓW"), + ("CUBESETCOUNT", "LICZNIK.MODUŁÓW.ZESTAWU"), + ("CUBEVALUE", "WARTOŚĆ.MODUŁU"), + ("CUMIPMT", "SPŁAC.ODS"), + ("CUMPRINC", "SPŁAC.KAPIT"), + ("DATE", "DATA"), + ("DATEDIF", "DATA.RÓŻNICA"), + ("DATEVALUE", "DATA.WARTOŚĆ"), + ("DAVERAGE", "BD.ŚREDNIA"), + ("DAY", "DZIEŃ"), + ("DAYS", "DNI"), + ("DAYS360", "DNI.360"), + ("DCOUNT", "BD.ILE.REKORDÓW"), + ("DCOUNTA", "BD.ILE.REKORDÓW.A"), + ("DEC2BIN", "DZIES.NA.DWÓJK"), + ("DEC2HEX", "DZIES.NA.SZESN"), + ("DEC2OCT", "DZIES.NA.ÓSM"), + ("DECIMAL", "DZIESIĘTNA"), + ("DEGREES", "STOPNIE"), + ("DELTA", "CZY.RÓWNE"), + ("DEVSQ", "ODCH.KWADRATOWE"), + ("DGET", "BD.POLE"), + ("DISC", "STOPA.DYSK"), + ("DMAX", "BD.MAX"), + ("DMIN", "BD.MIN"), + ("DOLLAR", "KWOTA"), + ("DOLLARDE", "CENA.DZIES"), + ("DOLLARFR", "CENA.UŁAM"), + ("DPRODUCT", "BD.ILOCZYN"), + ("DROP", "POMIŃ"), + ("DSTDEV", "BD.ODCH.STANDARD"), + ("DSTDEVP", "BD.ODCH.STANDARD.POPUL"), + ("DSUM", "BD.SUMA"), + ("DURATION", "ROCZ.PRZYCH"), + ("DVAR", "BD.WARIANCJA"), + ("DVARP", "BD.WARIANCJA.POPUL"), + ("EDATE", "NR.SER.DATY"), + ("EFFECT", "EFEKTYWNA"), + ("EOMONTH", "NR.SER.OST.DN.MIES"), + ("ERF", "FUNKCJA.BŁ"), + ("ERF.PRECISE", "FUNKCJA.BŁ.DOKŁ"), + ("ERFC", "KOMP.FUNKCJA.BŁ"), + ("ERFC.PRECISE", "KOMP.FUNKCJA.BŁ.DOKŁ"), + ("ERROR.TYPE", "NR.BŁĘDU"), + ("EVEN", "ZAOKR.DO.PARZ"), + ("EXACT", "PORÓWNAJ"), + ("EXPAND", "ROZSZERZ"), + ("EXPON.DIST", "ROZKŁ.EXP"), + ("EXPONDIST", "ROZKŁAD.EXP"), + ("F.DIST", "ROZKŁ.F"), + ("F.DIST.RT", "ROZKŁ.F.PS"), + ("F.INV", "ROZKŁ.F.ODWR"), + ("F.INV.RT", "ROZKŁ.F.ODWR.PS"), + ("FACT", "SILNIA"), + ("FACTDOUBLE", "SILNIA.DWUKR"), + ("FALSE", "FAŁSZ"), + ("FDIST", "ROZKŁAD.F"), + ("FILTER", "FILTRUJ"), + ("FIND", "ZNAJDŹ"), + ("FINDB", "ZNAJDŹB"), + ("FINV", "ROZKŁAD.F.ODW"), + ("FISHER", "ROZKŁAD.FISHER"), + ("FISHERINV", "ROZKŁAD.FISHER.ODW"), + ("FIXED", "ZAOKR.DO.TEKST"), + ("FLOOR", "ZAOKR.W.DÓŁ"), + ("FLOOR.MATH", "ZAOKR.W.DÓŁ.MATEMATYCZNE"), + ("FLOOR.PRECISE", "ZAOKR.W.DÓŁ.DOKŁ"), + ("FORECAST", "REGLINX"), + ("FORECAST.ETS", "REGLINX.ETS"), + ("FORECAST.ETS.CONFINT", "REGLINX.ETS.CONFINT"), + ("FORECAST.ETS.SEASONALITY", "REGLINX.ETS.SEZONOWOŚĆ"), + ("FORECAST.ETS.STAT", "REGLINX.ETS.STATYSTYKA"), + ("FORECAST.LINEAR", "REGLINX.LINIOWA"), + ("FORMULATEXT", "FORMUŁA.TEKST"), + ("FREQUENCY", "CZĘSTOŚĆ"), + ("FTEST", "TEST.F"), + ("FVSCHEDULE", "WART.PRZYSZŁ.KAP"), + ("GAMMA.DIST", "ROZKŁ.GAMMA"), + ("GAMMA.INV", "ROZKŁ.GAMMA.ODWR"), + ("GAMMADIST", "ROZKŁAD.GAMMA"), + ("GAMMAINV", "ROZKŁAD.GAMMA.ODW"), + ("GAMMALN", "ROZKŁAD.LIN.GAMMA"), + ("GAMMALN.PRECISE", "ROZKŁAD.LIN.GAMMA.DOKŁ"), + ("GCD", "NAJW.WSP.DZIEL"), + ("GEOMEAN", "ŚREDNIA.GEOMETRYCZNA"), + ("GESTEP", "SPRAWDŹ.PRÓG"), + ("GROUPBY", "GRUPUJ.WEDŁUG"), + ("GROWTH", "REGEXPW"), + ("HARMEAN", "ŚREDNIA.HARMONICZNA"), + ("HEX2BIN", "SZESN.NA.DWÓJK"), + ("HEX2DEC", "SZESN.NA.DZIES"), + ("HEX2OCT", "SZESN.NA.ÓSM"), + ("HLOOKUP", "WYSZUKAJ.POZIOMO"), + ("HOUR", "GODZINA"), + ("HSTACK", "STOS.POZ"), + ("HYPERLINK", "HIPERŁĄCZE"), + ("HYPGEOM.DIST", "ROZKŁ.HIPERGEOM"), + ("HYPGEOMDIST", "ROZKŁAD.HIPERGEOM"), + ("IF", "JEŻELI"), + ("IFERROR", "JEŻELI.BŁĄD"), + ("IFNA", "JEŻELI.ND"), + ("IFS", "WARUNKI"), + ("IMABS", "MODUŁ.LICZBY.ZESP"), + ("IMAGINARY", "CZ.UROJ.LICZBY.ZESP"), + ("IMARGUMENT", "ARG.LICZBY.ZESP"), + ("IMCONJUGATE", "SPRZĘŻ.LICZBY.ZESP"), + ("IMCOS", "COS.LICZBY.ZESP"), + ("IMCOSH", "COSH.LICZBY.ZESP"), + ("IMCOT", "COT.LICZBY.ZESP"), + ("IMCSC", "CSC.LICZBY.ZESP"), + ("IMCSCH", "CSCH.LICZBY.ZESP"), + ("IMDIV", "ILORAZ.LICZB.ZESP"), + ("IMEXP", "EXP.LICZBY.ZESP"), + ("IMLN", "LN.LICZBY.ZESP"), + ("IMLOG10", "LOG10.LICZBY.ZESP"), + ("IMLOG2", "LOG2.LICZBY.ZESP"), + ("IMPOWER", "POTĘGA.LICZBY.ZESP"), + ("IMPRODUCT", "ILOCZYN.LICZB.ZESP"), + ("IMREAL", "CZ.RZECZ.LICZBY.ZESP"), + ("IMSEC", "SEC.LICZBY.ZESP"), + ("IMSECH", "SECH.LICZBY.ZESP"), + ("IMSIN", "SIN.LICZBY.ZESP"), + ("IMSINH", "SINH.LICZBY.ZESP"), + ("IMSQRT", "PIERWIASTEK.LICZBY.ZESP"), + ("IMSUB", "RÓŻN.LICZB.ZESP"), + ("IMSUM", "SUMA.LICZB.ZESP"), + ("IMTAN", "TAN.LICZBY.ZESP"), + ("INDEX", "INDEKS"), + ("INDIRECT", "ADR.POŚR"), + ("INT", "ZAOKR.DO.CAŁK"), + ("INTERCEPT", "ODCIĘTA"), + ("INTRATE", "STOPA.PROC"), + ("ISBLANK", "CZY.PUSTA"), + ("ISERR", "CZY.BŁ"), + ("ISERROR", "CZY.BŁĄD"), + ("ISEVEN", "CZY.PARZYSTE"), + ("ISFORMULA", "CZY.FORMUŁA"), + ("ISLOGICAL", "CZY.LOGICZNA"), + ("ISNA", "CZY.BRAK"), + ("ISNONTEXT", "CZY.NIE.TEKST"), + ("ISNUMBER", "CZY.LICZBA"), + ("ISO.CEILING", "ISO.ZAOKR.W.GÓRĘ"), + ("ISODD", "CZY.NIEPARZYSTE"), + ("ISOWEEKNUM", "ISO.NUM.TYG"), + ("ISREF", "CZY.ADR"), + ("ISTEXT", "CZY.TEKST"), + ("KURT", "KURTOZA"), + ("LARGE", "MAX.K"), + ("LCM", "NAJMN.WSP.WIEL"), + ("LEFT", "LEWY"), + ("LEFTB", "LEWYB"), + ("LEN", "DŁ"), + ("LENB", "DŁ.B"), + ("LINEST", "REGLINP"), + ("LOGEST", "REGEXPP"), + ("LOGINV", "ROZKŁAD.LOG.ODW"), + ("LOGNORM.DIST", "ROZKŁ.LOG"), + ("LOGNORM.INV", "ROZKŁ.LOG.ODWR"), + ("LOGNORMDIST", "ROZKŁAD.LOG"), + ("LOOKUP", "WYSZUKAJ"), + ("LOWER", "LITERY.MAŁE"), + ("MATCH", "PODAJ.POZYCJĘ"), + ("MAXA", "MAX.A"), + ("MAXIFS", "MAKS.WARUNKÓW"), + ("MDETERM", "WYZNACZNIK.MACIERZY"), + ("MDURATION", "ROCZ.PRZYCH.M"), + ("MEDIAN", "MEDIANA"), + ("MID", "FRAGMENT.TEKSTU"), + ("MIDB", "FRAGMENT.TEKSTU.B"), + ("MINA", "MIN.A"), + ("MINIFS", "MIN.WARUNKÓW"), + ("MINUTE", "MINUTA"), + ("MINVERSE", "MACIERZ.ODW"), + ("MMULT", "MACIERZ.ILOCZYN"), + ("MODE", "WYST.NAJCZĘŚCIEJ"), + ("MODE.MULT", "WYST.NAJCZĘŚCIEJ.TABL"), + ("MODE.SNGL", "WYST.NAJCZĘŚCIEJ.WART"), + ("MONTH", "MIESIĄC"), + ("MROUND", "ZAOKR.DO.WIELOKR"), + ("MULTINOMIAL", "WIELOMIAN"), + ("MUNIT", "MACIERZ.JEDNOSTKOWA"), + ("NA", "BRAK"), + ("NEGBINOM.DIST", "ROZKŁ.DWUM.PRZEC"), + ("NEGBINOMDIST", "ROZKŁAD.DWUM.PRZEC"), + ("NETWORKDAYS", "DNI.ROBOCZE"), + ("NETWORKDAYS.INTL", "DNI.ROBOCZE.NIESTAND"), + ("NOMINAL", "NOMINALNA"), + ("NORM.DIST", "ROZKŁ.NORMALNY"), + ("NORM.INV", "ROZKŁ.NORMALNY.ODWR"), + ("NORM.S.DIST", "ROZKŁ.NORMALNY.S"), + ("NORM.S.INV", "ROZKŁ.NORMALNY.S.ODWR"), + ("NORMDIST", "ROZKŁAD.NORMALNY"), + ("NORMINV", "ROZKŁAD.NORMALNY.ODW"), + ("NORMSDIST", "ROZKŁAD.NORMALNY.S"), + ("NORMSINV", "ROZKŁAD.NORMALNY.S.ODW"), + ("NOT", "NIE"), + ("NOW", "TERAZ"), + ("NUMBERVALUE", "WARTOŚĆ.LICZBOWA"), + ("OCT2BIN", "ÓSM.NA.DWÓJK"), + ("OCT2DEC", "ÓSM.NA.DZIES"), + ("OCT2HEX", "ÓSM.NA.SZESN"), + ("ODD", "ZAOKR.DO.NPARZ"), + ("ODDFPRICE", "CENA.PIERW.OKR"), + ("ODDFYIELD", "RENT.PIERW.OKR"), + ("ODDLPRICE", "CENA.OST.OKR"), + ("ODDLYIELD", "RENT.OST.OKR"), + ("OFFSET", "PRZESUNIĘCIE"), + ("OR", "LUB"), + ("PDURATION", "O.CZAS.TRWANIA"), + ("PERCENTILE", "PERCENTYL"), + ("PERCENTILE.EXC", "PERCENTYL.PRZEDZ.OTW"), + ("PERCENTILE.INC", "PERCENTYL.PRZEDZ.ZAMK"), + ("PERCENTOF", "ODSETEK"), + ("PERCENTRANK", "PROCENT.POZYCJA"), + ("PERCENTRANK.EXC", "PROC.POZ.PRZEDZ.OTW"), + ("PERCENTRANK.INC", "PROC.POZ.PRZEDZ.ZAMK"), + ("PERMUT", "PERMUTACJE"), + ("PERMUTATIONA", "PERMUTACJE.A"), + ("PIVOTBY", "PRZESTAWIAJ.WEDŁUG"), + ("POISSON", "ROZKŁAD.POISSON"), + ("POISSON.DIST", "ROZKŁ.POISSON"), + ("POWER", "POTĘGA"), + ("PRICE", "CENA"), + ("PRICEDISC", "CENA.DYSK"), + ("PRICEMAT", "CENA.WYKUP"), + ("PROB", "PRAWDPD"), + ("PRODUCT", "ILOCZYN"), + ("PROPER", "Z.WIELKIEJ.LITERY"), + ("QUARTILE", "KWARTYL"), + ("QUARTILE.EXC", "KWARTYL.PRZEDZ.OTW"), + ("QUARTILE.INC", "KWARTYL.PRZEDZ.ZAMK"), + ("QUOTIENT", "CZ.CAŁK.DZIELENIA"), + ("RADIANS", "RADIANY"), + ("RAND", "LOS"), + ("RANDARRAY", "LOSOWA.TABLICA"), + ("RANDBETWEEN", "LOS.ZAKR"), + ("RANK", "POZYCJA"), + ("RANK.AVG", "POZYCJA.ŚR"), + ("RANK.EQ", "POZYCJA.NAJW"), + ("RECEIVED", "KWOTA.WYKUP"), + ("REGEXEXTRACT", "REGEXWYODRĘBNIJ"), + ("REGEXREPLACE", "REGEXZASTĄP"), + ("REPLACE", "ZASTĄP"), + ("REPLACEB", "ZASTĄP.B"), + ("REPT", "POWT"), + ("RIGHT", "PRAWY"), + ("RIGHTB", "PRAWY.B"), + ("ROMAN", "RZYMSKIE"), + ("ROUND", "ZAOKR"), + ("ROUNDDOWN", "ZAOKR.DÓŁ"), + ("ROUNDUP", "ZAOKR.GÓRA"), + ("ROW", "WIERSZ"), + ("ROWS", "ILE.WIERSZY"), + ("RRI", "RÓWNOW.STOPA.PROC"), + ("RSQ", "R.KWADRAT"), + ("SEARCH", "SZUKAJ.TEKST"), + ("SEARCHB", "SZUKAJ.TEKST.B"), + ("SECOND", "SEKUNDA"), + ("SEQUENCE", "SEKWENCJA"), + ("SERIESSUM", "SUMA.SZER.POT"), + ("SHEET", "ARKUSZ"), + ("SHEETS", "ARKUSZE"), + ("SIGN", "ZNAK.LICZBY"), + ("SKEW", "SKOŚNOŚĆ"), + ("SKEW.P", "SKOŚNOŚĆ.P"), + ("SLOPE", "NACHYLENIE"), + ("SMALL", "MIN.K"), + ("SORT", "SORTUJ"), + ("SORTBY", "SORTUJ.WEDŁUG"), + ("SQRT", "PIERWIASTEK"), + ("SQRTPI", "PIERW.PI"), + ("STANDARDIZE", "NORMALIZUJ"), + ("STDEV", "ODCH.STANDARDOWE"), + ("STDEV.P", "ODCH.STAND.POPUL"), + ("STDEV.S", "ODCH.STANDARD.PRÓBKI"), + ("STDEVA", "ODCH.STANDARDOWE.A"), + ("STDEVP", "ODCH.STANDARD.POPUL"), + ("STDEVPA", "ODCH.STANDARD.POPUL.A"), + ("STEYX", "REGBŁSTD"), + ("SUBSTITUTE", "PODSTAW"), + ("SUBTOTAL", "SUMY.CZĘŚCIOWE"), + ("SUM", "SUMA"), + ("SUMIF", "SUMA.JEŻELI"), + ("SUMIFS", "SUMA.WARUNKÓW"), + ("SUMPRODUCT", "SUMA.ILOCZYNÓW"), + ("SUMSQ", "SUMA.KWADRATÓW"), + ("SUMX2MY2", "SUMA.X2.M.Y2"), + ("SUMX2PY2", "SUMA.X2.P.Y2"), + ("SUMXMY2", "SUMA.XMY.2"), + ("SWITCH", "PRZEŁĄCZ"), + ("T.DIST", "ROZKŁ.T"), + ("T.DIST.2T", "ROZKŁ.T.DS"), + ("T.DIST.RT", "ROZKŁ.T.PS"), + ("T.INV", "ROZKŁ.T.ODWR"), + ("T.INV.2T", "ROZKŁ.T.ODWR.DS"), + ("TAKE", "WYCINEK"), + ("TBILLEQ", "RENT.EKW.BS"), + ("TBILLPRICE", "CENA.BS"), + ("TBILLYIELD", "RENT.BS"), + ("TDIST", "ROZKŁAD.T"), + ("TEXT", "TEKST"), + ("TEXTAFTER", "TEKST.PO"), + ("TEXTBEFORE", "TEKST.PRZED"), + ("TEXTJOIN", "POŁĄCZ.TEKSTY"), + ("TEXTSPLIT", "PODZIEL.TEKST"), + ("TIME", "CZAS"), + ("TIMEVALUE", "CZAS.WARTOŚĆ"), + ("TINV", "ROZKŁAD.T.ODW"), + ("TOCOL", "DO.KOLUMNY"), + ("TODAY", "DZIŚ"), + ("TOROW", "DO.WIERSZA"), + ("TRANSPOSE", "TRANSPONUJ"), + ("TREND", "REGLINW"), + ("TRIM", "USUŃ.ZBĘDNE.ODSTĘPY"), + ("TRIMMEAN", "ŚREDNIA.WEWN"), + ("TRIMRANGE", "PRZYTNIJZAKRES"), + ("TRUE", "PRAWDA"), + ("TRUNC", "LICZBA.CAŁK"), + ("TTEST", "TEST.T"), + ("TYPE", "TYP"), + ("UNICHAR", "ZNAK.UNICODE"), + ("UNIQUE", "UNIKATOWE"), + ("UPPER", "LITERY.WIELKIE"), + ("VALUE", "WARTOŚĆ"), + ("VALUETOTEXT", "WARTOŚĆ.NA.TEKST"), + ("VAR", "WARIANCJA"), + ("VAR.P", "WARIANCJA.POP"), + ("VAR.S", "WARIANCJA.PRÓBKI"), + ("VARA", "WARIANCJA.A"), + ("VARP", "WARIANCJA.POPUL"), + ("VARPA", "WARIANCJA.POPUL.A"), + ("VLOOKUP", "WYSZUKAJ.PIONOWO"), + ("VSTACK", "STOS.PION"), + ("WEEKDAY", "DZIEŃ.TYG"), + ("WEEKNUM", "NUM.TYG"), + ("WEIBULL", "ROZKŁAD.WEIBULL"), + ("WEIBULL.DIST", "ROZKŁ.WEIBULL"), + ("WORKDAY", "DZIEŃ.ROBOCZY"), + ("WORKDAY.INTL", "DZIEŃ.ROBOCZY.NIESTAND"), + ("WRAPCOLS", "ZAWIŃ.KOLUMNY"), + ("WRAPROWS", "ZAWIŃ.WIERSZE"), + ("XLOOKUP", "X.WYSZUKAJ"), + ("XMATCH", "X.DOPASUJ"), + ("YEAR", "ROK"), + ("YEARFRAC", "CZĘŚĆ.ROKU"), + ("YIELD", "RENTOWNOŚĆ"), + ("YIELDDISC", "RENT.DYSK"), + ("YIELDMAT", "RENT.WYKUP"), + ("ZTEST", "TEST.Z"), +]; + +/// Preferred error spellings in the Polish editor. +pub(super) const ERRORS: &[(CellError, &str)] = &[ + (CellError::Null, "#ZERO!"), + (CellError::Div0, "#DZIEL/0!"), + (CellError::Value, "#ARG!"), + (CellError::Ref, "#ADR!"), + (CellError::Name, "#NAZWA?"), + (CellError::Num, "#LICZBA!"), + (CellError::NA, "#N/D"), + (CellError::GettingData, "#POBIERANIE_DANYCH"), + (CellError::Spill, "#ROZLANIE!"), + (CellError::Calc, "#OBL!"), +]; + +#[cfg(test)] +mod tests { + use crate::{FormulaLocale, parse_input, print, print_input}; + + /// Checks that every mapped name survives localized printing and entry. + #[test] + fn every_polish_name_round_trips() { + let locale = FormulaLocale::Pl; + for &(canonical, local) in super::FUNCTIONS { + assert_eq!(locale.canonical_name(local), canonical, "{local}"); + let input = format!("{local}(1,25;2)"); + let expr = parse_input(&input, locale, |_| false).unwrap(); + assert_eq!(print(&expr), format!("{canonical}(1.25,2)")); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), input); + } + } +} diff --git a/crates/formula/src/input/pt.rs b/crates/formula/src/input/pt.rs new file mode 100644 index 0000000000..643bc84eac --- /dev/null +++ b/crates/formula/src/input/pt.rs @@ -0,0 +1,475 @@ +//! Formula names and error spellings for PtBr, adapted from PR #2754. +use gridcraft_core::CellError; + +pub(super) static DATA: super::LocaleData = super::LocaleData { + functions: FUNCTIONS, + errors: ERRORS, + table_items: None, + separators: super::COMMA_DECIMAL_SEPARATORS, + fold_alias: str::to_lowercase, + aliases: std::sync::OnceLock::new(), +}; + +const FUNCTIONS: &[(&str, &str)] = &[ + ("ACCRINT", "JUROSACUM"), + ("ACCRINTM", "JUROSACUMV"), + ("ADDRESS", "ENDEREÇO"), + ("AGGREGATE", "AGREGAR"), + ("AND", "E"), + ("ARABIC", "ARÁBICO"), + ("AREAS", "ÁREAS"), + ("ARRAYTOTEXT", "MATRIZPARATEXTO"), + ("ASIN", "ASEN"), + ("ASINH", "ASENH"), + ("AVEDEV", "DESV.MÉDIO"), + ("AVERAGE", "MÉDIA"), + ("AVERAGEA", "MÉDIAA"), + ("AVERAGEIF", "MÉDIASE"), + ("AVERAGEIFS", "MÉDIASES"), + ("BETA.DIST", "DIST.BETA"), + ("BETA.INV", "INV.BETA"), + ("BETADIST", "DISTBETA"), + ("BETAINV", "BETA.ACUM.INV"), + ("BIN2DEC", "BINADEC"), + ("BIN2HEX", "BINAHEX"), + ("BIN2OCT", "BINAOCT"), + ("BINOM.DIST", "DISTR.BINOM"), + ("BINOM.DIST.RANGE", "INTERV.DISTR.BINOM"), + ("BINOM.INV", "INV.BINOM"), + ("BINOMDIST", "DISTRBINOM"), + ("BITLSHIFT", "DESLOCESQBIT"), + ("BITRSHIFT", "DESLOCDIRBIT"), + ("CEILING", "TETO"), + ("CEILING.MATH", "TETO.MAT"), + ("CEILING.PRECISE", "TETO.PRECISO"), + ("CELL", "CÉL"), + ("CHAR", "CARACT"), + ("CHIDIST", "DIST.QUI"), + ("CHIINV", "INV.QUI"), + ("CHISQ.DIST", "DIST.QUIQUA"), + ("CHISQ.DIST.RT", "DIST.QUIQUA.CD"), + ("CHISQ.INV", "INV.QUIQUA"), + ("CHISQ.INV.RT", "INV.QUIQUA.CD"), + ("CHISQ.TEST", "TESTE.QUIQUA"), + ("CHITEST", "TESTE.QUI"), + ("CHOOSE", "ESCOLHER"), + ("CHOOSECOLS", "ESCOLHERCOLS"), + ("CHOOSEROWS", "ESCOLHERLINS"), + ("CLEAN", "TIRAR"), + ("CODE", "CÓDIGO"), + ("COLUMN", "COL"), + ("COLUMNS", "COLS"), + ("COMPLEX", "COMPLEXO"), + ("CONCATENATE", "CONCATENAR"), + ("CONFIDENCE", "INT.CONFIANÇA"), + ("CONFIDENCE.NORM", "INT.CONFIANÇA.NORM"), + ("CONFIDENCE.T", "INT.CONFIANÇA.T"), + ("CONVERT", "CONVERTER"), + ("COUNT", "CONT.NÚM"), + ("COUNTA", "CONT.VALORES"), + ("COUNTBLANK", "CONTAR.VAZIO"), + ("COUNTIF", "CONT.SE"), + ("COUNTIFS", "CONT.SES"), + ("COUPDAYBS", "CUPDIASINLIQ"), + ("COUPDAYS", "CUPDIAS"), + ("COUPDAYSNC", "CUPDIASPRÓX"), + ("COUPNCD", "CUPDATAPRÓX"), + ("COUPNUM", "CUPNÚM"), + ("COUPPCD", "CUPDATAANT"), + ("COVARIANCE.P", "COVARIAÇÃO.P"), + ("COVARIANCE.S", "COVARIAÇÃO.S"), + ("CRITBINOM", "CRIT.BINOM"), + ("CSC", "COSEC"), + ("CSCH", "COSECH"), + ("CUBEKPIMEMBER", "MEMBROKPICUBO"), + ("CUBEMEMBER", "MEMBROCUBO"), + ("CUBEMEMBERPROPERTY", "PROPRIEDADEMEMBROCUBO"), + ("CUBERANKEDMEMBER", "MEMBROCLASSIFICADOCUBO"), + ("CUBESET", "CONJUNTOCUBO"), + ("CUBESETCOUNT", "CONTAGEMCONJUNTOCUBO"), + ("CUBEVALUE", "VALORCUBO"), + ("CUMIPMT", "PGTOJURACUM"), + ("CUMPRINC", "PGTOCAPACUM"), + ("DATE", "DATA"), + ("DATEDIF", "DATADIF"), + ("DATEVALUE", "DATA.VALOR"), + ("DAVERAGE", "BDMÉDIA"), + ("DAY", "DIA"), + ("DAYS", "DIAS"), + ("DAYS360", "DIAS360"), + ("DB", "BD"), + ("DCOUNT", "BDCONTAR"), + ("DCOUNTA", "BDCONTARA"), + ("DDB", "BDD"), + ("DEC2BIN", "DECABIN"), + ("DEC2HEX", "DECAHEX"), + ("DEC2OCT", "DECAOCT"), + ("DEGREES", "GRAUS"), + ("DEVSQ", "DESVQ"), + ("DGET", "BDEXTRAIR"), + ("DISC", "DESC"), + ("DMAX", "BDMÁX"), + ("DMIN", "BDMÍN"), + ("DOLLAR", "MOEDA"), + ("DOLLARDE", "MOEDADEC"), + ("DOLLARFR", "MOEDAFRA"), + ("DPRODUCT", "BDMULTIPL"), + ("DROP", "DESCARTAR"), + ("DSTDEV", "BDEST"), + ("DSTDEVP", "BDDESVPA"), + ("DSUM", "BDSOMA"), + ("DURATION", "DURAÇÃO"), + ("DVAR", "BDVAREST"), + ("DVARP", "BDVARP"), + ("EDATE", "DATAM"), + ("EFFECT", "EFETIVA"), + ("ENCODEURL", "CODIFURL"), + ("EOMONTH", "FIMMÊS"), + ("ERF", "FUNERRO"), + ("ERF.PRECISE", "FUNERRO.PRECISO"), + ("ERFC", "FUNERROCOMPL"), + ("ERFC.PRECISE", "FUNERROCOMPL.PRECISO"), + ("ERROR.TYPE", "TIPO.ERRO"), + ("EVEN", "PAR"), + ("EXACT", "EXATO"), + ("EXPAND", "EXPANDIR"), + ("EXPON.DIST", "DISTR.EXPON"), + ("EXPONDIST", "DISTEXPON"), + ("F.DIST", "DIST.F"), + ("F.DIST.RT", "DIST.F.CD"), + ("F.INV", "INV.F"), + ("F.INV.RT", "INV.F.CD"), + ("F.TEST", "TESTE.F"), + ("FACT", "FATORIAL"), + ("FACTDOUBLE", "FATDUPLO"), + ("FALSE", "FALSO"), + ("FDIST", "DISTF"), + ("FILTER", "FILTRO"), + ("FILTERXML", "FILTROXML"), + ("FIND", "PROCURAR"), + ("FINDB", "PROCURARB"), + ("FINV", "INVF"), + ("FIXED", "DEF.NÚM.DEC"), + ("FLOOR", "ARREDMULTB"), + ("FLOOR.MATH", "ARREDMULTB.MAT"), + ("FLOOR.PRECISE", "ARREDMULTB.PRECISO"), + ("FORECAST", "PREVISÃO"), + ("FORECAST.ETS", "PREVISÃO.ETS"), + ("FORECAST.ETS.CONFINT", "PREVISÃO.ETS.CONFINT"), + ("FORECAST.ETS.SEASONALITY", "PREVISÃO.ETS.SAZONALIDADE"), + ("FORECAST.ETS.STAT", "PREVISÃO.ETS.STAT"), + ("FORECAST.LINEAR", "PREVISÃO.LINEAR"), + ("FORMULATEXT", "FÓRMULATEXTO"), + ("FREQUENCY", "FREQÜÊNCIA"), + ("FTEST", "TESTEF"), + ("FV", "VF"), + ("FVSCHEDULE", "VFPLANO"), + ("GAMMA", "GAMA"), + ("GAMMA.DIST", "DIST.GAMA"), + ("GAMMA.INV", "INV.GAMA"), + ("GAMMADIST", "DISTGAMA"), + ("GAMMAINV", "INVGAMA"), + ("GAMMALN", "LNGAMA"), + ("GAMMALN.PRECISE", "LNGAMA.PRECISO"), + ("GCD", "MDC"), + ("GEOMEAN", "MÉDIA.GEOMÉTRICA"), + ("GESTEP", "DEGRAU"), + ("GROUPBY", "AGRUPARPOR"), + ("GROWTH", "CRESCIMENTO"), + ("HARMEAN", "MÉDIA.HARMÔNICA"), + ("HEX2BIN", "HEXABIN"), + ("HEX2DEC", "HEXADEC"), + ("HEX2OCT", "HEXAOCT"), + ("HLOOKUP", "PROCH"), + ("HOUR", "HORA"), + ("HSTACK", "EMPILHARH"), + ("HYPERLINK", "HIPERLINK"), + ("HYPGEOM.DIST", "DIST.HIPERGEOM.N"), + ("HYPGEOMDIST", "DIST.HIPERGEOM"), + ("IF", "SE"), + ("IFERROR", "SEERRO"), + ("IFNA", "SENÃODISP"), + ("IFS", "SES"), + ("IMAGINARY", "IMAGINÁRIO"), + ("IMARGUMENT", "IMARG"), + ("IMCONJUGATE", "IMCONJ"), + ("IMCSC", "IMCOSEC"), + ("IMCSCH", "IMCOSECH"), + ("IMPOWER", "IMPOT"), + ("IMPRODUCT", "IMPROD"), + ("IMSIN", "IMSENO"), + ("IMSINH", "IMSENH"), + ("IMSQRT", "IMRAIZ"), + ("IMSUB", "IMSUBTR"), + ("IMSUM", "IMSOMA"), + ("INDEX", "ÍNDICE"), + ("INDIRECT", "INDIRETO"), + ("INFO", "INFORMAÇÃO"), + ("INTERCEPT", "INTERCEPÇÃO"), + ("INTRATE", "TAXAJUROS"), + ("IPMT", "IPGTO"), + ("IRR", "TIR"), + ("ISBLANK", "ÉCÉL.VAZIA"), + ("ISERR", "ÉERRO"), + ("ISERROR", "ÉERROS"), + ("ISEVEN", "ÉPAR"), + ("ISFORMULA", "ÉFÓRMULA"), + ("ISLOGICAL", "ÉLÓGICO"), + ("ISNA", "É.NÃO.DISP"), + ("ISNONTEXT", "É.NÃO.TEXTO"), + ("ISNUMBER", "ÉNÚM"), + ("ISO.CEILING", "ISO.TETO"), + ("ISODD", "ÉIMPAR"), + ("ISOWEEKNUM", "NÚMSEMANAISO"), + ("ISPMT", "ÉPGTO"), + ("ISREF", "ÉREF"), + ("ISTEXT", "ÉTEXTO"), + ("KURT", "CURT"), + ("LARGE", "MAIOR"), + ("LCM", "MMC"), + ("LEFT", "ESQUERDA"), + ("LEFTB", "ESQUERDAB"), + ("LEN", "NÚM.CARACT"), + ("LENB", "NÚM.CARACTB"), + ("LINEST", "PROJ.LIN"), + ("LOGEST", "PROJ.LOG"), + ("LOGINV", "INVLOG"), + ("LOGNORM.DIST", "DIST.LOGNORMAL.N"), + ("LOGNORM.INV", "INV.LOGNORMAL"), + ("LOGNORMDIST", "DIST.LOGNORMAL"), + ("LOOKUP", "PROC"), + ("LOWER", "MINÚSCULA"), + ("MATCH", "CORRESP"), + ("MAX", "MÁXIMO"), + ("MAXA", "MÁXIMOA"), + ("MAXIFS", "MÁXIMOSES"), + ("MDETERM", "MATRIZ.DETERM"), + ("MDURATION", "MDURAÇÃO"), + ("MEDIAN", "MED"), + ("MID", "EXT.TEXTO"), + ("MIDB", "EXT.TEXTOB"), + ("MIN", "MÍNIMO"), + ("MINA", "MÍNIMOA"), + ("MINIFS", "MÍNIMOSES"), + ("MINUTE", "MINUTO"), + ("MINVERSE", "MATRIZ.INVERSO"), + ("MIRR", "MTIR"), + ("MMULT", "MATRIZ.MULT"), + ("MOD", "RESTO"), + ("MODE", "MODO"), + ("MODE.MULT", "MODO.MULT"), + ("MODE.SNGL", "MODO.ÚNICO"), + ("MONTH", "MÊS"), + ("MROUND", "MARRED"), + ("NA", "NÃO.DISP"), + ("NEGBINOM.DIST", "DIST.BIN.NEG.N"), + ("NEGBINOMDIST", "DIST.BIN.NEG"), + ("NETWORKDAYS", "DIATRABALHOTOTAL"), + ("NETWORKDAYS.INTL", "DIATRABALHOTOTAL.INTL"), + ("NORM.DIST", "DIST.NORM.N"), + ("NORM.INV", "INV.NORM.N"), + ("NORM.S.DIST", "DIST.NORMP.N"), + ("NORM.S.INV", "INV.NORMP.N"), + ("NORMDIST", "DISTNORM"), + ("NORMINV", "INV.NORM"), + ("NORMSDIST", "DISTNORMP"), + ("NORMSINV", "INV.NORMP"), + ("NOT", "NÃO"), + ("NOW", "AGORA"), + ("NPV", "VPL"), + ("NUMBERVALUE", "VALORNUMÉRICO"), + ("OCT2BIN", "OCTABIN"), + ("OCT2DEC", "OCTADEC"), + ("OCT2HEX", "OCTAHEX"), + ("ODD", "ÍMPAR"), + ("ODDFPRICE", "PREÇOPRIMINC"), + ("ODDFYIELD", "LUCROPRIMINC"), + ("ODDLPRICE", "PREÇOÚLTINC"), + ("ODDLYIELD", "LUCROÚLTINC"), + ("OFFSET", "DESLOC"), + ("OR", "OU"), + ("PDURATION", "DURAÇÃOP"), + ("PERCENTILE", "PERCENTIL"), + ("PERCENTILE.EXC", "PERCENTIL.EXC"), + ("PERCENTILE.INC", "PERCENTIL.INC"), + ("PERCENTOF", "PORCENTAGEMDE"), + ("PERCENTRANK", "ORDEM.PORCENTUAL"), + ("PERCENTRANK.EXC", "ORDEM.PORCENTUAL.EXC"), + ("PERCENTRANK.INC", "ORDEM.PORCENTUAL.INC"), + ("PERMUTATIONA", "PERMUTAS"), + ("PHONETIC", "FONÉTICA"), + ("PIVOTBY", "PIVOTAR"), + ("PMT", "PGTO"), + ("POISSON.DIST", "DIST.POISSON"), + ("POWER", "POTÊNCIA"), + ("PPMT", "PPGTO"), + ("PRICE", "PREÇO"), + ("PRICEDISC", "PREÇODESC"), + ("PRICEMAT", "PREÇOVENC"), + ("PRODUCT", "MULT"), + ("PROPER", "PRI.MAIÚSCULA"), + ("PV", "VP"), + ("QUARTILE", "QUARTIL"), + ("QUARTILE.EXC", "QUARTIL.EXC"), + ("QUARTILE.INC", "QUARTIL.INC"), + ("QUOTIENT", "QUOCIENTE"), + ("RADIANS", "RADIANOS"), + ("RAND", "ALEATÓRIO"), + ("RANDARRAY", "MATRIZALEATÓRIA"), + ("RANDBETWEEN", "ALEATÓRIOENTRE"), + ("RANK", "ORDEM"), + ("RANK.AVG", "ORDEM.MÉD"), + ("RANK.EQ", "ORDEM.EQ"), + ("RATE", "TAXA"), + ("RECEIVED", "RECEBER"), + ("REGEXEXTRACT", "REGEX.EXTRAIR"), + ("REGEXREPLACE", "REGEX.SUBSTITUIR"), + ("REGEXTEST", "REGEX.TESTAR"), + ("REPLACE", "MUDAR"), + ("REPLACEB", "SUBSTITUIRB"), + ("RIGHT", "DIREITA"), + ("RIGHTB", "DIREITAB"), + ("ROMAN", "ROMANO"), + ("ROUND", "ARRED"), + ("ROUNDDOWN", "ARREDONDAR.PARA.BAIXO"), + ("ROUNDUP", "ARREDONDAR.PARA.CIMA"), + ("ROW", "LIN"), + ("ROWS", "LINS"), + ("RRI", "TAXAJURO"), + ("RSQ", "RQUAD"), + ("SEARCH", "LOCALIZAR"), + ("SEARCHB", "LOCALIZARB"), + ("SECOND", "SEGUNDO"), + ("SEQUENCE", "SEQUÊNCIA"), + ("SERIESSUM", "SOMASEQÜÊNCIA"), + ("SHEET", "PLAN"), + ("SHEETS", "PLANS"), + ("SIGN", "SINAL"), + ("SIN", "SEN"), + ("SINH", "SENH"), + ("SKEW", "DISTORÇÃO"), + ("SKEW.P", "DISTORÇÃO.P"), + ("SLN", "DPD"), + ("SLOPE", "INCLINAÇÃO"), + ("SMALL", "MENOR"), + ("SORT", "CLASSIFICAR"), + ("SORTBY", "CLASSIFICARPOR"), + ("SQRT", "RAIZ"), + ("SQRTPI", "RAIZPI"), + ("STANDARDIZE", "PADRONIZAR"), + ("STDEV", "DESVPAD"), + ("STDEV.P", "DESVPAD.P"), + ("STDEV.S", "DESVPAD.A"), + ("STDEVA", "DESVPADA"), + ("STDEVP", "DESVPADP"), + ("STDEVPA", "DESVPADPA"), + ("STEYX", "EPADYX"), + ("SUBSTITUTE", "SUBSTITUIR"), + ("SUM", "SOMA"), + ("SUMIF", "SOMASE"), + ("SUMIFS", "SOMASES"), + ("SUMPRODUCT", "SOMARPRODUTO"), + ("SUMSQ", "SOMAQUAD"), + ("SUMX2MY2", "SOMAX2DY2"), + ("SUMX2PY2", "SOMAX2SY2"), + ("SUMXMY2", "SOMAXMY2"), + ("SWITCH", "PARÂMETRO"), + ("SYD", "SDA"), + ("T.DIST", "DIST.T"), + ("T.DIST.2T", "DIST.T.BC"), + ("T.DIST.RT", "DIST.T.CD"), + ("T.INV", "INV.T"), + ("T.INV.2T", "INV.T.BC"), + ("T.TEST", "TESTE.T"), + ("TAKE", "PEGAR"), + ("TBILLEQ", "OTN"), + ("TBILLPRICE", "OTNVALOR"), + ("TBILLYIELD", "OTNLUCRO"), + ("TDIST", "DISTT"), + ("TEXT", "TEXTO"), + ("TEXTAFTER", "TEXTODEPOIS"), + ("TEXTBEFORE", "TEXTOANTES"), + ("TEXTJOIN", "UNIRTEXTO"), + ("TEXTSPLIT", "DIVIDIRTEXTO"), + ("TIME", "TEMPO"), + ("TIMEVALUE", "VALOR.TEMPO"), + ("TINV", "INVT"), + ("TOCOL", "PARACOL"), + ("TODAY", "HOJE"), + ("TOROW", "PARALIN"), + ("TRANSPOSE", "TRANSPOR"), + ("TREND", "TENDÊNCIA"), + ("TRIM", "ARRUMAR"), + ("TRIMMEAN", "MÉDIA.INTERNA"), + ("TRIMRANGE", "APARARINTERVALO"), + ("TRUE", "VERDADEIRO"), + ("TRUNC", "TRUNCAR"), + ("TTEST", "TESTET"), + ("TYPE", "TIPO"), + ("UNICHAR", "CARACTUNICODE"), + ("UNIQUE", "ÚNICO"), + ("UPPER", "MAIÚSCULA"), + ("USDOLLAR", "MOEDA.US"), + ("VALUE", "VALOR"), + ("VALUETOTEXT", "VALORPARATEXTO"), + ("VAR.S", "VAR.A"), + ("VDB", "BDV"), + ("VLOOKUP", "PROCV"), + ("VSTACK", "EMPILHARV"), + ("WEBSERVICE", "SERVIÇOWEB"), + ("WEEKDAY", "DIA.DA.SEMANA"), + ("WEEKNUM", "NÚMSEMANA"), + ("WEIBULL.DIST", "DIST.WEIBULL"), + ("WORKDAY", "DIATRABALHO"), + ("WORKDAY.INTL", "DIATRABALHO.INTL"), + ("WRAPCOLS", "QUEBRARCOLS"), + ("WRAPROWS", "QUEBRARLINS"), + ("XIRR", "XTIR"), + ("XLOOKUP", "PROCX"), + ("XMATCH", "CORRESPX"), + ("XNPV", "XVPL"), + ("XOR", "OUEXCL"), + ("YEAR", "ANO"), + ("YEARFRAC", "FRAÇÃOANO"), + ("YIELD", "LUCRO"), + ("YIELDDISC", "LUCRODESC"), + ("YIELDMAT", "LUCROVENC"), + ("Z.TEST", "TESTE.Z"), + ("ZTEST", "TESTEZ"), +]; + +const ERRORS: &[(CellError, &str)] = &[ + (CellError::Value, "#VALOR!"), + (CellError::Name, "#NOME?"), + (CellError::Num, "#NÚM!"), + (CellError::NA, "#N/D"), + (CellError::Spill, "#DESPEJAR!"), +]; + +#[cfg(test)] +mod tests { + use crate::{FormulaLocale, parse_input, print, print_input}; + + /// Checks each mapped name with decimal commas and argument separators. + #[test] + fn aliases_round_trip() { + let locale = FormulaLocale::PtBr; + for &(canonical, local) in super::FUNCTIONS { + assert_eq!(locale.canonical_name(local), canonical, "{local}"); + let input = format!("{local}(1,25;2)"); + let expr = parse_input(&input, locale, |_| false).unwrap(); + assert_eq!(print(&expr), format!("{canonical}(1.25,2)")); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), input); + } + for &(error, spelling) in super::ERRORS { + let expr = parse_input(&spelling.to_lowercase(), locale, |_| false).unwrap(); + assert_eq!(print(&expr), error.as_str()); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), spelling); + } + + let array = r"SOMA({1,5\2;3\4};0)"; + let expr = parse_input(array, locale, |_| false).unwrap(); + assert_eq!(print(&expr), "SUM({1.5,2;3,4},0)"); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), array); + } +} diff --git a/crates/formula/src/input/ru.rs b/crates/formula/src/input/ru.rs new file mode 100644 index 0000000000..1f48615e2a --- /dev/null +++ b/crates/formula/src/input/ru.rs @@ -0,0 +1,261 @@ +//! Russian formula names adapted from PR #1850; error spellings are locale data. + +pub(super) static DATA: super::LocaleData = super::LocaleData { + functions: FUNCTIONS, + errors: ERRORS, + table_items: None, + separators: super::COMMA_DECIMAL_SEPARATORS, + fold_alias, + aliases: std::sync::OnceLock::new(), +}; + +pub(super) const FUNCTIONS: &[(&str, &str)] = &[ + ("SUM", "СУММ"), + ("SUMIF", "СУММЕСЛИ"), + ("SUMIFS", "СУММЕСЛИМН"), + ("SUMPRODUCT", "СУММПРОИЗВ"), + ("SUMSQ", "СУММКВ"), + ("SUMX2MY2", "СУММРАЗНКВ"), + ("SUMX2PY2", "СУММСУММКВ"), + ("SUMXMY2", "СУММКВРАЗН"), + ("SUBTOTAL", "ПРОМЕЖУТОЧНЫЕ.ИТОГИ"), + ("AGGREGATE", "АГРЕГАТ"), + ("PRODUCT", "ПРОИЗВЕД"), + ("ROUND", "ОКРУГЛ"), + ("ROUNDUP", "ОКРУГЛВВЕРХ"), + ("ROUNDDOWN", "ОКРУГЛВНИЗ"), + ("MROUND", "ОКРУГЛТ"), + ("CEILING", "ОКРВВЕРХ"), + ("FLOOR", "ОКРВНИЗ"), + ("INT", "ЦЕЛОЕ"), + ("TRUNC", "ОТБР"), + ("MOD", "ОСТАТ"), + ("QUOTIENT", "ЧАСТНОЕ"), + ("POWER", "СТЕПЕНЬ"), + ("SQRT", "КОРЕНЬ"), + ("PI", "ПИ"), + ("RAND", "СЛЧИС"), + ("RANDBETWEEN", "СЛУЧМЕЖДУ"), + ("FACT", "ФАКТР"), + ("COMBIN", "ЧИСЛКОМБ"), + ("PERMUT", "ПЕРЕСТ"), + ("GCD", "НОД"), + ("LCM", "НОК"), + ("SIGN", "ЗНАК"), + ("EVEN", "ЧЁТН"), + ("ODD", "НЕЧЁТ"), + ("DEGREES", "ГРАДУСЫ"), + ("RADIANS", "РАДИАНЫ"), + ("SEQUENCE", "ПОСЛЕДОВ"), + ("MMULT", "МУМНОЖ"), + ("MDETERM", "МОПРЕД"), + ("MINVERSE", "МОБР"), + ("TRANSPOSE", "ТРАНСП"), + ("AVERAGE", "СРЗНАЧ"), + ("AVERAGEA", "СРЗНАЧА"), + ("AVERAGEIF", "СРЗНАЧЕСЛИ"), + ("AVERAGEIFS", "СРЗНАЧЕСЛИМН"), + ("COUNT", "СЧЁТ"), + ("COUNTA", "СЧЁТЗ"), + ("COUNTBLANK", "СЧИТАТЬПУСТОТЫ"), + ("COUNTIF", "СЧЁТЕСЛИ"), + ("COUNTIFS", "СЧЁТЕСЛИМН"), + ("MAX", "МАКС"), + ("MAXA", "МАКСА"), + ("MAXIFS", "МАКСЕСЛИ"), + ("MIN", "МИН"), + ("MINA", "МИНА"), + ("MINIFS", "МИНЕСЛИ"), + ("MEDIAN", "МЕДИАНА"), + ("MODE", "МОДА"), + ("MODE.SNGL", "МОДА.ОДН"), + ("LARGE", "НАИБОЛЬШИЙ"), + ("SMALL", "НАИМЕНЬШИЙ"), + ("RANK", "РАНГ"), + ("RANK.EQ", "РАНГ.РВ"), + ("RANK.AVG", "РАНГ.СР"), + ("STDEV", "СТАНДОТКЛОН"), + ("STDEV.S", "СТАНДОТКЛОН.В"), + ("STDEV.P", "СТАНДОТКЛОН.Г"), + ("STDEVP", "СТАНДОТКЛОНП"), + ("VAR", "ДИСП"), + ("VAR.S", "ДИСП.В"), + ("VAR.P", "ДИСП.Г"), + ("VARP", "ДИСПР"), + ("CORREL", "КОРРЕЛ"), + ("SLOPE", "НАКЛОН"), + ("INTERCEPT", "ОТРЕЗОК"), + ("FORECAST", "ПРЕДСКАЗ"), + ("PERCENTILE", "ПЕРСЕНТИЛЬ"), + ("QUARTILE", "КВАРТИЛЬ"), + ("FREQUENCY", "ЧАСТОТА"), + ("GEOMEAN", "СРГЕОМ"), + ("HARMEAN", "СРГАРМ"), + ("AVEDEV", "СРОТКЛ"), + ("IF", "ЕСЛИ"), + ("IFS", "ЕСЛИМН"), + ("IFERROR", "ЕСЛИОШИБКА"), + ("IFNA", "ЕСНД"), + ("AND", "И"), + ("OR", "ИЛИ"), + ("NOT", "НЕ"), + ("XOR", "ИСКЛИЛИ"), + ("SWITCH", "ПЕРЕКЛЮЧ"), + ("TRUE", "ИСТИНА"), + ("FALSE", "ЛОЖЬ"), + ("CONCATENATE", "СЦЕПИТЬ"), + ("CONCAT", "СЦЕП"), + ("TEXTJOIN", "ОБЪЕДИНИТЬ"), + ("LEFT", "ЛЕВСИМВ"), + ("RIGHT", "ПРАВСИМВ"), + ("MID", "ПСТР"), + ("LEN", "ДЛСТР"), + ("FIND", "НАЙТИ"), + ("SEARCH", "ПОИСК"), + ("SUBSTITUTE", "ПОДСТАВИТЬ"), + ("REPLACE", "ЗАМЕНИТЬ"), + ("UPPER", "ПРОПИСН"), + ("LOWER", "СТРОЧН"), + ("PROPER", "ПРОПНАЧ"), + ("TRIM", "СЖПРОБЕЛЫ"), + ("CLEAN", "ПЕЧСИМВ"), + ("TEXT", "ТЕКСТ"), + ("VALUE", "ЗНАЧЕН"), + ("REPT", "ПОВТОР"), + ("EXACT", "СОВПАД"), + ("CHAR", "СИМВОЛ"), + ("CODE", "КОДСИМВ"), + ("T", "Т"), + ("N", "Ч"), + ("FIXED", "ФИКСИРОВАННЫЙ"), + ("DOLLAR", "РУБЛЬ"), + ("NUMBERVALUE", "ЧЗНАЧ"), + ("TODAY", "СЕГОДНЯ"), + ("NOW", "ТДАТА"), + ("DATE", "ДАТА"), + ("TIME", "ВРЕМЯ"), + ("YEAR", "ГОД"), + ("MONTH", "МЕСЯЦ"), + ("DAY", "ДЕНЬ"), + ("HOUR", "ЧАС"), + ("MINUTE", "МИНУТЫ"), + ("SECOND", "СЕКУНДЫ"), + ("WEEKDAY", "ДЕНЬНЕД"), + ("WEEKNUM", "НОМНЕДЕЛИ"), + ("ISOWEEKNUM", "НОМНЕДЕЛИ.ISO"), + ("DATEVALUE", "ДАТАЗНАЧ"), + ("TIMEVALUE", "ВРЕМЗНАЧ"), + ("EDATE", "ДАТАМЕС"), + ("EOMONTH", "КОНМЕСЯЦА"), + ("DATEDIF", "РАЗНДАТ"), + ("DAYS", "ДНИ"), + ("DAYS360", "ДНЕЙ360"), + ("NETWORKDAYS", "ЧИСТРАБДНИ"), + ("WORKDAY", "РАБДЕНЬ"), + ("YEARFRAC", "ДОЛЯГОДА"), + ("VLOOKUP", "ВПР"), + ("HLOOKUP", "ГПР"), + ("XLOOKUP", "ПРОСМОТРX"), + ("XMATCH", "ПОИСКПОЗX"), + ("LOOKUP", "ПРОСМОТР"), + ("MATCH", "ПОИСКПОЗ"), + ("INDEX", "ИНДЕКС"), + ("OFFSET", "СМЕЩ"), + ("INDIRECT", "ДВССЫЛ"), + ("ROW", "СТРОКА"), + ("COLUMN", "СТОЛБЕЦ"), + ("ROWS", "ЧСТРОК"), + ("COLUMNS", "ЧИСЛСТОЛБ"), + ("ADDRESS", "АДРЕС"), + ("CHOOSE", "ВЫБОР"), + ("AREAS", "ОБЛАСТИ"), + ("FILTER", "ФИЛЬТР"), + ("SORT", "СОРТ"), + ("SORTBY", "СОРТПО"), + ("UNIQUE", "УНИК"), + ("HYPERLINK", "ГИПЕРССЫЛКА"), + ("FORMULATEXT", "Ф.ТЕКСТ"), + ("ISBLANK", "ЕПУСТО"), + ("ISERROR", "ЕОШИБКА"), + ("ISERR", "ЕОШ"), + ("ISNA", "ЕНД"), + ("ISNUMBER", "ЕЧИСЛО"), + ("ISTEXT", "ЕТЕКСТ"), + ("ISNONTEXT", "ЕНЕТЕКСТ"), + ("ISLOGICAL", "ЕЛОГИЧ"), + ("ISREF", "ЕССЫЛКА"), + ("ISEVEN", "ЕЧЁТН"), + ("ISODD", "ЕНЕЧЁТ"), + ("NA", "НД"), + ("TYPE", "ТИП"), + ("ERROR.TYPE", "ТИП.ОШИБКИ"), + ("CELL", "ЯЧЕЙКА"), + ("INFO", "ИНФОРМ"), + ("SHEET", "ЛИСТ"), + ("SHEETS", "ЛИСТЫ"), + ("PMT", "ПЛТ"), + ("PV", "ПС"), + ("FV", "БС"), + ("NPV", "ЧПС"), + ("IRR", "ВСД"), + ("RATE", "СТАВКА"), + ("NPER", "КПЕР"), + ("IPMT", "ПРПЛТ"), + ("PPMT", "ОСПЛТ"), + ("SLN", "АПЛ"), + ("DB", "ФУО"), + ("DDB", "ДДОБ"), + ("XNPV", "ЧИСТНЗ"), + ("XIRR", "ЧИСТВНДОХ"), + ("CONVERT", "ПРЕОБР"), + ("DELTA", "ДЕЛЬТА"), +]; + +/// Russian function aliases accept е for ё without changing workbook-name identity. +pub(super) fn fold_alias(name: &str) -> String { + name.to_lowercase().replace('ё', "е") +} + +/// Russian error literals; the parser and UI share the locale-independent lookup. +pub(super) const ERRORS: &[(gridcraft_core::CellError, &str)] = &[ + (gridcraft_core::CellError::Null, "#ПУСТО!"), + (gridcraft_core::CellError::Div0, "#ДЕЛ/0!"), + (gridcraft_core::CellError::Value, "#ЗНАЧ!"), + (gridcraft_core::CellError::Ref, "#ССЫЛКА!"), + (gridcraft_core::CellError::Name, "#ИМЯ?"), + (gridcraft_core::CellError::Num, "#ЧИСЛО!"), + (gridcraft_core::CellError::NA, "#Н/Д"), + (gridcraft_core::CellError::GettingData, "#ПОЛУЧЕНИЕ_ДАННЫХ"), + (gridcraft_core::CellError::Spill, "#ПЕРЕНОС!"), + (gridcraft_core::CellError::Calc, "#ВЫЧИС!"), +]; + +#[cfg(test)] +mod tests { + use super::*; + use crate::FormulaLocale; + /// Checks every Russian alias for unique canonical/folded names and parse/print round trips. + #[test] + fn every_russian_alias_is_unique_and_round_trips() { + let mut canonical = std::collections::HashSet::new(); + let mut aliases = std::collections::HashSet::new(); + for (en, local) in FUNCTIONS { + assert!(canonical.insert(*en), "duplicate canonical name: {en}"); + assert!(aliases.insert(FormulaLocale::Ru.fold_alias(local)), "ambiguous alias: {local}"); + assert_eq!(FormulaLocale::Ru.function_name(en), *local); + assert_eq!(FormulaLocale::Ru.canonical_name(&local.to_lowercase()), *en); + assert_eq!(FormulaLocale::Ru.canonical_name(&local.replace('Ё', "Е")), *en); + let input = format!("{local}()"); + let expr = crate::parse_input(&input, FormulaLocale::Ru, |_| false).unwrap(); + assert_eq!(crate::print(&expr), format!("{en}()")); + assert_eq!(crate::print_input(&expr, FormulaLocale::Ru, |_| false).unwrap(), input); + // This is a syntax check, independent of a function's argument-count rules. + let canonical_input = format!("{en}(1.5,2.25)"); + let canonical_expr = crate::parse(&canonical_input).unwrap(); + let displayed = crate::print_input(&canonical_expr, FormulaLocale::Ru, |_| false).unwrap(); + assert_eq!(displayed, format!("{local}(1,5;2,25)")); + let reparsed = crate::parse_input(&displayed, FormulaLocale::Ru, |_| false).unwrap(); + assert_eq!(crate::print(&reparsed), canonical_input); + } + } +} diff --git a/crates/formula/src/input/tr.rs b/crates/formula/src/input/tr.rs new file mode 100644 index 0000000000..e8c40e4903 --- /dev/null +++ b/crates/formula/src/input/tr.rs @@ -0,0 +1,469 @@ +//! Turkish formula names and errors, adapted from GridCraft PR #1712. +use gridcraft_core::CellError; + +pub(super) static DATA: super::LocaleData = super::LocaleData { + functions: FUNCTIONS, + errors: ERRORS, + table_items: None, + separators: super::COMMA_DECIMAL_SEPARATORS, + fold_alias, + aliases: std::sync::OnceLock::new(), +}; + +/// Accepts the dotted and dotless I variants used when typing Turkish function names. +fn fold_alias(name: &str) -> String { + name.chars() + .flat_map(|c| match c { + 'İ' | 'ı' | 'I' => 'i'.to_lowercase(), + _ => c.to_lowercase(), + }) + .collect() +} + +// Ambiguous spellings are omitted so displaying and committing an existing formula +// cannot switch between modern and legacy functions that share a Turkish name. +const FUNCTIONS: &[(&str, &str)] = &[ + ("ABS", "MUTLAK"), + ("ACCRINT", "GERÇEKFAİZ"), + ("ACCRINTM", "GERÇEKFAİZV"), + ("ADDRESS", "ADRES"), + ("AGGREGATE", "TOPLAMA"), + ("AND", "VE"), + ("ARABIC", "ARAP"), + ("AREAS", "ALANSAY"), + ("ARRAYTOTEXT", "DİZİMETİN"), + ("ASIN", "ASİN"), + ("ASINH", "ASİNH"), + ("AVEDEV", "ORTSAP"), + ("AVERAGE", "ORTALAMA"), + ("AVERAGEA", "ORTALAMAA"), + ("AVERAGEIF", "EĞERORTALAMA"), + ("AVERAGEIFS", "ÇOKEĞERORTALAMA"), + ("BAHTTEXT", "BAHTMETİN"), + ("BASE", "TABAN"), + ("BETA.DIST", "BETA.DAĞ"), + ("BETA.INV", "BETA.TERS"), + ("BINOM.DIST", "BİNOM.DAĞ"), + ("BINOM.DIST.RANGE", "BİNOM.DAĞ.ARALIK"), + ("BINOM.INV", "BİNOM.TERS"), + ("BITAND", "BİTVE"), + ("BITLSHIFT", "BİTSOLAKAYDIR"), + ("BITOR", "BİTVEYA"), + ("BITRSHIFT", "BİTSAĞAKAYDIR"), + ("BITXOR", "BİTÖZELVEYA"), + ("CEILING.MATH", "TAVANAYUVARLA.MATEMATİK"), + ("CEILING.PRECISE", "TAVANAYUVARLA.DUYARLI"), + ("CELL", "HÜCRE"), + ("CHAR", "DAMGA"), + ("CHISQ.DIST", "KİKARE.DAĞ"), + ("CHISQ.DIST.RT", "KİKARE.DAĞ.SAĞK"), + ("CHISQ.INV", "KİKARE.TERS"), + ("CHISQ.INV.RT", "KİKARE.TERS.SAĞK"), + ("CHISQ.TEST", "KİKARE.TEST"), + ("CHOOSE", "ELEMAN"), + ("CHOOSECOLS", "SÜTUNSEÇ"), + ("CHOOSEROWS", "SATIRSEÇ"), + ("CLEAN", "TEMİZ"), + ("CODE", "KOD"), + ("COLUMN", "SÜTUN"), + ("COLUMNS", "SÜTUNSAY"), + ("COMBIN", "KOMBİNASYON"), + ("COMBINA", "KOMBİNASYONA"), + ("COMPLEX", "KARMAŞIK"), + ("CONCAT", "ARALIKBİRLEŞTİR"), + ("CONCATENATE", "BİRLEŞTİR"), + ("CONFIDENCE", "GÜVENİRLİK"), + ("CONFIDENCE.NORM", "GÜVENİLİRLİK.NORM"), + ("CONFIDENCE.T", "GÜVENİLİRLİK.T"), + ("CONVERT", "ÇEVİR"), + ("CORREL", "KORELASYON"), + ("COUNT", "BAĞ_DEĞ_SAY"), + ("COUNTA", "BAĞ_DEĞ_DOLU_SAY"), + ("COUNTBLANK", "BOŞLUKSAY"), + ("COUNTIF", "EĞERSAY"), + ("COUNTIFS", "ÇOKEĞERSAY"), + ("COUPDAYBS", "KUPONGÜNBD"), + ("COUPDAYS", "KUPONGÜN"), + ("COUPDAYSNC", "KUPONGÜNDSK"), + ("COUPNCD", "KUPONGÜNSKT"), + ("COUPNUM", "KUPONSAYI"), + ("COUPPCD", "KUPONGÜNÖKT"), + ("COVARIANCE.P", "KOVARYANS.P"), + ("COVARIANCE.S", "KOVARYANS.S"), + ("CRITBINOM", "KRİTİKBİNOM"), + ("CUBEKPIMEMBER", "KÜPKPIÜYESİ"), + ("CUBEMEMBER", "KÜPÜYESİ"), + ("CUBEMEMBERPROPERTY", "KÜPÜYEÖZELLİĞİ"), + ("CUBERANKEDMEMBER", "DERECELİKÜPÜYESİ"), + ("CUBESET", "KÜPKÜMESİ"), + ("CUBESETCOUNT", "KÜPKÜMESAYISI"), + ("CUBEVALUE", "KÜPDEĞERİ"), + ("CUMIPMT", "TOPÖDENENFAİZ"), + ("CUMPRINC", "TOPANAPARA"), + ("DATE", "TARİH"), + ("DATEDIF", "ETARİHLİ"), + ("DATEVALUE", "TARİHSAYISI"), + ("DAVERAGE", "VSEÇORT"), + ("DAY", "GÜN"), + ("DAYS", "GÜNSAY"), + ("DAYS360", "GÜN360"), + ("DB", "AZALANBAKİYE"), + ("DCOUNT", "VSEÇSAY"), + ("DCOUNTA", "VSEÇSAYDOLU"), + ("DDB", "ÇİFTAZALANBAKİYE"), + ("DECIMAL", "ONDALIK"), + ("DEGREES", "DERECE"), + ("DEVSQ", "SAPKARE"), + ("DGET", "VAL"), + ("DISC", "İNDİRİM"), + ("DMAX", "VSEÇMAK"), + ("DMIN", "VSEÇMİN"), + ("DOLLAR", "LİRA"), + ("DOLLARDE", "LİRAON"), + ("DOLLARFR", "LİRAKES"), + ("DPRODUCT", "VSEÇÇARP"), + ("DROP", "BIRAK"), + ("DSTDEV", "VSEÇSTDSAPMA"), + ("DSTDEVP", "VSEÇSTDSAPMAS"), + ("DSUM", "VSEÇTOPLA"), + ("DURATION", "SÜRE"), + ("DVAR", "VSEÇVAR"), + ("DVARP", "VSEÇVARS"), + ("EDATE", "SERİTARİH"), + ("EFFECT", "ETKİN"), + ("ENCODEURL", "URLKODLA"), + ("EOMONTH", "SERİAY"), + ("ERF", "HATAİŞLEV"), + ("ERF.PRECISE", "HATAİŞLEV.DUYARLI"), + ("ERFC", "TÜMHATAİŞLEV"), + ("ERFC.PRECISE", "TÜMHATAİŞLEV.DUYARLI"), + ("ERROR.TYPE", "HATA.TİPİ"), + ("EVEN", "ÇİFT"), + ("EXACT", "ÖZDEŞ"), + ("EXP", "ÜS"), + ("EXPAND", "GENİŞLET"), + ("EXPON.DIST", "ÜSTEL.DAĞ"), + ("F.DIST", "F.DAĞ"), + ("F.DIST.RT", "F.DAĞ.SAĞK"), + ("F.INV", "F.TERS"), + ("F.INV.RT", "F.TERS.SAĞK"), + ("FACT", "ÇARPINIM"), + ("FACTDOUBLE", "ÇİFTFAKTÖR"), + ("FALSE", "YANLIŞ"), + ("FILTER", "FİLTRE"), + ("FILTERXML", "XMLFİLTRELE"), + ("FIND", "BUL"), + ("FINDB", "BULB"), + ("FISHERINV", "FISHERTERS"), + ("FIXED", "SAYIDÜZENLE"), + ("FLOOR.MATH", "TABANAYUVARLA.MATEMATİK"), + ("FLOOR.PRECISE", "TABANAYUVARLA.DUYARLI"), + ("FORECAST", "TAHMİN"), + ("FORECAST.ETS", "TAHMİN.ETS"), + ("FORECAST.ETS.CONFINT", "TAHMİN.ETS.GVNARAL"), + ("FORECAST.ETS.SEASONALITY", "TAHMİN.ETS.MEVSİMSELLİK"), + ("FORECAST.ETS.STAT", "TAHMİN.ETS.İSTAT"), + ("FORECAST.LINEAR", "TAHMİN.DOĞRUSAL"), + ("FORMULATEXT", "FORMÜLMETNİ"), + ("FREQUENCY", "SIKLIK"), + ("FV", "GD"), + ("FVSCHEDULE", "GDPROGRAM"), + ("GAMMA", "GAMA"), + ("GAMMA.DIST", "GAMA.DAĞ"), + ("GAMMA.INV", "GAMA.TERS"), + ("GAMMALN", "GAMALN"), + ("GAMMALN.PRECISE", "GAMALN.DUYARLI"), + ("GCD", "OBEB"), + ("GEOMEAN", "GEOORT"), + ("GESTEP", "BESINIR"), + ("GETPIVOTDATA", "ÖZETVERİAL"), + ("GROWTH", "BÜYÜME"), + ("HARMEAN", "HARORT"), + ("HLOOKUP", "YATAYARA"), + ("HOUR", "SAAT"), + ("HSTACK", "YATAYYIĞ"), + ("HYPERLINK", "KÖPRÜ"), + ("HYPGEOM.DIST", "HİPERGEOM.DAĞ"), + ("IF", "EĞER"), + ("IFERROR", "EĞERHATA"), + ("IFNA", "EĞERYOKSA"), + ("IFS", "ÇOKEĞER"), + ("IMABS", "SANMUTLAK"), + ("IMAGINARY", "SANAL"), + ("IMARGUMENT", "SANBAĞ_DEĞİŞKEN"), + ("IMCONJUGATE", "SANEŞLENEK"), + ("IMCOS", "SANCOS"), + ("IMCOSH", "SANCOSH"), + ("IMCOT", "SANCOT"), + ("IMCSC", "SANCSC"), + ("IMCSCH", "SANCSCH"), + ("IMDIV", "SANBÖL"), + ("IMEXP", "SANÜS"), + ("IMLN", "SANLN"), + ("IMLOG10", "SANLOG10"), + ("IMLOG2", "SANLOG2"), + ("IMPOWER", "SANKUVVET"), + ("IMPRODUCT", "SANÇARP"), + ("IMREAL", "SANGERÇEK"), + ("IMSEC", "SANSEC"), + ("IMSECH", "SANSECH"), + ("IMSIN", "SANSIN"), + ("IMSINH", "SANSINH"), + ("IMSQRT", "SANKAREKÖK"), + ("IMSUB", "SANTOPLA"), + ("IMSUM", "SANÇIKAR"), + ("IMTAN", "SANTAN"), + ("INDEX", "İNDİS"), + ("INDIRECT", "DOLAYLI"), + ("INFO", "BİLGİ"), + ("INT", "TAMSAYI"), + ("INTERCEPT", "KESMENOKTASI"), + ("IPMT", "FAİZTUTARI"), + ("IRR", "İÇ_VERİM_ORANI"), + ("ISBLANK", "EBOŞSA"), + ("ISERR", "EHATA"), + ("ISERROR", "EHATALIYSA"), + ("ISEVEN", "ÇİFTMİ"), + ("ISFORMULA", "EFORMÜLSE"), + ("ISLOGICAL", "EMANTIKSALSA"), + ("ISNA", "EYOKSA"), + ("ISNONTEXT", "EMETİNDEĞİLSE"), + ("ISNUMBER", "ESAYIYSA"), + ("ISO.CEILING", "ISO.TAVAN"), + ("ISODD", "TEKMİ"), + ("ISOMITTED", "ATLANMIŞ"), + ("ISOWEEKNUM", "ISOHAFTASAY"), + ("ISREF", "EREFSE"), + ("ISTEXT", "EMETİNSE"), + ("KURT", "BASIKLIK"), + ("LARGE", "BÜYÜK"), + ("LCM", "OKEK"), + ("LEFT", "SOLDAN"), + ("LEFTB", "SOLB"), + ("LEN", "UZUNLUK"), + ("LENB", "UZUNLUKB"), + ("LINEST", "DOT"), + ("LOGEST", "LOT"), + ("LOGNORM.DIST", "LOGNORM.DAĞ"), + ("LOGNORM.INV", "LOGNORM.TERS"), + ("LOOKUP", "ARA"), + ("LOWER", "KÜÇÜKHARF"), + ("MAKEARRAY", "DİZİOLUŞTUR"), + ("MATCH", "KAÇINCI"), + ("MAX", "MAK"), + ("MAXA", "MAKA"), + ("MAXIFS", "ÇOKEĞERMAK"), + ("MDETERM", "DETERMİNANT"), + ("MDURATION", "MSÜRE"), + ("MEDIAN", "ORTANCA"), + ("MID", "PARÇAAL"), + ("MIDB", "ORTAB"), + ("MIN", "MİN"), + ("MINA", "MİNA"), + ("MINIFS", "ÇOKEĞERMİN"), + ("MINUTE", "DAKİKA"), + ("MINVERSE", "DİZEY_TERS"), + ("MIRR", "D_İÇ_VERİM_ORANI"), + ("MMULT", "DÇARP"), + ("MODE.MULT", "ENÇOK_OLAN.ÇOK"), + ("MODE.SNGL", "ENÇOK_OLAN.TEK"), + ("MONTH", "AY"), + ("MROUND", "KYUVARLA"), + ("MULTINOMIAL", "ÇOKTERİMLİ"), + ("MUNIT", "BİRİMMATRİS"), + ("N", "S"), + ("NA", "YOKSAY"), + ("NEGBINOM.DIST", "NEGBİNOM.DAĞ"), + ("NETWORKDAYS", "TAMİŞGÜNÜ"), + ("NETWORKDAYS.INTL", "TAMİŞGÜNÜ.ULUSL"), + ("NOMINAL", "NOMİNAL"), + ("NORM.DIST", "NORM.DAĞ"), + ("NORM.INV", "NORM.TERS"), + ("NORM.S.DIST", "NORM.S.DAĞ"), + ("NORM.S.INV", "NORM.S.TERS"), + ("NORMSDIST", "NORMSDAĞ"), + ("NORMSINV", "NORMSTERS"), + ("NOT", "DEĞİL"), + ("NOW", "ŞİMDİ"), + ("NPER", "TAKSİT_SAYISI"), + ("NPV", "NBD"), + ("NUMBERVALUE", "SAYIDEĞERİ"), + ("ODD", "TEK"), + ("ODDFPRICE", "TEKYDEĞER"), + ("ODDFYIELD", "TEKYÖDEME"), + ("ODDLPRICE", "TEKSDEĞER"), + ("ODDLYIELD", "TEKSÖDEME"), + ("OFFSET", "KAYDIR"), + ("OR", "YADA"), + ("PDURATION", "PSÜRE"), + ("PERCENTILE.EXC", "YÜZDEBİRLİK.HRC"), + ("PERCENTILE.INC", "YÜZDEBİRLİK.DHL"), + ("PERCENTRANK.EXC", "YÜZDERANK.HRC"), + ("PERCENTRANK.INC", "YÜZDERANK.DHL"), + ("PERMUT", "PERMÜTASYON"), + ("PERMUTATIONA", "PERMÜTASYONA"), + ("PHONETIC", "SES"), + ("PI", "Pİ"), + ("PMT", "DEVRESEL_ÖDEME"), + ("POISSON.DIST", "POISSON.DAĞ"), + ("POWER", "KUVVET"), + ("PPMT", "ANA_PARA_ÖDEMESİ"), + ("PRICE", "DEĞER"), + ("PRICEDISC", "DEĞERİND"), + ("PRICEMAT", "DEĞERVADE"), + ("PROB", "OLASILIK"), + ("PRODUCT", "ÇARPIM"), + ("PROPER", "YAZIM.DÜZENİ"), + ("PV", "BD"), + ("QUARTILE.EXC", "DÖRTTEBİRLİK.HRC"), + ("QUARTILE.INC", "DÖRTTEBİRLİK.DHL"), + ("QUOTIENT", "BÖLÜM"), + ("RADIANS", "RADYAN"), + ("RAND", "S_SAYI_ÜRET"), + ("RANDARRAY", "RASGDİZİ"), + ("RANDBETWEEN", "RASTGELEARADA"), + ("RANK.AVG", "RANK.ORT"), + ("RANK.EQ", "RANK.EŞİT"), + ("RATE", "FAİZ_ORANI"), + ("RECEIVED", "GETİRİ"), + ("REGEXEXTRACT", "NORMİFADEAYIKLA"), + ("REGEXREPLACE", "NORMİFADEDEĞİŞTİR"), + ("REGEXTEST", "NORMİFADESINA"), + ("REPLACE", "DEĞİŞTİR"), + ("REPLACEB", "DEĞİŞTİRB"), + ("REPT", "YİNELE"), + ("RIGHT", "SAĞDAN"), + ("RIGHTB", "SAĞB"), + ("ROMAN", "ROMEN"), + ("ROUND", "YUVARLA"), + ("ROUNDDOWN", "AŞAĞIYUVARLA"), + ("ROUNDUP", "YUKARIYUVARLA"), + ("ROW", "SATIR"), + ("ROWS", "SATIRSAY"), + ("RRI", "GERÇEKLEŞENYATIRIMGETİRİSİ"), + ("RSQ", "RKARE"), + ("SEARCH", "MBUL"), + ("SEARCHB", "ARAB"), + ("SECOND", "SANİYE"), + ("SEQUENCE", "SIRALI"), + ("SERIESSUM", "SERİTOPLA"), + ("SHEET", "SAYFA"), + ("SHEETS", "SAYFALAR"), + ("SIGN", "İŞARET"), + ("SIN", "SİN"), + ("SINH", "SİNH"), + ("SKEW", "ÇARPIKLIK"), + ("SKEW.P", "ÇARPIKLIK.P"), + ("SLN", "DA"), + ("SLOPE", "EĞİM"), + ("SMALL", "KÜÇÜK"), + ("SORT", "SIRALA"), + ("SORTBY", "SIRALAÖLÇÜT"), + ("SQRT", "KAREKÖK"), + ("SQRTPI", "KAREKÖKPİ"), + ("STANDARDIZE", "STANDARTLAŞTIRMA"), + ("STDEV.P", "STDSAPMA.P"), + ("STDEV.S", "STDSAPMA.S"), + ("STDEVA", "STDSAPMAA"), + ("STDEVPA", "STDSAPMASA"), + ("STEYX", "STHYX"), + ("SUBSTITUTE", "YERİNEKOY"), + ("SUBTOTAL", "ALTTOPLAM"), + ("SUM", "TOPLA"), + ("SUMIF", "ETOPLA"), + ("SUMIFS", "ÇOKETOPLA"), + ("SUMPRODUCT", "TOPLA.ÇARPIM"), + ("SUMSQ", "TOPKARE"), + ("SUMX2MY2", "TOPX2EY2"), + ("SUMX2PY2", "TOPX2AY2"), + ("SUMXMY2", "TOPXEY2"), + ("SWITCH", "İLKEŞLEŞEN"), + ("SYD", "YAT"), + ("T", "M"), + ("T.DIST", "T.DAĞ"), + ("T.DIST.2T", "T.DAĞ.2K"), + ("T.DIST.RT", "T.DAĞ.SAĞK"), + ("T.INV", "T.TERS"), + ("T.INV.2T", "T.TERS.2K"), + ("TAKE", "AL"), + ("TBILLEQ", "HTAHEŞ"), + ("TBILLPRICE", "HTAHDEĞER"), + ("TBILLYIELD", "HTAHÖDEME"), + ("TEXT", "METNEÇEVİR"), + ("TEXTAFTER", "SONRAKİMETİN"), + ("TEXTBEFORE", "ÖNCEKİMETİN"), + ("TEXTSPLIT", "METİNBÖL"), + ("TIME", "ZAMAN"), + ("TIMEVALUE", "ZAMANSAYISI"), + ("TOCOL", "SÜTUNA"), + ("TODAY", "BUGÜN"), + ("TOROW", "SATIRA"), + ("TRANSPOSE", "DEVRİK_DÖNÜŞÜM"), + ("TREND", "EĞİLİM"), + ("TRIM", "KIRP"), + ("TRIMMEAN", "KIRPORTALAMA"), + ("TRUE", "DOĞRU"), + ("TRUNC", "NSAT"), + ("TYPE", "TÜR"), + ("UNICHAR", "UNICODEKARAKTERİ"), + ("UNIQUE", "BENZERSİZ"), + ("UPPER", "BÜYÜKHARF"), + ("USDOLLAR", "ABDDOLAR"), + ("VALUE", "SAYIYAÇEVİR"), + ("VALUETOTEXT", "DEĞERMETİN"), + ("VARP", "VARS"), + ("VARPA", "VARSA"), + ("VDB", "DAB"), + ("VLOOKUP", "DÜŞEYARA"), + ("VSTACK", "DÜŞEYYIĞ"), + ("WEBSERVICE", "WEBHİZMETİ"), + ("WEEKDAY", "HAFTANINGÜNÜ"), + ("WEEKNUM", "HAFTASAY"), + ("WEIBULL.DIST", "WEIBULL.DAĞ"), + ("WORKDAY", "İŞGÜNÜ"), + ("WORKDAY.INTL", "İŞGÜNÜ.ULUSL"), + ("WRAPCOLS", "SÜTUNSAR"), + ("WRAPROWS", "SATIRSAR"), + ("XIRR", "AİÇVERİMORANI"), + ("XLOOKUP", "ÇAPRAZARA"), + ("XMATCH", "ÇAPRAZEŞLEŞTİR"), + ("XNPV", "ANBD"), + ("XOR", "ÖZELVEYA"), + ("YEAR", "YIL"), + ("YEARFRAC", "YILORAN"), + ("YIELD", "ÖDEME"), + ("YIELDDISC", "ÖDEMEİND"), + ("YIELDMAT", "ÖDEMEVADE"), +]; + +const ERRORS: &[(CellError, &str)] = &[ + (CellError::Null, "#BOŞ!"), + (CellError::Div0, "#SAYI/0!"), + (CellError::Value, "#DEĞER!"), + (CellError::Ref, "#BAŞV!"), + (CellError::Name, "#AD?"), + (CellError::Num, "#SAYI!"), + (CellError::NA, "#YOK"), + (CellError::GettingData, "#VERİ_ALINIYOR"), + (CellError::Spill, "#TAŞMA!"), + (CellError::Calc, "#HESAP!"), + (CellError::Circ, "#DÖNGÜ!"), +]; + +#[cfg(test)] +mod tests { + use crate::{FormulaLocale, parse_input, print, print_input}; + + /// Checks that every Turkish alias is unique after folding and survives localized editing. + #[test] + fn every_turkish_alias_round_trips() { + let locale = FormulaLocale::Tr; + for &(canonical, local) in super::FUNCTIONS { + assert_eq!(locale.canonical_name(local), canonical, "{local}"); + let input = format!("{local}(1,25;2)"); + let expr = parse_input(&input, locale, |_| false).unwrap(); + assert_eq!(print(&expr), format!("{canonical}(1.25,2)"), "{input}"); + assert_eq!(print_input(&expr, locale, |_| false).unwrap(), input); + } + } +} diff --git a/crates/formula/src/lexer.rs b/crates/formula/src/lexer.rs index 2799b5b6f0..3b092a4b50 100644 --- a/crates/formula/src/lexer.rs +++ b/crates/formula/src/lexer.rs @@ -118,14 +118,33 @@ fn quoted(src: &str, chars: &[(usize, char)], i: usize, start: usize, out: &mut Ok(j + 1) } -fn error_literal(src: &str, chars: &[(usize, char)], i: usize, start: usize, out: &mut Vec) -> Result { +/// Case variants can have different UTF-8 byte lengths, so compare character-aligned prefixes. +fn spelling_prefix<'a>(source: &'a str, spelling: &str) -> &'a str { + let end = source.char_indices().nth(spelling.chars().count()).map_or(source.len(), |(byte, _)| byte); + source.get(..end).unwrap_or("") +} + +/// Consumes a canonical or localized error literal and records its original UTF-8 byte span. +/// Returns the next character index, or a lexical error for an unknown error spelling. +fn error_literal( + src: &str, + chars: &[(usize, char)], + locale: crate::FormulaLocale, + i: usize, + start: usize, + out: &mut Vec, +) -> Result { let rest = src.get(start..).unwrap_or(""); - let error = CellError::ALL + let (error, end) = CellError::ALL .iter() - .copied() - .find(|error| rest.get(..error.as_str().len()).is_some_and(|text| text.eq_ignore_ascii_case(error.as_str()))) + .chain([CellError::Circ].iter()) + .find_map(|error| { + [locale.error_name(*error), error.as_str()].into_iter().find_map(|spelling| { + let prefix = spelling_prefix(rest, spelling); + (locale.fold_alias(prefix) == locale.fold_alias(spelling)).then_some((*error, i + prefix.chars().count())) + }) + }) .ok_or_else(|| LexError { msg: "unknown error literal".into(), pos: start })?; - let end = i + error.as_str().chars().count(); emit(src, chars, out, Tok::Error(error), start, end); Ok(end) } @@ -211,10 +230,12 @@ fn number(src: &str, chars: &[(usize, char)], locale: crate::FormulaLocale, i: u Ok(j) } +/// Emits a word, function, Boolean, or sheet token using the locale and array context. +/// Returns the character index immediately after the consumed token. fn word(src: &str, chars: &[(usize, char)], locale: crate::FormulaLocale, array_depth: usize, i: usize, start: usize, out: &mut Vec) -> usize { let ch = |index| char_at(chars, index); let mut j = i; - while ch(j).is_some_and(|c| is_word_char(c) && !(array_depth > 0 && c == locale.array_column_separator())) { + while ch(j).is_some_and(|c| is_word_char(c) && !(array_depth > 0 && locale.is_array_separator(c))) { j += 1; } let value: String = chars.get(i..j).map(|s| s.iter().map(|c| c.1).collect()).unwrap_or_default(); @@ -223,7 +244,7 @@ fn word(src: &str, chars: &[(usize, char)], locale: crate::FormulaLocale, array_ j + 1 } else if ch(j) == Some(':') && sheet_range_end(chars, locale, array_depth, &value, j, out) { let mut end = j + 1; - while ch(end).is_some_and(|c| is_word_char(c) && !(array_depth > 0 && c == locale.array_column_separator())) { + while ch(end).is_some_and(|c| is_word_char(c) && !(array_depth > 0 && locale.is_array_separator(c))) { end += 1; } let last: String = chars.get(j + 1..end).map(|s| s.iter().map(|c| c.1).collect()).unwrap_or_default(); @@ -247,10 +268,11 @@ fn word(src: &str, chars: &[(usize, char)], locale: crate::FormulaLocale, array_ } } +/// Whether the colon begins a sheet-range qualifier rather than a cell range or array delimiter. fn sheet_range_end(chars: &[(usize, char)], locale: crate::FormulaLocale, array_depth: usize, value: &str, colon: usize, out: &[Token]) -> bool { let ch = |index| char_at(chars, index); let mut end = colon + 1; - while ch(end).is_some_and(|c| is_word_char(c) && !(array_depth > 0 && c == locale.array_column_separator())) { + while ch(end).is_some_and(|c| is_word_char(c) && !(array_depth > 0 && locale.is_array_separator(c))) { end += 1; } let repeats_sheet = is_range_end(value) @@ -293,7 +315,7 @@ pub fn tokenize_locale(src: &str, locale: crate::FormulaLocale) -> Result { - i = error_literal(src, &chars, i, start, &mut out)?; + i = error_literal(src, &chars, locale, i, start, &mut out)?; } '[' => { i = structured_ref(src, &chars, i, start, &mut out)?; @@ -333,7 +355,11 @@ pub fn tokenize_locale(src: &str, locale: crate::FormulaLocale) -> Result { + c if array_depth > 0 && c == locale.array_row_separator() => { + push(&mut out, Tok::Semicolon, i + 1); + i += 1; + } + ';' if array_depth == 0 => { push(&mut out, Tok::Semicolon, i + 1); i += 1; } @@ -380,3 +406,13 @@ pub fn tokenize_locale(src: &str, locale: crate::FormulaLocale) -> Result Result Result { let body = src.strip_prefix('=').unwrap_or(src); if body.len() > MAX_FORMULA_LEN && body.chars().count() > MAX_FORMULA_LEN { @@ -66,7 +67,7 @@ fn parse_top(src: &str, locale: crate::FormulaLocale, allow_union: bool) -> Resu } let toks = tokenize_locale(body, locale).map_err(|e| ParseError { msg: e.msg, pos: e.pos })?; let toks = significant_spaces(toks); - let mut p = Parser { toks, i: 0, depth: 0, input: locale == crate::FormulaLocale::Es }; + let mut p = Parser { toks, i: 0, depth: 0, locale }; let e = p.expr(0, allow_union)?; match p.peek() { Tok::Eof if wrapper_height(&e) > MAX_DEPTH => Err(ParseError { msg: "formula is nested too deeply".into(), pos: 0 }), @@ -130,7 +131,7 @@ struct Parser { toks: Vec, i: usize, depth: usize, - input: bool, + locale: crate::FormulaLocale, } fn word_is_cols(w: &str) -> Option<(u32, bool)> { @@ -301,6 +302,8 @@ impl Parser { Ok(args) } + /// Parses a prefix operand, including localized literals, calls, arrays, and references. + /// The surrounding expression controls whether top-level reference unions are permitted. fn prefix(&mut self, allow_union: bool) -> Result { match self.next() { Tok::Number(n) => Ok(Expr::Number(n)), @@ -317,7 +320,8 @@ impl Parser { } Tok::LBrace => self.array(), Tok::Func(name) => { - let name = normalize_function_name(&name); + let explicit = name.get(..6).is_some_and(|p| p.eq_ignore_ascii_case("_xlfn.")); + let name = self.locale.normalize_function_name(&name); let mut args = self.args()?; // Files write `A1#` as `_xlfn.ANCHORARRAY(A1)`. if name == "ANCHORARRAY" @@ -350,6 +354,8 @@ impl Parser { { return Ok(Expr::Unary(UnOp::Trim(mode), Box::new(x))); } + // Keep an explicitly canonical spelling through localized alias resolution. + let name = if explicit && self.locale.canonical_name(&name) != name { format!("_xlfn.{name}") } else { name }; Ok(Expr::Call(name, args)) } Tok::Sheet(a, b) => { @@ -369,11 +375,11 @@ impl Parser { { let pos = self.pos(); let Tok::Struct(body) = self.next() else { return Err(self.err("internal")) }; - return parse_struct(&w, &body).map(Expr::Struct).map_err(|msg| ParseError { msg, pos }); + return parse_struct(&w, &self.locale.canonical_struct_body(&body)).map(Expr::Struct).map_err(|msg| ParseError { msg, pos }); } self.reference_from_word(SheetSel::Current, &w) } - Tok::Struct(body) => parse_struct("", &body).map(Expr::Struct).map_err(|msg| self.err(msg)), + Tok::Struct(body) => parse_struct("", &self.locale.canonical_struct_body(&body)).map(Expr::Struct).map_err(|msg| self.err(msg)), t => Err(self.err(format!("unexpected {}", describe(&t)))), } } @@ -447,6 +453,7 @@ impl Parser { Ok(Expr::Name(w.to_string())) } + /// Parses an array literal using the locale row and column separators and validates its rectangular shape. fn array(&mut self) -> Result { let mut rows = vec![Vec::new()]; loop { @@ -462,7 +469,7 @@ impl Parser { }, Tok::Text(s) => Expr::Text(Arc::from(s)), Tok::Bool(b) => Expr::Bool(b), - Tok::Word(w) if self.input => crate::input::boolean_alias(&w) + Tok::Word(w) if self.locale != crate::FormulaLocale::En => crate::input::boolean_alias(&w, self.locale) .map(Expr::Bool) .ok_or_else(|| self.err(format!("array constants may only contain constants, found {}", describe(&Tok::Word(w)))))?, Tok::Error(e) => Expr::Error(e), diff --git a/crates/formula/src/tests.rs b/crates/formula/src/tests.rs index 274a66667f..36baccf51c 100644 --- a/crates/formula/src/tests.rs +++ b/crates/formula/src/tests.rs @@ -228,6 +228,35 @@ fn moves_and_renames() -> Result<(), Box> { Ok(()) } +/// Sheet names fold across scripts (`лист1` = `Лист1`), as `Workbook::sheet_index` resolves them. +/// A structural edit and a rename must reach such a reference, and a delete must not leave it +/// behind as a stale name that only turns into `#REF!` on recalculation. +#[test] +fn sheet_references_follow_case_folded_names() -> Result<(), Box> { + let ins = Edit::Insert { axis: Axis::Rows, at: 0, count: 1 }; + assert_eq!(print(&adjust(parse("лист1!A1+Лист1!B2")?, "Sheet1", "Лист1", &ins)), "лист1!A2+Лист1!B3"); + assert_eq!(print(&rename_sheet(parse("лист1!A1+Лист1!B2")?, "Лист1", "Данные")), "Данные!A1+Данные!B2"); + assert_eq!(print(&rename_sheet(parse("ЛИСТ1!MyName")?, "Лист1", "Данные")), "Данные!MyName"); + let order: Vec = ["Sheet1", "Лист1", "Spare"].iter().map(|s| s.to_string()).collect(); + assert_eq!(print(&crate::adjust::delete_sheet(parse("SUM(лист1!A1)")?, "Лист1", &order)), "SUM(#REF!)"); + Ok(()) +} + +#[test] +fn edits_preserve_case_variant_sheet_identities() -> Result<(), Box> { + use crate::adjust::{adjust_in, delete_sheet, rename_sheet_in}; + let order = ["лист1", "ЛИСТ1", "Last"].map(String::from); + let source = "лист1!A1+ЛИСТ1!A1+ЛиСт1!Tax+ЛИСТ1!Tax"; + assert_eq!(print(&rename_sheet_in(parse(source)?, "лист1", "New", &order)), "New!A1+ЛИСТ1!A1+New!Tax+ЛИСТ1!Tax"); + assert_eq!(print(&delete_sheet(parse(source)?, "лист1", &order)), "#REF!+ЛИСТ1!A1+#REF!+ЛИСТ1!Tax"); + let span = "SUM(лист1:Last!A1)"; + assert_eq!(print(&delete_sheet(parse(span)?, "Last", &order)), "SUM(лист1:ЛИСТ1!A1)"); + assert_eq!(print(&rename_sheet_in(parse(span)?, "ЛИСТ1", "New", &order)), span); + let rows = Edit::Insert { axis: Axis::Rows, at: 0, count: 1 }; + assert_eq!(print(&adjust_in(parse("A1+лист1!A1+ЛИСТ1!A1")?, "ЛИСТ1", "лист1", &rows, &order)), "A1+лист1!A2+ЛИСТ1!A1"); + Ok(()) +} + #[test] fn rename_sheet_updates_qualified_names() -> Result<(), Box> { let e = parse("Data!MyName+MyName+Other!MyName")?; @@ -238,6 +267,10 @@ fn rename_sheet_updates_qualified_names() -> Result<(), Box String { + print(&parse_input(src, FormulaLocale::Ru, |_| false).unwrap()) +} + +/// Checks Russian aliases, case folding, and argument separators against canonical formulas. +#[test] +fn russian_aliases_and_argument_separators() { + for (src, expected) in [ + ("=сумм(A1:A10)", "SUM(A1:A10)"), + ("СРЗНАЧ(A1:A10)", "AVERAGE(A1:A10)"), + ("ЕСЛИ(A1>0;\"Да\";\"Нет\")", "IF(A1>0,\"Да\",\"Нет\")"), + ("СЧЁТ(A1:A10)", "COUNT(A1:A10)"), + ("счет(A1:A10)", "COUNT(A1:A10)"), + ("СУММЕСЛИ(A1:A10;\">0\")", "SUMIF(A1:A10,\">0\")"), + ("СЧЁТЕСЛИ(A1:A10;\">0\")", "COUNTIF(A1:A10,\">0\")"), + ("ВПР(A2;D:E;2;ЛОЖЬ)", "VLOOKUP(A2,D:E,2,FALSE)"), + ("СЕГОДНЯ()", "TODAY()"), + ("ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;A1:A10)", "SUBTOTAL(9,A1:A10)"), + ("=истина", "TRUE"), + ("=ложь", "FALSE"), + ("ИСТИНА()", "TRUE()"), + ("ЛОЖЬ()", "FALSE()"), + ("И(ИСТИНА;ЛОЖЬ)", "AND(TRUE,FALSE)"), + ("СУММ(1;SUM(2;3);СРЗНАЧ(4;6))", "SUM(1,SUM(2,3),AVERAGE(4,6))"), + ("ЕСЛИ(ИСТИНА;;)", "IF(TRUE,,)"), + ("LAMBDA(x;x+1)(2)", "LAMBDA(x,x+1)(2)"), + ] { + assert_eq!(input(src), expected, "{src}"); + } +} + +/// Checks that Russian entry retains sheet, structured-reference, and array semantics. +#[test] +fn russian_input_preserves_reference_and_array_syntax() { + for (src, expected) in [ + ("СУММ({1\\2;3\\4};5)", "SUM({1,2;3,4},5)"), + ("{ИСТИНА\\ЛОЖЬ;TRUE\\FALSE}", "{TRUE,FALSE;TRUE,FALSE}"), + ("СУММ((A1:A3;C1:C3))", "SUM((A1:A3,C1:C3))"), + ("\"СУММ;ЛОЖЬ\"&\"a\"\"b\"", "\"СУММ;ЛОЖЬ\"&\"a\"\"b\""), + ("'СУММ;ЛОЖЬ'!A1+СУММ!B2", "'СУММ;ЛОЖЬ'!A1+СУММ!B2"), + ] { + assert_eq!(input(src), expected, "{src}"); + } + for bad in [r"СУММ({1;2\3})", "{СУММ(A1)}", "{ЛОЖЬ;}"] { + assert!(parse_input(bad, FormulaLocale::Ru, |_| false).is_err(), "{bad}"); + } + assert!(parse("СУММ(1;2)").is_err()); + assert!(parse("{ИСТИНА}").is_err()); +} + +/// Checks workbook names and LET/LAMBDA bindings take precedence over translated aliases. +#[test] +fn russian_input_preserves_defined_and_local_names() { + let known = |name: &str| ["СУММ", "ЛОЖЬ"].iter().any(|n| n.to_lowercase() == name.to_lowercase()); + let expr = parse_input("СУММ(2;3)+ЛОЖЬ+ЕСЛИ(ИСТИНА;4;5)", FormulaLocale::Ru, known).unwrap(); + assert_eq!(print(&expr), "СУММ(2,3)+ЛОЖЬ+IF(TRUE,4,5)"); + for (src, expected) in [ + ("LET(ЛОЖЬ;7;ЛОЖЬ)", "LET(ЛОЖЬ,7,ЛОЖЬ)"), + ("LET(ложь;ЛОЖЬ;ЕСЛИ(ложь;1;2))", "LET(ложь,FALSE,IF(ложь,1,2))"), + ("LET(СУММ;LAMBDA(x;x+1);СУММ(2))", "LET(СУММ,LAMBDA(x,x+1),СУММ(2))"), + ("LAMBDA(ЛОЖЬ;ЛОЖЬ)(7)", "LAMBDA(ЛОЖЬ,ЛОЖЬ)(7)"), + ] { + assert_eq!(input(src), expected, "{src}"); + } +} + +/// Checks the locale supplies decimal, argument, array-row, and array-column separators. +#[test] +fn russian_locale_controls_decimal_list_array_separators_and_display() { + let ru = FormulaLocale::Ru; + let en = FormulaLocale::En; + let expr = parse_input("ЕСЛИ(ИСТИНА;СУММ(1,5;2,25);0)", ru, |_| false).unwrap(); + assert_eq!(print(&expr), "IF(TRUE,SUM(1.5,2.25),0)"); + assert_eq!(print_input(&expr, ru, |_| false).unwrap(), "ЕСЛИ(ИСТИНА;СУММ(1,5;2,25);0)"); + assert_eq!(print_input(&expr, en, |_| false).unwrap(), print(&expr)); + assert!(parse_input("SUM(1;2)", en, |_| false).is_err()); + assert!(parse_input("СУММ(1.5;2)", ru, |_| false).is_err()); + let expr = parse("SUM({1.5,2.25;3,4})+SUM((A1:A3,C1:C3))").unwrap(); + let shown = print_input(&expr, ru, |_| false).unwrap(); + assert_eq!(print(&parse_input(&shown, ru, |_| false).unwrap()), print(&expr)); + let expr = parse("COUNT(A1:A3)+COUNTIF(B1:B3,\">0\")+MAX(1,2)").unwrap(); + let shown = print_input(&expr, ru, |_| false).unwrap(); + assert_eq!(shown, "СЧЁТ(A1:A3)+СЧЁТЕСЛИ(B1:B3;\">0\")+МАКС(1;2)"); + assert_eq!(print(&parse_input(&shown, ru, |_| false).unwrap()), print(&expr)); +} + +/// Checks separators inside quoted text survive localized printing and reparsing. +#[test] +fn russian_display_round_trips_text_containing_separators() { + let ru = FormulaLocale::Ru; + let expr = parse(r#"IF(A1="a,b;c",CONCAT("1.5",",",";"),SUM(0.25,A1:A3 B2))"#).unwrap(); + let shown = print_input(&expr, ru, |_| false).unwrap(); + assert_eq!(shown, r#"ЕСЛИ(A1="a,b;c";СЦЕП("1.5";",";";");СУММ(0,25;A1:A3 B2))"#); + assert_eq!(print(&parse_input(&shown, ru, |_| false).unwrap()), print(&expr)); +} + +/// Checks the public Russian alias mappings do not collide after locale case folding. +#[test] +fn russian_table_has_unique_names() { + let mut seen = std::collections::HashSet::new(); + for name in ["СУММ", "СЧЁТ", "ЕСЛИ", "ВПР", "ЛОЖЬ"] { + assert!(seen.insert(FormulaLocale::Ru.canonical_name(name).to_string()), "{name}"); + } + assert_eq!(FormulaLocale::Ru.function_name("sum"), "СУММ"); + assert_eq!(FormulaLocale::Ru.canonical_name("счёт"), "COUNT"); + assert_eq!(FormulaLocale::Ru.canonical_name("СЧЕТ"), "COUNT"); + assert_eq!(FormulaLocale::Ru.canonical_name("UNKNOWN"), "UNKNOWN"); +} + +/// Checks Unicode LET/LAMBDA names retain their existing case-insensitive identity. +#[test] +fn russian_bound_names_keep_unicode_case_identity() { + assert_eq!(input("LET(ЛОЖЬ;7;ложь)"), "LET(ЛОЖЬ,7,ложь)"); + assert_eq!(input("LAMBDA(СУММ;сумм(2))(LAMBDA(x;x+1))"), "LAMBDA(СУММ,сумм(2))(LAMBDA(x,x+1))"); + assert_eq!(FormulaLocale::Ru.function_name("XLOOKUP"), "ПРОСМОТРX"); + assert_eq!(FormulaLocale::Ru.canonical_name("поискпозx"), "XMATCH"); +} + +/// Checks localized error literals round-trip while canonical file spellings remain accepted. +#[test] +fn russian_errors_parse_print_and_preserve_canonical_file_syntax() { + use gridcraft_core::CellError; + assert_eq!(FormulaLocale::Ru.error_name(CellError::Div0), "#ДЕЛ/0!"); + assert_eq!(FormulaLocale::Ru.error_name(CellError::Value), "#ЗНАЧ!"); + for error in CellError::ALL { + let local = FormulaLocale::Ru.error_name(error); + let expr = parse_input(&format!("IFERROR({local};0)"), FormulaLocale::Ru, |_| false).unwrap(); + assert_eq!(print(&expr), format!("IFERROR({},0)", error.as_str())); + let shown = print_input(&expr, FormulaLocale::Ru, |_| false).unwrap(); + assert_eq!(shown, format!("ЕСЛИОШИБКА({local};0)")); + assert_eq!(print(&parse_input(&shown.to_lowercase(), FormulaLocale::Ru, |_| false).unwrap()), print(&expr)); + if local != error.as_str() { + assert!(parse(local).is_err()); + } + assert_eq!(input(&format!("{{{local}\\{}}}", error.as_str())), format!("{{{},{}}}", error.as_str(), error.as_str())); + } + assert_eq!(input("'СУММ'!#ССЫЛКА!"), print(&parse("'СУММ'!#REF!").unwrap())); + assert_eq!(input("\"#ССЫЛКА!\""), "\"#ССЫЛКА!\""); +} + +/// Checks long flat formulas remain valid without consuming recursive nesting depth. +#[test] +fn russian_locale_keeps_flat_chains_iterative() { + let source = std::iter::repeat_n("СУММ(1)", 400).collect::>().join("+"); + let parsed = parse_input(&source, FormulaLocale::Ru, |_| false).unwrap(); + assert_eq!(print_input(&parsed, FormulaLocale::Ru, |_| false).unwrap(), source); +} diff --git a/crates/formula/tests/it/spanish_input.rs b/crates/formula/tests/it/spanish_input.rs index d8a9def356..cae8b6642c 100644 --- a/crates/formula/tests/it/spanish_input.rs +++ b/crates/formula/tests/it/spanish_input.rs @@ -40,10 +40,13 @@ fn spanish_input_preserves_reference_and_array_syntax() { ("SUM((A1:A3;C1:C3))", "SUM((A1:A3,C1:C3))"), ("\"SUMA;FALSO\"&\"a\"\"b\"", "\"SUMA;FALSO\"&\"a\"\"b\""), ("'SUMA;FALSO'!A1+SUMA!B2+SUMA!FALSO", "'SUMA;FALSO'!A1+SUMA!B2+SUMA!FALSO"), - ("SUMA[CONTAR.SI]+FALSO[SI]+CONTAR", "SUMA[CONTAR.SI]+FALSO[SI]+CONTAR"), + ("SUMA[CONTAR.SI]+FALSO[SI]+CONTAR", "SUMA[CONTAR.SI]+FALSO[SI]+COUNT"), ] { assert_eq!(input(src), expected, "{src}"); } + // An unbound function alias normalizes as a callback, but an actual workbook name wins. + let named = parse_input("SUMA[CONTAR.SI]+FALSO[SI]+CONTAR", FormulaLocale::Es, |name| gridcraft_formula::same_name(name, "CONTAR")).unwrap(); + assert_eq!(print(&named), "SUMA[CONTAR.SI]+FALSO[SI]+CONTAR"); for bad in [r"SUMA({1;2\3})", "{SUMA(A1)}", "{FALSO;}"] { assert!(parse_input(bad, FormulaLocale::Es, |_| false).is_err(), "{bad}"); } diff --git a/crates/functions/src/engineering.rs b/crates/functions/src/engineering.rs index a163d8fda6..370b5c1b0f 100644 --- a/crates/functions/src/engineering.rs +++ b/crates/functions/src/engineering.rs @@ -601,7 +601,17 @@ mod tests { ("-5+12i", "2+3i"), ("1E10+1E10i", "109868.411346781+45508.9860562227i"), ] { - is_text(ev("IMSQRT", vec![t(input)]), want); + let actual = ev("IMSQRT", vec![t(input)]); + // Windows and Unix libm round sin(pi/4) to adjacent f64 values. Both stringify to + // neighboring 15-digit Excel-compatible results; all other corpus entries stay exact. + if input == "i" { + assert!( + actual == Value::from(want) || actual == Value::from("0.707106781186548+0.707106781186548i"), + "got {actual:?}, expected {want}" + ); + } else { + is_text(actual, want); + } } is_text(ev("IMSQRT", vec![t("4")]), "2"); is_text(ev("IMSQRT", vec![t("-2i")]), "1-i"); diff --git a/crates/functions/src/stat.rs b/crates/functions/src/stat.rs index 790915c953..c2da3e2785 100644 --- a/crates/functions/src/stat.rs +++ b/crates/functions/src/stat.rs @@ -522,8 +522,8 @@ pub(crate) fn specs() -> Vec { f_inv_rt ), f!("FINV", 3, 3, Compatibility, S, "FINV(probability, deg_freedom1, deg_freedom2)", "Inverse of the right-tailed F distribution.", f_inv_rt), - f!("F.TEST", 2, 2, Statistical, A, "F.TEST(array1, array2)", "Two-tailed probability that two variances do not differ.", f_test), - f!("FTEST", 2, 2, Compatibility, A, "FTEST(array1, array2)", "Two-tailed probability that two variances do not differ.", f_test), + f!("F.TEST", 2, 2, Statistical, A, "F.TEST(array1, array2)", "Two-tailed p-value of an F-test for equality of variances.", f_test), + f!("FTEST", 2, 2, Compatibility, A, "FTEST(array1, array2)", "Two-tailed p-value of an F-test for equality of variances.", f_test), f!("BINOM.DIST", 4, 4, Statistical, S, "BINOM.DIST(number_s, trials, probability_s, cumulative)", "Binomial probability.", binom_dist), f!("BINOMDIST", 4, 4, Compatibility, S, "BINOMDIST(number_s, trials, probability_s, cumulative)", "Binomial probability.", binom_dist), f!( diff --git a/crates/model/src/workbook.rs b/crates/model/src/workbook.rs index ab401828da..0483d8d8f9 100644 --- a/crates/model/src/workbook.rs +++ b/crates/model/src/workbook.rs @@ -381,7 +381,7 @@ impl Workbook { self.sheets.get_mut(i).map(Arc::make_mut) } pub fn sheet_index(&self, name: &str) -> Option { - self.sheets.iter().position(|s| s.name.eq_ignore_ascii_case(name)) + self.sheets.iter().position(|s| s.name == name).or_else(|| self.sheets.iter().position(|s| gridcraft_formula::same_name(&s.name, name))) } /// The index of the sheet the workbook's window shows (the file's active tab). pub fn active_sheet(&self) -> usize { @@ -397,7 +397,12 @@ impl Workbook { } /// A fresh sheet name `SheetN` not in use. pub fn next_sheet_name(&self) -> String { - (1..).map(|n| format!("Sheet{n}")).find(|n| self.sheet_index(n).is_none()).unwrap_or_else(|| "Sheet".into()) + self.next_sheet_name_with_prefix("Sheet") + } + + /// Finds the first unused numbered name for a generated sheet in the requested language. + pub fn next_sheet_name_with_prefix(&self, prefix: &str) -> String { + (1..).map(|n| format!("{prefix}{n}")).find(|n| self.sheet_index(n).is_none()).unwrap_or_else(|| prefix.into()) } /// Validates a sheet name like Excel: 1–31 chars, none of `: \ / ? * [ ]`, not starting or /// ending with `'`, unique (case-insensitive) unless it is `except`'s own name. @@ -676,4 +681,30 @@ mod tests { assert!(!many.contains(&0) && !many.contains(&(u32::MAX - 1)) && !many.contains(&u32::MAX)); assert_eq!(wb.free_object_ids(0), Vec::::new()); } + /// Unicode case variants resolve to the same sheet and cannot produce duplicate generated names. + #[test] + fn sheet_names_compare_case_insensitively_beyond_ascii() { + let mut wb = Workbook::new(); + let index = wb.sheets.len(); + wb.sheets.push(Arc::new(Sheet::new("лист1"))); + assert_eq!(wb.sheet_index("ЛИСТ1"), Some(index)); + assert_eq!(wb.next_sheet_name_with_prefix("Лист"), "Лист2"); + assert!(wb.check_sheet_name("Лист1", None).is_err()); + assert!(wb.check_sheet_name("ЛИСТ1", Some(index)).is_ok()); + } + + #[test] + fn existing_unicode_case_variant_sheet_names_keep_their_identity() { + let mut wb = Workbook::new(); + let lower = wb.sheets.len(); + wb.sheets.push(Arc::new(Sheet::new("лист1"))); + let upper = wb.sheets.len(); + wb.sheets.push(Arc::new(Sheet::new("ЛИСТ1"))); + + assert_eq!(wb.sheet_index("лист1"), Some(lower)); + assert_eq!(wb.sheet_index("ЛИСТ1"), Some(upper)); + assert_eq!(wb.sheet_index("ЛиСт1"), Some(lower)); + assert!(wb.check_sheet_name("лист1", Some(lower)).is_ok()); + assert!(wb.check_sheet_name("ЛиСт1", Some(upper)).is_err()); + } } diff --git a/crates/numfmt/src/decimal.rs b/crates/numfmt/src/decimal.rs index 80fb23e320..a51d0e629d 100644 --- a/crates/numfmt/src/decimal.rs +++ b/crates/numfmt/src/decimal.rs @@ -6,6 +6,8 @@ use std::fmt::Write as _; +use gridcraft_core::region::{EN_US, Region}; + /// Most decimals we ever compute; placeholders beyond this are padded with zeros. pub(crate) const MAX_DECIMALS: usize = 400; @@ -219,7 +221,7 @@ pub(crate) fn fixed(a: f64, decimals: usize) -> (String, String) { /// General format squeezed into `max_chars` characters. Excel shows fewer decimals, then /// scientific notation, then "####" when a column is narrow; `None` means the caller paints "####". -pub fn format_general_fit(n: f64, max_chars: usize) -> Option { +pub fn format_general_fit_with_region(n: f64, max_chars: usize, region: &Region) -> Option { // The widest fixed rendering of a double is about 330 characters; a larger request only // pads zero decimals the trim below throws away. let max_chars = max_chars.min(1024); @@ -249,7 +251,7 @@ pub fn format_general_fit(n: f64, max_chars: usize) -> Option { s.push_str(sign); s.push_str(if i.is_empty() { "0" } else { &i }); if !ft.is_empty() { - s.push('.'); + s.push(region.decimal); s.push_str(ft); } if s.chars().count() <= max_chars { @@ -273,7 +275,7 @@ pub fn format_general_fit(n: f64, max_chars: usize) -> Option { s.push_str(sign); s.push_str(if i.is_empty() { "0" } else { &i }); if !ft.is_empty() { - s.push('.'); + s.push(region.decimal); s.push_str(ft); } let _ = write!(s, "E{}{:02}", if e < 0 { '-' } else { '+' }, e.unsigned_abs()); @@ -284,10 +286,18 @@ pub fn format_general_fit(n: f64, max_chars: usize) -> Option { None } +pub fn format_general_fit(n: f64, max_chars: usize) -> Option { + format_general_fit_with_region(n, max_chars, &EN_US) +} + #[cfg(test)] mod tests { use super::*; + fn format_general_fit(n: f64, max_chars: usize) -> Option { + super::format_general_fit(n, max_chars) + } + #[test] fn rounding() { assert_eq!(fixed(2.675, 2), ("2".into(), "68".into())); @@ -329,4 +339,13 @@ mod tests { assert_eq!(format_general_fit(f64::NAN, 11), None); assert_eq!(format_general_fit(1.7976931348623157e308, 11).as_deref(), Some("1.7977E+308")); } + + #[test] + fn general_fit_uses_the_locale_decimal_separator() { + let german = gridcraft_core::region::lookup("de-DE"); + assert_eq!(super::format_general_fit_with_region(1234.5, 11, german).as_deref(), Some("1234,5")); + assert_eq!(super::format_general_fit_with_region(1.5, usize::MAX, german).as_deref(), Some("1,5")); + assert_eq!(super::format_general_fit_with_region(123456.789012, 11, german).as_deref(), Some("123456,789")); + assert_eq!(super::format_general_fit_with_region(123456789012.0, 11, german).as_deref(), Some("1,23457E+11")); + } } diff --git a/crates/numfmt/src/lib.rs b/crates/numfmt/src/lib.rs index 524ff5d478..02e5a5c6e4 100644 --- a/crates/numfmt/src/lib.rs +++ b/crates/numfmt/src/lib.rs @@ -1,5 +1,7 @@ //! GridCraft number formats: Excel format codes (`#,##0.00;[Red](#,##0.00)`, dates, fractions, -//! scientific…), the General display format and the `TEXT()` worksheet function. en-US only. +//! scientific…), the General display format and the `TEXT()` worksheet function. Format codes +//! use invariant Excel text; explicit display locales control decimal/group separators and date +//! names for German and English rendering. #![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)] #![forbid(unsafe_code)] @@ -10,9 +12,15 @@ mod render; use std::sync::Arc; +use gridcraft_core::region::{EN_US, Region}; use gridcraft_core::{CellError, DateSystem, Value}; -pub use decimal::format_general_fit; +pub use decimal::format_general_fit_with_region; + +/// Fits an invariant General number into the available character width. +pub fn format_general_fit(n: f64, max_chars: usize) -> Option { + decimal::format_general_fit(n, max_chars) +} use parse::{DatePart, SecKind, Section, Tok}; use render::Out; @@ -293,9 +301,9 @@ impl NumberFormat { } /// Formats a number. The flag is true when the value cannot be shown (date out of range). - fn format_number(&self, n: f64, sys: DateSystem) -> (Formatted, bool) { + fn format_number(&self, n: f64, sys: DateSystem, region: &Region) -> (Formatted, bool) { let general = |n: f64| Formatted { - text: format_general_fit(n, GENERAL_WIDTH).unwrap_or_else(|| OVERFLOW.into()), + text: format_general_fit_with_region(n, GENERAL_WIDTH, region).unwrap_or_else(|| OVERFLOW.into()), color: None, fill: None, numeric: true, @@ -306,19 +314,19 @@ impl NumberFormat { let Some((sec, drop_sign)) = self.select(n) else { return (general(n), false) }; let minus = n < 0.0 && !drop_sign; let out: Option = match sec.kind { - SecKind::Text => Some(render::render_text(sec, &format_general_fit(n, GENERAL_WIDTH).unwrap_or_default())), + SecKind::Text => Some(render::render_text(sec, &format_general_fit_with_region(n, GENERAL_WIDTH, region).unwrap_or_default())), SecKind::General => { let width = if minus { GENERAL_WIDTH - 1 } else { GENERAL_WIDTH }; - Some(render::render_general(sec, n.abs(), width)) + Some(render::render_general(sec, n.abs(), width, region)) } SecKind::Date => { if minus { None } else { - render::render_date(sec, n.abs(), sys) + render::render_date(sec, n.abs(), sys, region) } } - SecKind::Number => Some(render::render_number(sec, n.abs())), + SecKind::Number => Some(render::render_number(sec, n.abs(), region)), }; let Some(mut out) = out else { return (Formatted { text: OVERFLOW.into(), color: sec.color, fill: None, numeric: true }, true); @@ -405,16 +413,21 @@ impl NumberFormat { /// Formats a cell value for display. pub fn format_value(v: &Value, fmt: &NumberFormat, sys: DateSystem) -> Formatted { + format_value_with_region(v, fmt, sys, &EN_US) +} + +/// Formats a cell value using the workbook's regional conventions. Format codes remain invariant. +pub fn format_value_with_region(v: &Value, fmt: &NumberFormat, sys: DateSystem, region: &Region) -> Formatted { match v { Value::Empty => Formatted::default(), Value::Number(n) if !n.is_finite() => Formatted { text: CellError::Num.as_str().into(), ..Formatted::default() }, - Value::Number(n) => fmt.format_number(*n, sys).0, + Value::Number(n) => fmt.format_number(*n, sys, region).0, Value::Text(t) => fmt.format_text(t), Value::Bool(b) => Formatted { text: if *b { "TRUE" } else { "FALSE" }.into(), ..Formatted::default() }, Value::Error(e) => Formatted { text: e.as_str().into(), ..Formatted::default() }, Value::Array(a) => match a.data.first() { Some(Value::Array(_)) | None => Formatted::default(), - Some(first) => format_value(first, fmt, sys), + Some(first) => format_value_with_region(first, fmt, sys, region), }, } } @@ -525,7 +538,7 @@ pub fn text_function(v: &Value, code: &str, sys: DateSystem) -> Result, /// Excel rejects the whole code because of this section: a `B` and digit that is not a /// calendar prefix, or a prefix before a number format (`B20.00`). pub invalid: bool, @@ -279,6 +280,7 @@ struct Raw { cond: Option, currency: bool, calendar: Calendar, + date_lcid: Option, /// The section's calendar prefix as written, `'1'` or `'2'` (whether or not a locale tag /// cancels it). prefix: Option, @@ -305,7 +307,16 @@ fn after_leading_brackets(cs: &[char]) -> (usize, bool) { fn tokenize(src: &str) -> Raw { let cs: Vec = src.chars().collect(); - let mut raw = Raw { toks: Vec::new(), color: None, cond: None, currency: false, calendar: Calendar::Gregorian, prefix: None, invalid: false }; + let mut raw = Raw { + toks: Vec::new(), + color: None, + cond: None, + currency: false, + calendar: Calendar::Gregorian, + date_lcid: None, + prefix: None, + invalid: false, + }; let toks = &mut raw.toks; // With no `]` at or after a `[`, that `[` is a literal; checking this once keeps the scan linear. let last_close = cs.iter().rposition(|&c| c == ']'); @@ -378,6 +389,10 @@ fn tokenize(src: &str) -> Raw { let close = if last_close.is_some_and(|l| l > i) { cs.get(i + 1..).and_then(|r| r.iter().position(|&d| d == ']')) } else { None }; if let Some(p) = close { let content: String = cs.get(i + 1..i + 1 + p).unwrap_or(&[]).iter().collect(); + if let Some((_, tag)) = content.strip_prefix('$').and_then(|s| s.split_once('-')) { + raw.date_lcid = + u32::from_str_radix(tag, 16).ok().map(|id| id as u16).or_else(|| gridcraft_core::region::find(tag).map(|r| r.lcid)); + } bracket(&mut raw_parts(toks, &mut raw.color, &mut raw.cond, &mut raw.currency), &content); i += p + 2; } else { @@ -515,7 +530,7 @@ fn date_part(t: &Tok) -> Option { } fn analyze(raw: Raw) -> Section { - let Raw { toks, color, cond, currency, calendar, prefix, invalid } = raw; + let Raw { toks, color, cond, currency, calendar, date_lcid, prefix, invalid } = raw; let is_date = toks.iter().any(|t| matches!(t, Tok::Date(_))); let has_general = toks.iter().any(|t| matches!(t, Tok::General)); let mut sec = Section { @@ -536,6 +551,7 @@ fn analyze(raw: Raw) -> Section { needs_date: false, ampm: false, calendar, + date_lcid, invalid, }; if is_date { diff --git a/crates/numfmt/src/render.rs b/crates/numfmt/src/render.rs index e086ecaa20..5bce79ccf0 100644 --- a/crates/numfmt/src/render.rs +++ b/crates/numfmt/src/render.rs @@ -1,12 +1,14 @@ //! Rendering a value with a parsed section. +use std::borrow::Cow; use std::fmt::Write as _; use gridcraft_core::DateSystem; use gridcraft_core::date::{datetime_from_serial, max_serial}; +use gridcraft_core::region::{Grouping, Region}; use crate::calendar::Calendar; -use crate::decimal::{decimal_digits, fixed, fixed_from_digits, format_general_fit}; +use crate::decimal::{decimal_digits, fixed, fixed_from_digits, format_general_fit_with_region}; use crate::parse::{DatePart, Section, Tok}; /// Text being built plus the first repeat-fill position. @@ -82,11 +84,11 @@ pub(crate) fn render_text_within(sec: &Section, text: &str, max_units: usize) -> } /// Renders a number through a General section (literals around the General keyword). -pub(crate) fn render_general(sec: &Section, v: f64, width: usize) -> Out { +pub(crate) fn render_general(sec: &Section, v: f64, width: usize, region: &Region) -> Out { let mut out = Out::default(); for t in &sec.toks { match t { - Tok::General => out.push(&format_general_fit(v, width).unwrap_or_else(|| "#".repeat(width.clamp(1, 11)))), + Tok::General => out.push(&format_general_fit_with_region(v, width, region).unwrap_or_else(|| "#".repeat(width.clamp(1, 11)))), Tok::Fill(c) => out.fill(*c), other => out.push_tok(other), } @@ -95,10 +97,11 @@ pub(crate) fn render_general(sec: &Section, v: f64, width: usize) -> Out { } /// Renders a date/time. `None` when the serial is outside the supported range. -pub(crate) fn render_date(sec: &Section, v: f64, sys: DateSystem) -> Option { +pub(crate) fn render_date(sec: &Section, v: f64, sys: DateSystem, region: &Region) -> Option { if !v.is_finite() || !(0.0..max_serial(sys) as f64 + 1.0).contains(&v) { return None; } + let date_region = sec.date_lcid.and_then(|id| gridcraft_core::region::all().iter().copied().find(|r| r.lcid == id)).unwrap_or(region); let unit: i64 = 10i64.pow(3 - u32::from(sec.sub_digits.min(3))); let mut day = v.floor() as i64; let mut ms = (((v - v.floor()) * 86_400_000.0) / unit as f64).round() as i64 * unit; @@ -124,6 +127,21 @@ pub(crate) fn render_date(sec: &Section, v: f64, sys: DateSystem) -> Option let milli = ms % 1000; // No date in the section's calendar (serial 60 under `B2`): shown like an out-of-range date. let date = sec.calendar.date(&dt)?; + let (month_name, month_name_short, day_name, day_name_short): (Cow<'_, str>, Cow<'_, str>, Cow<'_, str>, Cow<'_, str>) = match sec.calendar { + Calendar::Gregorian => { + let month_index = usize::try_from(date.month.saturating_sub(1)).unwrap_or(usize::MAX); + let weekday_index = usize::try_from(dt.weekday).unwrap_or(usize::MAX); + let has_day = sec.toks.iter().any(|t| matches!(t, Tok::Date(DatePart::Day(1 | 2)))); + let month_names = if has_day { date_region.months_genitive.as_ref().unwrap_or(&date_region.months) } else { &date_region.months }; + ( + month_names.get(month_index).copied().unwrap_or("").into(), + date_region.months_abbr.get(month_index).copied().unwrap_or("").into(), + date_region.weekdays.get(weekday_index).copied().unwrap_or("").into(), + date_region.weekdays_abbr.get(weekday_index).copied().unwrap_or("").into(), + ) + } + Calendar::Hijri => (date.month_name.into(), date.month_short.into(), date.day_name.into(), date.day_short.into()), + }; let mut out = Out::default(); for t in &sec.toks { match t { @@ -135,14 +153,14 @@ pub(crate) fn render_date(sec: &Section, v: f64, sys: DateSystem) -> Option } DatePart::Month(n) => match n { 1 | 2 => push_padded(text, date.month as i64, n), - 3 => text.push_str(date.month_short), - 5 => text.extend(date.month_name.chars().take(1)), - _ => text.push_str(date.month_name), + 3 => text.push_str(&month_name_short), + 5 => text.extend(month_name.chars().take(1)), + _ => text.push_str(&month_name), }, DatePart::Day(n) => match n { 1 | 2 => push_padded(text, date.day as i64, n), - 3 => text.push_str(date.day_short), - _ => text.push_str(date.day_name), + 3 => text.push_str(&day_name_short), + _ => text.push_str(&day_name), }, DatePart::Hour(n) => { let h = if ampm { @@ -158,7 +176,7 @@ pub(crate) fn render_date(sec: &Section, v: f64, sys: DateSystem) -> Option DatePart::SubSec(n) => { // `.` and the first `n` (at most 3) of the three millisecond digits, then // zeros for the digits beyond milliseconds. - text.push('.'); + text.push(region.decimal); for (k, div) in [100, 10, 1].into_iter().enumerate() { if k < n as usize { text.push(char::from(b'0' + (milli / div % 10) as u8)); @@ -171,7 +189,7 @@ pub(crate) fn render_date(sec: &Section, v: f64, sys: DateSystem) -> Option DatePart::ElapsedH(n) => push_padded(text, total_ms / 3_600_000, n), DatePart::ElapsedM(n) => push_padded(text, total_ms / 60_000, n), DatePart::ElapsedS(n) => push_padded(text, total_ms / 1000, n), - DatePart::AmPm => text.push_str(if hour >= 12 { "PM" } else { "AM" }), + DatePart::AmPm => text.push_str(date_region.am_pm[usize::from(hour >= 12)]), DatePart::AP(a, p) => text.push(if hour >= 12 { p } else { a }), } } @@ -260,12 +278,12 @@ impl Parts { /// `digits` is ASCII (digit strings made by this crate), so bytes are characters. Each /// placeholder's text is written left to right: a digit, then the separator that follows it when /// its position counted from the right is a multiple of 3. -fn fill_int(toks: &[Tok], idxs: &[usize], digits: &str, thousands: bool, force_zero: bool, parts: &mut Parts) { +fn fill_int(toks: &[Tok], idxs: &[usize], digits: &str, thousands: bool, force_zero: bool, parts: &mut Parts, region: &Region) { let ds = digits.as_bytes(); let mut rem = ds.len(); let mut pos = 0usize; let count = idxs.len(); - let sep = |p: usize| thousands && p > 0 && p.is_multiple_of(3); + let sep = |p: usize| thousands && separator_after(p, region.grouping); for (k, &ti) in idxs.iter().rev().enumerate() { let leftmost = k + 1 == count; let ph = match toks.get(ti) { @@ -279,14 +297,14 @@ fn fill_int(toks: &[Tok], idxs: &[usize], digits: &str, thousands: bool, force_z '0' => { parts.buf.push('0'); if sep(pos) { - parts.buf.push(','); + parts.buf.push(region.group); } pos += 1; } _ if force_zero && k == 0 => { parts.buf.push('0'); if sep(pos) { - parts.buf.push(','); + parts.buf.push(region.group); } pos += 1; } @@ -306,7 +324,7 @@ fn fill_int(toks: &[Tok], idxs: &[usize], digits: &str, thousands: bool, force_z let d = ds.get(rem.saturating_sub(1 + s)).copied().unwrap_or(b'0'); parts.buf.push(char::from(d)); if sep(pos + s) { - parts.buf.push(','); + parts.buf.push(region.group); } } rem -= take; @@ -316,21 +334,28 @@ fn fill_int(toks: &[Tok], idxs: &[usize], digits: &str, thousands: bool, force_z } } -fn with_commas(digits: &str, thousands: bool) -> String { +fn with_commas(digits: &str, thousands: bool, region: &Region) -> String { if !thousands { return digits.to_string(); } let n = digits.chars().count(); let mut s = String::with_capacity(n + n / 3); for (i, c) in digits.chars().enumerate() { - if i > 0 && (n - i).is_multiple_of(3) { - s.push(','); + if i > 0 && separator_after(n - i, region.grouping) { + s.push(region.group); } s.push(c); } s } +fn separator_after(digits_to_right: usize, grouping: Grouping) -> bool { + match grouping { + Grouping::Thousands => digits_to_right > 0 && digits_to_right.is_multiple_of(3), + Grouping::Indian => digits_to_right == 3 || digits_to_right > 3 && (digits_to_right - 3).is_multiple_of(2), + } +} + /// Fraction-digit placeholders: trailing zeros show as `0`, nothing (`#`) or a space (`?`). /// `frac` is ASCII digits. fn fill_frac(toks: &[Tok], idxs: &[usize], frac: &str, parts: &mut Parts) { @@ -459,7 +484,7 @@ pub(crate) fn shown_value(sec: &Section, v: f64) -> Option { } /// Renders a non-negative number through a number section. -pub(crate) fn render_number(sec: &Section, v: f64) -> Out { +pub(crate) fn render_number(sec: &Section, v: f64, region: &Region) -> Out { let mut x = scaled(sec, v.abs()); if !x.is_finite() { x = f64::MAX; @@ -471,7 +496,7 @@ pub(crate) fn render_number(sec: &Section, v: f64) -> Out { let mut parts = Parts::new(n); let mut zero = false; if sec.fraction { - render_fraction(sec, x, &mut parts); + render_fraction(sec, x, &mut parts, region); } else { let NumberLayout { point, exp, int_idx, frac_idx } = number_layout(toks); let (int_s, frac_s) = if let Some(e_at) = exp { @@ -499,7 +524,7 @@ pub(crate) fn render_number(sec: &Section, v: f64) -> Out { Some(&first) => { parts.set_piece(e_at, if upper { "E" } else { "e" }); parts.set_before(first, sign); - fill_int(toks, &exp_idx, &digits, false, false, &mut parts); + fill_int(toks, &exp_idx, &digits, false, false, &mut parts, region); } None => { let start = parts.mark(); @@ -514,16 +539,16 @@ pub(crate) fn render_number(sec: &Section, v: f64) -> Out { fixed(x, frac_idx.len()) }; zero = int_s.chars().chain(frac_s.chars()).all(|c| c == '0'); - fill_int(toks, &int_idx, &int_s, sec.thousands, false, &mut parts); + fill_int(toks, &int_idx, &int_s, sec.thousands, false, &mut parts, region); if int_idx.is_empty() && !int_s.is_empty() && let Some(p) = point.or(exp) { - parts.set_before(p, &with_commas(&int_s, sec.thousands)); + parts.set_before(p, &with_commas(&int_s, sec.thousands, region)); } fill_frac(toks, &frac_idx, &frac_s, &mut parts); if let Some(p) = point { - parts.set_piece(p, "."); + parts.set_piece(p, ®ion.decimal.to_string()); } } let mut out = Out::default(); @@ -686,7 +711,7 @@ fn fraction_parts(lay: &FractionLayout, x: f64) -> (f64, f64, u64) { /// becomes spaces when the whole part or the numerator has a `?`); when the fraction is zero and /// the numerator has no `0` placeholder, the separator, numerator, bar and denominator disappear /// (or become spaces when any part has a `?`) and the whole part shows at least `0`. -fn render_fraction(sec: &Section, x: f64, parts: &mut Parts) { +fn render_fraction(sec: &Section, x: f64, parts: &mut Parts, region: &Region) { let toks = &sec.toks; let Some(lay) = fraction_layout(toks) else { return }; let (whole, num, den) = fraction_parts(&lay, x); @@ -696,7 +721,7 @@ fn render_fraction(sec: &Section, x: f64, parts: &mut Parts) { let whole_s = if whole >= 1.0 { fixed(whole, 0).0 } else { String::new() }; let num_zero_ph = num_idx.iter().any(|&i| toks.get(i) == Some(&Tok::Digit('0'))); if has_whole && num == 0.0 && !num_zero_ph { - fill_int(toks, &whole_idx, &whole_s, sec.thousands, true, parts); + fill_int(toks, &whole_idx, &whole_s, sec.thousands, true, parts, region); let spaces = has_q(&whole_idx) || has_q(&num_idx) || has_q(&den_idx); blank_range(toks, sep_start..den_end, spaces, parts); return; @@ -705,7 +730,7 @@ fn render_fraction(sec: &Section, x: f64, parts: &mut Parts) { // A zero value shows `0` in a `?` or `0` units place, nothing in a `#` one. let units_hash = whole_idx.last().is_some_and(|&i| toks.get(i) == Some(&Tok::Digit('#'))); let force = whole_s.is_empty() && num == 0.0 && !units_hash; - fill_int(toks, &whole_idx, &whole_s, sec.thousands, force, parts); + fill_int(toks, &whole_idx, &whole_s, sec.thousands, force, parts, region); let whole_shown = whole_idx.iter().any(|&i| parts.piece(i).chars().any(|c| c.is_ascii_digit())); if !whole_shown { let spaces = has_q(&whole_idx) || has_q(&num_idx); @@ -713,7 +738,7 @@ fn render_fraction(sec: &Section, x: f64, parts: &mut Parts) { } } let num_s = if num < 1e15 { (num as u64).to_string() } else { fixed(num, 0).0 }; - fill_int(toks, &num_idx, &num_s, false, true, parts); + fill_int(toks, &num_idx, &num_s, false, true, parts, region); parts.set_piece(slash, "/"); let den_s = den.to_string(); if fixed_den.is_some() { diff --git a/crates/numfmt/src/tests.rs b/crates/numfmt/src/tests.rs index 7bbfaf66f1..07e9ed158d 100644 --- a/crates/numfmt/src/tests.rs +++ b/crates/numfmt/src/tests.rs @@ -668,7 +668,7 @@ fn text_uncached(v: &Value, code: &str, sys: DateSystem) -> Result Result { let r = self.run_command(id, params); // This copy leaves the system clipboard alone: note what it holds, so Paste can tell @@ -16,6 +16,7 @@ impl SheetApp { r } + /// Settles affected drafts and dispatches engine or interface commands with the supplied parameters. pub(super) fn run_command(&mut self, id: &str, params: Json) -> Result { let switches_window = id.starts_with("window.") || matches!(id, "view.newWindow" | "view.hideWindow" | "view.unhideWindow") @@ -114,6 +115,24 @@ impl SheetApp { r } + /// Supplies localized generated-name defaults only for a command invoked by the interface. + pub(crate) fn run_from_ui(&mut self, id: &str, mut params: Json) -> Result { + if matches!(id, "insert.table" | "home.formatAsTable") + && let Some(object) = params.as_object_mut() + { + object.entry("columnPrefix").or_insert_with(|| json!(self.ui.language.tr("Generated|Column"))); + } + if let Some(object) = params.as_object_mut() { + if id == "file.new" { + object.entry("bookPrefix").or_insert_with(|| json!(self.ui.language.tr("Book"))); + object.entry("sheetPrefix").or_insert_with(|| json!(self.ui.language.tr("Sheet"))); + } else if id == "home.insertSheet" { + object.entry("namePrefix").or_insert_with(|| json!(self.ui.language.tr("Sheet"))); + } + } + self.run(id, params) + } + pub fn run_or_alert(&mut self, id: &str, params: Json) { // A menu/shortcut opens the settings first; the Print page's button submits explicitly. if id == "file.print" { @@ -141,7 +160,7 @@ impl SheetApp { self.open_switch_windows = true; return; } - match self.run(id, params) { + match self.run_from_ui(id, params) { // A refused cell draft already shows its own message (with the rule's title). Err(e) if self.message.as_ref().is_some_and(|(_, m)| *m == e) => {} Err(e) => self.alert(e), diff --git a/crates/ui-egui/src/app/editing.rs b/crates/ui-egui/src/app/editing.rs index 078f840c0a..1dc68364d8 100644 --- a/crates/ui-egui/src/app/editing.rs +++ b/crates/ui-egui/src/app/editing.rs @@ -6,6 +6,14 @@ pub(crate) const DRAFT_SHEET_GONE: &str = "The sheet of the cell being edited wa /// Why a draft of Python code that sheet protection hid while it was open is dropped. pub(crate) const DRAFT_CODE_HIDDEN: &str = "Sheet protection now hides the code of the cell being edited, so the entry was discarded."; +/// Checks every destination of an unchanged text fill before the command writes any cell. +/// A Stop rule takes precedence over warnings, which remain advisory. +fn validate_literal_fill(doc: &gridcraft_engine::DocState, sheet: usize, text: &str) -> Option<(gridcraft_engine::model::Validation, String)> { + let default_selection = gridcraft_engine::Selection::default(); + let selection = if doc.wb.active_sheet() == sheet { &doc.selection } else { doc.sheet_selections.get(sheet).unwrap_or(&default_selection) }; + gridcraft_engine::cmd::data::check_literal_fill_validation(&doc.wb, sheet, &selection.ranges, text) +} + impl SheetApp { /// Starts editing the active cell. `text` replaces the content (typing) or pre-fills it. pub fn begin_edit(&mut self, text: Option, from_formula_bar: bool) { @@ -61,7 +69,7 @@ impl SheetApp { } else { match sh.cell(at) { Some(c) if c.formula.is_some() => formula_locale::display(&c.input_text(), locale, &d.wb, d.wb.active_sheet()), - _ => gridcraft_engine::display::edit_text(&d.wb, sh, at), + _ => formula_locale::edit_text(&d.wb, sh, at, locale), } }; let (text, replace) = match text { @@ -71,6 +79,12 @@ impl SheetApp { let mut ed = editor::EditState::new(d.uid, d.wb.active_sheet(), at, text, replace, from_formula_bar).on_sheet(&d.wb); ed.window = self.session.active_window(); ed.locale = locale; + if !replace + && let Some(cell) = sh.cell(at).filter(|cell| cell.formula.is_none()) + && let gridcraft_engine::core::Value::Text(value) = &cell.value + { + ed.original_literal = Some(value.clone()); + } if replace && self.ui.autocomplete && !ed.is_formula() { ed.completion = editor::column_completion(sh, at, &ed.text); } @@ -122,6 +136,7 @@ impl SheetApp { self.commit_text_box_edit() } + /// Commits the current localized editor draft, preserving typed literals and applying the requested selection movement. fn commit_edit_here(&mut self, dr: i64, dc: i64, array: bool, fill_selection: bool) -> bool { // Python code goes in through `python.set`, whichever way the edit is committed (the // formula bar's Enter button, a click on the sheet). @@ -156,7 +171,18 @@ impl SheetApp { self.message = Some(("GridCraft".into(), m)); return true; } - let text = match self.session.active().map(|d| formula_locale::canonical(&text, ed.locale, &d.wb, ed.sheet, ed.cell)) { + // Ctrl+Enter and Ctrl+Shift+Enter preserve an unchanged text value, not a fresh typed entry. + // Pass the type to the engine instead of adding a quote to the visible draft. + let literal = if (fill_selection || array) && ed.original.as_ref() == Some(&text) { + ed.original_literal.as_ref().map(ToString::to_string) + } else { + None + }; + let text = match literal + .clone() + .map(Ok) + .or_else(|| self.session.active().map(|d| formula_locale::canonical(&text, ed.locale, &d.wb, ed.sheet, ed.cell))) + { Some(Ok(text)) => text, Some(Err(error)) => { self.message = Some(("GridCraft".into(), error.to_string())); @@ -168,7 +194,25 @@ impl SheetApp { }; // Data validation. if let Some(d) = self.session.active() - && let Some((dv, msg)) = gridcraft_engine::cmd::data::check_validation(&d.wb, ed.sheet, ed.cell, &text) + && let Some((dv, msg)) = if literal.is_some() { + if fill_selection { + validate_literal_fill(d, ed.sheet, &text) + } else { + let selected = d.selection.current(); + if array { + let range = if ed.sheet == d.wb.active_sheet() && selected.contains(ed.cell) { + selected + } else { + gridcraft_engine::core::RangeRef::cell(ed.cell) + }; + gridcraft_engine::cmd::data::check_literal_array_validation(&d.wb, ed.sheet, range, &text) + } else { + gridcraft_engine::cmd::data::check_literal_validation(&d.wb, ed.sheet, ed.cell, &text) + } + } + } else { + gridcraft_engine::cmd::data::check_validation(&d.wb, ed.sheet, ed.cell, &text) + } { if dv.error_style == gridcraft_engine::model::ErrorStyle::Stop { let title = if dv.error_title.is_empty() { "GridCraft".to_string() } else { dv.error_title.clone() }; @@ -199,9 +243,9 @@ impl SheetApp { let r = if unchanged { Ok(json!({})) } else if fill_selection { - self.session.run("range.fill", json!({"input": text})) + self.session.run("range.fill", json!({"input": text, "literal": literal.is_some()})) } else { - self.session.run("cell.set", json!({"cell": ed.cell.a1(), "input": text, "array": array})) + self.session.run("cell.set", json!({"cell": ed.cell.a1(), "input": text, "array": array, "literal": literal.is_some()})) }; match r { Ok(_) => { diff --git a/crates/ui-egui/src/app/files.rs b/crates/ui-egui/src/app/files.rs index 0cbde92a8f..24b661eb02 100644 --- a/crates/ui-egui/src/app/files.rs +++ b/crates/ui-egui/src/app/files.rs @@ -41,7 +41,11 @@ impl SheetApp { self.notice = None; return; } - let vba: Vec<&str> = msgs.iter().copied().filter(|m| m.to_lowercase().contains("macro") || m.contains("VBA")).collect(); + let vba: Vec<&str> = msgs + .iter() + .copied() + .filter(|m| !m.starts_with("XLSB data-only import:") && (m.to_lowercase().contains("macro") || m.contains("VBA"))) + .collect(); if !vba.is_empty() { // The reader says "dropped" when the VBA project was missing or unreadable; never promise to keep it then. let dropped = vba.iter().any(|m| m.contains("dropped")); @@ -53,9 +57,12 @@ impl SheetApp { self.notice = Some(Notice { text: text.into(), kind: NoticeKind::Warning, action: Some(("What this means".into(), "macros".into())) }); } else { let text = if msgs.len() == 1 { - msgs[0].to_string() + self.ui.language.open_warning(msgs[0]) } else { - format!("{} items in this file were handled differently. First: {}", msgs.len(), msgs[0]) + craft_i18n::fmt( + self.ui.language.tr("{count} items in this file were handled differently. First: {warning}"), + &[("count", &msgs.len().to_string()), ("warning", &self.ui.language.open_warning(msgs[0]))], + ) }; self.notice = Some(Notice { text, kind: NoticeKind::Info, action: None }); } diff --git a/crates/ui-egui/src/backstage/options.rs b/crates/ui-egui/src/backstage/options.rs index faef32a5b8..c72bf65442 100644 --- a/crates/ui-egui/src/backstage/options.rs +++ b/crates/ui-egui/src/backstage/options.rs @@ -12,7 +12,11 @@ pub(super) fn options(app: &mut SheetApp, ui: &mut Ui) { general_options(app, ui, lang); ui.add_space(6.0); let mut formula_bar = app.session.prefs.formula_bar; - if ui.checkbox(&mut formula_bar, lang.tr("Show formula bar")).changed() { + if ui + .checkbox(&mut formula_bar, lang.tr("Show formula bar")) + .on_hover_text(lang.tr("Show or hide the formula bar used to view and edit the active cell.")) + .changed() + { app.run_or_alert("view.formulaBar", json!({"on": formula_bar})); } let mut highlight_row = app.ui.highlight_active_row; @@ -22,13 +26,21 @@ pub(super) fn options(app: &mut SheetApp, ui: &mut Ui) { ui.add_space(18.0); section(ui, lang, "Options|Editing"); let mut autocomplete = app.ui.autocomplete; - if ui.checkbox(&mut autocomplete, lang.tr("Enable AutoComplete for cell values")).changed() { + if ui + .checkbox(&mut autocomplete, lang.tr("Enable AutoComplete for cell values")) + .on_hover_text(lang.tr("Complete text from a matching value in the same column while typing in a cell.")) + .changed() + { app.run_or_alert("options.autoComplete", json!({"on": autocomplete})); } ui.add_space(18.0); section(ui, lang, "Options|Save"); let mut autosave = app.ui.autosave; - if ui.checkbox(&mut autosave, lang.tr("Save .xlsx workbooks automatically after every change")).changed() { + if ui + .checkbox(&mut autosave, lang.tr("Save .xlsx workbooks automatically after every change")) + .on_hover_text(lang.tr("Save changes automatically to .xlsx workbooks that already have a file path.")) + .changed() + { app.toggle_autosave(); } let Some((calc, view)) = app.session.active().map(|d| (d.wb.calc.clone(), d.wb.view)) else { return }; @@ -74,7 +86,8 @@ fn general_options(app: &mut SheetApp, ui: &mut Ui, lang: Language) { } }) .response - .labelled_by(label.id); + .labelled_by(label.id) + .on_hover_text(lang.tr("Choose a light or dark appearance, or follow your system's theme.")); ui.end_row(); let label = ui.label(lang.tr("Interface language")); craft_ui::ComboBox::from_id_salt("backstage_language") @@ -88,7 +101,8 @@ fn general_options(app: &mut SheetApp, ui: &mut Ui, lang: Language) { } }) .response - .labelled_by(label.id); + .labelled_by(label.id) + .on_hover_text(lang.tr("Choose the language used by the interface.")); ui.end_row(); }); } @@ -96,18 +110,28 @@ fn general_options(app: &mut SheetApp, ui: &mut Ui, lang: Language) { /// The calculation mode, and iterative calculation, of the active workbook. fn calc_options(app: &mut SheetApp, ui: &mut Ui, lang: Language, calc: &gridcraft_engine::model::CalcSettings) { use gridcraft_engine::model::CalcMode; - for (mode, id, label) in [ - (CalcMode::Automatic, "automatic", "Automatic"), - (CalcMode::AutomaticExceptTables, "automaticExceptTables", "Automatic Except for Data Tables"), - (CalcMode::Manual, "manual", "Manual"), + for (mode, id, label, tip) in [ + (CalcMode::Automatic, "automatic", "Automatic", "Recalculate formulas automatically when workbook values or formulas change."), + ( + CalcMode::AutomaticExceptTables, + "automaticExceptTables", + "Automatic Except for Data Tables", + "Recalculate formulas automatically. What-if data tables are currently snapshots; run Data Table again to update them.", + ), + ( + CalcMode::Manual, + "manual", + "Manual", + "Defer updates to dependent formulas until Calculate Now or Calculate Sheet. Formulas you edit still calculate immediately.", + ), ] { - if ui.radio(calc.mode == mode, lang.tr(label)).clicked() && calc.mode != mode { + if ui.radio(calc.mode == mode, lang.tr(label)).on_hover_text(lang.tr(tip)).clicked() && calc.mode != mode { app.run_or_alert("formulas.calculationOptions", json!({"mode": id})); } } ui.add_space(4.0); let mut iterative = calc.iterative; - if ui.checkbox(&mut iterative, lang.tr("Enable iterative calculation")).changed() { + if ui.checkbox(&mut iterative, lang.tr("Enable iterative calculation")).on_hover_text(lang.tr("Repeatedly calculate circular references until results converge or the iteration limit is reached. Enable only for intentional circular formulas.")).changed() { app.run_or_alert("formulas.calculationOptions", json!({"iterative": iterative})); } // Maximum Iterations and Maximum Change apply only while iteration is on, as in Excel. diff --git a/crates/ui-egui/src/border_preview.rs b/crates/ui-egui/src/border_preview.rs index dc0a83ae4d..fdd9e3aad5 100644 --- a/crates/ui-egui/src/border_preview.rs +++ b/crates/ui-egui/src/border_preview.rs @@ -53,7 +53,7 @@ pub(crate) fn preset_button(ui: &mut Ui, label: &str, preset: &str) -> Response /// and explicit border colors faithful in both light and dark application themes. pub(crate) fn sample(ui: &mut Ui, borders: &Borders, theme: &Theme) { ui.add_space(8.0); - ui.label("Preview"); + ui.label(crate::i18n::current(ui.ctx()).tr("Preview")); let (area, response) = ui.allocate_exact_size(vec2(248.0, 104.0), Sense::hover()); response.widget_info(|| egui::WidgetInfo::labeled(egui::Role::Label, true, "Border preview")); let t = Tokens::get(ui.ctx()); diff --git a/crates/ui-egui/src/chartcache.rs b/crates/ui-egui/src/chartcache.rs index 82e9a96a22..ca95a6c909 100644 --- a/crates/ui-egui/src/chartcache.rs +++ b/crates/ui-egui/src/chartcache.rs @@ -48,6 +48,7 @@ struct DocCharts { #[derive(Default)] pub(crate) struct ChartCache { + language: Option, docs: HashMap, tick: u64, bytes: usize, @@ -66,6 +67,14 @@ fn prim_bytes(p: &Prim) -> usize { } impl ChartCache { + /// Generated series captions depend on the interface language, even without workbook edits. + pub(crate) fn set_language(&mut self, language: crate::i18n::Language) { + if self.language != Some(language) { + self.clear(); + self.language = Some(language); + } + } + /// The primitives of chart `index` of `sheet` in document `uid` whose workbook is `wb`, for /// zoom and pixels per point `(z, ppp)`. `build` renders the chart when there is no valid entry. pub(crate) fn get( @@ -369,6 +378,36 @@ mod tests { h.state_mut().session.execute(id, params).unwrap(); } + /// Language switches refresh generated labels without discarding the idle-frame cache benefit. + #[test] + fn cached_chart_labels_follow_the_interface_language() { + let mut session = two_charts(); + session.execute("cell.set", json!({"cell":"B1","input":""})).unwrap(); + let mut h = harness(session); + let n = rendered_after(&mut h, |h| { + h.state_mut().ui.language = crate::i18n::Language::Ru; + }); + assert_eq!(n, 2); + let cache = h.state().chart_cache.lock().unwrap(); + let expected = craft_i18n::fmt(crate::i18n::Language::Ru.tr("Series{n}"), &[("n", "1")]); + assert!( + cache + .docs + .values() + .flat_map(|doc| doc.charts.values()) + .flat_map(|entry| entry.prims.iter()) + .any(|prim| matches!(prim, Prim::Text { text, .. } if text == &expected)) + ); + drop(cache); + assert_eq!(rendered_after(&mut h, |h| h.run_steps(5)), 0); + assert_eq!( + rendered_after(&mut h, |h| { + h.state_mut().ui.language = crate::i18n::Language::En; + }), + 2 + ); + } + #[test] fn frames_without_a_change_render_each_chart_once() { let mut h = harness(two_charts()); diff --git a/crates/ui-egui/src/chartview.rs b/crates/ui-egui/src/chartview.rs index 48f0846ae5..10c81cd009 100644 --- a/crates/ui-egui/src/chartview.rs +++ b/crates/ui-egui/src/chartview.rs @@ -16,6 +16,18 @@ fn rgba(c: [u8; 4]) -> Color32 { Color32::from_rgba_unmultiplied(c[0], c[1], c[2], c[3]) } +/// Localizes generated series labels while preserving explicit names and workbook values. +pub(crate) fn localized_chart_data( + wb: &Workbook, + sheet: usize, + chart: &gridcraft_engine::model::Chart, + language: crate::i18n::Language, +) -> gridcraft_chart::ChartData { + gridcraft_chart::resolve_with_series_names(wb, sheet, chart, |index| { + craft_i18n::fmt(language.tr("Series{n}"), &[("n", &(index + 1).to_string())]) + }) +} + struct EguiMeasure<'a> { painter: &'a Painter, z: f32, @@ -37,7 +49,7 @@ pub fn paint_chart(p: &Painter, rect: Rect, wb: &Workbook, sheet: usize, chart: return; } let origin = rect.center() - vec2(w * z, h * z) / 2.0; - let data = gridcraft_chart::resolve(wb, sheet, chart); + let data = localized_chart_data(wb, sheet, chart, crate::i18n::current(p.ctx())); let m = EguiMeasure { painter: p, z }; let prims = gridcraft_chart::render(chart, &data, w, h, &m); paint_prims(&p.with_clip_rect(rect.intersect(p.clip_rect())), origin, &prims, z); @@ -252,7 +264,7 @@ fn paint_shape_text(p: &Painter, wb: &Workbook, sp: &gridcraft_engine::model::Sh fn render_chart(p: &Painter, z: f32, wb: &Workbook, si: usize, ch: &gridcraft_engine::model::Chart) -> Vec { #[cfg(test)] tests::RENDERS.with(|c| c.set(c.get() + 1)); - let data = gridcraft_chart::resolve(wb, si, ch); + let data = localized_chart_data(wb, si, ch, crate::i18n::current(p.ctx())); let m = EguiMeasure { painter: p, z }; gridcraft_chart::render(ch, &data, ch.anchor.width, ch.anchor.height, &m) } @@ -270,6 +282,7 @@ fn chart_prims(app: &SheetApp, p: &Painter, z: f32, wb: &Arc, si: usiz return render_chart(p, z, wb, si, ch).into(); } let mut cache = app.chart_cache.lock().unwrap_or_else(std::sync::PoisonError::into_inner); + cache.set_language(crate::i18n::current(p.ctx())); cache.get(d.uid, wb, si, ci, (z, p.ctx().pixels_per_point()), || render_chart(p, z, wb, si, ch)) } @@ -292,6 +305,7 @@ pub(crate) fn objects_hidden(wb: &Workbook) -> bool { wb.show_objects == gridcraft_engine::model::ShowObjects::None } +/// Paints visible sheet objects with interface-localized chart labels and returns their hit regions. pub(crate) fn paint_objects(app: &SheetApp, p: &Painter, geo: &Geo, wb: &Arc, si: usize, sh: &Sheet) -> Vec { let mut painted = Vec::new(); if objects_hidden(wb) { @@ -615,6 +629,45 @@ pub(crate) fn ink_color(line: Color32, width_pt: f32) -> Color32 { if width_pt > 8.0 { line.gamma_multiply(0.45) } else { line } } +#[cfg(test)] +mod localized_name_tests { + use super::*; + use crate::i18n::Language; + use gridcraft_engine::Session; + use serde_json::json; + + /// Only genuinely empty resolved names use the localized fallback, never explicit user text. + #[test] + fn resolved_empty_series_names_use_localized_fallbacks() { + let mut session = Session::new(); + session.new_workbook(); + session.execute("range.setValues", json!({"range":"A1", "values":[["Quarter", "Sales"],["Q1",1],["Q2",2]]})).unwrap(); + session.execute("cell.set", json!({"cell":"D1", "input":"Series1"})).unwrap(); + session.execute("insert.chart", json!({"range":"A1:B3", "type":"column"})).unwrap(); + let wb = &session.active().unwrap().wb; + let mut chart = wb.active().unwrap().charts[0].clone(); + let cases = [ + (None, true), + (Some(""), true), + (Some("\"\""), true), + (Some("=Sheet1!C1"), true), + (Some("Sheet1!C1"), true), + (Some("=IF(TRUE,\"\",\"value\")"), true), + (Some("Series1"), false), + (Some("\"Series1\""), false), + (Some("=Sheet1!D1"), false), + ]; + for (source, generated) in cases { + chart.series[0].name = source.map(str::to_string); + let canonical = gridcraft_chart::resolve(wb, 0, &chart); + assert_eq!(canonical.series[0].name, "Series1"); + let shown = localized_chart_data(wb, 0, &chart, Language::Ru); + let expected = if generated { craft_i18n::fmt(Language::Ru.tr("Series{n}"), &[("n", "1")]) } else { "Series1".into() }; + assert_eq!(shown.series[0].name, expected, "{source:?}"); + } + } +} + #[cfg(test)] pub(crate) mod tests { use std::cell::Cell; diff --git a/crates/ui-egui/src/control.rs b/crates/ui-egui/src/control.rs index 602d5ccdfa..1f8e369007 100644 --- a/crates/ui-egui/src/control.rs +++ b/crates/ui-egui/src/control.rs @@ -359,7 +359,7 @@ pub fn handle(app: &mut SheetApp, ctx: &egui::Context, method: &str, p: &Json) - } let params = crate::dialogs::build_params(&d); let home = app.ui_window(); - let r = app.run(cmd, params); + let r = app.run_from_ui(cmd, params); if r.is_err() { app.return_dialog(home, d); } diff --git a/crates/ui-egui/src/credits.rs b/crates/ui-egui/src/credits.rs index 0e4eb62957..12d8309059 100644 --- a/crates/ui-egui/src/credits.rs +++ b/crates/ui-egui/src/credits.rs @@ -214,38 +214,45 @@ pub fn contributors_ui(ui: &mut egui::Ui) { let id = egui::Id::unique("credits_view"); let mut v = ui.data_mut(|d| d.get_temp::(id)).unwrap_or_default(); ui.horizontal_wrapped(|ui| { - ui.label("Show"); + ui.label(crate::i18n::current(ui.ctx()).tr("Show")); for m in NameMode::ALL { - if ui.selectable_label(v.names == m, m.label()).clicked() { + if ui.selectable_label(v.names == m, crate::i18n::current(ui.ctx()).tr(m.label())).clicked() { v.names = m; } } ui.separator(); - ui.label("Sort"); - craft_ui::ComboBox::from_id_salt("credits_sort").selected_text(v.key.label().0).show_ui(ui, |ui| { + ui.label(crate::i18n::current(ui.ctx()).tr("Sort")); + craft_ui::ComboBox::from_id_salt("credits_sort").selected_text(crate::i18n::current(ui.ctx()).tr(v.key.label().0)).show_ui(ui, |ui| { for k in SortKey::ALL { - if ui.selectable_label(v.key == k, k.label().0).clicked() { + if ui.selectable_label(v.key == k, crate::i18n::current(ui.ctx()).tr(k.label().0)).clicked() { v.key = k; v.ascending = k.default_ascending(); } } }); - if ui.button(if v.ascending { "▲" } else { "▼" }).on_hover_text("Reverse the order").clicked() { + if ui.button(if v.ascending { "▲" } else { "▼" }).on_hover_text(crate::i18n::current(ui.ctx()).tr("Reverse the order")).clicked() { v.ascending = !v.ascending; } ui.separator(); - if ui.selectable_label(!v.table, "Grab bag").clicked() { + if ui.selectable_label(!v.table, crate::i18n::current(ui.ctx()).tr("Grab bag")).clicked() { v.table = false; } - if ui.selectable_label(v.table, "Table").clicked() { + if ui.selectable_label(v.table, crate::i18n::current(ui.ctx()).tr("Table")).clicked() { v.table = true; } }); let list = sorted(CONTRIBUTORS, v.names, v.key, v.ascending); - ui.label(RichText::new(format!("{} contributors · {} commits", list.len(), group(TOTAL_COMMITS))).small().weak()); + ui.label( + RichText::new(craft_i18n::fmt( + crate::i18n::current(ui.ctx()).tr("{contributors} contributors · {commits} commits"), + &[("contributors", &list.len().to_string()), ("commits", &group(TOTAL_COMMITS))], + )) + .small() + .weak(), + ); ui.separator(); if list.is_empty() { - ui.label("No contributor data was built into this copy."); + ui.label(crate::i18n::current(ui.ctx()).tr("No contributor data was built into this copy.")); } else if v.table { // The table scrolls vertically itself, under a fixed header; it only scrolls sideways // once its columns are dragged wider than the dialog. @@ -363,8 +370,8 @@ fn cells(c: &Contributor) -> [String; 9] { /// A contributor-table header. The sorted column is highlighted; its direction shows on the /// toolbar's sort-order button, so no arrow widens the column. -fn header_text(k: SortKey) -> RichText { - RichText::new(k.label().1).strong() +fn header_text(ui: &egui::Ui, k: SortKey) -> RichText { + RichText::new(crate::i18n::current(ui.ctx()).tr(k.label().1)).strong() } fn table(ui: &mut egui::Ui, list: &[&Contributor], v: &mut View) { @@ -374,15 +381,16 @@ fn table(ui: &mut egui::Ui, list: &[&Contributor], v: &mut View) { .iter() .enumerate() .map(|(i, &k)| match i.checked_sub(1) { - None => natural(ui, header_text(k), list.iter().map(|c| c.name(v.names))), - Some(col) => natural(ui, header_text(k), rows.iter().filter_map(|r| r.get(col).cloned())), + None => natural(ui, header_text(ui, k), list.iter().map(|c| c.name(v.names))), + Some(col) => natural(ui, header_text(ui, k), rows.iter().filter_map(|r| r.get(col).cloned())), }) .collect(); fitted_table(ui, "credits_table", &widths, &CONTRIBUTOR_GROW) .header(h + 4.0, |mut header| { for k in SortKey::ALL { header.col(|ui| { - let r = aligned(ui, k != SortKey::Name, |ui| ui.selectable_label(v.key == k, header_text(k))).on_hover_text(k.label().0); + let r = aligned(ui, k != SortKey::Name, |ui| ui.selectable_label(v.key == k, header_text(ui, k))) + .on_hover_text(crate::i18n::current(ui.ctx()).tr(k.label().0)); if r.clicked() { if v.key == k { @@ -415,7 +423,7 @@ fn table(ui: &mut egui::Ui, list: &[&Contributor], v: &mut View) { /// About ▸ Models: AI models credited in Co-Authored-By trailers. pub fn models_ui(ui: &mut egui::Ui) { if MODELS.is_empty() { - ui.label("No model credits were built into this copy."); + ui.label(crate::i18n::current(ui.ctx()).tr("No model credits were built into this copy.")); return; } let assisted: u64 = MODELS.iter().map(|m| m.commits).max().unwrap_or(0).max(1); @@ -439,7 +447,9 @@ pub fn models_ui(ui: &mut egui::Ui) { let widths: Vec = titles .iter() .enumerate() - .map(|(i, title)| natural(ui, RichText::new(*title).strong(), rows.iter().filter_map(|r| r.get(i).cloned()))) + .map(|(i, title)| { + natural(ui, RichText::new(crate::i18n::current(ui.ctx()).tr(title)).strong(), rows.iter().filter_map(|r| r.get(i).cloned())) + }) .collect(); ui.allocate_ui(egui::vec2(ui.available_width(), 340.0), |ui| { ui.set_max_height(340.0); @@ -448,7 +458,7 @@ pub fn models_ui(ui: &mut egui::Ui) { .header(h + 4.0, |mut header| { for (title, r) in titles.into_iter().zip(right) { header.col(|ui| { - aligned(ui, r, |ui| ui.label(RichText::new(title).strong())); + aligned(ui, r, |ui| ui.label(RichText::new(crate::i18n::current(ui.ctx()).tr(title)).strong())); }); } }) diff --git a/crates/ui-egui/src/dialogs.rs b/crates/ui-egui/src/dialogs.rs index 47b215302e..89ac059323 100644 --- a/crates/ui-egui/src/dialogs.rs +++ b/crates/ui-egui/src/dialogs.rs @@ -49,6 +49,7 @@ pub enum Field { Password { key: &'static str, label: &'static str }, Number { key: &'static str, label: &'static str }, Choice { key: &'static str, label: &'static str, options: Vec<(&'static str, &'static str)> }, + NameScope { key: &'static str, label: &'static str, sheets: Vec }, Check { key: &'static str, label: &'static str }, Note(String), } @@ -406,13 +407,13 @@ impl Dialog { .collect() }) .unwrap_or_default(); - let summary = if rows.is_empty() { "No ranges yet.".to_string() } else { rows.join("\n") }; + let summary = if rows.is_empty() { app.ui.language.tr("No ranges yet.").to_string() } else { rows.join("\n") }; Dialog::form( "allowEditRanges", "Allow Edit Ranges", "review.allowEditRanges", vec![ - Note(format!("Ranges that stay editable when the sheet is protected:\n{summary}")), + Note(format!("{}\n{summary}", app.ui.language.tr("Ranges that stay editable when the sheet is protected:"))), Choice { key: "action", label: "Action", @@ -506,7 +507,13 @@ impl Dialog { Choice { key: "operation", label: "Operation", - options: vec![("none", "None"), ("add", "Add"), ("subtract", "Subtract"), ("multiply", "Multiply"), ("divide", "Divide")], + options: vec![ + ("none", "None"), + ("add", "Paste Special|Add"), + ("subtract", "Subtract"), + ("multiply", "Multiply"), + ("divide", "Divide"), + ], }, Check { key: "skipBlanks", label: "Skip blanks" }, Check { key: "transpose", label: "Transpose (E)" }, @@ -648,7 +655,7 @@ impl Dialog { vec![ Check { key: "tab", label: "Tab" }, Check { key: "semicolon", label: "Semicolon" }, - Check { key: "comma", label: "Comma" }, + Check { key: "comma", label: "Text to Columns|Comma" }, Check { key: "space", label: "Space" }, Text { key: "other", label: "Other:" }, Check { key: "treatConsecutive", label: "Treat consecutive delimiters as one" }, @@ -819,9 +826,11 @@ impl Dialog { let selection = app.session.active().and_then(|d| { d.wb.active().map(|s| format!("={}!{}", gridcraft_engine::formula::quote_sheet(&s.name), abs(&d.selection.current()))) }); - let mut defaults = json!({"scope": "Workbook", "refersTo": selection}); + let mut defaults = json!({"scope": null, "refersTo": selection}); for key in ["name", "scope", "comment", "refersTo", "oldName", "oldScope"] { - if let Some(v) = params.get(key).filter(|v| v.is_string()) { + if let Some(v) = + params.get(key).filter(|v| v.is_string() || matches!(key, "scope" | "oldScope") && (v.is_object() || v.is_null())) + { defaults[key] = v.clone(); } } @@ -831,7 +840,15 @@ impl Dialog { "formulas.defineName", vec![ Text { key: "name", label: "Name:" }, - Text { key: "scope", label: "Scope (Workbook or sheet name):" }, + NameScope { + key: "scope", + label: "Scope:", + sheets: app + .session + .active() + .map(|doc| doc.wb.sheets.iter().map(|sheet| sheet.name.clone()).collect()) + .unwrap_or_default(), + }, Text { key: "comment", label: "Comment:" }, Text { key: "refersTo", label: "Refers to:" }, ], @@ -1038,7 +1055,7 @@ impl Dialog { let si = doc.wb.active_sheet(); let sh = doc.wb.sheet(si)?; let ch = sh.charts.iter().find(|c| Some(u64::from(c.id)) == id)?; - let data = gridcraft_chart::resolve(&doc.wb, si, ch); + let data = crate::chartview::localized_chart_data(&doc.wb, si, ch, app.ui.language); let names: Vec = data.series.iter().map(|x| x.name.clone()).collect(); let cats = ch.series.first().and_then(|x| x.categories.clone()).unwrap_or_default(); Some((ch.source.clone().unwrap_or_default(), cats, names)) diff --git a/crates/ui-egui/src/dialogs/about.rs b/crates/ui-egui/src/dialogs/about.rs index a95878e924..35fc9795a1 100644 --- a/crates/ui-egui/src/dialogs/about.rs +++ b/crates/ui-egui/src/dialogs/about.rs @@ -5,7 +5,7 @@ use super::Dialog; pub(super) fn about(ui: &mut egui::Ui, d: &mut Dialog) { ui.horizontal(|ui| { for tab in ["About", "Contributors", "Models"] { - if ui.selectable_label(d.tab == tab, tab).clicked() { + if ui.selectable_label(d.tab == tab, crate::i18n::current(ui.ctx()).tr(tab)).clicked() { d.tab = tab.to_string(); } } @@ -16,11 +16,11 @@ pub(super) fn about(ui: &mut egui::Ui, d: &mut Dialog) { "Models" => crate::credits::models_ui(ui), _ => { ui.heading("GridCraft"); - ui.label(format!("Version {}", env!("CARGO_PKG_VERSION"))); + ui.label(craft_i18n::fmt(crate::i18n::current(ui.ctx()).tr("Version {version}"), &[("version", env!("CARGO_PKG_VERSION"))])); ui.add_space(4.0); - ui.label("A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft."); + ui.label(crate::i18n::current(ui.ctx()).tr("A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft.")); ui.hyperlink_to("getartcraft.com/apps/gridcraft", "https://getartcraft.com/apps/gridcraft"); - ui.hyperlink_to("Join the ArtCraft Discord", "https://discord.gg/artcraft"); + ui.hyperlink_to(crate::i18n::current(ui.ctx()).tr("Join the ArtCraft Discord"), "https://discord.gg/artcraft"); } } } diff --git a/crates/ui-egui/src/dialogs/analysis.rs b/crates/ui-egui/src/dialogs/analysis.rs index 6a49cdaaaa..1d5ad31973 100644 --- a/crates/ui-egui/src/dialogs/analysis.rs +++ b/crates/ui-egui/src/dialogs/analysis.rs @@ -6,16 +6,16 @@ use super::{Dialog, Field, Json, Map, SheetApp, json, vec2}; /// the shared buttons do, so cancelling is never taken for a confirmation. pub(super) fn goal_seek(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, confirm: &mut bool, open: &mut bool) { egui::Grid::new("gs").show(ui, |ui| { - let l = ui.label("Set cell:"); + let l = ui.label(crate::i18n::current(ui.ctx()).tr("Set cell:")); ref_edit(app, ui, d, "set", RefLabel::By(l.id), 200.0); ui.end_row(); - let l = ui.label("To value:"); + let l = ui.label(crate::i18n::current(ui.ctx()).tr("To value:")); let mut to = d.values.get("to").and_then(Json::as_str).unwrap_or("").to_string(); if ui.add(egui::TextEdit::singleline(&mut to).desired_width(170.0)).labelled_by(l.id).changed() { d.values.insert("to".into(), json!(to)); } ui.end_row(); - let l = ui.label("By changing cell:"); + let l = ui.label(crate::i18n::current(ui.ctx()).tr("By changing cell:")); ref_edit(app, ui, d, "changing", RefLabel::By(l.id), 200.0); ui.end_row(); }); @@ -228,14 +228,15 @@ const TOOLPAK_CHROME: f32 = 240.0; pub(super) fn analysis_toolpak(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, confirm: &mut bool, open: &mut bool) { use gridcraft_engine::cmd::analysis::TOOLS; if d.values.get("askOverwrite").and_then(Json::as_bool) == Some(true) { - ui.label("The output range already holds data. Replace it with the report?"); + let lang = crate::i18n::current(ui.ctx()); + ui.label(lang.tr("The output range already holds data. Replace it with the report?")); ui.horizontal(|ui| { - if ui.button("Replace").clicked() { + if ui.button(lang.tr("Replace")).clicked() { d.values.remove("askOverwrite"); d.values.insert("overwrite".into(), json!(true)); *confirm = true; } - if ui.button("Cancel").clicked() { + if ui.button(lang.tr("Cancel")).clicked() { d.values.remove("askOverwrite"); } }); @@ -243,7 +244,7 @@ pub(super) fn analysis_toolpak(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Di } let tool = d.values.get("tool").and_then(Json::as_str).unwrap_or("").to_string(); let Some((_, label)) = TOOLS.iter().find(|(id, _)| *id == tool) else { - ui.label(egui::RichText::new("Analysis Tools").strong()); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Analysis Tools")).strong()); let pick = d.values.get("pick").and_then(Json::as_str).unwrap_or("").to_string(); let mut chosen = false; egui::ScrollArea::vertical().max_height(260.0).show(ui, |ui| { @@ -275,7 +276,7 @@ pub(super) fn analysis_toolpak(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Di let room = (ui.ctx().content_rect().height() - TOOLPAK_CHROME).max(120.0); egui::ScrollArea::vertical().id_salt("toolpakForm").max_height(room).show(ui, |ui| form_fields(app, ui, d)); ui.separator(); - ui.label(egui::RichText::new("Output options").strong()); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Output options")).strong()); let to = d.values.get("outputTo").and_then(Json::as_str).unwrap_or("newSheet").to_string(); for (key, choice, text_label) in [("output", "range", "Output Range:"), ("newSheet", "newSheet", "New Worksheet Ply:")] { ui.horizontal(|ui| { @@ -455,22 +456,23 @@ pub(super) fn solver(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, conf return; } ui.horizontal(|ui| { - let l = ui.label("Set Objective:"); + let l = ui.label(crate::i18n::current(ui.ctx()).tr("Set Objective:")); ref_edit(app, ui, d, "objective", RefLabel::By(l.id), 230.0); }); let goal = text(d, "goal"); ui.horizontal(|ui| { - ui.label("To:"); + let language = crate::i18n::current(ui.ctx()); + ui.label(language.translation("Solver|To:").unwrap_or_else(|| language.tr("To:"))); for (g, label) in [("max", "Max"), ("min", "Min"), ("value", "Value Of:")] { - if ui.radio(goal == g, label).clicked() { + if ui.radio(goal == g, crate::i18n::current(ui.ctx()).tr(label)).clicked() { d.values.insert("goal".into(), json!(g)); } } edit(ui, d, "value", 80.0, "Value Of:"); }); - let l = ui.label("By Changing Variable Cells:"); + let l = ui.label(crate::i18n::current(ui.ctx()).tr("By Changing Variable Cells:")); ref_edit(app, ui, d, "variables", RefLabel::By(l.id), 420.0); - ui.label("Subject to the Constraints:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Subject to the Constraints:")); let list: Vec = d .values .get("constraints") @@ -505,7 +507,7 @@ pub(super) fn solver(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, conf if !matches!(op.as_str(), "int" | "bin") { ref_edit(app, ui, d, "newRhs", RefLabel::Named("Constraint Value"), 130.0); } - if ui.button("Add").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Add")).clicked() { let lhs = text(d, "newLhs"); if !lhs.trim().is_empty() { let rhs = if matches!(op.as_str(), "int" | "bin") { String::new() } else { format!(" {}", text(d, "newRhs").trim()) }; @@ -516,7 +518,7 @@ pub(super) fn solver(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, conf d.values.insert("newRhs".into(), json!("")); } } - if ui.add_enabled(d.list_index < list.len(), egui::Button::new("Delete")).clicked() { + if ui.add_enabled(d.list_index < list.len(), egui::Button::new(crate::i18n::current(ui.ctx()).tr("Delete"))).clicked() { let mut list = list.clone(); if d.list_index < list.len() { list.remove(d.list_index); @@ -525,12 +527,12 @@ pub(super) fn solver(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, conf } }); let mut nonneg = d.values.get("nonNegative").and_then(Json::as_bool).unwrap_or(true); - if ui.checkbox(&mut nonneg, "Make Unconstrained Variables Non-Negative").changed() { + if ui.checkbox(&mut nonneg, crate::i18n::current(ui.ctx()).tr("Make Unconstrained Variables Non-Negative")).changed() { d.values.insert("nonNegative".into(), json!(nonneg)); } let method = text(d, "method"); ui.horizontal(|ui| { - ui.label("Select a Solving Method:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Select a Solving Method:")); let label = |m: &str| match m { "simplex" => "Simplex LP", "evolutionary" => "Evolutionary", @@ -595,7 +597,7 @@ pub(super) fn solver(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, conf }); if d.values.get("modelArea").and_then(Json::as_bool) == Some(true) { ui.horizontal(|ui| { - let l = ui.label("Model Range:"); + let l = ui.label(crate::i18n::current(ui.ctx()).tr("Model Range:")); ref_edit(app, ui, d, "modelRange", RefLabel::By(l.id), 170.0); let range = text(d, "modelRange"); let ready = !range.trim().is_empty(); @@ -696,7 +698,8 @@ pub(super) fn solver_results(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dial ui.label("Reports:"); for (key, label) in [("answerReport", "Answer"), ("sensitivityReport", "Sensitivity"), ("limitsReport", "Limits")] { let mut on = offered(key) && d.values.get(key).and_then(Json::as_bool).unwrap_or(false); - let check = ui.add_enabled(offered(key), egui::Checkbox::new(&mut on, label)).on_disabled_hover_text(why_not); + let lang = crate::i18n::current(ui.ctx()); + let check = ui.add_enabled(offered(key), egui::Checkbox::new(&mut on, lang.tr(label))).on_disabled_hover_text(lang.tr(why_not)); if check.changed() { d.values.insert(key.into(), json!(on)); } diff --git a/crates/ui-egui/src/dialogs/charts.rs b/crates/ui-egui/src/dialogs/charts.rs index 039b8b0f3a..59a24b9ada 100644 --- a/crates/ui-egui/src/dialogs/charts.rs +++ b/crates/ui-egui/src/dialogs/charts.rs @@ -124,9 +124,10 @@ pub(super) fn recommended_charts(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut /// Draws chart range, series keep/remove and category-range controls and runs `chart.selectData` when something changed. pub(super) fn select_data(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, confirm: &mut bool, open: &mut bool) { + let lang = app.ui.language; let text = |d: &Dialog, k: &str| d.values.get(k).and_then(Json::as_str).unwrap_or("").to_string(); let edit = |ui: &mut egui::Ui, d: &mut Dialog, key: &str, label: &str| { - let label = ui.label(label); + let label = ui.label(lang.tr(label)); let mut v = text(d, key); if ui.add(egui::TextEdit::singleline(&mut v).desired_width(420.0)).labelled_by(label.id).changed() { d.values.insert(key.into(), json!(v)); @@ -134,7 +135,7 @@ pub(super) fn select_data(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, }; edit(ui, d, "range", "Chart data range:"); ui.add_space(6.0); - ui.strong("Legend Entries (Series)"); + ui.strong(lang.tr("Legend Entries (Series)")); let names: Vec = d.values.get("names").and_then(Json::as_array).map(|a| a.iter().map(|n| n.as_str().unwrap_or("").to_string()).collect()).unwrap_or_default(); let mut remove: Vec = @@ -145,13 +146,14 @@ pub(super) fn select_data(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, let i = i as u64; let removed = remove.contains(&i); ui.horizontal(|ui| { - let label = if name.is_empty() { format!("Series{}", i + 1) } else { name.clone() }; + let label = + if name.is_empty() { craft_i18n::fmt(app.ui.language.tr("Series{n}"), &[("n", &(i + 1).to_string())]) } else { name.clone() }; ui.label(if removed { egui::RichText::new(label).strikethrough().weak() } else { egui::RichText::new(label) }); if removed { - if ui.small_button("Keep").clicked() { + if ui.small_button(lang.tr("Keep")).clicked() { remove.retain(|x| *x != i); } - } else if ui.add_enabled(kept > 1, egui::Button::new("Remove").small()).clicked() { + } else if ui.add_enabled(kept > 1, egui::Button::new(lang.tr("Remove")).small()).clicked() { remove.push(i); } }); diff --git a/crates/ui-egui/src/dialogs/command_search.rs b/crates/ui-egui/src/dialogs/command_search.rs index 44b518ff9b..d593462886 100644 --- a/crates/ui-egui/src/dialogs/command_search.rs +++ b/crates/ui-egui/src/dialogs/command_search.rs @@ -2,6 +2,7 @@ use super::{Dialog, Key, SheetApp, json, vec2}; /// Shows enabled commands and their shortcuts from engine metadata. pub(super) fn command_search(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, confirm: &mut bool) { + let lang = app.ui.language; let (down, up, home, end, pgup, pgdn) = ui.input_mut(|i| { ( i.consume_key(egui::Modifiers::NONE, Key::ArrowDown), @@ -13,7 +14,7 @@ pub(super) fn command_search(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dial ) }); let width = ui.available_width(); - let r = ui.add(egui::TextEdit::singleline(&mut d.search).desired_width(width).hint_text("Type a command, e.g. freeze, chart, bold…")); + let r = ui.add(egui::TextEdit::singleline(&mut d.search).desired_width(width).hint_text(lang.tr("Type a command, e.g. freeze, chart, bold…"))); if !d.focus_initialized { r.request_focus(); @@ -21,14 +22,20 @@ pub(super) fn command_search(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dial } let mac = ui.ctx().os() == egui::os::OperatingSystem::Mac; - let q = d.search.to_ascii_lowercase(); + let q = d.search.to_lowercase(); let cmds: Vec<(String, String, String, Option)> = app .session .commands() .into_iter() .filter(|c| c.enabled) - .filter(|c| q.is_empty() || c.label.to_ascii_lowercase().contains(&q) || c.id.to_ascii_lowercase().contains(&q)) - .map(|c| (c.id.to_string(), c.label.to_string(), c.menu.join(" › "), c.shortcut_for_platform(mac))) + .filter(|c| { + q.is_empty() + || c.label.to_lowercase().contains(&q) + || lang.tr(c.label).to_lowercase().contains(&q) + || c.id.to_ascii_lowercase().contains(&q) + || localized_menu_path(&c.menu, lang).to_lowercase().contains(&q) + }) + .map(|c| (c.id.to_string(), lang.tr(c.label).to_string(), localized_menu_path(&c.menu, lang), c.shortcut_for_platform(mac))) .take(40) .collect(); @@ -92,3 +99,8 @@ pub(super) fn command_search(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dial app.run_or_alert(&id, json!({})); } } + +/// Uses the ribbon's contextual tab name and ordinary translations for its groups. +fn localized_menu_path(menu: &[&str], language: crate::i18n::Language) -> String { + menu.iter().enumerate().map(|(index, part)| if index == 0 { language.tr_tab(part) } else { language.tr(part) }).collect::>().join(" › ") +} diff --git a/crates/ui-egui/src/dialogs/cond_format_rules.rs b/crates/ui-egui/src/dialogs/cond_format_rules.rs index 79df9897f6..e3ff40cebc 100644 --- a/crates/ui-egui/src/dialogs/cond_format_rules.rs +++ b/crates/ui-egui/src/dialogs/cond_format_rules.rs @@ -5,11 +5,12 @@ use super::{Json, SheetApp, json}; const LIST_HEIGHT: f32 = 360.0; pub(super) fn manage_rules(app: &mut SheetApp, ui: &mut egui::Ui) { + let lang = app.ui.language; // Read the rules in place: running `home.manageRules` for them each frame copied and // serialised every rule and journaled a step 60 times a second. let count = app.session.active().and_then(|d| d.wb.active()).map_or(0, |sh| sh.cond_formats.len()); if count == 0 { - ui.label("There are no conditional formatting rules on this sheet."); + ui.label(lang.tr("There are no conditional formatting rules on this sheet.")); return; } let mut action: Option = None; @@ -21,14 +22,14 @@ pub(super) fn manage_rules(app: &mut SheetApp, ui: &mut egui::Ui) { let kind = serde_json::to_value(&cf.rule).ok().and_then(|r| r.as_object().and_then(|o| o.keys().next().cloned())).unwrap_or_default(); let ranges = cf.ranges.iter().map(|r| r.a1()).collect::>().join(","); ui.horizontal(|ui| { - ui.label(format!("{}. {kind} applies to {ranges}", i + 1)); + ui.label(format!("{}. {kind} {} {ranges}", i + 1, lang.tr("applies to"))); if ui.small_button("▲").clicked() { action = Some(json!({"moveUp": i})); } if ui.small_button("▼").clicked() { action = Some(json!({"moveDown": i})); } - if ui.small_button("Delete").clicked() { + if ui.small_button(lang.tr("Delete")).clicked() { action = Some(json!({"delete": i})); } }); diff --git a/crates/ui-egui/src/dialogs/data.rs b/crates/ui-egui/src/dialogs/data.rs index e57a90c4e5..4736d0361b 100644 --- a/crates/ui-egui/src/dialogs/data.rs +++ b/crates/ui-egui/src/dialogs/data.rs @@ -184,7 +184,7 @@ pub(super) fn advanced_filter_form(app: &SheetApp, ui: &mut egui::Ui, d: &mut Di pub(super) fn sort(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, confirm: &mut bool) { let lang = app.ui.language; let mut header = d.values.get("header").and_then(Json::as_bool).unwrap_or(true); - ui.checkbox(&mut header, "My list has headers"); + ui.checkbox(&mut header, crate::i18n::current(ui.ctx()).tr("My list has headers")); d.values.insert("header".into(), json!(header)); let mut levels: Vec = d.values.get("levels").and_then(Json::as_array).cloned().unwrap_or_default(); // Columns of the region around the active cell, labelled with their header (or first value). diff --git a/crates/ui-egui/src/dialogs/find.rs b/crates/ui-egui/src/dialogs/find.rs index 394cf52119..c001bff48a 100644 --- a/crates/ui-egui/src/dialogs/find.rs +++ b/crates/ui-egui/src/dialogs/find.rs @@ -3,9 +3,10 @@ use super::{Dialog, Json, Key, SheetApp, json}; /// Draws the Find/Replace form with case, whole-cell and workbook options, requests field focus once, and runs find/replace with the current parameters. pub(super) fn find(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog) { + let lang = app.ui.language; ui.horizontal(|ui| { for tab in ["Find", "Replace"] { - if ui.selectable_label(d.tab == tab, tab).clicked() { + if ui.selectable_label(d.tab == tab, lang.tr(tab)).clicked() { d.tab = tab.into(); } } @@ -13,7 +14,7 @@ pub(super) fn find(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog) { let mut what = d.values.get("what").and_then(Json::as_str).unwrap_or("").to_string(); let mut with = d.values.get("with").and_then(Json::as_str).unwrap_or("").to_string(); ui.horizontal(|ui| { - let label = ui.label("Find what:"); + let label = ui.label(lang.tr("Find what:")); let r = ui.add(egui::TextEdit::singleline(&mut what).desired_width(260.0)).labelled_by(label.id); // Like Excel, the cursor starts in "Find what" - asked for once, so clicking another field still works. if !d.values.contains_key("focused") { @@ -23,17 +24,17 @@ pub(super) fn find(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog) { }); if d.tab == "Replace" { ui.horizontal(|ui| { - let label = ui.label("Replace with:"); + let label = ui.label(lang.tr("Replace with:")); ui.add(egui::TextEdit::singleline(&mut with).desired_width(244.0)).labelled_by(label.id); }); } let mut case = d.values.get("matchCase").and_then(Json::as_bool).unwrap_or(false); let mut whole = d.values.get("wholeCell").and_then(Json::as_bool).unwrap_or(false); let mut wb = d.values.get("within").and_then(Json::as_str) == Some("workbook"); - ui.horizontal(|ui| { - ui.checkbox(&mut case, "Match case"); - ui.checkbox(&mut whole, "Match entire cell contents"); - ui.checkbox(&mut wb, "Within workbook"); + ui.horizontal_wrapped(|ui| { + ui.checkbox(&mut case, lang.tr("Match case")); + ui.checkbox(&mut whole, lang.tr("Match entire cell contents")); + ui.checkbox(&mut wb, lang.tr("Within workbook")); }); d.values.insert("what".into(), json!(what)); d.values.insert("with".into(), json!(with)); @@ -57,16 +58,21 @@ pub(super) fn find(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog) { let base = json!({"what": what, "matchCase": case, "wholeCell": whole, "within": within}); ui.horizontal(|ui| { if d.tab == "Replace" { - if ui.button("Replace All").clicked() { + if ui.button(lang.tr("Replace All")).clicked() { let mut p = base.clone(); p["with"] = json!(with); p["all"] = json!(true); match app.run("edit.replace", p) { - Ok(r) => app.toast = Some((format!("All done. We made {} replacements.", r["replaced"]), crate::now_ms())), + Ok(r) => { + app.toast = Some(( + craft_i18n::fmt(lang.tr("All done. We made {count} replacements."), &[("count", &r["replaced"].to_string())]), + crate::now_ms(), + )) + } Err(e) => app.message = Some(("Find and Replace".into(), crate::clean_error(&e))), } } - if ui.button("Replace").clicked() { + if ui.button(lang.tr("Replace")).clicked() { let mut p = base.clone(); p["with"] = json!(with); p["all"] = json!(false); @@ -74,12 +80,12 @@ pub(super) fn find(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog) { let _ = app.run("edit.find", base.clone()); } } - if ui.button("Find All").clicked() { + if ui.button(lang.tr("Find All")).clicked() { let mut p = base.clone(); p["all"] = json!(true); d.result = app.run("edit.find", p).ok(); } - if ui.button("Find Next").clicked() || ui.input(|i| i.key_pressed(Key::Enter)) { + if ui.button(lang.tr("Find Next")).clicked() || ui.input(|i| i.key_pressed(Key::Enter)) { if let Err(e) = app.run("edit.find", base.clone()) { app.message = Some(("Find and Replace".into(), crate::clean_error(&e))); } @@ -90,7 +96,7 @@ pub(super) fn find(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog) { && let Some(list) = r["results"].as_array() { ui.separator(); - ui.label(format!("{} cell(s) found", list.len())); + ui.label(craft_i18n::fmt(lang.tr("{count} cell(s) found"), &[("count", &list.len().to_string())])); egui::ScrollArea::vertical().max_height(180.0).show(ui, |ui| { for item in list { let label = format!( @@ -149,7 +155,7 @@ pub(super) fn go_to(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, confi ui.text_edit_singleline(&mut r).labelled_by(label.id).request_focus(); }); d.values.insert("reference".into(), json!(r.clone())); - if ui.button("Special…").clicked() { + if ui.button(lang.tr("Special…")).clicked() { app.open_dialog("goToSpecial", json!({})); return; } diff --git a/crates/ui-egui/src/dialogs/format_cells.rs b/crates/ui-egui/src/dialogs/format_cells.rs index ed8153f143..9449438185 100644 --- a/crates/ui-egui/src/dialogs/format_cells.rs +++ b/crates/ui-egui/src/dialogs/format_cells.rs @@ -32,17 +32,29 @@ pub(super) fn format_cells(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog for name in ["General", "Number", "Currency", "Accounting", "Short Date", "Long Date", "Time", "Percentage", "Fraction", "Scientific", "Text"] { - let c = gridcraft_engine::cmd::format::format_code_for(name).to_string(); + let c = lang.format_locale().preset(name).to_string(); if cols[0].selectable_label(code == c, lang.tr(name)).clicked() { code = c; } } cols[1].label(egui::RichText::new(lang.tr("Sample")).strong()); - let preview = app.session.active().map(|doc| gridcraft_engine::display::format(&sample, &code, &doc.wb).text).unwrap_or_default(); + let preview = app + .session + .active() + .map(|doc| { + let format = gridcraft_engine::display::number_format(&code); + crate::formula_locale::localized_constant(&sample, lang.formula_locale()).map(str::to_owned).unwrap_or_else(|| { + gridcraft_engine::numfmt::format_value_with_region(&sample, &format, doc.wb.date_system, doc.wb.region).text + }) + }) + .unwrap_or_default(); cols[1].label(egui::RichText::new(preview).font(theme::ui_font(15.0))); cols[1].add_space(8.0); let label = cols[1].label(lang.tr("Type (custom format code):")); - cols[1].text_edit_singleline(&mut code).labelled_by(label.id); + let mut shown = lang.format_locale().display(&code); + if cols[1].text_edit_singleline(&mut shown).labelled_by(label.id).changed() { + code = lang.format_locale().canonical(&shown); + } for c in [ "0", "0.00", @@ -61,7 +73,8 @@ pub(super) fn format_cells(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog "[h]:mm:ss", "@", ] { - if cols[1].small_button(c).clicked() { + let c = lang.format_locale().suggestion(c); + if cols[1].small_button(lang.format_locale().display(c)).clicked() { code = c.to_string(); } } @@ -157,7 +170,7 @@ pub(super) fn format_cells(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog use gridcraft_engine::model::{BorderLine, BorderStyle}; let line = BorderLine { style: BorderStyle::Thin, color: gridcraft_engine::model::Color::Auto }; ui.horizontal(|ui| { - if ui.button(lang.tr("None")).clicked() { + if ui.button(lang.translation("Borders|None").unwrap_or_else(|| lang.tr("None"))).clicked() { st.borders = Default::default(); } if ui.button(lang.tr("Outline")).clicked() { diff --git a/crates/ui-egui/src/dialogs/insert_function.rs b/crates/ui-egui/src/dialogs/insert_function.rs index 38a695a80a..47d3614156 100644 --- a/crates/ui-egui/src/dialogs/insert_function.rs +++ b/crates/ui-egui/src/dialogs/insert_function.rs @@ -8,8 +8,10 @@ pub(super) fn insert_function(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dia use crate::function_library::{self as lib, ALL, MOST_RECENTLY_USED}; let language = app.ui.language; ui.horizontal(|ui| { - ui.label(language.tr("Search:")); - let r = ui.add(egui::TextEdit::singleline(&mut d.search).desired_width(300.0).hint_text(language.tr("e.g. lookup, average, date"))); + let label = ui.label(language.tr("Search:")); + let r = ui + .add(egui::TextEdit::singleline(&mut d.search).desired_width(300.0).hint_text(language.tr("e.g. lookup, average, date"))) + .labelled_by(label.id); // Once only, so Tab can move on to the category list. take_first_focus(d, &r); }); @@ -55,13 +57,14 @@ pub(super) fn insert_function(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dia d.list_index = 0; } d.values.insert("category".into(), json!(category)); - let locale = language.formula_locale(); - // The names and descriptions searched are the ones shown, so in the interface language. - let q = d.search.trim().to_lowercase(); + // An open formula keeps its input language, including the names offered for insertion. + let locale = app.editor.as_ref().filter(|e| e.is_formula()).map_or_else(|| language.formula_locale(), |e| e.locale); + let q = locale.fold_alias(d.search.trim()); let matches = |f: &lib::FnEntry| { q.is_empty() - || locale.function_name(&f.name).to_lowercase().contains(&q) - || language.function_description(&f.description).unwrap_or(&f.description).to_lowercase().contains(&q) + || locale.fold_alias(locale.function_name(&f.name)).contains(&q) + || locale.fold_alias(&f.name).contains(&q) + || locale.fold_alias(language.function_description(&f.description).unwrap_or(&f.description)).contains(&q) }; let hits: Vec<&lib::FnEntry> = if category == MOST_RECENTLY_USED { lib::recent(app).iter().filter_map(|n| lib::find(n)).filter(|f| matches(f)).collect() @@ -103,24 +106,29 @@ pub(super) fn insert_function(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dia }); if let Some(f) = hits.get(d.list_index) { ui.separator(); - ui.label(egui::RichText::new(crate::formula_locale::signature(&f.name, locale, language).unwrap_or_default()).strong()); - ui.label(crate::formula_locale::description(&f.name, locale, language).unwrap_or_default()); + ui.label(egui::RichText::new(crate::formula_locale::canonical_signature(&f.name, locale, language).unwrap_or_default()).strong()); + ui.label(crate::formula_locale::canonical_description(&f.name, language).unwrap_or_default()); } let mut open = true; ok_cancel(ui, confirm, &mut open); // The function counts as recently used once the formula is entered (the engine notes it). if *confirm && let Some(f) = hits.get(d.list_index) { - let n = app - .session - .active() - .map(|doc| crate::formula_locale::completion_name(&f.name, locale, &doc.wb, doc.wb.active_sheet())) - .unwrap_or(&f.name); - let cur = app.editor.as_ref().map(|e| e.text.clone()); - let text = match cur { - Some(t) if t.starts_with('=') => format!("{t}{n}("), - _ => format!("={n}("), - }; - app.begin_edit(Some(text), false); + if let Some(draft) = app.editor.as_mut().filter(|e| e.is_formula()) { + let owner = app.session.documents().iter().find(|doc| doc.uid == draft.doc); + if let Some((doc, sheet)) = owner.and_then(|doc| draft.sheet_in(&doc.wb).map(|sheet| (doc, sheet))) { + let name = crate::formula_locale::completion_name(&f.name, draft.locale, &doc.wb, sheet); + draft.caret = draft.text.chars().count(); + draft.anchor = draft.caret; + draft.insert_at_caret(&format!("{name}(")); + } + } else { + let name = app + .session + .active() + .map(|doc| crate::formula_locale::completion_name(&f.name, locale, &doc.wb, doc.wb.active_sheet())) + .unwrap_or_else(|| f.name.as_str().into()); + app.begin_edit(Some(format!("={name}(")), false); + } } if !open { *confirm = true; diff --git a/crates/ui-egui/src/dialogs/names.rs b/crates/ui-egui/src/dialogs/names.rs index d892b2999c..4b757c854b 100644 --- a/crates/ui-egui/src/dialogs/names.rs +++ b/crates/ui-egui/src/dialogs/names.rs @@ -1,42 +1,58 @@ use super::show::ok_cancel; use super::{Dialog, Json, Key, SheetApp, json}; +/// Shows scope captions without translating user sheet names or confusing them with the book option. +pub(super) fn scope_caption(scope: &Json, language: crate::i18n::Language) -> String { + let sheet = scope.get("sheet").and_then(Json::as_str).or_else(|| scope.as_str().filter(|s| *s != "Workbook")); + let workbook = language.tr("Workbook"); + match sheet { + Some(sheet) if sheet == "Workbook" || sheet == workbook => format!("{sheet} ({})", language.tr("Sheet")), + Some(sheet) => sheet.to_string(), + None => workbook.to_string(), + } +} + +/// Displays workbook-defined names and dispatches create, edit and delete actions while preserving their identities. pub(super) fn name_manager(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, open: &mut bool) { let list = app.session.run("formulas.nameManager", json!({})).unwrap_or(Json::Null); let names = list.as_array().cloned().unwrap_or_default(); let selected = names.get(d.list_index).cloned(); let field = |n: &Json, k: &str| n.get(k).and_then(Json::as_str).unwrap_or("").to_string(); + let identity = |n: &Json| n.get("scopeIdentity").cloned().unwrap_or_else(|| json!(field(n, "scope"))); ui.horizontal(|ui| { - if ui.button("New…").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("New…")).clicked() { app.open_dialog("defineName", json!({})); } - if ui.add_enabled(selected.is_some(), egui::Button::new("Edit…")).clicked() + if ui.add_enabled(selected.is_some(), egui::Button::new(crate::i18n::current(ui.ctx()).tr("Edit…"))).clicked() && let Some(n) = &selected { app.open_dialog( "defineName", json!({ - "name": field(n, "name"), "scope": field(n, "scope"), "comment": field(n, "comment"), - "refersTo": field(n, "refersTo"), "oldName": field(n, "name"), "oldScope": field(n, "scope"), + "name": field(n, "name"), "scope": identity(n), "comment": field(n, "comment"), + "refersTo": field(n, "refersTo"), "oldName": field(n, "name"), "oldScope": identity(n), }), ); } - if ui.add_enabled(selected.is_some(), egui::Button::new("Delete")).clicked() + if ui.add_enabled(selected.is_some(), egui::Button::new(crate::i18n::current(ui.ctx()).tr("Delete"))).clicked() && let Some(n) = &selected { - app.run_or_alert("formulas.deleteName", json!({"name": field(n, "name"), "scope": field(n, "scope")})); + // The delete command treats an absent/null scope as every scope for legacy callers. + let scope = identity(n); + let scope = if scope.is_null() { json!("Workbook") } else { scope }; + app.run_or_alert("formulas.deleteName", json!({"name": field(n, "name"), "scope": scope})); } }); ui.add_space(4.0); egui::ScrollArea::vertical().max_height(260.0).show(ui, |ui| { egui::Grid::new("names").striped(true).num_columns(4).show(ui, |ui| { - ui.strong("Name"); - ui.strong("Value"); - ui.strong("Refers To"); - ui.strong("Scope"); + ui.strong(crate::i18n::current(ui.ctx()).tr("Name")); + ui.strong(crate::i18n::current(ui.ctx()).tr("Value")); + ui.strong(crate::i18n::current(ui.ctx()).tr("Refers To")); + ui.strong(crate::i18n::current(ui.ctx()).tr("Scope")); ui.end_row(); if names.is_empty() { - ui.label(egui::RichText::new("No names defined").italics()); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("No names defined")).italics()); ui.end_row(); } for (i, n) in names.iter().enumerate() { @@ -45,14 +61,14 @@ pub(super) fn name_manager(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog } ui.label(n.get("value").map(|v| v.to_string()).unwrap_or_default().chars().take(30).collect::()); ui.label(field(n, "refersTo")); - ui.label(field(n, "scope")); + ui.label(scope_caption(&identity(n), crate::i18n::current(ui.ctx()))); ui.end_row(); } }); }); ui.add_space(8.0); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button(" Close ").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Close")).clicked() { *open = false; } }); diff --git a/crates/ui-egui/src/dialogs/show.rs b/crates/ui-egui/src/dialogs/show.rs index e4cd5bb24c..ae404d1d77 100644 --- a/crates/ui-egui/src/dialogs/show.rs +++ b/crates/ui-egui/src/dialogs/show.rs @@ -7,7 +7,7 @@ use super::data::{advanced_filter_form, data_validation_form, sort}; use super::find::{find, go_to}; use super::format_cells::format_cells; use super::insert_function::insert_function; -use super::names::{name_manager, paste_name}; +use super::names::{name_manager, paste_name, scope_caption}; use super::paste::{paste_special, paste_special_shortcuts}; use super::ref_edit::{RefLabel, SHEET_DELETED, end_pick, home_sheet_deleted, place_window, ref_edit, window_shown}; use super::spelling::spelling; @@ -208,11 +208,11 @@ pub fn show(app: &mut SheetApp, ctx: &egui::Context) { "formatControl" => crate::control_ui::format_dialog(app, ui, &mut d, &mut open), "controlQuestion" => crate::control_ui::question_dialog(app, ui, &mut d, &mut open), "agents" => { - ui.label("GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:"); + ui.label(crate::i18n::current(ui.ctx()).tr("GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:")); ui.add_space(4.0); ui.monospace("gridcraft --control 7979 # JSON-lines control channel\ngridcraft-cli mcp --connect 7979 # MCP bridged to this window\ngridcraft-cli mcp # headless MCP server"); ui.add_space(4.0); - ui.label(format!("{} engine commands are available. See docs/mcp.md and docs/control-protocol.md.", gridcraft_engine::command_specs().len())); + ui.label(craft_i18n::fmt(app.ui.language.tr("{count} engine commands are available. See docs/mcp.md and docs/control-protocol.md."), &[("count", &gridcraft_engine::command_specs().len().to_string())])); } "about" => about(ui, &mut d), "journal" => { @@ -254,14 +254,14 @@ pub fn show(app: &mut SheetApp, ctx: &egui::Context) { let name = d.values.get("alt").and_then(Json::as_str).unwrap_or("No picture selected"); ui.label(name); } else { - ui.label("Picture file path (PNG or JPEG):"); + ui.label(crate::i18n::current(ui.ctx()).tr("Picture file path (PNG or JPEG):")); let mut path = d.values.get("path").and_then(Json::as_str).unwrap_or("").to_string(); if ui.text_edit_singleline(&mut path).changed() { d.values.remove("base64"); d.values.insert("path".into(), json!(path)); } } - if (app.services.pick_picture.is_some() || app.services.pick_picture_async.is_some()) && ui.button("Browse…").clicked() { + if (app.services.pick_picture.is_some() || app.services.pick_picture_async.is_some()) && ui.button(crate::i18n::current(ui.ctx()).tr("Browse…")).clicked() { if let Some(start) = &app.services.pick_picture_async { let inbox = crate::Inbox::default(); start(inbox.clone()); @@ -275,13 +275,13 @@ pub fn show(app: &mut SheetApp, ctx: &egui::Context) { d.values.insert("path".into(), json!(path)); } } - ui.label("Description (optional):"); + ui.label(crate::i18n::current(ui.ctx()).tr("Description (optional):")); let mut alt = d.values.get("alt").and_then(Json::as_str).unwrap_or("").to_string(); if ui.text_edit_singleline(&mut alt).changed() { d.values.insert("alt".into(), json!(alt)); } if d.values.get("placement").and_then(Json::as_str) == Some("cell") { - ui.label(egui::RichText::new("Fits inside the selected cell and moves with its content.").small()); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Fits inside the selected cell and moves with its content.")).small()); } ok_cancel(ui, &mut confirm, &mut open); } @@ -338,41 +338,43 @@ pub fn show(app: &mut SheetApp, ctx: &egui::Context) { } } "saveChanges" => { - ui.label(format!("Do you want to save the changes you made to {}?", d.values.get("title").and_then(Json::as_str).unwrap_or("this workbook"))); + let language = app.ui.language; + let title = d.values.get("title").and_then(Json::as_str).unwrap_or(language.tr("this workbook")); + ui.label(craft_i18n::fmt(language.tr("Do you want to save the changes you made to {title}?"), &[("title", title)])); let quitting = d.values.get("quit").and_then(Json::as_bool) == Some(true); ui.horizontal(|ui| { for (label, answer) in [("Don't Save", crate::SaveAnswer::DontSave), ("Cancel", crate::SaveAnswer::Cancel), ("Save", crate::SaveAnswer::Save)] { - if ui.button(label).clicked() && app.answer_save_changes(answer, quitting, ui.ctx()) { + if ui.button(app.ui.language.tr(label)).clicked() && app.answer_save_changes(answer, quitting, ui.ctx()) { open = false; } } }); } "start" => { - ui.heading("Start a new workbook"); + ui.heading(app.ui.language.tr("Start a new workbook")); ui.horizontal_wrapped(|ui| { - if ui.button("Blank workbook").clicked() { + if ui.button(app.ui.language.tr("Blank workbook")).clicked() { app.run_or_alert("file.new", json!({})); open = false; } for (n, t) in gridcraft_engine::sample::SAMPLES { - if ui.button(*t).clicked() { + if ui.button(app.ui.language.tr(t)).clicked() { app.run_or_alert("file.new", json!({"sample": n})); open = false; } } }); ui.separator(); - ui.label(egui::RichText::new("Recent").strong()); + ui.label(egui::RichText::new(app.ui.language.tr("Recent")).strong()); for path in app.ui.recent.clone() { if ui.link(&path).clicked() { app.open_path(&path); open = false; } } - if ui.button("Open…").clicked() { + if ui.button(app.ui.language.tr("Open…")).clicked() { app.open_dialog("open", json!({})); open = false; } @@ -431,7 +433,7 @@ pub fn show(app: &mut SheetApp, ctx: &egui::Context) { } if confirm && let Some(cmd) = d.command { let params = build_params(&d); - match app.run(cmd, params) { + match app.run_from_ui(cmd, params) { Ok(r) => { open = false; if d.name == "solver" { @@ -617,6 +619,31 @@ pub(super) fn form_fields(app: &SheetApp, ui: &mut egui::Ui, d: &mut Dialog) { } }); } + Field::NameScope { key, label, sheets } => { + let mut scope = d.values.get(key).cloned().unwrap_or(Json::Null); + if let Some(legacy) = scope.as_str() { + scope = if legacy == "Workbook" { Json::Null } else { json!({"sheet":legacy}) }; + } + let label = ui.label(lang.tr(label)); + let shown = scope_caption(&scope, lang); + let menu_was_open = egui::Popup::is_any_open(ui.ctx()); + let picker = craft_ui::ComboBox::from_id_salt(("name_scope", key)) + .selected_text(shown) + .show_ui(ui, |ui| { + ui.selectable_value(&mut scope, Json::Null, lang.tr("Workbook")); + for sheet in &sheets { + let identity = json!({"sheet":sheet}); + let caption = scope_caption(&identity, lang); + ui.selectable_value(&mut scope, identity, caption); + } + }) + .response; + if menu_was_open || picker.has_focus() || craft_ui::ComboBox::is_open(ui.ctx(), picker.id) { + ui.input_mut(|i| i.consume_key(egui::Modifiers::NONE, egui::Key::Enter)); + } + picker.labelled_by(label.id); + d.values.insert(key.into(), scope); + } Field::Ref { key, label } => { ui.vertical(|ui| { let l = ui.label(lang.tr(label)); diff --git a/crates/ui-egui/src/dialogs/spelling.rs b/crates/ui-egui/src/dialogs/spelling.rs index d9ca98c9ef..539b1e4fcc 100644 --- a/crates/ui-egui/src/dialogs/spelling.rs +++ b/crates/ui-egui/src/dialogs/spelling.rs @@ -8,7 +8,7 @@ pub(super) fn spelling(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, op } let issues = r["issues"].as_array().cloned().unwrap_or_default(); let Some(it) = issues.get(d.list_index) else { - ui.label("The spelling check is complete for the entire sheet."); + ui.label(crate::i18n::current(ui.ctx()).tr("The spelling check is complete for the entire sheet.")); if ui.button("OK").clicked() { *open = false; } @@ -20,7 +20,7 @@ pub(super) fn spelling(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, op ui.label(egui::RichText::new(&word).strong().color(crate::theme::Tokens::get(ui.ctx()).danger)); let sugg: Vec = it["suggestions"].as_array().map(|a| a.iter().filter_map(|x| x.as_str().map(str::to_string)).collect()).unwrap_or_default(); - ui.label("Suggestions:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Suggestions:")); let mut pick = d.values.get("pick").and_then(Json::as_str).unwrap_or("").to_string(); for s in &sugg { if ui.selectable_label(pick == *s, s).clicked() { @@ -33,19 +33,19 @@ pub(super) fn spelling(app: &mut SheetApp, ui: &mut egui::Ui, d: &mut Dialog, op d.values.insert("pick".into(), json!(pick.clone())); let _ = app.session.run("selection.set", json!({"cell": cell})); ui.horizontal(|ui| { - if ui.button("Ignore Once").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Ignore Once")).clicked() { d.list_index += 1; } - if ui.button("Add to Dictionary").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Add to Dictionary")).clicked() { let _ = app.session.run("review.addToDictionary", json!({"word": word})); d.list_index += 1; } if !pick.is_empty() { - if ui.button("Change").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Change")).clicked() { app.run_or_alert("review.changeSpelling", json!({"cell": cell, "word": word, "to": pick})); d.list_index += 1; } - if ui.button("Change All").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Change All")).clicked() { app.run_or_alert("review.changeSpelling", json!({"word": word, "to": pick, "all": true})); d.list_index += 1; } diff --git a/crates/ui-egui/src/doc_windows.rs b/crates/ui-egui/src/doc_windows.rs index 7bf3a799d9..779e80e066 100644 --- a/crates/ui-egui/src/doc_windows.rs +++ b/crates/ui-egui/src/doc_windows.rs @@ -257,7 +257,7 @@ fn visible_windows(app: &SheetApp) -> Vec { fn window_title(app: &SheetApp, window: u64) -> String { let title = app.session.window_title(window).unwrap_or_default(); let dirty = app.session.window(window).and_then(|w| app.session.documents().iter().find(|d| d.uid == w.doc_uid)).is_some_and(|d| d.is_dirty()); - if dirty { format!("{title} — Edited") } else { title } + if dirty { format!("{title} — {}", app.ui.language.tr("Edited")) } else { title } } /// Outer rectangles for `n` windows arranged within `bounds` as View › Arrange All's `arrange` diff --git a/crates/ui-egui/src/editor.rs b/crates/ui-egui/src/editor.rs index 71fd2a1701..51022406a5 100644 --- a/crates/ui-egui/src/editor.rs +++ b/crates/ui-egui/src/editor.rs @@ -59,6 +59,8 @@ pub struct EditState { /// The cell's text when an F2-style edit began. Committing it unchanged leaves the cell alone /// (no undo step, the workbook stays clean). `None` for an edit started by typing. pub original: Option, + /// The literal text stored when the edit opened, independent of later workbook changes. + pub(crate) original_literal: Option>, /// Python mode: the text is a Python cell's code, edited in the formula bar's code editor and /// committed with Ctrl+Enter (Cmd+Enter on macOS) through `python.set`. pub python: bool, @@ -99,6 +101,7 @@ impl EditState { caret_to_end: true, completion: None, original, + original_literal: None, python: false, } } @@ -252,14 +255,14 @@ impl EditState { } let before = self.text.get(..self.byte_caret()).unwrap_or(""); let word: String = - before.chars().rev().take_while(|c| c.is_ascii_alphanumeric() || *c == '.' || *c == '_').collect::().chars().rev().collect(); + before.chars().rev().take_while(|c| c.is_alphanumeric() || *c == '.' || *c == '_').collect::().chars().rev().collect(); if word.is_empty() || word.chars().next().is_some_and(|c| c.is_ascii_digit()) { return; } - let u = word.to_ascii_uppercase(); + let u = self.locale.fold_alias(&word); // Not after a column letter of a reference like A1 (digits follow) – fine either way. - self.autocomplete = names.iter().filter(|n| n.starts_with(&u)).take(12).cloned().collect(); - if self.autocomplete.len() == 1 && self.autocomplete[0] == u { + self.autocomplete = names.iter().filter(|n| self.locale.fold_alias(n).starts_with(&u)).take(12).cloned().collect(); + if self.autocomplete.len() == 1 && self.locale.fold_alias(&self.autocomplete[0]) == u { self.autocomplete.clear(); } self.ac_index = self.ac_index.min(self.autocomplete.len().saturating_sub(1)); @@ -270,7 +273,7 @@ impl EditState { let Some(name) = self.autocomplete.get(self.ac_index).cloned() else { return false }; let caret_b = self.byte_caret(); let before = self.text.get(..caret_b).unwrap_or(""); - let wlen: usize = before.chars().rev().take_while(|c| c.is_ascii_alphanumeric() || *c == '.' || *c == '_').map(char::len_utf8).sum(); + let wlen: usize = before.chars().rev().take_while(|c| c.is_alphanumeric() || *c == '.' || *c == '_').map(char::len_utf8).sum(); let start = caret_b - wlen; let (Some(a), Some(b)) = (self.text.get(..start), self.text.get(caret_b..)) else { return false }; self.text = format!("{a}{name}({b}"); @@ -300,7 +303,7 @@ impl EditState { } let head = before.strip_suffix('(').unwrap_or(before); let name: String = - head.chars().rev().take_while(|c| c.is_ascii_alphanumeric() || *c == '.' || *c == '_').collect::().chars().rev().collect(); + head.chars().rev().take_while(|c| c.is_alphanumeric() || *c == '.' || *c == '_').collect::().chars().rev().collect(); if name.is_empty() || name.starts_with(|c: char| c.is_ascii_digit()) { return false; } @@ -348,7 +351,7 @@ impl EditState { let name: String = chars[..i] .iter() .rev() - .take_while(|c| c.is_ascii_alphanumeric() || **c == '.' || **c == '_') + .take_while(|c| c.is_alphanumeric() || **c == '.' || **c == '_') .collect::() .chars() .rev() @@ -356,7 +359,9 @@ impl EditState { if name.is_empty() { return None; } - return Some((name.to_ascii_uppercase(), arg)); + let explicit = name.get(..6).is_some_and(|prefix| prefix.eq_ignore_ascii_case("_xlfn.")); + let name = if explicit { name } else { self.locale.normalize_function_name(&name) }; + return Some((name, arg)); } depth -= 1; } @@ -368,12 +373,18 @@ impl EditState { } } -/// References in formula text with their byte spans and colour index (same reference text ⇒ +/// References in formula text with their byte spans and colour index (same reference text в‡’ /// same colour), for colouring the editor and outlining ranges on the grid. pub fn formula_refs(text: &str) -> Vec<(usize, usize, RangeRef, Option, usize)> { + formula_refs_in(text, gridcraft_engine::formula::FormulaLocale::En) +} + +/// Finds reference spans in the draft's formula language, preserving original UTF-8 byte offsets. +/// Localized errors and separators must not prevent reference colouring or point-mode outlines. +pub fn formula_refs_in(text: &str, locale: gridcraft_engine::formula::FormulaLocale) -> Vec<(usize, usize, RangeRef, Option, usize)> { let body = text.strip_prefix('=').or_else(|| text.strip_prefix('+')).unwrap_or(text); let offset = text.len() - body.len(); - let Ok(toks) = gridcraft_engine::formula::lexer::tokenize(body) else { return vec![] }; + let Ok(toks) = gridcraft_engine::formula::lexer::tokenize_locale(body, locale) else { return vec![] }; let mut out: Vec<(usize, usize, RangeRef, Option, usize)> = Vec::new(); let mut seen: std::collections::HashMap = std::collections::HashMap::new(); let mut i = 0; @@ -469,7 +480,7 @@ pub fn column_completion(sheet: &gridcraft_engine::model::Sheet, at: CellRef, ty } /// The part of `full` after the `typed` prefix, counted in characters: case folding can change -/// a character's byte length ("ß" is two bytes, "ẞ" three). +/// a character's byte length ("Гџ" is two bytes, "бєћ" three). pub fn completion_rest<'a>(full: &'a str, typed: &str) -> Option<&'a str> { let start = full.char_indices().nth(typed.chars().count())?.0; full.get(start..) diff --git a/crates/ui-egui/src/format_locale.rs b/crates/ui-egui/src/format_locale.rs new file mode 100644 index 0000000000..5b2ce6b321 --- /dev/null +++ b/crates/ui-egui/src/format_locale.rs @@ -0,0 +1,173 @@ +//! Number-format spelling at the UI boundary. Stored styles and API/XLSX codes stay canonical. + +/// Locale data for date/time tokens, bracketed colours and the UI's date/time presets. +pub(crate) struct FormatLocale { + pub tokens: &'static [(char, char)], + pub colors: &'static [(&'static str, &'static str)], + pub general: &'static str, + pub short_date: Option<&'static str>, + pub time: Option<&'static str>, +} + +pub(crate) const EN: FormatLocale = FormatLocale { tokens: &[], colors: &[], general: "General", short_date: None, time: None }; + +impl FormatLocale { + /// Spells a stored format for the editor without changing literals, currency tags or conditions. + pub fn display(&self, code: &str) -> String { + self.translate(code, true) + } + + /// Converts user-facing tokens back to the engine spelling; English tokens remain accepted. + pub fn canonical(&self, code: &str) -> String { + self.translate(code, false) + } + + /// Chooses a canonical format for a named UI category, leaving programmatic defaults alone. + pub fn preset<'a>(&self, category: &'a str) -> &'a str { + match category { + "Short Date" if self.short_date.is_some() => self.short_date.unwrap_or("m/d/yyyy"), + "Time" if self.time.is_some() => self.time.unwrap_or("h:mm:ss"), + _ => gridcraft_engine::cmd::format::format_code_for(category), + } + } + + /// Uses locale-specific short-date suggestions while retaining every other pattern, including 12-hour time. + pub fn suggestion<'a>(&self, code: &'a str) -> &'a str { + match code { + "m/d/yyyy" => self.short_date.unwrap_or(code), + _ => code, + } + } + + /// Maps only grammar tokens. Quoted/escaped/padded text and non-time brackets are opaque. + fn translate(&self, code: &str, to_local: bool) -> String { + let source = if to_local { "General" } else { self.general }; + if code.to_lowercase() == source.to_lowercase() { + return if to_local { self.general } else { "General" }.to_owned(); + } + let mut out = String::with_capacity(code.len()); + let mut pos = 0; + let mut quoted = false; + while let Some(rest) = code.get(pos..).filter(|rest| !rest.is_empty()) { + let Some(ch) = rest.chars().next() else { break }; + pos += ch.len_utf8(); + if ch == '\\' || (!quoted && matches!(ch, '_' | '*')) { + out.push(ch); + if let Some(next) = code.get(pos..).and_then(|tail| tail.chars().next()) { + out.push(next); + pos += next.len_utf8(); + } + } else if ch == '"' { + quoted = !quoted; + out.push(ch); + } else if quoted { + out.push(ch); + } else if ch == '[' { + let Some(end) = code.get(pos..).and_then(|tail| tail.find(']')) else { + out.push_str(rest); + break; + }; + let content = &code[pos..pos + end]; + out.push('['); + out.push_str(&self.bracket(content, to_local)); + out.push(']'); + pos += end + 1; + } else if let Some(marker) = + ["AM/PM", "A/P"].iter().find(|marker| rest.get(..marker.len()).is_some_and(|s| s.eq_ignore_ascii_case(marker))) + { + out.push_str(&rest[..marker.len()]); + pos += marker.len() - ch.len_utf8(); + } else if to_local + && self + .tokens + .iter() + .any(|(canonical, local)| ch.to_lowercase().eq(local.to_lowercase()) && !ch.to_lowercase().eq(canonical.to_lowercase())) + { + out.push('\\'); + out.push(ch); + } else { + out.push(self.token(ch, to_local)); + } + } + out + } + + /// Translates one date/time letter; case is insignificant for format tokens. + fn token(&self, ch: char, to_local: bool) -> char { + self.tokens + .iter() + .find_map(|(canonical, local)| { + let (source, target) = if to_local { (*canonical, *local) } else { (*local, *canonical) }; + ch.to_lowercase().eq(source.to_lowercase()).then_some(target) + }) + .unwrap_or(ch) + } + + /// Handles elapsed-time tokens and colour names without touching locale tags or comparisons. + fn bracket(&self, content: &str, to_local: bool) -> String { + for (canonical, local) in self.colors { + let (source, target) = if to_local { (*canonical, *local) } else { (*local, *canonical) }; + if content.to_lowercase() == source.to_lowercase() { + return target.to_owned(); + } + } + let normalized: String = content.chars().map(|ch| if to_local { ch.to_ascii_lowercase() } else { self.token(ch, false) }).collect(); + if let Some(first) = normalized.chars().next() + && matches!(first, 'h' | 'm' | 's') + && normalized.chars().all(|ch| ch == first) + { + return content.chars().map(|ch| self.token(ch, to_local)).collect(); + } + content.to_owned() + } +} + +#[cfg(test)] +mod tests { + use crate::i18n::Language; + + #[test] + fn unquoted_local_token_letters_remain_literals_after_editing() { + let locale = Language::Ru.format_locale(); + let shown = locale.display("0 г"); + assert_eq!(shown, "0 \\г"); + assert_eq!(locale.canonical(&shown), "0 \\г"); + } + + /// Date/time input and display agree, including elapsed hours and uppercase Russian input. + #[test] + fn russian_format_tokens_round_trip() { + let locale = Language::Ru.format_locale(); + for (canonical, local) in [ + ("dd.mm.yyyy", "дд.мм.гггг"), + ("hh:mm:ss", "чч:мм:сс"), + ("[h]:mm:ss", "[ч]:мм:сс"), + ("h:mm AM/PM", "ч:мм AM/PM"), + ("[Red]dd-mm-yy", "[Красный]дд-мм-гг"), + ] { + assert_eq!(locale.display(canonical), local); + assert_eq!(locale.canonical(local), canonical); + } + assert_eq!(locale.canonical("ДД.ММ.ГГГГ ЧЧ:ММ:СС"), "dd.mm.yyyy hh:mm:ss"); + assert_eq!(locale.canonical("dd.mm.yyyy"), "dd.mm.yyyy"); + assert_eq!(locale.display("General"), "Общий"); + for code in ["Общий", "общий", "ОБЩИЙ", "оБщИй"] { + assert_eq!(locale.canonical(code), "General"); + } + assert_eq!(locale.display("gEnErAl"), "Общий"); + assert_eq!(locale.canonical(r#""общий""#), r#""общий""#); + assert_eq!(locale.preset("Time"), "hh:mm:ss"); + assert_eq!(locale.suggestion("h:mm AM/PM"), "h:mm AM/PM"); + } + + /// Format literals, escaped padding, currency tags and conditions must survive verbatim. + #[test] + fn number_format_literals_are_not_translated() { + let locale = Language::Ru.format_locale(); + for code in [r#"dd "yyyy г. {sheet}" \\m"#, r#"[$USD-409][>=100]0.00;[Red]-0.00;_m*d@"#, "[unknown]dd.mm.yyyy", "[unterminated yyyy"] { + assert_eq!(locale.canonical(&locale.display(code)), code); + } + assert_eq!(locale.canonical(r#"дд "дд yyyy" \м"#), r#"dd "дд yyyy" \м"#); + assert_eq!(Language::En.format_locale().display("m/d/yyyy h:mm AM/PM"), "m/d/yyyy h:mm AM/PM"); + } +} diff --git a/crates/ui-egui/src/formula_bar.rs b/crates/ui-egui/src/formula_bar.rs index 96fbdcfc6b..9651cc16e6 100644 --- a/crates/ui-egui/src/formula_bar.rs +++ b/crates/ui-egui/src/formula_bar.rs @@ -6,7 +6,7 @@ use serde_json::json; use crate::SheetApp; use crate::code_editor::{self, FieldOptions, Lang}; -use crate::editor::formula_refs; +use crate::editor::formula_refs_in; use crate::icons::{self, Icon}; use crate::theme::{self, Tokens}; @@ -275,6 +275,8 @@ pub(crate) fn active_python(app: &SheetApp) -> Option<(usize, gridcraft_engine:: sh.cell(at).and_then(|c| c.py.clone()).map(|py| (d.wb.active_sheet(), at, py)) } +/// Returns formula-bar text for the active cell or spill anchor, localizing formulas while preserving Python code. +/// Respects hidden formulas and supplies picture descriptions when the selected cell contains a picture. fn active_input(app: &SheetApp) -> String { let Some(d) = app.session.active() else { return String::new() }; let Some(sh) = d.wb.active() else { return String::new() }; @@ -309,7 +311,7 @@ fn active_input(app: &SheetApp) -> String { // A legacy array formula shows in braces (`{=A1:A2*2}`), as `Cell::bar_text` does. if f.array.is_some() { format!("{{{shown}}}") } else { shown } } else { - gridcraft_engine::display::edit_text(&d.wb, sh, a) + crate::formula_locale::edit_text(&d.wb, sh, a, app.ui.language.formula_locale()) }; } String::new() @@ -429,7 +431,7 @@ fn name_box(app: &mut SheetApp, ui: &mut egui::Ui, t: &Tokens) -> Rect { let r = ui.interact(mb, id.with("drop"), Sense::click()); egui::Popup::menu(&r).show(|ui| { if names.is_empty() { - ui.label(egui::RichText::new("No names defined").italics()); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("No names defined")).italics()); } for n in names { if ui.button(&n).clicked() { @@ -493,7 +495,7 @@ pub fn editor_widget(app: &mut SheetApp, ui: &mut egui::Ui, id: egui::Id, font: let has_focus = focused == Some(id) || (mine && (ed.request_focus || focused.is_none())); let EditorKeyOutcome { action, arrow, cancel, to_python } = editor_shortcuts(app, ui, id, &mut ed, mine, has_focus); // The text widget. - let refs = formula_refs(&ed.text); + let refs = formula_refs_in(&ed.text, ed.locale); let t = Tokens::get(ui.ctx()); let on_sheet = id == egui::Id::unique("gridcraft.cell_editor"); let cell_text_color = if on_sheet { t.cell_text } else { t.text }; @@ -606,7 +608,11 @@ pub fn editor_widget(app: &mut SheetApp, ui: &mut egui::Ui, id: egui::Id, font: let names: Vec = function_names() .iter() .map(|name| { - app.session.active().map(|d| crate::formula_locale::completion_name(name, ed.locale, &d.wb, ed.sheet)).unwrap_or(name).to_string() + app.session + .active() + .map(|d| crate::formula_locale::completion_name(name, ed.locale, &d.wb, ed.sheet)) + .unwrap_or_else(|| name.into()) + .into_owned() }) .collect(); ed.update_autocomplete(&names); @@ -873,9 +879,10 @@ fn python_editor(app: &mut SheetApp, ui: &mut egui::Ui, id: egui::Id, width: f32 info } +/// Cycles the reference under the caret through relative and absolute anchors using the draft formula syntax. fn cycle_anchor(ed: &mut crate::editor::EditState) { let caret_b = ed.text.char_indices().nth(ed.caret).map(|(i, _)| i).unwrap_or(ed.text.len()); - for (a, b, ..) in formula_refs(&ed.text) { + for (a, b, ..) in formula_refs_in(&ed.text, ed.locale) { if a <= caret_b && caret_b <= b { let Some(r) = ed.text.get(a..b) else { return }; let cycled: String = r diff --git a/crates/ui-egui/src/formula_locale.rs b/crates/ui-egui/src/formula_locale.rs index d53c5fa341..e225365074 100644 --- a/crates/ui-egui/src/formula_locale.rs +++ b/crates/ui-egui/src/formula_locale.rs @@ -3,6 +3,8 @@ use crate::i18n::Language; use gridcraft_engine::formula::{self, FormulaLocale, ParseError}; use gridcraft_engine::model::Workbook; +/// Converts editor input to canonical engine syntax using the selected formula locale. +/// Preserves quoted text and explicit Text formatting, and resolves workbook names before aliases. pub(crate) fn canonical( text: &str, locale: FormulaLocale, @@ -10,27 +12,23 @@ pub(crate) fn canonical( sheet: usize, cell: gridcraft_engine::core::CellRef, ) -> Result { - // The editor hid the `_xludf.` prefixes of this cell's formula; confirming it unchanged keeps - // the user-defined calls instead of binding them to the built-ins of the same name. - if let Some(stored) = wb.sheet(sheet).and_then(|sh| sh.cell(cell)).filter(|c| c.formula.is_some()).map(|c| c.input_text()) - && has_udf_prefix(&stored) - && text == display(&stored, locale, wb, sheet) - { - return Ok(stored); - } if locale == FormulaLocale::En || wb.sheet(sheet).is_some_and(|sh| wb.styles.get(sh.style_id(cell)).num_fmt.as_str() == "@") { return Ok(text.to_string()); } - // Same formula detection as the engine's `input_to_cell` (no trimming: " =1" is text). + // The engine's leading =/+/- convention, with localized identifiers (no trimming). let body = text; - if body.starts_with('=') - || ((body.starts_with('+') || body.starts_with('-')) && body.chars().nth(1).is_some_and(|c| c.is_ascii_alphabetic() || c == '(')) - { + if is_formula_entry(body) { let known = |name: &str| wb.name(name, sheet).is_some() || wb.table(name).is_some(); // Match the engine's existing convenience for missing closing parentheses. let expr = formula::parse_closing_parens(body, |text| formula::parse_input(text, locale, known)); return Ok(format!("={}", formula::print(&expr?))); } + if let Some(error) = locale.parse_error(text.trim()) { + return Ok(error.as_str().to_string()); + } + if let Some(value) = localized_boolean(text.trim(), locale) { + return Ok(value.to_string()); + } // Decimal-comma number entry follows the same preference, without rewriting text or dates. let normalized = body.trim().replace(locale.decimal_separator(), "."); let number = normalized.strip_suffix('%').unwrap_or(&normalized); @@ -40,49 +38,79 @@ pub(crate) fn canonical( Ok(text.to_string()) } +/// Recognizes explicit formulas and signed expression starts without treating ordinary signed numbers as formulas. +fn is_formula_entry(text: &str) -> bool { + text.starts_with('=') || ((text.starts_with('+') || text.starts_with('-')) && text.chars().nth(1).is_some_and(|c| c.is_alphabetic() || c == '(')) +} + +/// The canonical `TRUE`/`FALSE` this locale spells `text` as, in any case; `None` for other text. +fn localized_boolean(text: &str, locale: FormulaLocale) -> Option<&'static str> { + ["TRUE", "FALSE"].into_iter().find(|value| locale.fold_alias(text) == locale.fold_alias(locale.function_name(value))) +} + +/// Localizes a stored canonical formula for display, preserving the original text on parse failure. +/// Workbook names keep precedence over aliases. Explicit UDF qualifiers preserve call identity during edits. pub(crate) fn display(text: &str, locale: FormulaLocale, wb: &Workbook, sheet: usize) -> String { - // English (and every language without a formula table) shows the stored text, `_xludf.` - // prefixes aside, and skips a parse per frame. + display_with_prefixes(text, locale, wb, sheet) +} + +fn display_with_prefixes(text: &str, locale: FormulaLocale, wb: &Workbook, sheet: usize) -> String { if locale == FormulaLocale::En { - return hide_udf_prefix(text, locale); + return text.to_string(); } let Some(body) = text.strip_prefix('=') else { return text.to_string() }; - let shown = formula::parse(body) + formula::parse(body) .and_then(|expr| formula::print_input(&expr, locale, |name| wb.name(name, sheet).is_some() || wb.table(name).is_some())) .map(|body| format!("={body}")) - .unwrap_or_else(|_| text.to_string()); - hide_udf_prefix(&shown, locale) + .unwrap_or_else(|_| text.to_string()) } -const UDF_PREFIX: &str = "_xludf."; - -fn has_udf_prefix(text: &str) -> bool { - text.to_ascii_lowercase().contains(UDF_PREFIX) +/// Display spelling of Boolean/error constants, independent of the grid's layout and formatting. +pub(crate) fn localized_constant(value: &gridcraft_engine::core::Value, locale: FormulaLocale) -> Option<&'static str> { + use gridcraft_engine::core::Value; + match value { + Value::Error(error) => Some(locale.error_name(*error)), + Value::Bool(value) => Some(locale.function_name(if *value { "TRUE" } else { "FALSE" })), + _ => None, + } } -/// Excel shows a user-defined call such as `_xludf.EOMONTH()` as `=EOMONTH()`. Only function -/// names lose the prefix: text literals and names keep it. -fn hide_udf_prefix(text: &str, locale: FormulaLocale) -> String { - let Some(body) = text.strip_prefix('=').filter(|b| has_udf_prefix(b)) else { return text.to_string() }; - let Ok(tokens) = formula::lexer::tokenize_locale(body, locale) else { return text.to_string() }; - let mut out = String::from("="); - let mut from = 0; - for t in tokens { - if matches!(t.tok, formula::lexer::Tok::Func(_)) - && body.get(t.start..t.start + UDF_PREFIX.len()).is_some_and(|p| p.eq_ignore_ascii_case(UDF_PREFIX)) +/// Localizes a typed value without reinterpreting literal cell text on an unchanged edit. +pub(crate) fn edit_text( + wb: &Workbook, + sheet: &gridcraft_engine::model::Sheet, + cell: gridcraft_engine::core::CellRef, + locale: FormulaLocale, +) -> String { + use gridcraft_engine::core::Value; + let raw = gridcraft_engine::display::edit_text(wb, sheet, cell); + if locale == FormulaLocale::En || wb.styles.get(sheet.style_id(cell)).num_fmt.as_str() == "@" { + return raw; + } + match sheet.value(cell) { + Value::Text(text) + if !raw.starts_with('\'') + && (is_formula_entry(&text) || localized_boolean(text.trim(), locale).is_some() || locale.parse_error(text.trim()).is_some()) => { - out.push_str(body.get(from..t.start).unwrap_or("")); - from = t.start + UDF_PREFIX.len(); + format!("'{raw}") } + value => localized_constant(&value, locale).map_or(raw, str::to_string), } - out.push_str(body.get(from..).unwrap_or("")); - out +} + +fn hint_function_name(name: &str, locale: FormulaLocale) -> &str { + if name.get(..6).is_some_and(|prefix| prefix.eq_ignore_ascii_case("_xlfn.")) { &name[6..] } else { locale.canonical_name(name) } } /// A function's argument hint. The name and separators follow the formula syntax; the argument /// names follow the interface language, all of them or none, so a hint never mixes two languages. pub(crate) fn signature(name: &str, locale: FormulaLocale, language: Language) -> Option { - let english = crate::formula_bar::function_signature(locale.canonical_name(name))?; + canonical_signature(hint_function_name(name, locale), locale, language) +} + +/// Formats a hint for a function already identified by its engine name. +pub(crate) fn canonical_signature(name: &str, locale: FormulaLocale, language: Language) -> Option { + let english = crate::formula_bar::function_signature(name)?; let Some((head, args)) = split_signature(&english) else { return Some(english) }; let separator = format!("{} ", locale.list_separator()); let args = match args.iter().map(|arg| translate_argument(arg, language)).collect::>>() { @@ -94,7 +122,12 @@ pub(crate) fn signature(name: &str, locale: FormulaLocale, language: Language) - /// A function's description in the interface language (English while untranslated). pub(crate) fn description(name: &str, locale: FormulaLocale, language: Language) -> Option { - let english = crate::formula_bar::function_description(locale.canonical_name(name))?; + canonical_description(hint_function_name(name, locale), language) +} + +/// Translates the description of a function already identified by its engine name. +pub(crate) fn canonical_description(name: &str, language: Language) -> Option { + let english = crate::formula_bar::function_description(name)?; Some(language.function_description(&english).map_or(english, str::to_string)) } @@ -124,9 +157,8 @@ fn translate_argument(arg: &str, language: Language) -> Option { } /// Avoid suggesting an alias that would call a workbook/table name instead of the function. -pub(crate) fn completion_name<'a>(name: &'a str, locale: FormulaLocale, wb: &Workbook, sheet: usize) -> &'a str { - let alias = locale.function_name(name); - if wb.name(alias, sheet).is_some() || wb.table(alias).is_some() { name } else { alias } +pub(crate) fn completion_name<'a>(name: &'a str, locale: FormulaLocale, wb: &Workbook, sheet: usize) -> std::borrow::Cow<'a, str> { + locale.unshadowed_function_name(name, |alias| wb.name(alias, sheet).is_some() || wb.table(alias).is_some()) } /// Engine-generated edit templates use canonical syntax. The only incomplete template is @@ -163,11 +195,137 @@ mod tests { // Spanish names and separators, from a localized name. assert_eq!(sig("suma", Es, Language::Es), "SUMA(número1; [número2]; ...)"); assert_eq!(description("SUMA", Es, Language::Es).as_deref(), Some("Suma los números.")); - // An argument list Spanish covers only in part stays English instead of mixing (the name - // is whatever the Spanish formula table calls SUMIFS). + // The expanded Spanish help uses the same catalog and keeps optional/repeated arguments. let sumifs = sig("SUMIFS", Es, Language::Es); - assert!(sumifs.ends_with("(sum_range; criteria_range1; criteria1; ...)"), "{sumifs}"); - assert_eq!(description("SUMIFS", Es, Language::Es).as_deref(), Some("Adds the cells that meet every condition.")); + let sum_range = Language::Es.function_argument("sum_range").unwrap(); + let criteria_range = Language::Es.function_argument("criteria_range").unwrap(); + let criteria = Language::Es.function_argument("criteria").unwrap(); + assert!(sumifs.ends_with(&format!("({sum_range}; {criteria_range}1; {criteria}1; ...)")), "{sumifs}"); + let english = crate::formula_bar::function_description("SUMIFS").unwrap(); + assert_eq!(description("SUMIFS", Es, Language::Es).as_deref(), Language::Es.function_description(&english)); assert_eq!(sig("IF", En, Language::En), "IF(logical_test, [value_if_true], [value_if_false])"); } } + +#[cfg(test)] +mod russian_help_tests { + use super::*; + /// Reported tooltip gaps use catalog translations while preserving syntax and optional arguments. + #[test] + fn reported_tooltips_translate_descriptions_and_argument_lists() { + for language in Language::ALL.into_iter().filter(|language| *language != Language::En) { + for (name, russian_name) in [("XLOOKUP", "ПРОСМОТРX"), ("COLUMN", "СТОЛБЕЦ"), ("RADIANS", "РАДИАНЫ")] { + let english = crate::formula_bar::function_description(name).unwrap(); + if matches!(language, Language::Da | Language::Sv | Language::Ka | Language::Lt) { + assert_eq!(description(name, FormulaLocale::Ru, language).as_deref(), Some(english.as_str())); + continue; + } + let expected = language.function_description(&english).unwrap(); + assert_ne!(expected, english); + assert_eq!(description(name, FormulaLocale::Ru, language).as_deref(), Some(expected)); + let english_signature = crate::formula_bar::function_signature(name).unwrap(); + let translated = signature(name, FormulaLocale::Ru, language).unwrap(); + let arg = |key| language.function_argument(key).unwrap(); + // Independently spell the known signatures so swapped arguments or optionality fail. + let expected = match name { + "XLOOKUP" => format!( + "{russian_name}({}; {}; {}; [{}]; [{}]; [{}])", + arg("lookup_value"), + arg("lookup_array"), + arg("return_array"), + arg("if_not_found"), + arg("match_mode"), + arg("search_mode") + ), + "COLUMN" => format!("{russian_name}([{}])", arg("reference")), + _ => format!("{russian_name}({})", arg("angle")), // The third case is RADIANS. + }; + assert_eq!(translated, expected, "{language:?}: {name}"); + assert_eq!(signature(name, FormulaLocale::En, Language::En).as_deref(), Some(english_signature.as_str())); + } + } + } + + /// Checks Russian help combines current catalog signatures with the chosen formula syntax. + #[test] + fn russian_help_uses_catalog_signature_and_selected_syntax() { + let translated_number = Language::Ru.function_argument("number").unwrap(); + let expected = format!("СУММ({translated_number}1; [{translated_number}2]; ...)"); + assert_eq!(signature("сумм", FormulaLocale::Ru, Language::Ru), Some(expected)); + assert_eq!(signature("SUM", FormulaLocale::En, Language::Ru), Some(format!("SUM({translated_number}1, [{translated_number}2], ...)"))); + let english = crate::formula_bar::function_description("IF").unwrap(); + let expected = Language::Ru.function_description(&english); + assert!(expected.is_some()); + assert_eq!(description("ЕСЛИ", FormulaLocale::Ru, Language::Ru).as_deref(), expected); + } + + /// SUM's hint follows each help catalog and falls back for interface-only languages. + #[test] + fn sum_hint_uses_each_language_catalog() { + for language in Language::ALL { + let locale = language.formula_locale(); + let hint = signature("SUM", locale, language).unwrap(); + let help = description("SUM", locale, language).unwrap(); + let fallback = matches!(language, Language::En | Language::Da | Language::Sv | Language::Ka | Language::Lt); + let number = if fallback { "number" } else { language.function_argument("number").unwrap() }; + let expected = match locale { + FormulaLocale::Ru => format!("СУММ({number}1; [{number}2]; ...)"), + FormulaLocale::Es | FormulaLocale::Pl => format!("SUMA({number}1; [{number}2]; ...)"), + FormulaLocale::Fr => format!("SOMME({number}1; [{number}2]; ...)"), + FormulaLocale::It => format!("SOMMA({number}1; [{number}2]; ...)"), + FormulaLocale::PtBr => format!("SOMA({number}1; [{number}2]; ...)"), + FormulaLocale::Tr => format!("TOPLA({number}1; [{number}2]; ...)"), + FormulaLocale::De => format!("SUMME({number}1; [{number}2]; ...)"), + FormulaLocale::En => format!("SUM({number}1, [{number}2], ...)"), + }; + assert_eq!(hint, expected, "{language:?}"); + if fallback { + assert_eq!(help, "Adds all the numbers in the arguments.", "{language:?}"); + } else { + assert_ne!(help, "Adds all the numbers in the arguments.", "{language:?}"); + } + } + use gridcraft_engine::core::{CellError, Value}; + assert_eq!(localized_constant(&Value::Error(CellError::Name), FormulaLocale::Ru), Some("#ИМЯ?")); + } +} + +#[cfg(test)] +mod help_structure_tests { + use super::*; + + /// Every translated hint preserves the canonical optional/repeated argument structure and locale syntax. + #[test] + fn translated_hints_preserve_catalog_structure() { + for function in gridcraft_engine::cmd::formulas::function_list() { + let name = function["name"].as_str().unwrap(); + let english = function["signature"].as_str().unwrap(); + let (_, arguments) = split_signature(english).unwrap(); + for language in Language::ALL { + let locale = language.formula_locale(); + let hint = canonical_signature(name, locale, language).unwrap(); + let separators = arguments.len().saturating_sub(1); + assert_eq!(hint.matches(locale.list_separator()).count(), separators, "{language:?}: {name}: {hint}"); + for punctuation in ['[', ']'] { + assert_eq!(hint.matches(punctuation).count(), english.matches(punctuation).count(), "{language:?}: {name}: {hint}"); + } + assert_eq!(hint.matches("...").count(), english.matches("...").count(), "{language:?}: {name}: {hint}"); + assert!(hint.starts_with(&format!("{}(", locale.function_name(name))), "{language:?}: {name}: {hint}"); + } + } + } +} + +#[cfg(test)] +mod explicit_hint_tests { + use super::*; + #[test] + fn explicit_french_trim_keeps_its_canonical_hint() { + let mut editor = crate::editor::EditState::new(1, 0, gridcraft_engine::core::CellRef::new(0, 0), "=_xlfn.TRIM(".into(), true, false); + editor.locale = FormulaLocale::Fr; + let (name, _) = editor.current_function().unwrap(); + assert_eq!(name, "_xlfn.TRIM"); + assert_eq!(signature(&name, FormulaLocale::Fr, Language::En), canonical_signature("TRIM", FormulaLocale::Fr, Language::En)); + assert_eq!(description(&name, FormulaLocale::Fr, Language::En), canonical_description("TRIM", Language::En)); + } +} diff --git a/crates/ui-egui/src/function_library.rs b/crates/ui-egui/src/function_library.rs index 434f4a6acd..b82a459ad0 100644 --- a/crates/ui-egui/src/function_library.rs +++ b/crates/ui-egui/src/function_library.rs @@ -86,9 +86,9 @@ pub fn in_category(id: &str) -> impl Iterator + '_ { } /// The name a function shows under in the interface language. -fn display_name<'a>(app: &SheetApp, name: &'a str) -> &'a str { +fn display_name<'a>(app: &SheetApp, name: &'a str) -> std::borrow::Cow<'a, str> { let locale = app.ui.language.formula_locale(); - app.session.active().map(|d| crate::formula_locale::completion_name(name, locale, &d.wb, d.wb.active_sheet())).unwrap_or(name) + app.session.active().map(|d| crate::formula_locale::completion_name(name, locale, &d.wb, d.wb.active_sheet())).unwrap_or_else(|| name.into()) } /// One menu row per function, with its description on hover; a click starts the formula. diff --git a/crates/ui-egui/src/grid/cell_paint.rs b/crates/ui-egui/src/grid/cell_paint.rs index f16e5e5bcb..58bdcf1f9f 100644 --- a/crates/ui-egui/src/grid/cell_paint.rs +++ b/crates/ui-egui/src/grid/cell_paint.rs @@ -96,6 +96,13 @@ pub(super) fn look(wb: &Workbook, si: usize, sh: &Sheet, c: CellRef, cf: &mut Cf (Look { style, fill, text_color }, cfl) } +/// Per-view formatting conventions and the available text space. +pub(super) struct TextOptions { + pub region: &'static gridcraft_engine::core::Region, + pub width_px: f32, + pub char_w: f32, +} + /// Text for a value with General narrowing to the available width. pub(super) fn display_text( wb: &Workbook, @@ -103,8 +110,7 @@ pub(super) fn display_text( c: CellRef, v: &Value, st: &Style, - width_px: f32, - char_w: f32, + options: TextOptions, ) -> (String, Option, bool, Option<(char, usize)>) { if sh.show_formulas && let Some(f) = sh.cell(c).and_then(|x| x.formula.as_ref()) @@ -122,13 +128,15 @@ pub(super) fn display_text( if code == "General" && let Value::Number(n) = v { - let max_chars = ((width_px - 4.0) / char_w).floor().max(1.0) as usize; - return match gridcraft_engine::numfmt::format_general_fit(*n, max_chars.min(11)) { + let max_chars = ((options.width_px - 4.0) / options.char_w).floor().max(1.0) as usize; + return match gridcraft_engine::numfmt::format_general_fit_with_region(*n, max_chars.min(11), options.region) { Some(t) => (t, None, true, None), None => ("#".repeat(max_chars.max(1)), None, true, None), }; } - let f = gridcraft_engine::display::format(v, code, wb); + let code = if code.len() > 4 * gridcraft_engine::numfmt::MAX_FORMAT_CODE_CHARS { "General" } else { code }; + let fmt = gridcraft_engine::display::number_format(code); + let f = gridcraft_engine::numfmt::format_value_with_region(v, &fmt, wb.date_system, options.region); (f.text, f.color.map(numfmt_color), f.numeric, f.fill) } diff --git a/crates/ui-egui/src/grid/interact.rs b/crates/ui-egui/src/grid/interact.rs index 7aaed8ff3d..5fb9d09cea 100644 --- a/crates/ui-egui/src/grid/interact.rs +++ b/crates/ui-egui/src/grid/interact.rs @@ -859,7 +859,7 @@ fn point_header(app: &mut SheetApp, wb: &Workbook, sh: &Sheet, range: RangeRef, let pressed = range; let range = if extend { ed.point - .and_then(|point| crate::editor::formula_refs(&ed.text).into_iter().find(|(start, end, ..)| (*start, *end) == point)) + .and_then(|point| crate::editor::formula_refs_in(&ed.text, ed.locale).into_iter().find(|(start, end, ..)| (*start, *end) == point)) .and_then(|(_, _, previous, previous_sheet, _)| { let previous_sheet = previous_sheet.as_deref().map(|name| wb.sheet_index(name)).unwrap_or(Some(edit_sheet)); if previous_sheet != Some(active_sheet) { diff --git a/crates/ui-egui/src/grid/menus.rs b/crates/ui-egui/src/grid/menus.rs index e9ee1a9763..5832f88550 100644 --- a/crates/ui-egui/src/grid/menus.rs +++ b/crates/ui-egui/src/grid/menus.rs @@ -2,9 +2,35 @@ use super::editor::popup_dismissed; use super::geo::Geo; use super::tables::filter_table_range; use super::{Arc, Drag, FillTag, RangeRef, Rect, Sense, Sheet, SheetApp, Stroke, Tokens, col_to_letters, json, pos2, vec2}; +use gridcraft_engine::cmd::data::FilterValue; + +/// Connected caption and command-value groups share one checkbox selection. +fn filter_selection_groups(checks: &[FilterValue], labels: &[String]) -> Vec { + /// Finds the representative while shortening the path for subsequent entries. + fn root(parents: &mut [usize], mut at: usize) -> usize { + while parents[at] != at { + parents[at] = parents[parents[at]]; + at = parents[at]; + } + at + } + let mut parents: Vec = (0..checks.len()).collect(); + let mut captions = std::collections::HashMap::new(); + let mut commands = std::collections::HashMap::new(); + for (index, (entry, caption)) in checks.iter().zip(labels).enumerate() { + let key = (entry.value == gridcraft_engine::core::Value::Empty, entry.label.to_ascii_lowercase()); + for previous in [captions.insert(caption, index), commands.insert(key, index)].into_iter().flatten() { + let a = root(&mut parents, previous); + let b = root(&mut parents, index); + parents[a] = b; + } + } + (0..checks.len()).map(|index| root(&mut parents, index)).collect() +} /// Draws the filter-header popup: sort, search/select-all, apply/clear, a lazily installed table autofilter, new-open search focus and dismissal. pub(super) fn filter_menu(app: &mut SheetApp, ui: &mut egui::Ui, geo: &Geo, was_open: bool) { + let lang = app.ui.language; let Some((col, row, at)) = app.grid.filter_menu else { return }; let Some(d) = app.session.active() else { return }; let wb = d.wb.clone(); @@ -31,7 +57,7 @@ pub(super) fn filter_menu(app: &mut SheetApp, ui: &mut egui::Ui, geo: &Geo, was_ } } let wb = app.session.active().map(|d| d.wb.clone()).unwrap_or(wb); - let values = gridcraft_engine::cmd::data::filter_values(&wb, si, col); + let values = gridcraft_engine::cmd::data::filter_entries(&wb, si, col); let key = egui::Id::unique(("filter_sel", col)); let search_key = egui::Id::unique(("filter_search", col)); let buttons_key = egui::Id::unique(("filter_buttons", col)); @@ -45,62 +71,95 @@ pub(super) fn filter_menu(app: &mut SheetApp, ui: &mut egui::Ui, geo: &Geo, was_ let response = area.show(ui.ctx(), |ui| { egui::Frame::popup(ui.style()).show(ui, |ui| { ui.set_width(230.0); - let ascending = ui.button("↑ Sort Ascending"); + let ascending = ui.button(format!("↑ {}", lang.tr("Sort Ascending"))); if ascending.clicked() { let _ = app.run("data.sortAscending", json!({"column": col_to_letters(col)})); close = true; } - let descending = ui.button("↓ Sort Descending"); + let descending = ui.button(format!("↓ {}", lang.tr("Sort Descending"))); if descending.clicked() { let _ = app.run("data.sortDescending", json!({"column": col_to_letters(col)})); close = true; } ui.separator(); - ui.label(egui::RichText::new("Filter").strong()); - let mut checks: Vec<(String, bool)> = ui.ctx().data_mut(|d| d.get_temp::>(key)).unwrap_or(values.clone()); + ui.label(egui::RichText::new(lang.tr("Filter")).strong()); + let mut checks: Vec = ui.ctx().data_mut(|d| d.get_temp::>(key)).unwrap_or(values.clone()); // A search narrows the list; Select All and Apply then only cover the matches. let mut search: String = ui.ctx().data_mut(|d| d.get_temp(search_key)).unwrap_or_default(); - let field = ui.add(egui::TextEdit::singleline(&mut search).hint_text("Search").desired_width(f32::INFINITY)); + let field = ui.add(egui::TextEdit::singleline(&mut search).hint_text(lang.tr("Search")).desired_width(f32::INFINITY)); if !was_open { field.request_focus(); } let needle = search.trim().to_lowercase(); - let matches = |v: &str| needle.is_empty() || v.to_lowercase().contains(&needle); - let all = checks.iter().filter(|(v, _)| matches(v)).all(|(_, b)| *b); + let label_for = |entry: &FilterValue| filter_value_label(entry, lang, &wb, si); + let labels: Vec = checks.iter().map(label_for).collect(); + let components = filter_selection_groups(&checks, &labels); + let matches = |entry: &FilterValue| needle.is_empty() || label_for(entry).to_lowercase().contains(&needle); + let all = checks.iter().filter(|entry| matches(entry)).all(|entry| entry.selected); let mut all_new = all; let label = if needle.is_empty() { "(Select All)" } else { "(Select All Search Results)" }; - if ui.checkbox(&mut all_new, label).changed() { - for c in checks.iter_mut().filter(|(v, _)| matches(v)) { - c.1 = all_new; + // Different displayed captions can select the same case-insensitive engine value. + let mut changed = std::collections::HashMap::new(); + if ui.checkbox(&mut all_new, lang.tr(label)).changed() { + for (index, entry) in checks.iter_mut().enumerate().filter(|(_, entry)| matches(entry)) { + entry.selected = all_new; + changed.insert(components[index], all_new); } } // Full width: shrunk to the longest value, the scroll bar sat mid-menu and the wheel only // worked over the values themselves (#432). egui::ScrollArea::vertical().max_height(220.0).auto_shrink([false, true]).show(ui, |ui| { - for (v, on) in checks.iter_mut().filter(|(v, _)| matches(v)) { - ui.checkbox(on, v.as_str()); + let mut groups: Vec<(String, Vec)> = Vec::new(); + let mut positions = std::collections::HashMap::new(); + for (index, entry) in checks.iter().enumerate().filter(|(_, entry)| matches(entry)) { + let label = label_for(entry); + let group = *positions.entry(label.clone()).or_insert_with(|| { + groups.push((label, Vec::new())); + groups.len() - 1 + }); + groups[group].1.push(index); + } + for (label, indices) in groups { + let mut selected = indices.iter().all(|&index| checks[index].selected); + if ui.checkbox(&mut selected, label).changed() { + for index in indices { + checks[index].selected = selected; + changed.insert(components[index], selected); + } + } } }); + if !changed.is_empty() { + for (index, entry) in checks.iter_mut().enumerate() { + if let Some(on) = changed.get(&components[index]) { + entry.selected = *on; + } + } + } ui.ctx().data_mut(|d| { d.insert_temp(key, checks.clone()); d.insert_temp(search_key, search.clone()); }); - let checks: Vec<(String, bool)> = checks.iter().map(|(v, on)| (v.clone(), *on && matches(v))).collect(); + let selected = |entry: &FilterValue| entry.selected && matches(entry); ui.separator(); ui.horizontal(|ui| { - let clear = ui.button("Clear Filter"); + let clear = ui.button(lang.tr("Clear Filter")); if clear.clicked() { let _ = app.run("data.filterBy", json!({"column": col_to_letters(col), "clear": true})); close = true; } // Nothing checked would hide every row, so Enter (unlike a click on Apply) does nothing then. - let any = checks.iter().any(|(_, on)| *on); - let apply = ui.button("Apply"); + let any = checks.iter().any(selected); + let apply = ui.button(lang.tr("Apply")); ui.ctx().data_mut(|d| d.insert_temp(buttons_key, vec![ascending.id, descending.id, clear.id, apply.id])); if apply.clicked() || (enter && any) { - let blanks = checks.iter().any(|(v, on)| v == "(Blanks)" && *on); - let vals: Vec = checks.iter().filter(|(v, on)| *on && v != "(Blanks)").map(|(v, _)| v.clone()).collect(); - let p = if checks.iter().all(|(_, b)| *b) { + let blanks = checks.iter().any(|entry| entry.value == gridcraft_engine::core::Value::Empty && selected(entry)); + let vals: Vec = checks + .iter() + .filter(|entry| selected(entry) && entry.value != gridcraft_engine::core::Value::Empty) + .map(|entry| entry.label.clone()) + .collect(); + let p = if checks.iter().all(selected) { json!({"column": col_to_letters(col), "clear": true}) } else { json!({"column": col_to_letters(col), "values": vals, "blanks": blanks}) @@ -113,7 +172,7 @@ pub(super) fn filter_menu(app: &mut SheetApp, ui: &mut egui::Ui, geo: &Geo, was_ }); if close || popup_dismissed(&response.response, was_open) { ui.ctx().data_mut(|d| { - d.remove::>(key); + d.remove::>(key); d.remove::(search_key); d.remove::>(buttons_key); }); @@ -121,6 +180,26 @@ pub(super) fn filter_menu(app: &mut SheetApp, ui: &mut egui::Ui, geo: &Geo, was_ } } +/// Localizes displayed formulas and constants while leaving the filter's command values canonical. +fn filter_value_label(entry: &FilterValue, language: crate::i18n::Language, wb: &gridcraft_engine::model::Workbook, sheet: usize) -> String { + if entry.value == gridcraft_engine::core::Value::Empty { + language.tr("(Blanks)").to_owned() + } else if entry.formula_shown { + crate::formula_locale::display(&entry.label, language.formula_locale(), wb, sheet) + } else if matches!(entry.value, gridcraft_engine::core::Value::Number(_)) { + wb.sheet(sheet).map_or_else( + || entry.label.clone(), + |sh| { + let style = wb.styles.get(sh.style_id(entry.source)); + let format = gridcraft_engine::display::number_format(style.num_fmt.as_str()); + gridcraft_engine::numfmt::format_value_with_region(&entry.value, &format, wb.date_system, wb.region).text + }, + ) + } else { + crate::formula_locale::localized_constant(&entry.value, language.formula_locale()).unwrap_or(&entry.label).to_owned() + } +} + /// Draws and dispatches the cell context menu, including Show Details when offered, clipboard and insert/format actions; closes on Esc or an outside press. pub(super) fn context_menu(app: &mut SheetApp, ui: &mut egui::Ui) { let Some(at) = app.grid.context_menu else { return }; diff --git a/crates/ui-egui/src/grid/quadrant.rs b/crates/ui-egui/src/grid/quadrant.rs index dedead69e8..f176ce35a9 100644 --- a/crates/ui-egui/src/grid/quadrant.rs +++ b/crates/ui-egui/src/grid/quadrant.rs @@ -237,8 +237,9 @@ fn paint_cells( outside: &[(CellRef, Rect, Look, Option)], merges: &[RangeRef], ) { + let language = crate::i18n::current(q.painter.ctx()); for cell in looks.iter().chain(outside) { - paint_cell(q, cell, merges); + paint_cell(q, cell, merges, language); } } @@ -310,11 +311,21 @@ fn should_expand_text(filter_space: f32, overflows: bool, across_end: u32, col: filter_space == 0.0 && (overflows || across_end > col) && !in_merge } +/// A cell's text as the interface language spells it: the stored formula under Show Formulas, a +/// localized `TRUE`/`FALSE` or error constant, or the text it was given. +fn localized_cell_text(text: String, wb: &Workbook, si: usize, sh: &Sheet, c: CellRef, v: &Value, language: crate::i18n::Language) -> String { + let locale = language.formula_locale(); + if sh.show_formulas && sh.cell(c).is_some_and(|cell| cell.formula.is_some()) { + return crate::formula_locale::display(&text, locale, wb, si); + } + crate::formula_locale::localized_constant(v, locale).map_or(text, str::to_string) +} + /// Paint one worksheet cell using its computed appearance and visible geometry. /// /// Handles text layout, wrapping, alignment, overflow into neighbouring cells, /// and clipping, while preserving cell decoration and merged-cell constraints. -fn paint_cell(q: &QuadrantPaint<'_>, painted: &(CellRef, Rect, Look, Option), merges: &[RangeRef]) { +fn paint_cell(q: &QuadrantPaint<'_>, painted: &(CellRef, Rect, Look, Option), merges: &[RangeRef], language: crate::i18n::Language) { let (cell, rect, lk, cfl) = painted; let c = *cell; let p = q.painter; @@ -355,10 +366,9 @@ fn paint_cell(q: &QuadrantPaint<'_>, painted: &(CellRef, Rect, Look, Option { pub(crate) cols: (u32, u32), } +/// Paints the current selection, active-cell boundary and selection handles in grid coordinates. pub(crate) fn paint_selection(input: SelectionPaintInput<'_>) { let SelectionPaintInput { painter: p, geo, sheet: sh, selection: sel, outline, tokens: t, app, rows, cols } = input; // Fill all areas except the active cell. @@ -106,7 +107,7 @@ pub(crate) fn paint_selection(input: SelectionPaintInput<'_>) { && app.session.active().is_some_and(|d| d.uid == ed.doc) { let origin = app.session.active().and_then(|d| d.wb.sheet(ed.sheet)).map_or(sh.name.as_str(), |o| o.name.as_str()); - for (_, _, r, sheet, idx) in crate::editor::formula_refs(&ed.text) { + for (_, _, r, sheet, idx) in crate::editor::formula_refs_in(&ed.text, ed.locale) { if !crate::editor::ref_is_on_sheet(sheet.as_deref(), origin, &sh.name) { continue; } diff --git a/crates/ui-egui/src/grid/show.rs b/crates/ui-egui/src/grid/show.rs index 34b76c982c..ce9b234383 100644 --- a/crates/ui-egui/src/grid/show.rs +++ b/crates/ui-egui/src/grid/show.rs @@ -812,6 +812,7 @@ pub(crate) fn paint_overlays(input: OverlayInput<'_>) { let _ = (wb, si); } +/// Paints cached page ranges, page labels and the print-area frame in the active sheet view. fn paint_pages(app: &mut SheetApp, p: &Painter, geo: &Geo, sh: &Sheet) { let Some(d) = app.session.active() else { return }; let key = (d.uid, d.revision, d.wb.active_sheet()); @@ -868,7 +869,7 @@ fn paint_pages(app: &mut SheetApp, p: &Painter, geo: &Geo, sh: &Sheet) { p.text( rr.center(), Align2::CENTER_CENTER, - format!("Page {n}"), + app.ui.language.tr("Page {page}").replace("{page}", &n.to_string()), theme::ui_bold((rr.height().min(rr.width()) / 6.0).clamp(14.0, 72.0)), Color32::from_black_alpha(45), ); diff --git a/crates/ui-egui/src/grid/tests.rs b/crates/ui-egui/src/grid/tests.rs index 4dffc729cc..8d7f2479ba 100644 --- a/crates/ui-egui/src/grid/tests.rs +++ b/crates/ui-egui/src/grid/tests.rs @@ -145,7 +145,8 @@ fn conditional_number_format_reaches_the_cell_text() { let text = |row: u32, cf: &mut CfCache| { let c = CellRef::new(row, 0); let (lk, _) = look(&wb, 0, sh, c, cf); - display_text(&wb, sh, c, &sh.value(c), &lk.style, 200.0, 7.0).0 + let options = super::cell_paint::TextOptions { region: &gridcraft_engine::core::region::EN_US, width_px: 200.0, char_w: 7.0 }; + display_text(&wb, sh, c, &sh.value(c), &lk.style, options).0 }; assert_eq!(text(0, &mut cf), "1"); assert_eq!(text(1, &mut cf), "3.00"); diff --git a/crates/ui-egui/src/i18n.rs b/crates/ui-egui/src/i18n.rs index 0ffd0ad09c..d6be1a52fc 100644 --- a/crates/ui-egui/src/i18n.rs +++ b/crates/ui-egui/src/i18n.rs @@ -10,24 +10,49 @@ use serde::{Deserialize, Serialize}; mod cs; +mod cs_functions; +mod da; mod de; +mod de_functions; mod el; +mod el_functions; +mod error_templates; mod es; mod es_functions; mod fr; +mod fr_functions; mod it; +mod it_functions; mod ja; +mod ja_functions; +mod ka; mod ko; +mod ko_functions; +mod lt; mod nl; +mod nl_functions; mod pl; +mod pl_functions; mod pt; +mod pt_functions; mod ro; +mod ro_functions; mod ru; +mod ru_formats; +mod ru_functions; mod sr; +mod sr_functions; +mod sv; mod tr; +mod tr_functions; mod uk; +mod uk_functions; mod vi; +mod vi_functions; mod zh; +mod zh_functions; +mod zh_tw; +mod zh_tw_functions; #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] @@ -37,6 +62,8 @@ pub enum Language { Es, El, Zh, + #[serde(rename = "zh-tw")] + ZhTw, Ja, Ko, Ru, @@ -53,14 +80,26 @@ pub enum Language { Vi, Nl, Ro, + Lt, + Ka, + Sv, + Da, } impl Language { - pub const ALL: [Self; 19] = [ + /// Number-format spelling and presets for the UI; stored format codes remain canonical. + pub(crate) fn format_locale(self) -> &'static crate::format_locale::FormatLocale { + match self { + Self::Ru => &ru_formats::FORMAT, + _ => &crate::format_locale::EN, + } + } + pub const ALL: [Self; 24] = [ Self::En, Self::Es, Self::El, Self::Zh, + Self::ZhTw, Self::Ja, Self::Ko, Self::Ru, @@ -75,6 +114,10 @@ impl Language { Self::Vi, Self::Nl, Self::Ro, + Self::Lt, + Self::Ka, + Self::Sv, + Self::Da, Self::Tr, ]; @@ -91,9 +134,14 @@ impl Language { pub fn name(self) -> &'static str { match self { Self::En => "English", + Self::Lt => "Lietuvių", + Self::Ka => "ქართული", + Self::Sv => "Svenska", + Self::Da => "Dansk", Self::Es => "Español", Self::El => "Ελληνικά", Self::Zh => "简体中文", + Self::ZhTw => "繁體中文", Self::Ja => "日本語", Self::Ko => "한국어", Self::Ru => "Русский", @@ -116,9 +164,14 @@ impl Language { pub const fn code(self) -> &'static str { match self { Self::En => "en", + Self::Lt => "lt", + Self::Ka => "ka", + Self::Sv => "sv", + Self::Da => "da", Self::Es => "es", Self::El => "el", Self::Zh => "zh", + Self::ZhTw => "zh-tw", Self::Ja => "ja", Self::Ko => "ko", Self::Ru => "ru", @@ -148,11 +201,30 @@ impl Language { } fn from_tag(tag: &str) -> Option { - match tag.trim().split(['-', '_']).next()?.to_ascii_lowercase().as_str() { + let mut parts = tag.trim().split('.').next()?.split(['-', '_']); + match parts.next()?.to_ascii_lowercase().as_str() { "en" => Some(Self::En), + "lt" => Some(Self::Lt), + "ka" => Some(Self::Ka), + "sv" => Some(Self::Sv), + "da" => Some(Self::Da), "es" => Some(Self::Es), "el" => Some(Self::El), - "zh" => Some(Self::Zh), + "zh" => { + // A script subtag decides; the region only when no script is given. `zh-Hans-HK` + // and `zh-Hans-MO` are Simplified Chinese in Hong Kong and Macau, both valid macOS + // identifiers, so their `hk`/`mo` region must not select Traditional. + let parts: Vec = parts.map(|part| part.to_ascii_lowercase()).collect(); + let has = |p: &str| parts.iter().any(|part| part == p); + let traditional = if has("hant") { + true + } else if has("hans") { + false + } else { + has("tw") || has("hk") || has("mo") + }; + Some(if traditional { Self::ZhTw } else { Self::Zh }) + } "ja" => Some(Self::Ja), "ko" => Some(Self::Ko), "ru" => Some(Self::Ru), @@ -185,8 +257,19 @@ impl Language { } } + /// Selects formula syntax for the interface language; languages without alias tables use English. pub fn formula_locale(self) -> gridcraft_engine::formula::FormulaLocale { - if self == Self::Es { gridcraft_engine::formula::FormulaLocale::Es } else { gridcraft_engine::formula::FormulaLocale::En } + match self { + Self::Es => gridcraft_engine::formula::FormulaLocale::Es, + Self::De => gridcraft_engine::formula::FormulaLocale::De, + Self::Pl => gridcraft_engine::formula::FormulaLocale::Pl, + Self::Fr => gridcraft_engine::formula::FormulaLocale::Fr, + Self::It => gridcraft_engine::formula::FormulaLocale::It, + Self::PtBr => gridcraft_engine::formula::FormulaLocale::PtBr, + Self::Ru => gridcraft_engine::formula::FormulaLocale::Ru, + Self::Tr => gridcraft_engine::formula::FormulaLocale::Tr, + _ => gridcraft_engine::formula::FormulaLocale::En, + } } /// Translates an interface label; untranslated labels fall back to English. @@ -197,6 +280,11 @@ impl Language { self.translated(text).unwrap_or_else(|| text.rsplit_once('|').map_or(text, |(_, label)| label)) } + /// Raw catalog lookup for contextual labels and shared message templates. + pub fn translation(self, text: &str) -> Option<&'static str> { + self.translated(text) + } + /// The catalog's own translation of `text`, or `None` when it falls back to English. fn translated(self, text: &str) -> Option<&'static str> { match self { @@ -205,6 +293,11 @@ impl Language { Self::El => el::translate(text), Self::Ja => ja::translate(text), Self::Zh => zh::translate(text), + Self::ZhTw => zh_tw::translate(text), + Self::Lt => lt::translate(text), + Self::Ka => ka::translate(text), + Self::Sv => sv::translate(text), + Self::Da => da::translate(text), Self::Ko => ko::translate(text), Self::Ru => ru::translate(text), Self::PtBr => pt::translate(text), @@ -222,32 +315,93 @@ impl Language { } } - pub(crate) fn tr_error(self, message: &str) -> String { - let message = if message.starts_with("command `") { crate::clean_error(message) } else { message.to_owned() }; + /// Translates an import warning for display in the interface. The file-format and engine + /// layers keep returning canonical English text to the CLI, control channel, and MCP. + pub(crate) fn open_warning(self, warning: &str) -> String { + if let Some(target) = warning.strip_prefix("missing picture ") { + return self.tr("missing picture {target}").replace("{target}", target); + } + if let Some(target) = warning.strip_prefix("chart ").and_then(|s| s.strip_suffix(" has no supported plot and was skipped")) { + return self.tr("chart {target} has no supported plot and was skipped").replace("{target}", target); + } + const DRAWING_WARNINGS: [&str; 3] = [ + "a histogram, waterfall, treemap… chart without its chart part was skipped", + "an embedded object (diagram, OLE…) was skipped", + "grouped shapes are not supported and were skipped", + ]; + for base in DRAWING_WARNINGS { + if let Some(suffix) = warning.strip_prefix(base) + && suffix.starts_with(" (") + && suffix.ends_with(')') + { + let translated = self.translation(base).unwrap_or(base); + return format!("{translated}{suffix}"); + } + } + self.translation(warning).unwrap_or(warning).to_owned() + } - let translated = self.tr(&message); - let fallback = message.rsplit_once('|').map_or(message.as_str(), |(_, label)| label); + /// Ribbon tabs can be nouns while their corresponding commands are verbs. + pub fn tr_tab(self, text: &str) -> &str { + self.translation(&format!("Tab|{text}")).unwrap_or_else(|| self.tr(text)) + } - if translated == fallback { message } else { translated.to_owned() } + /// Translates known fixed or templated diagnostics after removing engine command wrappers. + /// Unmatched parameter errors retain their command context; other command wrappers are cleaned. + /// Captured user data stays literal. + pub(crate) fn tr_error(self, message: &str) -> String { + let original_parameters = message.starts_with("invalid parameters for `").then_some(message); + let message = if message.starts_with("command `") || message.starts_with("invalid parameters for `") { + crate::clean_error(message) + } else { + message.to_owned() + }; + + // A hit in the catalog is the answer, even when the translation reads exactly like the + // English: a shared word (`Maximum`), or a `context|label` key whose translation is the + // label itself (`AutoSum|MAX` => `MAX`). Comparing the rendered text with the English + // would drop such a translation and show the raw `context|` key instead. + if let Some(translated) = self.translation(&message) { + return translated.to_owned(); + } + error_templates::format_message(&message, self).unwrap_or_else(|| original_parameters.map_or(message, str::to_owned)) } /// A worksheet function's description in this language, looked up by the English text of the /// function catalog; `None` when untranslated, and the help shows the English. pub fn function_description(self, english: &str) -> Option<&'static str> { - lookup(self.function_help()?.0, english) + self.function_help().and_then(|help| lookup(help.0, english)) } /// A function argument name in this language, given as the catalog spells it without /// brackets or index (`number`, `logical_test`). pub fn function_argument(self, english: &str) -> Option<&'static str> { - lookup(self.function_help()?.1, english) + self.function_help().and_then(|help| lookup(help.1, english)) } - /// The function help tables (descriptions, argument names) of the languages that have them. + /// Per-language function-help data, independent of formula aliases and message catalogs. fn function_help(self) -> Option<(HelpTable, HelpTable)> { match self { + Self::Cs => Some((cs_functions::DESCRIPTIONS, cs_functions::ARGUMENTS)), + Self::De => Some((de_functions::DESCRIPTIONS, de_functions::ARGUMENTS)), + Self::El => Some((el_functions::DESCRIPTIONS, el_functions::ARGUMENTS)), Self::Es => Some((es_functions::DESCRIPTIONS, es_functions::ARGUMENTS)), - _ => None, + Self::Fr => Some((fr_functions::DESCRIPTIONS, fr_functions::ARGUMENTS)), + Self::It => Some((it_functions::DESCRIPTIONS, it_functions::ARGUMENTS)), + Self::Ja => Some((ja_functions::DESCRIPTIONS, ja_functions::ARGUMENTS)), + Self::Ko => Some((ko_functions::DESCRIPTIONS, ko_functions::ARGUMENTS)), + Self::Nl => Some((nl_functions::DESCRIPTIONS, nl_functions::ARGUMENTS)), + Self::Pl => Some((pl_functions::DESCRIPTIONS, pl_functions::ARGUMENTS)), + Self::PtBr => Some((pt_functions::DESCRIPTIONS, pt_functions::ARGUMENTS)), + Self::Ro => Some((ro_functions::DESCRIPTIONS, ro_functions::ARGUMENTS)), + Self::Sr => Some((sr_functions::DESCRIPTIONS, sr_functions::ARGUMENTS)), + Self::Tr => Some((tr_functions::DESCRIPTIONS, tr_functions::ARGUMENTS)), + Self::Uk => Some((uk_functions::DESCRIPTIONS, uk_functions::ARGUMENTS)), + Self::Vi => Some((vi_functions::DESCRIPTIONS, vi_functions::ARGUMENTS)), + Self::Zh => Some((zh_functions::DESCRIPTIONS, zh_functions::ARGUMENTS)), + Self::ZhTw => Some((zh_tw_functions::DESCRIPTIONS, zh_tw_functions::ARGUMENTS)), + Self::Ru => Some((ru_functions::DESCRIPTIONS, ru_functions::ARGUMENTS)), + Self::En | Self::Da | Self::Sv | Self::Ka | Self::Lt => None, } } } @@ -325,6 +479,80 @@ fn name_sort_key(name: &str) -> String { mod tests { use super::*; + #[test] + fn a_translation_that_reads_like_english_is_still_a_translation() { + assert_eq!(Language::Es.tr_error("Options|General"), "General"); + assert_eq!(Language::Cs.tr_error("AutoSum|MAX"), "MAX"); + // An untranslated message is still shown whole, prefix and all. + assert_eq!(Language::PtBr.tr_error("Sheet|Unknown failure"), "Sheet|Unknown failure"); + } + + #[test] + fn drawing_warning_translation_preserves_its_location() { + let suffix = " (xl/drawings/drawing1.xml, object 7)"; + let cases = [ + ( + "a histogram, waterfall, treemap… chart without its chart part was skipped", + "Histogram, vodopádový nebo stromový graf… bez příslušné části grafu byl přeskočen.", + ), + ("an embedded object (diagram, OLE…) was skipped", "Vložený objekt (diagram, OLE…) byl přeskočen."), + ("grouped shapes are not supported and were skipped", "Seskupené obrazce nejsou podporovány a byly přeskočeny."), + ]; + + for (warning, translation) in cases { + assert_eq!(Language::Cs.open_warning(&format!("{warning}{suffix}")), format!("{translation}{suffix}")); + } + } + + #[test] + fn unmatched_import_warnings_keep_pipe_delimited_data() { + assert_eq!(Language::Fr.open_warning("Archive|Open"), "Archive|Open"); + assert_eq!(Language::Fr.open_warning("Open"), "Ouvrir"); + } + + /// Descriptions must not collapse distinct operations into the same translated operation. + #[test] + fn translated_help_keeps_distinct_math_and_statistics() { + let pairs = [ + ("Arccosine in radians.", "Arcsine in radians."), + ("Arccotangent in radians (0 to pi).", "Arctangent in radians."), + ("Rounds a number down to a multiple of significance.", "Rounds a number up to a multiple of significance."), + ("Rounds a number down to the nearest integer or multiple.", "Rounds a number up to the nearest integer or multiple."), + ("Rounds a number toward negative infinity to a multiple.", "Rounds a number toward positive infinity to a multiple."), + ("Rounds a number away from zero to a given number of digits.", "Rounds a number toward zero to a given number of digits."), + ("Sample variance.", "Population variance."), + ("Sample standard deviation.", "Population standard deviation."), + ("Sample skewness.", "Population skewness."), + ]; + for language in Language::ALL { + for (first, second) in pairs { + if let (Some(a), Some(b)) = (language.function_description(first), language.function_description(second)) { + assert_ne!(a, b, "{language:?}: distinct operations collapsed: {first} / {second}"); + } + } + } + } + + /// Programmatic identifiers inside descriptions are mathematical notation, not words to translate. + #[test] + fn translated_help_preserves_mathematical_identifiers() { + let examples = [ + ("Bessel function of the first kind, J_n(x).", "J_n(x)"), + ("Bessel function of the second kind, Y_n(x).", "Y_n(x)"), + ("Modified Bessel function of the first kind, I_n(x).", "I_n(x)"), + ("Modified Bessel function of the second kind, K_n(x).", "K_n(x)"), + ("Complementary error function, 1 - ERF(x).", "ERF(x)"), + ("Extracts data from XML with an XPath (not available; returns #VALUE!).", "XPath"), + ]; + for language in Language::ALL { + for (english, identifier) in examples { + if let Some(translated) = language.function_description(english) { + assert!(translated.contains(identifier), "{language:?}: missing {identifier} in {translated}"); + } + } + } + } + /// Every shipped catalog names GridCraft's own Diagram and Decorative Text features, and /// Diagram never repeats that catalog's chart word (both sit on the Insert tab). #[test] @@ -359,11 +587,50 @@ mod tests { assert!(table.windows(2).all(|pair| pair[0].0 < pair[1].0), "{language:?} function help is not sorted and unique"); for (english, translated) in table { assert!(!translated.is_empty(), "{language:?}: empty translation of {english:?}"); + assert!(!translated.contains(['\n', '\r']), "{language:?}: multiline translation of {english:?}"); + assert!( + !translated.contains(['\u{200b}', '\u{200c}', '\u{200d}', '\u{feff}']), + "{language:?}: invisible formatting in {english:?}" + ); } } } } + /// Dynamic UI messages must use the same placeholder names as their callers. + #[test] + fn dynamic_ui_messages_resolve_and_substitute_their_placeholders() { + let key = "{count} engine commands are available. See docs/mcp.md and docs/control-protocol.md."; + for (language, expected) in [ + (Language::Pl, "Dostępne polecenia silnika: 368. Zobacz docs/mcp.md i docs/control-protocol.md."), + (Language::ZhTw, "當前可用 368 個引擎命令。參見 docs/mcp.md 與 docs/control-protocol.md。"), + ] { + assert_eq!(craft_i18n::fmt(language.tr(key), &[("count", "368")]), expected); + } + assert_eq!( + craft_i18n::fmt(Language::Pl.tr("{contributors} contributors · {commits} commits"), &[("contributors", "16"), ("commits", "148")]), + "Współtwórcy: 16 · commity: 148" + ); + } + + /// AppKit's system dialogs should recognize every language offered by the interface. + #[test] + fn macos_bundle_declares_every_interface_language() { + let plist = include_str!("../../../packaging/macos/Info.plist.in"); + let array = plist.split_once("CFBundleLocalizations").unwrap().1.split_once("").unwrap().0; + let tags: Vec<&str> = array.split("").skip(1).map(|s| s.split_once("").unwrap().0).collect(); + assert_eq!(tags.len(), Language::ALL.len()); + for language in Language::ALL { + let tag = match language { + Language::PtBr => "pt-BR", + Language::Zh => "zh-Hans", + Language::ZhTw => "zh-Hant", + _ => language.code(), + }; + assert!(tags.contains(&tag), "{language:?} is missing from the macOS bundle"); + } + } + #[test] fn untranslated_text_falls_back_to_english() { let label = |key: &'static str| key.rsplit_once('|').map_or(key, |(_, label)| label); @@ -403,6 +670,13 @@ mod tests { } } + #[test] + fn polish_icon_tooltips_cover_the_gallery() { + for (name, _) in crate::icons::LIBRARY { + assert!(Language::Pl.translation(&format!("Icon|{name}")).is_some(), "{name}"); + } + } + /// The screen-reader names for the formula-bar controls must be translated in every catalog /// (no silent English fallback) and stay single-line labels. #[test] @@ -418,6 +692,36 @@ mod tests { } } + #[test] + fn paste_special_add_and_text_to_columns_comma_have_their_own_keys() { + // "Add" is also the Solver button and "Comma" also the cell style (Spanish Excel: Sumar + // vs Agregar, Coma vs Millares), so the two dialog options are keyed by context. English + // shows the plain label, and a catalog that translates the plain label translates the + // keyed one too, so the dialog option doesn't fall back to English. + for (keyed, plain) in [("Paste Special|Add", "Add"), ("Text to Columns|Comma", "Comma")] { + assert_eq!(Language::En.tr(keyed), plain); + for language in Language::ALL { + let shown = language.tr(keyed); + assert!(!shown.contains('|'), "{} shows a context prefix for {keyed}: {shown}", language.code()); + if language.tr(plain) != plain { + assert_ne!(shown, plain, "{} translates {plain:?} but not {keyed:?}", language.code()); + } + } + } + } + + /// Generated names should follow the interface language even in smaller catalogs. + #[test] + fn generated_names_have_translations_in_every_catalog() { + for language in Language::ALL.into_iter().filter(|language| *language != Language::En) { + for key in ["Book", "Sheet", "Generated|Column", "Generated|Row", "Series{n}"] { + let fallback = Language::En.tr(key); + assert_ne!(language.tr(key), fallback, "{language:?}: {key}"); + } + assert_eq!(language.tr("Series{n}").matches("{n}").count(), 1, "{language:?}"); + } + } + #[test] fn translations_never_show_the_context_prefix() { // `tr` returns a found translation as it is, so a catalog that keeps `context|` in its @@ -455,6 +759,13 @@ mod tests { assert_eq!(Language::from_tag("el_GR.UTF-8"), Some(Language::El)); assert_eq!(Language::parse("el"), Some(Language::El)); assert_eq!(Language::from_tag("zh-Hans-CN"), Some(Language::Zh)); + assert_eq!(Language::from_tag("zh-Hant-TW"), Some(Language::ZhTw)); + assert_eq!(Language::from_tag("zh_HK.UTF-8"), Some(Language::ZhTw)); + // A script subtag outranks the region: Hong Kong and Macau are also valid macOS locales + // for Simplified Chinese. + assert_eq!(Language::from_tag("zh-Hans-HK"), Some(Language::Zh)); + assert_eq!(Language::from_tag("zh-Hans-MO"), Some(Language::Zh)); + assert_eq!(Language::from_tag("zh-Hant-HK"), Some(Language::ZhTw)); assert_eq!(Language::from_tag("ko-KR"), Some(Language::Ko)); assert_eq!(Language::from_tag("RU_ru"), Some(Language::Ru)); assert_eq!(Language::from_tag("de-DE"), Some(Language::De)); @@ -546,3 +857,50 @@ mod tests { assert_eq!(name_sort_key("Čeština"), "cestina"); } } + +#[cfg(test)] +mod russian_tests { + use super::*; + /// Unknown parameter errors retain the engine's command context without affecting translated details. + #[test] + fn unmatched_parameter_errors_keep_the_command_context() { + let mut session = gridcraft_engine::Session::new(); + session.new_workbook(); + let error = session.execute("data.showLevels", serde_json::json!({})).unwrap_err().to_string(); + assert!(error.starts_with("invalid parameters for `data.showLevels`: "), "{error}"); + for language in [Language::En, Language::Ru] { + assert_eq!(language.tr_error(&error), error); + assert_eq!(language.tr_error("command `data.showLevels`: Untranslated outline failure {value}"), "Untranslated outline failure {value}"); + } + assert_eq!(Language::Ru.tr_error("invalid parameters for `chart`: Select a chart first."), Language::Ru.tr("Select a chart first.")); + assert_eq!(Language::Ru.tr_error("invalid parameters for `cell.set`: missing `cell`"), "Не указан параметр `cell`"); + } + + /// Checks Russian diagnostics remove command wrappers while preserving captured names and unknown messages. + #[test] + fn russian_error_messages_preserve_data_and_clean_command_wrappers() { + let ru = Language::Ru; + let syntax = ru.tr_error("There's a problem with this formula: expected `,` or `)`, found Semicolon"); + assert!(syntax.starts_with("Ошибка в формуле:")); + assert!(!syntax.contains("Semicolon")); + assert!(syntax.contains(ru.tr("Semicolon"))); + assert_eq!(ru.tr_error("command `chart` is not available right now: Select a chart first."), ru.tr("Select a chart first.")); + assert_eq!( + ru.tr_error("invalid parameters for `cell.set`: invalid cell reference `Лист{key}` for `cell`"), + "Неверная ссылка на ячейку `Лист{key}` в параметре `cell`" + ); + assert_eq!(ru.tr_error("unexpected end of formula"), ru.tr("unexpected end of formula")); + assert_eq!(ru.tr_tab("Insert"), ru.tr("Tab|Insert")); + assert_eq!(ru.tr_error("Sheet|Unknown failure"), "Sheet|Unknown failure"); + let mut session = gridcraft_engine::Session::new(); + session.new_workbook(); + let error = session.execute("cell.set", serde_json::json!({"cell":"A1","input":"=SUM()"})).unwrap_err().to_string(); + let translated = ru.tr_error(&error); + assert!(translated.contains(ru.formula_locale().function_name("SUM")), "{translated}"); + assert!(translated.contains(ru.function_argument("number").unwrap()), "{translated}"); + let error = session.execute("cell.set", serde_json::json!({"cell":"Лист{key}","input":"1"})).unwrap_err().to_string(); + let translated = ru.tr_error(&error); + assert!(translated.contains("Лист{key}")); + assert_ne!(translated, error); + } +} diff --git a/crates/ui-egui/src/i18n/cs.rs b/crates/ui-egui/src/i18n/cs.rs index eaee085cf6..a93d0e78ca 100644 --- a/crates/ui-egui/src/i18n/cs.rs +++ b/crates/ui-egui/src/i18n/cs.rs @@ -3,6 +3,65 @@ /// Returns the Czech translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Series{n}" => "Řada {n}", + "3 Arrows" => "3 šipky", + "3 Symbols" => "3 symboly", + "3 Traffic Lights" => "3 semafory", + "4 Ratings" => "4 hodnocení", + "5 Arrows" => "5 šipek", + "5 Quarters" => "5 čtvrtin", + "Applies to" => "Platí pro", + "Apply" => "Použít", + "Blanks" => "Prázdné", + "Conditional Formatting Rules Manager" => "Správce pravidel podmíněného formátování", + "Errors" => "Chyby", + "Format values where this formula is true:" => "Formátovat hodnoty, pro které platí tento vzorec:", + "Formula" => "Vzorec", + "Green Fill with Dark Green Text" => "Zelená výplň s tmavě zeleným textem", + "In the last 7 days" => "Za posledních 7 dní", + "Last month" => "Minulý měsíc", + "Last week" => "Minulý týden", + "Light Red Fill" => "Světle červená výplň", + "Light Red Fill with Dark Red Text" => "Světle červená výplň s tmavě červeným textem", + "Maximum" => "Maximum", + "Minimum" => "Minimum", + "New Formatting Rule" => "Nové pravidlo formátování", + "New Rule…" => "Nové pravidlo…", + "Next month" => "Příští měsíc", + "Next week" => "Příští týden", + "No Border" => "Bez ohraničení", + "Percent" => "Procento", + "Red Border" => "Červené ohraničení", + "Red Text" => "Červený text", + "This month" => "Tento měsíc", + "This week" => "Tento týden", + "Today" => "Dnes", + "Tomorrow" => "Zítra", + "Yellow Fill with Dark Yellow Text" => "Žlutá výplň s tmavě žlutým textem", + "and" => "a", + "Formula:" => "Vzorec:", + "OK" => "OK", + "There are no conditional formatting rules on this sheet." => "Na tomto listu nejsou žádná pravidla podmíněného formátování.", + "a linked (not embedded) picture was skipped" => "Propojený (nevložený) obrázek byl přeskočen.", + "missing picture {target}" => "Chybí obrázek {target}.", + "chart {target} has no supported plot and was skipped" => "Graf {target} nemá podporovaný typ vykreslení a byl přeskočen.", + "a histogram, waterfall, treemap… chart without its chart part was skipped" => { + "Histogram, vodopádový nebo stromový graf… bez příslušné části grafu byl přeskočen." + } + "an embedded object (diagram, OLE…) was skipped" => "Vložený objekt (diagram, OLE…) byl přeskočen.", + "grouped shapes are not supported and were skipped" => "Seskupené obrazce nejsou podporovány a byly přeskočeny.", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported." => { + "Import XLSB pouze s daty: vzorce se změní na uložené výsledky a nebudou se přepočítávat. Formátování, grafy, obrázky, makra a další funkce se neimportují; data, měna a procenta se mohou zobrazit jako čísla. Uložte nový soubor .xlsx; ukládání do XLSB není podporováno." + } + "XLSB module sheets were skipped." => "Listy modulů XLSB byly přeskočeny.", + "XLSB non-worksheet sheets were skipped." => "Listy XLSB, které nejsou listy sešitu, byly přeskočeny.", + "Unsupported XLSB future-record and alternate-content blocks were skipped." => { + "Nepodporované budoucí záznamy a bloky alternativního obsahu XLSB byly přeskočeny." + } + "Invalid XLSB merged ranges were skipped." => "Neplatné sloučené oblasti XLSB byly přeskočeny.", + "{count} items in this file were handled differently. First: {warning}" => { + "{count} položek v tomto souboru bylo zpracováno jinak. První: {warning}" + } "Diagram" => "Diagram", "Decorative Text" => "Ozdobný text", "Paste" => "Vložit", @@ -92,7 +151,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Find…" => "Najít…", "Replace…" => "Nahradit…", "Go To…" => "Přejít na…", - "Go To Special…" => "Přejít na jinak…", + "Go To Special…" => "Přejít na speciální…", "PivotTable" => "Kontingenční\ntabulka", "Recommended\nCharts" => "Doporučené\ngrafy", "Table" => "Tabulka", @@ -333,6 +392,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Print Entire Workbook" => "Vytisknout celý sešit", "Fit Sheet on One Page" => "Přizpůsobit list na jednu stránku", "Page Setup…" => "Vzhled stránky…", + "Page {page}" => "Stránka {page}", "Page {page} of {pages}" => "Stránka {page} z {pages}", "Nothing to print." => "Není co tisknout.", "Previous page" => "Předchozí stránka", @@ -595,8 +655,1975 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "Zastavit", "New Macro" => "Nové makro", "Show" => "Zobrazit", + "Generated|Column" => "Sloupec", + "Generated|Row" => "Řádek", + "Book" => "Sešit", + "Sheet" => "List", + "Count Numbers" => "Počet čísel", + "Type to filter…" => "Pište pro filtrování…", + "Nothing to paste." => "Žádná data k vložení.", + "No cells were found." => "Nebyly nalezeny žádné buňky.", + "Or select a category:" => "Nebo vyberte kategorii:", + "Most Recently Used" => "Naposledy použité", + "Insert Function…" => "Vložit funkci…", + "Paste Names…" => "Vložit názvy…", + "Macro name:" => "Název makra:", + "Shortcut key:" => "Klávesová zkratka:", + "Description:" => "Popis:", + "This workbook has no scripts or macros." => "Tento sešit neobsahuje skripty ani makra.", + "Check for Updates…" => "Vyhledat aktualizace…", + "Checking for updates…" => "Vyhledávání aktualizací…", + "Could not check for updates." => "Aktualizace se nepodařilo ověřit.", + "Check Again" => "Zkusit znovu", + "Search:" => "Hledat:", + "e.g. lookup, average, date" => "např. hledání, průměr, datum", + "All" => "Vše", "Collapse dialog" => "Sbalit dialogové okno", "Expand dialog" => "Rozbalit dialogové okno", + " OK " => " OK ", + " OK " => " OK ", + " Cancel " => " Zrušit ", + " Close " => " Zavřít ", + "Allow Edit Ranges…" => "Povolit úpravy oblastí…", + "Change Chart Type…" => "Změnit typ grafu…", + "Circular References:" => "Cyklické odkazy:", + "Column Width" => "Šířka sloupce", + "Comment:" => "Komentář:", + "Conditional Formatting…" => "Podmíněné formátování…", + "Data Analysis…" => "Analýza dat…", + "Data Table" => "Tabulka dat", + "Data validation" => "Ověření dat", + "Date:" => "Datum:", + "Delete Chart" => "Odstranit graf", + "Display Theme" => "Vzhled", + "Edit…" => "Úpravy…", + "Error Checking…" => "Kontrola chyb…", + "Evaluate Formula…" => "Vyhodnotit vzorec…", + "Expand Formula Bar" => "Rozbalit řádek vzorců", + "Fill…" => "Vyplnit…", + "Find" => "Najít", + "Footer:" => "Zápatí:", + "Format Cells" => "Formát buněk", + "Format cells" => "Formát buněk", + "Go To" => "Přejít na", + "Go To Special" => "Přejít na speciální", + "Goal Seek" => "Hledat řešení", + "Interface Language" => "Jazyk rozhraní", + "Interface Size" => "Velikost rozhraní", + "Maximum:" => "Maximum:", + "Minimum:" => "Minimum:", + "More Functions…" => "Další funkce…", + "Move or Copy" => "Přesunout nebo kopírovat", + "New…" => "Nový…", + "Next Sheet" => "Další list", + "Open…" => "Otevřít…", + "Options…" => "Možnosti…", + "Orientation:" => "Orientace textu:", + "Page Setup" => "Vzhled stránky", + "Paste Special" => "Vložit jinak", + "Previous Sheet" => "Předchozí list", + "Print…" => "Tisknout…", + "Properties…" => "Vlastnosti…", + "Remove Duplicates…" => "Odebrat duplicity…", + "Rename Sheet…" => "Přejmenovat list…", + "Replace" => "Nahradit", + "Row Height" => "Výška řádku", + "Save As…" => "Uložit jako…", + "Search" => "Hledat", + "Search Commands" => "Vyhledat příkazy", + "Select Data…" => "Vybrat data…", + "Series" => "Řady", + "Solver…" => "Řešitel…", + "Sort…" => "Seřadit…", + "Sparklines…" => "Minigrafy…", + "Special…" => "Speciální…", + "Spelling…" => "Pravopis…", + "Subtotal…" => "Mezisoučet…", + "Text to Columns…" => "Text do sloupců…", + "Text:" => "Text:", + "Time:" => "Čas:", + "Title:" => "Název:", + "Unhide sheet:" => "Zobrazit list:", + "Unprotect Sheet" => "Odemknout list", + "Wrap text" => "Zalamovat text", + "and:" => "a:", + "applies to" => "Platí pro", + "apply" => "Použít", + "book" => "Sešit", + "close" => "Zavřít", + "comment" => "Komentář", + "filter" => "Filtr", + "home" => "Domů", + "insert" => "Vložit", + "link" => "Odkaz", + "save" => "Uložit", + "search" => "Hledat", + "shapes" => "Obrazce", + "share" => "Sdílet", + "table" => "Tabulka", + "text" => "Text", + " Solve " => " Vyřešit ", + " (password)" => " (heslo)", + " (password, unlocked)" => " (heslo, odemčeno)", + " without {key}: another macro took it while recording" => " bez {key}: při nahrávání ji převzal jiný makroprogram", + " · at a breakpoint" => " · v bodě přerušení", + " · pass {at} of {of}" => " · průchod {at} z {of}", + " — Edited" => " — Změněno", + "% of all commits" => "% všech commitů", + "'This workbook' is protected." => "Tento sešit je zamčený.", + "'{file}' is protected." => "Soubor '{file}' je chráněn.", + "(Blanks)" => "(Prázdné)", + "(No suggestions)" => "(Žádné návrhy)", + "(Select All Search Results)" => "(Vybrat všechny výsledky hledání)", + "(Select All)" => "(Vybrat vše)", + "(unnamed)" => "(bez názvu)", + ")" => ")", + "+ Add Level" => "+ Přidat úroveň", + "+Bin" => "+Bin", + "+LOC" => "+LOC", + ", over no data" => ", bez přepsání dat", + ", {conflicts} of them hold data (red)" => ", {conflicts} z nich obsahuje data (červeně)", + ". Later steps can't be previewed." => ". Náhled dalších kroků nelze zobrazit.", + "100% Stacked Area" => "100% skládaný plošný", + "100% Stacked Bar" => "100% skládaný pruhový", + "100% Stacked Column" => "100% skládaný sloupcový", + "20% - Accent1" => "20 % – Zvýraznění1", + "20% - Accent2" => "20 % – Zvýraznění2", + "20% - Accent3" => "20 % – Zvýraznění3", + "20% - Accent4" => "20 % – Zvýraznění4", + "20% - Accent5" => "20 % – Zvýraznění5", + "20% - Accent6" => "20 % – Zvýraznění6", + "2×2 matrix" => "Matice 2×2", + "40% - Accent1" => "40 % – Zvýraznění1", + "40% - Accent2" => "40 % – Zvýraznění2", + "40% - Accent3" => "40 % – Zvýraznění3", + "40% - Accent4" => "40 % – Zvýraznění4", + "40% - Accent5" => "40 % – Zvýraznění5", + "40% - Accent6" => "40 % – Zvýraznění6", + "60% - Accent1" => "60 % – Zvýraznění1", + "60% - Accent2" => "60 % – Zvýraznění2", + "60% - Accent3" => "60 % – Zvýraznění3", + "60% - Accent4" => "60 % – Zvýraznění4", + "60% - Accent5" => "60 % – Zvýraznění5", + "60% - Accent6" => "60 % – Zvýraznění6", + "= {ref} on the example" => "= {ref} v příkladu", + "@{login}: {prs} PRs, {commits} commits, +{added} / −{deleted} lines (Δ {delta}), +{binary_added} / −{binary_deleted} binary assets, {first} – {last}" => { + "@{login}: {prs} PR, {commits} commitů, +{added} / −{deleted} řádků (Δ {delta}), +{binary_added} / −{binary_deleted} binárních souborů, {first} – {last}" + } + "A Date Occurring" => "Výskyt data", + "A Date Occurring…" => "Výskyt data…", + "A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft." => { + "Nezávisle vytvořený tabulkový procesor s otevřeným zdrojovým kódem v jazyce Rust. Součást ArtCraft." + } + "A print job is already being submitted." => "Tisková úloha se již odesílá.", + "A table can't overlap another table." => "Tabulka se nemůže překrývat s jinou tabulkou.", + "A to Z" => "A až Z", + "A workbook must contain at least one visible worksheet." => "Sešit musí obsahovat alespoň jeden viditelný list.", + "About" => "O aplikaci", + "Above/Below Average" => "Nad/pod průměrem", + "Abs" => "Abs.", + "Absolute: always these cells" => "Absolutní: vždy tyto buňky", + "Accent" => "Zvýraznění", + "Accent 1" => "Zvýraznění 1", + "Accent 2" => "Zvýraznění 2", + "Accent 3" => "Zvýraznění 3", + "Accent 4" => "Zvýraznění 4", + "Accent 5" => "Zvýraznění 5", + "Accent 6" => "Zvýraznění 6", + "Accent1" => "Zvýraznění1", + "Accent2" => "Zvýraznění2", + "Accent3" => "Zvýraznění3", + "Accent4" => "Zvýraznění4", + "Accent5" => "Zvýraznění5", + "Accent6" => "Zvýraznění6", + "Accessibility" => "Přístupnost", + "Action" => "Akce", + "Action Journal" => "Deník akcí", + "Actions" => "Akce", + "Activate Sheet" => "Aktivovat list", + "Active Field" => "Aktivní pole", + "Add" => "Přidat", + "Add Field" => "Přidat pole", + "Add Scenario" => "Přidat scénář", + "Add Step" => "Přidat krok", + "Add Watch (active cell)" => "Přidat sledování (aktivní buňka)", + "Add a step after the selected one" => "Přidat krok za vybraný krok", + "Add subtotal to (columns, e.g. C,D):" => "Přidat souhrn do (sloupce, např. C,D):", + "Add to Dictionary" => "Přidat do slovníku", + "Add-in and Automation" => "Doplněk a automatizace", + "Add-ins" => "Doplňky", + "Advanced" => "Upřesnit", + "Advanced Filter" => "Rozšířený filtr", + "Advanced…" => "Upřesnit…", + "Agent Control" => "Řízení agenty", + "Agent Control (MCP)…" => "Řízení agenty (MCP)…", + "Agents and other programs that run the macro get an error instead of the question." => { + "Agenti a další programy spouštějící makro obdrží místo dotazu chybu." + } + "Aggregate duplicates using" => "Sloučit duplicity pomocí", + "Align" => "Zarovnat", + "Alignment" => "Zarovnání", + "All Borders" => "Všechna ohraničení", + "All Charts" => "Všechny grafy", + "All Methods" => "Všechny metody", + "All Scripts" => "Všechny skripty", + "All done. We made {count} replacements." => "Hotovo. Provedeno {count} nahrazení.", + "All except borders" => "Vše kromě ohraničení", + "Allow" => "Povolit", + "Allow all users of this sheet to:" => "Povolit všem uživatelům tohoto listu:", + "Alpha:" => "Alfa:", + "Always run on this range" => "Vždy spouštět v této oblasti", + "Always this range:" => "Vždy tato oblast:", + "Analysis" => "Analýza", + "Analysis Tools" => "Analytické nástroje", + "Anova needs at least two groups, each with at least one number." => { + "Analýza rozptylu vyžaduje alespoň dvě skupiny, každou s alespoň jedním číslem." + } + "Anova: Single Factor" => "Analýza rozptylu: jeden faktor", + "Answer" => "Odpověď", + "Any value" => "Libovolná hodnota", + "Area" => "Plošný", + "Area of a circle" => "Obsah kruhu", + "Arrange" => "Uspořádat", + "Arrange\nAll" => "Uspořádat\nvše", + "Arrange All" => "Uspořádat vše", + "Arrange Windows" => "Uspořádat okna", + "Arrow" => "Šipka", + "Assign Action: {control}" => "Přiřadit akci: {control}", + "At each change in (column letter):" => "Při každé změně v (písmeno sloupce):", + "At most" => "Nejvýše", + "Auto Fill Options" => "Možnosti automatického vyplnění", + "AutoFill" => "Automatické vyplnění", + "AutoSum (⌘⇧T)" => "Automatický součet (⌘⇧T)", + "AutoSum|AVERAGE" => "PRŮMĚR", + "AutoSum|COUNT" => "POČET", + "AutoSum|MAX" => "MAX", + "AutoSum|MIN" => "MIN", + "AutoSum|SUM" => "SUMA", + "Automation in this workbook. GridCraft runs its own scripts; a file's VBA project is preserved but not executed." => { + "Automatizace v tomto sešitu. GridCraft spouští vlastní skripty; projekt VBA v souboru zachovává, ale nespouští." + } + "Available for column, bar, line, area and compatible combo charts." => { + "K dispozici pro sloupcové, pruhové, spojnicové, plošné a kompatibilní kombinované grafy." + } + "Average" => "Průměr", + "Average: {n}" => "Průměr: {n}", + "Average: {value}" => "Průměr: {value}", + "B4 (ISO)" => "B4 (ISO)", + "B5 (ISO)" => "B5 (ISO)", + "B6 (ISO)" => "B6 (ISO)", + "Background" => "Pozadí", + "Background Color:" => "Barva pozadí:", + "Bad" => "Špatné", + "Banded Columns" => "Pruhované sloupce", + "Banded Rows" => "Pruhované řádky", + "Bar" => "Pruhový", + "Before sheet (position, 0 = first):" => "Před list (pozice, 0 = první):", + "Begins With" => "Začíná na", + "Between…" => "Mezi…", + "Bin Range (blank for automatic bins):" => "Oblast intervalů (prázdné pro automatické intervaly):", + "Binary assets added" => "Přidané binární soubory", + "Binary assets removed" => "Odebrané binární soubory", + "Binomial theorem" => "Binomická věta", + "Blue" => "Modrá", + "Blue - White - Red" => "Modrá – bílá – červená", + "Bold (⌘B)" => "Tučné (⌘B)", + "Border" => "Ohraničení", + "Border presets" => "Předvolby ohraničení", + "Border preview" => "Náhled ohraničení", + "Borders|None" => "Žádné", + "Bottom" => "Dole", + "Bottom Border" => "Dolní ohraničení", + "Bottom Double Border" => "Dvojité dolní ohraničení", + "Bottom margin (in):" => "Dolní okraj (palce):", + "Box & Whisker" => "Krabicový", + "Brackets that grow" => "Přizpůsobivé závorky", + "Breakpoint" => "Bod přerušení", + "Breakpoint: the debugger stops before this step" => "Bod přerušení: ladicí program se zastaví před tímto krokem", + "Bring Forward" => "Přenést blíž", + "Bubble" => "Bublinový", + "By Changing Variable Cells:" => "Měněné buňky:", + "By changing cell:" => "Měněná buňka:", + "CHF German (Switzerland)" => "CHF němčina (Švýcarsko)", + "Calculated Field" => "Počítané pole", + "Calculated Field…" => "Počítané pole…", + "Calculation" => "Výpočet", + "Calculations" => "Výpočty", + "Can't Undo" => "Nelze vrátit zpět", + "Cancel Copy" => "Zrušit kopírování", + "Cannot auto-update this installation type. Please download manually." => { + "Tento typ instalace nelze aktualizovat automaticky. Stáhněte aktualizaci ručně." + } + "Cascade" => "Kaskáda", + "Category:" => "Kategorie:", + "Cell" => "Buňka", + "Cell Color" => "Barva buňky", + "Cell Controls" => "Ovládací prvky buněk", + "Cell Value" => "Hodnota buňky", + "Cell Values" => "Hodnoty buněk", + "Cell must contain a formula." => "Buňka musí obsahovat vzorec.", + "Cell must contain a value." => "Buňka musí obsahovat hodnotu.", + "Cells" => "Buňky", + "Cells with data" => "Buňky s daty", + "Cells…" => "Buňky…", + "Center Across Selection" => "Zarovnat na střed výběru", + "Change" => "Změnit", + "Change All" => "Změnit vše", + "Change Colors" => "Změnit barvy", + "Change Data Source" => "Změnit zdroj dat", + "Changed so far: {cells}" => "Dosud změněno: {cells}", + "Change…" => "Změnit…", + "Chart" => "Graf", + "Chart Layouts" => "Rozložení grafu", + "Chart Properties" => "Vlastnosti grafu", + "Chart Recommendations" => "Doporučené grafy", + "Chart Styles" => "Styly grafů", + "Chart Title" => "Název grafu", + "Chart Type" => "Typ grafu", + "Chart data range:" => "Oblast dat grafu:", + "Charts" => "Grafy", + "Check" => "Zkontrolovat", + "Check Cell" => "Zkontrolovat buňku", + "Check Macro" => "Zkontrolovat makro", + "Check Value Against Validation" => "Zkontrolovat hodnotu podle ověření dat", + "Check for\nUpdates…" => "Vyhledat\naktualizace…", + "Check passed: writes {cells}" => "Kontrola dokončena: zapíše do {cells}", + "Check shows on the grid what the macro reads and writes. Click a step's gutter to set a breakpoint." => { + "Kontrola ukáže v mřížce, co makro čte a zapisuje. Kliknutím na okraj kroku nastavíte bod přerušení." + } + "Check the inputs and show on the grid what the macro would change" => "Zkontrolovat vstupy a ukázat v mřížce, co by makro změnilo", + "Choose a PNG or JPEG no larger than 16 MB." => "Vyberte PNG nebo JPEG o velikosti nejvýše 16 MB.", + "Choose a light or dark appearance, or follow your system's theme." => "Vyberte světlý nebo tmavý vzhled, nebo použijte motiv systému.", + "Choose fields to add to report:" => "Vyberte pole pro sestavu:", + "Choose the cell to test." => "Vyberte buňku k otestování.", + "Choose the language used by the interface." => "Vyberte jazyk rozhraní.", + "Choose the range to repeat over." => "Vyberte oblast, přes kterou se má opakovat.", + "Circular References: {cell}" => "Cyklické odkazy: {cell}", + "Circular References: {range}" => "Cyklické odkazy: {range}", + "Clear Rules" => "Vymazat pravidla", + "Clear Slicer Filter" => "Vymazat filtr průřezu", + "Click once to follow. Click and hold to select this cell." => "Kliknutím otevřete odkaz. Kliknutím a podržením vyberete tuto buňku.", + "Click to copy" => "Kliknutím zkopírujete", + "Clipboard" => "Schránka", + "Close Window" => "Zavřít okno", + "Close the macro step editor first: it keeps its window until it closes itself, so its steps and debug run are not lost." => { + "Nejprve zavřete editor kroků makra: ponechává si své okno, dokud se sám nezavře, aby se neztratily kroky ani průběh ladění." + } + "Clustered Bar" => "Skupinový pruhový", + "Clustered Column" => "Skupinový sloupcový", + "Code Editor" => "Editor kódu", + "Collapse Ribbon" => "Sbalit pás karet", + "Color:" => "Barva:", + "Colorful" => "Barevné", + "Colors" => "Barvy", + "Colors & Layout" => "Barvy a rozložení", + "Column" => "Sloupec", + "Column chart" => "Sloupcový graf", + "Column width (characters):" => "Šířka sloupce (znaky):", + "Column width must be between 0 and 1800 pixels." => "Šířka sloupce musí být mezi 0 a 1800 pixely.", + "Column width must be between 0 and 255 characters." => "Šířka sloupce musí být mezi 0 a 255 znaky.", + "Column widths" => "Šířky sloupců", + "Column {number}" => "Sloupec {number}", + "Column {n}" => "Sloupec {n}", + "Columns" => "Sloupce", + "Columns (blank = all, e.g. A,C):" => "Sloupce (prázdné = všechny, např. A,C):", + "Columns:" => "Sloupce:", + "Combo" => "Kombinovaný", + "Comma" => "Oddělovač tisíců", + "Comma [0]" => "Oddělovač tisíců [0]", + "Command Palette…" => "Paleta příkazů…", + "Command:" => "Příkaz:", + "Comments and notes (C)" => "Komentáře a poznámky (C)", + "Commits" => "Commity", + "Compact" => "Kompaktní", + "Compatibility" => "Kompatibilita", + "Complete text from a matching value in the same column while typing in a cell." => { + "Při psaní do buňky doplňovat text podle odpovídající hodnoty ve stejném sloupci." + } + "Conditional formats" => "Podmíněné formáty", + "Confidence Level (%):" => "Hladina spolehlivosti (%):", + "Confidence Level for Mean (%), blank for none:" => "Hladina spolehlivosti průměru (%), prázdné pro žádnou:", + "Confidence interval" => "Interval spolehlivosti", + "Confidence level (%):" => "Hladina spolehlivosti (%):", + "Consolidate…" => "Sloučit…", + "Constant is Zero" => "Konstanta je nula", + "Constraint Cell Reference" => "Odkaz na buňky omezení", + "Constraint Operator" => "Operátor omezení", + "Constraint Value" => "Hodnota omezení", + "Constraint cells must be on the objective cell's sheet." => "Buňky omezení musí být na stejném listu jako cílová buňka.", + "Contains Text" => "Obsahuje text", + "Continue" => "Pokračovat", + "Contributors" => "Přispěvatelé", + "Contributors…" => "Přispěvatelé…", + "Convergence:" => "Konvergence:", + "Convert" => "Převést", + "Convert Text to Columns" => "Převést text na sloupce", + "Convert to Number" => "Převést na číslo", + "Copies" => "Počet kopií", + "Copy (⌘C)" => "Kopírovat (⌘C)", + "Copy Cells" => "Kopírovat buňky", + "Copy matching rows elsewhere" => "Kopírovat odpovídající řádky jinam", + "Copy to:" => "Kopírovat do:", + "Correlation" => "Korelace", + "Could not check for updates: {error}" => "Aktualizace se nepodařilo vyhledat: {error}", + "Couldn't decode the generated PDF." => "Vygenerované PDF se nepodařilo dekódovat.", + "Couldn't start the update ({error})" => "Aktualizaci se nepodařilo spustit ({error})", + "Count" => "Počet", + "Count: {n}" => "Počet: {n}", + "Count: {value}" => "Počet: {value}", + "CountA" => "Počet neprázdných", + "Covariance" => "Kovariance", + "Create" => "Vytvořit", + "Create Forecast Worksheet" => "Vytvořit list prognózy", + "Create Sparklines" => "Vytvořit minigrafy", + "Create a copy" => "Vytvořit kopii", + "Criteria range (optional):" => "Oblast kritérií (nepovinné):", + "Cube" => "Krychle", + "Cumulative Percentage" => "Kumulativní procento", + "Currency [0]" => "Měna [0]", + "Current Selection" => "Aktuální výběr", + "Current region" => "Aktuální oblast", + "Custom (%):" => "Vlastní (%):", + "Custom Views…" => "Vlastní zobrazení…", + "Customize Status Bar" => "Přizpůsobit stavový řádek", + "Cut (⌘X)" => "Vyjmout (⌘X)", + "Damping factor:" => "Koeficient tlumení:", + "Data Labels" => "Popisky dat", + "Data Range:" => "Oblast dat:", + "Data Table|Outline" => "Obrys", + "Data Tools" => "Datové nástroje", + "Data and Model" => "Data a model", + "Data rows:" => "Řádky dat:", + "Database" => "Databáze", + "Date &\nTime" => "Datum a\nčas", + "Date unit" => "Jednotka data", + "Day" => "Den", + "Debugging “{name}”" => "Ladění „{name}“", + "Decimal" => "Desetinné", + "Default sheet name" => "Výchozí název listu", + "Defer updates to dependent formulas until Calculate Now or Calculate Sheet. Formulas you edit still calculate immediately." => { + "Odložit přepočet závislých vzorců až do příkazu Přepočítat nebo Přepočítat list. Upravované vzorce se přepočítají okamžitě." + } + "Defined Names" => "Definované názvy", + "Delete Columns" => "Odstranit sloupce", + "Delete Macro" => "Odstranit makro", + "Delete Name" => "Odstranit název", + "Delete Object" => "Odstranit objekt", + "Delete PivotTable" => "Odstranit kontingenční tabulku", + "Delete Scenario" => "Odstranit scénář", + "Delete Script" => "Odstranit skript", + "Delete Slicer" => "Odstranit průřez", + "Delete columns" => "Odstraňovat sloupce", + "Delete rows" => "Odstraňovat řádky", + "Delete the selected step" => "Odstranit vybraný krok", + "Description (optional):" => "Popis (nepovinné):", + "Descriptive Statistics" => "Popisná statistika", + "Destination:" => "Cíl:", + "Details" => "Podrobnosti", + "Diagonal ↗" => "Úhlopříčně ↗", + "Diagonal ↘" => "Úhlopříčně ↘", + "Display name" => "Zobrazované jméno", + "Display:" => "Zobrazení:", + "Distributed" => "Distribuované", + "Divide" => "Dělit", + "Divided by" => "Děleno", + "Do you want to delete {what} “{name}”?" => "Chcete odstranit {what} „{name}“?", + "Do you want to save the changes you made to" => "Chcete uložit změny provedené v", + "Do you want to save the changes you made to {title}?" => "Chcete uložit změny provedené v {title}?", + "Does Not Contain Text" => "Neobsahuje text", + "Don't Replace" => "Nenahrazovat", + "Don't Save" => "Neukládat", + "Double" => "Dvojité", + "Double Accounting" => "Dvojité účetnické", + "Doughnut" => "Prstencový", + "Down, then over" => "Dolů, potom doprava", + "Downloading and installing update…" => "Stahování a instalace aktualizace…", + "Drag to fill cells. Drag from inside a cell to select a range." => "Tažením vyplníte buňky. Tažením zevnitř buňky vyberete oblast.", + "Draw Border" => "Nakreslit ohraničení", + "Duplicate Values" => "Duplicitní hodnoty", + "Duplicate Values…" => "Duplicitní hodnoty…", + "Duplicate the selected step" => "Duplikovat vybraný krok", + "Each column must hold:" => "Každý sloupec musí obsahovat:", + "Each input range needs at least two numbers." => "Každá vstupní oblast musí obsahovat alespoň dvě čísla.", + "Edit Cell" => "Upravit buňku", + "Edit Equation" => "Upravit rovnici", + "Edit Name" => "Upravit název", + "Edit Text Box" => "Upravit textové pole", + "Edited" => "Změněno", + "Editing" => "Úpravy", + "Effects" => "Efekty", + "Elements" => "Prvky", + "Else" => "Jinak", + "Ember" => "Žhavé uhlíky", + "Enabled" => "Povoleno", + "Encode Workbook" => "Zakódovat sešit", + "End date:" => "Koncové datum:", + "End time:" => "Koncový čas:", + "Ends With" => "Končí na", + "Engineering" => "Inženýrské", + "Enter Cell" => "Zadat do buňky", + "Entire column" => "Celý sloupec", + "Entire row" => "Celý řádek", + "Equal To…" => "Je rovno…", + "Error" => "Chyba", + "Error at character {position}: {message}" => "Chyba na znaku {position}: {message}", + "Error checking options" => "Možnosti kontroly chyb", + "Error message:" => "Chybová zpráva:", + "Error style" => "Styl chyby", + "Euler's identity" => "Eulerova identita", + "Evaluate" => "Vyhodnotit", + "Every cell must hold something" => "Každá buňka musí něco obsahovat", + "Evolutionary" => "Evoluční", + "Evolutionary: a genetic search for models that aren't smooth; every variable cell needs bounds." => { + "Evoluční: genetické hledání pro modely, které nejsou hladké; každá proměnná buňka musí mít meze." + } + "Example (what Check, Run and Debug use here):" => "Příklad (zde jej používají kontrola, spuštění a ladění):", + "Excel 97-2003 (.xls) is supported for import only. Save as .xlsx or another supported export format." => { + "Excel 97-2003 (.xls) lze pouze importovat. Uložte jako .xlsx nebo v jiném podporovaném formátu exportu." + } + "Executive" => "Manažerský", + "Expand/Collapse Field" => "Rozbalit/sbalit pole", + "Explanatory Text" => "Vysvětlující text", + "Exponential Smoothing" => "Exponenciální vyrovnávání", + "Export as CSV" => "Exportovat jako CSV", + "Export as CSV…" => "Exportovat jako CSV…", + "Export as PDF" => "Exportovat jako PDF", + "Export as PDF…" => "Exportovat jako PDF…", + "Export as Web Page (.html)…" => "Exportovat jako webovou stránku (.html)…", + "Exporting needs a file picker, which this window doesn't have." => "Export vyžaduje dialog výběru souboru, který toto okno nemá.", + "Expression" => "Výraz", + "F-Test Two-Sample for Variances" => "Dvouvýběrový F-test rozptylů", + "Field List" => "Seznam polí", + "File (Backstage view)" => "Soubor (zobrazení Backstage)", + "Fill Days" => "Vyplnit dny", + "Fill Down" => "Vyplnit dolů", + "Fill Formatting Only" => "Vyplnit jen formátování", + "Fill Left" => "Vyplnit doleva", + "Fill Months" => "Vyplnit měsíce", + "Fill Range With Input" => "Vyplnit oblast vstupem", + "Fill Right" => "Vyplnit doprava", + "Fill Series" => "Vyplnit řadu", + "Fill Up" => "Vyplnit nahoru", + "Fill Weekdays" => "Vyplnit pracovní dny", + "Fill Without Formatting" => "Vyplnit bez formátování", + "Fill Years" => "Vyplnit roky", + "Fill missing points using" => "Doplnit chybějící body pomocí", + "Filter (⌘⇧F)" => "Filtr (⌘⇧F)", + "Filter Column" => "Filtrovat sloupec", + "Filter Items" => "Filtrovat položky", + "Filtering" => "Filtrování", + "Filters" => "Filtry", + "Find All" => "Najít vše", + "Find Next" => "Najít další", + "Find and Replace" => "Najít a nahradit", + "Find what:" => "Najít:", + "Finding printers…" => "Hledání tiskáren…", + "Finished: {count} ran, one undo step." => "Dokončeno: spuštěno {count}, jeden krok vrácení zpět.", + "First" => "První", + "First Column" => "První sloupec", + "First commit" => "První commit", + "First row holds column names" => "První řádek obsahuje názvy sloupců", + "Fits inside the selected cell and moves with its content." => "Vejde se do vybrané buňky a přesouvá se s jejím obsahem.", + "Flash Fill (⌘E)" => "Dynamické doplňování (⌘E)", + "Font" => "Písmo", + "Fonts" => "Písma", + "Footer (in):" => "Zápatí (palce):", + "For each" => "Pro každý", + "Forecast" => "Prognóza", + "Forecast end (date or number; blank: a third of the history):" => "Konec prognózy (datum nebo číslo; prázdné: třetina historie):", + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Začátek prognózy (datum nebo číslo v historii; prázdné: za posledním bodem):" + } + "Format Cells|Fill" => "Výplň", + "Format Chart Area" => "Formát oblasti grafu", + "Format Chart Area…" => "Formát oblasti grafu…", + "Format Control: {control}" => "Formát ovládacího prvku: {control}", + "Format Painter" => "Kopírovat formát", + "Format Selection" => "Formát výběru", + "Format cells that are (value):" => "Formátovat buňky, které mají hodnotu:", + "Format cells that contain a date occurring:" => "Formátovat buňky obsahující datum:", + "Format cells that contain the text:" => "Formátovat buňky obsahující text:", + "Format columns" => "Formátovat sloupce", + "Format rows" => "Formátovat řádky", + "Formats (T)" => "Formáty (T)", + "Formula Auditing" => "Závislosti vzorců", + "Formula Bar|Enter" => "Potvrdit", + "Formula Builder" => "Tvůrce vzorců", + "Formulas (F)" => "Vzorce (F)", + "Formulas and number formats" => "Vzorce a číselné formáty", + "From Table/Range" => "Z tabulky/oblasti", + "From Text/CSV" => "Z textu/CSV", + "Function Library" => "Knihovna funkcí", + "Function…" => "Funkce…", + "Funnel" => "Trychtýřový", + "GRG Nonlinear" => "Nelineární GRG", + "GRG Nonlinear: a local optimum of a smooth model, from the current values." => { + "Nelineární GRG: místní optimum hladkého modelu vycházející z aktuálních hodnot." + } + "Get & Transform Data" => "Načíst a transformovat data", + "Get Cell" => "Načíst buňku", + "Get Data" => "Načíst data", + "Get Macro" => "Načíst makro", + "Goal Seeking found a solution: {value}" => "Hledání řešení nalezlo řešení: {value}", + "Good" => "Dobré", + "Good, Bad and Neutral" => "Dobré, špatné a neutrální", + "Grab bag" => "Náhodný výběr", + "Gradebook" => "Klasifikační přehled", + "Grand Totals" => "Celkové součty", + "Graphite" => "Grafit", + "Grayscale" => "Stupně šedi", + "Greater Than…" => "Větší než…", + "Greater than or equal to" => "Větší nebo rovno", + "Green" => "Zelená", + "Green - White - Red" => "Zelená – bílá – červená", + "Green - Yellow - Red" => "Zelená – žlutá – červená", + "GridCraft User" => "Uživatel GridCraft", + "GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:" => { + "GridCraft lze plně ovládat agenty. Každá položka nabídky, tlačítko a gesto je příkaz:" + } + "GridCraft on getartcraft.com" => "GridCraft na getartcraft.com", + "GridCraft {version} is the newest version available." => "GridCraft {version} je nejnovější dostupná verze.", + "GridCraft {version} is up to date." => "GridCraft {version} je aktuální.", + "Group Field" => "Seskupit pole", + "Group by Months" => "Seskupit podle měsíců", + "Group by Quarters" => "Seskupit podle čtvrtletí", + "Group by Years" => "Seskupit podle roků", + "Grouped By:" => "Seskupeno podle:", + "Growth" => "Růst", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "Záhlaví (&L vlevo, &C uprostřed, &R vpravo; &P stránka, &N počet stránek, &D datum, &A list):" + } + "Header (in):" => "Záhlaví (palce):", + "Header Row" => "Řádek záhlaví", + "Heading 1" => "Nadpis 1", + "Heading 2" => "Nadpis 2", + "Heading 3" => "Nadpis 3", + "Heading 4" => "Nadpis 4", + "Hebrew עברית" => "Hebrejština עברית", + "Height" => "Výška", + "Height " => "Výška ", + "Height: {size} ({px} pixels)" => "Výška: {size} ({px} pixelů)", + "Help" => "Nápověda", + "Hex" => "Hex", + "Hidden" => "Skryté", + "Hidden:" => "Skryté:", + "Hidden: {sheets}" => "Skryté: {sheets}", + "Hide & Unhide" => "Skrýt a zobrazit", + "Hide GridCraft" => "Skrýt GridCraft", + "Hide Others" => "Skrýt ostatní", + "Highlight Cells Rules" => "Pravidla zvýraznění buněk", + "Histogram" => "Histogram", + "Horizontal (Category) Axis Labels:" => "Popisky vodorovné osy (kategorie):", + "Horizontal Borders" => "Vodorovná ohraničení", + "Horizontal axis title:" => "Název vodorovné osy:", + "Household Budget" => "Rodinný rozpočet", + "Hyperlink" => "Hypertextový odkaz", + "Hypothesized Mean Difference:" => "Předpokládaný rozdíl středních hodnot:", + "Icon|book" => "Kniha", + "Icon|calculator" => "Kalkulačka", + "Icon|chart" => "Graf", + "Icon|check" => "Zaškrtnutí", + "Icon|close" => "Zavřít", + "Icon|comment" => "Komentář", + "Icon|filter" => "Filtr", + "Icon|folder" => "Složka", + "Icon|home" => "Domů", + "Icon|line chart" => "Spojnicový graf", + "Icon|link" => "Odkaz", + "Icon|lock" => "Zámek", + "Icon|minus" => "Minus", + "Icon|note" => "Poznámka", + "Icon|pen" => "Pero", + "Icon|picture" => "Obrázek", + "Icon|pie chart" => "Výsečový graf", + "Icon|plus" => "Plus", + "Icon|save" => "Uložit", + "Icon|scatter" => "Bodový graf", + "Icon|search" => "Hledat", + "Icon|settings" => "Nastavení", + "Icon|shapes" => "Obrazce", + "Icon|share" => "Sdílet", + "Icon|sum" => "Součet", + "Icon|table" => "Tabulka", + "Icon|text" => "Text", + "Icon|theme" => "Motiv", + "Icon|trace" => "Sledovat závislosti", + "Icon|validation" => "Ověření", + "If cell" => "Pokud buňka", + "If {cell} is empty" => "Pokud je {cell} prázdná", + "If {cell} isn't empty" => "Pokud {cell} není prázdná", + "If {cell} {op} {value}" => "Pokud {cell} {op} {value}", + "Ignore Once" => "Přeskočit jednou", + "Ignore blank" => "Přeskakovat prázdné", + "Illustrations" => "Ilustrace", + "In Cell" => "V buňce", + "In-cell dropdown" => "Rozevírací seznam v buňce", + "Include forecast statistics" => "Zahrnout statistiky prognózy", + "Indent" => "Odsadit", + "Infinity" => "Nekonečno", + "Information" => "Informace", + "Ink Stroke" => "Tah inkoustem", + "Ink to Shape" => "Rukopis na obrazec", + "Input" => "Vstup", + "Input Range:" => "Vstupní oblast:", + "Input X Range:" => "Vstupní oblast X:", + "Input Y Range:" => "Vstupní oblast Y:", + "Input Y range and input X range must have the same number of rows." => "Vstupní oblasti Y a X musí mít stejný počet řádků.", + "Input Y range must be a single column." => "Vstupní oblast Y musí být jediný sloupec.", + "Input cell reference is not valid." => "Odkaz na vstupní buňku není platný.", + "Input message:" => "Vstupní zpráva:", + "Input range contains non-numeric data." => "Vstupní oblast obsahuje nečíselná data.", + "Input range must be a single row or column." => "Vstupní oblast musí být jediný řádek nebo sloupec.", + "Input ranges must have the same number of values." => "Vstupní oblasti musí mít stejný počet hodnot.", + "Inputs" => "Vstupy", + "Insert Calculated Field" => "Vložit počítané pole", + "Insert Chart" => "Vložit graf", + "Insert Columns" => "Vložit sloupce", + "Insert Cut Cells works on whole rows or columns; cut whole rows or columns, or use Paste." => { + "Vložení vyjmutých buněk funguje s celými řádky nebo sloupci; vyjměte celé řádky nebo sloupce, nebo použijte Vložit." + } + "Insert Hyperlink" => "Vložit hypertextový odkaz", + "Insert Link (⌘K)" => "Vložit odkaz (⌘K)", + "Insert a chart to format it." => "Chcete-li graf formátovat, nejprve jej vložte.", + "Insert columns" => "Vkládat sloupce", + "Insert rows" => "Vkládat řádky", + "Insert {ch}" => "Vložit {ch}", + "Inside Borders" => "Vnitřní ohraničení", + "Inside, Row (or Column) stands for the current one, e.g. Row.right." => { + "Uvnitř znamená Row (nebo Column) aktuální řádek (nebo sloupec), např. Row.right." + } + "Inspect Workbook" => "Zkontrolovat sešit", + "Integer Optimality (%):" => "Celočíselná optimalita (%):", + "Integer and binary constraints must be on variable cells." => "Celočíselná a binární omezení se musí vztahovat na proměnné buňky.", + "Integral" => "Integrál", + "Interface Language: English" => "Jazyk rozhraní: angličtina", + "Interface Language: Japanese" => "Jazyk rozhraní: japonština", + "Interpolation" => "Interpolace", + "Interval:" => "Interval:", + "Issue" => "Problém", + "Italic (⌘I)" => "Kurzíva (⌘I)", + "Japanese Double Postcard" => "Japonská dvojitá pohlednice", + "Japanese Envelope #3" => "Japonská obálka č. 3", + "Japanese Envelope #4" => "Japonská obálka č. 4", + "Japanese Envelope Kaku #2" => "Japonská obálka Kaku č. 2", + "Japanese Envelope Kaku #3" => "Japonská obálka Kaku č. 3", + "Japanese Postcard" => "Japonská pohlednice", + "Join the ArtCraft Discord" => "Připojit se k Discordu ArtCraft", + "Join the ArtCraft Discord…" => "Připojit se k Discordu ArtCraft…", + "Justify" => "Zarovnat do bloku", + "Keep" => "Zachovat", + "Keep Changes" => "Zachovat změny", + "Keep Solver Solution" => "Zachovat řešení Řešitele", + "Keep the changes the macro has made so far? They are one undo step either way." => { + "Zachovat dosavadní změny makra? V obou případech je lze vrátit jedním krokem." + } + "Kth Largest (blank for none):" => "K-tá největší hodnota (prázdné pro žádnou):", + "Kth Smallest (blank for none):" => "K-tá nejmenší hodnota (prázdné pro žádnou):", + "LaTeX:" => "LaTeX:", + "Labels in first row" => "Popisky v prvním řádku", + "Lasso Select" => "Výběr lasem", + "Last" => "Poslední", + "Last Column" => "Poslední sloupec", + "Last cell" => "Poslední buňka", + "Last commit" => "Poslední commit", + "Later" => "Později", + "Layout" => "Rozložení", + "Layout {number}" => "Rozložení {number}", + "Layout {n}" => "Rozložení {n}", + "Leave it empty when no step uses Output. A token such as Input.right keeps it beside the data." => { + "Ponechte prázdné, pokud žádný krok nepoužívá Output. Token, například Input.right, udržuje výstup vedle dat." + } + "Left Border" => "Levé ohraničení", + "Left margin (in):" => "Levý okraj (palce):", + "Legal" => "Legal", + "Legend" => "Legenda", + "Legend Entries (Series)" => "Položky legendy (řady)", + "Legend|None" => "Žádná", + "Less Than…" => "Menší než…", + "Less than or equal to" => "Menší nebo rovno", + "Let this workbook's scripts run for the rest of this session" => "Povolit skriptům tohoto sešitu spouštění do konce této relace", + "Letter" => "Letter", + "Light Blue" => "Světle modrá", + "Limit" => "Limita", + "Limits" => "Meze", + "Line" => "Spojnicový", + "Line chart" => "Spojnicový graf", + "Line delta" => "Rozdíl řádků", + "Line with Markers" => "Spojnicový se značkami", + "Linear" => "Lineární", + "Lines +/−" => "Řádky +/−", + "Lines added" => "Přidané řádky", + "Lines deleted" => "Odstraněné řádky", + "Link to (web address, e-mail or Sheet!A1):" => "Odkaz na (webovou adresu, e-mail nebo List!A1):", + "Linked Cell" => "Propojená buňka", + "Links" => "Odkazy", + "List" => "Seznam", + "List Commands" => "Vypsat příkazy", + "List Functions" => "Vypsat funkce", + "List Macros" => "Vypsat makra", + "List range:" => "Oblast seznamu:", + "Load" => "Načíst", + "Load Model" => "Načíst model", + "Load/Save" => "Načíst/uložit", + "Location Range:" => "Oblast umístění:", + "Locked" => "Uzamčeno", + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet)." => { + "Uzamčení buněk nebo skrytí vzorců se projeví až po ochraně listu (Revize › Zamknout list)." + } + "Look for a newer GridCraft release" => "Vyhledat novější vydání GridCraft", + "Lookup" => "Vyhledávání", + "Lookup &\nReference" => "Vyhledávání\na odkazy", + "Macro" => "Makro", + "Macro name: {name}" => "Název makra: {name}", + "Macro “{name}” stopped: {message}" => "Makro „{name}“ bylo zastaveno: {message}", + "Macro: {name}" => "Makro: {name}", + "Macro: {name}{dirty}" => "Makro: {name}{dirty}", + "Macros preserved (not executed)" => "Makra zachována (nespouštějí se)", + "Make Unconstrained Variables Non-Negative" => "Nastavit neomezené proměnné jako nezáporné", + "Manage Rules…" => "Spravovat pravidla…", + "Markers" => "Značky", + "Match case" => "Rozlišovat malá a velká písmena", + "Match entire cell contents" => "Hledat celý obsah buňky", + "Math &\nTrig" => "Matematické\na trigonometrické", + "Matrix" => "Matice", + "Max" => "Maximum", + "Max Evaluations:" => "Nejvyšší počet vyhodnocení:", + "Maximum Generations without Improvement:" => "Nejvyšší počet generací bez zlepšení:", + "Maximum: {n}" => "Maximum: {n}", + "Maximum: {value}" => "Maximum: {value}", + "May use files through:" => "Přístup k souborům přes:", + "May use files through: {paths}" => "Přístup k souborům přes: {paths}", + "Meadow" => "Louka", + "Median" => "Medián", + "Medium" => "Střední", + "Merged PRs" => "Sloučené PR", + "Merged cells" => "Sloučené buňky", + "Message" => "Zpráva", + "Message:" => "Zpráva:", + "Min" => "Minimum", + "Minimum / Source / Formula:" => "Minimum / zdroj / vzorec:", + "Minimum: {n}" => "Minimum: {n}", + "Minimum: {value}" => "Minimum: {value}", + "Missing alternative text" => "Chybějící alternativní text", + "Model" => "Model", + "Model Range:" => "Oblast modelu:", + "Models" => "Modely", + "Modify" => "Změnit", + "Monochromatic" => "Jednobarevné odstíny", + "Monochrome" => "Jednobarevné", + "Month" => "Měsíc", + "More\nFunctions" => "Další\nfunkce", + "More Borders…" => "Další ohraničení…", + "More Colors…" => "Další barvy…", + "More Table Styles" => "Další styly tabulek", + "Move Chart…" => "Přesunout graf…", + "Move Columns" => "Přesunout sloupce", + "Move Field" => "Přesunout pole", + "Move Object" => "Přesunout objekt", + "Move Selection" => "Přesunout výběr", + "Move to Column Labels" => "Přesunout do popisků sloupců", + "Move to Report Filter" => "Přesunout do filtru sestavy", + "Move to Row Labels" => "Přesunout do popisků řádků", + "Move to Values" => "Přesunout do hodnot", + "Moving Average" => "Klouzavý průměr", + "Multi-cell array formulas aren't allowed in tables." => "V tabulkách nejsou povoleny maticové vzorce přes více buněk.", + "Multiply" => "Násobit", + "Mutation Rate:" => "Míra mutace:", + "My data has headers" => "Data obsahují záhlaví", + "My list has headers" => "Seznam obsahuje záhlaví", + "Name" => "Název", + "Name (A–Z)" => "Název (A–Z)", + "Name:" => "Název:", + "Names" => "Názvy", + "Name…" => "Název…", + "Needs Simplex LP or GRG Nonlinear, a Max or Min objective and no integer constraints." => { + "Vyžaduje Simplex LP nebo nelineární GRG, maximalizaci nebo minimalizaci cíle a žádná celočíselná omezení." + } + "Needs an optimal or converged solution: Solver stopped before reaching one." => { + "Vyžaduje optimální nebo konvergované řešení: Řešitel se zastavil dříve, než je nalezl." + } + "Needs approval before it can run: it {what}." => "Před spuštěním vyžaduje schválení: {what}.", + "Neutral" => "Neutrální", + "New\nWindow" => "Nové\nokno", + "New Cell Style…" => "Nový styl buňky…", + "New Name" => "Nový název", + "New Script" => "Nový skript", + "New Window" => "Nové okno", + "New Workbook" => "Nový sešit", + "New Worksheet Ply:" => "Název nového listu:", + "New from Sample…" => "Nový z ukázky…", + "New range for the table:" => "Nová oblast tabulky:", + "New title (Modify):" => "Nový název (Změnit):", + "Next Cell in Selection" => "Další buňka ve výběru", + "No Blanks" => "Bez prázdných", + "No Errors" => "Bez chyb", + "No Fill" => "Bez výplně", + "No cells found." => "Nebyly nalezeny žádné buňky.", + "No chart selected." => "Není vybrán žádný graf.", + "No command matches." => "Žádný příkaz neodpovídá hledání.", + "No comments on this sheet yet. Select a cell and choose New Comment." => { + "Na tomto listu zatím nejsou komentáře. Vyberte buňku a zvolte Nový komentář." + } + "No contributor data was built into this copy." => "Tato kopie neobsahuje údaje o přispěvatelích.", + "No dependent cells." => "Žádné závislé buňky.", + "No dictionary is available on this system (GridCraft uses the system word list)." => { + "V systému není dostupný slovník (GridCraft používá systémový seznam slov)." + } + "No functions match." => "Žádné funkce neodpovídají hledání.", + "No inputs: the macro works on fixed cells only." => "Žádné vstupy: makro pracuje pouze s pevně určenými buňkami.", + "No macros in this workbook" => "V tomto sešitu nejsou makra", + "No model credits were built into this copy." => "Tato kopie neobsahuje údaje o modelech.", + "No names defined" => "Nejsou definovány žádné názvy", + "No picture selected" => "Není vybrán žádný obrázek", + "No precedent cells." => "Žádné předcházející buňky.", + "No printers found. Configure a system printer or export a PDF." => { + "Nenalezeny žádné tiskárny. Nastavte systémovou tiskárnu nebo exportujte do PDF." + } + "No ranges yet." => "Zatím žádné oblasti.", + "No sheets are hidden." => "Žádné listy nejsou skryté.", + "No steps yet. Add Step picks a command, or record one with Automate › Record Macro." => { + "Zatím žádné kroky. Příkaz Přidat krok vybere příkaz; kroky lze také zaznamenat pomocí Automatizace › Zaznamenat makro." + } + "None" => "Žádné", + "Normal Probability" => "Normální pravděpodobnost", + "Not equal to" => "Není rovno", + "Not in Dictionary" => "Není ve slovníku", + "Not in Dictionary ({cell}):" => "Není ve slovníku ({cell}):", + "Note" => "Poznámka", + "Note:" => "Poznámka:", + "Nothing to import." => "Není co importovat.", + "Number Format" => "Číselný formát", + "Number Stored as Text" => "Číslo uložené jako text", + "Numbers" => "Čísla", + "Numerical Count" => "Počet čísel", + "Numerical Count: {n}" => "Počet čísel: {n}", + "Numerical Count: {value}" => "Počet čísel: {value}", + "ODS is supported for data import only. Save as .xlsx or another supported export format." => { + "ODS podporuje pouze import dat. Uložte jako .xlsx nebo v jiném podporovaném formátu exportu." + } + "Object" => "Objekt", + "Object Properties" => "Vlastnosti objektu", + "Ocean" => "Oceán", + "One-sided" => "Jednostranně", + "Open Dialog" => "Otevřít dialog", + "Open the macro in the step editor" => "Otevřít makro v editoru kroků", + "Open the macro in the step editor and stop before its first step" => "Otevřít makro v editoru kroků a zastavit před prvním krokem", + "Operation" => "Operace", + "Options|Editing" => "Úpravy", + "Orange" => "Oranžová", + "Orchid" => "Orchidej", + "Orientation (degrees)" => "Orientace (stupně)", + "Other:" => "Jiné:", + "Otherwise the macro runs on the selection" => "Jinak se makro spustí nad výběrem", + "Outline" => "Osnova", + "Outline Settings" => "Nastavení osnovy", + "Output" => "Výstup", + "Output Range:" => "Výstupní oblast:", + "Output anchor (what the Output token stands for):" => "Ukotvení výstupu (co označuje token Output):", + "Output options" => "Možnosti výstupu", + "Output to (optional):" => "Výstup do (nepovinné):", + "Outside Borders" => "Vnější ohraničení", + "Oval" => "Ovál", + "Over Cells" => "Nad buňkami", + "Over, then down" => "Doprava, potom dolů", + "Overwrite" => "Přepsat", + "Overwrite them, or move the data out of the way?" => "Přepsat je, nebo přesunout data mimo výstup?", + "PRs" => "PR", + "Page" => "Stránka", + "Page 1" => "Stránka 1", + "Page 1 of ?" => "Stránka 1 z ?", + "Page Break Preview" => "Náhled konců stránek", + "Page order" => "Pořadí stránek", + "Parameters (JSON):" => "Parametry (JSON):", + "Pareto (sorted histogram)" => "Paretův (seřazený histogram)", + "Password" => "Heslo", + "Password (optional):" => "Heslo (nepovinné):", + "Password:" => "Heslo:", + "Paste (⌘V)" => "Vložit (⌘V)", + "Paste List" => "Vložit seznam", + "Paste Name" => "Vložit název", + "Paste Special|Add" => "Přičíst", + "Paste Special|None" => "Žádná", + "Paste formulas that refer to the copied cells" => "Vložit vzorce odkazující na zkopírované buňky", + "Paste name" => "Vložit název", + "Paused before step {step} · {what}" => "Pozastaveno před krokem {step} · {what}", + "Pen" => "Pero", + "Pick From List" => "Vybrat ze seznamu", + "Pick up a format first." => "Nejprve naberte formát.", + "Picture" => "Obrázek", + "Picture file path (PNG or JPEG):" => "Cesta k obrázku (PNG nebo JPEG):", + "Picture in cell" => "Obrázek v buňce", + "Picture: {alt}" => "Obrázek: {alt}", + "Picture: {name}" => "Obrázek: {name}", + "Picture…" => "Obrázek…", + "Pie" => "Výsečový", + "PivotChart" => "Kontingenční graf", + "PivotTable Analyze" => "Analýza kontingenční tabulky", + "PivotTable Design" => "Návrh kontingenční tabulky", + "PivotTable Fields" => "Pole kontingenční tabulky", + "PivotTable Layout" => "Rozložení kontingenční tabulky", + "PivotTable Options" => "Možnosti kontingenční tabulky", + "PivotTable Styles" => "Styly kontingenční tabulky", + "PivotTables" => "Kontingenční tabulky", + "Place Picture in Cell" => "Umístit obrázek do buňky", + "Place Picture over Cells" => "Umístit obrázek nad buňky", + "Place in Cell" => "Umístit do buňky", + "Place over Cells" => "Umístit nad buňky", + "Plus or minus" => "Plus nebo minus", + "Population Size:" => "Velikost populace:", + "Preview" => "Náhled", + "Print Gridlines" => "Tisknout mřížku", + "Print Headings" => "Tisknout záhlaví", + "Print Preview" => "Náhled tisku", + "Print Settings" => "Nastavení tisku", + "Print failed: the printing worker stopped." => "Tisk selhal: tiskové vlákno se zastavilo.", + "Print failed: {error}" => "Tisk selhal: {error}", + "Print job submitted." => "Tisková úloha odeslána.", + "Print job submitted: {receipt}" => "Tisková úloha odeslána: {receipt}", + "Printer" => "Tiskárna", + "Printer default" => "Výchozí nastavení tiskárny", + "Printer discovery failed." => "Vyhledání tiskáren selhalo.", + "Printing is unavailable here; export a PDF instead." => "Zde nelze tisknout; místo toho exportujte PDF.", + "Product" => "Součin", + "Proofing" => "Kontrola pravopisu", + "Protect" => "Zamknout", + "Protect Structure and Windows" => "Zamknout strukturu a okna", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Ochrana sešitu: struktura (nelze přidávat, přesouvat, přejmenovávat, skrývat ani odstraňovat listy)." + } + "Protection" => "Zámek", + "Purple" => "Fialová", + "Pythagoras" => "Pythagorova věta", + "Python Output" => "Výstup Pythonu", + "Quadratic formula" => "Vzorec pro kořeny kvadratické rovnice", + "Quarterly Sales Dashboard" => "Přehled čtvrtletních prodejů", + "Queries & Connections" => "Dotazy a připojení", + "Quick Layout" => "Rychlé rozložení", + "Quit GridCraft" => "Ukončit GridCraft", + "R$ Portuguese (Brazil)" => "R$ portugalština (Brazílie)", + "Radar" => "Paprskový", + "Ran macro “{name}” ({count})" => "Spuštěno makro „{name}“ ({count})", + "Ran {count}." => "Spuštěno {count}.", + "Random Seed:" => "Počáteční hodnota generátoru:", + "Range password:" => "Heslo oblasti:", + "Range:" => "Oblast:", + "Ranges that stay editable when the sheet is protected:" => "Oblasti, které lze upravovat při zamčeném listu:", + "Ranges that stay editable when the sheet is protected:\nNo ranges yet." => { + "Oblasti, které lze upravovat při zamčeném listu:\nZatím žádné oblasti." + } + "Rank and Percentile" => "Pořadí a percentil", + "Read Range" => "Načíst oblast", + "Real name" => "Skutečné jméno", + "Recalculate formulas automatically when workbook values or formulas change." => { + "Při změně hodnot nebo vzorců v knize automaticky přepočítávat vzorce." + } + "Recalculate formulas automatically. What-if data tables are currently snapshots; run Data Table again to update them." => { + "Automaticky přepočítávat vzorce. Citlivostní tabulky jsou zatím snímky; pro aktualizaci znovu spusťte Tabulku dat." + } + "Recent Colors" => "Poslední barvy", + "Recommended PivotTables" => "Doporučené kontingenční tabulky", + "Record Actions" => "Zaznamenat akce", + "Record steps relative to the cells selected when recording starts, so the macro works on other data" => { + "Zaznamenávat kroky relativně k buňkám vybraným na začátku nahrávání, aby makro fungovalo i s jinými daty" + } + "Record your actions as a macro" => "Zaznamenat akce jako makro", + "Recording stopped" => "Nahrávání zastaveno", + "Recording · {count}" => "Nahrávání · {count}", + "Rectangle" => "Obdélník", + "Red" => "Červená", + "Red - Yellow - Green" => "Červená – žlutá – zelená", + "Redo (⌘Y)" => "Znovu (⌘Y)", + "Reference isn't valid." => "Odkaz není platný.", + "Reference:" => "Odkaz:", + "Refers To" => "Odkazuje na", + "Refers to cells:" => "Odkazuje na buňky:", + "Refers to:" => "Odkazuje na:", + "Refresh" => "Aktualizovat", + "Refresh All" => "Aktualizovat vše", + "Refresh printers" => "Aktualizovat seznam tiskáren", + "Regional format" => "Místní formát", + "Regression" => "Regrese", + "Rel" => "Rel.", + "Relative: a token that follows the input the macro runs on" => "Relativní: token sledující vstup, nad kterým se makro spouští", + "Remove" => "Odebrat", + "Remove Field" => "Odebrat pole", + "Remove level" => "Odebrat úroveň", + "Remove the password (Modify)" => "Odstranit heslo (Změnit)", + "Rename Macro" => "Přejmenovat makro", + "Reopen" => "Znovu otevřít", + "Repeat for each {what} of {over}" => "Opakovat pro každý {what} z {over}", + "Repeatedly calculate circular references until results converge or the iteration limit is reached. Enable only for intentional circular formulas." => { + "Opakovaně přepočítávat cyklické odkazy, dokud výsledky nekonvergují nebo se nedosáhne limitu iterací. Zapněte pouze pro záměrné cyklické vzorce." + } + "Replace All" => "Nahradit vše", + "Replace with:" => "Nahradit čím:", + "Reply" => "Odpovědět", + "Reply…" => "Odpovědět…", + "Report Layout" => "Rozložení sestavy", + "Report Layout|Outline" => "V osnově", + "Reports:" => "Sestavy:", + "Require Bounds on Variables" => "Vyžadovat meze proměnných", + "Reset All" => "Obnovit vše", + "Residuals" => "Rezidua", + "Resize\nTable" => "Změnit velikost\ntabulky", + "Resize Table" => "Změnit velikost tabulky", + "Resolve" => "Vyřešit", + "Resolve Thread" => "Vyřešit vlákno", + "Resolved" => "Vyřešeno", + "Restore Original Values" => "Obnovit původní hodnoty", + "Result" => "Výsledek", + "Return to the original worksheet to insert this picture, or cancel and choose another cell." => { + "Chcete-li vložit obrázek, vraťte se na původní list, nebo vložení zrušte a vyberte jinou buňku." + } + "Reverse the order" => "Obrátit pořadí", + "Ribbon Tab" => "Karta pásu karet", + "Right Border" => "Pravé ohraničení", + "Right margin (in):" => "Pravý okraj (palce):", + "Rotate" => "Otočit", + "Rounded Rectangle" => "Zaoblený obdélník", + "Row" => "Řádek", + "Row height (pixels):" => "Výška řádku (pixely):", + "Row height (points):" => "Výška řádku (body):", + "Row height must be between 0 and 409.5 points." => "Výška řádku musí být mezi 0 a 409,5 bodu.", + "Row height must be between 0 and 546 pixels (409.5 points)." => "Výška řádku musí být mezi 0 a 546 pixely (409,5 bodu).", + "Solve" => "Vyřešit", + "accent1" => "Zvýraznění1", + "accent2" => "Zvýraznění2", + "accent3" => "Zvýraznění3", + "accent4" => "Zvýraznění4", + "accent5" => "Zvýraznění5", + "accent6" => "Zvýraznění6", + "alpha" => "Alfa", + "between" => "Mezi", + "cell" => "Buňka", + "cells" => "Buňky", + "chart" => "Graf", + "check" => "Zkontrolovat", + "colorful" => "Barevné", + "column" => "Sloupec", + "commits" => "Commity", + "contributors" => "Přispěvatelé", + "double" => "Dvojité", + "equal to" => "Je rovno", + "greater than" => "Větší než", + "greater than or equal to" => "Větší nebo rovno", + "less than" => "Menší než", + "less than or equal to" => "Menší nebo rovno", + "line chart" => "Spojnicový graf", + "macro" => "Makro", + "medium" => "Střední", + "monochrome" => "Jednobarevné", + "none" => "Žádné", + "not equal to" => "Není rovno", + "note" => "Poznámka", + "numbers" => "Čísla", + "pen" => "Pero", + "picture" => "Obrázek", + "range" => "Oblast", + "row" => "Řádek", + "Cell link:" => "Propojená buňka:", + "Choose a command." => "Vyberte příkaz.", + "Current value:" => "Aktuální hodnota:", + "Delta" => "Delta", + "Incremental change:" => "Přírůstek:", + "Locked (when the sheet is protected)" => "Uzamčeno při zamknutí listu", + "Max Subproblems:" => "Nejvyšší počet podúloh:", + "Maximum value:" => "Nejvyšší hodnota:", + "Minimum value:" => "Nejnižší hodnota:", + "Page change:" => "Velký přírůstek:", + "Print object" => "Tisknout objekt", + "Rows" => "Řádky", + "Rp Indonesian" => "Rp indonéština", + "Run" => "Spustit", + "Run Macro" => "Spustit makro", + "Run Script" => "Spustit skript", + "Run a command" => "Spustit příkaz", + "Run a macro" => "Spustit makro", + "Run a macro on the selection" => "Spustit makro pro výběr", + "Run it on:" => "Spouštět pro:", + "Run the macro as one undo step" => "Spustit makro jako jeden krok zpět", + "Run this step (a disabled step is skipped)" => "Spustit tento krok; zakázaný krok se přeskočí", + "Run to Here" => "Spustit až sem", + "Run to the next breakpoint or the end" => "Pokračovat k dalšímu bodu přerušení nebo do konce", + "Run until the selected step" => "Spustit až k vybranému kroku", + "Runs with:" => "Spouští se s:", + "Sample" => "Ukázka", + "Save (⌘S)" => "Uložit (⌘S)", + "Save Changes?" => "Uložit změny?", + "Save Macro" => "Uložit makro", + "Save Model" => "Uložit model", + "Save a Copy" => "Uložit kopii", + "Save a Copy as Excel Workbook (.xlsx)…" => "Uložit kopii jako sešit Excelu (.xlsx)…", + "Save a copy as" => "Uložit kopii jako", + "Save a copy as .{format}" => "Uložit kopii jako .{format}", + "Save as Web Page" => "Uložit jako webovou stránku", + "Save as Web Page…" => "Uložit jako webovou stránku…", + "Save changes automatically to .xlsx workbooks that already have a file path." => { + "Automaticky ukládat změny sešitů .xlsx, které již mají cestu k souboru." + } + "Save changes to macro “{name}”?" => "Uložit změny makra „{name}“?", + "Save or close your open work first; the update restarts the app." => { + "Nejprve uložte nebo zavřete otevřenou práci; aktualizace aplikaci restartuje." + } + "Saved macro “{name}” ({count})" => "Uloženo makro „{name}“ ({count})", + "Scale to Fit" => "Přizpůsobit velikost", + "Scatter" => "Bodový", + "Scatter with Lines" => "Bodový se spojnicemi", + "Scenario Summary" => "Souhrn scénářů", + "Scope" => "Obor", + "Scope (Workbook or sheet name):" => "Obor (sešit nebo název listu):", + "Scope:" => "Obor:", + "ScreenTip:" => "Popisek:", + "Scripting Tools" => "Nástroje skriptování", + "Scripts in this workbook came from a file and are disabled." => "Skripty v tomto sešitu pocházejí ze souboru a jsou zakázány.", + "Scroll ribbon left" => "Posunout pás karet doleva", + "Scroll ribbon right" => "Posunout pás karet doprava", + "Search commands (⌘⇧Space)" => "Hledat příkazy (⌘⇧Space)", + "Search commands, e.g. bold, sort, set…" => "Hledat příkazy, např. tučné, seřadit, nastavit…", + "Seasonality (auto, 0 for none, or a season length):" => "Sezónnost (auto, 0 bez sezónnosti nebo délka sezóny):", + "Select" => "Vybrat", + "Select All" => "Vybrat vše", + "Select Current Region" => "Vybrat aktuální oblast", + "Select Data Source" => "Vybrat zdroj dat", + "Select Dependents" => "Vybrat závislé buňky", + "Select Entire Column" => "Vybrat celý sloupec", + "Select Entire Row" => "Vybrat celý řádek", + "Select Locked Cells" => "Vybrat uzamčené buňky", + "Select Precedents" => "Vybrat předchůdce", + "Select Unlocked Cells" => "Vybrat odemčené buňky", + "Select a Solving Method:" => "Vyberte metodu řešení:", + "Select a cell inside a table first, or pass `table`." => "Nejprve vyberte buňku uvnitř tabulky nebo zadejte parametr `table`.", + "Select a chart first." => "Nejprve vyberte graf.", + "Select a chart to format it." => "Vyberte graf, který chcete formátovat.", + "Select a printer" => "Vybrat tiskárnu", + "Select a step to see its settings." => "Výběrem kroku zobrazíte jeho nastavení.", + "Select a timeline column and a values column for the forecast." => "Pro prognózu vyberte sloupec časové osy a sloupec hodnot.", + "Select an available printer in File > Print before submitting." => "Před odesláním vyberte dostupnou tiskárnu v nabídce Soubor > Tisk.", + "Select data for the chart first." => "Nejprve vyberte data pro graf.", + "Select locked cells" => "Vybrat uzamčené buňky", + "Select unlocked cells" => "Vybrat odemčené buňky", + "Select {range}" => "Vybrat {range}", + "Selection" => "Výběr", + "Selection Pane" => "Podokno výběru", + "Selection Statistics" => "Statistiky výběru", + "Semicolon" => "Středník", + "Send" => "Odeslat", + "Send Backward" => "Přenést o jednu úroveň dozadu", + "Sensitivity" => "Citlivost", + "Series in" => "Řady tvoří", + "Series {n}" => "Řada {n}", + "Services" => "Služby", + "Set Objective:" => "Nastavit cílovou buňku:", + "Set Python Code" => "Nastavit kód Pythonu", + "Set Values" => "Nastavit hodnoty", + "Set cell:" => "Nastavit buňku:", + "Set {cell} to {input}" => "Nastavit {cell} na {input}", + "Settings" => "Nastavení", + "Severity" => "Závažnost", + "Shape Fill" => "Výplň obrazce", + "Shape Outline" => "Obrys obrazce", + "Shape Styles" => "Styly obrazců", + "Shape:" => "Obrazec:", + "Shapes|Line" => "Čára", + "Shape|Line" => "Čára", + "Sheet Options" => "Možnosti listu", + "Sheets: {sheets}" => "Listy: {sheets}", + "Shift Down" => "Posunout dolů", + "Shift Right" => "Posunout doprava", + "Shift cells down" => "Posunout buňky dolů", + "Shift cells left" => "Posunout buňky doleva", + "Shift cells right" => "Posunout buňky doprava", + "Shift cells up" => "Posunout buňky nahoru", + "Show All" => "Zobrazit vše", + "Show Comments" => "Zobrazit komentáře", + "Show Data Table" => "Zobrazit tabulku dat", + "Show Details" => "Zobrazit podrobnosti", + "Show Legend Keys" => "Zobrazit klíče legendy", + "Show Objects" => "Zobrazit objekty", + "Show Outline Levels" => "Zobrazit úrovně osnovy", + "Show Outline Symbols" => "Zobrazit symboly osnovy", + "Show Scenario" => "Zobrazit scénář", + "Show Zeros" => "Zobrazovat nuly", + "Show as % of Grand Total" => "Zobrazit jako % celkového součtu", + "Show as No Calculation" => "Zobrazit bez výpočtu", + "Show as Rank" => "Zobrazit pořadí", + "Show as Running Total" => "Zobrazit průběžný součet", + "Show matching rows in place" => "Zobrazit vyhovující řádky na místě", + "Show or hide the formula bar used to view and edit the active cell." => { + "Zobrazit nebo skrýt řádek vzorců pro zobrazení a úpravy aktivní buňky." + } + "Show password" => "Zobrazit heslo", + "Shrink to Fit" => "Přizpůsobit zmenšením", + "Shrink to fit" => "Přizpůsobit zmenšením", + "Simplex LP" => "Simplex LP", + "Simplex LP: for linear models; integer and binary constraints by branch and bound." => { + "Simplex LP: pro lineární modely; celočíselná a binární omezení se řeší metodou větví a mezí." + } + "Single" => "Jednoduché", + "Single Accounting" => "Jednoduché účetnické", + "Skip blanks" => "Přeskočit prázdné buňky", + "Slate" => "Břidlice", + "Solver Parameters" => "Parametry Řešitele", + "Solver Reports" => "Sestavy Řešitele", + "Solver Results" => "Výsledky Řešitele", + "Solver|To:" => "Cíl:", + "Sort Ascending" => "Seřadit vzestupně", + "Sort Descending" => "Seřadit sestupně", + "Sort Field" => "Seřadit pole", + "Sort On" => "Řadit podle", + "Sort by" => "Seřadit podle", + "Sorting" => "Řazení", + "Source:" => "Zdroj:", + "Space" => "Mezera", + "Split" => "Rozdělit", + "Split tabs" => "Rozdělit karty", + "Square root" => "Druhá odmocnina", + "Stacked" => "Skládaný", + "Stacked Area" => "Skládaný plošný", + "Stacked Bar" => "Skládaný pruhový", + "Stacked Column" => "Skládaný sloupcový", + "Stacked Line" => "Skládaný spojnicový", + "Standard Colors" => "Standardní barvy", + "Standard Errors" => "Standardní chyby", + "Standard Width" => "Standardní šířka", + "Standard column width (pixels):" => "Standardní šířka sloupce (pixely):", + "Standardized Residuals" => "Standardizovaná rezidua", + "Start a conversation:" => "Zahájit konverzaci:", + "Start a new workbook" => "Vytvořit nový sešit", + "Start date:" => "Počáteční datum:", + "Start debugging: stop before the first step" => "Spustit ladění: zastavit před prvním krokem", + "Start time:" => "Počáteční čas:", + "Statistical" => "Statistické", + "Status|Count" => "Počet", + "Status|Sum" => "Součet", + "Step" => "Krok", + "Step Into" => "Krokovat dovnitř", + "Step value:" => "Velikost kroku:", + "Step {path} · {title}" => "Krok {path} · {title}", + "Steps" => "Kroky", + "Steps here run when the If is {cond}. Add Step puts a step in this branch." => { + "Tyto kroky se provedou, když má podmínka If hodnotu {cond}. Příkaz Přidat krok vloží krok do této větve." + } + "Stock" => "Burzovní", + "Stop Action" => "Zastavit akci", + "Stop debugging" => "Zastavit ladění", + "Stop recording and save the macro" => "Ukončit záznam a uložit makro", + "Stop value:" => "Konečná hodnota:", + "Stop: {message}" => "Zastavení: {message}", + "Stopped after {count}; the changes were kept." => "Zastaveno po {count}; změny byly zachovány.", + "Stopped: {message}" => "Zastaveno: {message}", + "Stopped; the changes were undone." => "Zastaveno; změny byly vráceny zpět.", + "Structure" => "Struktura", + "Styles" => "Styly", + "Subject to the Constraints:" => "Za omezujících podmínek:", + "Submit Print Job" => "Odeslat tiskovou úlohu", + "Submitting print job…" => "Odesílání tiskové úlohy…", + "Subscript" => "Dolní index", + "Subtotals" => "Mezisoučty", + "Subtract" => "Odečíst", + "Suggestions:" => "Návrhy:", + "Sum" => "Součet", + "Sum: {n}" => "Součet: {n}", + "Sum: {value}" => "Součet: {value}", + "Summarize by Average" => "Shrnout průměrem", + "Summarize by Count" => "Shrnout počtem", + "Summarize by Max" => "Shrnout maximem", + "Summarize by Min" => "Shrnout minimem", + "Summarize by Sum" => "Shrnout součtem", + "Summarize with PivotTable" => "Shrnout pomocí kontingenční tabulky", + "Summary columns to right of detail" => "Souhrnné sloupce napravo od podrobností", + "Summary rows below detail" => "Souhrnné řádky pod podrobnostmi", + "Summary statistics" => "Souhrnné statistiky", + "Summation" => "Sumace", + "Sunburst" => "Víceúrovňový prstencový", + "Superscript" => "Horní index", + "Switch\nWindows" => "Přepnout\nokna", + "Switch Window" => "Přepnout okno", + "Switch Windows" => "Přepnout okna", + "Symbols" => "Symboly", + "TRUE or FALSE" => "PRAVDA nebo NEPRAVDA", + "Tab" => "Tabulátor", + "Table (⌘T)" => "Tabulka (⌘T)", + "Table Name" => "Název tabulky", + "Table Name:" => "Název tabulky:", + "Table Style Options" => "Možnosti stylu tabulky", + "Tables" => "Tabulky", + "Tabloid" => "Tabloid", + "Tabular" => "Tabulkový tvar", + "Tab|Insert" => "Vložení", + "Tends to" => "Blíží se k", + "Text length" => "Délka textu", + "Text that Contains" => "Text, který obsahuje", + "Text that Contains…" => "Text, který obsahuje…", + "Text to Columns|Comma" => "Čárka", + "That undo group has already ended." => "Tato skupina kroků zpět již skončila.", + "The Evolutionary method needs a lower and an upper bound on every variable cell (constraints such as \"A1:A3 <= 10\"), or requireBounds: false." => { + "Evoluční metoda vyžaduje dolní a horní mez každé proměnné buňky, například omezení \"A1:A3 <= 10\", nebo parametr requireBounds: false." + } + "The Limits report doesn't apply to models with integer or binary constraints." => { + "Sestava mezí není použitelná pro modely s celočíselnými nebo binárními omezeními." + } + "The Limits report is available for Simplex LP and GRG Nonlinear." => "Sestava mezí je dostupná pro metody Simplex LP a GRG Nonlinear.", + "The PivotTable field name is not valid. To create a PivotTable, you must use data that is organized as a list with labeled columns." => { + "Název pole kontingenční tabulky není platný. Pro její vytvoření použijte data uspořádaná jako seznam se záhlavími sloupců." + } + "The PivotTable report is out of date. Refresh it first." => "Sestava kontingenční tabulky není aktuální. Nejprve ji aktualizujte.", + "The PivotTable report is too large." => "Sestava kontingenční tabulky je příliš velká.", + "The PivotTable report will not fit on the sheet." => "Sestava kontingenční tabulky se nevejde na list.", + "The X variables are collinear; the regression can't be computed." => "Proměnné X jsou kolineární; regresi nelze vypočítat.", + "The bin range holds no numbers." => "Oblast intervalů neobsahuje čísla.", + "The cell being edited can't be entered." => "Nelze dokončit zadání upravované buňky.", + "The cell has no formula." => "Buňka neobsahuje vzorec.", + "The cell or chart you're trying to change is on a protected sheet." => "Buňka nebo graf, který chcete změnit, je na zamknutém listu.", + "The cell you are trying to change is on a protected sheet that does not allow selecting it." => { + "Buňka, kterou chcete změnit, je na zamknutém listu, který nedovoluje její výběr." + } + "The cell you're trying to change is on a protected sheet." => "Buňka, kterou chcete změnit, je na zamknutém listu.", + "The chart no longer exists." => "Graf již neexistuje.", + "The consolidated data doesn't fit below and right of the destination." => "Sloučená data se nevejdou pod cílovou buňku a napravo od ní.", + "The constraint's two sides must be the same size (or the right side one cell)." => { + "Obě strany omezení musí mít stejnou velikost, nebo musí pravou stranu tvořit jediná buňka." + } + "The control is gone." => "Ovládací prvek již neexistuje.", + "The copied cells don't fit on the sheet at this position." => "Kopírované buňky se na tuto pozici listu nevejdou.", + "The copied sheet no longer exists." => "Kopírovaný list již neexistuje.", + "The copy area is the whole sheet; there is no room to insert it." => "Oblast kopírování zabírá celý list; není místo pro její vložení.", + "The cut area doesn't fit at this position; nothing was moved." => "Vyjmutá oblast se na tuto pozici nevejde; nic nebylo přesunuto.", + "The cut rows or columns can't be inserted inside themselves." => "Vyjmuté řádky nebo sloupce nelze vložit dovnitř jich samých.", + "The damping factor must be between 0 and 1." => "Koeficient tlumení musí být mezi 0 a 1.", + "The extract range can't overlap the list range." => "Oblast pro extrakci se nesmí překrývat s oblastí seznamu.", + "The file is empty." => "Soubor je prázdný.", + "The fill is too large." => "Oblast vyplnění je příliš velká.", + "The forecast end must be after the last point of the timeline." => "Konec prognózy musí být za posledním bodem časové osy.", + "The forecast start needs at least two values before it to fit the forecast." => { + "Pro vytvoření prognózy jsou před jejím začátkem nutné alespoň dvě hodnoty." + } + "The formula has an unterminated field name." => "Ve vzorci není uzavřen název pole.", + "The formula has an unterminated text value." => "Ve vzorci není uzavřen textový řetězec.", + "The formula is empty." => "Vzorec je prázdný.", + "The formula is too long." => "Vzorec je příliš dlouhý.", + "The headers must remain in the same row, and the resulting table range must overlap the original table range." => { + "Záhlaví musí zůstat ve stejném řádku a výsledná oblast tabulky se musí překrývat s původní oblastí." + } + "The input range holds no numbers." => "Vstupní oblast neobsahuje čísla.", + "The interval must be a whole number from 1 to the number of data points." => "Interval musí být celé číslo od 1 do počtu datových bodů.", + "The macro failed; nothing was changed." => "Makro selhalo; nic nebylo změněno.", + "The macro “{name}” is in “{book}”. Switch back to it to save, check or run the macro." => { + "Makro „{name}“ je v sešitu „{book}“. Vraťte se do něj pro uložení, kontrolu nebo spuštění makra." + } + "The model was loaded." => "Model byl načten.", + "The name entered already exists. Enter a unique name." => "Zadaný název již existuje. Zadejte jedinečný název.", + "The name that you entered is not valid." => "Zadaný název není platný.", + "The number must be between 1 and 409." => "Číslo musí být mezi 1 a 409.", + "The objective cell must contain a formula." => "Cílová buňka musí obsahovat vzorec.", + "The objective must be a single cell." => "Cílem musí být jediná buňka.", + "The output range already holds data. Replace it with the report?" => "Výstupní oblast již obsahuje data. Nahradit je sestavou?", + "The parameters must be a JSON object, such as {\"range\": \"A1:B2\"}." => { + "Parametry musí tvořit objekt JSON, například {\"range\": \"A1:B2\"}." + } + "The password you supplied is not correct." => "Zadané heslo není správné.", + "The print command did not produce a PDF." => "Příkaz tisku nevytvořil PDF.", + "The question was about “{book}”, which is no longer the active workbook, so nothing was done." => { + "Dotaz se týkal sešitu „{book}“, který již není aktivní, proto nebyla provedena žádná akce." + } + "The ranges the macro works on. Each is checked before the macro runs." => { + "Oblasti, se kterými makro pracuje. Každá se kontroluje před spuštěním makra." + } + "The reference isn't valid. Select a cell in a range with labeled columns, or pass `source`." => { + "Odkaz není platný. Vyberte buňku v oblasti se záhlavími sloupců nebo zadejte parametr `source`." + } + "The report doesn't fit on the sheet below and right of the output cell." => "Sestava se nevejde pod výstupní buňku a napravo od ní.", + "The selection when the button is pressed" => "Výběr v okamžiku stisknutí tlačítka", + "The sheet is protected with a password. Unprotect it first (Review › Unprotect Sheet)." => { + "List je chráněn heslem. Nejprve jej odemkněte (Revize › Odemknout list)." + } + "The spelling check is complete for the entire sheet." => "Kontrola pravopisu byla dokončena pro celý list.", + "The text box's worksheet is no longer active." => "List textového pole již není aktivní.", + "The timeline needs at least two points a constant step apart." => "Časová osa vyžaduje alespoň dva body se stálým rozestupem.", + "The update is installed. Close {app} to finish; it restarts by itself." => { + "Aktualizace je nainstalována. Dokončete ji zavřením {app}; aplikace se sama znovu spustí." + } + "The variable cells must be a reference like B2:B4." => "Proměnné buňky musí být odkaz, například B2:B4.", + "The variable cells must be on the objective cell's sheet." => "Proměnné buňky musí být na stejném listu jako cílová buňka.", + "The web version is always the latest release." => "Webová verze je vždy nejnovější vydání.", + "The weekday series runs past the supported date range." => "Řada pracovních dnů překračuje podporovaný rozsah dat.", + "The workbook is protected and cannot be changed." => "Sešit je zamknutý a nelze jej měnit.", + "Theme Colors" => "Barvy motivu", + "Themed Cell Styles" => "Styly buněk podle motivu", + "Then" => "Pak", + "Then by" => "Pak podle", + "There are no comments in this workbook." => "V tomto sešitu nejsou žádné komentáře.", + "There are no scenarios on this sheet." => "Na tomto listu nejsou žádné scénáře.", + "There are no shapes, pictures or charts on this sheet." => "Na tomto listu nejsou žádné obrazce, obrázky ani grafy.", + "There are no values to forecast." => "Nejsou k dispozici žádné hodnoty pro prognózu.", + "There is no command “{id}”." => "Příkaz „{id}“ neexistuje.", + "There isn't room on the sheet for the list of names." => "Na listu není místo pro seznam názvů.", + "There's a problem with this formula." => "Tento vzorec obsahuje problém.", + "There's a problem with this formula:" => "Tento vzorec obsahuje problém:", + "There's no comment in this cell." => "V této buňce není komentář.", + "There's no hyperlink in this cell." => "V této buňce není hypertextový odkaz.", + "There's no room below the selection for the totals." => "Pod výběrem není místo pro součty.", + "There's no room below the table for the total row." => "Pod tabulkou není místo pro řádek souhrnů.", + "There's no room to the right of the selection for the total." => "Napravo od výběru není místo pro součet.", + "Thesaurus" => "Slovník synonym", + "Thick Bottom Border" => "Silné dolní ohraničení", + "Thick Outside Borders" => "Silné vnější ohraničení", + "This action won't work on multiple selections." => "Tato akce nefunguje pro více oddělených výběrů.", + "This macro is in “{title}”. Switch back to it to edit, check or run the macro." => { + "Toto makro je v sešitu „{title}“. Vraťte se do něj pro úpravu, kontrolu nebo spuštění makra." + } + "This operation isn't allowed: it would shift cells in a table on your worksheet." => { + "Tato operace není povolena: posunula by buňky tabulky na listu." + } + "This sheet" => "Tento list", + "This sheet has no saved Solver model." => "Na tomto listu není uložen model Řešitele.", + "This workbook" => "Tento sešit", + "This workbook also has a VBA project. GridCraft keeps it when you save but does not run it." => { + "Tento sešit obsahuje také projekt VBA. GridCraft jej při uložení zachová, ale nespouští jej." + } + "This workbook asks to open the address below. Links can lead to harmful sites or start other programs: open it only if you trust the workbook." => { + "Tento sešit požaduje otevření níže uvedené adresy. Odkazy mohou vést na škodlivé weby nebo spustit jiné programy; otevřete jej pouze tehdy, pokud sešitu důvěřujete." + } + "This workbook asks to open the address below. Links can lead to harmful sites or start other programs: open it only if you trust the workbook.\n\n" => { + "Tento sešit požaduje otevření níže uvedené adresy. Odkazy mohou vést na škodlivé weby nebo spustit jiné programy; otevřete jej pouze tehdy, pokud sešitu důvěřujete.\n\n" + } + "This workbook contains VBA macros. GridCraft keeps them intact when you save, but does not run them." => { + "Tento sešit obsahuje makra VBA. GridCraft je při uložení beze změny zachová, ale nespouští je." + } + "This workbook contains VBA macros. GridCraft keeps them when you save as .xlsm, but does not run them." => { + "Tento sešit obsahuje makra VBA. GridCraft je při uložení jako .xlsm zachová, ale nespouští je." + } + "This workbook has no macros yet." => "V tomto sešitu zatím nejsou žádná makra.", + "This workbook has no names to paste." => "V tomto sešitu nejsou žádné názvy k vložení.", + "This workbook's VBA macros could not be loaded and were dropped, so they will not be in the saved file. Keep the original file." => { + "Makra VBA tohoto sešitu se nepodařilo načíst a byla odstraněna, takže nebudou v uloženém souboru. Zachovejte původní soubor." + } + "Tiled" => "Dlaždice", + "Timeline range (blank: first column of the selection):" => "Oblast časové osy (prázdné: první sloupec výběru):", + "Times" => "Násobení", + "Titles and Headings" => "Názvy a nadpisy", + "To do this, all the merged cells need to be the same size." => "Pro tuto akci musí mít všechny sloučené buňky stejnou velikost.", + "To prevent possible loss of data, Excel cannot shift nonblank cells off of the worksheet." => { + "Aby nedošlo ke ztrátě dat, nelze posunout neprázdné buňky mimo list." + } + "To prevent possible loss of data, cells can't be pushed off the end of the worksheet." => { + "Aby nedošlo ke ztrátě dat, nelze buňky vytlačit za konec listu." + } + "To prevent possible loss of data, columns cannot be shifted off of the worksheet." => { + "Aby nedošlo ke ztrátě dat, nelze posunout sloupce mimo list." + } + "To value:" => "Na hodnotu:", + "To:" => "Do:", + "Toggle Checkbox" => "Přepnout zaškrtávací políčko", + "Toggle Slicer Value" => "Přepnout hodnotu průřezu", + "Tokens" => "Tokeny", + "Too few observations for this many X variables." => "Příliš málo pozorování pro tento počet proměnných X.", + "Too many report sheets." => "Příliš mnoho listů sestavy.", + "Tools" => "Nástroje", + "Top" => "Nahoře", + "Top Border" => "Horní ohraničení", + "Top and Bottom Border" => "Horní a dolní ohraničení", + "Top and Double Bottom Border" => "Horní a dvojité dolní ohraničení", + "Top and Thick Bottom Border" => "Horní a silné dolní ohraničení", + "Top margin (in):" => "Horní okraj (palce):", + "Top/Bottom Rules" => "Pravidla pro nejvyšší a nejnižší hodnoty", + "Total" => "Celkem", + "Total Row" => "Řádek souhrnů", + "Totals Function" => "Souhrnná funkce", + "Transpose (E)" => "Transponovat (E)", + "Treat consecutive delimiters as one" => "Považovat sousedící oddělovače za jeden", + "Treemap" => "Stromová mapa", + "Triangle" => "Trojúhelník", + "Trust Scripts" => "Důvěřovat skriptům", + "Two-sided printing" => "Oboustranný tisk", + "Two-sided: long edge" => "Oboustranně: vazba na delší hraně", + "Two-sided: short edge" => "Oboustranně: vazba na kratší hraně", + "Type" => "Typ", + "Type (custom format code):" => "Typ (vlastní kód formátu):", + "Type a command, e.g. freeze, chart, bold…" => "Zadejte příkaz, např. ukotvit, graf, tučné…", + "Type an equation in LaTeX, such as x^2 + y^2 = r^2" => "Zadejte rovnici v LaTeXu, například x^2 + y^2 = r^2", + "Type or choose a macro name." => "Zadejte nebo vyberte název makra.", + "Type the range the macro always runs on." => "Zadejte oblast, ve které se makro vždy spouští.", + "Underline (⌘U)" => "Podtržení (⌘U)", + "Undo (⌘Z)" => "Zpět (⌘Z)", + "Undo Changes" => "Vrátit změny", + "Undo History" => "Historie kroků zpět", + "Undo what the macro did before stopping" => "Před zastavením vrátit změny provedené makrem", + "Undo {action}" => "Zpět {action}", + "Undo {label}" => "Zpět {label}", + "Unique Values" => "Jedinečné hodnoty", + "Unique rows only" => "Pouze jedinečné řádky", + "Unlock with password" => "Odemknout heslem", + "Unprotect Workbook" => "Odemknout sešit", + "Unprotect the sheet to change its edit ranges." => "Pro změnu upravitelných oblastí nejprve odemkněte list.", + "Update" => "Aktualizovat", + "Update and Restart" => "Aktualizovat a restartovat", + "Use AutoFilter" => "Používat automatický filtr", + "Use a field's menu to move it between areas:" => "Pomocí nabídky pole jej přesunete mezi oblastmi:", + "Use current selection as example" => "Použít aktuální výběr jako příklad", + "Use function" => "Použít funkci", + "Username" => "Uživatelské jméno", + "Validation" => "Ověření", + "Value" => "Hodnota", + "Value Field Settings" => "Nastavení pole hodnot", + "Value Of:" => "Hodnota:", + "Value:" => "Hodnota:", + "Values" => "Hodnoty", + "Values (V)" => "Hodnoty (V)", + "Values and number formats" => "Hodnoty a číselné formáty", + "Values range (blank: second column of the selection):" => "Oblast hodnot (prázdné: druhý sloupec výběru):", + "Variable 1 Range:" => "Oblast proměnné 1:", + "Variable 2 Range:" => "Oblast proměnné 2:", + "Variable cells must hold constants, not formulas." => "Proměnné buňky musí obsahovat konstanty, nikoli vzorce.", + "Version {version}" => "Verze {version}", + "Vertical" => "Svisle", + "Vertical Borders" => "Svislá ohraničení", + "Vertical axis title:" => "Název svislé osy:", + "Visible cells only" => "Pouze viditelné buňky", + "Warning" => "Varování", + "Warning Text" => "Text varování", + "Waterfall" => "Vodopádový", + "We looked at all the data next to your selection and didn't see a pattern for filling in values for you." => { + "V datech vedle výběru se nepodařilo najít vzor pro automatické doplnění hodnot." + } + "Web" => "Web", + "Weekday" => "Pracovní den", + "What this means" => "Co to znamená", + "What's new" => "Novinky", + "When results would land on cells that hold data:" => "Když by výsledky přepsaly buňky obsahující data:", + "White - Green" => "Bílá – zelená", + "White - Red" => "Bílá – červená", + "Whole number" => "Celé číslo", + "Width" => "Šířka", + "Width " => "Šířka ", + "Width: {size} ({px} pixels)" => "Šířka: {size} ({px} pixelů)", + "Win/Loss" => "Zisk/ztráta", + "Window" => "Okno", + "Windows" => "Okna", + "Windows of active workbook" => "Okna aktivního sešitu", + "Within workbook" => "V celém sešitu", + "Workbook" => "Sešit", + "Workbook Views" => "Zobrazení sešitu", + "Write a macro step by step" => "Vytvořit makro krok za krokem", + "Write a new macro with this name" => "Vytvořit nové makro s tímto názvem", + "XLSB is supported for data import only. Save as .xlsx or another supported export format." => { + "XLSB podporuje pouze import dat. Uložte jako .xlsx nebo jiný podporovaný výstupní formát." + } + "Year" => "Rok", + "You can't change part of an array." => "Nelze změnit část matice.", + "Z to A" => "Z až A", + "Zeros" => "Nuly", + "`categories` is not a range" => "`categories` není oblast", + "`columns` must name at least one column of the range" => "`columns` musí určovat alespoň jeden sloupec oblasti", + "`commands` must be an array" => "`commands` musí být pole", + "`confidence` is between 0 and 1 (or 0 and 100%)" => "`confidence` musí být mezi 0 a 1 nebo mezi 0 a 100 %", + "`constraints` must be an array" => "`constraints` musí být pole", + "`enableShowDetails` must be true or false" => "`enableShowDetails` musí být true nebo false", + "`end` is not on the timeline" => "`end` není bodem časové osy", + "`flip` is not supported: shapes have no flip state" => "`flip` není podporováno: obrazce nemají stav převrácení", + "`forecastStart` is not on the timeline (it is a point of the history, before its last point)" => { + "`forecastStart` není na časové ose; musí jít o historický bod před jejím posledním bodem" + } + "`id` must be a text box id" => "`id` musí být identifikátor textového pole", + "`model` must be data.solver params" => "`model` musí obsahovat parametry příkazu data.solver", + "`name` must be 1 to 255 characters" => "`name` musí mít 1 až 255 znaků", + "`numberFormat` is a format code or null" => "`numberFormat` musí být kód formátu nebo null", + "`printArea` must be a range like \"A1:F50\"" => "`printArea` musí být oblast, například \"A1:F50\"", + "`reports` is empty (answer, limits)" => "`reports` je prázdné; přípustné hodnoty jsou answer a limits", + "`reports` must be an array of answer and limits" => "`reports` musí být pole hodnot answer a limits", + "`seasonality` is \"auto\", 0 (none) or a season length from 2 to 8,760" => { + "`seasonality` musí být \"auto\", 0 bez sezónnosti nebo délka sezóny od 2 do 8 760" + } + "`selected` is a list of item labels or null" => "`selected` musí být seznam popisků položek nebo null", + "`text` is longer than 32,767 characters" => "`text` je delší než 32 767 znaků", + "`text` must be a string" => "`text` musí být řetězec", + "`to` must be a number" => "`to` musí být číslo", + "`trusted` must be true or false" => "`trusted` musí být true nebo false", + "`{cell}` for `{key}` names a sheet other than the one this command works on" => { + "Odkaz `{cell}` v parametru `{key}` uvádí jiný list, než se kterým tento příkaz pracuje" + } + "a field object needs `field`" => "Objekt pole vyžaduje `field`", + "a list validation needs `formula1`" => "Ověření seznamem vyžaduje `formula1`", + "a stroke needs at least two points" => "Tah musí obsahovat alespoň dva body", + "all cells must be on one sheet" => "Všechny buňky musí být na jednom listu", + "all cells of a reference must be on one sheet" => "Všechny buňky odkazu musí být na jednom listu", + "alpha must be between 0 and 1" => "Alfa musí být mezi 0 a 1", + "anything" => "Cokoli", + "array constants may only contain constants, found {token}" => "Konstanty pole mohou obsahovat pouze konstanty, nalezeno {token}", + "array rows must have the same length" => "Řádky pole musí mít stejnou délku", + "bad number `{number}`" => "Neplatné číslo `{number}`", + "beta" => "Beta", + "by {developer}" => "Od vývojáře {developer}", + "calculator" => "Kalkulačka", + "cell pictures are limited to 8192 pixels per side and 16 million pixels" => { + "Obrázky v buňkách mohou mít nejvýše 8192 pixelů na stranu a celkem 16 milionů pixelů" + } + "cell pictures must be at most 16 MiB" => "Obrázky v buňkách mohou mít nejvýše 16 MiB", + "cell pictures support PNG and JPEG" => "Obrázky v buňkách podporují PNG a JPEG", + "cf|AboveAverage" => "Nad průměrem", + "cf|BeginsWith" => "Začíná na", + "cf|Blanks" => "Prázdné buňky", + "cf|CellIs" => "Hodnota buňky", + "cf|ColorScale" => "Barevná škála", + "cf|ContainsText" => "Obsahuje text", + "cf|DataBar" => "Datový pruh", + "cf|Duplicate" => "Duplicitní hodnoty", + "cf|EndsWith" => "Končí na", + "cf|Errors" => "Chyby", + "cf|Expression" => "Vzorec", + "cf|IconSet" => "Sada ikon", + "cf|NoBlanks" => "Neprázdné buňky", + "cf|NoErrors" => "Buňky bez chyb", + "cf|NotContainsText" => "Neobsahuje text", + "cf|TimePeriod" => "Časové období", + "cf|Top10" => "Prvních 10", + "cf|Unique" => "Jedinečné hodnoty", + "choose a valid PNG or JPEG picture" => "vyberte platný obrázek PNG nebo JPEG", + "choose at least one of summary, confidence, kthLargest or kthSmallest" => { + "vyberte alespoň jednu možnost: summary, confidence, kthLargest nebo kthSmallest" + } + "column outside the filter range" => "sloupec je mimo oblast filtru", + "contains" => "obsahuje", + "dashed" => "čárkovaná", + "dates" => "data", + "destination columns are outside the worksheet" => "cílové sloupce jsou mimo list", + "dotted" => "tečkovaná", + "empty input Y range" => "prázdná vstupní oblast Y", + "empty input range" => "prázdná vstupní oblast", + "expected ! after sheet name" => "za názvem listu se očekává !", + "expected `,` or `)`, found {token}" => "očekává se `,` nebo `)`, nalezeno {token}", + "expected a number in array, found {token}" => "v poli se očekává číslo, nalezeno {token}", + "expected a reference after the sheet name, found {token}" => "za názvem listu se očekává odkaz, nalezeno {token}", + "expected exclusive or inclusive" => "očekává se exclusive nebo inclusive", + "expected {expected}, found {actual}" => "očekává se {expected}, nalezeno {actual}", + "false" => "nepravda", + "files larger than 2 GB aren't supported" => "soubory větší než 2 GB nejsou podporovány", + "folder" => "složka", + "formula is longer than {limit} characters" => "vzorec je delší než {limit} znaků", + "formula is nested too deeply" => "vzorec je příliš hluboce vnořený", + "give `rowInput`, `columnInput` or both" => "zadejte `rowInput`, `columnInput` nebo obojí", + "give at least one source range in `sources`" => "zadejte alespoň jednu zdrojovou oblast v `sources`", + "give both `timeline` and `values`, or neither" => "zadejte současně `timeline` a `values`, nebo ani jedno", + "goal `value` needs a number in `value`" => "cíl `value` vyžaduje číslo v `value`", + "gone" => "již není k dispozici", + "image larger than 64 MB" => "obrázek je větší než 64 MB", + "invalid 3-D reference" => "neplatný prostorový odkaz", + "invalid base64" => "neplatné kódování base64", + "invalid cell address" => "neplatná adresa buňky", + "invalid cell reference `{cell}` for `{key}`" => "neplatný odkaz na buňku `{cell}` pro `{key}`", + "invalid image dimensions" => "neplatné rozměry obrázku", + "kind must be chart, image or shape" => "kind musí být chart, image nebo shape", + "lock" => "zámek", + "menu|Tools" => "Nástroje", + "minus" => "minus", + "missing `area` (rows|columns|values|filters)" => "chybí `area` (rows|columns|values|filters)", + "missing `before`" => "chybí `before`", + "missing `cell`" => "chybí `cell`", + "missing `cell`: the selection is on the active sheet" => "chybí `cell`: výběr je na aktivním listu", + "missing `changing`" => "chybí `changing`", + "missing `column`" => "chybí `column`", + "missing `field`" => "chybí `field`", + "missing `format` or `code`" => "chybí `format` nebo `code`", + "missing `formula`" => "chybí `formula`", + "missing `height` (pixels) or `points`" => "chybí `height` (pixely) nebo `points`", + "missing `id`" => "chybí `id`", + "missing `index`" => "chybí `index`", + "missing `input` (or `value`)" => "chybí `input` (nebo `value`)", + "missing `location`" => "chybí `location`", + "missing `name`" => "chybí `name`", + "missing `output` (the output range)" => "chybí `output` (výstupní oblast)", + "missing `path`" => "chybí `path`", + "missing `percent`" => "chybí `percent`", + "missing `range`" => "chybí `range`", + "missing `range`, `categories` or `removeSeries`" => "chybí `range`, `categories` nebo `removeSeries`", + "missing `range`: the selection is on the active sheet" => "chybí `range`: výběr je na aktivním listu", + "missing `reference`" => "chybí `reference`", + "missing `reports` (answer, limits)" => "chybí `reports` (answer, limits)", + "missing `rows` or `cols`: the selection is on the active sheet" => "chybí `rows` nebo `cols`: výběr je na aktivním listu", + "missing `size`" => "chybí `size`", + "missing `source`" => "chybí `source`", + "missing `target`" => "chybí `target`", + "missing `title`" => "chybí `title`", + "missing `to`" => "chybí `to`", + "missing `value`" => "chybí `value`", + "missing `values` (array of rows)" => "chybí `values` (pole řádků)", + "missing `what`" => "chybí `what`", + "missing `width`" => "chybí `width`", + "missing `width` (pixels) or `chars`" => "chybí `width` (pixely) nebo `chars`", + "missing `word`" => "chybí `word`", + "missing `{parameter}`" => "chybí `{parameter}`", + "missing or invalid `color`" => "chybí nebo je neplatná hodnota `color`", + "missing the constraint's right side" => "chybí pravá strana omezující podmínky", + "mode must be moveAndSize, moveOnly or absolute" => "mode musí být moveAndSize, moveOnly nebo absolute", + "multi-area charts require a text category column followed by equal-height series columns" => { + "graf z více oblastí vyžaduje sloupec textových kategorií následovaný stejně vysokými sloupci datových řad" + } + "multi-area series columns require headers" => "sloupce datových řad z více oblastí vyžadují záhlaví", + "new workbook|Book" => "Sešit", + "new workbook|Sheet" => "List", + "no changing cells" => "nejsou určeny měněné buňky", + "no chart on this sheet" => "na tomto listu není žádný graf", + "no filter" => "žádný filtr", + "no ink stroke to convert" => "není k dispozici žádný tah pera k převodu", + "no sheet named `{sheet}`" => "neexistuje list s názvem `{sheet}`", + "no slicer" => "žádný průřez", + "no slicer on this sheet" => "na tomto listu není žádný průřez", + "no such chart" => "takový graf neexistuje", + "no such name" => "takový název neexistuje", + "no such name to edit" => "takový název k úpravě neexistuje", + "no such object" => "takový objekt neexistuje", + "no such range" => "taková oblast neexistuje", + "no such scenario" => "takový scénář neexistuje", + "no such script" => "takový skript neexistuje", + "no such series" => "taková datová řada neexistuje", + "no such shape" => "takový obrazec neexistuje", + "no such sheet" => "takový list neexistuje", + "no such text box" => "takové textové pole neexistuje", + "no such view" => "takové zobrazení neexistuje", + "no such window" => "takové okno neexistuje", + "no suggestion with that index" => "návrh s tímto indexem neexistuje", + "no value field at that index" => "pole hodnot s tímto indexem neexistuje", + "no workbook open" => "není otevřen žádný sešit", + "not a range" => "nejde o oblast", + "not a range: `{range}`" => "nejde o oblast: `{range}`", + "not between" => "není mezi", + "not found" => "nenalezeno", + "nothing" => "nic", + "number too large `{number}`" => "příliš velké číslo `{number}`", + "of" => "z", + "of:" => "z:", + "parameter" => "parametr", + "pass `field` or `index`" => "zadejte `field` nebo `index`", + "pi" => "pí", + "picture cannot be decoded within the 64 MiB limit" => "obrázek nelze dekódovat v limitu 64 MiB", + "pie chart" => "výsečový graf", + "pixels" => "pixely", + "placement must be cell or overCells" => "placement musí být cell nebo overCells", + "plus" => "plus", + "range larger than 1,000,000 cells; read it in parts" => "oblast má více než 1 000 000 buněk; načtěte ji po částech", + "range too large" => "příliš velká oblast", + "range too large for a chart" => "oblast je pro graf příliš velká", + "result cells must be on the scenarios' sheet" => "výsledné buňky musí být na stejném listu jako scénáře", + "scatter" => "bodový graf", + "script" => "skript", + "scripts in this workbook came from a file and are disabled; trust the workbook first (Trust Scripts in View › Macros, Alt+F8; `automate.trustScripts`; or `trusted: true`)" => { + "skripty v tomto sešitu pocházejí ze souboru a jsou zakázány; nejprve označte sešit jako důvěryhodný (Důvěřovat skriptům v Zobrazení › Makra, Alt+F8; `automate.trustScripts`; nebo `trusted: true`)" + } + "select a cell in a table" => "vyberte buňku v tabulce", + "selection too large" => "příliš velký výběr", + "selection too large to format cell by cell" => "výběr je příliš velký pro formátování po jednotlivých buňkách", + "settings" => "nastavení", + "single cell" => "jedna buňka", + "sort key row must be 1 or greater" => "řádek klíče řazení musí být 1 nebo větší", + "source columns are outside the worksheet" => "zdrojové sloupce jsou mimo list", + "step" => "krok", + "steps" => "kroky", + "style name too long" => "název stylu je příliš dlouhý", + "sum" => "součet", + "t-Test: Paired Two Sample for Means" => "Párový dvouvýběrový t-test středních hodnot", + "t-Test: Two-Sample Assuming Equal Variances" => "Dvouvýběrový t-test s rovností rozptylů", + "t-Test: Two-Sample Assuming Unequal Variances" => "Dvouvýběrový t-test s nerovností rozptylů", + "the changes you made?|changes" => "změny", + "the confidence level must be between 0 and 100" => "hladina spolehlivosti musí být mezi 0 a 100", + "the constraint's right side must be a number" => "pravá strana omezující podmínky musí být číslo", + "the criteria range is too large" => "oblast kritérií je příliš velká", + "the extract range exceeds the worksheet" => "výstupní oblast přesahuje list", + "the forecast runs past the last date" => "prognóza přesahuje poslední datum", + "the inserted lines would extend past the end of the worksheet" => "vložené řádky nebo sloupce by přesáhly konec listu", + "the list range is too large" => "oblast seznamu je příliš velká", + "the move is too close to the worksheet boundary" => "přesun je příliš blízko okraji listu", + "the name is too long (255 characters max)" => "název je příliš dlouhý (nejvýše 255 znaků)", + "the report is too large" => "sestava je příliš velká", + "the shape is not a text box" => "obrazec není textové pole", + "the sources are too large" => "zdrojové oblasti jsou příliš velké", + "the symbol can't contain a quote, a backslash or a control character" => "symbol nesmí obsahovat uvozovku, zpětné lomítko ani řídicí znak", + "the table has no columns" => "tabulka nemá žádné sloupce", + "the table needs at least two rows and two columns" => "tabulka musí mít alespoň dva řádky a dva sloupce", + "the target must contain the source in one of its corners" => "cílová oblast musí obsahovat zdrojovou oblast v jednom ze svých rohů", + "the timeline and the values are each one row or one column" => "časová osa i hodnoty musí tvořit jeden řádek nebo jeden sloupec", + "the timeline and the values must be on one sheet" => "časová osa a hodnoty musí být na jednom listu", + "the timeline and the values need the same number of cells" => "časová osa a hodnoty musí mít stejný počet buněk", + "theme" => "motiv", + "theta" => "théta", + "thick" => "silná", + "thin" => "tenká", + "this workbook" => "tento sešit", + "times" => "krát", + "too many arguments" => "příliš mnoho argumentů", + "too many items" => "příliš mnoho položek", + "too many rows" => "příliš mnoho řádků", + "too many scenarios" => "příliš mnoho scénářů", + "too many sort levels (64 max)" => "příliš mnoho úrovní řazení (nejvýše 64)", + "too many sources (255 max)" => "příliš mnoho zdrojů (nejvýše 255)", + "trace" => "sledování", + "trendlines need a 2-D column, bar, line, area, scatter or bubble series" => { + "spojnice trendu vyžadují dvourozměrnou sloupcovou, pruhovou, spojnicovou, plošnou, bodovou nebo bublinovou datovou řadu" + } + "true" => "pravda", + "unbalanced [" => "chybí uzavírací závorka pro [", + "unexpected character `{character}`" => "neočekávaný znak `{character}`", + "unexpected end of formula" => "neočekávaný konec vzorce", + "unexpected {token}" => "neočekávaný token {token}", + "unknown command `{command}`" => "neznámý příkaz `{command}`", + "unknown error literal" => "neznámý zápis chybové hodnoty", + "validation" => "ověření", + "value" => "hodnota", + "value is not in the column" => "hodnota není ve sloupci", + "v{from} to {to}" => "v{from} → {to}", + "with" => "s", + "{app} {version} is available with the latest features and bug fixes." => "{app} {version} je k dispozici s novými funkcemi a opravami chyb.", + "{asked} already holds data. Replace it with the model?" => "{asked} již obsahuje data. Nahradit je modelem?", + "{contributors} contributors · {commits} commits" => "Přispěvatelé: {contributors} · commity: {commits}", + "{count} cell(s) found" => "Počet nalezených buněk: {count}", + "{count} engine commands are available. See docs/mcp.md and docs/control-protocol.md." => { + "K dispozici je {count} příkazů výpočetního jádra. Viz docs/mcp.md a docs/control-protocol.md." + } + "{family} table style {number}" => "Styl tabulky {family} {number}", + "{file}, Page 1" => "{file}, strana 1", + "{function} has too few arguments. Use {signature}" => "{function} má příliš málo argumentů. Použijte {signature}", + "{function} has too many arguments. Use {signature}" => "{function} má příliš mnoho argumentů. Použijte {signature}", + "{id} can't run in a macro: {why}." => "{id} nelze spustit v makru: {why}.", + "{id} {what}: the macro must list it in its permissions." => "{id} {what}: makro to musí uvést ve svých oprávněních.", + "{name} (script, {count})" => "{name} (skript, {count})", + "{number}. {kind} applies to {ranges}" => "{number}. {kind} platí pro {ranges}", + "{n} cell(s) found" => "Počet nalezených buněk: {n}", + "{range} already holds data. Replace it with the model?" => "{range} již obsahuje data. Nahradit je modelem?", + "{sheet}, Page 1" => "{sheet}, strana 1", + "¥ Chinese (PRC)" => "¥ čínština (ČLR)", + "·" => "·", + "ΔLOC" => "ΔLOC", + "— 1 step" => "— 1 krok", + "— VBA project (preserved, not run)" => "— projekt VBA (zachován, nespouští se)", + "— {steps} step" => "— počet kroků: {steps}", + "— {steps} steps" => "— počet kroků: {steps}", + "₩ Korean" => "₩ korejština", + "₹ English (India)" => "₹ angličtina (Indie)", + "₽ Russian" => "₽ ruština", + "↑ Sort Ascending" => "↑ Seřadit vzestupně", + "↓ Sort Descending" => "↓ Seřadit sestupně", + "−Bin" => "−Bin", + "−LOC" => "−LOC", + "⌘/Ctrl+Enter to apply" => "⌘/Ctrl+Enter pro použití", + "⌘/Ctrl+Enter to insert" => "⌘/Ctrl+Enter pro vložení", + "⌘/Ctrl+Enter to {verb}" => "⌘/Ctrl+Enter: {verb}", + "▲" => "▲", + "▼" => "▼", + "▾" => "▾", _ => return None, }) } + +#[cfg(test)] +mod tests { + mod inventory { + include!("keys.rs"); + } + + /// Retain every interface key collected by the catalog and UI source audit. + #[test] + fn czech_covers_the_audited_interface_inventory() { + for &key in inventory::INTERFACE { + assert!(super::translate(key).is_some(), "Missing Czech interface key: {key}"); + } + } +} diff --git a/crates/ui-egui/src/i18n/cs_functions.rs b/crates/ui-egui/src/i18n/cs_functions.rs new file mode 100644 index 0000000000..163504f1e8 --- /dev/null +++ b/crates/ui-egui/src/i18n/cs_functions.rs @@ -0,0 +1,945 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Czech wording reviewed against the English catalog and function argument semantics. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 pro kladné, -1 pro záporné a 0 pro nulu."), + ("A random integer between two bounds, inclusive.", "Náhodné celé číslo mezi dvěma mezemi včetně."), + ("A random number between 0 and 1, recalculated every time.", "Náhodné číslo mezi 0 a 1, pokaždé přepočítané."), + ("A range or array without its blank outer rows and columns.", "Rozsah nebo pole bez prázdných vnějších řádků a sloupců."), + ("A reference shifted from a starting point.", "Odkaz posunutý vůči výchozímu bodu."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Statistika modelu FORECAST.ETS: 1 alfa, 2 beta, 3 gama, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 velikost kroku.", + ), + ("A subtotal that can skip hidden rows.", "Mezisoučet, který může přeskočit skryté řádky."), + ("Absolute value (modulus) of a complex number.", "Absolutní hodnota (modul) komplexního čísla."), + ("Absolute value of a number.", "Absolutní hodnota čísla."), + ("Accrued interest of a security paying interest at maturity.", "Naběhlý úrok z cenného papíru s výplatou úroku při splatnosti."), + ("Accrued interest of a security paying periodic interest.", "Naběhlý úrok z cenného papíru s pravidelnými úrokovými platbami."), + ("Accumulates an array into one value.", "Akumuluje pole do jedné hodnoty."), + ("Adds all the numbers in the arguments.", "Sečte všechna čísla zadaná v argumentech."), + ("Adds the cells that meet a condition.", "Vrátí součet číselných hodnot v buňkách tabulky, které splňují podmínku."), + ("Adds the cells that meet every condition.", "Vrátí součet číselných hodnot v buňkách tabulky, které splňují všechny podmínky."), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Vrátí součet číselných hodnot v poli databáze pro záznamy splňující kritéria.", + ), + ("Adds the squares of the numbers.", "Vrátí součet druhých mocnin čísel."), + ("Amount received at maturity for a fully invested security.", "Částka přijatá při splatnosti plně investovaného cenného papíru."), + ("An aggregate that can skip hidden rows and errors.", "Agregát, který může přeskakovat skryté řádky a chyby."), + ("Angle of a complex number in radians.", "Úhel komplexního čísla v radiánech."), + ("Angle of the point (x, y) from the x-axis in radians.", "Úhel bodu (x, y) od osy x v radiánech."), + ("Annual yield of a discounted security.", "Roční výnos diskontovaného cenného papíru."), + ("Annual yield of a security paying interest at maturity.", "Roční výnos cenného papíru s výplatou úroku při splatnosti."), + ("Applies a LAMBDA to each column.", "Použije LAMBDA na každý sloupec."), + ("Applies a LAMBDA to each row.", "Použije LAMBDA na každý řádek."), + ("Applies a LAMBDA to each value.", "Ke každé hodnotě použije LAMBDA."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Přibližné vyhledávání v seřazeném vektoru nebo prvním řádku/sloupci pole.", + ), + ("Arccosine in radians.", "Arkuskosinus v radiánech."), + ("Arccotangent in radians (0 to pi).", "Arkuskotangens v radiánech (0 až pí)."), + ("Arcsine in radians.", "Arkussinus v radiánech."), + ("Arctangent in radians.", "Arkustangens v radiánech."), + ("Arithmetic mean of the numbers.", "Aritmetický průměr čísel."), + ("Average absolute deviation from the mean.", "Průměrná absolutní odchylka od průměru."), + ("Average of the cells that meet a condition.", "Průměr buněk tabulky, které splňují podmínku."), + ("Average of the cells that meet every condition.", "Průměr buněk tabulky, které splňují všechny podmínky."), + ("Averages the numbers in a field of the records that meet the criteria.", "Zprůměruje čísla v poli záznamů, které splňují kritéria."), + ("Base-10 logarithm of a complex number.", "Dekadický logaritmus komplexního čísla."), + ("Base-10 logarithm.", "Dekadický logaritmus."), + ("Base-2 logarithm of a complex number.", "Logaritmus komplexního čísla o základu 2."), + ("Bessel function of the first kind, J_n(x).", "Besselova funkce prvního druhu, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Besselova funkce druhého druhu, Y_n(x)."), + ("Beta distribution density or probability.", "Hustota nebo pravděpodobnost beta distribuce."), + ("Binomial probability.", "Binomická pravděpodobnost."), + ("Bitwise AND of two non-negative integers.", "Bitové AND dvou nezáporných celých čísel."), + ("Bitwise OR of two non-negative integers.", "Bitové OR dvou nezáporných celých čísel."), + ("Bitwise exclusive OR of two non-negative integers.", "Bitově exkluzivní OR dvou nezáporných celých čísel."), + ("Bond-equivalent yield of a Treasury bill.", "Výnos státní pokladniční poukázky přepočtený na dluhopisový ekvivalent."), + ("Breaks a row or column into columns of the given length.", "Rozdělí řádek nebo sloupec na sloupce dané délky."), + ("Breaks a row or column into rows of the given length.", "Rozdělí řádek nebo sloupec na řádky dané délky."), + ("Builds a cell address as text from row and column numbers.", "Sestaví adresu buňky jako text z čísel řádků a sloupců."), + ("Builds a complex number as text from real and imaginary parts.", "Sestaví komplexní číslo jako text z reálné a imaginární části."), + ("Builds a date serial number from a year, month and day.", "Sestaví pořadové číslo data z roku, měsíce a dne."), + ( + "Builds a summary table grouping values by row and column fields.", + "Vytváří souhrnnou tabulku seskupující hodnoty podle řádkových a sloupcových polí.", + ), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "Sestaví čas (zlomek dne) z hodin, minut a sekund."), + ("Builds an array from a LAMBDA.", "Sestaví pole z LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Sestaví pole rovnoměrně odstupňovaných čísel."), + ("Builds an array of random numbers in a range.", "Sestaví pole náhodných čísel v rozsahu."), + ("Byte version of FIND.", "Bajtová verze FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Bajtová verze LEFT (stejná jako LEFT pro jednobajtový text)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Bajtová verze LEN (stejná jako LEN pro jednobajtový text)."), + ("Byte version of MID (same as MID for single-byte text).", "Bajtová verze MID (stejná jako MID pro jednobajtový text)."), + ("Byte version of REPLACE.", "Bajtová verze REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Bajtová verze RIGHT (stejná jako RIGHT pro jednobajtový text)."), + ("Byte version of SEARCH.", "Bajtová verze SEARCH."), + ( + "Capitalises the first letter of each word and lower-cases the rest.", + "Převede první písmeno každého slova na velké a ostatní písmena na malá.", + ), + ("Chi-squared density or left-tailed probability.", "Hustota chí-kvadrát nebo levostranná pravděpodobnost."), + ("Chi-squared test of independence.", "Chí-kvadrát test nezávislosti."), + ("Column number of a reference.", "Číslo sloupce odkazu."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Porovná výraz se seznamem hodnot a vrátí výsledek spárovaný s první shodou.", + ), + ("Complementary error function, 1 - ERF(x).", "Doplňková chybová funkce, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Komplexně sdružené číslo."), + ("Confidence interval half-width using Student's t distribution.", "Poloviční šířka intervalu spolehlivosti pomocí Studentova t rozdělení."), + ("Confidence interval half-width using the normal distribution.", "Poloviční šířka intervalu spolehlivosti pomocí normálního rozdělení."), + ("Converts Roman numerals to a number.", "Převede římské číslice na číslo."), + ("Converts a binary number to decimal.", "Převede binární číslo na desítkové."), + ("Converts a binary number to hexadecimal.", "Převede binární číslo na šestnáctkové."), + ("Converts a binary number to octal.", "Převede binární číslo na osmičkové."), + ("Converts a date written as text into a date serial number.", "Převede datum zapsané jako text na pořadové číslo data."), + ("Converts a decimal number to binary.", "Převede desítkové číslo na binární."), + ("Converts a decimal number to hexadecimal.", "Převede desítkové číslo na šestnáctkové."), + ("Converts a decimal number to octal.", "Převede číslo z desítkové soustavy do osmičkové."), + ("Converts a decimal price to fractional notation.", "Převede desetinnou cenu na zlomkový zápis."), + ("Converts a fractional price notation to a decimal number.", "Převede zápis zlomkové ceny na desetinné číslo."), + ("Converts a hexadecimal number to binary.", "Převede hexadecimální číslo na binární."), + ("Converts a hexadecimal number to decimal.", "Převede šestnáctkové číslo na desítkové."), + ("Converts a hexadecimal number to octal.", "Převede hexadecimální číslo na osmičkové."), + ("Converts a measurement from one unit to another.", "Převede hodnotu z jedné měrné jednotky na jinou."), + ("Converts a number to Roman numerals in one of five styles.", "Převede číslo na římské číslice v jednom z pěti stylů."), + ("Converts a time written as text into a fraction of a day.", "Převede čas zapsaný jako text na zlomek dne."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Převede hodnotu na číslo: čísla zůstanou, TRUE je 1, vše ostatní je 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Převede pole na text, buď jako seznam oddělený čárkami, nebo jako striktní konstantu pole.", + ), + ("Converts an octal number to binary.", "Převede osmičkové číslo na binární."), + ("Converts an octal number to decimal.", "Převede osmičkové číslo na desítkové."), + ("Converts an octal number to hexadecimal.", "Převede osmičkové číslo na šestnáctkové."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Převede libovolnou hodnotu na text, volitelně v přísném (uvozovkovém) tvaru.", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Převádí mezi eurem a původními měnami členských zemí eurozóny za pevné kurzy.", + ), + ("Converts degrees to radians.", "Převede stupně na radiány."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Převede znaky s plnou šířkou na poloviční šířku (u jednobajtového textu žádná změna).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Převede znaky s poloviční šířkou na znaky s plnou šířkou (žádná změna v tomto národním prostředí).", + ), + ("Converts radians to degrees.", "Převede radiány na stupně."), + ("Converts text that looks like a number, date or time into a number.", "Převede text, který vypadá jako číslo, datum nebo čas, na číslo."), + ( + "Converts text to a number using the given decimal and group separators.", + "Převede text na číslo pomocí daných oddělovačů desetinných míst a skupin.", + ), + ("Converts text to lower case.", "Převede text na malá písmena."), + ("Converts text to upper case.", "Převede text na velká písmena."), + ("Correlation coefficient of two data sets.", "Korelační koeficient dvou datových sad."), + ("Cosecant of a complex number.", "Kosekans komplexního čísla."), + ("Cosecant of an angle in radians.", "Kosekans úhlu v radiánech."), + ("Cosine of a complex number.", "Kosinus komplexního čísla."), + ("Cosine of an angle in radians.", "Kosinus úhlu v radiánech."), + ("Cotangent of a complex number.", "Kotangens komplexního čísla."), + ("Cotangent of an angle in radians.", "Kotangens úhlu v radiánech."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Počítá dny mezi dvěma daty v 360denním roce (US nebo evropská metoda).", + ), + ("Counts empty cells and empty text in a range.", "Spočítá prázdné buňky tabulky a prázdný text v rozsahu."), + ("Counts how many values fall into each bin, as a vertical array.", "Spočítá, kolik hodnot spadá do každé přihrádky, jako vertikální pole."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Počítá neprázdné buňky tabulky v poli odpovídajících záznamů (nebo odpovídajících záznamů).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Spočítá číselné buňky tabulky v poli odpovídajících záznamů (nebo odpovídajících záznamů).", + ), + ("Counts the cells that meet a condition.", "Spočítá buňky tabulky, které splňují podmínku."), + ("Counts the cells that meet every condition.", "Spočítá buňky tabulky, které splňují všechny podmínky."), + ("Counts the characters in a text.", "Počítá znaky v textu."), + ("Counts the columns in an array or range.", "Spočítá sloupce v poli nebo rozsahu."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Počet položek v sadě členů krychle (bez připojení ke krychli; #N/A)."), + ("Counts the non-empty values.", "Spočítá neprázdné hodnoty."), + ("Counts the numbers.", "Počítá čísla."), + ("Counts the rows in an array or range.", "Spočítá řádky v poli nebo rozsahu."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Počítá celé roky, měsíce nebo dny mezi dvěma daty. jednotka: Y, M, D, MD, YM nebo YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Počítá pracovní dny (pondělí až pátek) mezi dvěma daty, kromě svátků.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Počítá pracovní dny mezi dvěma daty s vlastním víkendem, kromě svátků.", + ), + ("Creates a link; the cell shows the friendly name, or the link itself.", "Vytvoří odkaz; buňka zobrazuje popisný název nebo samotný odkaz."), + ("Creates a reusable custom function.", "Vytvoří znovu použitelnou vlastní funkci."), + ("Cumulative beta probability.", "Kumulativní beta pravděpodobnost."), + ("Cumulative lognormal probability.", "Kumulativní lognormální pravděpodobnost."), + ("Cuts off the fractional part of a number at the given digits.", "Odřízne zlomkovou část čísla na daných číslicích."), + ("Days from settlement to the next coupon date.", "Dny od vypořádání do data příští platby úroku."), + ("Days from the start of the coupon period to settlement.", "Dny od začátku období splatnosti úroku do vypořádání."), + ("Days in the coupon period that contains settlement.", "Dny v období splatnosti úroku, které obsahuje vypořádání."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Degresivní odpisy za libovolný úsek období s přechodem na rovnoměrné odpisování.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Definuje sadu členů krychle (žádná připojení krychle; #N/A)."), + ("Determinant of a square matrix.", "Determinant čtvercové matice."), + ("Difference of two complex numbers.", "Rozdíl dvou komplexních čísel."), + ("Discount rate of a security.", "Diskontní sazba cenného papíru."), + ("Double factorial of a number.", "Dvojitý faktoriál čísla."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Degresivní odpis za období s dvojnásobnou sazbou (nebo jiným koeficientem).", + ), + ("Effective annual rate from a nominal rate and compounding periods.", "Efektivní roční sazba z nominální sazby a počtu úrokovacích období."), + ("Equivalent interest rate for the growth of an investment.", "Ekvivalentní úroková sazba pro růst investice."), + ( + "Error function integrated from 0 to a limit, or between two limits.", + "Chybová funkce pro interval od 0 do zadané meze nebo mezi dvěma mezemi.", + ), + ("Error function integrated from 0 to x.", "Chybová funkce integrovaná od 0 do x."), + ("Excess kurtosis of a sample.", "Výběrový exces (špičatost po odečtení hodnoty pro normální rozdělení)."), + ("Exponential curve coefficients and optional regression statistics.", "Koeficienty exponenciální křivky a volitelná regresní statistika."), + ("Exponential distribution density or probability.", "Hustota nebo pravděpodobnost exponenciálního rozdělení."), + ("Exponential of a complex number.", "Exponenciála komplexního čísla."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Extrahuje data z XML pomocí cesty XPath (není k dispozici; vrátí #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Extrahuje první shodu, všechny shody nebo zachycené skupiny regulárního výrazu.", + ), + ("F distribution density or left-tailed probability.", "Hustota rozdělení F nebo levostranná pravděpodobnost."), + ("Factorial of a number.", "Faktoriál čísla."), + ("Fetches data from a web service (not available; returns #VALUE!).", "Načte data z webové služby (není k dispozici; vrátí #VALUE!)."), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Najde hodnotu v prvním sloupci tabulky a vrátí hodnotu ve stejném řádku jiného sloupce.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Najde hodnotu v prvním řádku tabulky a vrátí hodnotu ve stejném sloupci jiného řádku.", + ), + ("Finds the position of one text in another (case-sensitive).", "Najde pozici jednoho textu v jiném (rozlišují se malá a velká písmena)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Najde pozici jednoho textu v jiném, ignoruje malá a velká písmena a povolí zástupné znaky.", + ), + ("Fisher transformation.", "Fisherova transformace."), + ("Fixed-declining-balance depreciation for a period.", "Degresivní odpis za období při pevné odpisové sazbě."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Převede pole na jediný sloupec, volitelně vynechá prázdné buňky nebo chyby.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Převede pole na jediný řádek, volitelně vynechá prázdné buňky nebo chyby.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Předpovídá hodnotu pomocí aditivního (AAA) exponenciálního vyhlazování."), + ("Formats a number as currency text, like DOLLAR.", "Formátuje číslo jako text měny, například DOLLAR."), + ("Formats a number as currency text.", "Formátuje číslo jako text měny."), + ("Formats a number as text.", "Formátuje číslo jako text."), + ("French degressive depreciation with a life-based coefficient.", "Francouzské degresivní odpisy s koeficientem založeným na životnosti."), + ("French linear depreciation prorated for the first period.", "Francouzské lineární odpisy poměrné za první období."), + ("Future value of a principal after a series of compound rates.", "Budoucí hodnota jistiny po postupném složeném úročení řadou sazeb."), + ("Future value of an investment with constant payments and rate.", "Budoucí hodnota investice s konstantními platbami a sazbou."), + ("Gamma distribution density or probability.", "Hustota nebo pravděpodobnost rozdělení gama."), + ("Geometric mean of positive numbers.", "Geometrický průměr kladných čísel."), + ("Greatest common divisor of integers.", "Největší společný dělitel celých čísel."), + ("Groups rows by key fields and aggregates the values of each group.", "Seskupuje řádky podle klíčových polí a agreguje hodnoty každé skupiny."), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Zvětší pole na danou velikost a vyplní nové buňky zadanou výplňovou hodnotou.", + ), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "Poloviční šířka intervalu spolehlivosti kolem hodnoty FORECAST.ETS."), + ("Harmonic mean of positive numbers.", "Harmonický průměr kladných čísel."), + ("Hyperbolic cosecant of a complex number.", "Hyperbolický kosekans komplexního čísla."), + ("Hyperbolic cosecant.", "Hyperbolický kosekans."), + ("Hyperbolic cosine of a complex number.", "Hyperbolický kosinus komplexního čísla."), + ("Hyperbolic cosine.", "Hyperbolický kosinus."), + ("Hyperbolic cotangent.", "Hyperbolický kotangens."), + ("Hyperbolic secant of a complex number.", "Hyperbolický sekans komplexního čísla."), + ("Hyperbolic secant.", "Hyperbolický sekans."), + ("Hyperbolic sine of a complex number.", "Hyperbolický sinus komplexního čísla."), + ("Hyperbolic sine.", "Hyperbolický sinus."), + ("Hyperbolic tangent.", "Hyperbolický tangens."), + ("Hypergeometric probability of an exact count.", "Hypergeometrická pravděpodobnost přesného počtu."), + ("Hypergeometric probability.", "Hypergeometrická pravděpodobnost."), + ("Identity matrix of the given size.", "Jednotková matice dané velikosti."), + ("Imaginary coefficient of a complex number.", "Imaginární koeficient komplexního čísla."), + ("Information about a cell.", "Informace o buňce."), + ("Integer part of a division.", "Celá část dělení."), + ("Interest paid in a period of a loan with even principal payments.", "Úrok zaplacený za období půjčky se stejnými splátkami jistiny."), + ("Interest part of a given period's payment.", "Úroková část platby za dané období."), + ("Interest rate of a fully invested security.", "Úroková sazba plně investovaného cenného papíru."), + ("Interest rate per period of an annuity, found iteratively.", "Úroková sazba za období anuity, zjištěná iterativně."), + ("Internal rate of return of cash flows on specific dates.", "Vnitřní míra návratnosti peněžních toků k určitým datům."), + ("Internal rate of return of periodic cash flows.", "Vnitřní míra návratnosti periodických peněžních toků."), + ("Inverse hyperbolic cosine.", "Inverzní hyperbolický kosinus."), + ("Inverse hyperbolic cotangent.", "Inverzní hyperbolický kotangens."), + ("Inverse hyperbolic sine.", "Inverzní hyperbolický sinus."), + ("Inverse hyperbolic tangent.", "Inverzní hyperbolický tangens."), + ("Inverse of a square matrix.", "Inverzní matice ke čtvercové matici."), + ("Inverse of the Fisher transformation.", "Inverzní k Fisherově transformaci."), + ("Inverse of the cumulative beta distribution.", "Inverzní distribuční funkce rozdělení beta."), + ("Inverse of the cumulative lognormal distribution.", "Inverzní k kumulativnímu lognormálnímu rozdělení."), + ("Inverse of the gamma cumulative distribution.", "Inverzní distribuční funkce rozdělení gama."), + ("Inverse of the left-tailed F distribution.", "Inverzní k levostrannému rozdělení F."), + ("Inverse of the left-tailed chi-squared distribution.", "Inverzní k levostrannému rozdělení chí-kvadrát."), + ("Inverse of the normal cumulative distribution.", "Inverzní k normálnímu kumulativnímu rozdělení."), + ("Inverse of the right-tailed F distribution.", "Inverzní k pravostrannému rozdělení F."), + ("Inverse of the right-tailed chi-squared distribution.", "Inverzní k pravostrannému rozdělení chí-kvadrát."), + ("Inverse of the standard normal cumulative distribution.", "Inverzní ke standardnímu normálnímu kumulativnímu rozdělení."), + ("Joins several text values into one.", "Spojí několik textových hodnot do jedné."), + ("Joins text from values and every cell of ranges, without a separator.", "Spojí text z hodnot a každé buňky rozsahů bez oddělovače."), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Spojí text z hodnot a rozsahů pomocí oddělovače, volitelně přeskakuje prázdné položky.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Zachovává řádky nebo sloupce od začátku (nebo konce) pole."), + ("Keeps the rows or columns of an array whose include flag is TRUE.", "Zachovává řádky nebo sloupce pole, jehož příznak zahrnutí je TRUE."), + ("Largest number (0 when there are none).", "Největší číslo (0, pokud nejsou žádné)."), + ("Largest number in a field of the matching records.", "Největší číslo v poli odpovídajících záznamů."), + ("Largest value among cells that meet every condition.", "Největší hodnota mezi buňkami tabulky, které splňují všechny podmínky."), + ("Largest value counting text as 0 and logicals as 1/0.", "Největší hodnota, přičemž text se počítá jako 0 a logické hodnoty jako 1/0."), + ("Least common multiple of integers.", "Nejmenší společný násobek celých čísel."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Koeficienty přímky proložené metodou nejmenších čtverců a volitelné regresní statistiky.", + ), + ("Left-tailed inverse of Student's t distribution.", "Inverzní distribuční funkce Studentova t rozdělení pro levý chvost."), + ("Length of the repeating pattern detected in a time series.", "Délka opakujícího se vzoru detekovaného v časové řadě."), + ("Logarithm to the given base (10 by default).", "Logaritmus o zadaném základu (výchozí základ je 10)."), + ("Lognormal density or probability.", "Lognormální hustota nebo pravděpodobnost."), + ("Macaulay duration of a security with periodic interest.", "Macaulayova durace cenného papíru s pravidelnými úrokovými platbami."), + ("Matrix product of two arrays.", "Maticový součin dvou polí."), + ("Mean after trimming a fraction of points from both ends.", "Průměr po oříznutí zlomku bodů z obou konců."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Průměr, při jehož výpočtu se text počítá jako 0 a logické hodnoty jako 1 nebo 0."), + ("Middle value of the numbers.", "Medián čísel."), + ("Modified Bessel function of the first kind, I_n(x).", "Modifikovaná Besselova funkce prvního druhu, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Modifikovaná Besselova funkce druhého druhu, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Modifikovaná durace cenného papíru s pravidelnými úrokovými platbami."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Upravená vnitřní míra návratnosti pomocí samostatných sazeb výpůjček a reinvestic.", + ), + ("Most frequently occurring number.", "Nejčastěji se vyskytující číslo."), + ("Multiplies all the numbers in the arguments.", "Vynásobí všechna čísla v argumentech."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Vynásobí odpovídající prvky stejně velkých polí a sečte součiny.", + ), + ("Multiplies the numbers in a field of the matching records.", "Vynásobí čísla v poli odpovídajících záznamů."), + ("Names intermediate results.", "Přiřadí názvy mezivýsledkům."), + ("Natural log of the gamma function.", "Přirozený logaritmus funkce gama."), + ("Natural logarithm of a complex number.", "Přirozený logaritmus komplexního čísla."), + ("Natural logarithm.", "Přirozený logaritmus."), + ("Negative binomial probability.", "Pravděpodobnost negativně binomického rozdělení."), + ("Net present value of cash flows on specific dates.", "Čistá současná hodnota peněžních toků k určitým datům."), + ("Net present value of periodic cash flows at a discount rate.", "Čistá současná hodnota pravidelných peněžních toků při diskontní sazbě."), + ("Next coupon date after settlement.", "Datum další platby úroku po vypořádání."), + ("Nominal annual rate from an effective rate and compounding periods.", "Nominální roční sazba z efektivní sazby a počtu úrokovacích období."), + ("Normal distribution density or cumulative probability.", "Hustota normálního rozdělení nebo kumulativní pravděpodobnost."), + ("Number of areas in a reference.", "Počet oblastí v referenci."), + ("Number of combinations with repetition.", "Počet kombinací s opakováním."), + ("Number of combinations without repetition.", "Počet kombinací bez opakování."), + ("Number of coupons payable between settlement and maturity.", "Počet úrokových plateb splatných mezi vypořádáním a splatností."), + ("Number of ordered selections with repetition.", "Počet uspořádaných výběrů s opakováním."), + ("Number of ordered selections without repetition.", "Počet uspořádaných výběrů bez opakování."), + ("Number of periods needed to pay off or accumulate an amount.", "Počet období potřebných k vyplacení nebo nahromadění částky."), + ("Number of sheets.", "Počet listů."), + ("One- or two-tailed Student's t probability.", "Jedno- nebo dvoustranná Studentova t pravděpodobnost."), + ("One-tailed probability of a z-test.", "Jednostranná pravděpodobnost z-testu."), + ("Pearson product-moment correlation coefficient.", "Pearsonův korelační koeficient."), + ("Percent-encodes text for use in a URL.", "Zakóduje text pro použití v URL pomocí procentového kódování."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Pravidelná platba za půjčku nebo anuitu s konstantními platbami a sazbou.", + ), + ("Periods needed for an investment to grow to a target value.", "Období potřebná k tomu, aby investice vzrostla na cílovou hodnotu."), + ("Picks a value from the list by its position.", "Vybere hodnotu ze seznamu podle její pozice."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Vybere sloupce pole podle pozice (záporné indexy se počítají od konce).", + ), + ("Picks rows of an array by position (negative counts from the end).", "Vybere řádky pole podle pozice (záporné indexy se počítají od konce)."), + ("Places arrays side by side.", "Umístí pole vedle sebe."), + ("Poisson probability.", "Poissonova pravděpodobnost."), + ("Population covariance of paired values.", "Populační kovariance párových hodnot."), + ("Population skewness.", "Šikmost základního souboru."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Směrodatná odchylka základního souboru, při jejímž výpočtu se text počítá jako 0 a logické hodnoty jako 1/0.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Směrodatná odchylka základního souboru hodnot pole pro odpovídající záznamy.", + ), + ("Population standard deviation.", "Směrodatná odchylka populace."), + ( + "Population variance counting text as 0 and logicals as 1/0.", + "Rozptyl základního souboru, při jehož výpočtu se text počítá jako 0 a logické hodnoty jako 1/0.", + ), + ("Population variance of a field over the matching records.", "Rozptyl základního souboru hodnot pole pro odpovídající záznamy."), + ("Population variance.", "Rozptyl populace."), + ("Positive square root.", "Nezáporná druhá odmocnina."), + ("Predicts a value along a linear trend.", "Předpovídá hodnotu podél lineárního trendu."), + ("Present value of a series of equal future payments.", "Současná hodnota řady stejných budoucích plateb."), + ("Previous coupon date on or before settlement.", "Předchozí datum platby úroku v den vypořádání nebo před ním."), + ("Price per 100 face value of a Treasury bill.", "Cena za 100 nominální hodnoty pokladniční poukázky."), + ("Price per 100 face value of a discounted security.", "Cena diskontovaného cenného papíru na 100 jednotek jmenovité hodnoty."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Cena cenného papíru s výplatou úroku při splatnosti na 100 jednotek jmenovité hodnoty.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Cena cenného papíru s pravidelnými úrokovými platbami na 100 jednotek jmenovité hodnoty.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "Cena za 100 nominální hodnotu dluhopisu s nepravidelným prvním úrokovým obdobím.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Cena za 100 nominální hodnotu dluhopisu s nepravidelným posledním úrokovým obdobím.", + ), + ("Principal part of a given period's payment.", "Část platby za dané období připadající na jistinu."), + ("Probability from Student's t-test.", "Pravděpodobnost ze Studentova t-testu."), + ("Probability of a number of successes falling in a range.", "Pravděpodobnost počtu úspěchů spadajících do rozmezí."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Pravděpodobnost, že standardní normální hodnota spadá mezi střední hodnotu a z.", + ), + ("Probability that values fall between two limits.", "Pravděpodobnost, že hodnoty spadají mezi dvě meze."), + ("Product of complex numbers.", "Součin komplexních čísel."), + ("Quartile (0–4) of a data set, inclusive method.", "Kvartil (0–4) souboru dat, inkluzivní metoda."), + ("Quartile (0–4) of a data set.", "Kvartil (0–4) souboru dat."), + ("Quartile (1–3) of a data set, exclusive method.", "Kvartil (1–3) souboru dat, exkluzivní metoda."), + ("Quotient of two complex numbers.", "Podíl dvou komplexních čísel."), + ("Raises a complex number to a power.", "Umocní komplexní číslo."), + ("Raises a number to a power.", "Umocní číslo."), + ("Rank of a number within a list.", "Pořadí čísla v seznamu."), + ("Rank of a number within a list; ties get the average rank.", "Pořadí čísla v seznamu; shodné hodnoty získají průměrné pořadí."), + ("Rank of a number within a list; ties share the top rank.", "Pořadí čísla v seznamu; shodné hodnoty získají společné nejvyšší pořadí."), + ("Ratio of the factorial of a sum to the product of factorials.", "Poměr faktoriálu součtu k součinu faktoriálů."), + ("Reads text in a given base as a number.", "Přečte text v daném základu jako číslo."), + ("Real coefficient of a complex number.", "Reálný koeficient komplexního čísla."), + ("Relative standing of a value as a fraction of the data set.", "Relativní postavení hodnoty jako zlomek souboru dat."), + ("Relative standing of a value from 0 to 1 inclusive.", "Relativní postavení v rozsahu od 0 do 1 včetně."), + ("Relative standing of a value strictly between 0 and 1.", "Relativní postavení s hodnotou striktně mezi 0 a 1."), + ("Remainder of a division, with the sign of the divisor.", "Zbytek dělení se znaménkem dělitele."), + ("Removes leading and trailing spaces and collapses runs of spaces to one.", "Odstraní úvodní a koncové mezery a sbalí řady mezer do jedné."), + ("Removes non-printable control characters from text.", "Odebere z textu netisknutelné řídicí znaky."), + ("Removes rows or columns from the start (or end) of an array.", "Odebere řádky nebo sloupce ze začátku (nebo konce) pole."), + ("Repeats a text a given number of times.", "Opakuje text stanovený početkrát."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Nahradí shody regulárního výrazu, všechny nebo vybraný výskyt.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Nahradí výskyty jednoho textu jiným, volitelně pouze daným výskytem.", + ), + ("Replaces part of a text by position.", "Nahradí část textu podle pozice."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Vrátí 1, když je číslo alespoň krok, jinak 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Vrátí 1, když se dvě čísla rovnají, jinak 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Vrací kód pro typ hodnoty: 1 číslo, 2 text, 4 logická, 16 chyba, 64 pole.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Při chybě #N/A vrátí náhradní hodnotu; jinak vrátí původní hodnotu."), + ("Returns a fallback when the value is an error, otherwise the value.", "Při chybě vrátí náhradní hodnotu; jinak vrátí původní hodnotu."), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Vrátí vlastnost klíčového indikátoru výkonu z krychle (žádná připojení krychle; #N/A).", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "Vrátí člen nebo n-tici z krychle (žádná připojení krychle; #N/A)."), + ("Returns a property of a cube member (no cube connections; #N/A).", "Vrátí vlastnost člena krychle (žádná připojení krychle; #N/A)."), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "Vrátí agregovanou hodnotu z krychle (žádná připojení krychle; #N/A)."), + ("Returns characters from the middle of a text.", "Vrátí znaky ze středu textu."), + ("Returns information about the operating environment.", "Vrací informace o operačním prostředí."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Vrátí jednu hodnotu, když je podmínka TRUE, a druhou, když je FALSE.", + ), + ("Returns the #N/A error value.", "Vrátí chybovou hodnotu #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Vrátí pozici hodnoty v řádku nebo sloupci, číslovanou od 1."), + ("Returns the ISO 8601 week number of a date.", "Vrátí ISO 8601 týdenní číslo data."), + ("Returns the Unicode code point of the first character of a text.", "Vrátí bod kódu Unicode prvního znaku textu."), + ("Returns the Windows-1252 code of the first character of a text.", "Vrátí kód Windows-1252 prvního znaku textu."), + ("Returns the character for a Unicode code point.", "Vrátí znak pro bod v kódu Unicode."), + ("Returns the character for a code from the Windows-1252 character set.", "Vrátí znak pro kód ze znakové sady Windows-1252."), + ("Returns the current date and time.", "Vrátí aktuální datum a čas."), + ("Returns the current date.", "Vrátí aktuální datum."), + ("Returns the date a number of months before or after a date.", "Vrátí datum několik měsíců před nebo po datu."), + ("Returns the date a number of working days away with a custom weekend.", "Vrátí datum za několik pracovních dnů s vlastním víkendem."), + ("Returns the date a number of working days before or after a date.", "Vrátí datum několik pracovních dnů před nebo po datu."), + ("Returns the day of the month of a date.", "Vrátí den v měsíci daného data."), + ("Returns the day of the week of a date as a number.", "Vrátí den v týdnu data jako číslo."), + ("Returns the distinct rows or columns of an array.", "Vrátí odlišné řádky nebo sloupce pole."), + ("Returns the element, row or column of an array at the given position.", "Vrátí prvek, řádek nebo sloupec pole na dané pozici."), + ("Returns the field value of the single record that meets the criteria.", "Vrátí hodnotu pole jednoho záznamu, který splňuje kritéria."), + ("Returns the first characters of a text.", "Vrátí první znaky textu."), + ("Returns the fraction of a year between two dates under a day-count basis.", "Vrátí zlomek roku mezi dvěma daty na základě počtu dní."), + ("Returns the hour (0-23) of a time.", "Vrátí hodinu (0-23) času."), + ("Returns the last characters of a text.", "Vrátí poslední znaky textu."), + ("Returns the last day of the month a number of months away.", "Vrátí poslední den v měsíci za několik měsíců."), + ("Returns the logical value FALSE.", "Vrátí logickou hodnotu FALSE."), + ("Returns the logical value TRUE.", "Vrátí logickou hodnotu TRUE."), + ("Returns the minute (0-59) of a time.", "Vrátí minutu (0-59) času."), + ("Returns the month (1-12) of a date.", "Vrátí měsíc (1-12) data."), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "Vrátí n-tého člena sady členů krychle (bez připojení ke krychli; #N/A)."), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Vrátí číslo identifikující chybovou hodnotu nebo #N/A, pokud se nejedná o chybu.", + ), + ("Returns the number of days between two dates.", "Vrátí počet dní mezi dvěma daty."), + ("Returns the phonetic (furigana) text; here the text itself.", "Vrátí fonetický (furigana) text; zde samotný text."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Vrátí pozici hodnoty v řádku nebo sloupci s flexibilním režimem shody a vyhledávání.", + ), + ("Returns the second (0-59) of a time.", "Vrátí sekundu (0-59) času."), + ("Returns the text that comes after a delimiter.", "Vrátí text, který následuje za oddělovačem."), + ("Returns the text that comes before a delimiter.", "Vrátí text, který je před oddělovačem."), + ("Returns the value if it is text, otherwise empty text.", "Vrátí hodnotu, pokud se jedná o text, jinak prázdný text."), + ("Returns the value paired with the first condition that is TRUE.", "Vrátí hodnotu spárovanou s první podmínkou, která je TRUE."), + ("Returns the week number of a date within its year.", "Vrátí číslo týdne z data v daném roce."), + ("Returns the year of a date.", "Vrátí rok data."), + ("Reverses a logical value.", "Obrátí logickou hodnotu."), + ("Right-tailed F probability.", "Pravostranná pravděpodobnost F."), + ("Right-tailed Student's t probability.", "Pravostranná Studentova t pravděpodobnost."), + ("Right-tailed chi-squared probability.", "Pravostranná pravděpodobnost chí-kvadrát."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Zaokrouhlí číslo a naformátuje jej jako text s pevnými desetinnými místy a volitelnými oddělovači tisíců.", + ), + ("Rounds a number away from zero to a given number of digits.", "Zaokrouhlí číslo od nuly na daný počet číslic."), + ("Rounds a number down to a multiple of significance.", "Zaokrouhlí číslo dolů na násobek zadaného kroku."), + ("Rounds a number down to the nearest integer or multiple.", "Zaokrouhlí číslo dolů na nejbližší celé číslo nebo násobek."), + ("Rounds a number down to the nearest integer.", "Zaokrouhlí číslo dolů na nejbližší celé číslo."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Zaokrouhlí číslo na zadaný počet číslic; přesné poloviny zaokrouhlí směrem od nuly.", + ), + ("Rounds a number to the nearest multiple.", "Zaokrouhlí číslo na nejbližší násobek."), + ("Rounds a number toward negative infinity to a multiple.", "Zaokrouhlí číslo směrem k zápornému nekonečnu na násobek."), + ("Rounds a number toward positive infinity to a multiple.", "Zaokrouhlí číslo směrem k kladnému nekonečnu na násobek."), + ("Rounds a number toward zero to a given number of digits.", "Zaokrouhlí číslo směrem k nule na daný počet číslic."), + ("Rounds a number up to a multiple of significance.", "Zaokrouhlí číslo nahoru na násobek zadaného kroku."), + ("Rounds a number up to the nearest integer or multiple.", "Zaokrouhlí číslo nahoru na nejbližší celé číslo nebo násobek."), + ("Rounds away from zero to the nearest even integer.", "Zaokrouhlí od nuly na nejbližší sudé celé číslo."), + ("Rounds away from zero to the nearest odd integer.", "Zaokrouhlí od nuly na nejbližší liché celé číslo."), + ("Row number of a reference.", "Číslo řádku odkazu."), + ("Running accumulation of an array.", "Průběžná akumulace hodnot pole."), + ("Sample covariance of paired values.", "Výběrová kovariance párových hodnot."), + ("Sample skewness.", "Výběrová šikmost."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Výběrová směrodatná odchylka, při jejímž výpočtu se text počítá jako 0 a logické hodnoty jako 1/0.", + ), + ("Sample standard deviation of a field over the matching records.", "Výběrová směrodatná odchylka hodnot pole pro odpovídající záznamy."), + ("Sample standard deviation.", "Výběrová směrodatná odchylka."), + ( + "Sample variance counting text as 0 and logicals as 1/0.", + "Výběrový rozptyl, při jehož výpočtu se text počítá jako 0 a logické hodnoty jako 1/0.", + ), + ("Sample variance of a field over the matching records.", "Výběrový rozptyl hodnot pole pro odpovídající záznamy."), + ("Sample variance.", "Výběrový rozptyl."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Prohledá řádek nebo sloupec a vrátí odpovídající položku, řádek nebo sloupec z jiného pole.", + ), + ("Secant of a complex number.", "Sekans komplexního čísla."), + ("Secant of an angle in radians.", "Sekans úhlu v radiánech."), + ("Sheet number.", "Číslo listu."), + ("Shifts the bits of a number left (right for negative shifts).", "Posune bity čísla doleva (doprava pro záporné posuny)."), + ("Shifts the bits of a number right (left for negative shifts).", "Posune bity čísla doprava (doleva pro záporné posuny)."), + ("Sine of a complex number.", "Sinus komplexního čísla."), + ("Sine of an angle in radians.", "Sinus úhlu v radiánech."), + ("Slope of the least-squares regression line.", "Sklon regresní přímky nejmenších čtverců."), + ("Smallest number (0 when there are none).", "Nejmenší číslo (0, když žádné nejsou)."), + ("Smallest number in a field of the matching records.", "Nejmenší číslo v poli odpovídajících záznamů."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Nejmenší počet úspěchů, jehož kumulativní binomická pravděpodobnost dosáhne alfa.", + ), + ("Smallest value among cells that meet every condition.", "Nejmenší hodnota mezi buňkami tabulky, které splňují všechny podmínky."), + ("Smallest value counting text as 0 and logicals as 1/0.", "Nejmenší hodnota, přičemž text se počítá jako 0 a logické hodnoty jako 1/0."), + ("Sorts an array by the values of other arrays of matching size.", "Seřadí pole podle hodnot ostatních polí odpovídající velikosti."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Seřadí řádky (nebo sloupce) pole podle jednoho nebo více jeho sloupců.", + ), + ("Spells out a number in Thai words with Baht.", "Zapíše číslo thajskými slovy jako částku v bahtech."), + ("Splits text into a grid of columns and rows at the given delimiters.", "Rozdělí text do mřížky sloupců a řádků s danými oddělovači."), + ("Square of the correlation coefficient.", "Druhá mocnina korelačního koeficientu."), + ("Square root of a complex number.", "Druhá odmocnina komplexního čísla."), + ("Square root of the number times pi.", "Druhá odmocnina čísla krát pí."), + ("Stacks arrays on top of each other.", "Skládá pole na sebe."), + ("Standard error of predicted y values in a regression.", "Směrodatná chyba odhadu hodnot y v regresi."), + ("Standard normal cumulative probability.", "Standardní normální kumulativní pravděpodobnost."), + ("Standard normal density or cumulative probability.", "Standardní normální hustota nebo kumulativní pravděpodobnost."), + ("Standard normal density.", "Standardní normální hustota."), + ("Straight-line depreciation for one period.", "Rovnoměrný odpis za jedno období."), + ("Student's t density or left-tailed probability.", "Studentova t hustota nebo levostranná pravděpodobnost."), + ("Sum of a power series.", "Součet mocninné řady."), + ("Sum of complex numbers.", "Součet komplexních čísel."), + ("Sum of squared deviations from the mean.", "Součet čtverců odchylek od průměru."), + ("Sum-of-years'-digits depreciation for a period.", "Odpis za období metodou součtu číslic let životnosti."), + ("Sums the differences of squares of matching elements.", "Sečte rozdíly druhých mocnin odpovídajících prvků."), + ("Sums the squared differences of matching elements.", "Sečte druhé mocniny rozdílů odpovídajících prvků."), + ("Sums the sums of squares of matching elements.", "Sečte součty druhých mocnin odpovídajících prvků."), + ("Swaps the rows and columns of an array.", "Zamění řádky a sloupce pole."), + ("TRUE for references.", "TRUE pro reference."), + ("TRUE when a LAMBDA argument was left out.", "TRUE, když byl vynechán argument LAMBDA."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE, když se někde v textu shoduje regulární výraz."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE, když je lichý počet argumentů TRUE."), + ("TRUE when at least one argument is TRUE.", "TRUE, když je alespoň jeden argument TRUE."), + ("TRUE when every argument is TRUE.", "TRUE, když je každý argument TRUE."), + ("TRUE when the cell has a formula.", "TRUE, když má buňka vzorec."), + ("TRUE when the integer part of a number is even.", "TRUE, když je celá část čísla sudá."), + ("TRUE when the integer part of a number is odd.", "TRUE, když je celá část čísla lichá."), + ("TRUE when the value is TRUE or FALSE.", "TRUE, když je hodnota TRUE nebo FALSE."), + ("TRUE when the value is a number.", "TRUE, když je hodnota číslo."), + ("TRUE when the value is any error other than #N/A.", "TRUE, když je hodnota jakákoli jiná chyba než #N/A."), + ("TRUE when the value is any error.", "TRUE, když je hodnota jakákoliv chyba."), + ("TRUE when the value is anything other than text.", "TRUE, když je hodnota jiná než text."), + ("TRUE when the value is text.", "TRUE, když je hodnota text."), + ("TRUE when the value is the #N/A error.", "TRUE, když hodnota je chyba #N/A."), + ("TRUE when the value refers to an empty cell.", "TRUE, když hodnota odkazuje na prázdnou buňku."), + ("TRUE when two texts are identical, including case.", "TRUE, když jsou dva stejné texty včetně velkých a malých písmen."), + ("Tangent of a complex number.", "Tangens komplexního čísla."), + ("Tangent of an angle in radians.", "Tangens úhlu v radiánech."), + ("The constant pi to 15 digits.", "Konstanta pí s přesností na 15 číslic."), + ("The formula of a cell as text.", "Vzorec buňky jako text."), + ("The gamma function.", "Funkce gama."), + ("The k-th largest number in a data set.", "K-té největší číslo v sadě dat."), + ("The k-th smallest number in a data set.", "K-té nejmenší číslo v sadě dat."), + ("The reference named by a text string.", "Odkaz pojmenovaný textovým řetězcem."), + ("The sum of a subset as a fraction of the sum of all the values.", "Součet podmnožiny jako zlomek součtu všech hodnot."), + ("Total interest paid between two periods.", "Celkový úrok zaplacený mezi dvěma obdobími."), + ("Total principal repaid between two periods.", "Celková jistina splacená mezi dvěma obdobími."), + ("Two-tailed Student's t probability.", "Dvoustranná Studentova t pravděpodobnost."), + ("Two-tailed inverse of Student's t distribution.", "Dvoustranná inverze Studentova t rozdělení."), + ("Two-tailed p-value of an F-test for equality of variances.", "Oboustranná p-hodnota F-testu shody rozptylů."), + ("Values along a fitted exponential growth curve.", "Hodnoty podél proložené křivky exponenciálního růstu."), + ("Values along a least-squares linear fit.", "Hodnoty podél lineárního proložení metodou nejmenších čtverců."), + ("Vertical array of all the most frequent numbers.", "Vertikální pole všech nejčastějších čísel."), + ("Weibull density or probability.", "Weibullova hustota nebo pravděpodobnost."), + ("Writes a number in another base, padded with zeros.", "Zapíše číslo v jiném základu doplněné nulami."), + ("Y-intercept of the least-squares regression line.", "Průsečík regresní přímky nejmenších čtverců s osou y."), + ("Yield of a Treasury bill.", "Výnos pokladniční poukázky."), + ("Yield of a security paying periodic interest.", "Výnos dluhopisu s pravidelným úročením."), + ("Yield of a security with an odd first period.", "Výnos dluhopisu s nepravidelným prvním úrokovým obdobím."), + ("Yield of a security with an odd last period.", "Výnos dluhopisu s nepravidelným posledním úrokovým obdobím."), + ("Z-score of a value.", "Z-skóre hodnoty."), + ("e raised to the given power.", "e umocněné na danou mocninu."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-tý percentil, k od 0 do 1 včetně."), + ("k-th percentile, k strictly between 0 and 1.", "k-tý percentil pro k větší než 0 a menší než 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "typ_odkazu"), + ("actual_range", "skutečný_rozsah"), + ("aggregation", "agregace"), + ("alpha", "alfa"), + ("angle", "úhel"), + ("area_num", "číslo_oblasti"), + ("argument", "argument"), + ("array", "pole"), + ("array_x", "pole_hodnot_x"), + ("array_y", "pole_hodnot_y"), + ("average_range", "rozsah_pro_průměr"), + ("base", "základ"), + ("basis", "konvence_počítání_dní"), + ("beta", "beta"), + ("bins_array", "pole_hranic_přihrádek"), + ("bottom", "spodní_hranice"), + ("by_array", "pole_klíčů_řazení"), + ("by_col", "podle_sloupců"), + ("calc_method", "způsob_výpočtu"), + ("calculation", "výpočet"), + ("caption", "titulek"), + ("case_sensitivity", "rozlišování_malých_a_velkých_písmen"), + ("coefficients", "koeficienty"), + ("col_delimiter", "oddělovač_sloupců"), + ("col_fields", "sloupcová_pole"), + ("col_index_num", "index_sloupce"), + ("col_num", "číslo_sloupce"), + ("col_sort_order", "pořadí_řazení_sloupců"), + ("col_total_depth", "celková_hloubka_sloupce"), + ("cols", "počet_sloupců"), + ("column_num", "číslo_sloupce"), + ("columns", "počet_sloupců"), + ("confidence_level", "úroveň_spolehlivosti"), + ("connection", "datové_připojení"), + ("const", "konstanta"), + ("cost", "pořizovací_cena"), + ("coupon", "kupónová_sazba"), + ("criteria", "kritéria"), + ("criteria_range", "rozsah_kritérií"), + ("cumulative", "kumulativní_distribuce"), + ("data_all", "data_vše"), + ("data_array", "datové_pole"), + ("data_completion", "doplňování_dat"), + ("data_subset", "datová_podmnožina"), + ("database", "databáze"), + ("date", "datum"), + ("date_purchased", "datum_nákupu"), + ("date_text", "datum_zapsané_jako_text"), + ("dates", "data"), + ("day", "den"), + ("days", "dnů"), + ("decimal_dollar", "desetinná_cena"), + ("decimal_separator", "oddělovač_desetinných_míst"), + ("decimals", "desetinná_místa"), + ("default_or_value", "výchozí_nebo_hodnota"), + ("deg_freedom", "stupně_volnosti"), + ("delimiter", "oddělovač"), + ("denominator", "jmenovatel"), + ("dimension", "rozměr"), + ("discount", "diskontní_sazba"), + ("divisor", "dělitel"), + ("effect_rate", "efektivní_sazba"), + ("end_date", "datum_ukončení"), + ("end_period", "poslední_období"), + ("error_val", "chybová_hodnota"), + ("exactly_once", "přesně_jednou"), + ("expected_range", "očekávaný_rozsah"), + ("expression", "výraz"), + ("factor", "faktor"), + ("field", "pole_databáze"), + ("field_headers", "záhlaví_polí"), + ("field_relationship", "vztah_mezi_poli"), + ("filter_array", "pole_filtrů"), + ("finance_rate", "úroková_sazba_financování"), + ("find_text", "hledaný_text"), + ("first_coupon", "datum_platby_prvního_kupónu"), + ("first_interest", "datum_první_platby_úroku"), + ("first_period", "první_období"), + ("form", "forma_zápisu"), + ("format", "formát"), + ("format_text", "formátovací_text"), + ("fraction", "zlomek"), + ("fractional_dollar", "zlomková_cena"), + ("frequency", "frekvence_vyplácení_kuponu"), + ("friendly_name", "popisný_název"), + ("from_unit", "zdrojová_jednotka_měření"), + ("full_precision", "úplná_přesnost"), + ("function", "funkce"), + ("function_num", "číslo_funkce"), + ("fv", "budoucí_hodnota"), + ("group_separator", "oddělovač_skupin"), + ("guess", "odhad"), + ("height", "výška"), + ("holidays", "svátky"), + ("hour", "hodina"), + ("i_num", "imaginární_koeficient"), + ("if_empty", "pokud_je_prázdný"), + ("if_not_found", "pokud_nenalezeno"), + ("ignore", "ignorovat"), + ("ignore_empty", "ignorovat_prázdné"), + ("include", "zahrnout"), + ("index_num", "indexové_číslo"), + ("info_type", "typ_informace"), + ("initial_value", "počáteční_hodnota"), + ("instance_num", "číslo_výskytu"), + ("inumber", "komplexní_číslo"), + ("investment", "investice"), + ("issue", "datum_vydání"), + ("k", "k"), + ("known_xs", "známé_hodnoty_x"), + ("known_ys", "známé_hodnoty_y"), + ("kpi_name", "název_klíčového_indikátoru_výkonu"), + ("kpi_property", "vlastnost_klíčového_indikátoru_výkonu"), + ("lambda", "lambda"), + ("last_interest", "datum_poslední_platby_úroku"), + ("life", "životnost"), + ("link_location", "umístění_odkazu"), + ("logical", "logická_hodnota"), + ("logical_test", "logická_podmínka"), + ("lookup_array", "prohledávané_pole"), + ("lookup_value", "hledaná_hodnota"), + ("lookup_vector", "vektor_vyhledávání"), + ("lower_limit", "spodní_limit"), + ("m", "m"), + ("match_end", "hranice_textu_jako_oddělovač"), + ("match_mode", "režim_shody"), + ("match_type", "metoda_shody"), + ("maturity", "datum_splatnosti"), + ("max", "maximum"), + ("max_range", "rozsah_pro_maximum"), + ("mean", "aritmetický_průměr"), + ("member_expression", "výraz_člena_krychle"), + ("method", "metoda"), + ("min", "minimum"), + ("min_length", "minimální_délka"), + ("min_range", "rozsah_pro_minimum"), + ("minute", "minuta"), + ("mode", "režim"), + ("month", "měsíc"), + ("months", "měsíců"), + ("multiple", "násobek"), + ("n", "n"), + ("name", "název"), + ("new_text", "nový_text"), + ("new_xs", "nové_hodnoty_x"), + ("no_commas", "vynechat_oddělovače_tisíců"), + ("no_switch", "nepřecházet_na_rovnoměrné_odpisy"), + ("nominal_rate", "nominální_sazba"), + ("nper", "počet_období"), + ("npery", "období_za_rok"), + ("num_bytes", "počet_bajtů"), + ("num_chars", "počet_znaků"), + ("num_digits", "počet_číslic"), + ("number", "číslo"), + ("number_chosen", "počet_vybraných_prvků"), + ("number_f", "počet_selhání"), + ("number_pop", "velikost_populace"), + ("number_s", "počet_úspěchů"), + ("number_sample", "velikost_vzorku"), + ("number_times", "počet_opakování"), + ("numerator", "čitatel"), + ("occurrence", "výskyt"), + ("old_text", "starý_text"), + ("options", "možnosti"), + ("order", "pořadí"), + ("pad_with", "výplňová_hodnota"), + ("par", "jmenovitá_hodnota"), + ("parameter", "parametr"), + ("pattern", "vzor_regulárního_výrazu"), + ("per", "období"), + ("percent", "procent"), + ("period", "období"), + ("places", "počet_výstupních_číslic"), + ("pmt", "platba"), + ("population_s", "počet_úspěchů_v_populaci"), + ("power", "mocnina"), + ("pr", "cena"), + ("principal", "jistina"), + ("prob_range", "rozsah_pravděpodobností"), + ("probability", "pravděpodobnost"), + ("probability_s", "pravděpodobnost_úspěchu"), + ("property", "název_vlastnosti"), + ("pv", "současná_hodnota"), + ("quart", "kvartil"), + ("radix", "základ_číselné_soustavy"), + ("range", "rozsah"), + ("range_lookup", "přibližná_shoda"), + ("rank", "pořadí"), + ("rate", "sazba"), + ("real_num", "reálný_koeficient"), + ("redemption", "hodnota_při_splacení"), + ("ref", "odkaz"), + ("ref_text", "referenční_text"), + ("reference", "odkaz"), + ("reinvest_rate", "reinvestiční_úroková_sazba"), + ("relative_to", "vzhledem_k"), + ("replacement", "náhradní_text"), + ("result", "výsledek"), + ("result_vector", "vektor_výsledku"), + ("return_array", "vracené_pole"), + ("return_mode", "návratový_režim"), + ("return_type", "návratový_typ"), + ("row_delimiter", "oddělovač_řádků"), + ("row_fields", "řádková_pole"), + ("row_index_num", "index_řádku"), + ("row_num", "číslo_řádku"), + ("row_sort_order", "pořadí_řazení_řádků"), + ("row_total_depth", "celková_hloubka_řádku"), + ("rows", "počet_řádků"), + ("salvage", "zbytková_hodnota"), + ("sample_s", "počet_úspěchů_ve_výběru"), + ("scan_by_column", "skenování_podle_sloupce"), + ("schedule", "řada_úrokových_sazeb"), + ("search_mode", "režim_hledání"), + ("seasonality", "sezónnost"), + ("second", "sekunda"), + ("serial_number", "sériové_číslo"), + ("set", "sada_členů_krychle"), + ("set_expression", "výraz_sady_členů_krychle"), + ("settlement", "datum_vypořádání"), + ("sheet_text", "text_listu"), + ("shift_amount", "počet_bitů_posunu"), + ("sigma", "sigma"), + ("significance", "krok_nebo_přesnost"), + ("size", "velikost"), + ("sort_by", "seřadit_podle"), + ("sort_index", "index_řazení"), + ("sort_order", "pořadí_řazení"), + ("source", "zdroj"), + ("standard_dev", "směrodatná_odchylka"), + ("start", "počáteční_hodnota"), + ("start_date", "datum_zahájení"), + ("start_num", "výchozí_pozice"), + ("start_period", "počáteční_období"), + ("statistic_type", "typ_statistiky"), + ("stats", "statistiky"), + ("step", "krok"), + ("suffix", "přípona"), + ("sum_range", "rozsah_součtu"), + ("table_array", "pole_tabulky"), + ("tails", "počet_chvostů"), + ("target", "cíl"), + ("target_date", "cílové_datum"), + ("text", "text"), + ("time_text", "čas_zapsaný_jako_text"), + ("timeline", "časová_osa"), + ("to_unit", "cílová_jednotka_měření"), + ("top", "horní_hranice"), + ("total_depth", "celková_hloubka"), + ("trials", "pokusy"), + ("triangulation_precision", "přesnost_triangulace"), + ("trim_cols", "režim_ořezávání_sloupců"), + ("trim_rows", "režim_ořezávání_řádků"), + ("type", "typ"), + ("type_text", "typ_informace"), + ("unit", "jednotka"), + ("upper_limit", "horní_limit"), + ("url", "url"), + ("value", "hodnota"), + ("value_if_error", "výsledek_v_případě_chyby"), + ("value_if_false", "výsledek_když_je_podmínka_nepravdivá"), + ("value_if_na", "výsledek_pro_chybu_není_k_dispozici"), + ("value_if_true", "výsledek_když_je_podmínka_pravdivá"), + ("values", "vstupní_hodnoty"), + ("vector", "vektor"), + ("weekend", "víkend"), + ("whole_number", "celé_číslo"), + ("width", "šířka"), + ("within_text", "text_k_vyhledávání"), + ("wrap_count", "počet_hodnot_na_řádek_nebo_sloupec"), + ("x", "x"), + ("x_num", "x_souřadnice"), + ("x_range", "x_rozsah"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "souřadnice_y"), + ("year", "rok"), + ("yld", "investiční_výnos"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/da.rs b/crates/ui-egui/src/i18n/da.rs new file mode 100644 index 0000000000..d0e7b214e2 --- /dev/null +++ b/crates/ui-egui/src/i18n/da.rs @@ -0,0 +1,1217 @@ +//! Danish translations for the interface strings in i18n.rs. +//! +//! Written from the plain meaning of the English labels in ordinary Danish computing vocabulary; +//! no Microsoft Excel (or other product) localisation was consulted. Commands use the imperative +//! ("Gem", "Indsæt…"), messages address the user as "du", a workbook is a "regneark" and a sheet an +//! "ark". Short generic labels follow the Danish catalogs of the other Crafting Apps (craft-i18n). +//! An AI-assisted draft (Claude) for a Danish-speaking contributor. + +/// Returns the Danish translation for `text`, or `None` so callers fall back to English. +pub(super) fn translate(text: &str) -> Option<&'static str> { + Some(match text { + "Paste" => "Indsæt", + "Paste Values" => "Indsæt værdier", + "Paste Formulas" => "Indsæt formler", + "Paste Formatting" => "Indsæt formatering", + "Transpose" => "Transponér", + "Paste Link" => "Indsæt kæde", + "Paste Special…" => "Indsæt speciel…", + "Insert Copied Cells" => "Indsæt kopierede celler", + "Insert Copied Cells…" => "Indsæt kopierede celler…", + "Insert Cut Cells" => "Indsæt udklippede celler", + "Insert Paste" => "Indsæt og flyt celler", + "Format Painter (double-click to keep it on)" => "Kopiér formatering (dobbeltklik for at holde den slået til)", + "Double Underline" => "Dobbelt understregning", + "Strikethrough" => "Gennemstreget", + "Underline" => "Understreget", + "Increase Font Size" => "Forøg skriftstørrelse", + "Decrease Font Size" => "Formindsk skriftstørrelse", + "Wrap Text" => "Ombryd tekst", + "Merge & Center" => "Flet og centrér", + "Merge Cells" => "Flet celler", + "Merge Across" => "Flet på tværs", + "Unmerge Cells" => "Ophæv fletning af celler", + "Fill Color" => "Fyldfarve", + "Font Color" => "Skriftfarve", + "Borders" => "Kanter", + "Top\nAlign" => "Justér\nøverst", + "Middle\nAlign" => "Justér\nmidt", + "Bottom\nAlign" => "Justér\nnederst", + "Left" => "Venstre", + "Right" => "Højre", + "Center" => "Centrér", + "Horizontal" => "Vandret", + "Vertical Text" => "Lodret tekst", + "Decrease Indent" => "Formindsk indrykning", + "Increase Indent" => "Forøg indrykning", + "Orientation" => "Tekstretning", + "Angle Counterclockwise" => "Vinkel mod uret", + "Angle Clockwise" => "Vinkel med uret", + "Rotate Text Up" => "Rotér tekst op", + "Rotate Text Down" => "Rotér tekst ned", + "Accounting Number Format" => "Regnskabstalformat", + "Percent Style" => "Procentformat", + "Comma Style" => "Tusindtalsformat", + "Increase Decimal" => "Flere decimaler", + "Decrease Decimal" => "Færre decimaler", + "More Accounting Formats…" => "Flere regnskabsformater…", + "Conditional\nFormatting" => "Betinget\nformatering", + "Conditional Formatting" => "Betinget formatering", + "Format\nas Table" => "Formatér\nsom tabel", + "Cell\nStyles" => "Celle-\nstile", + "Format Cells…" => "Formatér celler…", + "Format Cell Alignment…" => "Formatér cellejustering…", + "Format\nPane" => "Formaterings-\nrude", + "Format" => "Formatér", + "Insert" => "Indsæt", + "Header Menu|Insert" => "Indsæt", + "Insert Cells…" => "Indsæt celler…", + "Delete" => "Slet", + "Delete Cells…" => "Slet celler…", + "Insert Sheet Rows" => "Indsæt rækker i ark", + "Insert Sheet Columns" => "Indsæt kolonner i ark", + "Delete Sheet Rows" => "Slet rækker i ark", + "Delete Sheet Columns" => "Slet kolonner i ark", + "Row Height…" => "Rækkehøjde…", + "AutoFit Row Height" => "Autotilpas rækkehøjde", + "Column Width…" => "Kolonnebredde…", + "AutoFit Column Width" => "Autotilpas kolonnebredde", + "Default Width…" => "Standardbredde…", + "Hide Rows" => "Skjul rækker", + "Unhide Rows" => "Vis rækker", + "Hide Columns" => "Skjul kolonner", + "Unhide Columns" => "Vis kolonner", + "Lock Cell" => "Lås celle", + "Clear" => "Ryd", + "Clear All" => "Ryd alt", + "Clear Formats" => "Ryd formater", + "Clear Contents" => "Ryd indhold", + "Clear Comments and Notes" => "Ryd kommentarer og noter", + "Clear Hyperlinks" => "Ryd hyperlinks", + "AutoSum" => "AutoSum", + "Flash\nFill" => "Hurtig-\nudfyld", + "Flash Fill" => "Hurtigudfyld", + "Fill" => "Udfyld", + "Clear Print Area" => "Ryd udskriftsområde", + "Find &\nSelect" => "Søg og\nmarkér", + "Find…" => "Søg…", + "Replace…" => "Erstat…", + "Go To…" => "Gå til…", + "Go To Special…" => "Gå til speciel…", + "PivotTable" => "Pivottabel", + "Recommended\nCharts" => "Anbefalede\ndiagrammer", + "Table" => "Tabel", + "Pictures" => "Billeder", + "Shapes" => "Figurer", + "Icons" => "Ikoner", + "Text\nBox" => "Tekst-\nboks", + "Comment" => "Kommentar", + "New\nComment" => "Ny\nkommentar", + "New Note" => "Ny note", + "Show/Hide Note" => "Vis/skjul note", + "Header &\nFooter" => "Sidehoved\nog sidefod", + "Text to\nColumns" => "Tekst til\nkolonner", + "Link" => "Link", + "Symbol" => "Symbol", + "Sparklines" => "Minidiagrammer", + "Checkbox" => "Afkrydsningsfelt", + "Insert checkboxes in the selected cells" => "Indsæt afkrydsningsfelter i de markerede celler", + "Header & Footer" => "Sidehoved og sidefod", + "Draw with ink" => "Tegn med blæk", + "Eraser" => "Viskelæder", + "Ink to\nShape" => "Blæk til\nfigur", + "Select\nObjects" => "Markér\nobjekter", + "Themes" => "Temaer", + "Margins" => "Margener", + "Left Margin" => "Venstre margen", + "Right Margin" => "Højre margen", + "Top Margin" => "Øverste margen", + "Bottom Margin" => "Nederste margen", + "Header Margin" => "Sidehovedmargen", + "Footer Margin" => "Sidefodsmargen", + "Size" => "Størrelse", + "Print\nArea" => "Udskrifts-\nområde", + "Set Print Area" => "Angiv udskriftsområde", + "Breaks" => "Sideskift", + "Insert Page Break" => "Indsæt sideskift", + "Remove Page Break" => "Fjern sideskift", + "Reset All Page Breaks" => "Nulstil alle sideskift", + "Print\nTitles" => "Udskriv\ntitler", + "Sheet\nRight-to-Left" => "Ark fra\nhøjre mod venstre", + "Sheet Right-to-Left" => "Ark fra højre mod venstre", + "Narrow" => "Smal", + "Wide" => "Bred", + "Normal" => "Normal", + "Portrait" => "Stående", + "Landscape" => "Liggende", + "Custom Margins…" => "Brugerdefinerede margener…", + "Insert\nFunction" => "Indsæt\nfunktion", + "Name\nManager" => "Navne-\nstyring", + "Define Name" => "Definér navn", + "Use in Formula" => "Brug i formel", + "Create from Selection" => "Opret ud fra markering", + "Trace Precedents" => "Spor kildeceller", + "Trace Dependents" => "Spor afhængige celler", + "Remove Arrows" => "Fjern pile", + "Show Formulas" => "Vis formler", + "Error Checking" => "Fejlkontrol", + "Circular References" => "Cirkulære referencer", + "Evaluate Formula" => "Evaluér formel", + "Watch Window" => "Overvågningsvindue", + "Calculation\nOptions" => "Beregnings-\nindstillinger", + "Calculate Now" => "Beregn nu", + "Calculate Sheet" => "Beregn ark", + "Automatic" => "Automatisk", + "Automatic Except for Data Tables" => "Automatisk undtagen datatabeller", + "Manual" => "Manuel", + "Sort &\nFilter" => "Sortér og\nfiltrér", + "Sort" => "Sortér", + "Sort A to Z" => "Sortér fra A til Z", + "Sort Z to A" => "Sortér fra Z til A", + "Custom Sort…" => "Brugerdefineret sortering…", + "Filter" => "Filtrér", + "Reapply" => "Anvend igen", + "Get Data\n(Text/CSV)" => "Hent data\n(tekst/CSV)", + "Remove\nDuplicates" => "Fjern\ndubletter", + "Data\nValidation" => "Data-\nvalidering", + "Data Validation" => "Datavalidering", + "Data Validation…" => "Datavalidering…", + "Circle Invalid Data" => "Ring om ugyldige data", + "Clear Validation" => "Ryd validering", + "Group" => "Gruppér", + "Ungroup" => "Opdel gruppe", + "Show Detail" => "Vis detaljer", + "Hide Detail" => "Skjul detaljer", + "Subtotal" => "Subtotal", + "Data\nAnalysis" => "Data-\nanalyse", + "Data Analysis" => "Dataanalyse", + "Solver" => "Solver", + "What-If\nAnalysis" => "Hvad hvis-\nanalyse", + "Data Table…" => "Datatabel…", + "Scenario Manager…" => "Scenariestyring…", + "Goal Seek…" => "Målsøgning…", + "Forecast\nSheet" => "Prognose-\nark", + "Spelling" => "Stavekontrol", + "Check\nAccessibility" => "Kontrollér\ntilgængelighed", + "Threaded Comments" => "Kommentartråde", + "Show\nComments" => "Vis\nkommentarer", + "Previous" => "Forrige", + "Next" => "Næste", + "Previous Comment" => "Forrige kommentar", + "Next Comment" => "Næste kommentar", + "Show All Notes" => "Vis alle noter", + "Convert to Comments" => "Konvertér til kommentarer", + "Protect\nWorkbook" => "Beskyt\nregneark", + "Allow Edit\nRanges" => "Tillad redigering\naf områder", + "Allow Edit Ranges" => "Tillad redigering af områder", + "Unprotect\nSheet" => "Ophæv\narkbeskyttelse", + "Protect Sheet…" => "Beskyt ark…", + "Comments" => "Kommentarer", + "Notes" => "Noter", + "Page Break\nPreview" => "Visning\naf sideskift", + "Page\nLayout" => "Side-\nlayout", + "Formula Bar" => "Formellinje", + "Name Box" => "Navnefelt", + "Cell Editor" => "Celleeditor", + "Font Size" => "Skriftstørrelse", + "Gridlines" => "Gitterlinjer", + "Headings" => "Overskrifter", + "Zoom" => "Zoom", + "100%" => "100 %", + "Zoom to\nSelection" => "Zoom til\nmarkering", + "Freeze\nPanes" => "Frys\nruder", + "Freeze Panes" => "Frys ruder", + "Freeze Top Row" => "Frys øverste række", + "Freeze First Column" => "Frys første kolonne", + "Unfreeze Panes" => "Ophæv frysning af ruder", + "Dark Mode" => "Mørk tilstand", + "Interface language" => "Brugerfladesprog", + "Interface size" => "Brugerfladestørrelse", + "Auto" => "Auto", + "Drag to freeze columns" => "Træk for at fryse kolonner", + "Drag to freeze rows" => "Træk for at fryse rækker", + "Command\nPalette" => "Kommando-\npalet", + "Agent\nControl" => "Agent-\nstyring", + "Action\nJournal" => "Handlings-\nlog", + "About\nGridCraft" => "Om\nGridCraft", + "Share" => "Del", + "Add Chart\nElement" => "Tilføj\ndiagramelement", + "Change\nChart Type" => "Skift\ndiagramtype", + "Switch\nRow/Column" => "Byt\nrække/kolonne", + "Select\nData" => "Vælg\ndata", + "Data Labels: None" => "Dataetiketter: ingen", + "Data Labels: Show" => "Dataetiketter: vis", + "Legend: None" => "Forklaring: ingen", + "Legend: Bottom" => "Forklaring: nederst", + "Legend: Top" => "Forklaring: øverst", + "Legend: Right" => "Forklaring: højre", + "Gridlines: None" => "Gitterlinjer: ingen", + "Gridlines: Show" => "Gitterlinjer: vis", + "Chart\nTitle" => "Diagram-\ntitel", + "Delete\nChart" => "Slet\ndiagram", + "Convert\nto Range" => "Konvertér\ntil område", + "Table\nStyles" => "Tabel-\nstile", + "Top 10 Items" => "Top 10 elementer", + "Top 10%" => "Top 10 %", + "Bottom 10 Items" => "Bund 10 elementer", + "Bottom 10%" => "Bund 10 %", + "Above Average" => "Over gennemsnittet", + "Below Average" => "Under gennemsnittet", + "Clear Rules from Entire Sheet" => "Ryd regler i hele arket", + "Clear Rules from Selected Cells" => "Ryd regler i de markerede celler", + "Constants" => "Konstanter", + "Data Bars" => "Databjælker", + "Color Scales" => "Farveskalaer", + "Icon Sets" => "Ikonsæt", + "Home" => "Hjem", + "Draw" => "Tegn", + "Page Layout" => "Sidelayout", + "Formulas" => "Formler", + "Data" => "Data", + "Review" => "Gennemse", + "View" => "Vis", + "Automate" => "Automatisér", + "Table Design" => "Tabeldesign", + "Chart Design" => "Diagramdesign", + "Ready" => "Klar", + "Enter" => "Indtast", + "Edit" => "Redigér", + "Point" => "Peg", + "Calculate" => "Beregn", + "Select destination and press Enter or choose Paste" => "Vælg destination, og tryk på Enter, eller vælg Indsæt", + "General" => "Standard", + "Number" => "Tal", + "Currency" => "Valuta", + "Accounting" => "Regnskab", + "Date" => "Dato", + "Time" => "Klokkeslæt", + "Percentage" => "Procent", + "Fraction" => "Brøk", + "Scientific" => "Videnskabelig", + "Text" => "Tekst", + "Special" => "Særligt", + "Custom" => "Brugerdefineret", + "Short Date" => "Kort dato", + "Long Date" => "Lang dato", + "More Number Formats…" => "Flere talformater…", + "Financial" => "Finansielle", + "Logical" => "Logiske", + "Date &\nTime" => "Dato og\nklokkeslæt", + "Lookup &\nReference" => "Opslag og\nreference", + "Math &\nTrig" => "Matematik og\ntrigonometri", + "More\nFunctions" => "Flere\nfunktioner", + "Page Layout|Orientation" => "Retning", + "Display theme" => "Visningstema", + "Animations" => "Animationer", + "Glide the selection outline to the cell you move to instead of jumping there" => { + "Lad markeringsrammen glide hen til den celle, du flytter til, i stedet for at springe" + } + "System" => "System", + "Light" => "Lys", + "Dark" => "Mørk", + "Sheet Options|View" => "Vis", + "Print" => "Udskriv", + "Print What" => "Udskriv hvad", + "Click to add data" => "Klik for at tilføje data", + "Add header" => "Tilføj sidehoved", + "Add footer" => "Tilføj sidefod", + "(none)" => "(ingen)", + "Header" => "Sidehoved", + "Footer" => "Sidefod", + "Page\nNumber" => "Side-\nnummer", + "Number\nof Pages" => "Antal\nsider", + "Current\nDate" => "Dags\ndato", + "Current\nTime" => "Aktuelt\nklokkeslæt", + "File\nPath" => "Fil-\nsti", + "File\nName" => "Fil-\nnavn", + "Sheet\nName" => "Ark-\nnavn", + "Go to\nHeader" => "Gå til\nsidehoved", + "Go to\nFooter" => "Gå til\nsidefod", + "Page Number" => "Sidenummer", + "Number of Pages" => "Antal sider", + "Current Date" => "Dags dato", + "Current Time" => "Aktuelt klokkeslæt", + "File Path" => "Filsti", + "File Name" => "Filnavn", + "Sheet Name" => "Arknavn", + "Go to Header" => "Gå til sidehoved", + "Different First Page" => "Anderledes første side", + "Different Odd & Even Pages" => "Forskellige ulige og lige sider", + "Scale with Document" => "Skalér med dokumentet", + "Align with Page Margins" => "Justér efter sidemargener", + "Go to Footer" => "Gå til sidefod", + "Ruler" => "Lineal", + "File" => "Filer", + "Back" => "Tilbage", + "New" => "Ny", + "Open" => "Åbn", + "Info" => "Info", + "Save" => "Gem", + "Save As" => "Gem som", + "Export" => "Eksportér", + "Close" => "Luk", + "Options" => "Indstillinger", + "Blank workbook" => "Tomt regneark", + "Recent" => "Seneste", + "No recent workbooks yet." => "Ingen seneste regneark endnu.", + "More workbooks" => "Flere regneark", + "Modified" => "Ændret", + "Not available" => "Ikke tilgængelig", + "Just now" => "Lige nu", + "{n} min ago" => "for {n} min. siden", + "{n} h ago" => "for {n} t. siden", + "{n} days ago" => "for {n} dage siden", + "{n} weeks ago" => "for {n} uger siden", + "{n} months ago" => "for {n} måneder siden", + "{n} years ago" => "for {n} år siden", + "Browse…" => "Gennemse…", + "Not saved yet" => "Ikke gemt endnu", + "Location" => "Placering", + "Sheets" => "Ark", + "Protect Workbook" => "Beskyt regneark", + "Sheet structure is locked: sheets can't be added, moved, renamed or deleted." => { + "Arkstrukturen er låst: ark kan ikke tilføjes, flyttes, omdøbes eller slettes." + } + "Lock the sheet structure so sheets can't be added, moved, renamed or deleted." => { + "Lås arkstrukturen, så ark ikke kan tilføjes, flyttes, omdøbes eller slettes." + } + "Properties" => "Egenskaber", + "Title" => "Titel", + "Subject" => "Emne", + "Author" => "Forfatter", + "Company" => "Firma", + "Keywords" => "Nøgleord", + "Description" => "Beskrivelse", + "No workbook is open." => "Der er intet åbent regneark.", + "Save as type" => "Filtype", + "Excel Workbook (*.xlsx)" => "Excel-regneark (*.xlsx)", + "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (kommasepareret) (*.csv)", + "Web Page (*.html)" => "Webside (*.html)", + "PDF (*.pdf)" => "PDF (*.pdf)", + "Download" => "Download", + "A CSV file, web page or PDF is a copy: the workbook keeps its own file." => { + "En CSV-fil, webside eller PDF er en kopi: regnearket beholder sin egen fil." + } + "Save the workbook under another name or in another folder." => "Gem regnearket under et andet navn eller i en anden mappe.", + "Print Active Sheets" => "Udskriv aktive ark", + "Print Entire Workbook" => "Udskriv hele regnearket", + "Fit Sheet on One Page" => "Tilpas ark til én side", + "Page Setup…" => "Sideopsætning…", + "Page {page} of {pages}" => "Side {page} af {pages}", + "Nothing to print." => "Der er intet at udskrive.", + "Previous page" => "Forrige side", + "Next page" => "Næste side", + "Create PDF" => "Opret PDF", + "Save the sheet as a PDF document that keeps its page layout." => "Gem arket som et PDF-dokument, der bevarer sidelayoutet.", + "Change File Type" => "Skift filtype", + "CSV (Comma delimited)" => "CSV (kommasepareret)", + "Save the active sheet as comma-separated text." => "Gem det aktive ark som kommasepareret tekst.", + "Web Page (.html)" => "Webside (.html)", + "Save the workbook as a web page." => "Gem regnearket som en webside.", + "Options|General" => "Generelt", + "Options|Save" => "Gem", + "Show formula bar" => "Vis formellinje", + "Enable AutoComplete for cell values" => "Slå autofuldførelse til for celleværdier", + "Save .xlsx workbooks automatically after every change" => "Gem .xlsx-regneark automatisk efter hver ændring", + "Workbook calculation" => "Beregning af regneark", + "Enable iterative calculation" => "Slå iterativ beregning til", + "Calculation settings are saved with the workbook." => "Beregningsindstillingerne gemmes sammen med regnearket.", + "OK" => "OK", + "Cancel" => "Annullér", + "Don't Save" => "Gem ikke", + "Open…" => "Åbn…", + "Show password" => "Vis adgangskode", + "Start a new workbook" => "Start et nyt regneark", + "Household Budget" => "Husholdningsbudget", + "Quarterly Sales Dashboard" => "Kvartalsvis salgsoversigt", + "Gradebook" => "Karakterbog", + "this workbook" => "dette regneark", + "This workbook" => "Dette regneark", + "Do you want to save the changes you made to {title}?" => "Vil du gemme de ændringer, du har foretaget i {title}?", + "Save a copy as .{format}" => "Gem en kopi som .{format}", + "Select a chart first." => "Vælg først et diagram.", + "Text Box" => "Tekstboks", + "Select Data" => "Vælg data", + "Row Height" => "Rækkehøjde", + "Column Width" => "Kolonnebredde", + "Standard Width" => "Standardbredde", + "Rename Sheet" => "Omdøb ark", + "Move or Copy" => "Flyt eller kopiér", + "Protect Sheet" => "Beskyt ark", + "Protect Structure and Windows" => "Beskyt struktur og vinduer", + "Unprotect Workbook" => "Ophæv beskyttelse af regneark", + "Unprotect Sheet" => "Ophæv arkbeskyttelse", + "Password" => "Adgangskode", + "Unhide" => "Vis", + "Paste Special" => "Indsæt speciel", + "Series" => "Serie", + "New Comment" => "Ny kommentar", + "Insert Hyperlink" => "Indsæt hyperlink", + "Create Sparklines" => "Opret minidiagrammer", + "Page Setup" => "Sideopsætning", + "Convert Text to Columns" => "Konvertér tekst til kolonner", + "Remove Duplicates" => "Fjern dubletter", + "Goal Seek" => "Målsøgning", + "Create Forecast Worksheet" => "Opret prognoseark", + "Solver Parameters" => "Solver-parametre", + "Solver Results" => "Solver-resultater", + "Edit Name" => "Redigér navn", + "New Name" => "Nyt navn", + "Format Cells" => "Formatér celler", + "Formula Builder" => "Formelbygger", + "Find and Replace" => "Søg og erstat", + "Go To" => "Gå til", + "Insert Calculated Field" => "Indsæt beregnet felt", + "Go To Special" => "Gå til speciel", + "Name Manager" => "Navnestyring", + "Conditional Formatting Rules Manager" => "Styring af regler for betinget formatering", + "Search Commands" => "Søg i kommandoer", + "Agent Control" => "Agentstyring", + "About GridCraft" => "Om GridCraft", + "Insert Chart" => "Indsæt diagram", + "Select Data Source" => "Vælg datakilde", + "Action Journal" => "Handlingslog", + "Macros" => "Makroer", + "Workbook Statistics" => "Statistik for regneark", + "Accessibility" => "Tilgængelighed", + "Chart Title" => "Diagramtitel", + "Place Picture in Cell" => "Placér billede i celle", + "Place Picture over Cells" => "Placér billede over celler", + "Pick From List" => "Vælg fra liste", + "Save a Copy" => "Gem en kopi", + "Save Changes?" => "Gem ændringer?", + "Shift cells right" => "Flyt celler til højre", + "Shift cells down" => "Flyt celler nedad", + "Shift cells left" => "Flyt celler til venstre", + "Shift cells up" => "Flyt celler opad", + "Entire row" => "Hele rækken", + "Entire column" => "Hele kolonnen", + "Row height (pixels):" => "Rækkehøjde (pixel):", + "Column width (characters):" => "Kolonnebredde (tegn):", + "Standard column width (pixels):" => "Standardkolonnebredde (pixel):", + "Name:" => "Navn:", + "Before sheet (position, 0 = first):" => "Før ark (placering, 0 = første):", + "Create a copy" => "Opret en kopi", + "Sheets: {sheets}" => "Ark: {sheets}", + "Password (optional):" => "Adgangskode (valgfri):", + "Password:" => "Adgangskode:", + "Allow all users of this sheet to:" => "Tillad alle brugere af dette ark at:", + // Infinitives complete the preceding Danish permission prompt ending in "at:". + "Format cells" => "Formatere celler", + "Format columns" => "Formatere kolonner", + "Format rows" => "Formatere rækker", + "Insert rows" => "Indsætte rækker", + "Delete rows" => "Slette rækker", + "Use AutoFilter" => "Bruge autofilter", + " (password, unlocked)" => " (adgangskode, låst op)", + " (password)" => " (adgangskode)", + "No ranges yet." => "Ingen områder endnu.", + "Ranges that stay editable when the sheet is protected:" => "Områder, der kan redigeres, når arket er beskyttet:", + "Action" => "Handling", + "Modify" => "Redigér", + "Unlock with password" => "Lås op med adgangskode", + "Title:" => "Titel:", + "Refers to cells:" => "Henviser til celler:", + "Range password:" => "Adgangskode til område:", + "New title (Modify):" => "Ny titel (Redigér):", + "Remove the password (Modify)" => "Fjern adgangskoden (Redigér)", + "'{file}' is protected." => "»{file}« er beskyttet.", + "Unhide sheet:" => "Vis ark:", + "Hidden: {sheets}" => "Skjulte: {sheets}", + "All" => "Alt", + "Formulas (F)" => "Formler (F)", + "Values (V)" => "Værdier (V)", + "Formats (T)" => "Formater (T)", + "Comments and notes (C)" => "Kommentarer og noter (C)", + "Validation" => "Validering", + "All except borders" => "Alt undtagen kanter", + "Column widths" => "Kolonnebredder", + "Formulas and number formats" => "Formler og talformater", + "Values and number formats" => "Værdier og talformater", + "Operation" => "Handling", + "Add" => "Læg til", + "Subtract" => "Træk fra", + "Multiply" => "Gang", + "Divide" => "Divider", + "Skip blanks" => "Spring tomme over", + "Transpose (E)" => "Transponér (E)", + "Series in" => "Serie i", + "Columns" => "Kolonner", + "Rows" => "Rækker", + "Type" => "Type", + "Linear" => "Lineær", + "Growth" => "Vækst", + "Date unit" => "Datoenhed", + "Day" => "Dag", + "Weekday" => "Ugedag", + "Month" => "Måned", + "Year" => "År", + "Step value:" => "Trinværdi:", + "Stop value:" => "Slutværdi:", + "Start a conversation:" => "Start en samtale:", + "Note:" => "Note:", + "Display:" => "Vis:", + "Link to (web address, e-mail or Sheet!A1):" => "Link til (webadresse, e-mail eller Ark!A1):", + "ScreenTip:" => "Skærmtip:", + "Data Range:" => "Dataområde:", + "Location Range:" => "Placeringsområde:", + "Markers" => "Mærker", + "Footer:" => "Sidefod:", + "Left margin (in):" => "Venstre margen (tommer):", + "Right margin (in):" => "Højre margen (tommer):", + "Top margin (in):" => "Øverste margen (tommer):", + "Bottom margin (in):" => "Nederste margen (tommer):", + "Header (in):" => "Sidehoved (tommer):", + "Footer (in):" => "Sidefod (tommer):", + "Tab" => "Tabulator", + "Semicolon" => "Semikolon", + "Comma" => "Komma", + "Space" => "Mellemrum", + "Other:" => "Andet:", + "Treat consecutive delimiters as one" => "Behandl flere skilletegn i træk som ét", + "Destination:" => "Destination:", + "My data has headers" => "Mine data har overskrifter", + "Columns (blank = all, e.g. A,C):" => "Kolonner (tom = alle, f.eks. A,C):", + "Timeline range (blank: first column of the selection):" => "Tidslinjeområde (tom: markeringens første kolonne):", + "Values range (blank: second column of the selection):" => "Værdiområde (tom: markeringens anden kolonne):", + "Confidence interval" => "Konfidensinterval", + "Confidence level (%):" => "Konfidensniveau (%):", + "Seasonality (auto, 0 for none, or a season length):" => "Sæsonudsving (auto, 0 for ingen eller en sæsonlængde):", + "Fill missing points using" => "Udfyld manglende punkter med", + "Interpolation" => "Interpolation", + "Zeros" => "Nuller", + "Aggregate duplicates using" => "Saml dubletter med", + "Average" => "Gennemsnit", + "Count" => "Antal", + "CountA" => "Antal værdier (CountA)", + "Max" => "Maks.", + "Median" => "Median", + "Min" => "Min.", + "Sum" => "Sum", + "Product" => "Produkt", + "Include forecast statistics" => "Medtag prognosestatistik", + "Chart" => "Diagram", + "Diagram" => "Skema", + "Decorative Text" => "Dekorativ tekst", + "Line chart" => "Kurvediagram", + "Column chart" => "Søjlediagram", + "At each change in (column letter):" => "Ved hver ændring i (kolonnebogstav):", + "Use function" => "Brug funktion", + "Add subtotal to (columns, e.g. C,D):" => "Tilføj subtotal til (kolonner, f.eks. C,D):", + "Magnification" => "Forstørrelse", + "Custom (%):" => "Brugerdefineret (%):", + "Scope (Workbook or sheet name):" => "Omfang (Workbook eller arknavn):", + "Comment:" => "Kommentar:", + "Refers to:" => "Henviser til:", + "Allow" => "Tillad", + "Any value" => "Enhver værdi", + "Whole number" => "Heltal", + "Decimal" => "Decimaltal", + "List" => "Liste", + "Text length" => "Tekstlængde", + "between" => "mellem", + "not between" => "ikke mellem", + "equal to" => "lig med", + "not equal to" => "forskellig fra", + "greater than" => "større end", + "less than" => "mindre end", + "greater than or equal to" => "større end eller lig med", + "less than or equal to" => "mindre end eller lig med", + "Minimum / Source / Formula:" => "Minimum / kilde / formel:", + "Maximum:" => "Maksimum:", + "Ignore blank" => "Ignorer tomme", + "In-cell dropdown" => "Rulleliste i cellen", + "Input message:" => "Inputmeddelelse:", + "Error style" => "Fejltype", + "Stop" => "Stop", + "Warning" => "Advarsel", + "Information" => "Information", + "Error message:" => "Fejlmeddelelse:", + "Format cells that are (value):" => "Formatér celler, der er (værdi):", + "and:" => "og:", + "Format cells that contain the text:" => "Formatér celler, der indeholder teksten:", + "Format cells that contain a date occurring:" => "Formatér celler, der indeholder en dato:", + "Yesterday" => "I går", + "Today" => "I dag", + "Tomorrow" => "I morgen", + "In the last 7 days" => "I de sidste 7 dage", + "Last week" => "Sidste uge", + "This week" => "Denne uge", + "Next week" => "Næste uge", + "Last month" => "Sidste måned", + "This month" => "Denne måned", + "Next month" => "Næste måned", + "Format values where this formula is true:" => "Formatér værdier, hvor denne formel er sand:", + "with" => "med", + "Light Red Fill with Dark Red Text" => "Lyserød udfyldning med mørkerød tekst", + "Yellow Fill with Dark Yellow Text" => "Gul udfyldning med mørkegul tekst", + "Green Fill with Dark Green Text" => "Grøn udfyldning med mørkegrøn tekst", + "Light Red Fill" => "Lyserød udfyldning", + "Red Text" => "Rød tekst", + "Red Border" => "Rød kant", + "Formula:" => "Formel:", + "Select" => "Markér", + "Blanks" => "Tomme celler", + "Errors" => "Fejl", + "Numbers" => "Tal", + "Current region" => "Aktuelt område", + "Last cell" => "Sidste celle", + "Visible cells only" => "Kun synlige celler", + "Conditional formats" => "Betingede formater", + "Data validation" => "Datavalidering", + "Horizontal axis title:" => "Titel på vandret akse:", + "Vertical axis title:" => "Titel på lodret akse:", + "No picture selected" => "Intet billede valgt", + "Picture file path (PNG or JPEG):" => "Sti til billedfil (PNG eller JPEG):", + "Description (optional):" => "Beskrivelse (valgfri):", + "Fits inside the selected cell and moves with its content." => "Passer ind i den markerede celle og flytter med dens indhold.", + "Choose a PNG or JPEG no larger than 16 MB." => "Vælg en PNG eller JPEG på højst 16 MB.", + "About" => "Om", + "Contributors" => "Bidragydere", + "Models" => "Modeller", + "Version {version}" => "Version {version}", + "Join the ArtCraft Discord" => "Bliv en del af ArtCraft-Discorden", + "This workbook has no scripts or macros." => "Dette regneark har ingen scripts eller makroer.", + "(unnamed)" => "(unavngivet)", + "— VBA project (preserved, not run)" => "— VBA-projekt (bevaret, køres ikke)", + "— 1 step" => "— 1 trin", + "— {steps} steps" => "— {steps} trin", + "Alignment" => "Justering", + "Font" => "Skrifttype", + "Border" => "Kant", + "Format Cells|Fill" => "Udfyldning", + "Protection" => "Beskyttelse", + "Category:" => "Kategori:", + "Sample" => "Eksempel", + "Type (custom format code):" => "Type (brugerdefineret formatkode):", + "Vertical" => "Lodret", + "Justify" => "Lige margener", + "Center Across Selection" => "Centrér over markering", + "Distributed" => "Fordelt", + "Top" => "Øverst", + "Bottom" => "Nederst", + "Indent" => "Indrykning", + "Orientation (degrees)" => "Retning (grader)", + "Wrap text" => "Ombryd tekst", + "Shrink to fit" => "Formindsk, så det passer", + "Bold" => "Fed", + "Italic" => "Kursiv", + "None" => "Ingen", + "Single" => "Enkelt", + "Double" => "Dobbelt", + "Single Accounting" => "Enkelt (regnskab)", + "Double Accounting" => "Dobbelt (regnskab)", + "Superscript" => "Hævet skrift", + "Subscript" => "Sænket skrift", + "Color:" => "Farve:", + "Outline" => "Kontur", + "Diagonal ↘" => "Diagonal ↘", + "Diagonal ↗" => "Diagonal ↗", + "none" => "ingen", + "thin" => "tynd", + "medium" => "mellem", + "thick" => "tyk", + "dashed" => "stiplet", + "dotted" => "prikket", + "double" => "dobbelt", + "Background Color:" => "Baggrundsfarve:", + "Locked" => "Låst", + "Hidden" => "Skjult", + "Search:" => "Søg:", + "e.g. lookup, average, date" => "f.eks. lookup, average, date", + "Date & Time" => "Dato og klokkeslæt", + "Lookup & Reference" => "Opslag og reference", + "Math & Trig" => "Matematik og trigonometri", + "Statistical" => "Statistiske", + "Engineering" => "Teknik", + "Database" => "Database", + "Compatibility" => "Kompatibilitet", + "Web" => "Web", + "Cube" => "Kube", + "Add-in and Automation" => "Tilføjelsesprogrammer og automatisering", + "Find" => "Søg", + "Replace" => "Erstat", + "Find what:" => "Søg efter:", + "Replace with:" => "Erstat med:", + "Match case" => "Forskel på store og små bogstaver", + "Match entire cell contents" => "Hele celleindholdet skal matche", + "Within workbook" => "I hele regnearket", + "Replace All" => "Erstat alle", + "Find All" => "Søg efter alle", + "Find Next" => "Søg næste", + "All done. We made {count} replacements." => "Færdig. Der blev foretaget {count} erstatninger.", + "{count} cell(s) found" => "{count} celle(r) fundet", + "Reference:" => "Reference:", + "Special…" => "Speciel…", + "My list has headers" => "Min liste har overskrifter", + "Sort by" => "Sortér efter", + "Then by" => "Derefter efter", + "Cell Values" => "Celleværdier", + "Cell Color" => "Cellefarve", + "A to Z" => "A til Z", + "Z to A" => "Z til A", + "+ Add Level" => "+ Tilføj niveau", + "New…" => "Ny…", + "Edit…" => "Redigér…", + "Name" => "Navn", + "Value" => "Værdi", + "Refers To" => "Henviser til", + "Scope" => "Omfang", + "Workbook" => "Regneark", + "No names defined" => "Ingen navne defineret", + "Recommended Charts" => "Anbefalede diagrammer", + "All Charts" => "Alle diagrammer", + "Clustered Column" => "Grupperet søjle", + "Stacked Column" => "Stablet søjle", + "100% Stacked Column" => "100 % stablet søjle", + "Clustered Bar" => "Grupperet bjælke", + "Stacked Bar" => "Stablet bjælke", + "100% Stacked Bar" => "100 % stablet bjælke", + "Line" => "Kurve", + "Line with Markers" => "Kurve med mærker", + "Stacked Line" => "Stablet kurve", + "Pie" => "Cirkel", + "Doughnut" => "Ring", + "Area" => "Område", + "Stacked Area" => "Stablet område", + "100% Stacked Area" => "100 % stablet område", + "Scatter" => "Punkt", + "Scatter with Lines" => "Punkt med linjer", + "Radar" => "Radar", + "Histogram" => "Histogram", + "Waterfall" => "Vandfald", + "Funnel" => "Tragt", + "Combo" => "Kombination", + "Chart data range:" => "Diagrammets dataområde:", + "Legend Entries (Series)" => "Forklaringselementer (serier)", + "Series{n}" => "Serie{n}", + "Keep" => "Behold", + "Remove" => "Fjern", + "Horizontal (Category) Axis Labels:" => "Etiketter på vandret akse (kategori):", + "There are no conditional formatting rules on this sheet." => "Der er ingen regler for betinget formatering i dette ark.", + "applies to" => "gælder for", + "Type a command, e.g. freeze, chart, bold…" => "Skriv en kommando, f.eks. frys, diagram, fed…", + "Set cell:" => "Angiv celle:", + "To value:" => "Til værdi:", + "By changing cell:" => "Ved at ændre celle:", + "Goal Seeking found a solution: {value}" => "Målsøgningen fandt en løsning: {value}", + "Analysis Tools" => "Analyseværktøjer", + "Anova: Single Factor" => "Anova: én faktor", + "Correlation" => "Korrelation", + "Covariance" => "Kovarians", + "Descriptive Statistics" => "Beskrivende statistik", + "Exponential Smoothing" => "Eksponentiel udjævning", + "F-Test Two-Sample for Variances" => "F-test: to stikprøver for varianser", + "Moving Average" => "Glidende gennemsnit", + "Rank and Percentile" => "Rang og percentil", + "Regression" => "Regression", + "t-Test: Paired Two Sample for Means" => "t-test: parrede stikprøver for middelværdier", + "t-Test: Two-Sample Assuming Equal Variances" => "t-test: to stikprøver med ens varianser", + "t-Test: Two-Sample Assuming Unequal Variances" => "t-test: to stikprøver med forskellige varianser", + "Output options" => "Outputindstillinger", + "Output Range:" => "Outputområde:", + "New Worksheet Ply:" => "Nyt ark:", + "Grouped By:" => "Grupperet efter:", + "Labels in first row" => "Etiketter i første række", + "Input Range:" => "Inputområde:", + "Variable 1 Range:" => "Område for variabel 1:", + "Variable 2 Range:" => "Område for variabel 2:", + "Summary statistics" => "Opsummerende statistik", + "Confidence Level for Mean (%), blank for none:" => "Konfidensniveau for middelværdi (%), tom for intet:", + "Kth Largest (blank for none):" => "K'te største (tom for intet):", + "Kth Smallest (blank for none):" => "K'te mindste (tom for intet):", + "Bin Range (blank for automatic bins):" => "Intervalområde (tom for automatiske intervaller):", + "Pareto (sorted histogram)" => "Pareto (sorteret histogram)", + "Cumulative Percentage" => "Kumulativ procent", + "Alpha:" => "Alfa:", + "Input Y Range:" => "Input Y-område:", + "Input X Range:" => "Input X-område:", + "Constant is Zero" => "Konstanten er nul", + "Confidence Level (%):" => "Konfidensniveau (%):", + "Residuals" => "Residualer", + "Standardized Residuals" => "Standardiserede residualer", + "Normal Probability" => "Normalfordelingsplot", + "Interval:" => "Interval:", + "Standard Errors" => "Standardfejl", + "Damping factor:" => "Dæmpningsfaktor:", + "Hypothesized Mean Difference:" => "Antaget forskel mellem middelværdier:", + "Set Objective:" => "Angiv mål:", + "To:" => "Til:", + "Value Of:" => "Værdien:", + "By Changing Variable Cells:" => "Ved at ændre variabelceller:", + "Subject to the Constraints:" => "Underlagt begrænsningerne:", + "Make Unconstrained Variables Non-Negative" => "Gør ubegrænsede variabler ikke-negative", + "Select a Solving Method:" => "Vælg en løsningsmetode:", + "GRG Nonlinear" => "GRG ikke-lineær", + "Solve" => "Løs", + "Keep Solver Solution" => "Behold Solver-løsningen", + "Restore Original Values" => "Gendan oprindelige værdier", + "The spelling check is complete for the entire sheet." => "Stavekontrollen er færdig for hele arket.", + "Not in Dictionary ({cell}):" => "Ikke i ordbogen ({cell}):", + "Suggestions:" => "Forslag:", + "(No suggestions)" => "(Ingen forslag)", + "Ignore Once" => "Ignorer én gang", + "Add to Dictionary" => "Føj til ordbog", + "Change" => "Ret", + "Change All" => "Ret alle", + "$ English (United States)" => "$ Engelsk (USA)", + "Add Chart Element" => "Tilføj diagramelement", + "Align Left" => "Venstrejustér", + "Align Right" => "Højrejustér", + "Bottom Align" => "Justér nederst", + "Calculate Now (F9)" => "Beregn nu (F9)", + "Calculate Sheet (⇧F9)" => "Beregn ark (⇧F9)", + "Calculation Options" => "Beregningsindstillinger", + "Cell Styles" => "Cellestile", + "Change Chart Type" => "Skift diagramtype", + "Check Accessibility" => "Kontrollér tilgængelighed", + "Clear Filter" => "Ryd filter", + "Column or Bar" => "Søjle eller bjælke", + "Comments pane" => "Kommentarrude", + "Convert the last ink stroke to a shape" => "Konvertér den sidste blækstreg til en figur", + "Convert to Range" => "Konvertér til område", + "Copy" => "Kopiér", + "Custom Sort" => "Brugerdefineret sortering", + "Cut" => "Klip", + "Define Name…" => "Definér navn…", + "Delete Comment" => "Slet kommentar", + "Delete Sheet" => "Slet ark", + "Delete chart" => "Slet diagram", + "Delete…" => "Slet…", + "Dismiss" => "Luk", + "Down" => "Nedad", + "Edit chart title" => "Redigér diagramtitel", + "Erase ink strokes" => "Slet blækstreger", + "Every command run in this session (replayable)" => "Alle kommandoer, der er kørt i denne session (kan afspilles igen)", + "Expand formula bar" => "Udvid formellinjen", + "Filter by Selected Cell's Value" => "Filtrér efter den markerede celles værdi", + "Find & Select" => "Søg og markér", + "Forecast Sheet" => "Prognoseark", + "Forecast end (date or number; blank: a third of the history):" => "Prognoseslut (dato eller tal; tom: en tredjedel af historikken):", + "Format Chart pane" => "Ruden Formatér diagram", + "Format as Table" => "Formatér som tabel", + "Hide" => "Skjul", + "Hide Sheet" => "Skjul ark", + "Hierarchy & more" => "Hierarki og mere", + "Highlighter" => "Overstregningspen", + "How agents drive GridCraft (MCP / control channel)" => "Sådan styrer agenter GridCraft (MCP / kontrolkanal)", + "Import a text or CSV file" => "Importér en tekst- eller CSV-fil", + "Insert Function" => "Indsæt funktion", + "Insert Function (⇧F3)" => "Indsæt funktion (⇧F3)", + "Insert Link" => "Indsæt link", + "Insert Sheet" => "Indsæt ark", + "Insert Slicer" => "Indsæt udsnitsfilter", + "Insert a picture" => "Indsæt et billede", + "Insert a slicer to filter a table" => "Indsæt et udsnitsfilter for at filtrere en tabel", + "Insert an icon" => "Indsæt et ikon", + "Insert…" => "Indsæt…", + "Line or Area" => "Kurve eller område", + "Link…" => "Link…", + "Macros and scripts in this workbook (Alt+F8)" => "Makroer og scripts i dette regneark (Alt+F8)", + "Middle Align" => "Justér midt", + "More commands" => "Flere kommandoer", + "Move or Copy Sheet…" => "Flyt eller kopiér ark…", + "New sheet (⇧F11)" => "Nyt ark (⇧F11)", + "Next sheet" => "Næste ark", + "Page Breaks" => "Sideskift", + "Paper Size" => "Papirstørrelse", + "Pick From Drop-down List…" => "Vælg fra rulleliste…", + "Pie or Doughnut" => "Cirkel eller ring", + "Previous sheet" => "Forrige ark", + "Print Area" => "Udskriftsområde", + "Print Titles" => "Udskriv titler", + "Protect Workbook structure" => "Beskyt regnearkets struktur", + "Redo" => "Annullér fortryd", + "Scatter or Bubble" => "Punkt eller boble", + "Search and run any command" => "Søg efter og kør en hvilken som helst kommando", + "Search commands" => "Søg i kommandoer", + "Select and move ink and shapes" => "Markér og flyt blæk og figurer", + "Series…" => "Serie…", + "Share: export or save a copy" => "Del: eksportér eller gem en kopi", + "Show Formulas (⌃`)" => "Vis formler (⌃`)", + "Slicer" => "Udsnitsfilter", + "Sort & Filter" => "Sortér og filtrér", + "Spelling (F7)" => "Stavekontrol (F7)", + "Statistic" => "Statistik", + "Switch Row/Column" => "Byt række/kolonne", + "Table Styles" => "Tabelstile", + "Text to Columns" => "Tekst til kolonner", + "The output range already holds data. Replace it with the report?" => { + "Outputområdet indeholder allerede data. Vil du erstatte dem med rapporten?" + } + "Top Align" => "Justér øverst", + "Undo" => "Fortryd", + "Undo list" => "Fortrydelsesliste", + "Unhide Sheet…" => "Vis ark…", + "Up" => "Opad", + "Version, contributors and the AI models that helped" => "Version, bidragydere og de AI-modeller, der har hjulpet", + "What-If Analysis" => "Hvad hvis-analyse", + "Zoom In" => "Zoom ind", + "Zoom Out" => "Zoom ud", + "Zoom to 100%" => "Zoom til 100 %", + "Zoom to Selection" => "Zoom til markering", + "Zoom…" => "Zoom…", + "£ English (United Kingdom)" => "£ Engelsk (Storbritannien)", + "¥ Japanese" => "¥ Japansk", + "€ Euro" => "€ Euro", + "Tab|Insert" => "Indsæt", + "AutoSave" => "Autogem", + "Insert\nSlicer" => "Indsæt\nudsnitsfilter", + "Pen\nBlack" => "Pen\nsort", + "Pen\nBlue" => "Pen\nblå", + "Pen\nRed" => "Pen\nrød", + "Protect\nSheet" => "Beskyt\nark", + "Watch\nWindow" => "Overvågnings-\nvindue", + "Workbook\nStatistics" => "Regneark-\nstatistik", + "Calculated Field…" => "Beregnet felt…", + "Choose fields to add to report:" => "Vælg felter, der skal føjes til rapporten:", + "Compact" => "Kompakt", + "Filters" => "Filtre", + "Group by Months" => "Gruppér efter måneder", + "Group by Quarters" => "Gruppér efter kvartaler", + "Group by Years" => "Gruppér efter år", + "Move to Column Labels" => "Flyt til kolonneetiketter", + "Move to Report Filter" => "Flyt til rapportfilter", + "Move to Row Labels" => "Flyt til rækkeetiketter", + "Move to Values" => "Flyt til værdier", + "PivotTable Fields" => "Pivottabelfelter", + "Refresh" => "Opdatér", + "Remove Field" => "Fjern felt", + "Report Layout" => "Rapportlayout", + "Show as % of Grand Total" => "Vis som % af hovedtotal", + "Show as No Calculation" => "Vis uden beregning", + "Show as Rank" => "Vis som rang", + "Show as Running Total" => "Vis som løbende total", + "Summarize by Average" => "Opsummér efter gennemsnit", + "Summarize by Count" => "Opsummér efter antal", + "Summarize by Max" => "Opsummér efter maks.", + "Summarize by Min" => "Opsummér efter min.", + "Summarize by Sum" => "Opsummér efter sum", + "Tabular" => "Tabelform", + "Use a field's menu to move it between areas:" => "Brug et felts menu til at flytte det mellem områder:", + "Values" => "Værdier", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "Sidehoved (&L venstre, &C midt, &R højre; &P side, &N sider, &D dato, &A ark):" + } + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Prognosestart (en dato eller et tal i historikken; tom: efter det sidste punkt):" + } + "Source:" => "Kilde:", + "End date:" => "Slutdato:", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Beskyt regnearket for: struktur (ark kan ikke tilføjes, flyttes, omdøbes, skjules eller slettes)." + } + "Printer" => "Printer", + "Select a printer" => "Vælg en printer", + "Refresh printers" => "Opdatér printere", + "Copies" => "Kopier", + "Two-sided printing" => "Tosidet udskrivning", + "Printer default" => "Printerens standard", + "One-sided" => "Enkeltsidet", + "Two-sided: long edge" => "Tosidet: lang kant", + "Two-sided: short edge" => "Tosidet: kort kant", + "Grayscale" => "Gråtoner", + "Finding printers…" => "Søger efter printere…", + "No printers found. Configure a system printer or export a PDF." => { + "Der blev ikke fundet nogen printere. Konfigurér en systemprinter, eller eksportér en PDF." + } + "Printer discovery failed." => "Søgningen efter printere mislykkedes.", + "Submitting print job…" => "Sender udskriftsjob…", + "Print job submitted." => "Udskriftsjobbet er sendt.", + "Print job submitted: {receipt}" => "Udskriftsjobbet er sendt: {receipt}", + "Print failed: {error}" => "Udskrivningen mislykkedes: {error}", + "Print failed: the printing worker stopped." => "Udskrivningen mislykkedes: udskriftsprocessen stoppede.", + "Options|Editing" => "Redigering", + "Duplicate" => "Duplikér", + "Rename" => "Omdøb", + "Product Information" => "Produktoplysninger", + "Tab Color" => "Fanefarve", + "Select All Sheets" => "Markér alle ark", + "Fit selection" => "Tilpas til markering", + "All sheets" => "Alle ark", + "Version" => "Version", + "Unhide…" => "Vis…", + "Platform" => "Platform", + "Unprotect Sheet…" => "Ophæv arkbeskyttelse…", + "AutoSave: save after every change (workbooks saved to a file)" => "Autogem: gem efter hver ændring (regneark, der er gemt i en fil)", + "Licence" => "Licens", + "Account" => "Konto", + "No Color" => "Ingen farve", + "Move or Copy…" => "Flyt eller kopiér…", + "Number Stored as Text" => "Tal gemt som tekst", + "Select Data…" => "Vælg data…", + "Convert to Number" => "Konvertér til tal", + "Format Chart Area…" => "Formatér diagramområde…", + "Error checking options" => "Indstillinger for fejlkontrol", + "Paste formulas that refer to the copied cells" => "Indsæt formler, der henviser til de kopierede celler", + "Record Macro" => "Optag makro", + "Stop Recording" => "Stop optagelse", + "Use Relative References" => "Brug relative referencer", + "Run\nMacro" => "Kør\nmakro", + "Macros…" => "Makroer…", + "Recording" => "Optager", + "New Macro" => "Ny makro", + "Show" => "Vis", + "Maximum Iterations:" => "Maksimalt antal iterationer:", + "Maximum Change:" => "Maksimal ændring:", + "Maximum Iterations must be a whole number from 1 to 32767." => "Maksimalt antal iterationer skal være et heltal fra 1 til 32767.", + "Maximum Change must be a number of 0 or more." => "Maksimal ændring skal være et tal på 0 eller derover.", + "Cut (⌘X)" => "Klip (⌘X)", + "Copy (⌘C)" => "Kopiér (⌘C)", + "Bold (⌘B)" => "Fed (⌘B)", + "Italic (⌘I)" => "Kursiv (⌘I)", + "Underline (⌘U)" => "Understreget (⌘U)", + "AutoSum (⌘⇧T)" => "AutoSum (⌘⇧T)", + "Filter (⌘⇧F)" => "Filtrér (⌘⇧F)", + "Flash Fill (⌘E)" => "Hurtigudfyld (⌘E)", + "Insert Link (⌘K)" => "Indsæt link (⌘K)", + "Paste (⌘V)" => "Indsæt (⌘V)", + "Redo (⌘Y)" => "Annullér fortryd (⌘Y)", + "Save (⌘S)" => "Gem (⌘S)", + "Search commands (⌘⇧Space)" => "Søg i kommandoer (⌘⇧Mellemrum)", + "Table (⌘T)" => "Tabel (⌘T)", + "Undo (⌘Z)" => "Fortryd (⌘Z)", + "New Workbook" => "Nyt regneark", + "Save As…" => "Gem som…", + "Print…" => "Udskriv…", + "Export as PDF…" => "Eksportér som PDF…", + "Save a Copy as Excel Workbook (.xlsx)…" => "Gem en kopi som Excel-regneark (.xlsx)…", + "Export as CSV…" => "Eksportér som CSV…", + "Export as Web Page (.html)…" => "Eksportér som webside (.html)…", + "Bottom Border" => "Nederste kant", + "Top Border" => "Øverste kant", + "Left Border" => "Venstre kant", + "Right Border" => "Højre kant", + "No Border" => "Ingen kant", + "All Borders" => "Alle kanter", + "Outside Borders" => "Ydre kanter", + "Thick Outside Borders" => "Tykke ydre kanter", + "Bottom Double Border" => "Dobbelt nederste kant", + "Thick Bottom Border" => "Tyk nederste kant", + "Top and Bottom Border" => "Øverste og nederste kant", + "Top and Thick Bottom Border" => "Øverste og tyk nederste kant", + "Top and Double Bottom Border" => "Øverste og dobbelt nederste kant", + "Inside Borders" => "Indvendige kanter", + "More Borders…" => "Flere kanter…", + "More Functions…" => "Flere funktioner…", + "No Fill" => "Ingen udfyldning", + "Theme Colors" => "Temafarver", + "Standard Colors" => "Standardfarver", + "Highlight Cells Rules" => "Regler for fremhævning af celler", + "Greater Than…" => "Større end…", + "Less Than…" => "Mindre end…", + "Between…" => "Mellem…", + "Equal To…" => "Lig med…", + "Text that Contains…" => "Tekst, der indeholder…", + "A Date Occurring…" => "En dato i perioden…", + "Duplicate Values…" => "Dubletværdier…", + "Top/Bottom Rules" => "Regler for top/bund", + "Blue" => "Blå", + "Green" => "Grøn", + "Red" => "Rød", + "Orange" => "Orange", + "Light Blue" => "Lyseblå", + "Purple" => "Lilla", + "Green - Yellow - Red" => "Grøn - gul - rød", + "Red - Yellow - Green" => "Rød - gul - grøn", + "Green - White - Red" => "Grøn - hvid - rød", + "Blue - White - Red" => "Blå - hvid - rød", + "White - Green" => "Hvid - grøn", + "White - Red" => "Hvid - rød", + "3 Arrows" => "3 pile", + "3 Traffic Lights" => "3 trafiklys", + "3 Symbols" => "3 symboler", + "4 Ratings" => "4 vurderinger", + "5 Arrows" => "5 pile", + "5 Quarters" => "5 kvartcirkler", + "New Rule…" => "Ny regel…", + "Clear Rules" => "Ryd regler", + "Manage Rules…" => "Administrér regler…", + "Good, Bad and Neutral" => "God, dårlig og neutral", + "Bad" => "Dårlig", + "Good" => "God", + "Neutral" => "Neutral", + "Data and Model" => "Data og model", + "Calculation" => "Beregning", + "Check Cell" => "Kontrolcelle", + "Explanatory Text" => "Forklarende tekst", + "Input" => "Input", + "Linked Cell" => "Cellekæde", + "Note" => "Note", + "Output" => "Output", + "Warning Text" => "Advarselstekst", + "Titles and Headings" => "Titler og overskrifter", + "Heading 1" => "Overskrift 1", + "Heading 2" => "Overskrift 2", + "Heading 3" => "Overskrift 3", + "Heading 4" => "Overskrift 4", + "Total" => "I alt", + "Themed Cell Styles" => "Cellestile med tema", + "Number Format" => "Talformat", + "Comma [0]" => "Komma [0]", + "Currency [0]" => "Valuta [0]", + "Percent" => "Procent", + "Place in Cell" => "Placér i celle", + "Place over Cells" => "Placér over celler", + "Rectangle" => "Rektangel", + "Rounded Rectangle" => "Afrundet rektangel", + "Oval" => "Oval", + "Triangle" => "Trekant", + "Arrow" => "Pil", + "Column" => "Søjle", + "Win/Loss" => "Gevinst/tab", + "Type to filter…" => "Skriv for at filtrere…", + "Sort Ascending" => "Sortér stigende", + "Sort Descending" => "Sortér faldende", + "Search" => "Søg", + "Apply" => "Anvend", + "20% - Accent1" => "20 % - Accent1", + "20% - Accent2" => "20 % - Accent2", + "20% - Accent3" => "20 % - Accent3", + "20% - Accent4" => "20 % - Accent4", + "20% - Accent5" => "20 % - Accent5", + "20% - Accent6" => "20 % - Accent6", + "40% - Accent1" => "40 % - Accent1", + "40% - Accent2" => "40 % - Accent2", + "40% - Accent3" => "40 % - Accent3", + "40% - Accent4" => "40 % - Accent4", + "40% - Accent5" => "40 % - Accent5", + "40% - Accent6" => "40 % - Accent6", + "60% - Accent1" => "60 % - Accent1", + "60% - Accent2" => "60 % - Accent2", + "60% - Accent3" => "60 % - Accent3", + "60% - Accent4" => "60 % - Accent4", + "60% - Accent5" => "60 % - Accent5", + "60% - Accent6" => "60 % - Accent6", + "Accent1" => "Accent1", + "Accent2" => "Accent2", + "Accent3" => "Accent3", + "Accent4" => "Accent4", + "Accent5" => "Accent5", + "Accent6" => "Accent6", + "Recent Colors" => "Seneste farver", + "More Colors…" => "Flere farver…", + "Hex" => "Hex", + "Page Break Preview" => "Visning af sideskift", + "Bubble" => "Boble", + "Box & Whisker" => "Boksplot", + "Treemap" => "Trækort", + "Sunburst" => "Solstråle", + "Stock" => "Aktie", + "Bar" => "Bjælke", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "Træk for at udfylde celler. Træk inde fra en celle for at markere et område." + } + "Book" => "Projektmappe", + "Sheet" => "Ark", + "Generated|Column" => "Kolonne", + "Generated|Row" => "Række", + "Page {page}" => "Side {page}", + "Paste Special|Add" => "Læg til", + "Text to Columns|Comma" => "Komma", + "Page order" => "Siderækkefølge", + "Down, then over" => "Nedad, derefter mod højre", + "Over, then down" => "Mod højre, derefter nedad", + _ => return None, + }) +} diff --git a/crates/ui-egui/src/i18n/de.rs b/crates/ui-egui/src/i18n/de.rs index 07fdb67108..77ef03ddfa 100644 --- a/crates/ui-egui/src/i18n/de.rs +++ b/crates/ui-egui/src/i18n/de.rs @@ -4,6 +4,845 @@ /// Returns the German translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Applies to" => "Wird angewendet auf", + "Formula" => "Formel", + "Maximum" => "Maximum", + "Minimum" => "Minimum", + "New Formatting Rule" => "Neue Formatierungsregel", + "and" => "und", + "menu|Tools" => "Extras", + "Window" => "Fenster", + "Help" => "Hilfe", + "New from Sample…" => "Neu aus Beispiel…", + "Save as Web Page…" => "Als Webseite speichern…", + "Properties…" => "Eigenschaften…", + "Fill Down" => "Nach unten ausfüllen", + "Fill Right" => "Nach rechts ausfüllen", + "Display Theme" => "Darstellung", + "Collapse Ribbon" => "Menüband reduzieren", + "Cells…" => "Zellen…", + "Sparklines…" => "Sparklines…", + "Function…" => "Funktion…", + "Name…" => "Name…", + "Picture…" => "Bild…", + "Rename Sheet…" => "Blatt umbenennen…", + "Conditional Formatting…" => "Bedingte Formatierung…", + "Spelling…" => "Rechtschreibung…", + "Error Checking…" => "Fehlerüberprüfung…", + "Evaluate Formula…" => "Formel auswerten…", + "Record Actions" => "Aktionen aufzeichnen", + "Command Palette…" => "Befehlssuche…", + "Sort…" => "Sortieren…", + "Text to Columns…" => "Text in Spalten…", + "Remove Duplicates…" => "Duplikate entfernen…", + "Subtotal…" => "Teilergebnis…", + "Next Sheet" => "Nächstes Blatt", + "Previous Sheet" => "Vorheriges Blatt", + "Agent Control (MCP)…" => "Agentensteuerung (MCP)…", + "Contributors…" => "Mitwirkende…", + "GridCraft on getartcraft.com" => "GridCraft auf getartcraft.com", + "Join the ArtCraft Discord…" => "Dem ArtCraft-Discord beitreten…", + "Services" => "Dienste", + "Hide GridCraft" => "GridCraft ausblenden", + "Hide Others" => "Andere ausblenden", + "Show All" => "Alle einblenden", + "Quit GridCraft" => "GridCraft beenden", + "a linked (not embedded) picture was skipped" => "Ein verknüpftes (nicht eingebettetes) Bild wurde übersprungen.", + "missing picture {target}" => "Bild {target} fehlt.", + "chart {target} has no supported plot and was skipped" => { + "Diagramm {target} enthält keinen unterstützten Diagrammtyp und wurde übersprungen." + } + "a histogram, waterfall, treemap… chart without its chart part was skipped" => { + "Ein Histogramm-, Wasserfall- oder Treemap-Diagramm… ohne eigenes Diagrammteil wurde übersprungen." + } + "an embedded object (diagram, OLE…) was skipped" => "Ein eingebettetes Objekt (Schema, OLE…) wurde übersprungen.", + "grouped shapes are not supported and were skipped" => "Gruppierte Formen werden nicht unterstützt und wurden übersprungen.", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported." => { + "XLSB-Datenimport: Formeln werden durch ihre gespeicherten Ergebnisse ersetzt und nicht neu berechnet. Formatierungen, Diagramme, Bilder, Makros und andere Funktionen werden nicht importiert; Datumsangaben, Währungen und Prozentsätze werden möglicherweise als Zahlen angezeigt. Speichern Sie eine neue .xlsx-Datei; das Speichern als XLSB wird nicht unterstützt." + } + "XLSB module sheets were skipped." => "XLSB-Modulblätter wurden übersprungen.", + "XLSB non-worksheet sheets were skipped." => "XLSB-Blätter, die keine Arbeitsblätter sind, wurden übersprungen.", + "Unsupported XLSB future-record and alternate-content blocks were skipped." => { + "Nicht unterstützte zukünftige XLSB-Datensätze und Alternate-Content-Blöcke wurden übersprungen." + } + "Invalid XLSB merged ranges were skipped." => "Ungültige XLSB-Zellverbünde wurden übersprungen.", + "{count} items in this file were handled differently. First: {warning}" => { + "{count} Elemente in dieser Datei wurden anders verarbeitet. Zuerst: {warning}" + } + "Paste Special|Add" => "Addieren", + "Text to Columns|Comma" => "Komma", + "Row height (points):" => "Zeilenhöhe (Punkte):", + " (password)" => " (Kennwort)", + " (password, unlocked)" => " (Kennwort, entsperrt)", + "$ English (United States)" => "$ Englisch (USA)", + "'{file}' is protected." => "„{file}“ ist geschützt.", + "(No suggestions)" => "(Keine Vorschläge)", + "(unnamed)" => "(ohne Namen)", + "+ Add Level" => "+ Ebene hinzufügen", + "100% Stacked Area" => "Fläche, 100 % gestapelt", + "100% Stacked Bar" => "Balken, 100 % gestapelt", + "100% Stacked Column" => "Säule, 100 % gestapelt", + "20% - Accent1" => "20 % - Akzent1", + "20% - Accent2" => "20 % - Akzent2", + "20% - Accent3" => "20 % - Akzent3", + "20% - Accent4" => "20 % - Akzent4", + "20% - Accent5" => "20 % - Akzent5", + "20% - Accent6" => "20 % - Akzent6", + "3 Arrows" => "3 Pfeile", + "3 Symbols" => "3 Symbole", + "3 Traffic Lights" => "3 Ampeln", + "4 Ratings" => "4 Bewertungen", + "40% - Accent1" => "40 % - Akzent1", + "40% - Accent2" => "40 % - Akzent2", + "40% - Accent3" => "40 % - Akzent3", + "40% - Accent4" => "40 % - Akzent4", + "40% - Accent5" => "40 % - Akzent5", + "40% - Accent6" => "40 % - Akzent6", + "5 Arrows" => "5 Pfeile", + "5 Quarters" => "5 Viertel", + "60% - Accent1" => "60 % - Akzent1", + "60% - Accent2" => "60 % - Akzent2", + "60% - Accent3" => "60 % - Akzent3", + "60% - Accent4" => "60 % - Akzent4", + "60% - Accent5" => "60 % - Akzent5", + "60% - Accent6" => "60 % - Akzent6", + "A Date Occurring…" => "Datum…", + "A to Z" => "A bis Z", + "About" => "Info", + "Accent1" => "Akzent1", + "Accent2" => "Akzent2", + "Accent3" => "Akzent3", + "Accent4" => "Akzent4", + "Accent5" => "Akzent5", + "Accent6" => "Akzent6", + "Accessibility" => "Barrierefreiheit", + "Action" => "Aktion", + "Action Journal" => "Aktionsprotokoll", + "Add" => "Hinzufügen", + "Add Chart Element" => "Diagrammelement hinzufügen", + "Add subtotal to (columns, e.g. C,D):" => "Teilergebnis hinzufügen zu (Spalten, z. B. C,D):", + "Add to Dictionary" => "Zum Wörterbuch hinzufügen", + "Add-in and Automation" => "Add-In und Automatisierung", + "Agent Control" => "Agentensteuerung", + "Aggregate duplicates using" => "Duplikate zusammenfassen mit", + "Align Left" => "Linksbündig", + "Align Right" => "Rechtsbündig", + "Alignment" => "Ausrichtung", + "All Borders" => "Alle Rahmenlinien", + "All Charts" => "Alle Diagramme", + "All done. We made {count} replacements." => "Fertig. Es wurden {count} Ersetzungen vorgenommen.", + "All except borders" => "Alles außer Rahmen", + "Allow" => "Zulassen", + "Allow all users of this sheet to:" => "Allen Benutzern dieses Blatts erlauben:", + "Alpha:" => "Alpha:", + "Analysis Tools" => "Analyse-Funktionen", + "Anova: Single Factor" => "Anova: Einfaktorielle Varianzanalyse", + "Any value" => "Beliebiger Wert", + "Apply" => "Anwenden", + "Area" => "Fläche", + "Arrow" => "Pfeil", + "At each change in (column letter):" => "Bei jeder Änderung in (Spaltenbuchstabe):", + "AutoSum (⌘⇧T)" => "AutoSumme (⌘⇧T)", + "Average" => "Mittelwert", + "Background Color:" => "Hintergrundfarbe:", + "Bad" => "Schlecht", + "Bar" => "Balken", + "Before sheet (position, 0 = first):" => "Vor Blatt (Position, 0 = erstes):", + "Between…" => "Zwischen…", + "Bin Range (blank for automatic bins):" => "Klassenbereich (leer für automatische Klassen):", + "Blanks" => "Leerzellen", + "Blue" => "Blau", + "Blue - White - Red" => "Blau - Weiß - Rot", + "Bold (⌘B)" => "Fett (⌘B)", + "Border" => "Rahmen", + "Bottom" => "Unten", + "Bottom Align" => "Unten ausrichten", + "Bottom Border" => "Rahmenlinie unten", + "Bottom Double Border" => "Doppelte Rahmenlinie unten", + "Box & Whisker" => "Kastengrafik", + "Bubble" => "Blase", + "By Changing Variable Cells:" => "Durch Ändern von Variablenzellen:", + "By changing cell:" => "Durch Ändern der Zelle:", + "Calculate Now (F9)" => "Neu berechnen (F9)", + "Calculate Sheet (⇧F9)" => "Blatt berechnen (⇧F9)", + "Calculated Field…" => "Berechnetes Feld…", + "Calculation" => "Berechnung", + "Calculation Options" => "Berechnungsoptionen", + "Category:" => "Kategorie:", + "Cell Color" => "Zellfarbe", + "Cell Styles" => "Zellenformatvorlagen", + "Cell Values" => "Zellwerte", + "Center Across Selection" => "Über Auswahl zentrieren", + "Change" => "Ändern", + "Change All" => "Alle ändern", + "Change Chart Type" => "Diagrammtyp ändern", + "Chart" => "Diagramm", + "Chart Title" => "Diagrammtitel", + "Chart data range:" => "Datenbereich des Diagramms:", + "Check Accessibility" => "Barrierefreiheit prüfen", + "Check Cell" => "Zelle überprüfen", + "Choose a PNG or JPEG no larger than 16 MB." => "Eine PNG- oder JPEG-Datei bis 16 MB auswählen.", + "Choose fields to add to report:" => "Felder für den Bericht auswählen:", + "Clear Filter" => "Filter löschen", + "Clear Rules" => "Regeln löschen", + "Clustered Bar" => "Gruppierte Balken", + "Clustered Column" => "Gruppierte Säulen", + "Color:" => "Farbe:", + "Column" => "Spalte", + "Column Width" => "Spaltenbreite", + "Column chart" => "Säulendiagramm", + "Column or Bar" => "Säule oder Balken", + "Column width (characters):" => "Spaltenbreite (Zeichen):", + "Column widths" => "Spaltenbreiten", + "Columns" => "Spalten", + "Columns (blank = all, e.g. A,C):" => "Spalten (leer = alle, z. B. A,C):", + "Combo" => "Kombi", + "Comma" => "Komma", + "Comma [0]" => "Komma [0]", + "Comment:" => "Kommentar:", + "Comments and notes (C)" => "Kommentare und Notizen (C)", + "Comments pane" => "Kommentarbereich", + "Compact" => "Kompakt", + "Compatibility" => "Kompatibilität", + "Conditional Formatting Rules Manager" => "Regel-Manager für bedingte Formatierungen", + "Conditional formats" => "Bedingte Formate", + "Confidence Level (%):" => "Konfidenzniveau (%):", + "Confidence Level for Mean (%), blank for none:" => "Konfidenzniveau für Mittelwert (%), leer für keines:", + "Confidence interval" => "Konfidenzintervall", + "Confidence level (%):" => "Konfidenzniveau (%):", + "Constant is Zero" => "Konstante ist null", + "Contributors" => "Mitwirkende", + "Convert Text to Columns" => "Text in Spalten umwandeln", + "Convert the last ink stroke to a shape" => "Den letzten Tintenstrich in eine Form umwandeln", + "Convert to Range" => "In Bereich umwandeln", + "Copies" => "Kopien", + "Copy (⌘C)" => "Kopieren (⌘C)", + "Correlation" => "Korrelation", + "Count" => "Anzahl", + "CountA" => "Anzahl2", + "Covariance" => "Kovarianz", + "Create Forecast Worksheet" => "Prognosearbeitsblatt erstellen", + "Create Sparklines" => "Sparklines erstellen", + "Create a copy" => "Kopie erstellen", + "Cube" => "Cube", + "Cumulative Percentage" => "Kumulierter Prozentsatz", + "Currency [0]" => "Währung [0]", + "Current region" => "Aktueller Bereich", + "Custom (%):" => "Benutzerdefiniert (%):", + "Custom Sort" => "Benutzerdefiniertes Sortieren", + "Cut (⌘X)" => "Ausschneiden (⌘X)", + "Damping factor:" => "Dämpfungsfaktor:", + "Data Range:" => "Datenbereich:", + "Data and Model" => "Daten und Modell", + "Data validation" => "Datenüberprüfung", + "Database" => "Datenbank", + "Date unit" => "Datumseinheit", + "Day" => "Tag", + "Decimal" => "Dezimal", + "Delete Comment" => "Kommentar löschen", + "Delete Sheet" => "Blatt löschen", + "Delete chart" => "Diagramm löschen", + "Delete rows" => "Zeilen löschen", + "Description (optional):" => "Beschreibung (optional):", + "Descriptive Statistics" => "Deskriptive Statistik", + "Destination:" => "Ziel:", + "Diagonal ↗" => "Diagonal ↗", + "Diagonal ↘" => "Diagonal ↘", + "Dismiss" => "Schließen", + "Display:" => "Anzeige:", + "Distributed" => "Verteilt", + "Divide" => "Dividieren", + "Do you want to save the changes you made to {title}?" => "Möchten Sie die Änderungen an {title} speichern?", + "Don't Save" => "Nicht speichern", + "Double" => "Doppelt", + "Double Accounting" => "Doppelt (Buchhaltung)", + "Doughnut" => "Ring", + "Down" => "Nach unten", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "Ziehen, um Zellen auszufüllen. Aus dem Zellinneren ziehen, um einen Bereich auszuwählen." + } + "Duplicate Values…" => "Doppelte Werte…", + "Edit Name" => "Namen bearbeiten", + "Edit chart title" => "Diagrammtitel bearbeiten", + "Edit…" => "Bearbeiten…", + "End date:" => "Enddatum:", + "Engineering" => "Technik", + "Entire column" => "Ganze Spalte", + "Entire row" => "Ganze Zeile", + "Equal To…" => "Gleich…", + "Erase ink strokes" => "Tintenstriche löschen", + "Error checking options" => "Optionen für die Fehlerüberprüfung", + "Error message:" => "Fehlermeldung:", + "Error style" => "Fehlerformat", + "Errors" => "Fehler", + "Every command run in this session (replayable)" => "Alle in dieser Sitzung ausgeführten Befehle (wiederholbar)", + "Expand formula bar" => "Bearbeitungsleiste erweitern", + "Explanatory Text" => "Erklärender Text", + "Exponential Smoothing" => "Exponentielle Glättung", + "Export as CSV…" => "Als CSV exportieren…", + "Export as PDF…" => "Als PDF exportieren…", + "Export as Web Page (.html)…" => "Als Webseite exportieren (.html)…", + "F-Test Two-Sample for Variances" => "F-Test: Zwei-Stichproben-Test für Varianzen", + "Fill missing points using" => "Fehlende Punkte ausfüllen mit", + "Filter (⌘⇧F)" => "Filtern (⌘⇧F)", + "Filters" => "Filter", + "Find" => "Suchen", + "Find & Select" => "Suchen und Auswählen", + "Find All" => "Alle suchen", + "Find Next" => "Weitersuchen", + "Find and Replace" => "Suchen und Ersetzen", + "Find what:" => "Suchen nach:", + "Finding printers…" => "Drucker werden gesucht…", + "Fits inside the selected cell and moves with its content." => "Passt in die ausgewählte Zelle und bewegt sich mit ihrem Inhalt.", + "Flash Fill (⌘E)" => "Blitzvorschau (⌘E)", + "Font" => "Schriftart", + "Footer:" => "Fußzeile:", + "Forecast Sheet" => "Prognoseblatt", + "Forecast end (date or number; blank: a third of the history):" => "Prognoseende (Datum oder Zahl; leer: ein Drittel des Verlaufs):", + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Prognosebeginn (Datum oder Zahl im Verlauf; leer: nach dem letzten Punkt):" + } + "Format Cells" => "Zellen formatieren", + "Format Cells|Fill" => "Ausfüllen", + "Format Chart pane" => "Bereich „Diagramm formatieren“", + "Format as Table" => "Als Tabelle formatieren", + "Format cells" => "Zellen formatieren", + "Format cells that are (value):" => "Zellen formatieren, die (Wert) sind:", + "Format cells that contain a date occurring:" => "Zellen formatieren, die ein Datum enthalten:", + "Format cells that contain the text:" => "Zellen formatieren, die folgenden Text enthalten:", + "Format columns" => "Spalten formatieren", + "Format rows" => "Zeilen formatieren", + "Format values where this formula is true:" => "Werte formatieren, für die diese Formel wahr ist:", + "Formats (T)" => "Formate (T)", + "Formula Builder" => "Formel-Generator", + "Formula:" => "Formel:", + "Formulas (F)" => "Formeln (F)", + "Formulas and number formats" => "Formeln und Zahlenformate", + "Funnel" => "Trichter", + "GRG Nonlinear" => "GRG nichtlinear", + "Go To" => "Gehe zu", + "Go To Special" => "Inhalte auswählen", + "Goal Seek" => "Zielwertsuche", + "Goal Seeking found a solution: {value}" => "Die Zielwertsuche hat eine Lösung gefunden: {value}", + "Good" => "Gut", + "Good, Bad and Neutral" => "Gut, Schlecht und Neutral", + "Gradebook" => "Notenbuch", + "Grayscale" => "Graustufen", + "Greater Than…" => "Größer als…", + "Green" => "Grün", + "Green - White - Red" => "Grün - Weiß - Rot", + "Green - Yellow - Red" => "Grün - Gelb - Rot", + "Green Fill with Dark Green Text" => "Grüne Füllung mit dunkelgrünem Text", + "Group by Months" => "Nach Monaten gruppieren", + "Group by Quarters" => "Nach Quartalen gruppieren", + "Group by Years" => "Nach Jahren gruppieren", + "Grouped By:" => "Gruppiert nach:", + "Growth" => "Wachstum", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "Kopfzeile (&L links, &C Mitte, &R rechts; &P Seite, &N Seitenzahl, &D Datum, &A Blatt):" + } + "Heading 1" => "Überschrift 1", + "Heading 2" => "Überschrift 2", + "Heading 3" => "Überschrift 3", + "Heading 4" => "Überschrift 4", + "Hex" => "Hexadezimal", + "Hidden" => "Ausgeblendet", + "Hidden: {sheets}" => "Ausgeblendet: {sheets}", + "Hide Sheet" => "Blatt ausblenden", + "Hierarchy & more" => "Hierarchie und mehr", + "Highlight Cells Rules" => "Regeln zum Hervorheben von Zellen", + "Highlighter" => "Textmarker", + "Histogram" => "Histogramm", + "Horizontal (Category) Axis Labels:" => "Beschriftungen der horizontalen Achse (Rubrik):", + "Horizontal axis title:" => "Titel der horizontalen Achse:", + "Household Budget" => "Haushaltsbudget", + "How agents drive GridCraft (MCP / control channel)" => "Wie Agenten GridCraft steuern (MCP / Steuerkanal)", + "Hypothesized Mean Difference:" => "Hypothetische Differenz der Mittelwerte:", + "Ignore Once" => "Einmal ignorieren", + "Ignore blank" => "Leerzellen ignorieren", + "Import a text or CSV file" => "Eine Text- oder CSV-Datei importieren", + "In the last 7 days" => "In den letzten 7 Tagen", + "In-cell dropdown" => "Dropdownliste in der Zelle", + "Include forecast statistics" => "Prognosestatistik einschließen", + "Indent" => "Einzug", + "Information" => "Information", + "Input" => "Eingabe", + "Input Range:" => "Eingabebereich:", + "Input X Range:" => "Eingabebereich X:", + "Input Y Range:" => "Eingabebereich Y:", + "Input message:" => "Eingabemeldung:", + "Insert\nSlicer" => "Datenschnitt\neinfügen", + "Insert Calculated Field" => "Berechnetes Feld einfügen", + "Insert Chart" => "Diagramm einfügen", + "Insert Function (⇧F3)" => "Funktion einfügen (⇧F3)", + "Insert Hyperlink" => "Link einfügen", + "Insert Link" => "Link einfügen", + "Insert Link (⌘K)" => "Link einfügen (⌘K)", + "Insert Slicer" => "Datenschnitt einfügen", + "Insert a picture" => "Ein Bild einfügen", + "Insert a slicer to filter a table" => "Einen Datenschnitt zum Filtern einer Tabelle einfügen", + "Insert an icon" => "Ein Symbol einfügen", + "Insert rows" => "Zeilen einfügen", + "Inside Borders" => "Innere Rahmenlinien", + "Interpolation" => "Interpolation", + "Interval:" => "Intervall:", + "Italic (⌘I)" => "Kursiv (⌘I)", + "Join the ArtCraft Discord" => "Dem ArtCraft-Discord beitreten", + "Justify" => "Blocksatz", + "Keep" => "Beibehalten", + "Keep Solver Solution" => "Solver-Lösung beibehalten", + "Kth Largest (blank for none):" => "k-größter Wert (leer für keinen):", + "Kth Smallest (blank for none):" => "k-kleinster Wert (leer für keinen):", + "Labels in first row" => "Beschriftungen in erster Zeile", + "Last cell" => "Letzte Zelle", + "Last month" => "Letzter Monat", + "Last week" => "Letzte Woche", + "Left Border" => "Rahmenlinie links", + "Legend Entries (Series)" => "Legendeneinträge (Reihen)", + "Less Than…" => "Kleiner als…", + "Light Blue" => "Hellblau", + "Light Red Fill" => "Hellrote Füllung", + "Light Red Fill with Dark Red Text" => "Hellrote Füllung mit dunkelrotem Text", + "Line" => "Linie", + "Line chart" => "Liniendiagramm", + "Line or Area" => "Linie oder Fläche", + "Line with Markers" => "Linie mit Datenpunkten", + "Linear" => "Linear", + "Link to (web address, e-mail or Sheet!A1):" => "Link zu (Webadresse, E-Mail oder Blatt!A1):", + "Linked Cell" => "Verknüpfte Zelle", + "List" => "Liste", + "Location Range:" => "Positionsbereich:", + "Locked" => "Gesperrt", + "Macros and scripts in this workbook (Alt+F8)" => "Makros und Skripte in dieser Arbeitsmappe (Alt+F8)", + "Make Unconstrained Variables Non-Negative" => "Nicht eingeschränkte Variablen nicht negativ machen", + "Manage Rules…" => "Regeln verwalten…", + "Markers" => "Datenpunkte", + "Match case" => "Groß-/Kleinschreibung beachten", + "Match entire cell contents" => "Gesamten Zellinhalt vergleichen", + "Max" => "Max", + "Maximum:" => "Maximum:", + "Median" => "Median", + "Middle Align" => "Vertikal zentrieren", + "Min" => "Min", + "Minimum / Source / Formula:" => "Minimum / Quelle / Formel:", + "Models" => "Modelle", + "Modify" => "Ändern", + "Month" => "Monat", + "More Borders…" => "Weitere Rahmenlinien…", + "More Colors…" => "Weitere Farben…", + "More Functions…" => "Weitere Funktionen…", + "More commands" => "Weitere Befehle", + "Move or Copy" => "Verschieben oder kopieren", + "Move or Copy Sheet…" => "Blatt verschieben oder kopieren…", + "Move to Column Labels" => "Zu Spaltenbeschriftungen verschieben", + "Move to Report Filter" => "Zu Berichtsfilter verschieben", + "Move to Row Labels" => "Zu Zeilenbeschriftungen verschieben", + "Move to Values" => "Zu Werten verschieben", + "Moving Average" => "Gleitender Durchschnitt", + "Multiply" => "Multiplizieren", + "My data has headers" => "Daten haben Überschriften", + "My list has headers" => "Liste hat Überschriften", + "Name" => "Name", + "Name Manager" => "Namens-Manager", + "Name:" => "Name:", + "Neutral" => "Neutral", + "New Name" => "Neuer Name", + "New Rule…" => "Neue Regel…", + "New Workbook" => "Neue Arbeitsmappe", + "New Worksheet Ply:" => "Neues Arbeitsblatt:", + "New title (Modify):" => "Neuer Titel (Ändern):", + "New…" => "Neu…", + "Next month" => "Nächster Monat", + "Next week" => "Nächste Woche", + "No Border" => "Kein Rahmen", + "No Fill" => "Keine Füllung", + "No names defined" => "Keine Namen definiert", + "No picture selected" => "Kein Bild ausgewählt", + "No printers found. Configure a system printer or export a PDF." => { + "Keine Drucker gefunden. Einen Systemdrucker einrichten oder ein PDF exportieren." + } + "No ranges yet." => "Noch keine Bereiche.", + "None" => "Keine", + "Normal Probability" => "Normalverteilung", + "Not in Dictionary ({cell}):" => "Nicht im Wörterbuch ({cell}):", + "Note" => "Notiz", + "Note:" => "Hinweis:", + "Number Format" => "Zahlenformat", + "Numbers" => "Zahlen", + "OK" => "OK", + "One-sided" => "Einseitig", + "Open…" => "Öffnen…", + "Operation" => "Operation", + "Options|Editing" => "Bearbeitung", + "Orange" => "Orange", + "Orientation (degrees)" => "Ausrichtung (Grad)", + "Other:" => "Andere:", + "Outline" => "Gliederung", + "Output" => "Ausgabe", + "Output Range:" => "Ausgabebereich:", + "Output options" => "Ausgabeoptionen", + "Outside Borders" => "Äußere Rahmenlinien", + "Oval" => "Oval", + "Page Break Preview" => "Umbruchvorschau", + "Page Breaks" => "Seitenumbrüche", + "Paper Size" => "Papierformat", + "Pareto (sorted histogram)" => "Pareto (sortiertes Histogramm)", + "Password" => "Kennwort", + "Password (optional):" => "Kennwort (optional):", + "Password:" => "Kennwort:", + "Paste (⌘V)" => "Einfügen (⌘V)", + "Paste Special" => "Inhalte einfügen", + "Paste formulas that refer to the copied cells" => "Formeln einfügen, die sich auf die kopierten Zellen beziehen", + "Pen\nBlack" => "Stift\nSchwarz", + "Pen\nBlue" => "Stift\nBlau", + "Pen\nRed" => "Stift\nRot", + "Percent" => "Prozent", + "Pick From List" => "Aus Liste auswählen", + "Picture file path (PNG or JPEG):" => "Pfad der Bilddatei (PNG oder JPEG):", + "Pie" => "Kreis", + "Pie or Doughnut" => "Kreis oder Ring", + "PivotTable Fields" => "PivotTable-Felder", + "Place Picture in Cell" => "Bild in Zelle platzieren", + "Place Picture over Cells" => "Bild über Zellen platzieren", + "Place in Cell" => "In Zelle platzieren", + "Place over Cells" => "Über Zellen platzieren", + "Print Area" => "Druckbereich", + "Print Titles" => "Drucktitel", + "Print failed: the printing worker stopped." => "Drucken fehlgeschlagen: Der Druckprozess wurde beendet.", + "Print failed: {error}" => "Drucken fehlgeschlagen: {error}", + "Print job submitted." => "Druckauftrag gesendet.", + "Print job submitted: {receipt}" => "Druckauftrag gesendet: {receipt}", + "Printer" => "Drucker", + "Printer default" => "Standard des Druckers", + "Printer discovery failed." => "Die Druckersuche ist fehlgeschlagen.", + "Print…" => "Drucken…", + "Product" => "Produkt", + "Protect\nSheet" => "Blatt\nschützen", + "Protect Sheet" => "Blatt schützen", + "Protect Structure and Windows" => "Struktur und Fenster schützen", + "Protect Workbook structure" => "Struktur der Arbeitsmappe schützen", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Arbeitsmappe schützen für: Struktur (Blätter können nicht hinzugefügt, verschoben, umbenannt, ausgeblendet oder gelöscht werden)." + } + "Protection" => "Schutz", + "Purple" => "Lila", + "Quarterly Sales Dashboard" => "Umsatz-Dashboard nach Quartalen", + "Radar" => "Netz", + "Range password:" => "Bereichskennwort:", + "Ranges that stay editable when the sheet is protected:" => "Bereiche, die bei geschütztem Blatt bearbeitbar bleiben:", + "Rank and Percentile" => "Rang und Quantil", + "Recent Colors" => "Zuletzt verwendete Farben", + "Recommended Charts" => "Empfohlene Diagramme", + "Rectangle" => "Rechteck", + "Red" => "Rot", + "Red - Yellow - Green" => "Rot - Gelb - Grün", + "Red Border" => "Roter Rahmen", + "Red Text" => "Roter Text", + "Redo" => "Wiederholen", + "Redo (⌘Y)" => "Wiederholen (⌘Y)", + "Reference:" => "Bezug:", + "Refers To" => "Bezieht sich auf", + "Refers to cells:" => "Bezieht sich auf Zellen:", + "Refers to:" => "Bezieht sich auf:", + "Refresh" => "Aktualisieren", + "Refresh printers" => "Drucker aktualisieren", + "Regression" => "Regression", + "Remove" => "Entfernen", + "Remove Duplicates" => "Duplikate entfernen", + "Remove Field" => "Feld entfernen", + "Remove the password (Modify)" => "Das Kennwort entfernen (Ändern)", + "Rename Sheet" => "Blatt umbenennen", + "Replace" => "Ersetzen", + "Replace All" => "Alle ersetzen", + "Replace with:" => "Ersetzen durch:", + "Report Layout" => "Berichtslayout", + "Residuals" => "Residuen", + "Restore Original Values" => "Ursprüngliche Werte wiederherstellen", + "Right Border" => "Rahmenlinie rechts", + "Rounded Rectangle" => "Abgerundetes Rechteck", + "Row Height" => "Zeilenhöhe", + "Row height (pixels):" => "Zeilenhöhe (Pixel):", + "Rows" => "Zeilen", + "Sample" => "Beispiel", + "Save (⌘S)" => "Speichern (⌘S)", + "Save As…" => "Speichern unter…", + "Save Changes?" => "Änderungen speichern?", + "Save a Copy" => "Kopie speichern", + "Save a Copy as Excel Workbook (.xlsx)…" => "Kopie als Excel-Arbeitsmappe speichern (.xlsx)…", + "Save a copy as .{format}" => "Kopie als .{format} speichern", + "Scatter" => "Punkt (XY)", + "Scatter or Bubble" => "Punkt (XY) oder Blase", + "Scatter with Lines" => "Punkt (XY) mit Linien", + "Scope" => "Gültigkeitsbereich", + "Scope (Workbook or sheet name):" => "Gültigkeitsbereich (Arbeitsmappe oder Blattname):", + "ScreenTip:" => "QuickInfo:", + "Search" => "Suchen", + "Search Commands" => "Befehle suchen", + "Search and run any command" => "Beliebigen Befehl suchen und ausführen", + "Search commands" => "Befehle suchen", + "Search commands (⌘⇧Space)" => "Befehle suchen (⌘⇧Leertaste)", + "Seasonality (auto, 0 for none, or a season length):" => "Saisonalität (automatisch, 0 für keine oder eine Saisonlänge):", + "Select" => "Auswählen", + "Select Data" => "Daten auswählen", + "Select Data Source" => "Datenquelle auswählen", + "Select a Solving Method:" => "Lösungsmethode auswählen:", + "Select a chart first." => "Zuerst ein Diagramm auswählen.", + "Select a printer" => "Einen Drucker auswählen", + "Select and move ink and shapes" => "Tinte und Formen auswählen und verschieben", + "Semicolon" => "Semikolon", + "Series" => "Reihe", + "Series in" => "Reihen in", + "Series{n}" => "Reihe{n}", + "Series…" => "Reihe…", + "Set Objective:" => "Zielzelle festlegen:", + "Set cell:" => "Zielzelle:", + "Share: export or save a copy" => "Teilen: Kopie exportieren oder speichern", + "Sheets: {sheets}" => "Blätter: {sheets}", + "Shift cells down" => "Zellen nach unten verschieben", + "Shift cells left" => "Zellen nach links verschieben", + "Shift cells right" => "Zellen nach rechts verschieben", + "Shift cells up" => "Zellen nach oben verschieben", + "Show Formulas (⌃`)" => "Formeln anzeigen (⌃`)", + "Show as % of Grand Total" => "Als % des Gesamtergebnisses anzeigen", + "Show as No Calculation" => "Ohne Berechnung anzeigen", + "Show as Rank" => "Als Rang anzeigen", + "Show as Running Total" => "Als laufende Summe anzeigen", + "Show password" => "Kennwort anzeigen", + "Shrink to fit" => "Verkleinern, bis Text passt", + "Single" => "Einfach", + "Single Accounting" => "Einfach (Buchhaltung)", + "Skip blanks" => "Leerzellen überspringen", + "Slicer" => "Datenschnitt", + "Solve" => "Lösen", + "Solver Parameters" => "Solver-Parameter", + "Solver Results" => "Solver-Ergebnisse", + "Sort & Filter" => "Sortieren und Filtern", + "Sort Ascending" => "Aufsteigend sortieren", + "Sort Descending" => "Absteigend sortieren", + "Sort by" => "Sortieren nach", + "Source:" => "Quelle:", + "Space" => "Leerzeichen", + "Special…" => "Inhalte…", + "Spelling (F7)" => "Rechtschreibung (F7)", + "Stacked Area" => "Gestapelte Fläche", + "Stacked Bar" => "Gestapelte Balken", + "Stacked Column" => "Gestapelte Säulen", + "Stacked Line" => "Gestapelte Linie", + "Standard Colors" => "Standardfarben", + "Standard Errors" => "Standardfehler", + "Standard Width" => "Standardbreite", + "Standard column width (pixels):" => "Standardspaltenbreite (Pixel):", + "Standardized Residuals" => "Standardisierte Residuen", + "Start a conversation:" => "Unterhaltung beginnen:", + "Start a new workbook" => "Eine neue Arbeitsmappe beginnen", + "Statistic" => "Statistik", + "Statistical" => "Statistik", + "Step value:" => "Schrittwert:", + "Stock" => "Börse", + "Stop value:" => "Endwert:", + "Subject to the Constraints:" => "Unter Berücksichtigung der Nebenbedingungen:", + "Submitting print job…" => "Druckauftrag wird gesendet…", + "Subscript" => "Tiefgestellt", + "Subtract" => "Subtrahieren", + "Suggestions:" => "Vorschläge:", + "Sum" => "Summe", + "Summarize by Average" => "Mit Mittelwert zusammenfassen", + "Summarize by Count" => "Mit Anzahl zusammenfassen", + "Summarize by Max" => "Mit Maximum zusammenfassen", + "Summarize by Min" => "Mit Minimum zusammenfassen", + "Summarize by Sum" => "Mit Summe zusammenfassen", + "Summary statistics" => "Zusammenfassende Statistik", + "Sunburst" => "Sunburst", + "Superscript" => "Hochgestellt", + "Switch Row/Column" => "Zeile/Spalte wechseln", + "Tab" => "Tabulator", + "Table (⌘T)" => "Tabelle (⌘T)", + "Table Styles" => "Tabellenformatvorlagen", + "Tabular" => "Tabellarisch", + "Tab|Insert" => "Einfügen", + "Text length" => "Textlänge", + "Text that Contains…" => "Text, der enthält…", + "Text to Columns" => "Text in Spalten", + "The output range already holds data. Replace it with the report?" => "Der Ausgabebereich enthält bereits Daten. Durch den Bericht ersetzen?", + "The spelling check is complete for the entire sheet." => "Die Rechtschreibprüfung für das gesamte Blatt ist abgeschlossen.", + "Theme Colors" => "Designfarben", + "Themed Cell Styles" => "Zellenformatvorlagen mit Design", + "Then by" => "Dann nach", + "There are no conditional formatting rules on this sheet." => "Auf diesem Blatt gibt es keine Regeln für bedingte Formatierung.", + "Thick Bottom Border" => "Dicke Rahmenlinie unten", + "Thick Outside Borders" => "Dicke äußere Rahmenlinien", + "This month" => "Dieser Monat", + "This week" => "Diese Woche", + "This workbook" => "Diese Arbeitsmappe", + "Timeline range (blank: first column of the selection):" => "Zeitachsenbereich (leer: erste Spalte der Auswahl):", + "Title:" => "Titel:", + "Titles and Headings" => "Titel und Überschriften", + "To value:" => "Zum Wert:", + "To:" => "Bis:", + "Today" => "Heute", + "Tomorrow" => "Morgen", + "Top" => "Oben", + "Top Align" => "Oben ausrichten", + "Top Border" => "Rahmenlinie oben", + "Top and Bottom Border" => "Rahmenlinien oben und unten", + "Top and Double Bottom Border" => "Rahmenlinie oben und doppelte Rahmenlinie unten", + "Top and Thick Bottom Border" => "Rahmenlinie oben und dicke Rahmenlinie unten", + "Top/Bottom Rules" => "Regeln für oberste/unterste Werte", + "Total" => "Gesamt", + "Transpose (E)" => "Transponieren (E)", + "Treat consecutive delimiters as one" => "Aufeinanderfolgende Trennzeichen als ein Zeichen behandeln", + "Treemap" => "Treemap", + "Triangle" => "Dreieck", + "Two-sided printing" => "Beidseitiger Druck", + "Two-sided: long edge" => "Beidseitig: lange Kante", + "Two-sided: short edge" => "Beidseitig: kurze Kante", + "Type" => "Typ", + "Type (custom format code):" => "Typ (benutzerdefinierter Formatcode):", + "Type a command, e.g. freeze, chart, bold…" => "Befehl eingeben, z. B. fixieren, Diagramm, fett…", + "Underline (⌘U)" => "Unterstrichen (⌘U)", + "Undo" => "Rückgängig", + "Undo (⌘Z)" => "Rückgängig (⌘Z)", + "Undo list" => "Liste der Aktionen", + "Unhide Sheet…" => "Blatt einblenden…", + "Unhide sheet:" => "Blatt einblenden:", + "Unlock with password" => "Mit Kennwort entsperren", + "Unprotect Sheet" => "Blattschutz aufheben", + "Unprotect Workbook" => "Arbeitsmappenschutz aufheben", + "Up" => "Nach oben", + "Use AutoFilter" => "AutoFilter verwenden", + "Use a field's menu to move it between areas:" => "Über das Menü eines Felds lässt es sich zwischen Bereichen verschieben:", + "Use function" => "Funktion verwenden", + "Validation" => "Überprüfung", + "Value" => "Wert", + "Value Of:" => "Wert:", + "Values" => "Werte", + "Values (V)" => "Werte (V)", + "Values and number formats" => "Werte und Zahlenformate", + "Values range (blank: second column of the selection):" => "Wertebereich (leer: zweite Spalte der Auswahl):", + "Variable 1 Range:" => "Variablenbereich 1:", + "Variable 2 Range:" => "Variablenbereich 2:", + "Version {version}" => "Version {version}", + "Vertical" => "Vertikal", + "Vertical axis title:" => "Titel der vertikalen Achse:", + "Visible cells only" => "Nur sichtbare Zellen", + "Warning" => "Warnung", + "Warning Text" => "Warnender Text", + "Watch\nWindow" => "Überwachungs-\nfenster", + "Waterfall" => "Wasserfall", + "Web" => "Web", + "Weekday" => "Wochentag", + "What-If Analysis" => "Was-wäre-wenn-Analyse", + "White - Green" => "Weiß - Grün", + "White - Red" => "Weiß - Rot", + "Whole number" => "Ganze Zahl", + "Win/Loss" => "Gewinn/Verlust", + "Within workbook" => "In Arbeitsmappe", + "Workbook" => "Arbeitsmappe", + "Workbook\nStatistics" => "Arbeitsmappen-\nstatistik", + "Workbook Statistics" => "Arbeitsmappenstatistik", + "Wrap text" => "Zeilenumbruch", + "Year" => "Jahr", + "Yellow Fill with Dark Yellow Text" => "Gelbe Füllung mit dunkelgelbem Text", + "Z to A" => "Z bis A", + "Zeros" => "Nullen", + "Zoom In" => "Vergrößern", + "Zoom Out" => "Verkleinern", + "Zoom to 100%" => "Zoom auf 100 %", + "Zoom to Selection" => "Zoom auf Auswahl", + "Zoom…" => "Zoom…", + "and:" => "und:", + "applies to" => "gilt für", + "between" => "zwischen", + "dashed" => "gestrichelt", + "dotted" => "gepunktet", + "double" => "doppelt", + "equal to" => "gleich", + "greater than" => "größer als", + "greater than or equal to" => "größer oder gleich", + "less than" => "kleiner als", + "less than or equal to" => "kleiner oder gleich", + "medium" => "mittel", + "none" => "keine", + "not between" => "nicht zwischen", + "not equal to" => "ungleich", + "t-Test: Paired Two Sample for Means" => "t-Test: Gepaarter Zweistichproben-t-Test für Mittelwerte", + "t-Test: Two-Sample Assuming Equal Variances" => "t-Test: Zwei Stichproben unter der Annahme gleicher Varianzen", + "t-Test: Two-Sample Assuming Unequal Variances" => "t-Test: Zwei Stichproben unter der Annahme unterschiedlicher Varianzen", + "thick" => "dick", + "thin" => "dünn", + "this workbook" => "diese Arbeitsmappe", + "with" => "mit", + "{count} cell(s) found" => "{count} Zelle(n) gefunden", + "£ English (United Kingdom)" => "£ Englisch (Vereinigtes Königreich)", + "¥ Japanese" => "¥ Japanisch", + "— 1 step" => "— 1 Schritt", + "— VBA project (preserved, not run)" => "— VBA-Projekt (erhalten, nicht ausgeführt)", + "— {steps} steps" => "— {steps} Schritte", + "€ Euro" => "€ Euro", + "Split tabs" => "Blattregister teilen", + "Click to copy" => "Zum Kopieren klicken", + "GridCraft {version} is up to date." => "GridCraft {version} ist auf dem neuesten Stand.", + "Could not check for updates: {error}" => "Die Suche nach Updates ist fehlgeschlagen: {error}", + "Constraint Operator" => "Operator der Nebenbedingung", + "Sort On" => "Sortieren nach", + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet)." => { + "Das Sperren von Zellen oder das Ausblenden von Formeln wirkt erst, wenn das Blatt geschützt wird (Überprüfen › Blatt schützen)." + } + "Paste name" => "Namen einfügen", + "Paste List" => "Liste einfügen", + "Auto Fill Options" => "Auto-Ausfülloptionen", + "Add a step after the selected one" => "Einen Schritt nach dem ausgewählten hinzufügen", + "Add Step" => "Schritt hinzufügen", + "Advanced" => "Erweitert", + "Advanced Filter" => "Spezialfilter", + "Arrange" => "Anordnen", + "Arrange All" => "Alle anordnen", + "Arrange\nAll" => "Alle\nanordnen", + "Arrange Windows" => "Fenster anordnen", + "Cascade" => "Überlappend", + "Check" => "Prüfen", + "Check for\nUpdates…" => "Nach Updates\nsuchen…", + "Check the inputs and show on the grid what the macro would change" => "Eingaben prüfen und im Raster anzeigen, was das Makro ändern würde", + "Close the macro step editor first: it keeps its window until it closes itself, so its steps and debug run are not lost." => { + "Zuerst den Makro-Schritt-Editor schließen: Er behält sein Fenster, bis er sich selbst schließt, damit seine Schritte und der Debug-Lauf nicht verloren gehen." + } + "Continue" => "Fortsetzen", + "Copy matching rows elsewhere" => "Passende Zeilen an eine andere Stelle kopieren", + "Criteria range (optional):" => "Kriterienbereich (optional):", + "Delete the selected step" => "Den ausgewählten Schritt löschen", + "Duplicate the selected step" => "Den ausgewählten Schritt duplizieren", + "List range:" => "Listenbereich:", + "Look for a newer GridCraft release" => "Nach einer neueren GridCraft-Version suchen", + "Macro" => "Makro", + "New\nWindow" => "Neues\nFenster", + "New Window" => "Neues Fenster", + "Outline Settings" => "Gliederungseinstellungen", + "Record steps relative to the cells selected when recording starts, so the macro works on other data" => { + "Schritte relativ zu den beim Aufzeichnungsbeginn ausgewählten Zellen aufzeichnen, damit das Makro auch mit anderen Daten funktioniert" + } + "Record your actions as a macro" => "Eigene Aktionen als Makro aufzeichnen", + "Run" => "Ausführen", + "Run a macro on the selection" => "Ein Makro auf die Auswahl anwenden", + "Run the macro as one undo step" => "Das Makro als einen einzigen Rückgängig-Schritt ausführen", + "Run to Here" => "Bis hierher ausführen", + "Run to the next breakpoint or the end" => "Bis zum nächsten Haltepunkt oder bis zum Ende ausführen", + "Run until the selected step" => "Bis zum ausgewählten Schritt ausführen", + "Scroll ribbon right" => "Menüband nach rechts scrollen", + "Settings" => "Einstellungen", + "Show matching rows in place" => "Passende Zeilen an Ort und Stelle anzeigen", + "Start debugging: stop before the first step" => "Debuggen starten: vor dem ersten Schritt anhalten", + "Step" => "Schritt", + "Stop debugging" => "Debuggen beenden", + "Switch\nWindows" => "Fenster\nwechseln", + "Switch Windows" => "Fenster wechseln", + "Tiled" => "Nebeneinander", + "Unique rows only" => "Nur eindeutige Zeilen", + "Windows of active workbook" => "Fenster der aktiven Arbeitsmappe", + "Write a macro step by step" => "Ein Makro Schritt für Schritt schreiben", + "More Table Styles" => "Weitere Tabellenformatvorlagen", + "Resize\nTable" => "Tabellengröße\nändern", + "Resize Table" => "Tabellengröße ändern", + "Scroll ribbon left" => "Menüband nach links scrollen", "Diagram" => "Schema", "Decorative Text" => "Dekorativer Text", "Paste" => "Einfügen", @@ -352,6 +1191,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Print Entire Workbook" => "Gesamte Arbeitsmappe drucken", "Fit Sheet on One Page" => "Blatt auf einer Seite darstellen", "Page Setup…" => "Seite einrichten…", + "Page {page}" => "Seite {page}", "Page {page} of {pages}" => "Seite {page} von {pages}", "Nothing to print." => "Nichts zu drucken.", "Previous page" => "Vorherige Seite", @@ -515,6 +1355,31 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "Beenden", "New Macro" => "Neues Makro", "Show" => "Anzeigen", + "Generated|Column" => "Spalte", + "Generated|Row" => "Zeile", + "Book" => "Mappe", + "Sheet" => "Tabelle", + "Count Numbers" => "Anzahl Zahlen", + "Type to filter…" => "Zum Filtern eingeben…", + "Nothing to paste." => "Keine Daten zum Einfügen.", + "No cells were found." => "Es wurden keine Zellen gefunden.", + "Or select a category:" => "Oder Kategorie auswählen:", + "Most Recently Used" => "Zuletzt verwendet", + "Insert Function…" => "Funktion einfügen…", + "Paste Names…" => "Namen einfügen…", + "Macro name:" => "Makroname:", + "Shortcut key:" => "Tastenkombination:", + "Description:" => "Beschreibung:", + "This workbook has no scripts or macros." => "Diese Arbeitsmappe enthält keine Skripte oder Makros.", + "Check for Updates…" => "Nach Updates suchen…", + "Checking for updates…" => "Suche nach Updates…", + "Could not check for updates." => "Updates konnten nicht geprüft werden.", + "Check Again" => "Erneut prüfen", + "Insert Function" => "Funktion einfügen", + "Search:" => "Suchen:", + "e.g. lookup, average, date" => "z. B. suchen, Mittelwert, Datum", + "Cancel" => "Abbrechen", + "All" => "Alle", "Collapse dialog" => "Dialogfeld reduzieren", "Expand dialog" => "Dialogfeld erweitern", _ => return None, diff --git a/crates/ui-egui/src/i18n/de_functions.rs b/crates/ui-egui/src/i18n/de_functions.rs new file mode 100644 index 0000000000..4354d7ac75 --- /dev/null +++ b/crates/ui-egui/src/i18n/de_functions.rs @@ -0,0 +1,1038 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 für positiv, -1 für negativ und 0 für Null."), + ("A random integer between two bounds, inclusive.", "Eine zufällige Ganzzahl zwischen zwei Grenzen (einschließlich)."), + ("A random number between 0 and 1, recalculated every time.", "Eine Zufallszahl zwischen 0 und 1, die jedes Mal neu berechnet wird."), + ("A range or array without its blank outer rows and columns.", "Ein Bereich oder Array ohne leere äußere Zeilen und Spalten."), + ("A reference shifted from a starting point.", "Eine Referenz wurde von einem Startpunkt verschoben."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Statistik des FORECAST.ETS-Modells: 1 Alpha, 2 Beta, 3 Gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 Schrittweite.", + ), + ("A subtotal that can skip hidden rows.", "Eine Zwischensumme, die ausgeblendete Zeilen überspringen kann."), + ("Absolute value (modulus) of a complex number.", "Absolutwert (Modul) einer komplexen Zahl."), + ("Absolute value of a number.", "Absoluter Wert einer Zahl."), + ("Accrued interest of a security paying interest at maturity.", "Aufgelaufene Zinsen einer Anleihe, die bei Fälligkeit Zinsen zahlt."), + ("Accrued interest of a security paying periodic interest.", "Aufgelaufene Zinsen einer Anleihe mit regelmäßigen Zinsen."), + ("Accumulates an array into one value.", "Akkumuliert ein Array zu einem Wert."), + ("Adds all the numbers in the arguments.", "Addiert alle Zahlen in den Argumenten."), + ("Adds the cells that meet a condition.", "Gibt die Summe numerischer Werte in Tabellenzellen zurück, die eine Bedingung erfüllen."), + ("Adds the cells that meet every condition.", "Gibt die Summe numerischer Werte in Tabellenzellen zurück, die alle Bedingungen erfüllen."), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Gibt die Summe numerischer Werte in einem Datenbankfeld für Datensätze zurück, die die Kriterien erfüllen.", + ), + ("Adds the squares of the numbers.", "Gibt die Summe der quadrierten Zahlen zurück."), + ("Amount received at maturity for a fully invested security.", "Bei Fälligkeit erhaltener Betrag für eine vollständig bezahlte Anleihe."), + ("An aggregate that can skip hidden rows and errors.", "Ein Aggregat, das versteckte Zeilen und Fehler überspringen kann."), + ("Angle of a complex number in radians.", "Winkel einer komplexen Zahl im Bogenmaß."), + ("Angle of the point (x, y) from the x-axis in radians.", "Winkel des Punktes (x, y) von der x-Achse im Bogenmaß."), + ("Annual yield of a discounted security.", "Jährliche Rendite einer Discount-Anleihe."), + ("Annual yield of a security paying interest at maturity.", "Jährliche Rendite einer Anleihe, die bei Fälligkeit Zinsen zahlt."), + ("Applies a LAMBDA to each column.", "Wendet ein LAMBDA auf jede Spalte an."), + ("Applies a LAMBDA to each row.", "Wendet ein LAMBDA auf jede Zeile an."), + ("Applies a LAMBDA to each value.", "Wendet ein LAMBDA auf jeden Wert an."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Ungefähre Suche in einem sortierten Vektor oder der ersten Zeile/Spalte eines Arrays.", + ), + ("Arccosine in radians.", "Arkuskosinus im Bogenmaß."), + ("Arccotangent in radians (0 to pi).", "Arckotangens im Bogenmaß (0 bis pi)."), + ("Arcsine in radians.", "Arkussinus im Bogenmaß."), + ("Arctangent in radians.", "Arcustangens im Bogenmaß."), + ("Arithmetic mean of the numbers.", "Arithmetisches Mittel der Zahlen."), + ("Average absolute deviation from the mean.", "Durchschnittliche absolute Abweichung vom Mittelwert."), + ("Average of the cells that meet a condition.", "Durchschnitt der Tabellenzellen, die eine Bedingung erfüllen."), + ("Average of the cells that meet every condition.", "Durchschnitt der Tabellenzellen, die jede Bedingung erfüllen."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Ermittelt den Durchschnitt der Zahlen in einem Feld der Datensätze, die die Kriterien erfüllen.", + ), + ("Base-10 logarithm of a complex number.", "Logarithmus zur Basis 10 einer komplexen Zahl."), + ("Base-10 logarithm.", "Logarithmus zur Basis 10."), + ("Base-2 logarithm of a complex number.", "Logarithmus zur Basis 2 einer komplexen Zahl."), + ("Bessel function of the first kind, J_n(x).", "Bessel-Funktion erster Art, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Bessel-Funktion zweiter Art, Y_n(x)."), + ("Beta distribution density or probability.", "Beta-Verteilungsdichte oder -Wahrscheinlichkeit."), + ("Binomial probability.", "Binomialwahrscheinlichkeit."), + ("Bitwise AND of two non-negative integers.", "Bitweises AND von zwei nicht negativen Ganzzahlen."), + ("Bitwise OR of two non-negative integers.", "Bitweises OR von zwei nicht negativen Ganzzahlen."), + ("Bitwise exclusive OR of two non-negative integers.", "Bitweises exklusives OR von zwei nicht negativen Ganzzahlen."), + ("Bond-equivalent yield of a Treasury bill.", "Anleiheäquivalente Rendite eines Schatzwechsels."), + ("Breaks a row or column into columns of the given length.", "Unterteilt eine Zeile oder Spalte in Spalten der angegebenen Länge."), + ("Breaks a row or column into rows of the given length.", "Unterteilt eine Zeile oder Spalte in Zeilen der angegebenen Länge."), + ("Builds a cell address as text from row and column numbers.", "Erstellt eine Zellenadresse als Text aus Zeilen- und Spaltennummern."), + ("Builds a complex number as text from real and imaginary parts.", "Erstellt eine komplexe Zahl als Text aus Real- und Imaginärteilen."), + ("Builds a date serial number from a year, month and day.", "Erstellt eine Datumsseriennummer aus Jahr, Monat und Tag."), + ( + "Builds a summary table grouping values by row and column fields.", + "Erstellt eine Übersichtstabelle, in der Werte nach Zeilen- und Spaltenfeldern gruppiert werden.", + ), + ( + "Builds a time (a fraction of a day) from hours, minutes and seconds.", + "Erstellt eine Zeit (einen Bruchteil eines Tages) aus Stunden, Minuten und Sekunden.", + ), + ("Builds an array from a LAMBDA.", "Erstellt ein Array aus einem LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Erstellt ein Array aus gleichmäßig abgestuften Zahlen."), + ("Builds an array of random numbers in a range.", "Erstellt ein Array von Zufallszahlen in einem Bereich."), + ("Byte version of FIND.", "Byte-Version von FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Byte-Version von LEFT (identisch mit LEFT für Einzelbyte-Text)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Byte-Version von LEN (identisch mit LEN für Einzelbyte-Text)."), + ("Byte version of MID (same as MID for single-byte text).", "Byte-Version von MID (identisch mit MID für Einzelbyte-Text)."), + ("Byte version of REPLACE.", "Byte-Version von REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Byte-Version von RIGHT (identisch mit RIGHT für Einzelbyte-Text)."), + ("Byte version of SEARCH.", "Byte-Version von SEARCH."), + ("Capitalises the first letter of each word and lower-cases the rest.", "Schreibt den ersten Buchstaben jedes Wortes groß und den Rest klein."), + ("Chi-squared density or left-tailed probability.", "Chi-Quadrat-Dichte oder linksseitige Wahrscheinlichkeit."), + ("Chi-squared test of independence.", "Chi-Quadrat-Test der Unabhängigkeit."), + ("Column number of a reference.", "Spaltennummer eines Bezugs."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Vergleicht einen Ausdruck mit einer Werteliste und gibt das Ergebnis gepaart mit der ersten Übereinstimmung zurück.", + ), + ("Complementary error function, 1 - ERF(x).", "Komplementäre Fehlerfunktion, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Komplexes Konjugat einer komplexen Zahl."), + ( + "Confidence interval half-width using Student's t distribution.", + "Halbe Breite des Konfidenzintervalls unter Verwendung der Student-t-Verteilung.", + ), + ("Confidence interval half-width using the normal distribution.", "Halbe Breite des Konfidenzintervalls unter Verwendung der Normalverteilung."), + ("Converts Roman numerals to a number.", "Wandelt römische Ziffern in eine Zahl um."), + ("Converts a binary number to decimal.", "Wandelt eine Binärzahl in eine Dezimalzahl um."), + ("Converts a binary number to hexadecimal.", "Wandelt eine Binärzahl in eine Hexadezimalzahl um."), + ("Converts a binary number to octal.", "Wandelt eine Binärzahl in eine Oktalzahl um."), + ("Converts a date written as text into a date serial number.", "Wandelt ein als Text geschriebenes Datum in eine Datumsseriennummer um."), + ("Converts a decimal number to binary.", "Wandelt eine Dezimalzahl in eine Binärzahl um."), + ("Converts a decimal number to hexadecimal.", "Wandelt eine Dezimalzahl in eine Hexadezimalzahl um."), + ("Converts a decimal number to octal.", "Wandelt eine Dezimalzahl in eine Oktalzahl um."), + ("Converts a decimal price to fractional notation.", "Wandelt einen Dezimalpreis in eine Bruchschreibweise um."), + ("Converts a fractional price notation to a decimal number.", "Wandelt eine gebrochene Preisnotation in eine Dezimalzahl um."), + ("Converts a hexadecimal number to binary.", "Wandelt eine Hexadezimalzahl in eine Binärzahl um."), + ("Converts a hexadecimal number to decimal.", "Wandelt eine Hexadezimalzahl in eine Dezimalzahl um."), + ("Converts a hexadecimal number to octal.", "Wandelt eine Hexadezimalzahl in eine Oktalzahl um."), + ("Converts a measurement from one unit to another.", "Rechnet einen Messwert von einer Einheit in eine andere um."), + ("Converts a number to Roman numerals in one of five styles.", "Wandelt eine Zahl in einem von fünf Stilen in römische Ziffern um."), + ("Converts a time written as text into a fraction of a day.", "Wandelt eine als Text geschriebene Zeit in einen Bruchteil eines Tages um."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Wandelt einen Wert in eine Zahl um: Zahlen bleiben, WAHR ist 1, alles andere ist 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Konvertiert ein Array in Text, entweder als Kommaliste oder als strikte Array-Konstante.", + ), + ("Converts an octal number to binary.", "Wandelt eine Oktalzahl in eine Binärzahl um."), + ("Converts an octal number to decimal.", "Konvertiert eine Oktalzahl in eine Dezimalzahl."), + ("Converts an octal number to hexadecimal.", "Wandelt eine Oktalzahl in eine Hexadezimalzahl um."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Konvertiert jeden Wert in Text, optional in strenger Form (in Anführungszeichen).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Konvertiert zwischen dem Euro und den früheren Währungen der Euro-Mitgliedstaaten zu festen Kursen.", + ), + ("Converts degrees to radians.", "Wandelt Grad in Bogenmaß um."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Konvertiert Zeichen voller Breite in Zeichen halber Breite (keine Änderung für Einzelbyte-Text).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Wandelt Zeichen halber Breite in Zeichen voller Breite um (keine Änderung in diesem Gebietsschema).", + ), + ("Converts radians to degrees.", "Konvertiert Bogenmaß in Grad."), + ( + "Converts text that looks like a number, date or time into a number.", + "Konvertiert Text, der wie eine Zahl, ein Datum oder eine Uhrzeit aussieht, in eine Zahl.", + ), + ( + "Converts text to a number using the given decimal and group separators.", + "Konvertiert Text mithilfe der angegebenen Dezimal- und Gruppentrennzeichen in eine Zahl.", + ), + ("Converts text to lower case.", "Wandelt Text in Kleinbuchstaben um."), + ("Converts text to upper case.", "Wandelt Text in Großbuchstaben um."), + ("Correlation coefficient of two data sets.", "Korrelationskoeffizient zweier Datensätze."), + ("Cosecant of a complex number.", "Kosekans einer komplexen Zahl."), + ("Cosecant of an angle in radians.", "Kosekans eines Winkels im Bogenmaß."), + ("Cosine of a complex number.", "Kosinus einer komplexen Zahl."), + ("Cosine of an angle in radians.", "Kosinus eines Winkels im Bogenmaß."), + ("Cotangent of a complex number.", "Kotangens einer komplexen Zahl."), + ("Cotangent of an angle in radians.", "Kotangens eines Winkels im Bogenmaß."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Zählt die Tage zwischen zwei Daten in einem 360-Tage-Jahr (US oder europäische Methode).", + ), + ("Counts empty cells and empty text in a range.", "Zählt leere Tabellenzellen und leeren Text in einem Bereich."), + ("Counts how many values fall into each bin, as a vertical array.", "Zählt als vertikales Array, wie viele Werte in jedes Bin fallen."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Zählt nicht leere Tabellenzellen in einem Feld der übereinstimmenden Datensätze (oder der übereinstimmenden Datensätze).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Zählt numerische Tabellenzellen in einem Feld der übereinstimmenden Datensätze (oder der übereinstimmenden Datensätze).", + ), + ("Counts the cells that meet a condition.", "Zählt die Tabellenzellen, die eine Bedingung erfüllen."), + ("Counts the cells that meet every condition.", "Zählt die Tabellenzellen, die jede Bedingung erfüllen."), + ("Counts the characters in a text.", "Zählt die Zeichen in einem Text."), + ("Counts the columns in an array or range.", "Zählt die Spalten in einem Array oder Bereich."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Zählt die Elemente in einem Cube-Set (keine Cube-Verbindungen; #NV)."), + ("Counts the non-empty values.", "Zählt die nicht leeren Werte."), + ("Counts the numbers.", "Zählt die Zahlen."), + ("Counts the rows in an array or range.", "Zählt die Zeilen in einem Array oder Bereich."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Zählt ganze Jahre, Monate oder Tage zwischen zwei Daten. Einheit: Y, M, D, MD, YM oder YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Zählt die Arbeitstage (Montag bis Freitag) zwischen zwei Daten, ausgenommen Feiertage.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Zählt Arbeitstage zwischen zwei Daten mit einem benutzerdefinierten Wochenende, ausgenommen Feiertage.", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "Erstellt einen Link; In der Zelle wird der Anzeigename oder der Link selbst angezeigt.", + ), + ("Creates a reusable custom function.", "Erstellt eine wiederverwendbare benutzerdefinierte Funktion."), + ("Cumulative beta probability.", "Kumulative Beta-Wahrscheinlichkeit."), + ("Cumulative lognormal probability.", "Kumulative logarithmische Normalwahrscheinlichkeit."), + ("Cuts off the fractional part of a number at the given digits.", "Schneidet den Nachkommateil einer Zahl an den angegebenen Ziffern ab."), + ("Days from settlement to the next coupon date.", "Tage von der Abrechnung bis zum nächsten Zinszahlungsdatum."), + ("Days from the start of the coupon period to settlement.", "Tage vom Beginn des Zinszahlungszeitraums bis zur Abrechnung."), + ("Days in the coupon period that contains settlement.", "Tage im Zinszahlungszeitraum, der die Abrechnung enthält."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Degressive Abschreibung über einen beliebigen Zeitraum, Übergang zur linearen Abschreibung.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Definiert einen Satz von Cube-Mitgliedern (keine Cube-Verbindungen; #NV)."), + ("Determinant of a square matrix.", "Determinante einer quadratischen Matrix."), + ("Difference of two complex numbers.", "Differenz zweier komplexer Zahlen."), + ("Discount rate of a security.", "Diskontsatz einer Anleihe."), + ("Double factorial of a number.", "Doppelte Fakultät einer Zahl."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Doppelte degressive Abschreibung (oder ein anderer Faktor) für einen Zeitraum.", + ), + ("Effective annual rate from a nominal rate and compounding periods.", "Effektiver Jahreszins aus einem Nominalzins und Zinseszinsperioden."), + ("Equivalent interest rate for the growth of an investment.", "Äquivalenter Zinssatz für das Wachstum einer Investition."), + ( + "Error function integrated from 0 to a limit, or between two limits.", + "Fehlerfunktion integriert von 0 bis zu einem Grenzwert oder zwischen zwei Grenzwerten.", + ), + ("Error function integrated from 0 to x.", "Fehlerfunktion von 0 bis x integriert."), + ("Excess kurtosis of a sample.", "Exzess (Kurtosis abzüglich 3) einer Stichprobe."), + ("Exponential curve coefficients and optional regression statistics.", "Exponentielle Kurvenkoeffizienten und optionale Regressionsstatistiken."), + ("Exponential distribution density or probability.", "Exponentielle Verteilungsdichte oder Wahrscheinlichkeit."), + ("Exponential of a complex number.", "Exponential einer komplexen Zahl."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Extrahiert Daten aus XML mit einem XPath (nicht verfügbar; gibt #WERT! zurück).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Extrahiert die erste Übereinstimmung, alle Übereinstimmungen oder die Erfassungsgruppen eines regulären Ausdrucks.", + ), + ("F distribution density or left-tailed probability.", "F-Verteilungsdichte oder linksseitige Wahrscheinlichkeit."), + ("Factorial of a number.", "Fakultät einer Zahl."), + ("Fetches data from a web service (not available; returns #VALUE!).", "Ruft Daten von einem Webdienst ab (nicht verfügbar; gibt #WERT! zurück)."), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Sucht einen Wert in der ersten Spalte einer Tabelle und gibt den Wert in derselben Zeile einer anderen Spalte zurück.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Sucht einen Wert in der ersten Zeile einer Tabelle und gibt den Wert in derselben Spalte einer anderen Zeile zurück.", + ), + ( + "Finds the position of one text in another (case-sensitive).", + "Findet die Position eines Textes in einem anderen (Groß-/Kleinschreibung beachten).", + ), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Findet die Position eines Textes in einem anderen, ignoriert Groß- und Kleinschreibung und erlaubt Platzhalter.", + ), + ("Fisher transformation.", "Fisher-Transformation."), + ("Fixed-declining-balance depreciation for a period.", "Feste degressive Abschreibung für einen Zeitraum."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Reduziert ein Array auf eine einzelne Spalte und überspringt optional leere Zellen oder Fehler.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Reduziert ein Array auf eine einzelne Zeile und überspringt optional leere Zellen oder Fehler.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Prognostiziert einen Wert durch additive (AAA) exponentielle Glättung."), + ("Formats a number as currency text, like DOLLAR.", "Formatiert eine Zahl als Währungstext, z. B. DOLLAR."), + ("Formats a number as currency text.", "Formatiert eine Zahl als Währungstext."), + ("Formats a number as text.", "Formatiert eine Zahl als Text."), + ( + "French degressive depreciation with a life-based coefficient.", + "Französische degressive Abschreibung mit einem lebensdauerbasierten Koeffizienten.", + ), + ("French linear depreciation prorated for the first period.", "Französische lineare Abschreibung anteilig für die erste Periode."), + ( + "Future value of a principal after a series of compound rates.", + "Zukünftiger Wert eines Kapitals nach Anwendung einer Reihe von Zinssätzen mit Zinseszins.", + ), + ("Future value of an investment with constant payments and rate.", "Zukünftiger Wert einer Investition bei konstanten Zahlungen und Zinssätzen."), + ("Gamma distribution density or probability.", "Gammaverteilungsdichte oder -wahrscheinlichkeit."), + ("Geometric mean of positive numbers.", "Geometrisches Mittel positiver Zahlen."), + ("Greatest common divisor of integers.", "Größter gemeinsamer Teiler ganzer Zahlen."), + ( + "Groups rows by key fields and aggregates the values of each group.", + "Gruppiert Zeilen nach Schlüsselfeldern und aggregiert die Werte jeder Gruppe.", + ), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Vergrößert ein Array auf die angegebene Größe und füllt neue Tabellenzellen mit einem Füllwert.", + ), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "Halbe Breite des Konfidenzintervalls um einen FORECAST.ETS-Wert."), + ("Harmonic mean of positive numbers.", "Harmonisches Mittel positiver Zahlen."), + ("Hyperbolic cosecant of a complex number.", "Hyperbolischer Kosekans einer komplexen Zahl."), + ("Hyperbolic cosecant.", "Hyperbolischer Kosekans."), + ("Hyperbolic cosine of a complex number.", "Hyperbolischer Kosinus einer komplexen Zahl."), + ("Hyperbolic cosine.", "Hyperbolischer Kosinus."), + ("Hyperbolic cotangent.", "Hyperbolischer Kotangens."), + ("Hyperbolic secant of a complex number.", "Hyperbolischer Sekans einer komplexen Zahl."), + ("Hyperbolic secant.", "Hyperbolischer Sekans."), + ("Hyperbolic sine of a complex number.", "Hyperbolischer Sinus einer komplexen Zahl."), + ("Hyperbolic sine.", "Hyperbolischer Sinus."), + ("Hyperbolic tangent.", "Hyperbolischer Tangens."), + ("Hypergeometric probability of an exact count.", "Hypergeometrische Wahrscheinlichkeit einer genauen Zählung."), + ("Hypergeometric probability.", "Hypergeometrische Wahrscheinlichkeit."), + ("Identity matrix of the given size.", "Identitätsmatrix der angegebenen Größe."), + ("Imaginary coefficient of a complex number.", "Imaginärer Koeffizient einer komplexen Zahl."), + ("Information about a cell.", "Informationen zu einer Zelle."), + ("Integer part of a division.", "Ganzzahliger Teil einer Division."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Zinsen, die in einem Zeitraum eines Darlehens mit gleichmäßigen Tilgungszahlungen gezahlt werden.", + ), + ("Interest part of a given period's payment.", "Zinsanteil der Zahlung eines bestimmten Zeitraums."), + ("Interest rate of a fully invested security.", "Zinssatz einer vollständig bezahlten Anleihe."), + ("Interest rate per period of an annuity, found iteratively.", "Zinssatz pro Periode einer Annuität, iterativ ermittelt."), + ("Internal rate of return of cash flows on specific dates.", "Interner Zinsfuß der Cashflows zu bestimmten Terminen."), + ("Internal rate of return of periodic cash flows.", "Interner Zinssatz periodischer Cashflows."), + ("Inverse hyperbolic cosine.", "Inverser hyperbolischer Kosinus."), + ("Inverse hyperbolic cotangent.", "Inverser hyperbolischer Kotangens."), + ("Inverse hyperbolic sine.", "Inverser hyperbolischer Sinus."), + ("Inverse hyperbolic tangent.", "Inverser hyperbolischer Tangens."), + ("Inverse of a square matrix.", "Umkehrung einer quadratischen Matrix."), + ("Inverse of the Fisher transformation.", "Umkehrung der Fisher-Transformation."), + ("Inverse of the cumulative beta distribution.", "Umkehrung der kumulativen Beta-Verteilung."), + ("Inverse of the cumulative lognormal distribution.", "Umkehrung der kumulativen Lognormalverteilung."), + ("Inverse of the gamma cumulative distribution.", "Umkehrung der kumulativen Gammaverteilung."), + ("Inverse of the left-tailed F distribution.", "Umkehrung der linksseitigen F-Verteilung."), + ("Inverse of the left-tailed chi-squared distribution.", "Umkehrung der linksseitigen Chi-Quadrat-Verteilung."), + ("Inverse of the normal cumulative distribution.", "Umkehrung der kumulativen Normalverteilung."), + ("Inverse of the right-tailed F distribution.", "Umkehrung der rechtsseitigen F-Verteilung."), + ("Inverse of the right-tailed chi-squared distribution.", "Umkehrung der rechtsseitigen Chi-Quadrat-Verteilung."), + ("Inverse of the standard normal cumulative distribution.", "Umkehrung der kumulativen Standardnormalverteilung."), + ("Joins several text values into one.", "Verbindet mehrere Textwerte zu einem."), + ( + "Joins text from values and every cell of ranges, without a separator.", + "Verbindet Text aus Werten und jeder Zelle von Bereichen ohne Trennzeichen.", + ), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Verbindet Text aus Werten und Bereichen mit einem Trennzeichen und überspringt optional leere Elemente.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Behält Zeilen oder Spalten vom Anfang (oder Ende) eines Arrays bei."), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Behält die Zeilen oder Spalten eines Arrays, dessen Include-Flag WAHR ist.", + ), + ("Largest number (0 when there are none).", "Größte Zahl (0, wenn keine vorhanden sind)."), + ("Largest number in a field of the matching records.", "Größte Zahl in einem Feld der übereinstimmenden Datensätze."), + ("Largest value among cells that meet every condition.", "Größter Wert unter den Tabellenzellen, die alle Bedingungen erfüllen."), + ("Largest value counting text as 0 and logicals as 1/0.", "Größter Wert, der Text als 0 und logische Werte als 1/0 zählt."), + ("Least common multiple of integers.", "Kleinstes gemeinsames Vielfaches von ganzen Zahlen."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Koeffizienten der Ausgleichsgeraden nach der Methode der kleinsten Quadrate und optionale Regressionsstatistiken.", + ), + ("Left-tailed inverse of Student's t distribution.", "Linksseitige Umkehrung der Student-t-Verteilung."), + ("Length of the repeating pattern detected in a time series.", "Länge des in einer Zeitreihe erkannten Wiederholungsmusters."), + ("Logarithm to the given base (10 by default).", "Logarithmus zur angegebenen Basis (standardmäßig 10)."), + ("Lognormal density or probability.", "Lognormaldichte oder -wahrscheinlichkeit."), + ("Macaulay duration of a security with periodic interest.", "Macaulay-Duration eines Wertpapiers mit regelmäßigen Zinszahlungen."), + ("Matrix product of two arrays.", "Matrixprodukt zweier Arrays."), + ("Mean after trimming a fraction of points from both ends.", "Mittelwert nach dem Abschneiden eines Bruchteils der Punkte an beiden Enden."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Mittelwert, wobei Text als 0 und logische Werte als 1 oder 0 gezählt werden."), + ("Middle value of the numbers.", "Median der Zahlen."), + ("Modified Bessel function of the first kind, I_n(x).", "Modifizierte Bessel-Funktion erster Art, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Modifizierte Bessel-Funktion zweiter Art, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Modifizierte Duration eines Wertpapiers mit regelmäßigen Zinszahlungen."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Modifizierter interner Zinssatz unter Verwendung separater Kredit- und Reinvestitionssätze.", + ), + ("Most frequently occurring number.", "Am häufigsten vorkommende Nummer."), + ("Multiplies all the numbers in the arguments.", "Multipliziert alle Zahlen in den Argumenten."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Multipliziert passende Elemente gleich großer Arrays und addiert die Produkte.", + ), + ("Multiplies the numbers in a field of the matching records.", "Multipliziert die Zahlen in einem Feld der übereinstimmenden Datensätze."), + ("Names intermediate results.", "Nennt Zwischenergebnisse."), + ("Natural log of the gamma function.", "Natürlicher Logarithmus der Gammafunktion."), + ("Natural logarithm of a complex number.", "Natürlicher Logarithmus einer komplexen Zahl."), + ("Natural logarithm.", "Natürlicher Logarithmus."), + ("Negative binomial probability.", "Wahrscheinlichkeit der negativen Binomialverteilung."), + ("Net present value of cash flows on specific dates.", "Nettobarwert der Cashflows zu bestimmten Terminen."), + ("Net present value of periodic cash flows at a discount rate.", "Nettobarwert der periodischen Cashflows zu einem Abzinsungssatz."), + ("Next coupon date after settlement.", "Nächster Zinszahlungstermin nach der Abrechnung."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Nomineller Jahreszinssatz aus effektivem Zinssatz und Zinseszinsperioden.", + ), + ("Normal distribution density or cumulative probability.", "Normalverteilungsdichte oder kumulative Wahrscheinlichkeit."), + ("Number of areas in a reference.", "Anzahl der Bereiche in einer Referenz."), + ("Number of combinations with repetition.", "Anzahl der Kombinationen mit Wiederholung."), + ("Number of combinations without repetition.", "Anzahl der Kombinationen ohne Wiederholung."), + ("Number of coupons payable between settlement and maturity.", "Anzahl der zwischen Abrechnung und Fälligkeit fälligen Zinszahlungen."), + ("Number of ordered selections with repetition.", "Anzahl der geordneten Auswahlen mit Wiederholung."), + ("Number of ordered selections without repetition.", "Anzahl der geordneten Auswahlen ohne Wiederholung."), + ( + "Number of periods needed to pay off or accumulate an amount.", + "Anzahl der Perioden, die zur Tilgung oder Anhäufung eines Betrags erforderlich sind.", + ), + ("Number of sheets.", "Anzahl der Blätter."), + ("One- or two-tailed Student's t probability.", "Ein- oder zweiseitige Student-t-Wahrscheinlichkeit."), + ("One-tailed probability of a z-test.", "Einseitige Wahrscheinlichkeit eines Z-Tests."), + ("Pearson product-moment correlation coefficient.", "Produkt-Moment-Korrelationskoeffizient nach Pearson."), + ("Percent-encodes text for use in a URL.", "Prozentcodiert Text zur Verwendung in einem URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Regelmäßige Zahlung für ein Darlehen oder eine Annuität mit konstanten Zahlungen und konstantem Zinssatz.", + ), + ( + "Periods needed for an investment to grow to a target value.", + "Zeiträume, die benötigt werden, damit eine Investition einen Zielwert erreicht.", + ), + ("Picks a value from the list by its position.", "Wählt einen Wert anhand seiner Position aus der Liste aus."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Wählt Spalten eines Arrays nach Position aus (negative Zählungen vom Ende an).", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Wählt Zeilen eines Arrays nach Position aus (negative Zählungen vom Ende an).", + ), + ("Places arrays side by side.", "Platziert Arrays nebeneinander."), + ("Poisson probability.", "Poisson-Wahrscheinlichkeit."), + ("Population covariance of paired values.", "Populationskovarianz gepaarter Werte."), + ("Population skewness.", "Schiefe der Grundgesamtheit."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Populationsstandardabweichung, wobei Text als 0 und logische Werte als 1/0 gezählt werden.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Populationsstandardabweichung eines Feldes über die übereinstimmenden Datensätze.", + ), + ("Population standard deviation.", "Standardabweichung der Grundgesamtheit."), + ( + "Population variance counting text as 0 and logicals as 1/0.", + "Populationsvarianz, wobei Text als 0 und logische Werte als 1/0 gezählt werden.", + ), + ("Population variance of a field over the matching records.", "Populationsvarianz eines Feldes über die übereinstimmenden Datensätze."), + ("Population variance.", "Populationsvarianz."), + ("Positive square root.", "Positive Quadratwurzel."), + ("Predicts a value along a linear trend.", "Prognostiziert einen Wert entlang eines linearen Trends."), + ("Present value of a series of equal future payments.", "Barwert einer Reihe gleicher zukünftiger Zahlungen."), + ("Previous coupon date on or before settlement.", "Vorheriges Zinszahlungsdatum am oder vor der Abrechnung."), + ("Price per 100 face value of a Treasury bill.", "Preis pro 100-Nennwert einer Schatzanweisung."), + ("Price per 100 face value of a discounted security.", "Preis pro 100 Nennwert einer Discount-Anleihe."), + ("Price per 100 face value of a security paying interest at maturity.", "Preis pro 100 Nennwert einer Anleihe, die bei Fälligkeit Zinsen zahlt."), + ("Price per 100 face value of a security paying periodic interest.", "Preis pro 100 Nennwert einer Anleihe mit regelmäßigen Zinsen."), + ( + "Price per 100 face value of a security with an odd first period.", + "Preis pro 100 Nennwert einer Anleihe mit unregelmäßiger erster Zinsperiode.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Preis pro 100 Nennwert einer Anleihe mit unregelmäßiger letzter Zinsperiode.", + ), + ("Principal part of a given period's payment.", "Tilgungsanteil der Zahlung einer bestimmten Periode."), + ("Probability from Student's t-test.", "Wahrscheinlichkeit aus dem Student-T-Test."), + ( + "Probability of a number of successes falling in a range.", + "Wahrscheinlichkeit, dass die Anzahl der Erfolge in einem bestimmten Bereich liegt.", + ), + ( + "Probability that a standard normal value falls between the mean and z.", + "Wahrscheinlichkeit, dass ein Standardnormalwert zwischen dem Mittelwert und z liegt.", + ), + ("Probability that values fall between two limits.", "Wahrscheinlichkeit, dass Werte zwischen zwei Grenzwerten liegen."), + ("Product of complex numbers.", "Produkt komplexer Zahlen."), + ("Quartile (0–4) of a data set, inclusive method.", "Quartil (0–4) eines Datensatzes, inklusive Methode."), + ("Quartile (0–4) of a data set.", "Quartil (0–4) eines Datensatzes."), + ("Quartile (1–3) of a data set, exclusive method.", "Quartil (1–3) eines Datensatzes, exklusive Methode."), + ("Quotient of two complex numbers.", "Quotient zweier komplexer Zahlen."), + ("Raises a complex number to a power.", "Potenziert eine komplexe Zahl."), + ("Raises a number to a power.", "Potenziert eine Zahl."), + ("Rank of a number within a list.", "Rang einer Zahl innerhalb einer Liste."), + ( + "Rank of a number within a list; ties get the average rank.", + "Rang einer Zahl innerhalb einer Liste; Gleichstände erhalten den durchschnittlichen Rang.", + ), + ( + "Rank of a number within a list; ties share the top rank.", + "Rang einer Zahl innerhalb einer Liste; gleiche Werte erhalten gemeinsam die kleinste zugehörige Rangnummer.", + ), + ("Ratio of the factorial of a sum to the product of factorials.", "Verhältnis der Fakultät einer Summe zum Produkt der Fakultäten."), + ("Reads text in a given base as a number.", "Liest Text in einer bestimmten Basis als Zahl."), + ("Real coefficient of a complex number.", "Reeller Koeffizient einer komplexen Zahl."), + ("Relative standing of a value as a fraction of the data set.", "Relativer Stellenwert eines Werts als Bruchteil des Datensatzes."), + ("Relative standing of a value from 0 to 1 inclusive.", "Relativer Stellenwert eines Wertes von 0 bis einschließlich 1."), + ("Relative standing of a value strictly between 0 and 1.", "Relativer Rang eines Werts, angegeben als Zahl strikt zwischen 0 und 1."), + ("Remainder of a division, with the sign of the divisor.", "Rest einer Division, mit dem Vorzeichen des Divisors."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Entfernt führende und nachfolgende Leerzeichen und reduziert Reihen von Leerzeichen auf eins.", + ), + ("Removes non-printable control characters from text.", "Entfernt nicht druckbare Steuerzeichen aus dem Text."), + ("Removes rows or columns from the start (or end) of an array.", "Entfernt Zeilen oder Spalten vom Anfang (oder Ende) eines Arrays."), + ("Repeats a text a given number of times.", "Wiederholt einen Text eine bestimmte Anzahl von Malen."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Ersetzt Übereinstimmungen eines regulären Ausdrucks, alle davon oder ein ausgewähltes Vorkommen.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Ersetzt Vorkommen eines Textes durch einen anderen, optional nur ein bestimmtes Vorkommen.", + ), + ("Replaces part of a text by position.", "Ersetzt einen Teil eines Textes nach Position."), + ( + "Returns 1 when a number is at least the step, otherwise 0.", + "Gibt 1 zurück, wenn eine Zahl mindestens dem Schwellenwert entspricht, andernfalls 0.", + ), + ("Returns 1 when two numbers are equal, otherwise 0.", "Gibt 1 zurück, wenn zwei Zahlen gleich sind, andernfalls 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Gibt einen Code für die Art des Werts zurück: 1 Zahl, 2 Text, 4 logisch, 16 Fehler, 64 Array.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Gibt einen Fallback zurück, wenn der Wert #NV ist, andernfalls der Wert."), + ( + "Returns a fallback when the value is an error, otherwise the value.", + "Gibt einen Fallback zurück, wenn der Wert ein Fehler ist, andernfalls der Wert.", + ), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Gibt eine Eigenschaft eines wichtigen Leistungsindikators aus einem Cube zurück (keine Cube-Verbindungen; #NV).", + ), + ( + "Returns a member or tuple from a cube (no cube connections; #N/A).", + "Gibt ein Mitglied oder Tupel aus einem Cube zurück (keine Cube-Verbindungen; #NV).", + ), + ( + "Returns a property of a cube member (no cube connections; #N/A).", + "Gibt eine Eigenschaft eines Cube-Mitglieds zurück (keine Cube-Verbindungen; #NV).", + ), + ( + "Returns an aggregated value from a cube (no cube connections; #N/A).", + "Gibt einen aggregierten Wert aus einem Cube zurück (keine Cube-Verbindungen; #NV).", + ), + ("Returns characters from the middle of a text.", "Gibt Zeichen aus der Mitte eines Textes zurück."), + ("Returns information about the operating environment.", "Gibt Informationen über die Betriebsumgebung zurück."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Gibt einen Wert zurück, wenn eine Bedingung WAHR ist, und einen anderen, wenn sie FALSCH ist.", + ), + ("Returns the #N/A error value.", "Gibt den #NV-Fehlerwert zurück."), + ("Returns the 1-based position of a value in a row or column.", "Gibt die 1-basierte Position eines Werts in einer Zeile oder Spalte zurück."), + ("Returns the ISO 8601 week number of a date.", "Gibt die ISO 8601 Wochennummer eines Datums zurück."), + ("Returns the Unicode code point of the first character of a text.", "Gibt den Unicode-Codepunkt des ersten Zeichens eines Textes zurück."), + ("Returns the Windows-1252 code of the first character of a text.", "Gibt den Windows-1252-Code des ersten Zeichens eines Textes zurück."), + ("Returns the character for a Unicode code point.", "Gibt das Zeichen für einen Unicode-Codepunkt zurück."), + ( + "Returns the character for a code from the Windows-1252 character set.", + "Gibt das Zeichen für einen Code aus dem Windows-1252-Zeichensatz zurück.", + ), + ("Returns the current date and time.", "Gibt das aktuelle Datum und die aktuelle Uhrzeit zurück."), + ("Returns the current date.", "Gibt das aktuelle Datum zurück."), + ("Returns the date a number of months before or after a date.", "Gibt das Datum einige Monate vor oder nach einem Datum zurück."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Gibt das Datum mit einem benutzerdefinierten Wochenende zurück, das mehrere Arbeitstage entfernt liegt.", + ), + ("Returns the date a number of working days before or after a date.", "Gibt das Datum eine Anzahl Arbeitstage vor oder nach einem Datum zurück."), + ("Returns the day of the month of a date.", "Gibt den Tag des Monats eines Datums zurück."), + ("Returns the day of the week of a date as a number.", "Gibt den Wochentag eines Datums als Zahl zurück."), + ("Returns the distinct rows or columns of an array.", "Gibt die unterschiedlichen Zeilen oder Spalten eines Arrays zurück."), + ( + "Returns the element, row or column of an array at the given position.", + "Gibt das Element, die Zeile oder die Spalte eines Arrays an der angegebenen Position zurück.", + ), + ( + "Returns the field value of the single record that meets the criteria.", + "Gibt den Feldwert des einzelnen Datensatzes zurück, der die Kriterien erfüllt.", + ), + ("Returns the first characters of a text.", "Gibt die ersten Zeichen eines Textes zurück."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Gibt den Jahresbruchteil zwischen zwei Daten gemäß der Zinstagekonvention zurück.", + ), + ("Returns the hour (0-23) of a time.", "Gibt die Stunde (0-23) einer Zeit zurück."), + ("Returns the last characters of a text.", "Gibt die letzten Zeichen eines Textes zurück."), + ("Returns the last day of the month a number of months away.", "Gibt den letzten Tag des Monats zurück, der mehrere Monate entfernt liegt."), + ("Returns the logical value FALSE.", "Gibt den logischen Wert FALSCH zurück."), + ("Returns the logical value TRUE.", "Gibt den logischen Wert WAHR zurück."), + ("Returns the minute (0-59) of a time.", "Gibt die Minute (0-59) einer Zeit zurück."), + ("Returns the month (1-12) of a date.", "Gibt den Monat (1-12) eines Datums zurück."), + ( + "Returns the nth member of a cube set (no cube connections; #N/A).", + "Gibt das n-te Mitglied eines Cube-Sets zurück (keine Cube-Verbindungen; #NV).", + ), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Gibt die Nummer zurück, die einen Fehlerwert identifiziert, oder #NV, wenn es sich nicht um einen Fehler handelt.", + ), + ("Returns the number of days between two dates.", "Gibt die Anzahl der Tage zwischen zwei Daten zurück."), + ("Returns the phonetic (furigana) text; here the text itself.", "Gibt den phonetischen (furigana) Text zurück; hier der Text selbst."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Gibt die Position eines Werts in einer Zeile oder Spalte mit flexiblen Übereinstimmungs- und Suchmodi zurück.", + ), + ("Returns the second (0-59) of a time.", "Gibt die Sekunde (0-59) einer Zeit zurück."), + ("Returns the text that comes after a delimiter.", "Gibt den Text zurück, der nach einem Trennzeichen kommt."), + ("Returns the text that comes before a delimiter.", "Gibt den Text zurück, der vor einem Trennzeichen steht."), + ("Returns the value if it is text, otherwise empty text.", "Gibt den Wert zurück, wenn es sich um Text handelt, andernfalls um leeren Text."), + ("Returns the value paired with the first condition that is TRUE.", "Gibt den Wert gepaart mit der ersten Bedingung zurück, die WAHR ist."), + ("Returns the week number of a date within its year.", "Gibt die Wochennummer eines Datums innerhalb seines Jahres zurück."), + ("Returns the year of a date.", "Gibt das Jahr eines Datums zurück."), + ("Reverses a logical value.", "Kehrt einen logischen Wert um."), + ("Right-tailed F probability.", "Rechtsseitige F-Wahrscheinlichkeit."), + ("Right-tailed Student's t probability.", "Rechtsseitige Wahrscheinlichkeit der Student-t-Verteilung."), + ("Right-tailed chi-squared probability.", "Rechtsseitige Chi-Quadrat-Wahrscheinlichkeit."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Rundet eine Zahl und formatiert sie als Text mit festen Dezimalstellen und optionalen Tausendertrennzeichen.", + ), + ("Rounds a number away from zero to a given number of digits.", "Rundet eine Zahl von null weg auf eine bestimmte Anzahl von Stellen."), + ("Rounds a number down to a multiple of significance.", "Rundet eine Zahl auf ein Vielfaches der Signifikanz ab."), + ("Rounds a number down to the nearest integer or multiple.", "Rundet eine Zahl auf die nächste ganze Zahl oder das nächste Vielfache ab."), + ("Rounds a number down to the nearest integer.", "Rundet eine Zahl auf die nächste ganze Zahl ab."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Rundet eine Zahl auf die angegebene Stellenzahl; genaue Halbwerte werden von null weg gerundet.", + ), + ("Rounds a number to the nearest multiple.", "Rundet eine Zahl auf das nächste Vielfache."), + ("Rounds a number toward negative infinity to a multiple.", "Rundet eine Zahl in Richtung negativer Unendlich auf ein Vielfaches."), + ("Rounds a number toward positive infinity to a multiple.", "Rundet eine Zahl in Richtung positive Unendlich auf ein Vielfaches."), + ("Rounds a number toward zero to a given number of digits.", "Rundet eine Zahl auf eine bestimmte Anzahl von Ziffern gegen Null."), + ("Rounds a number up to a multiple of significance.", "Rundet eine Zahl auf ein Vielfaches der Signifikanz auf."), + ("Rounds a number up to the nearest integer or multiple.", "Rundet eine Zahl auf die nächste ganze Zahl oder das nächste Vielfache auf."), + ("Rounds away from zero to the nearest even integer.", "Rundet von null weg auf die nächste gerade ganze Zahl."), + ("Rounds away from zero to the nearest odd integer.", "Rundet von null weg auf die nächste ungerade ganze Zahl."), + ("Row number of a reference.", "Zeilennummer einer Referenz."), + ("Running accumulation of an array.", "Laufende Akkumulation eines Arrays."), + ("Sample covariance of paired values.", "Stichprobenkovarianz gepaarter Werte."), + ("Sample skewness.", "Stichprobenschiefe."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Stichprobenstandardabweichung, wobei Text als 0 und logische Werte als 1/0 gezählt werden.", + ), + ( + "Sample standard deviation of a field over the matching records.", + "Stichprobenstandardabweichung eines Feldes über die übereinstimmenden Datensätze.", + ), + ("Sample standard deviation.", "Stichprobenstandardabweichung."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Stichprobenvarianz, wobei Text als 0 und logische Werte als 1/0 gezählt werden."), + ("Sample variance of a field over the matching records.", "Stichprobenvarianz eines Feldes über die übereinstimmenden Datensätze."), + ("Sample variance.", "Stichprobenvarianz."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Sucht in einer Zeile oder Spalte und gibt das entsprechende Element, die Zeile oder Spalte eines anderen Arrays zurück.", + ), + ("Secant of a complex number.", "Sekans einer komplexen Zahl."), + ("Secant of an angle in radians.", "Sekans eines Winkels im Bogenmaß."), + ("Sheet number.", "Blattnummer."), + ( + "Shifts the bits of a number left (right for negative shifts).", + "Verschiebt die Bits einer Zahl nach links (nach rechts für negative Verschiebungen).", + ), + ( + "Shifts the bits of a number right (left for negative shifts).", + "Verschiebt die Bits einer Zahl nach rechts (nach links für negative Verschiebungen).", + ), + ("Sine of a complex number.", "Sinus einer komplexen Zahl."), + ("Sine of an angle in radians.", "Sinus eines Winkels im Bogenmaß."), + ("Slope of the least-squares regression line.", "Steigung der Regressionsgeraden der kleinsten Quadrate."), + ("Smallest number (0 when there are none).", "Kleinste Zahl (0, wenn keine vorhanden sind)."), + ("Smallest number in a field of the matching records.", "Kleinste Zahl in einem Feld der übereinstimmenden Datensätze."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Kleinste Erfolgsanzahl, deren kumulative Binomialwahrscheinlichkeit Alpha erreicht.", + ), + ("Smallest value among cells that meet every condition.", "Kleinster Wert unter den Tabellenzellen, die alle Bedingungen erfüllen."), + ("Smallest value counting text as 0 and logicals as 1/0.", "Kleinster Wert, der Text als 0 und logische Werte als 1/0 zählt."), + ("Sorts an array by the values of other arrays of matching size.", "Sortiert ein Array nach den Werten anderer Arrays gleicher Größe."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Sortiert die Zeilen (oder Spalten) eines Arrays nach einer oder mehreren seiner Spalten.", + ), + ("Spells out a number in Thai words with Baht.", "Schreibt eine Zahl in thailändischen Wörtern mit Baht aus."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Teilt Text an den angegebenen Trennzeichen in ein Raster aus Spalten und Zeilen auf.", + ), + ("Square of the correlation coefficient.", "Quadrat des Korrelationskoeffizienten."), + ("Square root of a complex number.", "Quadratwurzel einer komplexen Zahl."), + ("Square root of the number times pi.", "Quadratwurzel des Produkts aus der Zahl und Pi."), + ("Stacks arrays on top of each other.", "Stapelt Arrays übereinander."), + ("Standard error of predicted y values in a regression.", "Standardfehler der vorhergesagten y-Werte in einer Regression."), + ("Standard normal cumulative probability.", "Standardnormale kumulative Wahrscheinlichkeit."), + ("Standard normal density or cumulative probability.", "Standardnormaldichte oder kumulative Wahrscheinlichkeit."), + ("Standard normal density.", "Standardnormaldichte."), + ("Straight-line depreciation for one period.", "Lineare Abschreibung für eine Periode."), + ("Student's t density or left-tailed probability.", "Student's t-Dichte oder linksseitige Wahrscheinlichkeit."), + ("Sum of a power series.", "Summe einer Potenzreihe."), + ("Sum of complex numbers.", "Summe komplexer Zahlen."), + ("Sum of squared deviations from the mean.", "Summe der quadrierten Abweichungen vom Mittelwert."), + ("Sum-of-years'-digits depreciation for a period.", "Arithmetisch-degressive Abschreibung nach der Jahressummenmethode für eine Periode."), + ("Sums the differences of squares of matching elements.", "Summiert die Differenzen der Quadrate übereinstimmender Elemente."), + ("Sums the squared differences of matching elements.", "Summiert die quadrierten Differenzen übereinstimmender Elemente."), + ("Sums the sums of squares of matching elements.", "Summiert die Quadratsummen übereinstimmender Elemente."), + ("Swaps the rows and columns of an array.", "Vertauscht die Zeilen und Spalten eines Arrays."), + ("TRUE for references.", "WAHR für Referenzen."), + ("TRUE when a LAMBDA argument was left out.", "WAHR, wenn ein LAMBDA-Argument weggelassen wurde."), + ("TRUE when a regular expression matches somewhere in the text.", "WAHR, wenn ein regulärer Ausdruck irgendwo im Text übereinstimmt."), + ("TRUE when an odd number of arguments are TRUE.", "WAHR, wenn eine ungerade Anzahl von Argumenten WAHR ist."), + ("TRUE when at least one argument is TRUE.", "WAHR, wenn mindestens ein Argument WAHR ist."), + ("TRUE when every argument is TRUE.", "WAHR, wenn jedes Argument WAHR ist."), + ("TRUE when the cell has a formula.", "WAHR, wenn die Zelle eine Formel enthält."), + ("TRUE when the integer part of a number is even.", "WAHR, wenn der ganzzahlige Teil einer Zahl gerade ist."), + ("TRUE when the integer part of a number is odd.", "WAHR, wenn der ganzzahlige Teil einer Zahl ungerade ist."), + ("TRUE when the value is TRUE or FALSE.", "WAHR, wenn der Wert WAHR oder FALSCH ist."), + ("TRUE when the value is a number.", "WAHR, wenn der Wert eine Zahl ist."), + ("TRUE when the value is any error other than #N/A.", "WAHR, wenn der Wert ein anderer Fehler als #NV ist."), + ("TRUE when the value is any error.", "WAHR, wenn der Wert ein Fehler ist."), + ("TRUE when the value is anything other than text.", "WAHR, wenn der Wert etwas anderes als Text ist."), + ("TRUE when the value is text.", "WAHR, wenn der Wert Text ist."), + ("TRUE when the value is the #N/A error.", "WAHR, wenn der Wert der #NV-Fehler ist."), + ("TRUE when the value refers to an empty cell.", "WAHR, wenn sich der Wert auf eine leere Zelle bezieht."), + ("TRUE when two texts are identical, including case.", "WAHR, wenn zwei Texte identisch sind, einschließlich Groß- und Kleinschreibung."), + ("Tangent of a complex number.", "Tangens einer komplexen Zahl."), + ("Tangent of an angle in radians.", "Tangens eines Winkels im Bogenmaß."), + ("The constant pi to 15 digits.", "Die Konstante pi auf 15 Stellen."), + ("The formula of a cell as text.", "Die Formel einer Zelle als Text."), + ("The gamma function.", "Die Gammafunktion."), + ("The k-th largest number in a data set.", "Die k-größte Zahl in einem Datensatz."), + ("The k-th smallest number in a data set.", "Die k-kleinste Zahl in einem Datensatz."), + ("The reference named by a text string.", "Die durch eine Textzeichenfolge benannte Referenz."), + ("The sum of a subset as a fraction of the sum of all the values.", "Die Summe einer Teilmenge als Bruchteil der Summe aller Werte."), + ("Total interest paid between two periods.", "Gesamtzins, der zwischen zwei Perioden gezahlt wurde."), + ("Total principal repaid between two periods.", "Gesamtkapital zwischen zwei Zeiträumen zurückgezahlt."), + ("Two-tailed Student's t probability.", "Zweiseitige Student-t-Wahrscheinlichkeit."), + ("Two-tailed inverse of Student's t distribution.", "Zweiseitige Umkehrung der Student-t-Verteilung."), + ("Two-tailed p-value of an F-test for equality of variances.", "Zweiseitiger p-Wert eines F-Tests auf Gleichheit der Varianzen."), + ("Values along a fitted exponential growth curve.", "Werte entlang einer angepassten exponentiellen Wachstumskurve."), + ("Values along a least-squares linear fit.", "Werte entlang einer linearen Anpassung nach der Methode der kleinsten Quadrate."), + ("Vertical array of all the most frequent numbers.", "Vertikales Array aller häufigsten Zahlen."), + ("Weibull density or probability.", "Weibull-Dichte oder -Wahrscheinlichkeit."), + ("Writes a number in another base, padded with zeros.", "Schreibt eine Zahl in einer anderen Basis, aufgefüllt mit Nullen."), + ("Y-intercept of the least-squares regression line.", "Y-Achsenabschnitt der Regressionsgeraden der kleinsten Quadrate."), + ("Yield of a Treasury bill.", "Rendite eines Schatzwechsels."), + ("Yield of a security paying periodic interest.", "Rendite einer Anleihe mit regelmäßigen Zinsen."), + ("Yield of a security with an odd first period.", "Rendite einer Anleihe mit unregelmäßiger erster Zinsperiode."), + ("Yield of a security with an odd last period.", "Rendite einer Anleihe mit unregelmäßiger letzter Zinsperiode."), + ("Z-score of a value.", "Z-Score eines Werts."), + ("e raised to the given power.", "e zur gegebenen Potenz erhoben."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-tes Perzentil, k von 0 bis einschließlich 1."), + ("k-th percentile, k strictly between 0 and 1.", "k-tes Perzentil, k liegt streng zwischen 0 und 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "Referenztyp"), + ("actual_range", "tatsächlicher_Bereich"), + ("aggregation", "Aggregation"), + ("alpha", "Alpha"), + ("angle", "Winkel"), + ("area_num", "Bereichsnummer"), + ("argument", "Argument"), + ("array", "Array"), + ("array_x", "Array_von_x_Werten"), + ("array_y", "Array_von_y_Werten"), + ("average_range", "Mittelwertbereich"), + ("base", "Basis"), + ("basis", "Basis"), + ("beta", "Beta"), + ("bins_array", "Bin_Grenzen_Array"), + ("bottom", "untere_Grenze"), + ("by_array", "Sortierschlüssel_Array"), + ("by_col", "nach_Spalte"), + ("calc_method", "Berechnungsmethode"), + ("calculation", "Berechnung"), + ("caption", "Beschriftung"), + ("case_sensitivity", "Groß_Kleinschreibung_beachten"), + ("coefficients", "Koeffizienten"), + ("col_delimiter", "Spaltentrennzeichen"), + ("col_fields", "Spaltenfelder"), + ("col_index_num", "Spaltenindex"), + ("col_num", "Spaltennummer"), + ("col_sort_order", "Sortierreihenfolge_der_Spalten"), + ("col_total_depth", "Gesamttiefe_der_Spalte"), + ("cols", "Spaltenanzahl"), + ("column_num", "Spaltennummer"), + ("columns", "Spaltenanzahl"), + ("confidence_level", "Konfidenzniveau"), + ("connection", "Datenverbindung"), + ("const", "Konstante"), + ("cost", "Anschaffungskosten"), + ("coupon", "Kuponzinssatz"), + ("criteria", "Kriterien"), + ("criteria_range", "Kriterienbereich"), + ("cumulative", "kumulative_Verteilung"), + ("data_all", "Daten_alle"), + ("data_array", "Datenarray"), + ("data_completion", "Datenvervollständigung"), + ("data_subset", "Datenteilmenge"), + ("database", "Datenbank"), + ("date", "Datum"), + ("date_purchased", "Kaufdatum"), + ("date_text", "Datum_als_Text_geschrieben"), + ("dates", "Termine"), + ("day", "Tag"), + ("days", "Tage"), + ("decimal_dollar", "Dezimalpreis"), + ("decimal_separator", "Dezimaltrennzeichen"), + ("decimals", "Dezimalstellen"), + ("default_or_value", "Standard_oder_Wert"), + ("deg_freedom", "Freiheitsgrade"), + ("delimiter", "Trennzeichen"), + ("denominator", "Nenner"), + ("dimension", "Dimension"), + ("discount", "Diskontsatz"), + ("divisor", "Divisor"), + ("effect_rate", "Effektivzinssatz"), + ("end_date", "Enddatum"), + ("end_period", "letzte_Periode"), + ("error_val", "Fehlerwert"), + ("exactly_once", "genau_einmal"), + ("expected_range", "erwarteter_Bereich"), + ("expression", "Ausdruck"), + ("factor", "Faktor"), + ("field", "Datenbankfeld"), + ("field_headers", "Feldüberschriften"), + ("field_relationship", "Beziehung_zwischen_Feldern"), + ("filter_array", "Filterarray"), + ("finance_rate", "Finanzierungszinssatz"), + ("find_text", "Text_suchen"), + ("first_coupon", "erster_Couponzahlungstermin"), + ("first_interest", "erster_Zinszahlungstermin"), + ("first_period", "erste_Periode"), + ("form", "Darstellungsform"), + ("format", "Format"), + ("format_text", "Formattext"), + ("fraction", "Nenner_der_Bruchnotierung"), + ("fractional_dollar", "Bruchteilspreis"), + ("frequency", "Häufigkeit_der_Couponzahlung"), + ("friendly_name", "Anzeigename"), + ("from_unit", "Quellmesseinheit"), + ("full_precision", "volle_Präzision"), + ("function", "Funktion"), + ("function_num", "Funktionsnummer"), + ("fv", "zukünftiger_Wert"), + ("group_separator", "Gruppentrennzeichen"), + ("guess", "Schätzwert"), + ("height", "Höhe"), + ("holidays", "Feiertage"), + ("hour", "Stunde"), + ("i_num", "imaginärer_Koeffizient"), + ("if_empty", "falls_leer"), + ("if_not_found", "wenn_nicht_gefunden"), + ("ignore", "ignorieren"), + ("ignore_empty", "leer_ignorieren"), + ("include", "einschließen"), + ("index_num", "Indexnummer"), + ("info_type", "Informationstyp"), + ("initial_value", "Anfangswert"), + ("instance_num", "Vorkommensnummer"), + ("inumber", "komplexe_Zahl"), + ("investment", "Investition"), + ("issue", "Ausgabedatum"), + ("k", "k"), + ("known_xs", "bekannte_x_Werte"), + ("known_ys", "bekannte_y_Werte"), + ("kpi_name", "Name_des_Leistungsindikators"), + ("kpi_property", "Key_Performance_Indikator_Eigenschaft"), + ("lambda", "Lambda"), + ("last_interest", "letzter_Zinszahlungstermin"), + ("life", "Nutzungsdauer"), + ("link_location", "Linkposition"), + ("logical", "logischer_Wert"), + ("logical_test", "logischer_Zustand"), + ("lookup_array", "Suchmatrix"), + ("lookup_value", "Suchwert"), + ("lookup_vector", "Suchvektor"), + ("lower_limit", "Untergrenze"), + ("m", "m"), + ("match_end", "Textende_als_Trennzeichen"), + ("match_mode", "Vergleichsmodus"), + ("match_type", "Matching_Methode"), + ("maturity", "Fälligkeitsdatum"), + ("max", "maximal"), + ("max_range", "Maximumbereich"), + ("mean", "arithmetisches_Mittel"), + ("member_expression", "Cube_Mitgliedsausdruck"), + ("method", "Methode"), + ("min", "Minimum"), + ("min_length", "Mindestlänge"), + ("min_range", "Minimumbereich"), + ("minute", "Minute"), + ("mode", "Berechnungsmodus"), + ("month", "Monat"), + ("months", "Monate"), + ("multiple", "Vielfaches"), + ("n", "n"), + ("name", "Name"), + ("new_text", "neuer_Text"), + ("new_xs", "neue_x_Werte"), + ("no_commas", "Zifferngruppentrennzeichen_weglassen"), + ("no_switch", "Abschreibungsmethode_nicht_wechseln"), + ("nominal_rate", "Nominalzinssatz"), + ("nper", "Anzahl_der_Perioden"), + ("npery", "Perioden_pro_Jahr"), + ("num_bytes", "Anzahl_der_Bytes"), + ("num_chars", "Anzahl_der_Zeichen"), + ("num_digits", "Anzahl_der_Ziffern"), + ("number", "Zahl"), + ("number_chosen", "Anzahl_ausgewählter_Elemente"), + ("number_f", "Anzahl_der_Misserfolge"), + ("number_pop", "Größe_der_Grundgesamtheit"), + ("number_s", "Anzahl_der_Erfolge"), + ("number_sample", "Stichprobengröße"), + ("number_times", "Anzahl_der_Wiederholungen"), + ("numerator", "Zähler"), + ("occurrence", "Vorkommen"), + ("old_text", "alter_Text"), + ("options", "Optionen"), + ("order", "Rangfolge"), + ("pad_with", "Füllwert"), + ("par", "Nennwert"), + ("parameter", "Parameter"), + ("pattern", "Muster_für_reguläre_Ausdrücke"), + ("per", "Periode"), + ("percent", "Prozent"), + ("period", "Periode"), + ("places", "Anzahl_der_ausgegebenen_Ziffern"), + ("pmt", "Zahlung"), + ("population_s", "Erfolge_in_der_Grundgesamtheit"), + ("power", "Exponent"), + ("pr", "Preis"), + ("principal", "Kapital"), + ("prob_range", "Wahrscheinlichkeitsbereich"), + ("probability", "Wahrscheinlichkeit"), + ("probability_s", "Erfolgswahrscheinlichkeit"), + ("property", "Eigenschaftsname"), + ("pv", "Barwert"), + ("quart", "Quartil"), + ("radix", "Basis"), + ("range", "Bereich"), + ("range_lookup", "Bereichssuche"), + ("rank", "Rang"), + ("rate", "Zinssatz"), + ("real_num", "realer_Koeffizient"), + ("redemption", "Rückzahlungswert"), + ("ref", "Referenz"), + ("ref_text", "Referenztext"), + ("reference", "Bezug"), + ("reinvest_rate", "Wiederanlagezinssatz"), + ("relative_to", "relativ_zu"), + ("replacement", "Ersatz"), + ("result", "Ergebnis"), + ("result_vector", "Ergebnisvektor"), + ("return_array", "Rückgabematrix"), + ("return_mode", "Rückgabemodus"), + ("return_type", "Rückgabetyp"), + ("row_delimiter", "Zeilentrennzeichen"), + ("row_fields", "Zeilenfelder"), + ("row_index_num", "Zeilenindex"), + ("row_num", "Zeilennummer"), + ("row_sort_order", "Sortierreihenfolge_der_Zeilen"), + ("row_total_depth", "Gesamttiefe_der_Zeile"), + ("rows", "Zeilenanzahl"), + ("salvage", "Restwert"), + ("sample_s", "Erfolge_in_der_Stichprobe"), + ("scan_by_column", "Nach_Spalte_scannen"), + ("schedule", "Zinssatzreihe"), + ("search_mode", "Suchmodus"), + ("seasonality", "Saisonalität"), + ("second", "Sekunde"), + ("serial_number", "Seriennummer"), + ("set", "Satz_von_Cube_Mitgliedern"), + ("set_expression", "Cube_Mitgliedssatzausdruck"), + ("settlement", "Abrechnungsdatum"), + ("sheet_text", "Blatttext"), + ("shift_amount", "Bitverschiebung"), + ("sigma", "Sigma"), + ("significance", "Genauigkeit"), + ("size", "Größe"), + ("sort_by", "Sortieren_nach"), + ("sort_index", "Sortierindex"), + ("sort_order", "Sortierreihenfolge"), + ("source", "Quelle"), + ("standard_dev", "Standardabweichung"), + ("start", "Startwert"), + ("start_date", "Startdatum"), + ("start_num", "Startposition"), + ("start_period", "Startzeitraum"), + ("statistic_type", "Statistiktyp"), + ("stats", "Statistiken"), + ("step", "Schritt"), + ("suffix", "Suffix"), + ("sum_range", "Summenbereich"), + ("table_array", "Tabellenarray"), + ("tails", "Anzahl_der_Verteilungsenden"), + ("target", "Ziel"), + ("target_date", "Zieldatum"), + ("text", "Text"), + ("time_text", "Zeit_als_Text_geschrieben"), + ("timeline", "Zeitleiste"), + ("to_unit", "Zielmesseinheit"), + ("top", "Obergrenze"), + ("total_depth", "Gesamttiefe"), + ("trials", "Versuche"), + ("triangulation_precision", "Triangulationsgenauigkeit"), + ("trim_cols", "Spaltentrimmmodus"), + ("trim_rows", "Reihentrimmmodus"), + ("type", "Typ"), + ("type_text", "Datentypname"), + ("unit", "Zeiteinheit"), + ("upper_limit", "Obergrenze"), + ("url", "URL"), + ("value", "Wert"), + ("value_if_error", "Ergebnis_im_Fehlerfall"), + ("value_if_false", "Ergebnis_wenn_die_Bedingung_falsch_ist"), + ("value_if_na", "Ergebnis_für_den_nicht_verfügbaren_Fehler"), + ("value_if_true", "Ergebnis_wenn_die_Bedingung_wahr_ist"), + ("values", "Eingabewerte"), + ("vector", "Vektor"), + ("weekend", "Wochenende"), + ("whole_number", "ganze_Zahl"), + ("width", "Breite"), + ("within_text", "Text_zum_Suchen"), + ("wrap_count", "Anzahl_der_Werte_pro_Zeile_oder_Spalte"), + ("x", "x"), + ("x_num", "x_Koordinate"), + ("x_range", "x_Bereich"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "y_Koordinate"), + ("year", "Jahr"), + ("yld", "Anlagerendite"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/el.rs b/crates/ui-egui/src/i18n/el.rs index ec42b34739..08314a79f3 100644 --- a/crates/ui-egui/src/i18n/el.rs +++ b/crates/ui-egui/src/i18n/el.rs @@ -5,6 +5,9 @@ /// Returns the Greek translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Report Layout|Outline" => "Διάρθρωση", + "Borders|None" => "Κανένα", + "Page {page}" => "Σελίδα {page}", "Diagram" => "Διάγραμμα", "Decorative Text" => "Διακοσμητικό κείμενο", "Paste" => "Επικόλληση", @@ -324,7 +327,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Save the workbook as a web page." => "Αποθηκεύστε το βιβλίο εργασίας ως ιστοσελίδα.", "Options|General" => "Γενικά", "Options|Save" => "Αποθήκευση", - "Options|Editing" => "Editing", + "Options|Editing" => "Επεξεργασία", "Show formula bar" => "Εμφάνιση γραμμής τύπων", "Enable AutoComplete for cell values" => "Ενεργοποίηση αυτόματης συμπλήρωσης τιμών κελιών", "Save .xlsx workbooks automatically after every change" => "Αυτόματη αποθήκευση βιβλίων .xlsx μετά από κάθε αλλαγή", @@ -664,6 +667,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Values and number formats" => "Τιμές και μορφές αριθμών", "Operation" => "Πράξη", "Add" => "Πρόσθεση", + "Paste Special|Add" => "Πρόσθεση", "Subtract" => "Αφαίρεση", "Multiply" => "Πολλαπλασιασμός", "Divide" => "Διαίρεση", @@ -701,6 +705,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Tab" => "Στηλοθέτης", "Semicolon" => "Ερωτηματικό (;)", "Comma" => "Κόμμα", + "Text to Columns|Comma" => "Κόμμα", "Space" => "Διάστημα", "Other:" => "Άλλο:", "Treat consecutive delimiters as one" => "Αντιμετώπιση διαδοχικών διαχωριστικών ως ενός", @@ -1010,6 +1015,25 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Recording" => "Καταγραφή", "New Macro" => "Νέα μακροεντολή", "Show" => "Εμφάνιση", + "Generated|Column" => "Στήλη", + "Generated|Row" => "Γραμμή", + "Book" => "Βιβλίο", + "Sheet" => "Φύλλο", + "Count Numbers" => "Πλήθος αριθμών", + "Type to filter…" => "Πληκτρολογήστε για φιλτράρισμα…", + "Nothing to paste." => "Δεν υπάρχουν δεδομένα για επικόλληση.", + "No cells were found." => "Δεν βρέθηκαν κελιά.", + "Or select a category:" => "Ή επιλέξτε κατηγορία:", + "Most Recently Used" => "Πρόσφατα χρησιμοποιημένες", + "Insert Function…" => "Εισαγωγή συνάρτησης…", + "Paste Names…" => "Επικόλληση ονομάτων…", + "Macro name:" => "Όνομα μακροεντολής:", + "Shortcut key:" => "Πλήκτρο συντόμευσης:", + "Description:" => "Περιγραφή:", + "Check for Updates…" => "Έλεγχος ενημερώσεων…", + "Checking for updates…" => "Γίνεται έλεγχος ενημερώσεων…", + "Could not check for updates." => "Δεν ήταν δυνατός ο έλεγχος ενημερώσεων.", + "Check Again" => "Έλεγχος ξανά", "Collapse dialog" => "Σύμπτυξη παραθύρου διαλόγου", "Expand dialog" => "Ανάπτυξη παραθύρου διαλόγου", _ => return None, diff --git a/crates/ui-egui/src/i18n/el_functions.rs b/crates/ui-egui/src/i18n/el_functions.rs new file mode 100644 index 0000000000..551536a116 --- /dev/null +++ b/crates/ui-egui/src/i18n/el_functions.rs @@ -0,0 +1,1035 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 για το θετικό, -1 για το αρνητικό και 0 για το μηδέν."), + ("A random integer between two bounds, inclusive.", "Ένας τυχαίος ακέραιος μεταξύ δύο ορίων, συμπεριλαμβανομένων."), + ("A random number between 0 and 1, recalculated every time.", "Ένας τυχαίος αριθμός μεταξύ 0 και 1, που υπολογίζεται εκ νέου κάθε φορά."), + ("A range or array without its blank outer rows and columns.", "Μια περιοχή ή πίνακας χωρίς τις κενές εξωτερικές σειρές και στήλες."), + ("A reference shifted from a starting point.", "Μια αναφορά μετατοπίστηκε από ένα σημείο εκκίνησης."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Στατιστικό του μοντέλου FORECAST.ETS: 1 άλφα, 2 βήτα, 3 γάμμα, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 μέγεθος βήματος.", + ), + ("A subtotal that can skip hidden rows.", "Μερικό άθροισμα που μπορεί να παρακάμψει κρυφές γραμμές."), + ("Absolute value (modulus) of a complex number.", "Απόλυτη τιμή (μέτρο) μιγαδικού αριθμού."), + ("Absolute value of a number.", "Απόλυτη τιμή ενός αριθμού."), + ("Accrued interest of a security paying interest at maturity.", "Δεδουλευμένοι τόκοι ομολόγου που πληρώνει τόκους στη λήξη."), + ("Accrued interest of a security paying periodic interest.", "Δεδουλευμένοι τόκοι ομολόγου που καταβάλλει περιοδικούς τόκους."), + ("Accumulates an array into one value.", "Συγκεντρώνει έναν πίνακα σε μία τιμή."), + ("Adds all the numbers in the arguments.", "Προσθέτει όλους τους αριθμούς που δίνονται ως ορίσματα."), + ( + "Adds the cells that meet a condition.", + "Επιστρέφει το άθροισμα των αριθμητικών τιμών σε κελιά υπολογιστικού φύλλου που ικανοποιούν μια συνθήκη.", + ), + ( + "Adds the cells that meet every condition.", + "Επιστρέφει το άθροισμα των αριθμητικών τιμών σε κελιά υπολογιστικού φύλλου που ικανοποιούν όλες τις συνθήκες.", + ), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Επιστρέφει το άθροισμα των αριθμητικών τιμών σε ένα πεδίο βάσης δεδομένων, για εγγραφές που πληρούν τα κριτήρια.", + ), + ("Adds the squares of the numbers.", "Προσθέτει τα τετράγωνα των αριθμών."), + ( + "Amount received at maturity for a fully invested security.", + "Ποσό που λαμβάνεται στη λήξη χρεογράφου στο οποίο έχει επενδυθεί πλήρως το κεφάλαιο.", + ), + ("An aggregate that can skip hidden rows and errors.", "Συγκεντρωτικός υπολογισμός που μπορεί να παρακάμψει κρυφές γραμμές και σφάλματα."), + ("Angle of a complex number in radians.", "Γωνία μιγαδικού αριθμού σε ακτίνια."), + ("Angle of the point (x, y) from the x-axis in radians.", "Γωνία του σημείου (x, y) από τον άξονα x σε ακτίνια."), + ("Annual yield of a discounted security.", "Ετήσια απόδοση εκπτωτικού ομολόγου."), + ("Annual yield of a security paying interest at maturity.", "Ετήσια απόδοση ενός ομολόγου που πληρώνει τόκους στη λήξη."), + ("Applies a LAMBDA to each column.", "Εφαρμόζει ένα LAMBDA σε κάθε στήλη."), + ("Applies a LAMBDA to each row.", "Εφαρμόζει ένα LAMBDA σε κάθε σειρά."), + ("Applies a LAMBDA to each value.", "Εφαρμόζει ένα LAMBDA σε κάθε τιμή."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Κατά προσέγγιση αναζήτηση σε ταξινομημένο διάνυσμα ή στην πρώτη γραμμή/στήλη ενός πίνακα.", + ), + ("Arccosine in radians.", "Αντίστροφο συνημίτονο σε ακτίνια."), + ("Arccotangent in radians (0 to pi).", "Αντίστροφη συνεφαπτομένη σε ακτίνια (0 έως pi)."), + ("Arcsine in radians.", "Αντίστροφο ημίτονο σε ακτίνια."), + ("Arctangent in radians.", "Αντίστροφη εφαπτομένη σε ακτίνια."), + ("Arithmetic mean of the numbers.", "Αριθμητικός μέσος όρος των αριθμών."), + ("Average absolute deviation from the mean.", "Μέση απόλυτη απόκλιση από το μέσο όρο."), + ("Average of the cells that meet a condition.", "Μέσος όρος των κελιών υπολογιστικού φύλλου που πληρούν μια συνθήκη."), + ("Average of the cells that meet every condition.", "Μέσος όρος των κελιών υπολογιστικού φύλλου που πληρούν κάθε προϋπόθεση."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Εκφράζει τους μέσους όρους των αριθμών σε ένα πεδίο των εγγραφών που πληρούν τα κριτήρια.", + ), + ("Base-10 logarithm of a complex number.", "Βάση-10 λογάριθμος μιγαδικού αριθμού."), + ("Base-10 logarithm.", "Βάση-10 λογάριθμος."), + ("Base-2 logarithm of a complex number.", "Βάση-2 λογάριθμος μιγαδικού αριθμού."), + ("Bessel function of the first kind, J_n(x).", "Συνάρτηση Bessel πρώτου είδους, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Συνάρτηση Bessel δεύτερου είδους, Y_n(x)."), + ("Beta distribution density or probability.", "Πυκνότητα ή πιθανότητα διανομής βήτα."), + ("Binomial probability.", "Διωνυμική πιθανότητα."), + ("Bitwise AND of two non-negative integers.", "Bitwise AND δύο μη αρνητικών ακεραίων."), + ("Bitwise OR of two non-negative integers.", "Bitwise OR δύο μη αρνητικών ακεραίων."), + ("Bitwise exclusive OR of two non-negative integers.", "Bitwise αποκλειστικό OR δύο μη αρνητικών ακεραίων."), + ("Bond-equivalent yield of a Treasury bill.", "Απόδοση εντόκου γραμματίου του Δημοσίου ισοδύναμη με απόδοση ομολόγου."), + ("Breaks a row or column into columns of the given length.", "Διαχωρίζει μια γραμμή ή στήλη σε στήλες του δεδομένου μήκους."), + ("Breaks a row or column into rows of the given length.", "Διαχωρίζει μια γραμμή ή στήλη σε σειρές του δεδομένου μήκους."), + ("Builds a cell address as text from row and column numbers.", "Δημιουργεί μια διεύθυνση κελιού ως κείμενο από αριθμούς σειρών και στηλών."), + ( + "Builds a complex number as text from real and imaginary parts.", + "Δημιουργεί έναν μιγαδικό αριθμό ως κείμενο από το πραγματικό και το φανταστικό μέρος.", + ), + ("Builds a date serial number from a year, month and day.", "Δημιουργεί έναν σειριακό αριθμό ημερομηνίας από έτος, μήνα και ημέρα."), + ( + "Builds a summary table grouping values by row and column fields.", + "Δημιουργεί έναν συνοπτικό πίνακα που ομαδοποιεί τις τιμές κατά πεδία γραμμής και στήλης.", + ), + ( + "Builds a time (a fraction of a day) from hours, minutes and seconds.", + "Χτίζει ένα χρόνο (κλάσμα της ημέρας) από ώρες, λεπτά και δευτερόλεπτα.", + ), + ("Builds an array from a LAMBDA.", "Δημιουργεί έναν πίνακα από ένα LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Δημιουργεί έναν πίνακα ομοιόμορφων κλιμακωτών αριθμών."), + ("Builds an array of random numbers in a range.", "Δημιουργεί έναν πίνακα τυχαίων αριθμών σε ένα εύρος."), + ("Byte version of FIND.", "Έκδοση Byte του FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Έκδοση Byte του LEFT (ίδιο με το LEFT για κείμενο ενός byte)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Έκδοση Byte του LEN (ίδιο με το LEN για κείμενο ενός byte)."), + ("Byte version of MID (same as MID for single-byte text).", "Έκδοση Byte του MID (ίδιο με το MID για κείμενο ενός byte)."), + ("Byte version of REPLACE.", "Έκδοση Byte του REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Έκδοση Byte του RIGHT (ίδιο με το RIGHT για κείμενο ενός byte)."), + ("Byte version of SEARCH.", "Έκδοση Byte του SEARCH."), + ("Capitalises the first letter of each word and lower-cases the rest.", "Σημειώνει κεφαλαία το πρώτο γράμμα κάθε λέξης και πεζά τα υπόλοιπα."), + ("Chi-squared density or left-tailed probability.", "Πυκνότητα χ-τετράγωνο ή πιθανότητα με αριστερή ουρά."), + ("Chi-squared test of independence.", "Τεστ ανεξαρτησίας Χι-τετράγωνο."), + ("Column number of a reference.", "Ο αριθμός στήλης μιας αναφοράς."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Συγκρίνει μια έκφραση με μια λίστα τιμών και επιστρέφει το αποτέλεσμα που συσχετίστηκε με την πρώτη αντιστοίχιση.", + ), + ("Complementary error function, 1 - ERF(x).", "Συμπληρωματική συνάρτηση σφάλματος, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Μιγαδικό συζυγές μιγαδικού αριθμού."), + ("Confidence interval half-width using Student's t distribution.", "Το μισό πλάτος του διαστήματος εμπιστοσύνης με την κατανομή t του Student."), + ("Confidence interval half-width using the normal distribution.", "Το μισό πλάτος του διαστήματος εμπιστοσύνης με την κανονική κατανομή."), + ("Converts Roman numerals to a number.", "Μετατρέπει τους λατινικούς αριθμούς σε αριθμό."), + ("Converts a binary number to decimal.", "Μετατρέπει έναν δυαδικό αριθμό σε δεκαδικό."), + ("Converts a binary number to hexadecimal.", "Μετατρέπει έναν δυαδικό αριθμό σε δεκαεξαδικό."), + ("Converts a binary number to octal.", "Μετατρέπει έναν δυαδικό αριθμό σε οκταδικό."), + ("Converts a date written as text into a date serial number.", "Μετατρέπει μια ημερομηνία γραμμένη ως κείμενο σε σειριακό αριθμό ημερομηνίας."), + ("Converts a decimal number to binary.", "Μετατρέπει έναν δεκαδικό αριθμό σε δυαδικό."), + ("Converts a decimal number to hexadecimal.", "Μετατρέπει έναν δεκαδικό αριθμό σε δεκαεξαδικό."), + ("Converts a decimal number to octal.", "Μετατρέπει έναν δεκαδικό αριθμό σε οκταδικό."), + ("Converts a decimal price to fractional notation.", "Μετατρέπει μια δεκαδική τιμή σε κλασματικό συμβολισμό."), + ("Converts a fractional price notation to a decimal number.", "Μετατρέπει μια τιμή από κλασματικό συμβολισμό σε δεκαδικό αριθμό."), + ("Converts a hexadecimal number to binary.", "Μετατρέπει έναν δεκαεξαδικό αριθμό σε δυαδικό."), + ("Converts a hexadecimal number to decimal.", "Μετατρέπει έναν δεκαεξαδικό αριθμό σε δεκαδικό."), + ("Converts a hexadecimal number to octal.", "Μετατρέπει έναν δεκαεξαδικό αριθμό σε οκταδικό."), + ("Converts a measurement from one unit to another.", "Μετατρέπει μια μέτρηση από μια μονάδα σε μια άλλη."), + ("Converts a number to Roman numerals in one of five styles.", "Μετατρέπει έναν αριθμό σε λατινικούς αριθμούς σε ένα από τα πέντε στυλ."), + ("Converts a time written as text into a fraction of a day.", "Μετατρέπει μια ώρα γραμμένη ως κείμενο σε κλάσμα της ημέρας."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Μετατρέπει μια τιμή σε αριθμό: οι αριθμοί παραμένουν, το TRUE είναι 1, όλα τα άλλα είναι 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Μετατρέπει έναν πίνακα σε κείμενο, είτε ως λίστα κόμματος είτε ως αυστηρή σταθερά πίνακα.", + ), + ("Converts an octal number to binary.", "Μετατρέπει έναν οκταδικό αριθμό σε δυαδικό."), + ("Converts an octal number to decimal.", "Μετατρέπει έναν οκταδικό αριθμό σε δεκαδικό."), + ("Converts an octal number to hexadecimal.", "Μετατρέπει έναν οκταδικό αριθμό σε δεκαεξαδικό."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Μετατρέπει οποιαδήποτε τιμή σε κείμενο, προαιρετικά σε αυστηρή (εισαγωγική) μορφή.", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Μετατρέπει μεταξύ του ευρώ και των νομισμάτων πρώην μελών του ευρώ με σταθερές ισοτιμίες.", + ), + ("Converts degrees to radians.", "Μετατρέπει μοίρες σε ακτίνια."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Μετατρέπει χαρακτήρες πλήρους πλάτους σε μισό πλάτος (καμία αλλαγή για κείμενο ενός byte).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Μετατρέπει χαρακτήρες μισού πλάτους σε πλήρους πλάτους (καμία αλλαγή σε αυτήν την τοπική ρύθμιση).", + ), + ("Converts radians to degrees.", "Μετατρέπει τα ακτίνια σε μοίρες."), + ("Converts text that looks like a number, date or time into a number.", "Μετατρέπει κείμενο που μοιάζει με αριθμό, ημερομηνία ή ώρα σε αριθμό."), + ( + "Converts text to a number using the given decimal and group separators.", + "Μετατρέπει κείμενο σε αριθμό χρησιμοποιώντας τα δεδομένα διαχωριστικά δεκαδικών και ομάδων.", + ), + ("Converts text to lower case.", "Μετατρέπει το κείμενο σε πεζά."), + ("Converts text to upper case.", "Μετατρέπει το κείμενο σε κεφαλαία."), + ("Correlation coefficient of two data sets.", "Συντελεστής συσχέτισης δύο συνόλων δεδομένων."), + ("Cosecant of a complex number.", "Συντέμνουσα μιγαδικού αριθμού."), + ("Cosecant of an angle in radians.", "Συντέμνουσα γωνίας σε ακτίνια."), + ("Cosine of a complex number.", "Συνημίτονο μιγαδικού αριθμού."), + ("Cosine of an angle in radians.", "Συνημίτονο γωνίας σε ακτίνια."), + ("Cotangent of a complex number.", "Συνεφαπτομένη μιγαδικού αριθμού."), + ("Cotangent of an angle in radians.", "Συνεφαπτομένη γωνίας σε ακτίνια."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Μετρά ημέρες μεταξύ δύο ημερομηνιών σε ένα έτος 360 ημερών (US ή ευρωπαϊκή μέθοδος).", + ), + ("Counts empty cells and empty text in a range.", "Μετρά κενά κελιά υπολογιστικού φύλλου και κενό κείμενο σε μια περιοχή."), + ("Counts how many values fall into each bin, as a vertical array.", "Μετρά πόσες τιμές εμπίπτουν σε κάθε κάδο, ως κατακόρυφος πίνακας."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Μετρά μη κενά κελιά υπολογιστικού φύλλου σε ένα πεδίο των αντίστοιχων εγγραφών (ή των αντίστοιχων εγγραφών).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Μετρά αριθμητικά κελιά υπολογιστικού φύλλου σε ένα πεδίο των αντίστοιχων εγγραφών (ή των αντίστοιχων εγγραφών).", + ), + ("Counts the cells that meet a condition.", "Μετρά τα κελιά υπολογιστικού φύλλου που πληρούν μια συνθήκη."), + ("Counts the cells that meet every condition.", "Μετρά τα κελιά υπολογιστικού φύλλου που πληρούν κάθε συνθήκη."), + ("Counts the characters in a text.", "Μετρά τους χαρακτήρες σε ένα κείμενο."), + ("Counts the columns in an array or range.", "Μετρά τις στήλες σε έναν πίνακα ή ένα εύρος."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Μετρά τα στοιχεία σε ένα σετ κύβου (χωρίς συνδέσεις κύβων, #N/A)."), + ("Counts the non-empty values.", "Μετρά τις μη κενές τιμές."), + ("Counts the numbers.", "Μετρά τους αριθμούς."), + ("Counts the rows in an array or range.", "Μετρά τις σειρές σε έναν πίνακα ή ένα εύρος."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Μετρά ολόκληρα χρόνια, μήνες ή ημέρες μεταξύ δύο ημερομηνιών. μονάδα: Y, M, D, MD, YM ή YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Μετρά εργάσιμες ημέρες (Δευτέρα έως Παρασκευή) μεταξύ δύο ημερομηνιών, εξαιρουμένων των αργιών.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Μετρά εργάσιμες ημέρες μεταξύ δύο ημερομηνιών με προσαρμοσμένο Σαββατοκύριακο, εξαιρουμένων των αργιών.", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "Δημιουργεί έναν σύνδεσμο· το κελί δείχνει το φιλικό όνομα ή τον ίδιο τον σύνδεσμο.", + ), + ("Creates a reusable custom function.", "Δημιουργεί μια επαναχρησιμοποιήσιμη προσαρμοσμένη συνάρτηση."), + ("Cumulative beta probability.", "Αθροιστική πιθανότητα beta."), + ("Cumulative lognormal probability.", "Αθροιστική πιθανότητα λογαριθμοκανονικής κατανομής."), + ("Cuts off the fractional part of a number at the given digits.", "Κόβει το κλασματικό μέρος ενός αριθμού στα δοσμένα ψηφία."), + ("Days from settlement to the next coupon date.", "Ημέρες από τον διακανονισμό έως την επόμενη ημερομηνία πληρωμής τόκων."), + ("Days from the start of the coupon period to settlement.", "Ημέρες από την έναρξη της περιόδου πληρωμής των τόκων έως τον διακανονισμό."), + ("Days in the coupon period that contains settlement.", "Ημέρες στην περίοδο πληρωμής τόκων που περιέχει διακανονισμό."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Απόσβεση με τη μέθοδο φθίνοντος υπολοίπου για οποιοδήποτε διάστημα περιόδων, με μετάβαση στη σταθερή μέθοδο.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Καθορίζει ένα σύνολο μελών κύβου (χωρίς συνδέσεις κύβου, #N/A)."), + ("Determinant of a square matrix.", "Ορίζουσα τετραγωνικού πίνακα."), + ("Difference of two complex numbers.", "Διαφορά δύο μιγαδικών αριθμών."), + ("Discount rate of a security.", "Προεξοφλητικό επιτόκιο ομολόγου."), + ("Double factorial of a number.", "Διπλό παραγοντικό ενός αριθμού."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Απόσβεση με διπλάσιο ρυθμό φθίνοντος υπολοίπου (ή άλλο συντελεστή) για μία περίοδο.", + ), + ( + "Effective annual rate from a nominal rate and compounding periods.", + "Πραγματικό ετήσιο επιτόκιο από ονομαστικό επιτόκιο και περιόδους ανατοκισμού.", + ), + ("Equivalent interest rate for the growth of an investment.", "Ισοδύναμο επιτόκιο για την ανάπτυξη μιας επένδυσης."), + ( + "Error function integrated from 0 to a limit, or between two limits.", + "Συνάρτηση σφάλματος με ολοκλήρωση από το 0 έως ένα όριο ή μεταξύ δύο ορίων.", + ), + ("Error function integrated from 0 to x.", "Συνάρτηση σφάλματος με ολοκλήρωση από το 0 έως το x."), + ("Excess kurtosis of a sample.", "Υπερβάλλουσα κύρτωση δείγματος."), + ( + "Exponential curve coefficients and optional regression statistics.", + "Συντελεστές εκθετικής καμπύλης και προαιρετικά στατιστικά παλινδρόμησης.", + ), + ("Exponential distribution density or probability.", "Εκθετική πυκνότητα κατανομής ή πιθανότητα."), + ("Exponential of a complex number.", "Εκθετική ενός μιγαδικού αριθμού."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Εξάγει δεδομένα από το XML με XPath (δεν είναι διαθέσιμο, επιστρέφει το #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Εξάγει την πρώτη αντιστοίχιση, όλες τις αντιστοιχίσεις ή τις ομάδες σύλληψης μιας κανονικής έκφρασης.", + ), + ("F distribution density or left-tailed probability.", "F πυκνότητα κατανομής ή πιθανότητα με αριστερή ουρά."), + ("Factorial of a number.", "Παραγοντικό ενός αριθμού."), + ( + "Fetches data from a web service (not available; returns #VALUE!).", + "Ανακτά δεδομένα από μια υπηρεσία ιστού (μη διαθέσιμη, επιστρέφει το #VALUE!).", + ), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Βρίσκει μια τιμή στην πρώτη στήλη ενός πίνακα και επιστρέφει την τιμή στην ίδια γραμμή μιας άλλης στήλης.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Βρίσκει μια τιμή στην πρώτη γραμμή ενός πίνακα και επιστρέφει την τιμή στην ίδια στήλη μιας άλλης γραμμής.", + ), + ("Finds the position of one text in another (case-sensitive).", "Βρίσκει τη θέση ενός κειμένου σε άλλο (με διάκριση πεζών-κεφαλαίων)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Βρίσκει τη θέση ενός κειμένου σε ένα άλλο, αγνοώντας πεζά και επιτρέποντας χαρακτήρες μπαλαντέρ.", + ), + ("Fisher transformation.", "Μεταμόρφωση Fisher."), + ("Fixed-declining-balance depreciation for a period.", "Απόσβεση με σταθερό ρυθμό φθίνοντος υπολοίπου για μία περίοδο."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Ισοπεδώνει έναν πίνακα σε μία στήλη, προαιρετικά παρακάμπτοντας κενά ή σφάλματα.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Ισιώνει έναν πίνακα σε μία μόνο σειρά, παραλείποντας προαιρετικά κενά ή σφάλματα.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Προβλέπει μια τιμή κατά πρόσθετο (AAA) εκθετική εξομάλυνση."), + ("Formats a number as currency text, like DOLLAR.", "Μορφοποιεί έναν αριθμό ως κείμενο νομίσματος, όπως το DOLLAR."), + ("Formats a number as currency text.", "Μορφοποιεί έναν αριθμό ως κείμενο νομίσματος."), + ("Formats a number as text.", "Μορφοποιεί έναν αριθμό ως κείμενο."), + ("French degressive depreciation with a life-based coefficient.", "Γαλλική φθίνουσα απόσβεση με συντελεστή ζωής."), + ("French linear depreciation prorated for the first period.", "Γαλλική γραμμική απόσβεση αναλογική για την πρώτη περίοδο."), + ("Future value of a principal after a series of compound rates.", "Μελλοντική αξία κεφαλαίου μετά από μια σειρά σύνθετων επιτοκίων."), + ("Future value of an investment with constant payments and rate.", "Μελλοντική αξία επένδυσης με σταθερές πληρωμές και επιτόκιο."), + ("Gamma distribution density or probability.", "Πυκνότητα ή πιθανότητα κατανομής γάμμα."), + ("Geometric mean of positive numbers.", "Γεωμετρικός μέσος όρος θετικών αριθμών."), + ("Greatest common divisor of integers.", "Μεγαλύτερος κοινός διαιρέτης ακεραίων."), + ( + "Groups rows by key fields and aggregates the values of each group.", + "Ομαδοποιεί σειρές κατά πεδία-κλειδιά και συγκεντρώνει τις τιμές κάθε ομάδας.", + ), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Μεγαλώνει έναν πίνακα στο δεδομένο μέγεθος, γεμίζοντας νέα κελιά υπολογιστικού φύλλου με μια τιμή pad.", + ), + ( + "Half-width of the confidence interval around a FORECAST.ETS value.", + "Το μισό πλάτος του διαστήματος εμπιστοσύνης γύρω από μια τιμή FORECAST.ETS.", + ), + ("Harmonic mean of positive numbers.", "Αρμονικός μέσος όρος θετικών αριθμών."), + ("Hyperbolic cosecant of a complex number.", "Υπερβολική συντέμνουσα μιγαδικού αριθμού."), + ("Hyperbolic cosecant.", "Υπερβολική συντέμνουσα."), + ("Hyperbolic cosine of a complex number.", "Υπερβολικό συνημίτονο μιγαδικού αριθμού."), + ("Hyperbolic cosine.", "Υπερβολικό συνημίτονο."), + ("Hyperbolic cotangent.", "Υπερβολική συνεφαπτομένη."), + ("Hyperbolic secant of a complex number.", "Υπερβολική τέμνουσα μιγαδικού αριθμού."), + ("Hyperbolic secant.", "Υπερβολική τέμνουσα."), + ("Hyperbolic sine of a complex number.", "Υπερβολικό ημίτονο μιγαδικού αριθμού."), + ("Hyperbolic sine.", "Υπερβολικό ημίτονο."), + ("Hyperbolic tangent.", "Υπερβολική εφαπτομένη."), + ("Hypergeometric probability of an exact count.", "Υπεργεωμετρική πιθανότητα συγκεκριμένου πλήθους επιτυχιών."), + ("Hypergeometric probability.", "Υπεργεωμετρική πιθανότητα."), + ("Identity matrix of the given size.", "Μοναδιαίος πίνακας του δεδομένου μεγέθους."), + ("Imaginary coefficient of a complex number.", "Φανταστικός συντελεστής μιγαδικού αριθμού."), + ("Information about a cell.", "Πληροφορίες για ένα κελί."), + ("Integer part of a division.", "Ακέραιο μέρος μιας διαίρεσης."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Τόκοι που καταβάλλονται σε μία περίοδο δανείου με ίσες αποπληρωμές κεφαλαίου.", + ), + ("Interest part of a given period's payment.", "Μέρος τόκου της πληρωμής μιας δεδομένης περιόδου."), + ("Interest rate of a fully invested security.", "Επιτόκιο χρεογράφου στο οποίο έχει επενδυθεί πλήρως το κεφάλαιο."), + ("Interest rate per period of an annuity, found iteratively.", "Επιτόκιο ανά περίοδο προσόδου, που βρέθηκε επαναληπτικά."), + ("Internal rate of return of cash flows on specific dates.", "Εσωτερικός συντελεστής απόδοσης ταμειακών ροών σε συγκεκριμένες ημερομηνίες."), + ("Internal rate of return of periodic cash flows.", "Εσωτερικός συντελεστής απόδοσης περιοδικών ταμειακών ροών."), + ("Inverse hyperbolic cosine.", "Αντίστροφο υπερβολικό συνημίτονο."), + ("Inverse hyperbolic cotangent.", "Αντίστροφη υπερβολική συνεφαπτομένη."), + ("Inverse hyperbolic sine.", "Αντίστροφο υπερβολικό ημίτονο."), + ("Inverse hyperbolic tangent.", "Αντίστροφη υπερβολική εφαπτομένη."), + ("Inverse of a square matrix.", "Αντίστροφος τετραγωνικού πίνακα."), + ("Inverse of the Fisher transformation.", "Αντίστροφη μεταμόρφωση Fisher."), + ("Inverse of the cumulative beta distribution.", "Αντίστροφη της αθροιστικής διανομής beta."), + ("Inverse of the cumulative lognormal distribution.", "Αντίστροφη της αθροιστικής λογαριθμικής κανονικής κατανομής."), + ("Inverse of the gamma cumulative distribution.", "Αντίστροφη της αθροιστικής κατανομής γάμμα."), + ("Inverse of the left-tailed F distribution.", "Αντίστροφη της αριστερής ουράς κατανομής F."), + ("Inverse of the left-tailed chi-squared distribution.", "Αντίστροφη της αριστερής ουράς χ-τετράγωνης κατανομής."), + ("Inverse of the normal cumulative distribution.", "Αντίστροφη της κανονικής αθροιστικής κατανομής."), + ("Inverse of the right-tailed F distribution.", "Αντίστροφη της δεξιάς ουράς κατανομής F."), + ("Inverse of the right-tailed chi-squared distribution.", "Αντίστροφη της δεξιάς ουράς κατανομής χ-τετράγωνο."), + ("Inverse of the standard normal cumulative distribution.", "Αντίστροφη της τυπικής κανονικής αθροιστικής κατανομής."), + ("Joins several text values into one.", "Ενώνει πολλές τιμές κειμένου σε μία."), + ("Joins text from values and every cell of ranges, without a separator.", "Ενώνει κείμενο από τιμές και κάθε κελί περιοχών, χωρίς διαχωριστικό."), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Ενώνει κείμενο από τιμές και εύρη με οριοθέτη, προαιρετικά παρακάμπτοντας κενά στοιχεία.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Διατηρεί σειρές ή στήλες από την αρχή (ή το τέλος) ενός πίνακα."), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Διατηρεί τις γραμμές ή τις στήλες ενός πίνακα για τις οποίες η ένδειξη συμπερίληψης είναι TRUE.", + ), + ("Largest number (0 when there are none).", "Μεγαλύτερος αριθμός (0 όταν δεν υπάρχει)."), + ("Largest number in a field of the matching records.", "Ο μεγαλύτερος αριθμός σε ένα πεδίο των αντίστοιχων εγγραφών."), + ("Largest value among cells that meet every condition.", "Η μεγαλύτερη τιμή μεταξύ των κελιών υπολογιστικού φύλλου που πληρούν κάθε προϋπόθεση."), + ("Largest value counting text as 0 and logicals as 1/0.", "Μεγαλύτερη τιμή, με το κείμενο να υπολογίζεται ως 0 και τις λογικές τιμές ως 1/0."), + ("Least common multiple of integers.", "Ελάχιστο κοινό πολλαπλάσιο ακεραίων."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Συντελεστές γραμμής ελάχιστου τετραγώνου και προαιρετικά στατιστικά παλινδρόμησης.", + ), + ("Left-tailed inverse of Student's t distribution.", "Αντίστροφη της κατανομής t του Student για την αριστερή ουρά."), + ("Length of the repeating pattern detected in a time series.", "Μήκος του επαναλαμβανόμενου μοτίβου που εντοπίστηκε σε μια χρονολογική σειρά."), + ("Logarithm to the given base (10 by default).", "Λογάριθμος στη δεδομένη βάση (10 από προεπιλογή)."), + ("Lognormal density or probability.", "Πυκνότητα ή πιθανότητα λογαριθμοκανονικής κατανομής."), + ("Macaulay duration of a security with periodic interest.", "Διάρκεια Macaulay χρεογράφου με περιοδικούς τόκους."), + ("Matrix product of two arrays.", "Γινόμενο πίνακα δύο πινάκων."), + ("Mean after trimming a fraction of points from both ends.", "Μέσος όρος μετά την αφαίρεση ενός ποσοστού των τιμών από τα δύο άκρα."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Μέσος όρος, με το κείμενο να υπολογίζεται ως 0 και τις λογικές τιμές ως 1 ή 0."), + ("Middle value of the numbers.", "Διάμεσος των αριθμών."), + ("Modified Bessel function of the first kind, I_n(x).", "Τροποποιημένη συνάρτηση Bessel πρώτου είδους, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Τροποποιημένη συνάρτηση Bessel δεύτερου είδους, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Τροποποιημένη διάρκεια χρεογράφου με περιοδικούς τόκους."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Τροποποιημένο εσωτερικό επιτόκιο απόδοσης με χρήση χωριστών επιτοκίων δανεισμού και επανεπένδυσης.", + ), + ("Most frequently occurring number.", "Αριθμός που εμφανίζεται πιο συχνά."), + ("Multiplies all the numbers in the arguments.", "Πολλαπλασιάζει όλους τους αριθμούς στα ορίσματα."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Πολλαπλασιάζει τα αντίστοιχα στοιχεία πινάκων ίδιου μεγέθους και προσθέτει τα γινόμενα.", + ), + ("Multiplies the numbers in a field of the matching records.", "Πολλαπλασιάζει τους αριθμούς σε ένα πεδίο των αντίστοιχων εγγραφών."), + ("Names intermediate results.", "Ονομάζει ενδιάμεσα αποτελέσματα."), + ("Natural log of the gamma function.", "Φυσικός λογάριθμος της συνάρτησης γάμμα."), + ("Natural logarithm of a complex number.", "Φυσικός λογάριθμος μιγαδικού αριθμού."), + ("Natural logarithm.", "Φυσικός λογάριθμος."), + ("Negative binomial probability.", "Αρνητική διωνυμική πιθανότητα."), + ("Net present value of cash flows on specific dates.", "Καθαρή παρούσα αξία ταμειακών ροών σε συγκεκριμένες ημερομηνίες."), + ("Net present value of periodic cash flows at a discount rate.", "Καθαρή παρούσα αξία περιοδικών ταμειακών ροών με προεξοφλητικό επιτόκιο."), + ("Next coupon date after settlement.", "Επόμενη ημερομηνία πληρωμής τόκων μετά τον διακανονισμό."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Ονομαστικό ετήσιο επιτόκιο από πραγματικό επιτόκιο και περιόδους ανατοκισμού.", + ), + ("Normal distribution density or cumulative probability.", "Κανονική πυκνότητα κατανομής ή αθροιστική πιθανότητα."), + ("Number of areas in a reference.", "Αριθμός περιοχών σε μια αναφορά."), + ("Number of combinations with repetition.", "Αριθμός συνδυασμών με επανάληψη."), + ("Number of combinations without repetition.", "Αριθμός συνδυασμών χωρίς επανάληψη."), + ("Number of coupons payable between settlement and maturity.", "Αριθμός πληρωμών τόκων μεταξύ διακανονισμού και λήξης."), + ("Number of ordered selections with repetition.", "Αριθμός διατεταγμένων επιλογών με επανάληψη."), + ("Number of ordered selections without repetition.", "Αριθμός διατεταγμένων επιλογών χωρίς επανάληψη."), + ( + "Number of periods needed to pay off or accumulate an amount.", + "Αριθμός περιόδων που απαιτούνται για την εξόφληση ή τη συγκέντρωση ενός ποσού.", + ), + ("Number of sheets.", "Αριθμός φύλλων."), + ("One- or two-tailed Student's t probability.", "Πιθανότητα μίας ή δύο ουρών της κατανομής t του Student."), + ("One-tailed probability of a z-test.", "Πιθανότητα μονής ουράς για ένα τεστ z."), + ("Pearson product-moment correlation coefficient.", "Συντελεστής γραμμικής συσχέτισης Pearson."), + ("Percent-encodes text for use in a URL.", "Κωδικοποιεί κείμενο με ποσοστιαία κωδικοποίηση για χρήση σε URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Περιοδική πληρωμή για δάνειο ή πρόσοδο με σταθερές πληρωμές και επιτόκιο.", + ), + ("Periods needed for an investment to grow to a target value.", "Περίοδοι που απαιτούνται για να φτάσει μια επένδυση σε μια τιμή στόχο."), + ("Picks a value from the list by its position.", "Επιλέγει μια τιμή από τη λίστα με βάση τη θέση της."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Επιλέγει στήλες ενός πίνακα ανά θέση (αρνητικές μετρήσεις από το τέλος).", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Επιλέγει σειρές ενός πίνακα ανά θέση (αρνητικές μετρήσεις από το τέλος).", + ), + ("Places arrays side by side.", "Τοποθετεί πίνακες δίπλα-δίπλα."), + ("Poisson probability.", "Πιθανότητα Poisson."), + ("Population covariance of paired values.", "Συνδιακύμανση πληθυσμού ζευγαρωμένων τιμών."), + ("Population skewness.", "Ασυμμετρία πληθυσμού."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Τυπική απόκλιση πληθυσμού, με το κείμενο να υπολογίζεται ως 0 και τις λογικές τιμές ως 1/0.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Τυπική απόκλιση πληθυσμού ενός πεδίου πάνω από τις αντίστοιχες εγγραφές.", + ), + ("Population standard deviation.", "Τυπική απόκλιση πληθυσμού."), + ( + "Population variance counting text as 0 and logicals as 1/0.", + "Διακύμανση πληθυσμού, με το κείμενο να υπολογίζεται ως 0 και τις λογικές τιμές ως 1/0.", + ), + ("Population variance of a field over the matching records.", "Διακύμανση πληθυσμού ενός πεδίου στις αντίστοιχες εγγραφές."), + ("Population variance.", "Διακύμανση πληθυσμού."), + ("Positive square root.", "Θετική τετραγωνική ρίζα."), + ("Predicts a value along a linear trend.", "Προβλέπει μια τιμή κατά μήκος μιας γραμμικής τάσης."), + ("Present value of a series of equal future payments.", "Παρούσα αξία μιας σειράς ίσων μελλοντικών πληρωμών."), + ("Previous coupon date on or before settlement.", "Προηγούμενη ημερομηνία πληρωμής τόκων κατά ή πριν από τον διακανονισμό."), + ("Price per 100 face value of a Treasury bill.", "Τιμή ανά 100 ονομαστική αξία ενός γραμματίου του Δημοσίου."), + ("Price per 100 face value of a discounted security.", "Τιμή ανά 100 ονομαστικής αξίας εκπτωτικού ομολόγου."), + ("Price per 100 face value of a security paying interest at maturity.", "Τιμή ανά 100 ονομαστική αξία ομολόγου που πληρώνει τόκους στη λήξη."), + ("Price per 100 face value of a security paying periodic interest.", "Τιμή ανά 100 ονομαστική αξία ομολόγου που καταβάλλει περιοδικούς τόκους."), + ( + "Price per 100 face value of a security with an odd first period.", + "Τιμή ανά 100 ονομαστικής αξίας ομολόγου με ακανόνιστη περίοδο πρώτου τόκου.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Τιμή ανά 100 ονομαστικής αξίας ομολόγου με ακανόνιστη περίοδο τελευταίου τόκου.", + ), + ("Principal part of a given period's payment.", "Μέρος της πληρωμής μιας δεδομένης περιόδου που αποπληρώνει το κεφάλαιο."), + ("Probability from Student's t-test.", "Πιθανότητα από το Student's t-test."), + ("Probability of a number of successes falling in a range.", "Πιθανότητα να πέσει ένας αριθμός επιτυχιών σε ένα εύρος."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Πιθανότητα ότι μια τυπική κανονική τιμή πέφτει μεταξύ του μέσου όρου και του z.", + ), + ("Probability that values fall between two limits.", "Πιθανότητα οι τιμές να πέφτουν μεταξύ δύο ορίων."), + ("Product of complex numbers.", "Γινόμενο μιγαδικών αριθμών."), + ("Quartile (0–4) of a data set, inclusive method.", "Τεταρτημόριο (0–4) ενός συνόλου δεδομένων, με συμπεριληπτική μέθοδο."), + ("Quartile (0–4) of a data set.", "Τεταρτημόριο (0–4) ενός συνόλου δεδομένων."), + ("Quartile (1–3) of a data set, exclusive method.", "Τεταρτημόριο (1–3) ενός συνόλου δεδομένων, με αποκλειστική μέθοδο."), + ("Quotient of two complex numbers.", "Πηλίκο δύο μιγαδικών αριθμών."), + ("Raises a complex number to a power.", "Ανεβάζει έναν μιγαδικό αριθμό σε δύναμη."), + ("Raises a number to a power.", "Ανεβάζει έναν αριθμό σε δύναμη."), + ("Rank of a number within a list.", "Κατάταξη ενός αριθμού σε μια λίστα."), + ( + "Rank of a number within a list; ties get the average rank.", + "Θέση κατάταξης ενός αριθμού σε λίστα· οι ισοβαθμίες παίρνουν τη μέση θέση κατάταξης.", + ), + ( + "Rank of a number within a list; ties share the top rank.", + "Θέση κατάταξης ενός αριθμού σε λίστα· οι ισοβαθμίες μοιράζονται την υψηλότερη θέση κατάταξης.", + ), + ("Ratio of the factorial of a sum to the product of factorials.", "Λόγος του παραγοντικού ενός αθροίσματος προς το γινόμενο των παραγοντικών."), + ("Reads text in a given base as a number.", "Διαβάζει κείμενο σε μια δεδομένη βάση ως αριθμό."), + ("Real coefficient of a complex number.", "Πραγματικός συντελεστής μιγαδικού αριθμού."), + ("Relative standing of a value as a fraction of the data set.", "Σχετική θέση μιας τιμής ως κλάσμα του συνόλου δεδομένων."), + ("Relative standing of a value from 0 to 1 inclusive.", "Σχετική θέση μιας τιμής από 0 έως 1 συμπεριλαμβανομένων."), + ("Relative standing of a value strictly between 0 and 1.", "Σχετική θέση μιας τιμής αυστηρά μεταξύ 0 και 1."), + ("Remainder of a division, with the sign of the divisor.", "Υπόλοιπο διαίρεσης, με το πρόσημο του διαιρέτη."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Αφαιρεί τα προπορευόμενα και τα τελικά κενά και συμπτύσσει σειρές διαστημάτων σε ένα.", + ), + ("Removes non-printable control characters from text.", "Αφαιρεί μη εκτυπώσιμους χαρακτήρες ελέγχου από το κείμενο."), + ("Removes rows or columns from the start (or end) of an array.", "Καταργεί σειρές ή στήλες από την αρχή (ή το τέλος) ενός πίνακα."), + ("Repeats a text a given number of times.", "Επαναλαμβάνει ένα κείμενο τον καθορισμένο αριθμό φορών."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Αντικαθιστά τις αντιστοιχίσεις μιας κανονικής έκφρασης, όλες ή μια επιλεγμένη εμφάνιση.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Αντικαθιστά τις εμφανίσεις ενός κειμένου με ένα άλλο, προαιρετικά μόνο μια δεδομένη εμφάνιση.", + ), + ("Replaces part of a text by position.", "Αντικαθιστά μέρος ενός κειμένου κατά θέση."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Επιστρέφει 1 όταν ένας αριθμός είναι τουλάχιστον το βήμα, διαφορετικά 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Επιστρέφει 1 όταν δύο αριθμοί είναι ίσοι, διαφορετικά 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Επιστρέφει έναν κωδικό για το είδος της τιμής: 1 αριθμός, 2 κείμενο, 4 λογικό, 16 σφάλμα, 64 πίνακας.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Επιστρέφει μια εναλλακτική όταν η τιμή είναι #N/A, διαφορετικά η τιμή."), + ( + "Returns a fallback when the value is an error, otherwise the value.", + "Επιστρέφει μια εναλλακτική όταν η τιμή είναι σφάλμα, διαφορετικά η τιμή.", + ), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Επιστρέφει μια ιδιότητα βασικού δείκτη απόδοσης από έναν κύβο (χωρίς συνδέσεις κύβου, #N/A).", + ), + ( + "Returns a member or tuple from a cube (no cube connections; #N/A).", + "Επιστρέφει ένα μέλος ή πλειάδα από έναν κύβο (χωρίς συνδέσεις κύβου, #N/A).", + ), + ("Returns a property of a cube member (no cube connections; #N/A).", "Επιστρέφει μια ιδιότητα ενός μέλους κύβου (χωρίς συνδέσεις κύβου, #N/A)."), + ( + "Returns an aggregated value from a cube (no cube connections; #N/A).", + "Επιστρέφει μια συγκεντρωτική τιμή από έναν κύβο (χωρίς συνδέσεις κύβου, #N/A).", + ), + ("Returns characters from the middle of a text.", "Επιστρέφει χαρακτήρες από τη μέση ενός κειμένου."), + ("Returns information about the operating environment.", "Επιστρέφει πληροφορίες σχετικά με το περιβάλλον λειτουργίας."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Επιστρέφει μια τιμή όταν μια συνθήκη είναι TRUE και μια άλλη όταν είναι FALSE.", + ), + ("Returns the #N/A error value.", "Επιστρέφει την τιμή σφάλματος #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Επιστρέφει τη θέση βάσει 1 μιας τιμής σε μια γραμμή ή στήλη."), + ("Returns the ISO 8601 week number of a date.", "Επιστρέφει τον αριθμό εβδομάδας ISO 8601 μιας ημερομηνίας."), + ("Returns the Unicode code point of the first character of a text.", "Επιστρέφει το σημείο κωδικού Unicode του πρώτου χαρακτήρα ενός κειμένου."), + ("Returns the Windows-1252 code of the first character of a text.", "Επιστρέφει τον κωδικό Windows-1252 του πρώτου χαρακτήρα ενός κειμένου."), + ("Returns the character for a Unicode code point.", "Επιστρέφει τον χαρακτήρα για ένα σημείο κωδικού Unicode."), + ( + "Returns the character for a code from the Windows-1252 character set.", + "Επιστρέφει τον χαρακτήρα για έναν κωδικό από το σύνολο χαρακτήρων Windows-1252.", + ), + ("Returns the current date and time.", "Επιστρέφει την τρέχουσα ημερομηνία και ώρα."), + ("Returns the current date.", "Επιστρέφει την τρέχουσα ημερομηνία."), + ("Returns the date a number of months before or after a date.", "Επιστρέφει την ημερομηνία αρκετούς μήνες πριν ή μετά από μια ημερομηνία."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Επιστρέφει την ημερομηνία μερικές εργάσιμες ημέρες μακριά με ένα προσαρμοσμένο Σαββατοκύριακο.", + ), + ( + "Returns the date a number of working days before or after a date.", + "Επιστρέφει την ημερομηνία αρκετές εργάσιμες ημέρες πριν ή μετά από μια ημερομηνία.", + ), + ("Returns the day of the month of a date.", "Επιστρέφει την ημέρα του μήνα μιας ημερομηνίας."), + ("Returns the day of the week of a date as a number.", "Επιστρέφει την ημέρα της εβδομάδας μιας ημερομηνίας ως αριθμό."), + ("Returns the distinct rows or columns of an array.", "Επιστρέφει τις διακριτές γραμμές ή στήλες ενός πίνακα."), + ( + "Returns the element, row or column of an array at the given position.", + "Επιστρέφει το στοιχείο, τη γραμμή ή τη στήλη ενός πίνακα στη δεδομένη θέση.", + ), + ( + "Returns the field value of the single record that meets the criteria.", + "Επιστρέφει την τιμή πεδίου της μεμονωμένης εγγραφής που πληροί τα κριτήρια.", + ), + ("Returns the first characters of a text.", "Επιστρέφει τους πρώτους χαρακτήρες ενός κειμένου."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Επιστρέφει το κλάσμα ενός έτους μεταξύ δύο ημερομηνιών βάσει μέτρησης ημερών.", + ), + ("Returns the hour (0-23) of a time.", "Επιστρέφει την ώρα (0-23) της ώρας."), + ("Returns the last characters of a text.", "Επιστρέφει τους τελευταίους χαρακτήρες ενός κειμένου."), + ("Returns the last day of the month a number of months away.", "Επιστρέφει την τελευταία ημέρα του μήνα αρκετούς μήνες μακριά."), + ("Returns the logical value FALSE.", "Επιστρέφει τη λογική τιμή FALSE."), + ("Returns the logical value TRUE.", "Επιστρέφει τη λογική τιμή TRUE."), + ("Returns the minute (0-59) of a time.", "Επιστρέφει το λεπτό (0-59) του χρόνου."), + ("Returns the month (1-12) of a date.", "Επιστρέφει τον μήνα (1-12) μιας ημερομηνίας."), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "Επιστρέφει το nο μέλος ενός συνόλου κύβου (χωρίς συνδέσεις κύβων, #N/A)."), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Επιστρέφει τον αριθμό που προσδιορίζει μια τιμή σφάλματος ή το #N/A εάν δεν είναι σφάλμα.", + ), + ("Returns the number of days between two dates.", "Επιστρέφει τον αριθμό των ημερών μεταξύ δύο ημερομηνιών."), + ("Returns the phonetic (furigana) text; here the text itself.", "Επιστρέφει το φωνητικό (furigana) κείμενο· εδώ το ίδιο το κείμενο."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Επιστρέφει τη θέση μιας τιμής σε μια γραμμή ή στήλη με ευέλικτες λειτουργίες αντιστοίχισης και αναζήτησης.", + ), + ("Returns the second (0-59) of a time.", "Επιστρέφει τα δευτερόλεπτα (0-59) μιας ώρας."), + ("Returns the text that comes after a delimiter.", "Επιστρέφει το κείμενο που έρχεται μετά από έναν οριοθέτη."), + ("Returns the text that comes before a delimiter.", "Επιστρέφει το κείμενο που βρίσκεται πριν από έναν οριοθέτη."), + ("Returns the value if it is text, otherwise empty text.", "Επιστρέφει την τιμή εάν είναι κείμενο, διαφορετικά κενό κείμενο."), + ( + "Returns the value paired with the first condition that is TRUE.", + "Επιστρέφει την τιμή που έχει συζευχθεί με την πρώτη συνθήκη που είναι TRUE.", + ), + ("Returns the week number of a date within its year.", "Επιστρέφει τον αριθμό εβδομάδας μιας ημερομηνίας μέσα στο έτος της."), + ("Returns the year of a date.", "Επιστρέφει το έτος μιας ημερομηνίας."), + ("Reverses a logical value.", "Αντιστρέφει μια λογική τιμή."), + ("Right-tailed F probability.", "Δεξιά ουρά F πιθανότητα."), + ("Right-tailed Student's t probability.", "Πιθανότητα δεξιάς ουράς της κατανομής t του Student."), + ("Right-tailed chi-squared probability.", "Πιθανότητα χι-τετράγωνου δεξιάς ουράς."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Στρογγυλοποιεί έναν αριθμό και τον μορφοποιεί ως κείμενο με σταθερά δεκαδικά ψηφία και προαιρετικά διαχωριστικά χιλιάδων.", + ), + ("Rounds a number away from zero to a given number of digits.", "Στρογγυλοποιεί έναν αριθμό μακριά από το μηδέν σε έναν δεδομένο αριθμό ψηφίων."), + ("Rounds a number down to a multiple of significance.", "Στρογγυλοποιεί έναν αριθμό προς τα κάτω σε πολλαπλάσιο του καθορισμένου βήματος."), + ("Rounds a number down to the nearest integer or multiple.", "Στρογγυλοποιεί έναν αριθμό προς τα κάτω στον πλησιέστερο ακέραιο ή πολλαπλάσιο."), + ("Rounds a number down to the nearest integer.", "Στρογγυλοποιεί έναν αριθμό προς τα κάτω στον πλησιέστερο ακέραιο."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Στρογγυλοποιεί έναν αριθμό στο καθορισμένο πλήθος ψηφίων· τις ακριβείς μισές τιμές τις στρογγυλοποιεί μακριά από το μηδέν.", + ), + ("Rounds a number to the nearest multiple.", "Στρογγυλοποιεί έναν αριθμό στο πλησιέστερο πολλαπλάσιο."), + ("Rounds a number toward negative infinity to a multiple.", "Στρογγυλοποιεί έναν αριθμό προς το αρνητικό άπειρο σε ένα πολλαπλάσιο."), + ("Rounds a number toward positive infinity to a multiple.", "Στρογγυλοποιεί έναν αριθμό προς το θετικό άπειρο σε ένα πολλαπλάσιο."), + ("Rounds a number toward zero to a given number of digits.", "Στρογγυλοποιεί έναν αριθμό προς το μηδέν σε έναν δεδομένο αριθμό ψηφίων."), + ("Rounds a number up to a multiple of significance.", "Στρογγυλοποιεί έναν αριθμό προς τα πάνω σε πολλαπλάσιο του καθορισμένου βήματος."), + ("Rounds a number up to the nearest integer or multiple.", "Στρογγυλοποιεί έναν αριθμό προς τα πάνω στον πλησιέστερο ακέραιο ή πολλαπλάσιο."), + ("Rounds away from zero to the nearest even integer.", "Στρογγυλοποιεί μακριά από το μηδέν στον πλησιέστερο άρτιο ακέραιο."), + ("Rounds away from zero to the nearest odd integer.", "Στρογγυλοποιεί μακριά από το μηδέν στον πλησιέστερο περιττό ακέραιο."), + ("Row number of a reference.", "Αριθμός σειράς αναφοράς."), + ("Running accumulation of an array.", "Εκτελούμενη συσσώρευση ενός πίνακα."), + ("Sample covariance of paired values.", "Δειγματική συνδιακύμανση ζευγαρωμένων τιμών."), + ("Sample skewness.", "Δειγματική ασυμμετρία."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Δειγματική τυπική απόκλιση, με το κείμενο να υπολογίζεται ως 0 και τις λογικές τιμές ως 1/0.", + ), + ("Sample standard deviation of a field over the matching records.", "Δειγματική τυπική απόκλιση ενός πεδίου στις αντίστοιχες εγγραφές."), + ("Sample standard deviation.", "Δειγματική τυπική απόκλιση."), + ( + "Sample variance counting text as 0 and logicals as 1/0.", + "Δειγματική διακύμανση, με το κείμενο να υπολογίζεται ως 0 και τις λογικές τιμές ως 1/0.", + ), + ("Sample variance of a field over the matching records.", "Δειγματική διακύμανση ενός πεδίου στις αντίστοιχες εγγραφές."), + ("Sample variance.", "Δειγματική διακύμανση."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Αναζητά σε μια γραμμή ή στήλη και επιστρέφει το αντίστοιχο στοιχείο, γραμμή ή στήλη ενός άλλου πίνακα.", + ), + ("Secant of a complex number.", "Τέμνουσα μιγαδικού αριθμού."), + ("Secant of an angle in radians.", "Τέμνουσα γωνίας σε ακτίνια."), + ("Sheet number.", "Αριθμός φύλλου."), + ( + "Shifts the bits of a number left (right for negative shifts).", + "Μετατοπίζει τα bit ενός αριθμού προς τα αριστερά (δεξιά για αρνητικές μετατοπίσεις).", + ), + ("Shifts the bits of a number right (left for negative shifts).", "Μετατοπίζει τα bit ενός αριθμού δεξιά (αριστερά για αρνητικές μετατοπίσεις)."), + ("Sine of a complex number.", "Ημίτονο μιγαδικού αριθμού."), + ("Sine of an angle in radians.", "Ημίτονο γωνίας σε ακτίνια."), + ("Slope of the least-squares regression line.", "Κλίση της γραμμής παλινδρόμησης ελαχίστων τετραγώνων."), + ("Smallest number (0 when there are none).", "Μικρότερος αριθμός (0 όταν δεν υπάρχει)."), + ("Smallest number in a field of the matching records.", "Ο μικρότερος αριθμός σε ένα πεδίο των αντίστοιχων εγγραφών."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Ο μικρότερος αριθμός επιτυχίας του οποίου η αθροιστική διωνυμική πιθανότητα φτάνει στο άλφα.", + ), + ( + "Smallest value among cells that meet every condition.", + "Η μικρότερη τιμή μεταξύ των κελιών υπολογιστικού φύλλου που πληρούν όλες τις προϋποθέσεις.", + ), + ("Smallest value counting text as 0 and logicals as 1/0.", "Μικρότερη τιμή, με το κείμενο να υπολογίζεται ως 0 και τις λογικές τιμές ως 1/0."), + ("Sorts an array by the values of other arrays of matching size.", "Ταξινομεί έναν πίνακα με τις τιμές άλλων πινάκων αντίστοιχου μεγέθους."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Ταξινομεί τις σειρές (ή τις στήλες) ενός πίνακα κατά μία ή περισσότερες από τις στήλες του.", + ), + ("Spells out a number in Thai words with Baht.", "Συλλαβίζει έναν αριθμό σε ταϊλανδέζικες λέξεις με μπατ."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Διαχωρίζει το κείμενο σε ένα πλέγμα στηλών και γραμμών στους δεδομένους οριοθέτες.", + ), + ("Square of the correlation coefficient.", "Τετράγωνο του συντελεστή συσχέτισης."), + ("Square root of a complex number.", "Τετραγωνική ρίζα μιγαδικού αριθμού."), + ("Square root of the number times pi.", "Τετραγωνική ρίζα του γινομένου του αριθμού επί pi."), + ("Stacks arrays on top of each other.", "Στοιβάζει συστοιχίες τη μία πάνω στην άλλη."), + ("Standard error of predicted y values in a regression.", "Τυπικό σφάλμα των προβλεπόμενων τιμών y σε μια παλινδρόμηση."), + ("Standard normal cumulative probability.", "Τυπική κανονική αθροιστική πιθανότητα."), + ("Standard normal density or cumulative probability.", "Τυπική κανονική πυκνότητα ή αθροιστική πιθανότητα."), + ("Standard normal density.", "Τυπική κανονική πυκνότητα."), + ("Straight-line depreciation for one period.", "Απόσβεση με τη σταθερή μέθοδο για μία περίοδο."), + ("Student's t density or left-tailed probability.", "Πυκνότητα ή πιθανότητα αριστερής ουράς της κατανομής t του Student."), + ("Sum of a power series.", "Άθροισμα δυναμοσειράς."), + ("Sum of complex numbers.", "Άθροισμα μιγαδικών αριθμών."), + ("Sum of squared deviations from the mean.", "Άθροισμα των τετραγώνων των αποκλίσεων από τον μέσο όρο."), + ("Sum-of-years'-digits depreciation for a period.", "Απόσβεση με τη μέθοδο του αθροίσματος των ετών ζωής για μία περίοδο."), + ("Sums the differences of squares of matching elements.", "Αθροίζει τις διαφορές των τετραγώνων των αντιστοιχιζόμενων στοιχείων."), + ("Sums the squared differences of matching elements.", "Αθροίζει τα τετράγωνα των διαφορών των αντίστοιχων στοιχείων."), + ("Sums the sums of squares of matching elements.", "Αθροίζει τα αθροίσματα των τετραγώνων των αντιστοιχιζόμενων στοιχείων."), + ("Swaps the rows and columns of an array.", "Εναλλάσσει τις γραμμές και τις στήλες ενός πίνακα."), + ("TRUE for references.", "TRUE για αναφορές."), + ("TRUE when a LAMBDA argument was left out.", "TRUE όταν ένα όρισμα LAMBDA έμεινε εκτός."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE όταν μια κανονική έκφραση αντιστοιχεί σε κάποιο σημείο του κειμένου."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE όταν ένας περιττός αριθμός ορισμάτων είναι TRUE."), + ("TRUE when at least one argument is TRUE.", "TRUE όταν τουλάχιστον ένα όρισμα είναι TRUE."), + ("TRUE when every argument is TRUE.", "TRUE όταν κάθε όρισμα είναι TRUE."), + ("TRUE when the cell has a formula.", "TRUE όταν το κελί έχει τύπο."), + ("TRUE when the integer part of a number is even.", "TRUE όταν το ακέραιο μέρος ενός αριθμού είναι ζυγό."), + ("TRUE when the integer part of a number is odd.", "TRUE όταν το ακέραιο μέρος ενός αριθμού είναι περιττό."), + ("TRUE when the value is TRUE or FALSE.", "TRUE όταν η τιμή είναι TRUE ή FALSE."), + ("TRUE when the value is a number.", "TRUE όταν η τιμή είναι αριθμός."), + ("TRUE when the value is any error other than #N/A.", "TRUE όταν η τιμή είναι οποιοδήποτε σφάλμα εκτός από το #N/A."), + ("TRUE when the value is any error.", "TRUE όταν η τιμή είναι οποιοδήποτε σφάλμα."), + ("TRUE when the value is anything other than text.", "TRUE όταν η τιμή είναι οτιδήποτε άλλο εκτός από κείμενο."), + ("TRUE when the value is text.", "TRUE όταν η τιμή είναι κείμενο."), + ("TRUE when the value is the #N/A error.", "TRUE όταν η τιμή είναι το σφάλμα #N/A."), + ("TRUE when the value refers to an empty cell.", "TRUE όταν η τιμή αναφέρεται σε ένα κενό κελί."), + ("TRUE when two texts are identical, including case.", "TRUE όταν δύο κείμενα είναι πανομοιότυπα, συμπεριλαμβανομένων των πεζών-κεφαλαίων."), + ("Tangent of a complex number.", "Εφαπτομένη μιγαδικού αριθμού."), + ("Tangent of an angle in radians.", "Εφαπτομένη γωνίας σε ακτίνια."), + ("The constant pi to 15 digits.", "Η σταθερά pi στα 15 ψηφία."), + ("The formula of a cell as text.", "Ο τύπος ενός κελιού ως κείμενο."), + ("The gamma function.", "Η συνάρτηση γάμμα."), + ("The k-th largest number in a data set.", "Ο κ-ος μεγαλύτερος αριθμός σε ένα σύνολο δεδομένων."), + ("The k-th smallest number in a data set.", "Ο κ-ος μικρότερος αριθμός σε ένα σύνολο δεδομένων."), + ("The reference named by a text string.", "Η αναφορά που ονομάστηκε από μια συμβολοσειρά κειμένου."), + ("The sum of a subset as a fraction of the sum of all the values.", "Το άθροισμα ενός υποσυνόλου ως κλάσμα του αθροίσματος όλων των τιμών."), + ("Total interest paid between two periods.", "Συνολικοί τόκοι που καταβλήθηκαν μεταξύ δύο περιόδων."), + ("Total principal repaid between two periods.", "Συνολικό κεφάλαιο που εξοφλήθηκε μεταξύ δύο περιόδων."), + ("Two-tailed Student's t probability.", "Πιθανότητα δύο ουρών της κατανομής t του Student."), + ("Two-tailed inverse of Student's t distribution.", "Αντίστροφη της κατανομής t του Student για δύο ουρές."), + ("Two-tailed p-value of an F-test for equality of variances.", "Αμφίπλευρη τιμή p ελέγχου F για την ισότητα διασπορών."), + ("Values along a fitted exponential growth curve.", "Τιμές κατά μήκος προσαρμοσμένης καμπύλης εκθετικής ανάπτυξης."), + ("Values along a least-squares linear fit.", "Τιμές κατά μήκος γραμμικής προσαρμογής ελαχίστων τετραγώνων."), + ("Vertical array of all the most frequent numbers.", "Κάθετη διάταξη όλων των πιο συχνών αριθμών."), + ("Weibull density or probability.", "Πυκνότητα ή πιθανότητα Weibull."), + ("Writes a number in another base, padded with zeros.", "Γράφει έναν αριθμό σε άλλη βάση, γεμάτο με μηδενικά."), + ("Y-intercept of the least-squares regression line.", "Υ-τομή της γραμμής παλινδρόμησης ελαχίστων τετραγώνων."), + ("Yield of a Treasury bill.", "Απόδοση γραμματίου του Δημοσίου."), + ("Yield of a security paying periodic interest.", "Απόδοση ομολόγου που καταβάλλει περιοδικούς τόκους."), + ("Yield of a security with an odd first period.", "Απόδοση ομολόγου με ακανόνιστη πρώτη περίοδο τόκων."), + ("Yield of a security with an odd last period.", "Απόδοση ομολόγου με ακανόνιστη τελευταία περίοδο τόκων."), + ("Z-score of a value.", "Z-score μιας τιμής."), + ("e raised to the given power.", "Το e υψωμένο στη δεδομένη δύναμη."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-ο εκατοστημόριο, k από 0 έως 1 συμπεριλαμβανομένου."), + ("k-th percentile, k strictly between 0 and 1.", "k-ο εκατοστημόριο, k αυστηρά μεταξύ 0 και 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "τύπος_αναφοράς"), + ("actual_range", "πραγματικό_εύρος"), + ("aggregation", "συγκέντρωση"), + ("alpha", "άλφα"), + ("angle", "γωνία"), + ("area_num", "αριθμός_περιοχής"), + ("argument", "όρισμα"), + ("array", "Συστοιχία"), + ("array_x", "πίνακας_τιμών_x"), + ("array_y", "πίνακας_τιμών_y"), + ("average_range", "περιοχή_υπολογισμού_μέσου_όρου"), + ("base", "βάση"), + ("basis", "βάση"), + ("beta", "beta"), + ("bins_array", "πίνακας_ορίων_κάδου"), + ("bottom", "κάτω_φράγμα"), + ("by_array", "πίνακας_ταξινόμησης"), + ("by_col", "ανά_στήλη"), + ("calc_method", "μέθοδος_υπολογισμού"), + ("calculation", "Υπολογισμός"), + ("caption", "λεζάντα"), + ("case_sensitivity", "ευαισθησία_πεζών_κεφαλαίων"), + ("coefficients", "συντελεστές"), + ("col_delimiter", "οριοθέτης_στηλών"), + ("col_fields", "πεδία_στήλης"), + ("col_index_num", "ευρετήριο_στήλης"), + ("col_num", "αριθμός_στήλης"), + ("col_sort_order", "σειρά_ταξινόμησης_στηλών"), + ("col_total_depth", "συνολικό_βάθος_στήλης"), + ("cols", "πλήθος_στηλών"), + ("column_num", "αριθμός_στήλης"), + ("columns", "πλήθος_στηλών"), + ("confidence_level", "επίπεδο_εμπιστοσύνης"), + ("connection", "Σύνδεση_δεδομένων"), + ("const", "σταθερά"), + ("cost", "αρχικό_κόστος"), + ("coupon", "επιτόκιο_κουπονιού"), + ("criteria", "κριτήρια"), + ("criteria_range", "εύρος_κριτηρίων"), + ("cumulative", "αθροιστική_διανομή"), + ("data_all", "δεδομένα_όλα"), + ("data_array", "Συστοιχία_δεδομένων"), + ("data_completion", "συμπλήρωση_δεδομένων"), + ("data_subset", "υποσύνολο_δεδομένων"), + ("database", "βάση_δεδομένων"), + ("date", "ημερομηνία"), + ("date_purchased", "ημερομηνία_αγοράς"), + ("date_text", "ημερομηνία_γραμμένη_ως_κείμενο"), + ("dates", "ημερομηνίες"), + ("day", "ημέρα"), + ("days", "ημέρες"), + ("decimal_dollar", "δεκαδική_τιμή"), + ("decimal_separator", "δεκαδικό_διαχωριστικό"), + ("decimals", "δεκαδικά_ψηφία"), + ("default_or_value", "προεπιλογή_ή_τιμή"), + ("deg_freedom", "βαθμοί_ελευθερίας"), + ("delimiter", "οριοθέτης"), + ("denominator", "παρονομαστής"), + ("dimension", "διάσταση"), + ("discount", "προεξοφλητικό_επιτόκιο"), + ("divisor", "διαιρέτης"), + ("effect_rate", "πραγματικό_επιτόκιο"), + ("end_date", "ημερομηνία_λήξης"), + ("end_period", "τελευταία_περίοδος"), + ("error_val", "τιμή_σφάλματος"), + ("exactly_once", "ακριβώς_μια_φορά"), + ("expected_range", "αναμενόμενο_εύρος"), + ("expression", "έκφραση"), + ("factor", "παράγοντας"), + ("field", "πεδίο_βάσης_δεδομένων"), + ("field_headers", "κεφαλίδες_πεδίου"), + ("field_relationship", "σχέση_μεταξύ_των_πεδίων"), + ("filter_array", "Συστοιχία_φίλτρων"), + ("finance_rate", "επιτόκιο_χρηματοδότησης"), + ("find_text", "βρείτε_κείμενο"), + ("first_coupon", "πρώτη_ημερομηνία_πληρωμής_κουπονιού"), + ("first_interest", "ημερομηνία_πρώτης_πληρωμής_τόκων"), + ("first_period", "πρώτη_περίοδος"), + ("form", "μορφή"), + ("format", "Μορφή"), + ("format_text", "μορφή_κειμένου"), + ("fraction", "κλάσμα"), + ("fractional_dollar", "κλασματική_τιμή"), + ("frequency", "συχνότητα_πληρωμής_κουπονιού"), + ("friendly_name", "φιλικό_όνομα"), + ("from_unit", "μονάδα_μέτρησης_πηγής"), + ("full_precision", "πλήρης_ακρίβεια"), + ("function", "συνάρτηση"), + ("function_num", "αριθμός_συνάρτησης"), + ("fv", "μελλοντική_αξία"), + ("group_separator", "διαχωριστικό_ομάδας"), + ("guess", "αρχική_εκτίμηση"), + ("height", "ύψος"), + ("holidays", "αργίες"), + ("hour", "ώρα"), + ("i_num", "φανταστικός_συντελεστής"), + ("if_empty", "αν_είναι_κενό"), + ("if_not_found", "αν_δεν_βρεθεί"), + ("ignore", "αγνοήστε"), + ("ignore_empty", "αγνοήστε_κενό"), + ("include", "συμπερίληψη"), + ("index_num", "αριθμός_ευρετηρίου"), + ("info_type", "τύπος_πληροφοριών"), + ("initial_value", "αρχική_τιμή"), + ("instance_num", "αριθμός_εμφάνισης"), + ("inumber", "μιγαδικός_αριθμός"), + ("investment", "επένδυση"), + ("issue", "ημερομηνία_έκδοσης"), + ("k", "k"), + ("known_xs", "γνωστές_τιμές_x"), + ("known_ys", "γνωστές_τιμές_y"), + ("kpi_name", "όνομα_βασικού_δείκτη_απόδοσης"), + ("kpi_property", "ιδιότητα_βασικού_δείκτη_απόδοσης"), + ("lambda", "λάμδα"), + ("last_interest", "τελευταία_ημερομηνία_πληρωμής_τόκων"), + ("life", "ωφέλιμη_ζωή"), + ("link_location", "τοποθεσία_συνδέσμου"), + ("logical", "λογική_τιμή"), + ("logical_test", "λογική_συνθήκη"), + ("lookup_array", "πίνακας_αναζήτησης"), + ("lookup_value", "τιμή_αναζήτησης"), + ("lookup_vector", "διάνυσμα_αναζήτησης"), + ("lower_limit", "κατώτερο_όριο"), + ("m", "m"), + ("match_end", "οριοθέτης_αντιστοίχισης_από_το_τέλος"), + ("match_mode", "λειτουργία_αντιστοίχισης"), + ("match_type", "μέθοδος_αντιστοίχισης"), + ("maturity", "ημερομηνία_λήξης"), + ("max", "μέγιστο"), + ("max_range", "περιοχή_υπολογισμού_μεγίστου"), + ("mean", "αριθμητικός_μέσος_όρος"), + ("member_expression", "έκφραση_μέλους_κύβου"), + ("method", "μέθοδο"), + ("min", "ελάχιστο"), + ("min_length", "ελάχιστο_μήκος"), + ("min_range", "περιοχή_υπολογισμού_ελαχίστου"), + ("minute", "λεπτό"), + ("mode", "λειτουργία_υπολογισμού"), + ("month", "μήνα"), + ("months", "μήνες"), + ("multiple", "πολλαπλάσιο"), + ("n", "n"), + ("name", "όνομα"), + ("new_text", "νέο_κείμενο"), + ("new_xs", "νέες_τιμές_x"), + ("no_commas", "παραλείψτε_τα_διαχωριστικά_ομάδων_ψηφίων"), + ("no_switch", "μην_αλλάξετε_μέθοδο_απόσβεσης"), + ("nominal_rate", "ονομαστικό_επιτόκιο"), + ("nper", "αριθμός_περιόδων"), + ("npery", "περιόδους_ανά_έτος"), + ("num_bytes", "αριθμός_byte"), + ("num_chars", "αριθμός_χαρακτήρων"), + ("num_digits", "αριθμός_ψηφίων"), + ("number", "αριθμός"), + ("number_chosen", "πλήθος_επιλεγμένων"), + ("number_f", "αριθμός_αποτυχιών"), + ("number_pop", "μέγεθος_πληθυσμού"), + ("number_s", "αριθμός_επιτυχιών"), + ("number_sample", "μέγεθος_δείγματος"), + ("number_times", "πλήθος_επαναλήψεων"), + ("numerator", "αριθμητής"), + ("occurrence", "εμφάνιση"), + ("old_text", "παλιό_κείμενο"), + ("options", "επιλογές"), + ("order", "σειρά_κατάταξης"), + ("pad_with", "τιμή_συμπλήρωσης"), + ("par", "ονομαστική_αξία"), + ("parameter", "Παράμετρος"), + ("pattern", "μοτίβο_κανονικής_έκφρασης"), + ("per", "περίοδο"), + ("percent", "τοις_εκατό"), + ("period", "περίοδο"), + ("places", "αριθμός_ψηφίων_εξόδου"), + ("pmt", "πληρωμή"), + ("population_s", "επιτυχίες_στον_πληθυσμό"), + ("power", "δύναμη"), + ("pr", "τιμή"), + ("principal", "αρχικό_κεφάλαιο"), + ("prob_range", "εύρος_πιθανοτήτων"), + ("probability", "πιθανότητα"), + ("probability_s", "πιθανότητα_επιτυχίας"), + ("property", "ιδιότητα"), + ("pv", "παρούσα_αξία"), + ("quart", "τεταρτημόριο"), + ("radix", "βάση_αρίθμησης"), + ("range", "περιοχή"), + ("range_lookup", "αναζήτηση_εύρους"), + ("rank", "κατάταξη"), + ("rate", "επιτόκιο"), + ("real_num", "πραγματικός_συντελεστής"), + ("redemption", "αξία_εξόφλησης"), + ("ref", "αναφορά"), + ("ref_text", "αναφ_κείμενο"), + ("reference", "αναφορά"), + ("reinvest_rate", "επιτόκιο_επανεπένδυσης"), + ("relative_to", "σε_σχέση_με"), + ("replacement", "αντικατάσταση"), + ("result", "αποτέλεσμα"), + ("result_vector", "διάνυσμα_αποτελέσματος"), + ("return_array", "πίνακας_επιστροφής"), + ("return_mode", "λειτουργία_επιστροφής"), + ("return_type", "τύπος_επιστροφής"), + ("row_delimiter", "οριοθέτης_σειρών"), + ("row_fields", "πεδία_σειράς"), + ("row_index_num", "ευρετήριο_σειράς"), + ("row_num", "αριθμός_σειράς"), + ("row_sort_order", "σειρά_ταξινόμησης_σειρών"), + ("row_total_depth", "συνολικό_βάθος_σειράς"), + ("rows", "πλήθος_σειρών"), + ("salvage", "υπολειμματική_αξία"), + ("sample_s", "επιτυχίες_στο_δείγμα"), + ("scan_by_column", "σάρωση_ανά_στήλη"), + ("schedule", "πίνακας_επιτοκίων"), + ("search_mode", "λειτουργία_αναζήτησης"), + ("seasonality", "εποχικότητα"), + ("second", "δευτερόλεπτο"), + ("serial_number", "σειριακός_αριθμός"), + ("set", "σύνολο_μελών_κύβου"), + ("set_expression", "έκφραση_συνόλου_μέλους_κύβου"), + ("settlement", "ημερομηνία_διακανονισμού"), + ("sheet_text", "κείμενο_φύλλου"), + ("shift_amount", "πλήθος_θέσεων_μετατόπισης"), + ("sigma", "σίγμα"), + ("significance", "ακρίβεια_ή_βήμα"), + ("size", "μέγεθος"), + ("sort_by", "ταξινόμηση_κατά"), + ("sort_index", "ευρετήριο_ταξινόμησης"), + ("sort_order", "σειρά_ταξινόμησης"), + ("source", "πηγή"), + ("standard_dev", "τυπική_απόκλιση"), + ("start", "αρχική_τιμή"), + ("start_date", "ημερομηνία_έναρξης"), + ("start_num", "αρχική_θέση"), + ("start_period", "περίοδος_έναρξης"), + ("statistic_type", "στατιστικός_τύπος"), + ("stats", "στατιστικά"), + ("step", "βήμα"), + ("suffix", "επίθημα"), + ("sum_range", "εύρος_αθροίσματος"), + ("table_array", "πίνακας_αναζήτησης"), + ("tails", "αριθμός_ουρών_διανομής"), + ("target", "στόχος"), + ("target_date", "στόχος_ημερομηνία"), + ("text", "κείμενο"), + ("time_text", "ώρα_γραμμένη_ως_κείμενο"), + ("timeline", "χρονοδιάγραμμα"), + ("to_unit", "μονάδα_μέτρησης_στόχου"), + ("top", "άνω_φράγμα"), + ("total_depth", "συνολικό_βάθος"), + ("trials", "δοκιμές"), + ("triangulation_precision", "ακρίβεια_τριγωνισμού"), + ("trim_cols", "λειτουργία_περικοπής_στήλης"), + ("trim_rows", "λειτουργία_περικοπής_σειρών"), + ("type", "τύπος"), + ("type_text", "όνομα_τύπου_δεδομένων"), + ("unit", "μονάδα_μέτρησης"), + ("upper_limit", "ανώτατο_όριο"), + ("url", "url"), + ("value", "τιμή"), + ("value_if_error", "αποτέλεσμα_σε_περίπτωση_λάθους"), + ("value_if_false", "αποτέλεσμα_όταν_η_συνθήκη_είναι_ψευδής"), + ("value_if_na", "Αποτέλεσμα_για_το_μη_διαθέσιμο_σφάλμα"), + ("value_if_true", "αποτέλεσμα_όταν_η_συνθήκη_είναι_αληθής"), + ("values", "τιμές_εισαγωγής"), + ("vector", "διάνυσμα"), + ("weekend", "Σαββατοκύριακο"), + ("whole_number", "ακέραιος_αριθμός"), + ("width", "πλάτος"), + ("within_text", "κείμενο_για_αναζήτηση"), + ("wrap_count", "αριθμός_τιμών_ανά_γραμμή_ή_στήλη"), + ("x", "x"), + ("x_num", "x_συντεταγμένη"), + ("x_range", "x_εύρος"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "συντεταγμένη_y"), + ("year", "έτος"), + ("yld", "απόδοση_επένδυσης"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/error_templates.rs b/crates/ui-egui/src/i18n/error_templates.rs new file mode 100644 index 0000000000..58b75f7bc6 --- /dev/null +++ b/crates/ui-egui/src/i18n/error_templates.rs @@ -0,0 +1,173 @@ +//! Shared dynamic UI error messages, translated by any language catalog. Captured workbook data is not translated or reinterpreted as a template. + +const TEMPLATES: &[&str] = &[ + "{function} has too few arguments. Use {signature}", + "{function} has too many arguments. Use {signature}", + "no sheet named `{sheet}`", + "not a range: `{range}`", + "missing `{parameter}`", + "`{cell}` for `{key}` names a sheet other than the one this command works on", + "unknown command `{command}`", + "formula is longer than {limit} characters", + "bad number `{number}`", + "number too large `{number}`", + "unexpected character `{character}`", + "invalid cell reference `{cell}` for `{key}`", + "expected `,` or `)`, found {token}", + "expected a reference after the sheet name, found {token}", + "expected a number in array, found {token}", + "array constants may only contain constants, found {token}", + "expected {expected}, found {actual}", + "unexpected {token}", +]; + +/// Matches an entire known message. Unknown messages remain untouched by the caller. +pub(super) fn format_message(message: &str, language: super::Language) -> Option { + if let Some(detail) = message.strip_prefix("There's a problem with this formula: ") { + let detail = language.translation(detail).map(str::to_owned).or_else(|| translate_template(detail, language))?; + return Some(format!("{} {detail}", language.translation("There's a problem with this formula:")?)); + } + translate_template(message, language) +} + +/// Tries translated templates in order and returns the first whole-message match. +fn translate_template(message: &str, language: super::Language) -> Option { + TEMPLATES.iter().find_map(|source| fill(message, source, language.translation(source)?, language)) +} + +/// Resolves named slots once so braces inside a filename or sheet name stay literal. +fn fill(message: &str, source: &str, translated: &str, language: super::Language) -> Option { + let mut rest = message; + let mut pattern = source; + let mut values = Vec::new(); + while let Some((prefix, slot)) = pattern.split_once('{') { + rest = rest.strip_prefix(prefix)?; + let (name, tail) = slot.split_once('}')?; + let delimiter = tail.split('{').next()?; + let end = if delimiter.is_empty() { rest.len() } else { rest.find(delimiter)? }; + let value = rest.get(..end)?; + // A value that repeats the template's own backticks cannot be told from the delimiter: + // "`a` for `b` for `key`" splits as (a, "b` for `key`"), and the message would show the + // captures in the wrong places. Leave it English instead of mangling it. + if value.contains('`') && (prefix.ends_with('`') || delimiter.starts_with('`')) { + return None; + } + values.push((name, value)); + rest = rest.get(end..)?; + pattern = tail; + } + if rest != pattern { + return None; + } + let locale = language.formula_locale(); + let mut rendered = Vec::with_capacity(values.len()); + for (name, value) in &values { + let value = match *name { + "token" | "expected" | "actual" => language.translation(value).unwrap_or(value).to_string(), + "function" => locale.function_name(value).to_string(), + "signature" => { + let function = values.iter().find(|(key, _)| *key == "function")?.1; + crate::formula_locale::signature(function, locale, language).unwrap_or_else(|| value.to_string()) + } + _ => value.to_string(), + }; + rendered.push((*name, value)); + } + let args: Vec<(&str, &str)> = rendered.iter().map(|(key, value)| (*key, value.as_str())).collect(); + Some(craft_i18n::fmt(translated, &args)) +} + +#[cfg(test)] +mod tests { + use super::*; + + /// Checks captured parameters remain literal and partial or unknown messages are not translated. + #[test] + fn parameters_are_literal_and_messages_are_anchored() { + assert_eq!(format_message("bad number `abc`", super::super::Language::En), None); + assert_eq!( + fill("bad number `abc`", "bad number `{number}`", "Nombre incorrect : {number}", super::super::Language::Fr), + Some("Nombre incorrect : abc".into()) + ); + assert_eq!( + format_message("invalid cell reference `Лист{key}` for `cell`", super::super::Language::Ru), + Some("Неверная ссылка на ячейку `Лист{key}` в параметре `cell`".into()) + ); + assert_eq!(format_message("prefix: bad number `abc`", super::super::Language::Ru), None); + assert_eq!(format_message("bad number `abc` suffix", super::super::Language::Ru), None); + assert_eq!(format_message("Printer Office: permission denied", super::super::Language::Ru), None); + } + + /// A captured value that repeats the template's own backticks cannot be told from the + /// delimiter: the message stays English instead of showing the captures in the wrong places. + #[test] + fn a_value_that_repeats_the_template_backticks_leaves_the_message_english() { + let ru = super::super::Language::Ru; + let ambiguous = "`a` for `b` for `key` names a sheet other than the one this command works on"; + assert_eq!(format_message(ambiguous, ru), None, "the split would be (a, b` for `key`)"); + // The same words inside a value without a backtick are matched whole and translated. + let unambiguous = "`'a for b'!C1` for `key` names a sheet other than the one this command works on"; + assert_eq!(format_message(unambiguous, ru), Some("Ссылка `'a for b'!C1` в параметре `key` указывает на другой лист".into())); + } + + /// Repeated braces in a captured value stay literal: each slot is resolved once. + #[test] + fn repeated_braces_in_a_captured_value_stay_literal() { + let ru = super::super::Language::Ru; + assert_eq!( + format_message("invalid cell reference `A{a}{b}` for `cell`", ru), + Some("Неверная ссылка на ячейку `A{a}{b}` в параметре `cell`".into()) + ); + assert_eq!(format_message("unexpected `{token}`", ru), Some("Неожиданный элемент: `{token}`".into())); + } + + /// A parser token containing a pipe keeps the entire captured text during localization. + #[test] + fn parser_tokens_do_not_use_context_fallback() { + let token = r#"Text("a|b")"#; + let message = format!("There's a problem with this formula: expected `,` or `)`, found {token}"); + let localized = format_message(&message, super::super::Language::Ru).unwrap(); + assert!(localized.ends_with(token), "{localized}"); + assert_ne!(localized, message); + } +} + +#[cfg(test)] +mod contract_tests { + use super::*; + /// Checks every available template translation preserves the source set of named placeholders. + #[test] + fn translated_templates_preserve_slots_for_every_catalog() { + let names = |text: &str| { + let mut names: Vec<&str> = text.split('{').skip(1).filter_map(|s| s.split_once('}').map(|(name, _)| name)).collect(); + names.sort(); + names.into_iter().map(str::to_owned).collect::>() + }; + for language in crate::i18n::Language::ALL { + for source in TEMPLATES { + if let Some(translated) = language.translation(source) { + assert_eq!(names(source), names(translated), "{language:?}: {source}"); + } + } + } + } + + /// A template without a translation shows the English text, so the reference language covers + /// the whole shared set; `translated_templates_preserve_slots_for_every_catalog` skips the rest. + #[test] + fn russian_covers_every_shared_template() { + for source in TEMPLATES { + assert!(crate::i18n::Language::Ru.translation(source).is_some(), "missing Russian template: {source}"); + } + } + + /// Checks real canonical parser errors are translated only at the UI boundary. + #[test] + fn actual_parser_diagnostics_are_translated_without_changing_the_parser() { + for input in ["=1+", "=#UNKNOWN!", "=1e999", "=SUM(1;2)", "=SUM({1;})"] { + let error = gridcraft_engine::formula::parse(input).unwrap_err().to_string(); + let translated = crate::i18n::Language::Ru.tr_error(&error); + assert_ne!(translated, error, "{input}: {error}"); + } + } +} diff --git a/crates/ui-egui/src/i18n/es.rs b/crates/ui-egui/src/i18n/es.rs index db78d81056..26d8ae24b2 100644 --- a/crates/ui-egui/src/i18n/es.rs +++ b/crates/ui-egui/src/i18n/es.rs @@ -5,6 +5,761 @@ /// Returns the Spanish translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Applies to" => "Se aplica a", + "Formula" => "Fórmula", + "Maximum" => "Máximo", + "Minimum" => "Mínimo", + "New Formatting Rule" => "Nueva regla de formato", + "and" => "y", + "Report Layout|Outline" => "Esquema", + "a linked (not embedded) picture was skipped" => "Se omitió una imagen vinculada (no incrustada).", + "missing picture {target}" => "Falta la imagen {target}.", + "chart {target} has no supported plot and was skipped" => "El gráfico {target} no contiene ningún tipo de gráfico compatible y se omitió.", + "a histogram, waterfall, treemap… chart without its chart part was skipped" => { + "Se omitió un gráfico de histograma, cascada, mapa de árbol… porque no tiene su parte de gráfico." + } + "an embedded object (diagram, OLE…) was skipped" => "Se omitió un objeto incrustado (diagrama, OLE…).", + "grouped shapes are not supported and were skipped" => "Las formas agrupadas no son compatibles y se omitieron.", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported." => { + "Importación de XLSB solo con datos: las fórmulas se convierten en sus resultados guardados y no se recalcularán. No se importan el formato, los gráficos, las imágenes, las macros ni otras características; las fechas, la moneda y los porcentajes pueden mostrarse como números. Guarda un archivo .xlsx nuevo; no se admite guardar en XLSB." + } + "XLSB module sheets were skipped." => "Se omitieron las hojas de módulo XLSB.", + "XLSB non-worksheet sheets were skipped." => "Se omitieron las hojas de XLSB que no son hojas de cálculo.", + "Unsupported XLSB future-record and alternate-content blocks were skipped." => { + "Se omitieron los bloques futuros y de contenido alternativo no compatibles de XLSB." + } + "Invalid XLSB merged ranges were skipped." => "Se omitieron los rangos combinados no válidos de XLSB.", + "{count} items in this file were handled differently. First: {warning}" => { + "{count} elementos de este archivo se procesaron de forma diferente. Primero: {warning}" + } + "Choose a light or dark appearance, or follow your system's theme." => "Elija una apariencia clara u oscura, o use el tema del sistema.", + "Choose the language used by the interface." => "Elija el idioma de la interfaz.", + "Show or hide the formula bar used to view and edit the active cell." => { + "Muestre u oculte la barra de fórmulas para ver y editar la celda activa." + } + "Complete text from a matching value in the same column while typing in a cell." => { + "Complete el texto con un valor coincidente de la misma columna al escribir en una celda." + } + "Save changes automatically to .xlsx workbooks that already have a file path." => { + "Guarde los cambios automáticamente en los libros .xlsx que ya tengan una ruta de archivo." + } + "Recalculate formulas automatically when workbook values or formulas change." => { + "Recalcule las fórmulas automáticamente al cambiar los valores o las fórmulas del libro." + } + "Recalculate formulas automatically. What-if data tables are currently snapshots; run Data Table again to update them." => { + "Recalcule las fórmulas automáticamente. Las tablas de datos de análisis de hipótesis son instantáneas; vuelva a ejecutar Tabla de datos para actualizarlas." + } + "Defer updates to dependent formulas until Calculate Now or Calculate Sheet. Formulas you edit still calculate immediately." => { + "Aplace la actualización de las fórmulas dependientes hasta elegir Calcular ahora o Calcular hoja. Las fórmulas que edite se calculan de inmediato." + } + "Repeatedly calculate circular references until results converge or the iteration limit is reached. Enable only for intentional circular formulas." => { + "Calcule las referencias circulares repetidamente hasta que los resultados converjan o se alcance el límite de iteraciones. Active esta opción solo para fórmulas circulares intencionadas." + } + " (password)" => " (contraseña)", + " (password, unlocked)" => " (contraseña, desbloqueado)", + "$ English (United States)" => "$ Inglés (Estados Unidos)", + "'{file}' is protected." => "'{file}' está protegido.", + "(No suggestions)" => "(Sin sugerencias)", + "(unnamed)" => "(sin nombre)", + "+ Add Level" => "+ Agregar nivel", + "100% Stacked Area" => "Área 100% apilada", + "100% Stacked Bar" => "Barra 100% apilada", + "100% Stacked Column" => "Columna 100% apilada", + "20% - Accent1" => "20% - Énfasis1", + "20% - Accent2" => "20% - Énfasis2", + "20% - Accent3" => "20% - Énfasis3", + "20% - Accent4" => "20% - Énfasis4", + "20% - Accent5" => "20% - Énfasis5", + "20% - Accent6" => "20% - Énfasis6", + "3 Arrows" => "3 flechas", + "3 Symbols" => "3 símbolos", + "3 Traffic Lights" => "3 semáforos", + "4 Ratings" => "4 clasificaciones", + "40% - Accent1" => "40% - Énfasis1", + "40% - Accent2" => "40% - Énfasis2", + "40% - Accent3" => "40% - Énfasis3", + "40% - Accent4" => "40% - Énfasis4", + "40% - Accent5" => "40% - Énfasis5", + "40% - Accent6" => "40% - Énfasis6", + "5 Arrows" => "5 flechas", + "5 Quarters" => "5 cuartos", + "60% - Accent1" => "60% - Énfasis1", + "60% - Accent2" => "60% - Énfasis2", + "60% - Accent3" => "60% - Énfasis3", + "60% - Accent4" => "60% - Énfasis4", + "60% - Accent5" => "60% - Énfasis5", + "60% - Accent6" => "60% - Énfasis6", + "A Date Occurring…" => "Una fecha que tiene lugar…", + "A to Z" => "De A a Z", + "About" => "Acerca de", + "Accent1" => "Énfasis1", + "Accent2" => "Énfasis2", + "Accent3" => "Énfasis3", + "Accent4" => "Énfasis4", + "Accent5" => "Énfasis5", + "Accent6" => "Énfasis6", + "Accessibility" => "Accesibilidad", + "Action" => "Acción", + "Action Journal" => "Registro de acciones", + "Add" => "Agregar", + "Paste Special|Add" => "Sumar", + "Add Chart Element" => "Agregar elemento de gráfico", + "Add subtotal to (columns, e.g. C,D):" => "Agregar subtotal a (columnas, p. ej. C,D):", + "Add to Dictionary" => "Agregar al diccionario", + "Add-in and Automation" => "Complementos y automatización", + "Agent Control" => "Control del agente", + "Aggregate duplicates using" => "Consolidar duplicados con", + "Align Left" => "Alinear a la izquierda", + "Align Right" => "Alinear a la derecha", + "Alignment" => "Alineación", + "All Borders" => "Todos los bordes", + "All Charts" => "Todos los gráficos", + "All done. We made {count} replacements." => "Listo. Se realizaron {count} reemplazos.", + "All except borders" => "Todo excepto bordes", + "Allow" => "Permitir", + "Allow all users of this sheet to:" => "Permitir a todos los usuarios de esta hoja:", + "Alpha:" => "Alfa:", + "Analysis Tools" => "Herramientas de análisis", + "Anova: Single Factor" => "Análisis de varianza de un factor", + "Any value" => "Cualquier valor", + "Apply" => "Aplicar", + "Area" => "Área", + "Arrow" => "Flecha", + "At each change in (column letter):" => "Para cada cambio en (letra de columna):", + "AutoSum (⌘⇧T)" => "Autosuma (⌘⇧T)", + "Average" => "Promedio", + "Background Color:" => "Color de fondo:", + "Bad" => "Incorrecto", + "Bar" => "Barra", + "Before sheet (position, 0 = first):" => "Antes de la hoja (posición, 0 = primera):", + "Between…" => "Entre…", + "Bin Range (blank for automatic bins):" => "Rango de clases (en blanco para clases automáticas):", + "Blanks" => "Celdas en blanco", + "Blue" => "Azul", + "Blue - White - Red" => "Azul - Blanco - Rojo", + "Bold (⌘B)" => "Negrita (⌘B)", + "Border" => "Borde", + "Bottom" => "Inferior", + "Bottom Align" => "Alinear en la parte inferior", + "Bottom Border" => "Borde inferior", + "Bottom Double Border" => "Borde doble inferior", + "Bottom margin (in):" => "Margen inferior (pulg.):", + "Box & Whisker" => "Cajas y bigotes", + "Bubble" => "Burbuja", + "By Changing Variable Cells:" => "Cambiando las celdas de variables:", + "By changing cell:" => "Al cambiar la celda:", + "Calculate Now (F9)" => "Calcular ahora (F9)", + "Calculate Sheet (⇧F9)" => "Calcular hoja (⇧F9)", + "Calculation" => "Cálculo", + "Calculation Options" => "Opciones de cálculo", + "Category:" => "Categoría:", + "Cell Color" => "Color de celda", + "Cell Styles" => "Estilos de celda", + "Cell Values" => "Valores de celda", + "Center Across Selection" => "Centrar en la selección", + "Change" => "Cambiar", + "Change All" => "Cambiar todas", + "Change Chart Type" => "Cambiar tipo de gráfico", + "Chart" => "Gráfico", + "Chart Title" => "Título del gráfico", + "Chart data range:" => "Rango de datos del gráfico:", + "Check Accessibility" => "Comprobar accesibilidad", + "Check Cell" => "Celda de comprobación", + "Choose a PNG or JPEG no larger than 16 MB." => "Elija un PNG o JPEG de 16 MB como máximo.", + "Clear Filter" => "Borrar filtro", + "Clear Rules" => "Borrar reglas", + "Clustered Bar" => "Barra agrupada", + "Clustered Column" => "Columna agrupada", + "Color:" => "Color:", + "Column" => "Columna", + "Column Width" => "Ancho de columna", + "Column chart" => "Gráfico de columnas", + "Column or Bar" => "Columna o barra", + "Column width (characters):" => "Ancho de columna (caracteres):", + "Column widths" => "Ancho de las columnas", + "Columns (blank = all, e.g. A,C):" => "Columnas (en blanco = todas, p. ej. A,C):", + "Combo" => "Combinado", + "Comma" => "Millares", + "Text to Columns|Comma" => "Coma", + "Comma [0]" => "Millares [0]", + "Comment:" => "Comentario:", + "Comments and notes (C)" => "Comentarios y notas (C)", + "Comments pane" => "Panel de comentarios", + "Compatibility" => "Compatibilidad", + "Conditional Formatting Rules Manager" => "Administrador de reglas de formato condicionales", + "Conditional formats" => "Formatos condicionales", + "Confidence Level (%):" => "Nivel de confianza (%):", + "Confidence Level for Mean (%), blank for none:" => "Nivel de confianza para la media (%), en blanco para ninguno:", + "Confidence interval" => "Intervalo de confianza", + "Confidence level (%):" => "Nivel de confianza (%):", + "Constant is Zero" => "Constante igual a cero", + "Contributors" => "Colaboradores", + "Convert Text to Columns" => "Convertir texto en columnas", + "Convert the last ink stroke to a shape" => "Convertir el último trazo de tinta en una forma", + "Convert to Number" => "Convertir en número", + "Convert to Range" => "Convertir en rango", + "Copies" => "Copias", + "Copy (⌘C)" => "Copiar (⌘C)", + "Correlation" => "Coeficiente de correlación", + "Count" => "Recuento", + "CountA" => "ContarA", + "Covariance" => "Covarianza", + "Create Forecast Worksheet" => "Crear hoja de previsión", + "Create Sparklines" => "Crear minigráficos", + "Create a copy" => "Crear una copia", + "Cube" => "Cubo", + "Cumulative Percentage" => "Porcentaje acumulado", + "Currency [0]" => "Moneda [0]", + "Current region" => "Región actual", + "Custom (%):" => "Personalizado (%):", + "Custom Sort" => "Orden personalizado", + "Cut (⌘X)" => "Cortar (⌘X)", + "Damping factor:" => "Factor de amortiguamiento:", + "Data Range:" => "Rango de datos:", + "Data and Model" => "Datos y modelo", + "Data validation" => "Validación de datos", + "Database" => "Base de datos", + "Date unit" => "Unidad de tiempo", + "Day" => "Día", + "Decimal" => "Decimal", + "Define Name…" => "Definir nombre…", + "Delete Comment" => "Eliminar comentario", + "Delete Sheet" => "Eliminar hoja", + "Delete chart" => "Eliminar gráfico", + "Delete rows" => "Eliminar filas", + "Delete…" => "Eliminar…", + "Description (optional):" => "Descripción (opcional):", + "Descriptive Statistics" => "Estadística descriptiva", + "Destination:" => "Destino:", + "Diagonal ↗" => "Diagonal ↗", + "Diagonal ↘" => "Diagonal ↘", + "Dismiss" => "Descartar", + "Display:" => "Texto:", + "Distributed" => "Distribuida", + "Divide" => "Dividir", + "Do you want to save the changes you made to {title}?" => "¿Desea guardar los cambios efectuados en {title}?", + "Don't Save" => "No guardar", + "Double" => "Doble", + "Double Accounting" => "Doble contabilidad", + "Doughnut" => "Anillo", + "Down" => "Hacia abajo", + "Down, then over" => "Hacia abajo, luego hacia la derecha", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "Arrastre para rellenar celdas. Arrastre desde dentro de una celda para seleccionar un rango." + } + "Duplicate Values…" => "Valores duplicados…", + "Edit Name" => "Editar nombre", + "Edit chart title" => "Editar título del gráfico", + "Edit…" => "Editar…", + "End date:" => "Fecha de finalización:", + "Engineering" => "Ingeniería", + "Entire column" => "Toda la columna", + "Entire row" => "Toda la fila", + "Equal To…" => "Es igual a…", + "Erase ink strokes" => "Borrar trazos de tinta", + "Error checking options" => "Opciones de comprobación de errores", + "Error message:" => "Mensaje de error:", + "Error style" => "Estilo de error", + "Errors" => "Errores", + "Every command run in this session (replayable)" => "Todos los comandos ejecutados en esta sesión (reproducibles)", + "Expand formula bar" => "Expandir barra de fórmulas", + "Explanatory Text" => "Texto explicativo", + "Exponential Smoothing" => "Suavización exponencial", + "Export as CSV…" => "Exportar como CSV…", + "Export as PDF…" => "Exportar como PDF…", + "Export as Web Page (.html)…" => "Exportar como página web (.html)…", + "F-Test Two-Sample for Variances" => "Prueba F para varianzas de dos muestras", + "Fill missing points using" => "Rellenar los puntos que faltan con", + "Filter (⌘⇧F)" => "Filtro (⌘⇧F)", + "Filter by Selected Cell's Value" => "Filtrar por el valor de la celda seleccionada", + "Find" => "Buscar", + "Find & Select" => "Buscar y seleccionar", + "Find All" => "Buscar todo", + "Find Next" => "Buscar siguiente", + "Find and Replace" => "Buscar y reemplazar", + "Find what:" => "Buscar:", + "Finding printers…" => "Buscando impresoras…", + "Fits inside the selected cell and moves with its content." => "Se ajusta dentro de la celda seleccionada y se mueve con su contenido.", + "Flash Fill (⌘E)" => "Relleno rápido (⌘E)", + "Font" => "Fuente", + "Footer (in):" => "Pie de página (pulg.):", + "Footer:" => "Pie de página:", + "Forecast Sheet" => "Hoja de previsión", + "Forecast end (date or number; blank: a third of the history):" => { + "Fin de la previsión (fecha o número; en blanco: un tercio del historial):" + } + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Inicio de la previsión (una fecha o número del historial; en blanco: después del último punto):" + } + "Format Cells" => "Formato de celdas", + "Format Cells|Fill" => "Relleno", + "Format Chart Area…" => "Formato del área del gráfico…", + "Format Chart pane" => "Panel Formato de gráfico", + "Format as Table" => "Dar formato como tabla", + "Format cells" => "Aplicar formato a las celdas", + "Format cells that are (value):" => "Dar formato a las celdas que son (valor):", + "Format cells that contain a date occurring:" => "Dar formato a las celdas que contienen una fecha:", + "Format cells that contain the text:" => "Dar formato a las celdas que contienen el texto:", + "Format columns" => "Aplicar formato a las columnas", + "Format rows" => "Aplicar formato a las filas", + "Format values where this formula is true:" => "Dar formato a los valores donde esta fórmula sea verdadera:", + "Formats (T)" => "Formatos (T)", + "Formula Builder" => "Generador de fórmulas", + "Formula:" => "Fórmula:", + "Formulas (F)" => "Fórmulas (F)", + "Formulas and number formats" => "Fórmulas y formatos de números", + "Funnel" => "Embudo", + "GRG Nonlinear" => "GRG Nonlinear", + "Go To" => "Ir a", + "Go To Special" => "Ir a Especial", + "Goal Seek" => "Buscar objetivo", + "Goal Seeking found a solution: {value}" => "Buscar objetivo encontró una solución: {value}", + "Good" => "Bueno", + "Good, Bad and Neutral" => "Bueno, malo y neutral", + "Gradebook" => "Libro de calificaciones", + "Grayscale" => "Escala de grises", + "Greater Than…" => "Mayor que…", + "Green" => "Verde", + "Green - White - Red" => "Verde - Blanco - Rojo", + "Green - Yellow - Red" => "Verde - Amarillo - Rojo", + "Green Fill with Dark Green Text" => "Relleno verde con texto verde oscuro", + "Grouped By:" => "Agrupado por:", + "Growth" => "Geométrica", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "Encabezado (&L izquierda, &C centro, &R derecha; &P página, &N páginas, &D fecha, &A hoja):" + } + "Header (in):" => "Encabezado (pulg.):", + "Heading 1" => "Título 1", + "Heading 2" => "Título 2", + "Heading 3" => "Título 3", + "Heading 4" => "Título 4", + "Hex" => "Hex", + "Hidden" => "Oculta", + "Hidden: {sheets}" => "Ocultas: {sheets}", + "Hide Sheet" => "Ocultar hoja", + "Hierarchy & more" => "Jerarquía y más", + "Highlight Cells Rules" => "Reglas para resaltar las celdas", + "Highlighter" => "Resaltador", + "Histogram" => "Histograma", + "Horizontal (Category) Axis Labels:" => "Etiquetas del eje horizontal (categoría):", + "Horizontal axis title:" => "Título del eje horizontal:", + "Household Budget" => "Presupuesto familiar", + "How agents drive GridCraft (MCP / control channel)" => "Cómo controlan los agentes GridCraft (MCP / canal de control)", + "Hypothesized Mean Difference:" => "Diferencia hipotética entre las medias:", + "Ignore Once" => "Omitir una vez", + "Ignore blank" => "Ignorar espacios en blanco", + "Import a text or CSV file" => "Importar un archivo de texto o CSV", + "In the last 7 days" => "En los últimos 7 días", + "In-cell dropdown" => "Celda con lista desplegable", + "Include forecast statistics" => "Incluir estadísticas de previsión", + "Indent" => "Sangría", + "Information" => "Información", + "Input" => "Entrada", + "Input Range:" => "Rango de entrada:", + "Input X Range:" => "Rango X de entrada:", + "Input Y Range:" => "Rango Y de entrada:", + "Input message:" => "Mensaje de entrada:", + "Insert\nSlicer" => "Insertar\nsegmentación", + "Insert Calculated Field" => "Insertar campo calculado", + "Insert Chart" => "Insertar gráfico", + "Insert Function (⇧F3)" => "Insertar función (⇧F3)", + "Insert Hyperlink" => "Insertar hipervínculo", + "Insert Link" => "Insertar vínculo", + "Insert Link (⌘K)" => "Insertar vínculo (⌘K)", + "Insert Slicer" => "Insertar segmentación de datos", + "Insert a picture" => "Insertar una imagen", + "Insert a slicer to filter a table" => "Insertar una segmentación de datos para filtrar una tabla", + "Insert an icon" => "Insertar un icono", + "Insert rows" => "Insertar filas", + "Insert…" => "Insertar…", + "Inside Borders" => "Bordes interiores", + "Interpolation" => "Interpolación", + "Interval:" => "Intervalo:", + "Italic (⌘I)" => "Cursiva (⌘I)", + "Join the ArtCraft Discord" => "Únase al Discord de ArtCraft", + "Justify" => "Justificar", + "Keep" => "Conservar", + "Keep Solver Solution" => "Conservar solución de Solver", + "Kth Largest (blank for none):" => "K-ésimo mayor (en blanco para ninguno):", + "Kth Smallest (blank for none):" => "K-ésimo menor (en blanco para ninguno):", + "Labels in first row" => "Rótulos en la primera fila", + "Last cell" => "Última celda", + "Last month" => "El mes pasado", + "Last week" => "La semana pasada", + "Left Border" => "Borde izquierdo", + "Left margin (in):" => "Margen izquierdo (pulg.):", + "Legend Entries (Series)" => "Entradas de leyenda (series)", + "Less Than…" => "Es menor que…", + "Light Blue" => "Azul claro", + "Light Red Fill" => "Relleno rojo claro", + "Light Red Fill with Dark Red Text" => "Relleno rojo claro con texto rojo oscuro", + "Line" => "Línea", + "Line chart" => "Gráfico de líneas", + "Line or Area" => "Línea o área", + "Line with Markers" => "Línea con marcadores", + "Linear" => "Lineal", + "Link to (web address, e-mail or Sheet!A1):" => "Vincular a (dirección web, correo electrónico u Hoja!A1):", + "Linked Cell" => "Celda vinculada", + "Link…" => "Vínculo…", + "List" => "Lista", + "Location Range:" => "Rango de ubicación:", + "Locked" => "Bloqueada", + "Macros and scripts in this workbook (Alt+F8)" => "Macros y scripts de este libro (Alt+F8)", + "Make Unconstrained Variables Non-Negative" => "Convertir variables sin restricciones en no negativas", + "Manage Rules…" => "Administrar reglas…", + "Markers" => "Marcadores", + "Match case" => "Hacer coincidir mayúsculas y minúsculas", + "Match entire cell contents" => "Buscar solo celdas completas", + "Max" => "Máx.", + "Maximum:" => "Máximo:", + "Median" => "Mediana", + "Middle Align" => "Alinear en el medio", + "Min" => "Mín.", + "Minimum / Source / Formula:" => "Mínimo / Origen / Fórmula:", + "Models" => "Modelos", + "Modify" => "Modificar", + "Month" => "Mes", + "More Borders…" => "Más bordes…", + "More Colors…" => "Más colores…", + "More Functions…" => "Más funciones…", + "More commands" => "Más comandos", + "Move or Copy" => "Mover o copiar", + "Move or Copy Sheet…" => "Mover o copiar hoja…", + "Moving Average" => "Media móvil", + "Multiply" => "Multiplicar", + "My data has headers" => "Mis datos tienen encabezados", + "My list has headers" => "Mi lista tiene encabezados", + "Name" => "Nombre", + "Name Manager" => "Administrador de nombres", + "Name:" => "Nombre:", + "Neutral" => "Neutral", + "New Comment" => "Nuevo comentario", + "New Name" => "Nombre nuevo", + "New Rule…" => "Nueva regla…", + "New Workbook" => "Libro nuevo", + "New Worksheet Ply:" => "En una hoja nueva:", + "New title (Modify):" => "Nuevo título (Modificar):", + "New…" => "Nuevo…", + "Next month" => "El mes próximo", + "Next week" => "La semana próxima", + "No Border" => "Sin borde", + "No Fill" => "Sin relleno", + "No names defined" => "No hay nombres definidos", + "No picture selected" => "No se ha seleccionado ninguna imagen", + "No printers found. Configure a system printer or export a PDF." => { + "No se encontraron impresoras. Configure una impresora del sistema o exporte un PDF." + } + "No ranges yet." => "Aún no hay rangos.", + "None" => "Ninguno", + "Normal Probability" => "Gráfico de probabilidad normal", + "Not in Dictionary ({cell}):" => "No está en el diccionario ({cell}):", + "Note" => "Notas", + "Note:" => "Nota:", + "Number Format" => "Formato de número", + "Number Stored as Text" => "Número almacenado como texto", + "Numbers" => "Números", + "OK" => "Aceptar", + "One-sided" => "A una cara", + "Open…" => "Abrir…", + "Operation" => "Operación", + "Options|Editing" => "Edición", + "Orange" => "Naranja", + "Orientation (degrees)" => "Orientación (grados)", + "Other:" => "Otro:", + "Output" => "Salida", + "Output Range:" => "Rango de salida:", + "Output options" => "Opciones de salida", + "Outside Borders" => "Bordes externos", + "Oval" => "Óvalo", + "Over, then down" => "Hacia la derecha, luego hacia abajo", + "Page Break Preview" => "Vista previa de salto de página", + "Page Breaks" => "Saltos de página", + "Page Setup" => "Configurar página", + "Page order" => "Orden de las páginas", + "Paper Size" => "Tamaño de papel", + "Pareto (sorted histogram)" => "Pareto (histograma ordenado)", + "Password" => "Contraseña", + "Password (optional):" => "Contraseña (opcional):", + "Password:" => "Contraseña:", + "Paste (⌘V)" => "Pegar (⌘V)", + "Paste Special" => "Pegado especial", + "Paste formulas that refer to the copied cells" => "Pegar fórmulas que hacen referencia a las celdas copiadas", + "Pen\nBlack" => "Lápiz\nnegro", + "Pen\nBlue" => "Lápiz\nazul", + "Pen\nRed" => "Lápiz\nrojo", + "Percent" => "Porcentaje", + "Pick From Drop-down List…" => "Elegir de la lista desplegable…", + "Pick From List" => "Elegir de la lista", + "Picture file path (PNG or JPEG):" => "Ruta del archivo de imagen (PNG o JPEG):", + "Pie" => "Circular", + "Pie or Doughnut" => "Circular o anillo", + "Place Picture in Cell" => "Colocar imagen en la celda", + "Place Picture over Cells" => "Colocar imagen sobre las celdas", + "Place in Cell" => "Colocar en la celda", + "Place over Cells" => "Colocar sobre las celdas", + "Print Area" => "Área de impresión", + "Print Titles" => "Imprimir títulos", + "Print failed: the printing worker stopped." => "Error al imprimir: el proceso de impresión se detuvo.", + "Print failed: {error}" => "Error al imprimir: {error}", + "Print job submitted." => "Trabajo de impresión enviado.", + "Print job submitted: {receipt}" => "Trabajo de impresión enviado: {receipt}", + "Printer" => "Impresora", + "Printer default" => "Predeterminado de la impresora", + "Printer discovery failed." => "No se pudieron buscar impresoras.", + "Print…" => "Imprimir…", + "Product" => "Producto", + "Protect\nSheet" => "Proteger\nhoja", + "Protect Sheet" => "Proteger hoja", + "Protect Structure and Windows" => "Proteger estructura y ventanas", + "Protect Workbook structure" => "Proteger la estructura del libro", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Proteger libro para: Estructura (no se pueden agregar, mover, cambiar de nombre, ocultar ni eliminar hojas)." + } + "Protection" => "Proteger", + "Purple" => "Morado", + "Quarterly Sales Dashboard" => "Panel de ventas trimestrales", + "Radar" => "Radial", + "Range password:" => "Contraseña del rango:", + "Ranges that stay editable when the sheet is protected:" => "Rangos que siguen siendo editables cuando la hoja está protegida:", + "Rank and Percentile" => "Jerarquía y percentil", + "Recent Colors" => "Colores recientes", + "Recommended Charts" => "Gráficos recomendados", + "Rectangle" => "Rectángulo", + "Red" => "Rojo", + "Red - Yellow - Green" => "Rojo - Amarillo - Verde", + "Red Border" => "Borde rojo", + "Red Text" => "Texto rojo", + "Redo" => "Rehacer", + "Redo (⌘Y)" => "Rehacer (⌘Y)", + "Reference:" => "Referencia:", + "Refers To" => "Se refiere a", + "Refers to cells:" => "Se refiere a las celdas:", + "Refers to:" => "Se refiere a:", + "Refresh printers" => "Actualizar impresoras", + "Regression" => "Regresión", + "Remove" => "Quitar", + "Remove Duplicates" => "Quitar duplicados", + "Remove the password (Modify)" => "Quitar la contraseña (Modificar)", + "Rename Sheet" => "Cambiar nombre de hoja", + "Replace" => "Reemplazar", + "Replace All" => "Reemplazar todo", + "Replace with:" => "Reemplazar con:", + "Residuals" => "Residuos", + "Restore Original Values" => "Restaurar valores originales", + "Right Border" => "Borde derecho", + "Right margin (in):" => "Margen derecho (pulg.):", + "Rounded Rectangle" => "Rectángulo redondeado", + "Row Height" => "Alto de fila", + "Row height (pixels):" => "Alto de fila (píxeles):", + "Sample" => "Muestra", + "Save (⌘S)" => "Guardar (⌘S)", + "Save As…" => "Guardar como…", + "Save Changes?" => "¿Guardar cambios?", + "Save a Copy" => "Guardar una copia", + "Save a Copy as Excel Workbook (.xlsx)…" => "Guardar una copia como libro de Excel (.xlsx)…", + "Save a copy as .{format}" => "Guardar una copia como .{format}", + "Scatter" => "Dispersión", + "Scatter or Bubble" => "Dispersión o burbujas", + "Scatter with Lines" => "Dispersión con líneas", + "Scope" => "Ámbito", + "Scope (Workbook or sheet name):" => "Ámbito (Workbook o nombre de hoja):", + "ScreenTip:" => "Info en pantalla:", + "Search" => "Buscar", + "Search Commands" => "Buscar comandos", + "Search and run any command" => "Buscar y ejecutar cualquier comando", + "Search commands" => "Buscar comandos", + "Search commands (⌘⇧Space)" => "Buscar comandos (⌘⇧Espacio)", + "Seasonality (auto, 0 for none, or a season length):" => "Estacionalidad (auto, 0 para ninguna o la duración de una temporada):", + "Select" => "Seleccionar", + "Select Data" => "Seleccionar datos", + "Select Data Source" => "Seleccionar origen de datos", + "Select Data…" => "Seleccionar datos…", + "Select a Solving Method:" => "Método de resolución:", + "Select a chart first." => "Seleccione primero un gráfico.", + "Select a printer" => "Seleccionar una impresora", + "Select and move ink and shapes" => "Seleccionar y mover tinta y formas", + "Semicolon" => "Punto y coma", + "Series" => "Series", + "Series in" => "Series en", + "Series{n}" => "Serie{n}", + "Series…" => "Series…", + "Set Objective:" => "Establecer objetivo:", + "Set cell:" => "Establecer la celda:", + "Share: export or save a copy" => "Compartir: exportar o guardar una copia", + "Sheets: {sheets}" => "Hojas: {sheets}", + "Shift cells down" => "Desplazar las celdas hacia abajo", + "Shift cells left" => "Desplazar las celdas hacia la izquierda", + "Shift cells right" => "Desplazar las celdas hacia la derecha", + "Shift cells up" => "Desplazar las celdas hacia arriba", + "Show Formulas (⌃`)" => "Mostrar fórmulas (⌃`)", + "Show password" => "Mostrar contraseña", + "Shrink to fit" => "Reducir hasta ajustar", + "Single" => "Simple", + "Single Accounting" => "Simple contabilidad", + "Skip blanks" => "Saltar blancos", + "Slicer" => "Segmentación de datos", + "Solve" => "Resolver", + "Solver Parameters" => "Parámetros de Solver", + "Solver Results" => "Resultados de Solver", + "Sort & Filter" => "Ordenar y filtrar", + "Sort Ascending" => "Orden ascendente", + "Sort Descending" => "Orden descendente", + "Sort by" => "Ordenar por", + "Source:" => "Origen:", + "Space" => "Espacio", + "Special…" => "Especial…", + "Spelling (F7)" => "Ortografía (F7)", + "Stacked Area" => "Área apilada", + "Stacked Bar" => "Barra apilada", + "Stacked Column" => "Columna apilada", + "Stacked Line" => "Línea apilada", + "Standard Colors" => "Colores estándar", + "Standard Errors" => "Errores típicos", + "Standard Width" => "Ancho estándar", + "Standard column width (pixels):" => "Ancho de columna estándar (píxeles):", + "Standardized Residuals" => "Residuos estándares", + "Start a conversation:" => "Iniciar una conversación:", + "Start a new workbook" => "Crear un libro nuevo", + "Statistic" => "Estadístico", + "Statistical" => "Estadísticas", + "Step value:" => "Incremento:", + "Stock" => "Cotizaciones", + "Stop value:" => "Límite:", + "Subject to the Constraints:" => "Sujeto a las restricciones:", + "Submitting print job…" => "Enviando trabajo de impresión…", + "Subscript" => "Subíndice", + "Subtract" => "Restar", + "Suggestions:" => "Sugerencias:", + "Sum" => "Suma", + "Summary statistics" => "Resumen de estadísticas", + "Sunburst" => "Proyección solar", + "Superscript" => "Superíndice", + "Switch Row/Column" => "Cambiar entre filas y columnas", + "Tab" => "Tabulación", + "Table (⌘T)" => "Tabla (⌘T)", + "Table Styles" => "Estilos de tabla", + "Tab|Insert" => "Insertar", + "Text length" => "Longitud del texto", + "Text that Contains…" => "Texto que contiene…", + "Text to Columns" => "Texto en columnas", + "The output range already holds data. Replace it with the report?" => { + "El rango de salida ya contiene datos. ¿Desea reemplazarlos por el informe?" + } + "The spelling check is complete for the entire sheet." => "Se ha completado la revisión ortográfica de toda la hoja.", + "Theme Colors" => "Colores del tema", + "Themed Cell Styles" => "Estilos de celda temáticos", + "Then by" => "A continuación por", + "There are no conditional formatting rules on this sheet." => "No hay reglas de formato condicional en esta hoja.", + "Thick Bottom Border" => "Borde inferior grueso", + "Thick Outside Borders" => "Borde de cuadro grueso", + "This month" => "Este mes", + "This week" => "Esta semana", + "This workbook" => "Este libro", + "Timeline range (blank: first column of the selection):" => "Rango de la escala de tiempo (en blanco: primera columna de la selección):", + "Title:" => "Título:", + "Titles and Headings" => "Títulos y encabezados", + "To value:" => "Con el valor:", + "To:" => "Para:", + "Today" => "Hoy", + "Tomorrow" => "Mañana", + "Top" => "Superior", + "Top Align" => "Alinear en la parte superior", + "Top Border" => "Borde superior", + "Top and Bottom Border" => "Borde superior e inferior", + "Top and Double Bottom Border" => "Borde superior y borde doble inferior", + "Top and Thick Bottom Border" => "Borde superior y borde inferior grueso", + "Top margin (in):" => "Margen superior (pulg.):", + "Top/Bottom Rules" => "Reglas para valores superiores e inferiores", + "Total" => "Total", + "Transpose (E)" => "Transponer (E)", + "Treat consecutive delimiters as one" => "Considerar delimitadores consecutivos como uno solo", + "Treemap" => "Rectángulos", + "Triangle" => "Triángulo", + "Two-sided printing" => "Impresión a doble cara", + "Two-sided: long edge" => "A doble cara: borde largo", + "Two-sided: short edge" => "A doble cara: borde corto", + "Type" => "Tipo", + "Type (custom format code):" => "Tipo (código de formato personalizado):", + "Type a command, e.g. freeze, chart, bold…" => "Escriba un comando, p. ej. inmovilizar, gráfico, negrita…", + "Underline (⌘U)" => "Subrayado (⌘U)", + "Undo" => "Deshacer", + "Undo (⌘Z)" => "Deshacer (⌘Z)", + "Undo list" => "Lista de deshacer", + "Unhide" => "Mostrar", + "Unhide Sheet…" => "Mostrar hoja…", + "Unhide sheet:" => "Mostrar hoja:", + "Unlock with password" => "Desbloquear con contraseña", + "Unprotect Sheet" => "Desproteger hoja", + "Unprotect Workbook" => "Desproteger libro", + "Up" => "Hacia arriba", + "Use AutoFilter" => "Usar Autofiltro", + "Use function" => "Usar función", + "Validation" => "Validación", + "Value" => "Valor", + "Value Of:" => "Valor de:", + "Values (V)" => "Valores (V)", + "Values and number formats" => "Valores y formatos de números", + "Values range (blank: second column of the selection):" => "Rango de valores (en blanco: segunda columna de la selección):", + "Variable 1 Range:" => "Rango para la variable 1:", + "Variable 2 Range:" => "Rango para la variable 2:", + "Version {version}" => "Versión {version}", + "Vertical" => "Vertical", + "Vertical axis title:" => "Título del eje vertical:", + "Visible cells only" => "Solo celdas visibles", + "Warning" => "Advertencia", + "Warning Text" => "Texto de advertencia", + "Watch\nWindow" => "Ventana\nInspección", + "Waterfall" => "Cascada", + "Web" => "Web", + "Weekday" => "Día laborable", + "What-If Analysis" => "Análisis de hipótesis", + "White - Green" => "Blanco - Verde", + "White - Red" => "Blanco - Rojo", + "Whole number" => "Número entero", + "Win/Loss" => "Ganancia o pérdida", + "Within workbook" => "Dentro del libro", + "Workbook" => "Libro", + "Workbook\nStatistics" => "Estadísticas\ndel libro", + "Workbook Statistics" => "Estadísticas del libro", + "Wrap text" => "Ajustar texto", + "Year" => "Año", + "Yellow Fill with Dark Yellow Text" => "Relleno amarillo con texto amarillo oscuro", + "Z to A" => "De Z a A", + "Zeros" => "Ceros", + "Zoom In" => "Acercar", + "Zoom Out" => "Alejar", + "Zoom to 100%" => "Zoom al 100%", + "Zoom to Selection" => "Ampliar selección", + "Zoom…" => "Zoom…", + "and:" => "y:", + "applies to" => "se aplica a", + "between" => "entre", + "dashed" => "discontinuo", + "dotted" => "punteado", + "double" => "doble", + "equal to" => "igual a", + "greater than" => "mayor que", + "greater than or equal to" => "mayor o igual que", + "less than" => "menor que", + "less than or equal to" => "menor o igual que", + "medium" => "mediano", + "none" => "ninguno", + "not between" => "no está entre", + "not equal to" => "no igual a", + "t-Test: Paired Two Sample for Means" => "Prueba t para medias de dos muestras emparejadas", + "t-Test: Two-Sample Assuming Equal Variances" => "Prueba t para dos muestras suponiendo varianzas iguales", + "t-Test: Two-Sample Assuming Unequal Variances" => "Prueba t para dos muestras suponiendo varianzas desiguales", + "thick" => "grueso", + "thin" => "fino", + "this workbook" => "este libro", + "with" => "con", + "{count} cell(s) found" => "{count} celda(s) encontrada(s)", + "£ English (United Kingdom)" => "£ Inglés (Reino Unido)", + "¥ Japanese" => "¥ Japonés", + "— 1 step" => "— 1 paso", + "— VBA project (preserved, not run)" => "— Proyecto VBA (conservado, no ejecutado)", + "— {steps} steps" => "— {steps} pasos", + "€ Euro" => "€ Euro", "Diagram" => "Diagrama", "Decorative Text" => "Texto decorativo", "Paste" => "Pegar", @@ -339,6 +1094,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Print Entire Workbook" => "Imprimir todo el libro", "Fit Sheet on One Page" => "Ajustar hoja en una página", "Page Setup…" => "Configurar página…", + "Page {page}" => "Página {page}", "Page {page} of {pages}" => "Página {page} de {pages}", "Nothing to print." => "No hay nada que imprimir.", "Previous page" => "Página anterior", @@ -521,6 +1277,31 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "Detener", "New Macro" => "Nueva macro", "Show" => "Mostrar", + "Generated|Column" => "Columna", + "Generated|Row" => "Fila", + "Book" => "Libro", + "Sheet" => "Hoja", + "Count Numbers" => "Contar números", + "Type to filter…" => "Escriba para filtrar…", + "Nothing to paste." => "No hay datos para pegar.", + "No cells were found." => "No se encontraron celdas.", + "Or select a category:" => "O seleccione una categoría:", + "Most Recently Used" => "Usadas recientemente", + "Insert Function…" => "Insertar función…", + "Paste Names…" => "Pegar nombres…", + "Macro name:" => "Nombre de la macro:", + "Shortcut key:" => "Método abreviado:", + "Description:" => "Descripción:", + "This workbook has no scripts or macros." => "Este libro no contiene scripts ni macros.", + "Check for Updates…" => "Buscar actualizaciones…", + "Checking for updates…" => "Buscando actualizaciones…", + "Could not check for updates." => "No se pudieron buscar actualizaciones.", + "Check Again" => "Volver a comprobar", + "Insert Function" => "Insertar función", + "Search:" => "Buscar:", + "e.g. lookup, average, date" => "p. ej., búsqueda, promedio, fecha", + "Cancel" => "Cancelar", + "All" => "Todas", "Collapse dialog" => "Contraer diálogo", "Expand dialog" => "Expandir diálogo", _ => return None, diff --git a/crates/ui-egui/src/i18n/es_functions.rs b/crates/ui-egui/src/i18n/es_functions.rs index da607ed5bf..5c621a186c 100644 --- a/crates/ui-egui/src/i18n/es_functions.rs +++ b/crates/ui-egui/src/i18n/es_functions.rs @@ -1,35 +1,1038 @@ -//! Spanish help for the worksheet functions. It covers the 10 common functions Spanish had help -//! for (SUM, AVERAGE, IF…); the others keep their English help. +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. -/// Function descriptions. pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 para positivo, -1 para negativo y 0 para cero."), + ("A random integer between two bounds, inclusive.", "Un número entero aleatorio entre dos límites, inclusive."), + ("A random number between 0 and 1, recalculated every time.", "Un número aleatorio entre 0 y 1, recalculado cada vez."), + ("A range or array without its blank outer rows and columns.", "Un rango o matriz sin sus filas y columnas exteriores en blanco."), + ("A reference shifted from a starting point.", "Una referencia desplazada desde un punto de partida."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Estadística del modelo FORECAST.ETS: 1 alfa, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 tamaño del paso.", + ), + ("A subtotal that can skip hidden rows.", "Un subtotal que puede omitir filas ocultas."), + ("Absolute value (modulus) of a complex number.", "Valor absoluto (módulo) de un número complejo."), + ("Absolute value of a number.", "Valor absoluto de un número."), + ("Accrued interest of a security paying interest at maturity.", "Intereses devengados de un bono que paga intereses al vencimiento."), + ("Accrued interest of a security paying periodic interest.", "Intereses devengados de un bono que paga intereses periódicos."), + ("Accumulates an array into one value.", "Acumula una matriz en un valor."), ("Adds all the numbers in the arguments.", "Suma los números."), ("Adds the cells that meet a condition.", "Suma las celdas que cumplen un criterio."), + ( + "Adds the cells that meet every condition.", + "Devuelve la suma de valores numéricos en celdas de la hoja de cálculo que satisfacen todas las condiciones.", + ), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Devuelve la suma de valores numéricos en un campo de base de datos, para registros que satisfacen los criterios.", + ), + ("Adds the squares of the numbers.", "Devuelve la suma de los números al cuadrado."), + ("Amount received at maturity for a fully invested security.", "Monto recibido al vencimiento por un bono totalmente pagado."), + ("An aggregate that can skip hidden rows and errors.", "Un agregado que puede omitir filas ocultas y errores."), + ("Angle of a complex number in radians.", "Ángulo de un número complejo en radianes."), + ("Angle of the point (x, y) from the x-axis in radians.", "Ángulo del punto (x, y) desde el eje x en radianes."), + ("Annual yield of a discounted security.", "Rendimiento anual de un bono con descuento."), + ("Annual yield of a security paying interest at maturity.", "Rendimiento anual de un bono que paga intereses al vencimiento."), + ("Applies a LAMBDA to each column.", "Aplica un LAMBDA a cada columna."), + ("Applies a LAMBDA to each row.", "Aplica un LAMBDA a cada fila."), + ("Applies a LAMBDA to each value.", "Aplica un LAMBDA a cada valor."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Búsqueda aproximada en un vector ordenado o en la primera fila/columna de una matriz.", + ), + ("Arccosine in radians.", "Arcocoseno en radianes."), + ("Arccotangent in radians (0 to pi).", "Arccotangente en radianes (0 a pi)."), + ("Arcsine in radians.", "Arcoseno en radianes."), + ("Arctangent in radians.", "Arctangente en radianes."), ("Arithmetic mean of the numbers.", "Devuelve el promedio de los números."), + ("Average absolute deviation from the mean.", "Desviación absoluta promedio de la media."), + ("Average of the cells that meet a condition.", "Promedio de las celdas de la hoja de cálculo que cumplen una condición."), + ("Average of the cells that meet every condition.", "Promedio de las celdas de la hoja de cálculo que cumplen todas las condiciones."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Promedia los números en un campo de los registros que cumplen con los criterios.", + ), + ("Base-10 logarithm of a complex number.", "Logaritmo de base 10 de un número complejo."), + ("Base-10 logarithm.", "Logaritmo de base 10."), + ("Base-2 logarithm of a complex number.", "Logaritmo de base 2 de un número complejo."), + ("Bessel function of the first kind, J_n(x).", "Función de Bessel de primer tipo, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Función de Bessel de segundo tipo, Y_n(x)."), + ("Beta distribution density or probability.", "Densidad o probabilidad de distribución beta."), + ("Binomial probability.", "Probabilidad binomial."), + ("Bitwise AND of two non-negative integers.", "Bit a bit AND de dos enteros no negativos."), + ("Bitwise OR of two non-negative integers.", "Bit a bit OR de dos enteros no negativos."), + ("Bitwise exclusive OR of two non-negative integers.", "OR exclusivo bit a bit de dos enteros no negativos."), + ("Bond-equivalent yield of a Treasury bill.", "Rendimiento equivalente a un bono de una letra del Tesoro."), + ("Breaks a row or column into columns of the given length.", "Divide una fila o columna en columnas de la longitud dada."), + ("Breaks a row or column into rows of the given length.", "Divide una fila o columna en filas de la longitud dada."), + ("Builds a cell address as text from row and column numbers.", "Crea una dirección de celda como texto a partir de números de fila y columna."), + ( + "Builds a complex number as text from real and imaginary parts.", + "Construye un número complejo como texto a partir de partes reales e imaginarias.", + ), + ("Builds a date serial number from a year, month and day.", "Crea un número de serie de fecha a partir de un año, mes y día."), + ( + "Builds a summary table grouping values by row and column fields.", + "Crea una tabla de resumen que agrupa valores por campos de fila y columna.", + ), + ( + "Builds a time (a fraction of a day) from hours, minutes and seconds.", + "Crea un tiempo (una fracción de un día) a partir de horas, minutos y segundos.", + ), + ("Builds an array from a LAMBDA.", "Crea una matriz a partir de LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Crea una matriz de números escalonados uniformemente."), + ("Builds an array of random numbers in a range.", "Crea una matriz de números aleatorios en un rango."), + ("Byte version of FIND.", "Versión en bytes de FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Versión en bytes de LEFT (igual que LEFT para texto de un solo byte)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Versión en bytes de LEN (igual que LEN para texto de un solo byte)."), + ("Byte version of MID (same as MID for single-byte text).", "Versión en bytes de MID (igual que MID para texto de un solo byte)."), + ("Byte version of REPLACE.", "Versión en bytes de REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Versión en bytes de RIGHT (igual que RIGHT para texto de un solo byte)."), + ("Byte version of SEARCH.", "Versión en bytes de SEARCH."), + ( + "Capitalises the first letter of each word and lower-cases the rest.", + "Pone en mayúscula la primera letra de cada palabra y el resto en minúsculas.", + ), + ("Chi-squared density or left-tailed probability.", "Densidad de chi-cuadrado o probabilidad de cola izquierda."), + ("Chi-squared test of independence.", "Prueba de independencia Chi-cuadrado."), + ("Column number of a reference.", "Número de columna de una referencia."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Compara una expresión con una lista de valores y devuelve el resultado emparejado con la primera coincidencia.", + ), + ("Complementary error function, 1 - ERF(x).", "Función de error complementaria, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Conjugado complejo de un número complejo."), + ( + "Confidence interval half-width using Student's t distribution.", + "Semianchura del intervalo de confianza utilizando la distribución t de Student.", + ), + ("Confidence interval half-width using the normal distribution.", "Semianchura del intervalo de confianza utilizando la distribución normal."), + ("Converts Roman numerals to a number.", "Convierte números romanos en un número."), + ("Converts a binary number to decimal.", "Convierte un número binario a decimal."), + ("Converts a binary number to hexadecimal.", "Convierte un número binario a hexadecimal."), + ("Converts a binary number to octal.", "Convierte un número binario a octal."), + ("Converts a date written as text into a date serial number.", "Convierte una fecha escrita como texto en un número de serie de fecha."), + ("Converts a decimal number to binary.", "Convierte un número decimal a binario."), + ("Converts a decimal number to hexadecimal.", "Convierte un número decimal a hexadecimal."), + ("Converts a decimal number to octal.", "Convierte un número decimal a octal."), + ("Converts a decimal price to fractional notation.", "Convierte un precio decimal a notación fraccionaria."), + ("Converts a fractional price notation to a decimal number.", "Convierte una notación de precio fraccionario a un número decimal."), + ("Converts a hexadecimal number to binary.", "Convierte un número hexadecimal a binario."), + ("Converts a hexadecimal number to decimal.", "Convierte un número hexadecimal a decimal."), + ("Converts a hexadecimal number to octal.", "Convierte un número hexadecimal a octal."), + ("Converts a measurement from one unit to another.", "Convierte una medida de una unidad a otra."), + ("Converts a number to Roman numerals in one of five styles.", "Convierte un número a números romanos en uno de cinco estilos."), + ("Converts a time written as text into a fraction of a day.", "Convierte una hora escrita como texto en una fracción de día."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Convierte un valor en un número: los números permanecen, VERDADERO es 1, todo lo demás es 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Convierte una matriz en texto, ya sea como una lista de comas o como una constante de matriz estricta.", + ), + ("Converts an octal number to binary.", "Convierte un número octal a binario."), + ("Converts an octal number to decimal.", "Convierte un número octal a decimal."), + ("Converts an octal number to hexadecimal.", "Convierte un número octal a hexadecimal."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Convierte cualquier valor en texto, opcionalmente en forma estricta (entre comillas).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Convierte entre el euro y las antiguas monedas de los países de la zona euro a los tipos de cambio fijos.", + ), + ("Converts degrees to radians.", "Convierte grados en radianes."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Convierte caracteres de ancho completo a medio ancho (sin cambios para texto de un solo byte).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Convierte caracteres de ancho medio a ancho completo (sin cambios en esta configuración regional).", + ), + ("Converts radians to degrees.", "Convierte radianes a grados."), + ("Converts text that looks like a number, date or time into a number.", "Convierte texto que parece un número, fecha u hora en un número."), + ( + "Converts text to a number using the given decimal and group separators.", + "Convierte texto en un número utilizando los separadores decimales y de grupo indicados.", + ), + ("Converts text to lower case.", "Convierte texto a minúsculas."), + ("Converts text to upper case.", "Convierte texto a mayúsculas."), + ("Correlation coefficient of two data sets.", "Coeficiente de correlación de dos conjuntos de datos."), + ("Cosecant of a complex number.", "Cosecante de un número complejo."), + ("Cosecant of an angle in radians.", "Cosecante de un ángulo en radianes."), + ("Cosine of a complex number.", "Coseno de un número complejo."), + ("Cosine of an angle in radians.", "Coseno de un ángulo en radianes."), + ("Cotangent of a complex number.", "Cotangente de un número complejo."), + ("Cotangent of an angle in radians.", "Cotangente de un ángulo en radianes."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Cuenta los días entre dos fechas en un año de 360 días (US o método europeo).", + ), + ("Counts empty cells and empty text in a range.", "Cuenta celdas vacías de la hoja de cálculo y texto vacío en un rango."), + ("Counts how many values fall into each bin, as a vertical array.", "Cuenta cuántos valores caen en cada contenedor, como una matriz vertical."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Cuenta las celdas de la hoja de cálculo que no están en blanco en un campo de los registros coincidentes (o los registros coincidentes).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Cuenta las celdas numéricas de la hoja de cálculo en un campo de los registros coincidentes (o los registros coincidentes).", + ), ("Counts the cells that meet a condition.", "Cuenta las celdas que cumplen un criterio."), + ("Counts the cells that meet every condition.", "Cuenta las celdas de la hoja de cálculo que cumplen todas las condiciones."), + ("Counts the characters in a text.", "Cuenta los caracteres de un texto."), + ("Counts the columns in an array or range.", "Cuenta las columnas de una matriz o rango."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Cuenta los elementos de un conjunto de cubos (sin conexiones de cubos; #N/A)."), + ("Counts the non-empty values.", "Cuenta los valores que no están vacíos."), ("Counts the numbers.", "Cuenta las celdas que contienen números."), + ("Counts the rows in an array or range.", "Cuenta las filas en una matriz o rango."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Cuenta años, meses o días completos entre dos fechas. unidad: Y, M, D, MD, YM o YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Cuenta los días laborables (de lunes a viernes) entre dos fechas, excluyendo festivos.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Cuenta los días laborables entre dos fechas con un fin de semana personalizado, excluyendo festivos.", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "Crea un enlace; la celda muestra el nombre descriptivo o el enlace en sí.", + ), + ("Creates a reusable custom function.", "Crea una función personalizada reutilizable."), + ("Cumulative beta probability.", "Probabilidad beta acumulada."), + ("Cumulative lognormal probability.", "Probabilidad lognormal acumulada."), + ("Cuts off the fractional part of a number at the given digits.", "Corta la parte fraccionaria de un número en los dígitos dados."), + ("Days from settlement to the next coupon date.", "Días desde la liquidación hasta la siguiente fecha de pago de intereses."), + ("Days from the start of the coupon period to settlement.", "Días desde el inicio del periodo de pago de intereses hasta la liquidación."), + ("Days in the coupon period that contains settlement.", "Días del periodo de pago de intereses que contiene la liquidación."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Depreciación de saldo decreciente en cualquier lapso de períodos, pasando a línea recta.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Define un conjunto de miembros del cubo (sin conexiones de cubo; #N/A)."), + ("Determinant of a square matrix.", "Determinante de una matriz cuadrada."), + ("Difference of two complex numbers.", "Diferencia de dos números complejos."), + ("Discount rate of a security.", "Tasa de descuento de un bono."), + ("Double factorial of a number.", "Doble factorial de un número."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Depreciación por doble saldo decreciente (u otro factor) durante un período.", + ), + ( + "Effective annual rate from a nominal rate and compounding periods.", + "Tasa anual efectiva a partir de una tasa nominal y períodos de capitalización.", + ), + ("Equivalent interest rate for the growth of an investment.", "Tasa de interés equivalente al crecimiento de una inversión."), + ("Error function integrated from 0 to a limit, or between two limits.", "Función de error integrada de 0 a un límite, o entre dos límites."), + ("Error function integrated from 0 to x.", "Función de error integrada de 0 a x."), + ("Excess kurtosis of a sample.", "Exceso de curtosis de una muestra."), + ( + "Exponential curve coefficients and optional regression statistics.", + "Coeficientes de curva exponencial y estadísticos de regresión opcionales.", + ), + ("Exponential distribution density or probability.", "Densidad o probabilidad de distribución exponencial."), + ("Exponential of a complex number.", "Exponencial de un número complejo."), + ("Extracts data from XML with an XPath (not available; returns #VALUE!).", "Extrae datos de XML con un XPath (no disponible; devuelve #VALUE!)."), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Extrae la primera coincidencia, todas las coincidencias o los grupos de captura de una expresión regular.", + ), + ("F distribution density or left-tailed probability.", "Densidad de la distribución F o probabilidad de cola izquierda."), + ("Factorial of a number.", "Factorial de un número."), + ("Fetches data from a web service (not available; returns #VALUE!).", "Obtiene datos de un servicio web (no disponible; devuelve #VALUE!)."), ( "Finds a value in the first column of a table and returns the value in the same row of another column.", - "Busca un valor en la primera columna de una tabla.", + "Busca un valor en la primera columna de una tabla y devuelve el valor en la misma fila de otra columna.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Encuentra un valor en la primera fila de una tabla y devuelve el valor en la misma columna de otra fila.", + ), + ( + "Finds the position of one text in another (case-sensitive).", + "Encuentra la posición de un texto en otro (distingue entre mayúsculas y minúsculas).", + ), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Encuentra la posición de un texto en otro, ignorando mayúsculas y minúsculas y permitiendo comodines.", + ), + ("Fisher transformation.", "Transformación de Fisher."), + ("Fixed-declining-balance depreciation for a period.", "Depreciación de saldo decreciente fijo por un período."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Aplana una matriz en una sola columna, omitiendo opcionalmente espacios en blanco o errores.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Aplana una matriz en una sola fila, omitiendo opcionalmente espacios en blanco o errores.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Pronostica un valor mediante suavizado exponencial aditivo (AAA)."), + ("Formats a number as currency text, like DOLLAR.", "Da formato a un número como texto de moneda, como DOLLAR."), + ("Formats a number as currency text.", "Formatea un número como texto de moneda."), + ("Formats a number as text.", "Formatea un número como texto."), + ("French degressive depreciation with a life-based coefficient.", "Amortización degresiva francesa con un coeficiente basado en la vida."), + ("French linear depreciation prorated for the first period.", "Depreciación lineal francesa prorrateada para el primer período."), + ( + "Future value of a principal after a series of compound rates.", + "Valor futuro de un capital después de aplicar una serie de tasas de interés compuesto.", + ), + ("Future value of an investment with constant payments and rate.", "Valor futuro de una inversión con pagos y tasa constantes."), + ("Gamma distribution density or probability.", "Densidad o probabilidad de distribución gamma."), + ("Geometric mean of positive numbers.", "Media geométrica de números positivos."), + ("Greatest common divisor of integers.", "Máximo común divisor de números enteros."), + ("Groups rows by key fields and aggregates the values of each group.", "Agrupa filas por campos clave y agrega los valores de cada grupo."), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Amplía una matriz al tamaño indicado y rellena las nuevas celdas con un valor de relleno.", + ), + ( + "Half-width of the confidence interval around a FORECAST.ETS value.", + "Semianchura del intervalo de confianza alrededor de un valor de FORECAST.ETS.", + ), + ("Harmonic mean of positive numbers.", "Media armónica de números positivos."), + ("Hyperbolic cosecant of a complex number.", "Cosecante hiperbólica de un número complejo."), + ("Hyperbolic cosecant.", "Cosecante hiperbólica."), + ("Hyperbolic cosine of a complex number.", "Coseno hiperbólico de un número complejo."), + ("Hyperbolic cosine.", "Coseno hiperbólico."), + ("Hyperbolic cotangent.", "Cotangente hiperbólica."), + ("Hyperbolic secant of a complex number.", "Secante hiperbólica de un número complejo."), + ("Hyperbolic secant.", "Secante hiperbólica."), + ("Hyperbolic sine of a complex number.", "Seno hiperbólico de un número complejo."), + ("Hyperbolic sine.", "Seno hiperbólico."), + ("Hyperbolic tangent.", "Tangente hiperbólica."), + ("Hypergeometric probability of an exact count.", "Probabilidad hipergeométrica de un conteo exacto."), + ("Hypergeometric probability.", "Probabilidad hipergeométrica."), + ("Identity matrix of the given size.", "Matriz de identidad del tamaño dado."), + ("Imaginary coefficient of a complex number.", "Coeficiente imaginario de un número complejo."), + ("Information about a cell.", "Información sobre una celda."), + ("Integer part of a division.", "Parte entera de una división."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Intereses pagados en un período de un préstamo con pagos de capital iguales.", + ), + ("Interest part of a given period's payment.", "Parte de intereses del pago de un período determinado."), + ("Interest rate of a fully invested security.", "Tasa de interés de un bono totalmente pagado."), + ("Interest rate per period of an annuity, found iteratively.", "Tasa de interés por período de una anualidad, calculada de forma iterativa."), + ("Internal rate of return of cash flows on specific dates.", "Tasa interna de retorno de los flujos de efectivo en fechas específicas."), + ("Internal rate of return of periodic cash flows.", "Tasa interna de retorno de los flujos de efectivo periódicos."), + ("Inverse hyperbolic cosine.", "Coseno hiperbólico inverso."), + ("Inverse hyperbolic cotangent.", "Cotangente hiperbólica inversa."), + ("Inverse hyperbolic sine.", "Seno hiperbólico inverso."), + ("Inverse hyperbolic tangent.", "Tangente hiperbólica inversa."), + ("Inverse of a square matrix.", "Inversa de una matriz cuadrada."), + ("Inverse of the Fisher transformation.", "Inversa de la transformación de Fisher."), + ("Inverse of the cumulative beta distribution.", "Inversa de la distribución beta acumulativa."), + ("Inverse of the cumulative lognormal distribution.", "Inversa de la distribución lognormal acumulativa."), + ("Inverse of the gamma cumulative distribution.", "Inversa de la distribución acumulativa gamma."), + ("Inverse of the left-tailed F distribution.", "Inversa de la distribución F de cola izquierda."), + ("Inverse of the left-tailed chi-squared distribution.", "Inversa de la distribución chi-cuadrado de cola izquierda."), + ("Inverse of the normal cumulative distribution.", "Inversa de la distribución acumulativa normal."), + ("Inverse of the right-tailed F distribution.", "Inversa de la distribución F de cola derecha."), + ("Inverse of the right-tailed chi-squared distribution.", "Inversa de la distribución chi-cuadrado de cola derecha."), + ("Inverse of the standard normal cumulative distribution.", "Inversa de la distribución acumulativa normal estándar."), + ("Joins several text values into one.", "Une varios valores de texto en uno."), + ("Joins text from values and every cell of ranges, without a separator.", "Une texto de valores y cada celda de rangos, sin separador."), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Une texto de valores y rangos con un delimitador, omitiendo opcionalmente elementos vacíos.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Mantiene filas o columnas desde el inicio (o final) de una matriz."), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Mantiene las filas o columnas de una matriz cuyo indicador de inclusión es VERDADERO.", + ), + ("Largest number (0 when there are none).", "Número más grande (0 cuando no hay ninguno)."), + ("Largest number in a field of the matching records.", "Número más grande en un campo de los registros coincidentes."), + ( + "Largest value among cells that meet every condition.", + "Valor más grande entre las celdas de la hoja de cálculo que cumplen todas las condiciones.", + ), + ("Largest value counting text as 0 and logicals as 1/0.", "Valor más grande contando el texto como 0 y los lógicos como 1/0."), + ("Least common multiple of integers.", "Mínimo común múltiplo de números enteros."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Coeficientes de línea de mínimos cuadrados y estadísticas de regresión opcionales.", + ), + ("Left-tailed inverse of Student's t distribution.", "Inversa de cola izquierda de la distribución t de Student."), + ("Length of the repeating pattern detected in a time series.", "Longitud del patrón repetitivo detectado en una serie temporal."), + ("Logarithm to the given base (10 by default).", "Logaritmo a la base dada (10 por defecto)."), + ("Lognormal density or probability.", "Densidad o probabilidad lognormal."), + ("Macaulay duration of a security with periodic interest.", "Duración de Macaulay de un título con intereses periódicos."), + ("Matrix product of two arrays.", "Producto matricial de dos matrices."), + ("Mean after trimming a fraction of points from both ends.", "Media después de recortar una fracción de puntos de ambos extremos."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Media contando el texto como 0 y los valores lógicos como 1 o 0."), + ("Middle value of the numbers.", "Mediana de los números."), + ("Modified Bessel function of the first kind, I_n(x).", "Función de Bessel modificada del primer tipo, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Función de Bessel modificada de segundo tipo, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Duración modificada de un título con intereses periódicos."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Tasa interna de rendimiento modificada utilizando tasas de préstamo y reinversión separadas.", ), + ("Most frequently occurring number.", "Número que aparece con más frecuencia."), + ("Multiplies all the numbers in the arguments.", "Multiplica todos los números en los argumentos."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Multiplica elementos coincidentes de matrices del mismo tamaño y agrega los productos.", + ), + ("Multiplies the numbers in a field of the matching records.", "Multiplica los números en un campo de los registros coincidentes."), + ("Names intermediate results.", "Nombra resultados intermedios."), + ("Natural log of the gamma function.", "Logaritmo natural de la función gamma."), + ("Natural logarithm of a complex number.", "Logaritmo natural de un número complejo."), + ("Natural logarithm.", "Logaritmo natural."), + ("Negative binomial probability.", "Probabilidad binomial negativa."), + ("Net present value of cash flows on specific dates.", "Valor actual neto de los flujos de efectivo en fechas específicas."), + ( + "Net present value of periodic cash flows at a discount rate.", + "Valor actual neto de los flujos de efectivo periódicos a una tasa de descuento.", + ), + ("Next coupon date after settlement.", "Próxima fecha de pago de intereses después de la liquidación."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Tasa nominal anual a partir de una tasa efectiva y periodos de capitalización.", + ), + ("Normal distribution density or cumulative probability.", "Densidad de distribución normal o probabilidad acumulada."), + ("Number of areas in a reference.", "Número de áreas en una referencia."), + ("Number of combinations with repetition.", "Número de combinaciones con repetición."), + ("Number of combinations without repetition.", "Número de combinaciones sin repetición."), + ("Number of coupons payable between settlement and maturity.", "Número de pagos de intereses adeudados entre la liquidación y el vencimiento."), + ("Number of ordered selections with repetition.", "Número de selecciones ordenadas con repetición."), + ("Number of ordered selections without repetition.", "Número de selecciones ordenadas sin repetición."), + ("Number of periods needed to pay off or accumulate an amount.", "Número de periodos necesarios para liquidar o acumular un importe."), + ("Number of sheets.", "Número de hojas."), + ("One- or two-tailed Student's t probability.", "Probabilidad t de Student de una o dos colas."), + ("One-tailed probability of a z-test.", "Probabilidad de una cola de una prueba z."), + ("Pearson product-moment correlation coefficient.", "Coeficiente de correlación momento-producto de Pearson."), + ("Percent-encodes text for use in a URL.", "Codifica texto porcentualmente para usarlo en URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Pago periódico de un préstamo o anualidad con pagos y tasa constantes.", + ), + ( + "Periods needed for an investment to grow to a target value.", + "Períodos necesarios para que una inversión crezca hasta alcanzar un valor objetivo.", + ), + ("Picks a value from the list by its position.", "Selecciona un valor de la lista por su posición."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Selecciona columnas de una matriz por posición (recuentos negativos desde el final).", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Selecciona filas de una matriz por posición (recuentos negativos desde el final).", + ), + ("Places arrays side by side.", "Coloca los arreglos uno al lado del otro."), + ("Poisson probability.", "Probabilidad de Poisson."), + ("Population covariance of paired values.", "Covarianza poblacional de valores pareados."), + ("Population skewness.", "Asimetría poblacional."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Desviación estándar de la población contando el texto como 0 y los lógicos como 1/0.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Desviación estándar de la población de un campo sobre los registros coincidentes.", + ), + ("Population standard deviation.", "Desviación estándar de la población."), + ("Population variance counting text as 0 and logicals as 1/0.", "Varianza de población contando el texto como 0 y los lógicos como 1/0."), + ("Population variance of a field over the matching records.", "Varianza poblacional de un campo en los registros coincidentes."), + ("Population variance.", "Varianza poblacional."), + ("Positive square root.", "Raíz cuadrada positiva."), + ("Predicts a value along a linear trend.", "Predice un valor a lo largo de una tendencia lineal."), + ("Present value of a series of equal future payments.", "Valor presente de una serie de pagos futuros iguales."), + ("Previous coupon date on or before settlement.", "Fecha anterior de pago de intereses en o antes de la liquidación."), + ("Price per 100 face value of a Treasury bill.", "Precio por 100 del valor nominal de una letra del Tesoro."), + ("Price per 100 face value of a discounted security.", "Precio por 100 del valor nominal de un bono con descuento."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Precio por 100 del valor nominal de un bono que paga intereses al vencimiento.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Precio por 100 del valor nominal de un bono que paga intereses periódicos.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "Precio por 100 del valor nominal de un bono con un primer período de interés irregular.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Precio por 100 del valor nominal de un bono con un último período de intereses irregular.", + ), + ("Principal part of a given period's payment.", "Parte de capital del pago de un período determinado."), + ("Probability from Student's t-test.", "Probabilidad de la prueba t de Student."), + ("Probability of a number of successes falling in a range.", "Probabilidad de que el número de éxitos se encuentre dentro de un rango."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Probabilidad de que un valor normal estándar se encuentre entre la media y z.", + ), + ("Probability that values fall between two limits.", "Probabilidad de que los valores se encuentren entre dos límites."), + ("Product of complex numbers.", "Producto de números complejos."), + ("Quartile (0–4) of a data set, inclusive method.", "Cuartil (0–4) de un conjunto de datos, método inclusivo."), + ("Quartile (0–4) of a data set.", "Cuartil (0–4) de un conjunto de datos."), + ("Quartile (1–3) of a data set, exclusive method.", "Cuartil (1–3) de un conjunto de datos, método exclusivo."), + ("Quotient of two complex numbers.", "Cociente de dos números complejos."), + ("Raises a complex number to a power.", "Eleva un número complejo a una potencia."), + ("Raises a number to a power.", "Eleva un número a una potencia."), + ("Rank of a number within a list.", "Clasificación de un número dentro de una lista."), + ( + "Rank of a number within a list; ties get the average rank.", + "Clasificación de un número dentro de una lista; los empates obtienen el rango promedio.", + ), + ( + "Rank of a number within a list; ties share the top rank.", + "Posición de un número dentro de una lista; los empates comparten la mejor posición de las que ocupan.", + ), + ("Ratio of the factorial of a sum to the product of factorials.", "Relación entre el factorial de una suma y el producto de factoriales."), + ("Reads text in a given base as a number.", "Lee texto en una base determinada como un número."), + ("Real coefficient of a complex number.", "Coeficiente real de un número complejo."), + ("Relative standing of a value as a fraction of the data set.", "Posición relativa de un valor como fracción del conjunto de datos."), + ("Relative standing of a value from 0 to 1 inclusive.", "Posición relativa de un valor de 0 a 1 inclusive."), + ("Relative standing of a value strictly between 0 and 1.", "Posición relativa de un valor estrictamente entre 0 y 1."), + ("Remainder of a division, with the sign of the divisor.", "Resto de una división, con el signo del divisor."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Elimina los espacios iniciales y finales y colapsa los espacios en uno.", + ), + ("Removes non-printable control characters from text.", "Elimina los caracteres de control no imprimibles del texto."), + ("Removes rows or columns from the start (or end) of an array.", "Elimina filas o columnas del inicio (o final) de una matriz."), + ("Repeats a text a given number of times.", "Repite un texto un número determinado de veces."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Reemplaza las coincidencias de una expresión regular, todas ellas o una aparición elegida.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Reemplaza las apariciones de un texto por otro, opcionalmente solo una aparición determinada.", + ), + ("Replaces part of a text by position.", "Reemplaza parte de un texto por posición."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Devuelve 1 cuando un número es al menos el paso; en caso contrario, 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Devuelve 1 cuando dos números son iguales; en caso contrario, 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Devuelve un código para el tipo de valor: 1 número, 2 texto, 4 lógico, 16 error, 64 matriz.", + ), + ( + "Returns a fallback when the value is #N/A, otherwise the value.", + "Devuelve un recurso alternativo cuando el valor es #N/A; en caso contrario, el valor.", + ), + ( + "Returns a fallback when the value is an error, otherwise the value.", + "Devuelve un recurso alternativo cuando el valor es un error; en caso contrario, el valor.", + ), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Devuelve una propiedad de indicador clave de rendimiento de un cubo (sin conexiones de cubo; #N/A).", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "Devuelve un miembro o tupla de un cubo (sin conexiones de cubo; #N/A)."), + ( + "Returns a property of a cube member (no cube connections; #N/A).", + "Devuelve una propiedad de un miembro del cubo (sin conexiones de cubo; #N/A).", + ), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "Devuelve un valor agregado de un cubo (sin conexiones de cubo; #N/A)."), + ("Returns characters from the middle of a text.", "Devuelve caracteres de la mitad de un texto."), + ("Returns information about the operating environment.", "Devuelve información sobre el entorno operativo."), ("Returns one value when a condition is TRUE and another when it is FALSE.", "Devuelve un valor según una condición."), + ("Returns the #N/A error value.", "Devuelve el valor de error #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Devuelve la posición basada en 1 de un valor en una fila o columna."), + ("Returns the ISO 8601 week number of a date.", "Devuelve el número de semana ISO 8601 de una fecha."), + ("Returns the Unicode code point of the first character of a text.", "Devuelve el punto del código Unicode del primer carácter de un texto."), + ("Returns the Windows-1252 code of the first character of a text.", "Devuelve el código Windows-1252 del primer carácter de un texto."), + ("Returns the character for a Unicode code point.", "Devuelve el carácter de un punto de código Unicode."), + ( + "Returns the character for a code from the Windows-1252 character set.", + "Devuelve el carácter de un código del conjunto de caracteres Windows-1252.", + ), + ("Returns the current date and time.", "Devuelve la fecha y hora actuales."), ("Returns the current date.", "Devuelve la fecha actual."), + ("Returns the date a number of months before or after a date.", "Devuelve la fecha de varios meses antes o después de una fecha."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Devuelve la fecha a un número de días laborables de distancia con un fin de semana personalizado.", + ), + ( + "Returns the date a number of working days before or after a date.", + "Devuelve la fecha un número de días hábiles antes o después de una fecha.", + ), + ("Returns the day of the month of a date.", "Devuelve el día del mes de una fecha."), + ("Returns the day of the week of a date as a number.", "Devuelve el día de la semana de una fecha como un número."), + ("Returns the distinct rows or columns of an array.", "Devuelve las distintas filas o columnas de una matriz."), + ( + "Returns the element, row or column of an array at the given position.", + "Devuelve el elemento, fila o columna de una matriz en la posición dada.", + ), + ( + "Returns the field value of the single record that meets the criteria.", + "Devuelve el valor del campo del registro único que cumple los criterios.", + ), + ("Returns the first characters of a text.", "Devuelve los primeros caracteres de un texto."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Devuelve la fracción de un año entre dos fechas según el recuento de días.", + ), + ("Returns the hour (0-23) of a time.", "Devuelve la hora (0-23) de un tiempo."), + ("Returns the last characters of a text.", "Devuelve los últimos caracteres de un texto."), + ("Returns the last day of the month a number of months away.", "Devuelve el último día del mes situado un número de meses antes o después."), ("Returns the logical value FALSE.", "Devuelve el valor lógico FALSO."), ("Returns the logical value TRUE.", "Devuelve el valor lógico VERDADERO."), + ("Returns the minute (0-59) of a time.", "Devuelve el minuto (0-59) de un tiempo."), + ("Returns the month (1-12) of a date.", "Devuelve el mes (1-12) de una fecha."), + ( + "Returns the nth member of a cube set (no cube connections; #N/A).", + "Devuelve el enésimo miembro de un conjunto de cubos (sin conexiones de cubo; #N/A).", + ), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Devuelve el número que identifica un valor de error, o #N/A si no es un error.", + ), + ("Returns the number of days between two dates.", "Devuelve el número de días entre dos fechas."), + ("Returns the phonetic (furigana) text; here the text itself.", "Devuelve el texto fonético (furigana); Aquí el texto mismo."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Devuelve la posición de un valor en una fila o columna con modos flexibles de coincidencia y búsqueda.", + ), + ("Returns the second (0-59) of a time.", "Devuelve el segundo (0-59) de un tiempo."), + ("Returns the text that comes after a delimiter.", "Devuelve el texto que viene después de un delimitador."), + ("Returns the text that comes before a delimiter.", "Devuelve el texto que viene antes de un delimitador."), + ("Returns the value if it is text, otherwise empty text.", "Devuelve el valor si es texto; en caso contrario, texto vacío."), + ("Returns the value paired with the first condition that is TRUE.", "Devuelve el valor emparejado con la primera condición que es VERDADERO."), + ("Returns the week number of a date within its year.", "Devuelve el número de semana de una fecha dentro de su año."), + ("Returns the year of a date.", "Devuelve el año de una fecha."), + ("Reverses a logical value.", "Invierte un valor lógico."), + ("Right-tailed F probability.", "Probabilidad F de cola derecha."), + ("Right-tailed Student's t probability.", "Probabilidad t de Student de cola derecha."), + ("Right-tailed chi-squared probability.", "Probabilidad chi-cuadrado de cola derecha."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Redondea un número y lo formatea como texto con decimales fijos y separadores de miles opcionales.", + ), + ("Rounds a number away from zero to a given number of digits.", "Redondea un número alejándose de cero al número de dígitos indicado."), + ("Rounds a number down to a multiple of significance.", "Redondea un número hacia abajo a un múltiplo del valor indicado."), + ("Rounds a number down to the nearest integer or multiple.", "Redondea un número hacia abajo al entero o múltiplo más cercano."), + ("Rounds a number down to the nearest integer.", "Redondea un número hacia abajo al entero más cercano."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Redondea un número al número de dígitos indicado; los casos exactamente a mitad se redondean alejándose de cero.", + ), + ("Rounds a number to the nearest multiple.", "Redondea un número al múltiplo más cercano."), + ("Rounds a number toward negative infinity to a multiple.", "Redondea un número hacia el infinito negativo a un múltiplo."), + ("Rounds a number toward positive infinity to a multiple.", "Redondea un número hacia el infinito positivo a un múltiplo."), + ("Rounds a number toward zero to a given number of digits.", "Redondea un número hacia cero a un número determinado de dígitos."), + ("Rounds a number up to a multiple of significance.", "Redondea un número hacia arriba a un múltiplo del valor indicado."), + ("Rounds a number up to the nearest integer or multiple.", "Redondea un número hacia arriba al entero o múltiplo más cercano."), + ("Rounds away from zero to the nearest even integer.", "Redondea alejándose de cero al entero par más cercano."), + ("Rounds away from zero to the nearest odd integer.", "Redondea alejándose de cero al entero impar más cercano."), + ("Row number of a reference.", "Número de fila de una referencia."), + ("Running accumulation of an array.", "Acumulación progresiva de una matriz."), + ("Sample covariance of paired values.", "Covarianza muestral de valores pareados."), + ("Sample skewness.", "Asimetría de la muestra."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Desviación estándar muestral contando el texto como 0 y los valores lógicos como 1/0.", + ), + ( + "Sample standard deviation of a field over the matching records.", + "Desviación estándar de muestra de un campo sobre los registros coincidentes.", + ), + ("Sample standard deviation.", "Desviación estándar de la muestra."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Varianza de muestra que cuenta el texto como 0 y los lógicos como 1/0."), + ("Sample variance of a field over the matching records.", "Varianza muestral de un campo en los registros coincidentes."), + ("Sample variance.", "Varianza muestral."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Busca en una fila o columna y devuelve el elemento, la fila o la columna correspondiente de otra matriz.", + ), + ("Secant of a complex number.", "Secante de un número complejo."), + ("Secant of an angle in radians.", "Secante de un ángulo en radianes."), + ("Sheet number.", "Número de hoja."), + ( + "Shifts the bits of a number left (right for negative shifts).", + "Desplaza los bits de un número hacia la izquierda (hacia la derecha para desplazamientos negativos).", + ), + ( + "Shifts the bits of a number right (left for negative shifts).", + "Desplaza los bits de un número hacia la derecha (hacia la izquierda para desplazamientos negativos).", + ), + ("Sine of a complex number.", "Seno de un número complejo."), + ("Sine of an angle in radians.", "Seno de un ángulo en radianes."), + ("Slope of the least-squares regression line.", "Pendiente de la recta de regresión de mínimos cuadrados."), + ("Smallest number (0 when there are none).", "Número más pequeño (0 cuando no hay ninguno)."), + ("Smallest number in a field of the matching records.", "Número más pequeño en un campo de los registros coincidentes."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "El recuento de éxito más pequeño cuya probabilidad binomial acumulada alcanza alfa.", + ), + ( + "Smallest value among cells that meet every condition.", + "Valor más pequeño entre las celdas de la hoja de cálculo que cumplen todas las condiciones.", + ), + ("Smallest value counting text as 0 and logicals as 1/0.", "Valor más pequeño contando el texto como 0 y los lógicos como 1/0."), + ("Sorts an array by the values of other arrays of matching size.", "Ordena una matriz por los valores de otras matrices de tamaño coincidente."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Ordena las filas (o columnas) de una matriz por una o más de sus columnas.", + ), + ("Spells out a number in Thai words with Baht.", "Escribe un número con palabras en tailandés y la unidad monetaria baht."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Divide el texto en una cuadrícula de columnas y filas en los delimitadores dados.", + ), + ("Square of the correlation coefficient.", "Cuadrado del coeficiente de correlación."), + ("Square root of a complex number.", "Raíz cuadrada de un número complejo."), + ("Square root of the number times pi.", "Raíz cuadrada del número multiplicado por pi."), + ("Stacks arrays on top of each other.", "Apila matrices una encima de la otra."), + ("Standard error of predicted y values in a regression.", "Error estándar de los valores de y pronosticados en una regresión."), + ("Standard normal cumulative probability.", "Probabilidad acumulativa normal estándar."), + ("Standard normal density or cumulative probability.", "Densidad normal estándar o probabilidad acumulada."), + ("Standard normal density.", "Densidad normal estándar."), + ("Straight-line depreciation for one period.", "Depreciación lineal por un período."), + ("Student's t density or left-tailed probability.", "Densidad t de Student o probabilidad de cola izquierda."), + ("Sum of a power series.", "Suma de una serie de potencias."), + ("Sum of complex numbers.", "Suma de números complejos."), + ("Sum of squared deviations from the mean.", "Suma de desviaciones al cuadrado de la media."), + ("Sum-of-years'-digits depreciation for a period.", "Depreciación por el método de la suma de los dígitos de los años para un período."), + ("Sums the differences of squares of matching elements.", "Suma las diferencias de cuadrados de elementos coincidentes."), + ("Sums the squared differences of matching elements.", "Suma las diferencias al cuadrado de elementos coincidentes."), + ("Sums the sums of squares of matching elements.", "Suma las sumas de cuadrados de elementos coincidentes."), + ("Swaps the rows and columns of an array.", "Intercambia las filas y columnas de una matriz."), + ("TRUE for references.", "VERDADERO para referencias."), + ("TRUE when a LAMBDA argument was left out.", "VERDADERO cuando se omitió un argumento LAMBDA."), + ("TRUE when a regular expression matches somewhere in the text.", "VERDADERO cuando una expresión regular coincide en algún lugar del texto."), + ("TRUE when an odd number of arguments are TRUE.", "VERDADERO cuando un número impar de argumentos son VERDADERO."), + ("TRUE when at least one argument is TRUE.", "VERDADERO cuando al menos un argumento es VERDADERO."), + ("TRUE when every argument is TRUE.", "VERDADERO cuando todos los argumentos son VERDADERO."), + ("TRUE when the cell has a formula.", "VERDADERO cuando la celda tiene una fórmula."), + ("TRUE when the integer part of a number is even.", "VERDADERO cuando la parte entera de un número es par."), + ("TRUE when the integer part of a number is odd.", "VERDADERO cuando la parte entera de un número es impar."), + ("TRUE when the value is TRUE or FALSE.", "VERDADERO cuando el valor es VERDADERO o FALSO."), + ("TRUE when the value is a number.", "VERDADERO cuando el valor es un número."), + ("TRUE when the value is any error other than #N/A.", "VERDADERO cuando el valor es cualquier error distinto de #N/A."), + ("TRUE when the value is any error.", "VERDADERO cuando el valor es cualquier error."), + ("TRUE when the value is anything other than text.", "VERDADERO cuando el valor no es texto."), + ("TRUE when the value is text.", "VERDADERO cuando el valor es texto."), + ("TRUE when the value is the #N/A error.", "VERDADERO cuando el valor es el error #N/A."), + ("TRUE when the value refers to an empty cell.", "VERDADERO cuando el valor hace referencia a una celda vacía."), + ("TRUE when two texts are identical, including case.", "VERDADERO cuando dos textos son idénticos, incluyendo mayúsculas y minúsculas."), + ("Tangent of a complex number.", "Tangente de un número complejo."), + ("Tangent of an angle in radians.", "Tangente de un ángulo en radianes."), + ("The constant pi to 15 digits.", "La constante pi de 15 dígitos."), + ("The formula of a cell as text.", "La fórmula de una celda como texto."), + ("The gamma function.", "La función gamma."), + ("The k-th largest number in a data set.", "El k-ésimo número más grande en un conjunto de datos."), + ("The k-th smallest number in a data set.", "El k-ésimo número más pequeño en un conjunto de datos."), + ("The reference named by a text string.", "La referencia nombrada por una cadena de texto."), + ("The sum of a subset as a fraction of the sum of all the values.", "La suma de un subconjunto como fracción de la suma de todos los valores."), + ("Total interest paid between two periods.", "Intereses totales pagados entre dos períodos."), + ("Total principal repaid between two periods.", "Capital total reembolsado entre dos períodos."), + ("Two-tailed Student's t probability.", "Probabilidad t de Student de dos colas."), + ("Two-tailed inverse of Student's t distribution.", "Inversa de dos colas de la distribución t de Student."), + ("Two-tailed p-value of an F-test for equality of variances.", "Valor p bilateral de una prueba F de igualdad de varianzas."), + ("Values along a fitted exponential growth curve.", "Valores a lo largo de una curva de crecimiento exponencial ajustada."), + ("Values along a least-squares linear fit.", "Valores a lo largo de un ajuste lineal de mínimos cuadrados."), + ("Vertical array of all the most frequent numbers.", "Matriz vertical de todos los números más frecuentes."), + ("Weibull density or probability.", "Densidad o probabilidad de Weibull."), + ("Writes a number in another base, padded with zeros.", "Escribe un número en otra base, rellenado con ceros."), + ("Y-intercept of the least-squares regression line.", "Intersección con el eje y de la recta de regresión de mínimos cuadrados."), + ("Yield of a Treasury bill.", "Rendimiento de una letra del Tesoro."), + ("Yield of a security paying periodic interest.", "Rendimiento de un bono que paga intereses periódicos."), + ("Yield of a security with an odd first period.", "Rendimiento de un bono con un primer periodo de interés irregular."), + ("Yield of a security with an odd last period.", "Rendimiento de un bono con un último período de intereses irregular."), + ("Z-score of a value.", "Puntuación Z de un valor."), + ("e raised to the given power.", "e elevado a la potencia dada."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-ésimo percentil, k de 0 a 1 inclusive."), + ("k-th percentile, k strictly between 0 and 1.", "k-ésimo percentil, k estrictamente entre 0 y 1."), ]; -/// Argument names without brackets or index (`number`, not `[number2]`). pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "tipo_de_referencia"), + ("actual_range", "rango_real"), + ("aggregation", "agregación"), + ("alpha", "alfa"), + ("angle", "ángulo"), + ("area_num", "número_de_área"), + ("argument", "argumento"), + ("array", "matriz"), + ("array_x", "matriz_de_valores_x"), + ("array_y", "matriz_de_valores_y"), + ("average_range", "rango_promedio"), + ("base", "base"), + ("basis", "base"), + ("beta", "beta"), + ("bins_array", "matriz_de_límites_de_intervalos"), + ("bottom", "límite_inferior"), + ("by_array", "ordenar_matriz_de_claves"), + ("by_col", "por_col"), + ("calc_method", "método_de_cálculo"), + ("calculation", "cálculo"), + ("caption", "título"), + ("case_sensitivity", "distinción_entre_mayúsculas_y_minúsculas"), + ("coefficients", "coeficientes"), + ("col_delimiter", "delimitador_de_columna"), + ("col_fields", "campos_de_columna"), ("col_index_num", "indicador_columnas"), + ("col_num", "número_de_columna"), + ("col_sort_order", "orden_de_clasificación_de_columnas"), + ("col_total_depth", "profundidad_total_de_la_columna"), + ("cols", "recuento_de_columnas"), + ("column_num", "número_de_columna"), + ("columns", "recuento_de_columnas"), + ("confidence_level", "nivel_de_confianza"), + ("connection", "conexión_de_datos"), + ("const", "constante"), + ("cost", "costo_inicial"), + ("coupon", "tasa_de_cupón"), ("criteria", "criterio"), + ("criteria_range", "rango_de_criterios"), + ("cumulative", "distribución_acumulada"), + ("data_all", "datos_todos"), + ("data_array", "matriz_de_datos"), + ("data_completion", "relleno_de_datos"), + ("data_subset", "subconjunto_de_datos"), + ("database", "base_de_datos"), + ("date", "fecha"), + ("date_purchased", "fecha_de_compra"), + ("date_text", "fecha_escrita_como_texto"), + ("dates", "fechas"), + ("day", "día"), + ("days", "días"), + ("decimal_dollar", "precio_decimal"), + ("decimal_separator", "separador_decimal"), + ("decimals", "decimales"), + ("default_or_value", "valor_predeterminado_o_valor"), + ("deg_freedom", "grados_de_libertad"), + ("delimiter", "delimitador"), + ("denominator", "denominador"), + ("dimension", "dimensión"), + ("discount", "tasa_de_descuento"), + ("divisor", "divisor"), + ("effect_rate", "tasa_efectiva"), + ("end_date", "fecha_de_finalización"), + ("end_period", "último_período"), + ("error_val", "valor_de_error"), + ("exactly_once", "exactamente_una_vez"), + ("expected_range", "rango_esperado"), + ("expression", "expresión"), + ("factor", "factor"), + ("field", "campo_de_base_de_datos"), + ("field_headers", "encabezados_de_campo"), + ("field_relationship", "relación_entre_campos"), + ("filter_array", "matriz_de_filtros"), + ("finance_rate", "tasa_de_interés_de_financiación"), + ("find_text", "buscar_texto"), + ("first_coupon", "primera_fecha_de_pago_del_cupón"), + ("first_interest", "primera_fecha_de_pago_de_intereses"), + ("first_period", "primer_periodo"), + ("form", "forma"), + ("format", "formato"), + ("format_text", "formato_texto"), + ("fraction", "fracción"), + ("fractional_dollar", "precio_fraccionario"), + ("frequency", "frecuencia_de_pago_del_cupón"), + ("friendly_name", "nombre_descriptivo"), + ("from_unit", "unidad_de_medida_de_fuente"), + ("full_precision", "precisión_total"), + ("function", "función"), + ("function_num", "número_de_función"), + ("fv", "valor_futuro"), + ("group_separator", "separador_de_grupo"), + ("guess", "estimación_inicial"), + ("height", "altura"), + ("holidays", "días_festivos"), + ("hour", "hora"), + ("i_num", "coeficiente_imaginario"), + ("if_empty", "si_está_vacío"), + ("if_not_found", "si_no_se_encuentra"), + ("ignore", "ignorar"), + ("ignore_empty", "ignorar_vacío"), + ("include", "incluir"), + ("index_num", "número_de_índice"), + ("info_type", "tipo_de_información"), + ("initial_value", "valor_inicial"), + ("instance_num", "número_de_ocurrencia"), + ("inumber", "número_complejo"), + ("investment", "inversión"), + ("issue", "fecha_de_emisión"), + ("k", "k"), + ("known_xs", "valores_x_conocidos"), + ("known_ys", "valores_y_conocidos"), + ("kpi_name", "nombre_del_indicador_clave_de_rendimiento"), + ("kpi_property", "propiedad_del_indicador_clave_de_rendimiento"), + ("lambda", "lambda"), + ("last_interest", "última_fecha_de_pago_de_intereses"), + ("life", "vida_útil"), + ("link_location", "ubicación_del_enlace"), + ("logical", "valor_lógico"), ("logical_test", "prueba_lógica"), + ("lookup_array", "matriz_buscada"), ("lookup_value", "valor_buscado"), + ("lookup_vector", "vector_de_búsqueda"), + ("lower_limit", "límite_inferior"), + ("m", "m"), + ("match_end", "coincidir_con_el_final_del_texto"), + ("match_mode", "modo_coincidencia"), + ("match_type", "método_de_coincidencia"), + ("maturity", "fecha_de_vencimiento"), + ("max", "máximo"), + ("max_range", "rango_de_valor_máximo"), + ("mean", "media_aritmética"), + ("member_expression", "expresión_de_miembro_del_cubo"), + ("method", "método"), + ("min", "mínimo"), + ("min_length", "longitud_mínima"), + ("min_range", "rango_de_valores_mínimo"), + ("minute", "minuto"), + ("mode", "modo_de_cálculo"), + ("month", "mes"), + ("months", "meses"), + ("multiple", "múltiplo"), + ("n", "n"), + ("name", "nombre"), + ("new_text", "nuevo_texto"), + ("new_xs", "nuevos_valores_de_x"), + ("no_commas", "omitir_separadores_de_grupos_de_dígitos"), + ("no_switch", "no_cambiar_el_método_de_depreciación"), + ("nominal_rate", "tasa_nominal"), + ("nper", "número_de_períodos"), + ("npery", "períodos_por_año"), + ("num_bytes", "número_de_bytes"), + ("num_chars", "número_de_caracteres"), + ("num_digits", "número_de_dígitos"), ("number", "número"), + ("number_chosen", "número_de_elementos_elegidos"), + ("number_f", "número_de_fallos"), + ("number_pop", "tamaño_de_la_población"), + ("number_s", "número_de_éxitos"), + ("number_sample", "tamaño_de_muestra"), + ("number_times", "recuento_de_repeticiones"), + ("numerator", "numerador"), + ("occurrence", "ocurrencia"), + ("old_text", "texto_antiguo"), + ("options", "opciones"), + ("order", "orden"), + ("pad_with", "valor_de_relleno"), + ("par", "valor_nominal"), + ("parameter", "parámetro"), + ("pattern", "patrón_de_expresión_regular"), + ("per", "período"), + ("percent", "por_ciento"), + ("period", "período"), + ("places", "número_de_dígitos_de_salida"), + ("pmt", "pago"), + ("population_s", "éxitos_en_la_población"), + ("power", "potencia"), + ("pr", "precio"), + ("principal", "capital"), + ("prob_range", "rango_de_probabilidades"), + ("probability", "probabilidad"), + ("probability_s", "probabilidad_de_éxito"), + ("property", "nombre_de_propiedad"), + ("pv", "valor_presente"), + ("quart", "cuartil"), + ("radix", "base"), ("range", "rango"), ("range_lookup", "ordenado"), + ("rank", "posición"), + ("rate", "tasa"), + ("real_num", "coeficiente_real"), + ("redemption", "valor_de_reembolso"), + ("ref", "referencia"), + ("ref_text", "texto_de_referencia"), + ("reference", "referencia"), + ("reinvest_rate", "tasa_de_interés_de_reinversión"), + ("relative_to", "relativo_a"), + ("replacement", "reemplazo"), + ("result", "resultado"), + ("result_vector", "vector_de_resultado"), + ("return_array", "matriz_devuelta"), + ("return_mode", "modo_de_retorno"), + ("return_type", "tipo_de_retorno"), + ("row_delimiter", "delimitador_de_fila"), + ("row_fields", "campos_de_fila"), + ("row_index_num", "índice_de_fila"), + ("row_num", "número_de_fila"), + ("row_sort_order", "orden_de_clasificación_de_filas"), + ("row_total_depth", "profundidad_total_de_fila"), + ("rows", "recuento_de_filas"), + ("salvage", "valor_residual"), + ("sample_s", "éxitos_en_la_muestra"), + ("scan_by_column", "escanear_por_columna"), + ("schedule", "serie_de_tasas"), + ("search_mode", "modo_búsqueda"), + ("seasonality", "estacionalidad"), + ("second", "segundo"), + ("serial_number", "número_de_serie"), + ("set", "conjunto_de_miembros_del_cubo"), + ("set_expression", "expresión_del_conjunto_de_miembros_del_cubo"), + ("settlement", "fecha_de_liquidación"), + ("sheet_text", "texto_de_hoja"), + ("shift_amount", "cantidad_de_desplazamiento"), + ("sigma", "sigma"), + ("significance", "múltiplo_o_precisión"), + ("size", "tamaño"), + ("sort_by", "ordenar_por"), + ("sort_index", "ordenar_índice"), + ("sort_order", "orden_de_clasificación"), + ("source", "fuente"), + ("standard_dev", "desviación_estándar"), + ("start", "valor_inicial"), + ("start_date", "fecha_de_inicio"), + ("start_num", "posición_inicial"), + ("start_period", "período_de_inicio"), + ("statistic_type", "tipo_de_estadística"), + ("stats", "estadísticas"), + ("step", "paso"), + ("suffix", "sufijo"), ("sum_range", "rango_suma"), ("table_array", "matriz"), + ("tails", "número_de_colas_de_distribución"), + ("target", "objetivo"), + ("target_date", "fecha_objetivo"), + ("text", "texto"), + ("time_text", "hora_escrita_como_texto"), + ("timeline", "línea_de_tiempo"), + ("to_unit", "unidad_de_medida_objetivo"), + ("top", "límite_superior"), + ("total_depth", "profundidad_total"), + ("trials", "pruebas"), + ("triangulation_precision", "precisión_de_triangulación"), + ("trim_cols", "modo_de_recorte_de_columna"), + ("trim_rows", "modo_de_recorte_de_hileras"), + ("type", "tipo"), + ("type_text", "nombre_del_tipo_de_datos"), + ("unit", "unidad"), + ("upper_limit", "límite_superior"), + ("url", "URL"), ("value", "valor"), + ("value_if_error", "resultado_en_caso_de_error"), ("value_if_false", "valor_si_falso"), + ("value_if_na", "resultado_del_error_no_disponible"), ("value_if_true", "valor_si_verdadero"), + ("values", "valores_de_entrada"), + ("vector", "vector"), + ("weekend", "fin_de_semana"), + ("whole_number", "número_entero"), + ("width", "ancho"), + ("within_text", "texto_para_buscar"), + ("wrap_count", "número_de_valores_por_fila_o_columna"), + ("x", "x"), + ("x_num", "x_coordenada"), + ("x_range", "x_rango"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "coordenada_y"), + ("year", "año"), + ("yld", "rendimiento_de_la_inversión"), + ("z", "z"), ]; diff --git a/crates/ui-egui/src/i18n/fr.rs b/crates/ui-egui/src/i18n/fr.rs index fd5e23b5b0..406c718629 100644 --- a/crates/ui-egui/src/i18n/fr.rs +++ b/crates/ui-egui/src/i18n/fr.rs @@ -3,6 +3,828 @@ /// Returns the French translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "New Formatting Rule" => "Nouvelle règle de mise en forme", + "and" => "et", + "Formula" => "Formule", + "Minimum" => "Minimum", + "Maximum" => "Maximum", + "Applies to" => "S'applique à", + "A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft." => { + "Un tableur open source, natif Rust, développé en salle blanche. Fait partie d'ArtCraft." + } + "Add Watch (active cell)" => "Ajouter un espion (cellule active)", + "Bring Forward" => "Avancer", + "Can't Undo" => "Impossible d'annuler", + "GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:" => { + "GridCraft peut être entièrement piloté par des agents. Chaque élément de menu, bouton et geste est une commande :" + } + "No comments on this sheet yet. Select a cell and choose New Comment." => { + "Aucun commentaire sur cette feuille pour l'instant. Sélectionnez une cellule et choisissez Nouveau commentaire." + } + "No contributor data was built into this copy." => "Cette copie ne contient pas de données sur les contributeurs.", + "No macros in this workbook" => "Aucune macro dans ce classeur", + "No model credits were built into this copy." => "Cette copie ne contient pas de crédits de modèles.", + "Reply…" => "Répondre…", + "Reports:" => "Rapports :", + "Model Range:" => "Plage du modèle :", + "Needs an optimal or converged solution: Solver stopped before reaching one." => { + "Nécessite une solution optimale ou convergente : le Solveur s'est arrêté avant d'en atteindre une." + } + "Needs Simplex LP or GRG Nonlinear, a Max or Min objective and no integer constraints." => { + "Nécessite Simplex PL ou GRG non linéaire, un objectif Max ou Min et aucune contrainte de nombre entier." + } + "Resolved" => "Résolu", + "Reverse the order" => "Inverser l'ordre", + "Send" => "Envoyer", + "Send Backward" => "Reculer", + "Constraint Cell Reference" => "Référence de cellule de la contrainte", + "Constraint Value" => "Valeur de la contrainte", + "Constraint Operator" => "Opérateur de la contrainte", + "There are no shapes, pictures or charts on this sheet." => "Cette feuille ne contient aucune forme, image ni graphique.", + "Macros preserved (not executed)" => "Macros conservées (non exécutées)", + "Preview" => "Aperçu", + "Table Name:" => "Nom du tableau :", + "a linked (not embedded) picture was skipped" => "Une image liée (non incorporée) a été ignorée.", + "missing picture {target}" => "Image manquante : {target}.", + "chart {target} has no supported plot and was skipped" => { + "Le graphique {target} ne contient aucun type de graphique pris en charge et a été ignoré." + } + "a histogram, waterfall, treemap… chart without its chart part was skipped" => { + "Un graphique histogramme, cascade, arborescence… sans sa partie graphique a été ignoré." + } + "an embedded object (diagram, OLE…) was skipped" => "Un objet incorporé (diagramme, OLE…) a été ignoré.", + "grouped shapes are not supported and were skipped" => "Les formes groupées ne sont pas prises en charge et ont été ignorées.", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported." => { + "Importation XLSB des données uniquement : les formules deviennent leurs résultats enregistrés et ne sont pas recalculées. La mise en forme, les graphiques, les images, les macros et les autres fonctionnalités ne sont pas importés ; les dates, les devises et les pourcentages peuvent s'afficher comme des nombres. Enregistrez un nouveau fichier .xlsx ; l'enregistrement au format XLSB n'est pas pris en charge." + } + "XLSB module sheets were skipped." => "Les feuilles de module XLSB ont été ignorées.", + "XLSB non-worksheet sheets were skipped." => "Les feuilles XLSB qui ne sont pas des feuilles de calcul ont été ignorées.", + "Unsupported XLSB future-record and alternate-content blocks were skipped." => { + "Les enregistrements futurs et blocs de contenu alternatif XLSB non pris en charge ont été ignorés." + } + "Invalid XLSB merged ranges were skipped." => "Les plages fusionnées XLSB non valides ont été ignorées.", + "{count} items in this file were handled differently. First: {warning}" => { + "{count} éléments de ce fichier ont été traités différemment. Premier élément : {warning}" + } + "Paste Special|Add" => "Additionner", + "Paste Special" => "Collage spécial", + "Formulas (F)" => "Formules (F)", + "Values (V)" => "Valeurs (V)", + "Formats (T)" => "Formats (T)", + "Comments and notes (C)" => "Commentaires et notes (C)", + "Validation" => "Validation des données", + "All except borders" => "Tout sauf les bordures", + "Column widths" => "Largeurs de colonnes", + "Formulas and number formats" => "Formules et formats de nombre", + "Values and number formats" => "Valeurs et formats de nombre", + "Operation" => "Opération", + "Paste Special|None" => "Aucune", + "Add" => "Addition", + "Subtract" => "Soustraction", + "Multiply" => "Multiplication", + "Divide" => "Division", + "Skip blanks" => "Ignorer les cellules vides", + "Transpose (E)" => "Transposer (E)", + "Paste formulas that refer to the copied cells" => "Coller des formules qui font référence aux cellules copiées", + "OK" => "OK", + "Data Table" => "Table de données", + "Show Data Table" => "Afficher la table de données", + "Show Legend Keys" => "Afficher les symboles de légende", + "Horizontal Borders" => "Bordures horizontales", + "Vertical Borders" => "Bordures verticales", + "Available for column, bar, line, area and compatible combo charts." => { + "Disponible pour les histogrammes, les barres, les courbes, les aires et les graphiques combinés compatibles." + } + " (password)" => " (mot de passe)", + " (password, unlocked)" => " (mot de passe, déverrouillé)", + "$ English (United States)" => "$ Anglais (États-Unis)", + "'{file}' is protected." => "'{file}' est protégé.", + "(No suggestions)" => "(Aucune suggestion)", + "(unnamed)" => "(sans nom)", + "+ Add Level" => "+ Ajouter un niveau", + "100% Stacked Area" => "Aires empilées 100 %", + "100% Stacked Bar" => "Barres empilées 100 %", + "100% Stacked Column" => "Histogramme empilé 100 %", + "20% - Accent1" => "20 % - Accentuation1", + "20% - Accent2" => "20 % - Accentuation2", + "20% - Accent3" => "20 % - Accentuation3", + "20% - Accent4" => "20 % - Accentuation4", + "20% - Accent5" => "20 % - Accentuation5", + "20% - Accent6" => "20 % - Accentuation6", + "3 Arrows" => "3 flèches", + "3 Symbols" => "3 symboles", + "3 Traffic Lights" => "3 feux de signalisation", + "4 Ratings" => "4 indicateurs", + "40% - Accent1" => "40 % - Accentuation1", + "40% - Accent2" => "40 % - Accentuation2", + "40% - Accent3" => "40 % - Accentuation3", + "40% - Accent4" => "40 % - Accentuation4", + "40% - Accent5" => "40 % - Accentuation5", + "40% - Accent6" => "40 % - Accentuation6", + "5 Arrows" => "5 flèches", + "5 Quarters" => "5 quarts", + "60% - Accent1" => "60 % - Accentuation1", + "60% - Accent2" => "60 % - Accentuation2", + "60% - Accent3" => "60 % - Accentuation3", + "60% - Accent4" => "60 % - Accentuation4", + "60% - Accent5" => "60 % - Accentuation5", + "60% - Accent6" => "60 % - Accentuation6", + "A Date Occurring…" => "Une date se produisant…", + "A to Z" => "De A à Z", + "About" => "À propos", + "Accent1" => "Accentuation1", + "Accent2" => "Accentuation2", + "Accent3" => "Accentuation3", + "Accent4" => "Accentuation4", + "Accent5" => "Accentuation5", + "Accent6" => "Accentuation6", + "Accessibility" => "Accessibilité", + "Action" => "Action", + "Action Journal" => "Journal des actions", + "Add Chart Element" => "Ajouter un élément de graphique", + "Add subtotal to (columns, e.g. C,D):" => "Ajouter un sous-total à (colonnes, par ex. C,D) :", + "Add to Dictionary" => "Ajouter au dictionnaire", + "Add-in and Automation" => "Complément et automatisation", + "Agent Control" => "Contrôle de l'agent", + "Aggregate duplicates using" => "Agréger les doublons à l'aide de", + "Align Left" => "Aligner à gauche", + "Align Right" => "Aligner à droite", + "Alignment" => "Alignement", + "All Borders" => "Toutes les bordures", + "All Charts" => "Tous les graphiques", + "All done. We made {count} replacements." => "Terminé. Nous avons effectué {count} remplacements.", + "Allow" => "Autoriser", + "Allow all users of this sheet to:" => "Autoriser tous les utilisateurs de cette feuille à :", + "Alpha:" => "Alpha :", + "Analysis Tools" => "Outils d'analyse", + "Anova: Single Factor" => "Analyse de variance : un facteur", + "Any value" => "Tout", + "Apply" => "Appliquer", + "Area" => "Aires", + "Arrow" => "Flèche", + "At each change in (column letter):" => "À chaque changement de (lettre de colonne) :", + "AutoSum (⌘⇧T)" => "Somme automatique (⌘⇧T)", + "Average" => "Moyenne", + "Background Color:" => "Couleur d'arrière-plan :", + "Bad" => "Insatisfaisant", + "Bar" => "Barres", + "Before sheet (position, 0 = first):" => "Avant la feuille (position, 0 = première) :", + "Between…" => "Entre…", + "Bin Range (blank for automatic bins):" => "Plage des classes (vide pour des classes automatiques) :", + "Blanks" => "Cellules vides", + "Blue" => "Bleu", + "Blue - White - Red" => "Bleu - Blanc - Rouge", + "Bold (⌘B)" => "Gras (⌘B)", + "Border" => "Bordure", + "Bottom" => "Bas", + "Bottom Align" => "Aligner en bas", + "Bottom Border" => "Bordure inférieure", + "Bottom Double Border" => "Bordure double inférieure", + "Bottom margin (in):" => "Marge inférieure (po) :", + "Box & Whisker" => "Boîte à moustaches", + "Bubble" => "Bulles", + "By Changing Variable Cells:" => "En modifiant les cellules variables :", + "By changing cell:" => "Cellule à modifier :", + "Calculate Now (F9)" => "Calculer maintenant (F9)", + "Calculate Sheet (⇧F9)" => "Calculer la feuille (⇧F9)", + "Calculated Field…" => "Champ calculé…", + "Calculation" => "Calcul", + "Calculation Options" => "Options de calcul", + "Category:" => "Catégorie :", + "Cell Color" => "Couleur de cellule", + "Cell Styles" => "Styles de cellules", + "Cell Values" => "Valeurs de cellule", + "Center Across Selection" => "Centré sur plusieurs colonnes", + "Change" => "Remplacer", + "Change All" => "Remplacer tout", + "Change Chart Type" => "Modifier le type de graphique", + "Chart" => "Graphique", + "Chart Title" => "Titre du graphique", + "Chart data range:" => "Plage de données du graphique :", + "Check Accessibility" => "Vérifier l'accessibilité", + "Check Cell" => "Vérification", + "Choose a PNG or JPEG no larger than 16 MB." => "Choisissez un fichier PNG ou JPEG de 16 Mo maximum.", + "Choose fields to add to report:" => "Choisissez les champs à inclure dans le rapport :", + "Clear Filter" => "Effacer le filtre", + "Clear Rules" => "Effacer les règles", + "Clustered Bar" => "Barres groupées", + "Clustered Column" => "Histogramme groupé", + "Color:" => "Couleur :", + "Column" => "Histogramme", + "Column Width" => "Largeur de colonne", + "Column chart" => "Histogramme", + "Column or Bar" => "Histogramme ou barres", + "Column width (characters):" => "Largeur de colonne (caractères) :", + "Columns" => "Colonnes", + "Columns (blank = all, e.g. A,C):" => "Colonnes (vide = toutes, par ex. A,C) :", + "Combo" => "Graphique combiné", + "Comma" => "Milliers", + "Text to Columns|Comma" => "Virgule", + "Comma [0]" => "Milliers [0]", + "Comment:" => "Commentaire :", + "Comments pane" => "Volet Commentaires", + "Compact" => "Compacte", + "Compatibility" => "Compatibilité", + "Conditional Formatting Rules Manager" => "Gestionnaire des règles de mise en forme conditionnelle", + "Conditional formats" => "Formats conditionnels", + "Confidence Level (%):" => "Niveau de confiance (%) :", + "Confidence Level for Mean (%), blank for none:" => "Niveau de confiance pour la moyenne (%), vide pour aucun :", + "Confidence interval" => "Intervalle de confiance", + "Confidence level (%):" => "Niveau de confiance (%) :", + "Constant is Zero" => "Constante égale à zéro", + "Contributors" => "Contributeurs", + "Convert Text to Columns" => "Convertir le texte en colonnes", + "Convert the last ink stroke to a shape" => "Convertir le dernier trait d'encre en forme", + "Convert to Number" => "Convertir en nombre", + "Convert to Range" => "Convertir en plage", + "Copies" => "Copies", + "Copy (⌘C)" => "Copier (⌘C)", + "Correlation" => "Analyse de corrélation", + "Count" => "Nombre", + "CountA" => "NbVal", + "Covariance" => "Analyse de covariance", + "Create Forecast Worksheet" => "Créer une feuille de prévision", + "Create Sparklines" => "Créer des graphiques sparkline", + "Create a copy" => "Créer une copie", + "Cube" => "Cube", + "Cumulative Percentage" => "Pourcentage cumulé", + "Currency [0]" => "Monétaire [0]", + "Current region" => "Zone en cours", + "Custom (%):" => "Personnalisé (%) :", + "Custom Sort" => "Tri personnalisé", + "Cut (⌘X)" => "Couper (⌘X)", + "Damping factor:" => "Facteur d'amortissement :", + "Data Range:" => "Plage de données :", + "Data and Model" => "Données et modèle", + "Data validation" => "Validation des données", + "Database" => "Base de données", + "Date unit" => "Unité de date", + "Day" => "Jour", + "Decimal" => "Décimal", + "Define Name…" => "Définir un nom…", + "Delete Comment" => "Supprimer le commentaire", + "Delete Sheet" => "Supprimer la feuille", + "Delete chart" => "Supprimer le graphique", + "Delete rows" => "Supprimer des lignes", + "Delete…" => "Supprimer…", + "Description (optional):" => "Description (facultative) :", + "Descriptive Statistics" => "Statistiques descriptives", + "Destination:" => "Destination :", + "Diagonal ↗" => "Diagonale ↗", + "Diagonal ↘" => "Diagonale ↘", + "Dismiss" => "Ignorer", + "Display:" => "Texte à afficher :", + "Distributed" => "Distribué", + "Do you want to save the changes you made to {title}?" => "Voulez-vous enregistrer les modifications apportées à {title} ?", + "Don't Save" => "Ne pas enregistrer", + "Double" => "Double", + "Double Accounting" => "Double comptabilité", + "Doughnut" => "Anneau", + "Down" => "En bas", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "Faites glisser pour remplir les cellules. Faites glisser depuis l'intérieur d'une cellule pour sélectionner une plage." + } + "Duplicate Values…" => "Valeurs en double…", + "Edit Name" => "Modifier le nom", + "Edit chart title" => "Modifier le titre du graphique", + "Edit…" => "Modifier…", + "End date:" => "Date de fin :", + "Engineering" => "Ingénierie", + "Entire column" => "Colonne entière", + "Entire row" => "Ligne entière", + "Equal To…" => "Égal à…", + "Erase ink strokes" => "Effacer les traits d'encre", + "Error checking options" => "Options de vérification des erreurs", + "Error message:" => "Message d'erreur :", + "Error style" => "Style d'erreur", + "Errors" => "Erreurs", + "Every command run in this session (replayable)" => "Toutes les commandes exécutées dans cette session (rejouables)", + "Expand formula bar" => "Développer la barre de formule", + "Explanatory Text" => "Texte explicatif", + "Exponential Smoothing" => "Lissage exponentiel", + "Export as CSV…" => "Exporter en CSV…", + "Export as PDF…" => "Exporter en PDF…", + "Export as Web Page (.html)…" => "Exporter en page web (.html)…", + "F-Test Two-Sample for Variances" => "Test d'égalité des variances (F-Test)", + "Fill missing points using" => "Compléter les points manquants à l'aide de", + "Filter (⌘⇧F)" => "Filtrer (⌘⇧F)", + "Filter by Selected Cell's Value" => "Filtrer par la valeur de la cellule sélectionnée", + "Filters" => "Filtres", + "Find" => "Rechercher", + "Find & Select" => "Rechercher et sélectionner", + "Find All" => "Rechercher tout", + "Find Next" => "Suivant", + "Find and Replace" => "Rechercher et remplacer", + "Find what:" => "Rechercher :", + "Finding printers…" => "Recherche des imprimantes…", + "Fits inside the selected cell and moves with its content." => "S'insère dans la cellule sélectionnée et se déplace avec son contenu.", + "Flash Fill (⌘E)" => "Remplissage instantané (⌘E)", + "Font" => "Police", + "Footer (in):" => "Pied de page (po) :", + "Footer:" => "Pied de page :", + "Forecast Sheet" => "Feuille de prévision", + "Forecast end (date or number; blank: a third of the history):" => "Fin de la prévision (date ou nombre ; vide : un tiers de l'historique) :", + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Début de la prévision (date ou nombre de l'historique ; vide : après le dernier point) :" + } + "Format Cells" => "Format de cellules", + "Format Cells|Fill" => "Remplissage", + "Format Chart Area…" => "Mettre en forme la zone de graphique…", + "Format Chart pane" => "Volet Format du graphique", + "Format as Table" => "Mettre sous forme de tableau", + "Format cells" => "Mettre en forme les cellules", + "Format cells that are (value):" => "Appliquer une mise en forme aux cellules qui sont (valeur) :", + "Format cells that contain a date occurring:" => "Appliquer une mise en forme aux cellules contenant une date :", + "Format cells that contain the text:" => "Appliquer une mise en forme aux cellules qui contiennent le texte :", + "Format columns" => "Format de colonnes", + "Format rows" => "Format de lignes", + "Format values where this formula is true:" => "Appliquer une mise en forme aux valeurs pour lesquelles cette formule est vraie :", + "Formula Builder" => "Générateur de formules", + "Formula:" => "Formule :", + "Funnel" => "Entonnoir", + "GRG Nonlinear" => "GRG non linéaire", + "Go To" => "Atteindre", + "Go To Special" => "Atteindre spécial", + "Goal Seek" => "Valeur cible", + "Goal Seeking found a solution: {value}" => "La recherche de valeur cible a trouvé une solution : {value}", + "Good" => "Satisfaisant", + "Good, Bad and Neutral" => "Satisfaisant, insatisfaisant et neutre", + "Gradebook" => "Carnet de notes", + "Grayscale" => "Nuances de gris", + "Greater Than…" => "Supérieur à…", + "Green" => "Vert", + "Green - White - Red" => "Vert - Blanc - Rouge", + "Green - Yellow - Red" => "Vert - Jaune - Rouge", + "Green Fill with Dark Green Text" => "Remplissage vert avec texte vert foncé", + "Group by Months" => "Grouper par mois", + "Group by Quarters" => "Grouper par trimestres", + "Group by Years" => "Grouper par années", + "Grouped By:" => "Groupé par :", + "Growth" => "Géométrique", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "En-tête (&L gauche, &C centre, &R droite ; &P page, &N pages, &D date, &A feuille) :" + } + "Header (in):" => "En-tête (po) :", + "Heading 1" => "Titre 1", + "Heading 2" => "Titre 2", + "Heading 3" => "Titre 3", + "Heading 4" => "Titre 4", + "Hex" => "Hex", + "Hidden" => "Masquée", + "Hidden: {sheets}" => "Masquées : {sheets}", + "Hide Sheet" => "Masquer la feuille", + "Hierarchy & more" => "Hiérarchie et plus", + "Highlight Cells Rules" => "Règles de mise en surbrillance des cellules", + "Highlighter" => "Surligneur", + "Histogram" => "Histogramme", + "Horizontal (Category) Axis Labels:" => "Étiquettes de l'axe horizontal (abscisse) :", + "Horizontal axis title:" => "Titre de l'axe horizontal :", + "Household Budget" => "Budget familial", + "How agents drive GridCraft (MCP / control channel)" => "Comment les agents pilotent GridCraft (MCP / canal de contrôle)", + "Hypothesized Mean Difference:" => "Différence hypothétique des moyennes :", + "Ignore Once" => "Ignorer une fois", + "Ignore blank" => "Ignorer si vide", + "Import a text or CSV file" => "Importer un fichier texte ou CSV", + "In the last 7 days" => "Au cours des 7 derniers jours", + "In-cell dropdown" => "Liste déroulante dans la cellule", + "Include forecast statistics" => "Inclure les statistiques de prévision", + "Indent" => "Retrait", + "Information" => "Informations", + "Input" => "Entrée", + "Input Range:" => "Plage d'entrée :", + "Input X Range:" => "Plage d'entrée X :", + "Input Y Range:" => "Plage d'entrée Y :", + "Input message:" => "Message de saisie :", + "Insert Calculated Field" => "Insérer un champ calculé", + "Insert Chart" => "Insérer un graphique", + "Insert Function (⇧F3)" => "Insérer une fonction (⇧F3)", + "Insert Hyperlink" => "Insérer un lien hypertexte", + "Insert Link" => "Insérer un lien", + "Insert Link (⌘K)" => "Insérer un lien (⌘K)", + "Insert Slicer" => "Insérer un segment", + "Insert a picture" => "Insérer une image", + "Insert a slicer to filter a table" => "Insérer un segment pour filtrer un tableau", + "Insert an icon" => "Insérer une icône", + "Insert rows" => "Insérer des lignes", + "Insert\nSlicer" => "Insérer un\nsegment", + "Insert…" => "Insérer…", + "Inside Borders" => "Bordures intérieures", + "Interpolation" => "Interpolation", + "Interval:" => "Intervalle :", + "Italic (⌘I)" => "Italique (⌘I)", + "Join the ArtCraft Discord" => "Rejoindre le Discord d'ArtCraft", + "Justify" => "Justifié", + "Keep" => "Conserver", + "Keep Solver Solution" => "Conserver la solution du solveur", + "Kth Largest (blank for none):" => "K-ième plus grande valeur (vide pour aucune) :", + "Kth Smallest (blank for none):" => "K-ième plus petite valeur (vide pour aucune) :", + "Labels in first row" => "Intitulés en première ligne", + "Last cell" => "Dernière cellule", + "Last month" => "Le mois dernier", + "Last week" => "La semaine dernière", + "Left Border" => "Bordure gauche", + "Page order" => "Ordre des pages", + "Down, then over" => "Vers le bas, puis à droite", + "Over, then down" => "À droite, puis vers le bas", + "Left margin (in):" => "Marge gauche (po) :", + "Legend Entries (Series)" => "Entrées de légende (série)", + "Less Than…" => "Inférieur à…", + "Light Blue" => "Bleu clair", + "Light Red Fill" => "Remplissage rouge clair", + "Light Red Fill with Dark Red Text" => "Remplissage rouge clair avec texte rouge foncé", + "Line" => "Courbes", + "Line chart" => "Graphique en courbes", + "Line or Area" => "Courbes ou aires", + "Line with Markers" => "Courbes avec marqueurs", + "Linear" => "Linéaire", + "Link to (web address, e-mail or Sheet!A1):" => "Lien vers (adresse web, adresse e-mail ou Feuille!A1) :", + "Linked Cell" => "Cellule liée", + "Link…" => "Lien…", + "List" => "Liste", + "Location Range:" => "Plage d'emplacements :", + "Locked" => "Verrouillée", + "Macros and scripts in this workbook (Alt+F8)" => "Macros et scripts de ce classeur (Alt+F8)", + "Make Unconstrained Variables Non-Negative" => "Rendre les variables sans contrainte non négatives", + "Manage Rules…" => "Gérer les règles…", + "Markers" => "Marqueurs", + "Match case" => "Respecter la casse", + "Match entire cell contents" => "Totalité du contenu de la cellule", + "Max" => "Max", + "Maximum:" => "Maximum :", + "Median" => "Médiane", + "Middle Align" => "Aligner au milieu", + "Min" => "Min", + "Minimum / Source / Formula:" => "Minimum / Source / Formule :", + "Models" => "Modèles", + "Modify" => "Modifier", + "Month" => "Mois", + "More Borders…" => "Autres bordures…", + "More Colors…" => "Autres couleurs…", + "More Functions…" => "Autres fonctions…", + "More commands" => "Autres commandes", + "Move or Copy" => "Déplacer ou copier", + "Move or Copy Sheet…" => "Déplacer ou copier la feuille…", + "Move to Column Labels" => "Déplacer dans Étiquettes de colonnes", + "Move to Report Filter" => "Déplacer dans Filtre du rapport", + "Move to Row Labels" => "Déplacer dans Étiquettes de lignes", + "Move to Values" => "Déplacer dans Valeurs", + "Moving Average" => "Moyenne mobile", + "My data has headers" => "Mes données ont des en-têtes", + "My list has headers" => "Ma liste a des en-têtes", + "Name" => "Nom", + "Name Manager" => "Gestionnaire de noms", + "Name:" => "Nom :", + "Neutral" => "Neutre", + "New Comment" => "Nouveau commentaire", + "New Name" => "Nouveau nom", + "New Rule…" => "Nouvelle règle…", + "New Workbook" => "Nouveau classeur", + "New Worksheet Ply:" => "Nouvelle feuille :", + "New title (Modify):" => "Nouveau titre (Modifier) :", + "New…" => "Nouveau…", + "Next month" => "Le mois prochain", + "Next week" => "La semaine prochaine", + "No Border" => "Aucune bordure", + "No Fill" => "Aucun remplissage", + "No names defined" => "Aucun nom défini", + "No picture selected" => "Aucune image sélectionnée", + "No printers found. Configure a system printer or export a PDF." => { + "Aucune imprimante trouvée. Configurez une imprimante système ou exportez un PDF." + } + "No ranges yet." => "Aucune plage pour le moment.", + "None" => "Aucun", + "Borders|None" => "Aucune", + "Legend" => "Légende", + "Legend|None" => "Aucune", + "Select a chart to format it." => "Sélectionnez un graphique pour le mettre en forme.", + "The chart no longer exists." => "Le graphique n'existe plus.", + "Chart Type" => "Type de graphique", + "Elements" => "Éléments", + "Data Labels" => "Étiquettes de données", + "Series {n}" => "Série {n}", + "Fill…" => "Remplissage…", + "Colors & Layout" => "Couleurs et disposition", + "Colorful" => "Multicolore", + "Monochromatic" => "Monochrome", + "Layout {n}" => "Disposition {n}", + "Width" => "Largeur", + "Height" => "Hauteur", + "Normal Probability" => "Probabilité normale", + "Not in Dictionary ({cell}):" => "Absent du dictionnaire ({cell}) :", + "Note" => "Remarque", + "Note:" => "Remarque :", + "Number Format" => "Format de nombre", + "Number Stored as Text" => "Nombre stocké sous forme de texte", + "Numbers" => "Nombres", + "One-sided" => "Recto", + "Open…" => "Ouvrir…", + "Options|Editing" => "Édition", + "Orange" => "Orange", + "Orientation (degrees)" => "Orientation (degrés)", + "Other:" => "Autre :", + "Outline" => "Contour", + "Report Layout|Outline" => "Plan", + "Output" => "Sortie", + "Output Range:" => "Plage de sortie :", + "Output options" => "Options de sortie", + "Outside Borders" => "Bordures extérieures", + "Oval" => "Ellipse", + "Page Break Preview" => "Aperçu des sauts de page", + "Page Breaks" => "Sauts de page", + "Page Setup" => "Mise en page", + "Paper Size" => "Taille du papier", + "Pareto (sorted histogram)" => "Pareto (histogramme trié)", + "Password" => "Mot de passe", + "Password (optional):" => "Mot de passe (facultatif) :", + "Password:" => "Mot de passe :", + "Paste (⌘V)" => "Coller (⌘V)", + "Pen\nBlack" => "Stylo\nnoir", + "Pen\nBlue" => "Stylo\nbleu", + "Pen\nRed" => "Stylo\nrouge", + "Percent" => "Pourcentage", + "Pick From Drop-down List…" => "Liste déroulante de choix…", + "Pick From List" => "Choisir dans la liste", + "Picture file path (PNG or JPEG):" => "Chemin du fichier image (PNG ou JPEG) :", + "Pie" => "Secteurs", + "Pie or Doughnut" => "Secteurs ou anneau", + "PivotTable Fields" => "Champs de tableau croisé dynamique", + "Place Picture in Cell" => "Placer l'image dans la cellule", + "Place Picture over Cells" => "Placer l'image sur les cellules", + "Place in Cell" => "Placer dans la cellule", + "Place over Cells" => "Placer sur les cellules", + "Print Area" => "Zone d'impression", + "Print Titles" => "Titres à imprimer", + "Print failed: the printing worker stopped." => "Échec de l'impression : le processus d'impression s'est arrêté.", + "Print failed: {error}" => "Échec de l'impression : {error}", + "Print job submitted." => "Travail d'impression envoyé.", + "Print job submitted: {receipt}" => "Travail d'impression envoyé : {receipt}", + "Printer" => "Imprimante", + "Printer default" => "Par défaut de l'imprimante", + "Printer discovery failed." => "Échec de la détection des imprimantes.", + "Print…" => "Imprimer…", + "Product" => "Produit", + "Protect Sheet" => "Protéger la feuille", + "Protect Structure and Windows" => "Protéger la structure et les fenêtres", + "Protect Workbook structure" => "Protéger la structure du classeur", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Protéger le classeur pour : Structure (les feuilles ne peuvent pas être ajoutées, déplacées, renommées, masquées ou supprimées)." + } + "Protect\nSheet" => "Protéger la\nfeuille", + "Protection" => "Protection", + "Purple" => "Violet", + "Quarterly Sales Dashboard" => "Tableau de bord des ventes trimestrielles", + "Radar" => "Radar", + "Range password:" => "Mot de passe de la plage :", + "Ranges that stay editable when the sheet is protected:" => "Plages qui restent modifiables lorsque la feuille est protégée :", + "Rank and Percentile" => "Rang et centile", + "Recent Colors" => "Couleurs récentes", + "Recommended Charts" => "Graphiques recommandés", + "Rectangle" => "Rectangle", + "Red" => "Rouge", + "Red - Yellow - Green" => "Rouge - Jaune - Vert", + "Red Border" => "Bordure rouge", + "Red Text" => "Texte rouge", + "Redo" => "Rétablir", + "Redo (⌘Y)" => "Rétablir (⌘Y)", + "Reference:" => "Référence :", + "Refers To" => "Fait référence à", + "Refers to cells:" => "Fait référence aux cellules :", + "Refers to:" => "Fait référence à :", + "Refresh" => "Actualiser", + "Refresh printers" => "Actualiser les imprimantes", + "Regression" => "Régression", + "Remove" => "Supprimer", + "Remove Duplicates" => "Supprimer les doublons", + "Remove Field" => "Supprimer le champ", + "Remove the password (Modify)" => "Supprimer le mot de passe (Modification)", + "Rename Sheet" => "Renommer la feuille", + "Replace" => "Remplacer", + "Replace All" => "Remplacer tout", + "Replace with:" => "Remplacer par :", + "Report Layout" => "Disposition du rapport", + "Residuals" => "Résidus", + "Restore Original Values" => "Rétablir les valeurs d'origine", + "Right Border" => "Bordure droite", + "Right margin (in):" => "Marge droite (po) :", + "Rounded Rectangle" => "Rectangle à coins arrondis", + "Row Height" => "Hauteur de ligne", + "Row height (pixels):" => "Hauteur de ligne (pixels) :", + "Rows" => "Lignes", + "Sample" => "Aperçu", + "Save (⌘S)" => "Enregistrer (⌘S)", + "Save As…" => "Enregistrer sous…", + "Save Changes?" => "Enregistrer les modifications ?", + "Save a Copy" => "Enregistrer une copie", + "Save a Copy as Excel Workbook (.xlsx)…" => "Enregistrer une copie en tant que classeur Excel (.xlsx)…", + "Save a copy as .{format}" => "Enregistrer une copie au format .{format}", + "Scatter" => "Nuage de points", + "Scatter or Bubble" => "Nuage de points ou à bulles", + "Scatter with Lines" => "Nuage de points avec courbes", + "Scope" => "Étendue", + "Scope (Workbook or sheet name):" => "Étendue (classeur ou nom de feuille) :", + "ScreenTip:" => "Info-bulle :", + "Search" => "Rechercher", + "Search Commands" => "Rechercher des commandes", + "Search and run any command" => "Rechercher et exécuter n'importe quelle commande", + "Search commands" => "Rechercher des commandes", + "Search commands (⌘⇧Space)" => "Rechercher des commandes (⌘⇧Space)", + "Seasonality (auto, 0 for none, or a season length):" => "Saisonnalité (automatique, 0 pour aucune, ou une durée de saison) :", + "Select" => "Sélectionner", + "Select Data" => "Sélectionner les données", + "Select Data Source" => "Sélectionner la source de données", + "Select Data…" => "Sélectionner les données…", + "Select a Solving Method:" => "Sélectionner une méthode de résolution :", + "Select a chart first." => "Sélectionnez d'abord un graphique.", + "Select a printer" => "Sélectionner une imprimante", + "Select and move ink and shapes" => "Sélectionner et déplacer l'encre et les formes", + "Semicolon" => "Point-virgule", + "Series" => "Série", + "Series in" => "Série en", + "Series{n}" => "Série{n}", + "Series…" => "Série…", + "Set Objective:" => "Objectif à définir :", + "Set cell:" => "Cellule à définir :", + "Share: export or save a copy" => "Partager : exporter ou enregistrer une copie", + "Sheets: {sheets}" => "Feuilles : {sheets}", + "Shift cells down" => "Décaler les cellules vers le bas", + "Shift cells left" => "Décaler les cellules vers la gauche", + "Shift cells right" => "Décaler les cellules vers la droite", + "Shift cells up" => "Décaler les cellules vers le haut", + "Show Formulas (⌃`)" => "Afficher les formules (⌃`)", + "Show as % of Grand Total" => "Afficher en % du total général", + "Show as No Calculation" => "Afficher sans calcul", + "Show as Rank" => "Afficher en rang", + "Show as Running Total" => "Afficher en résultat cumulé", + "Show password" => "Afficher le mot de passe", + "Shrink to fit" => "Ajuster", + "Single" => "Simple", + "Single Accounting" => "Simple comptabilité", + "Slicer" => "Segment", + "Solve" => "Résoudre", + "Solver Parameters" => "Paramètres du solveur", + "Solver Results" => "Résultats du solveur", + "Sort & Filter" => "Trier et filtrer", + "Sort Ascending" => "Tri croissant", + "Sort Descending" => "Tri décroissant", + "Sort by" => "Trier par", + "Source:" => "Source :", + "Space" => "Espace", + "Special…" => "Spécial…", + "Spelling (F7)" => "Orthographe (F7)", + "Stacked Area" => "Aires empilées", + "Stacked Bar" => "Barres empilées", + "Stacked Column" => "Histogramme empilé", + "Stacked Line" => "Courbes empilées", + "Standard Colors" => "Couleurs standard", + "Standard Errors" => "Erreurs types", + "Standard Width" => "Largeur standard", + "Standard column width (pixels):" => "Largeur de colonne standard (pixels) :", + "Standardized Residuals" => "Résidus normalisés", + "Start a conversation:" => "Démarrer une conversation :", + "Start a new workbook" => "Créer un nouveau classeur", + "Statistic" => "Statistique", + "Statistical" => "Statistiques", + "Step value:" => "Valeur du pas :", + "Stock" => "Boursier", + "Stop value:" => "Dernière valeur :", + "Subject to the Constraints:" => "Soumis aux contraintes :", + "Submitting print job…" => "Envoi de la tâche d'impression…", + "Subscript" => "Indice", + "Suggestions:" => "Suggestions :", + "Sum" => "Somme", + "Summarize by Average" => "Synthétiser par moyenne", + "Summarize by Count" => "Synthétiser par nombre", + "Summarize by Max" => "Synthétiser par max", + "Summarize by Min" => "Synthétiser par min", + "Summarize by Sum" => "Synthétiser par somme", + "Summary statistics" => "Résumé statistique", + "Sunburst" => "Rayons de soleil", + "Superscript" => "Exposant", + "Switch Row/Column" => "Permuter ligne/colonne", + "Tab" => "Tabulation", + "Table (⌘T)" => "Tableau (⌘T)", + "Table Styles" => "Styles de tableau", + "Tabular" => "Tabulaire", + "Tab|Insert" => "Insertion", + "Text length" => "Longueur du texte", + "Text that Contains…" => "Texte qui contient…", + "Text to Columns" => "Convertir le texte en colonnes", + "The output range already holds data. Replace it with the report?" => { + "La plage de sortie contient déjà des données. La remplacer par le rapport ?" + } + "The spelling check is complete for the entire sheet." => "La vérification orthographique est terminée pour toute la feuille.", + "Theme Colors" => "Couleurs du thème", + "Themed Cell Styles" => "Styles de cellules avec thème", + "Then by" => "Puis par", + "There are no conditional formatting rules on this sheet." => "Cette feuille ne contient aucune règle de mise en forme conditionnelle.", + "Thick Bottom Border" => "Bordure épaisse en bas", + "Thick Outside Borders" => "Bordure extérieure épaisse", + "This month" => "Ce mois-ci", + "This week" => "Cette semaine", + "This workbook" => "Ce classeur", + "Timeline range (blank: first column of the selection):" => "Plage chronologique (vide : première colonne de la sélection) :", + "Title:" => "Titre :", + "Titles and Headings" => "Titres et en-têtes", + "To value:" => "Valeur à atteindre :", + "To:" => "À :", + "Today" => "Aujourd'hui", + "Tomorrow" => "Demain", + "Top" => "Haut", + "Top Align" => "Aligner en haut", + "Top Border" => "Bordure supérieure", + "Top and Bottom Border" => "Bordure en haut et en bas", + "Top and Double Bottom Border" => "Bordure simple en haut et double en bas", + "Top and Thick Bottom Border" => "Bordure simple en haut et épaisse en bas", + "Top margin (in):" => "Marge supérieure (po) :", + "Top/Bottom Rules" => "Règles des valeurs plus/moins élevées", + "Total" => "Total", + "Treat consecutive delimiters as one" => "Interpréter les séparateurs consécutifs comme un seul", + "Treemap" => "Compartimentage", + "Triangle" => "Triangle", + "Two-sided printing" => "Impression recto verso", + "Two-sided: long edge" => "Recto verso : bord long", + "Two-sided: short edge" => "Recto verso : bord court", + "Type" => "Type", + "Type (custom format code):" => "Type (code de format personnalisé) :", + "Type a command, e.g. freeze, chart, bold…" => "Tapez une commande, par exemple figer, graphique, gras…", + "Underline (⌘U)" => "Souligné (⌘U)", + "Undo" => "Annuler", + "Undo (⌘Z)" => "Annuler (⌘Z)", + "Undo list" => "Liste des actions à annuler", + "Unhide" => "Afficher", + "Unhide Sheet…" => "Afficher la feuille…", + "Unhide sheet:" => "Afficher la feuille :", + "Unlock with password" => "Déverrouiller avec un mot de passe", + "Unprotect Sheet" => "Ôter la protection de la feuille", + "Unprotect Workbook" => "Ôter la protection du classeur", + "Up" => "Vers le haut", + "Use AutoFilter" => "Utiliser le filtre automatique", + "Use a field's menu to move it between areas:" => "Utilisez le menu d'un champ pour le déplacer entre les zones :", + "Use function" => "Fonction à utiliser", + "Value" => "Valeur", + "Value Of:" => "Valeur :", + "Values" => "Valeurs", + "Values range (blank: second column of the selection):" => "Plage de valeurs (vide : deuxième colonne de la sélection) :", + "Variable 1 Range:" => "Plage pour la variable 1 :", + "Variable 2 Range:" => "Plage pour la variable 2 :", + "Version {version}" => "Version {version}", + "Vertical" => "Vertical", + "Vertical axis title:" => "Titre de l'axe vertical :", + "Visible cells only" => "Cellules visibles seulement", + "Warning" => "Avertissement", + "Warning Text" => "Texte d'avertissement", + "Watch\nWindow" => "Fenêtre\nEspion", + "Waterfall" => "Cascade", + "Web" => "Web", + "Weekday" => "Jour ouvré", + "What-If Analysis" => "Analyse de scénarios", + "White - Green" => "Blanc - Vert", + "White - Red" => "Blanc - Rouge", + "Whole number" => "Nombre entier", + "Win/Loss" => "Positif/Négatif", + "Within workbook" => "Dans le classeur", + "Workbook" => "Classeur", + "Workbook Statistics" => "Statistiques du classeur", + "Workbook\nStatistics" => "Statistiques\ndu classeur", + "Wrap text" => "Renvoyer à la ligne automatiquement", + "Year" => "Année", + "Yellow Fill with Dark Yellow Text" => "Remplissage jaune avec texte jaune foncé", + "Z to A" => "De Z à A", + "Zeros" => "Zéros", + "Zoom In" => "Zoom avant", + "Zoom Out" => "Zoom arrière", + "Zoom to 100%" => "Zoom 100 %", + "Zoom to Selection" => "Zoom sur la sélection", + "Zoom…" => "Zoom…", + "and:" => "et :", + "applies to" => "s'applique à", + "between" => "comprise entre", + "dashed" => "tirets", + "dotted" => "pointillés", + "double" => "double", + "equal to" => "égale à", + "greater than" => "supérieure à", + "greater than or equal to" => "supérieure ou égale à", + "less than" => "inférieure à", + "less than or equal to" => "inférieure ou égale à", + "medium" => "moyen", + "none" => "aucune", + "not between" => "non comprise entre", + "not equal to" => "différente de", + "t-Test: Paired Two Sample for Means" => "Test d'égalité des espérances : observations pairées", + "t-Test: Two-Sample Assuming Equal Variances" => "Test d'égalité des espérances : deux observations de variances égales", + "t-Test: Two-Sample Assuming Unequal Variances" => "Test d'égalité des espérances : deux observations de variances différentes", + "thick" => "épais", + "thin" => "fin", + "this workbook" => "ce classeur", + "with" => "avec", + "{count} cell(s) found" => "{count} cellule(s) trouvée(s)", + "£ English (United Kingdom)" => "£ Anglais (Royaume-Uni)", + "¥ Japanese" => "¥ Japonais", + "— 1 step" => "— 1 étape", + "— VBA project (preserved, not run)" => "— Projet VBA (conservé, non exécuté)", + "— {steps} steps" => "— {steps} étapes", + "€ Euro" => "€ Euro", "Diagram" => "Diagramme", "Decorative Text" => "Texte décoratif", "Different First Page" => "Première page différente", @@ -14,7 +836,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Paste Formulas" => "Coller les formules", "Paste Formatting" => "Coller la mise en forme", "Transpose" => "Transposer", - "Paste Link" => "Coller la liaison", + "Paste Link" => "Coller avec liaison", "Paste Special…" => "Collage spécial…", "Insert Copied Cells" => "Insérer les cellules copiées", "Insert Copied Cells…" => "Insérer les cellules copiées…", @@ -120,7 +942,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Symbol" => "Symbole", "Equation" => "Équation", "Insert New Equation..." => "Insérer une nouvelle équation", - "Sparklines" => "Courbes de tendance", + "Sparklines" => "Graphiques sparkline", "Checkbox" => "Case à cocher", "Insert checkboxes in the selected cells" => "Insérer des cases à cocher dans les cellules sélectionnées", "Button" => "Bouton", @@ -399,7 +1221,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Sheets" => "Feuilles", "Protect Workbook" => "Protéger le classeur", "Sheet structure is locked: sheets can't be added, moved, renamed or deleted." => { - "La structure de la feuille est verrouillée : les feuilles ne peuvent pas être ajoutées, déplacées, renommées ou supprimées." + "La structure des feuilles est verrouillée : les feuilles ne peuvent pas être ajoutées, déplacées, renommées ou supprimées." } "Lock the sheet structure so sheets can't be added, moved, renamed or deleted." => { "Verrouiller la structure des feuilles pour qu'elles ne puissent pas être ajoutées, déplacées, renommées ou supprimées." @@ -414,7 +1236,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "No workbook is open." => "Aucun classeur n'est ouvert.", "Save as type" => "Type de fichier", "Excel Workbook (*.xlsx)" => "Classeur Excel (*.xlsx)", - "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (séparateur point-virgule) (*.csv)", + "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (séparateur virgule) (*.csv)", "Web Page (*.html)" => "Page web (*.html)", "PDF (*.pdf)" => "PDF (*.pdf)", "Download" => "Télécharger", @@ -426,6 +1248,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Print Entire Workbook" => "Imprimer tout le classeur", "Fit Sheet on One Page" => "Ajuster la feuille sur une page", "Page Setup…" => "Mise en page…", + "Page {page}" => "Page {page}", "Page {page} of {pages}" => "Page {page} sur {pages}", "Nothing to print." => "Rien à imprimer.", "Previous page" => "Page précédente", @@ -435,8 +1258,8 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Enregistrer la feuille en tant que document PDF qui conserve sa mise en page." } "Change File Type" => "Changer le type de fichier", - "CSV (Comma delimited)" => "CSV (séparateur point-virgule)", - "Save the active sheet as comma-separated text." => "Enregistrer la feuille active sous forme de texte séparé par des points-virgules.", + "CSV (Comma delimited)" => "CSV (séparateur virgule)", + "Save the active sheet as comma-separated text." => "Enregistrer la feuille active sous forme de texte séparé par des virgules.", "Web Page (.html)" => "Page web (.html)", "Save the workbook as a web page." => "Enregistrer le classeur en tant que page web.", "Options|General" => "Général", @@ -481,6 +1304,33 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "Arrêter", "New Macro" => "Nouvelle macro", "Show" => "Afficher", + "Generated|Column" => "Colonne", + "Generated|Row" => "Ligne", + "Book" => "Classeur", + // A generated sheet name is `Feuil1` in Excel, so this row is the prefix of a new + // sheet's name (see `app/commands.rs`), not only a label. + "Sheet" => "Feuil", + "Count Numbers" => "Nombre de nombres", + "Type to filter…" => "Saisissez pour filtrer…", + "Nothing to paste." => "Aucune donnée à coller.", + "No cells were found." => "Aucune cellule trouvée.", + "Or select a category:" => "Ou sélectionnez une catégorie :", + "Most Recently Used" => "Dernières utilisées", + "Insert Function…" => "Insérer une fonction…", + "Paste Names…" => "Coller les noms…", + "Macro name:" => "Nom de la macro :", + "Shortcut key:" => "Raccourci clavier :", + "Description:" => "Description :", + "This workbook has no scripts or macros." => "Ce classeur ne contient aucun script ni aucune macro.", + "Check for Updates…" => "Rechercher des mises à jour…", + "Checking for updates…" => "Recherche de mises à jour…", + "Could not check for updates." => "Impossible de rechercher les mises à jour.", + "Check Again" => "Réessayer", + "Insert Function" => "Insérer une fonction", + "Search:" => "Rechercher :", + "e.g. lookup, average, date" => "p. ex. recherche, moyenne, date", + "Cancel" => "Annuler", + "All" => "Toutes", "Collapse dialog" => "Réduire la boîte de dialogue", "Expand dialog" => "Développer la boîte de dialogue", _ => return None, diff --git a/crates/ui-egui/src/i18n/fr_functions.rs b/crates/ui-egui/src/i18n/fr_functions.rs new file mode 100644 index 0000000000..c6e676c10d --- /dev/null +++ b/crates/ui-egui/src/i18n/fr_functions.rs @@ -0,0 +1,1065 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 pour positif, -1 pour négatif et 0 pour zéro."), + ("A random integer between two bounds, inclusive.", "Un entier aléatoire compris entre deux limites incluses."), + ("A random number between 0 and 1, recalculated every time.", "Un nombre aléatoire compris entre 0 et 1, recalculé à chaque fois."), + ("A range or array without its blank outer rows and columns.", "Une plage ou un tableau sans ses lignes et colonnes extérieures vides."), + ("A reference shifted from a starting point.", "Une référence décalée d'un point de départ."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Statistique du modèle FORECAST.ETS : 1 alpha, 2 bêta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 taille du pas.", + ), + ("A subtotal that can skip hidden rows.", "Un sous-total qui peut ignorer les lignes masquées."), + ("Absolute value (modulus) of a complex number.", "Valeur absolue (module) d'un nombre complexe."), + ("Absolute value of a number.", "Valeur absolue d'un nombre."), + ("Accrued interest of a security paying interest at maturity.", "Intérêts courus d’un titre payant des intérêts à l'échéance."), + ("Accrued interest of a security paying periodic interest.", "Intérêts courus d’un titre payant des intérêts périodiques."), + ("Accumulates an array into one value.", "Accumule un tableau en une seule valeur."), + ("Adds all the numbers in the arguments.", "Additionne tous les nombres fournis comme arguments."), + ( + "Adds the cells that meet a condition.", + "Renvoie la somme des valeurs numériques dans les cellules de la feuille de calcul qui satisfont une condition.", + ), + ( + "Adds the cells that meet every condition.", + "Renvoie la somme des valeurs numériques dans les cellules de la feuille de calcul qui satisfont à toutes les conditions.", + ), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Renvoie la somme des valeurs numériques dans un champ de base de données, pour les enregistrements satisfaisant aux critères.", + ), + ("Adds the squares of the numbers.", "Renvoie la somme des nombres au carré."), + ("Amount received at maturity for a fully invested security.", "Montant reçu à l'échéance pour un titre entièrement libéré."), + ("An aggregate that can skip hidden rows and errors.", "Un agrégat qui peut ignorer les lignes masquées et les erreurs."), + ("Angle of a complex number in radians.", "Angle d'un nombre complexe en radians."), + ("Angle of the point (x, y) from the x-axis in radians.", "Angle du point (x, y) par rapport à l'axe des x en radians."), + ("Annual yield of a discounted security.", "Rendement annuel d’un titre à escompte."), + ("Annual yield of a security paying interest at maturity.", "Rendement annuel d’un titre payant des intérêts à l'échéance."), + ("Applies a LAMBDA to each column.", "Applique un LAMBDA à chaque colonne."), + ("Applies a LAMBDA to each row.", "Applique un LAMBDA à chaque ligne."), + ("Applies a LAMBDA to each value.", "Applique un LAMBDA à chaque valeur."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Recherche approximative dans un vecteur trié ou dans la première ligne/colonne d'un tableau.", + ), + ("Arccosine in radians.", "Arccosinus en radians."), + ("Arccotangent in radians (0 to pi).", "Arccotangente en radians (0 à pi)."), + ("Arcsine in radians.", "Arc sinus en radians."), + ("Arctangent in radians.", "Arctangente en radians."), + ("Arithmetic mean of the numbers.", "Moyenne arithmétique des nombres."), + ("Average absolute deviation from the mean.", "Écart absolu moyen par rapport à la moyenne."), + ("Average of the cells that meet a condition.", "Moyenne des cellules de la feuille de calcul qui remplissent une condition."), + ("Average of the cells that meet every condition.", "Moyenne des cellules de la feuille de calcul qui remplissent toutes les conditions."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Fait la moyenne des nombres dans un champ des enregistrements qui répondent aux critères.", + ), + ("Base-10 logarithm of a complex number.", "Logarithme base 10 d'un nombre complexe."), + ("Base-10 logarithm.", "Logarithme base 10."), + ("Base-2 logarithm of a complex number.", "Logarithme base 2 d'un nombre complexe."), + ("Bessel function of the first kind, J_n(x).", "Fonction de Bessel du premier type, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Fonction de Bessel du deuxième type, Y_n(x)."), + ("Beta distribution density or probability.", "Densité ou probabilité de distribution bêta."), + ("Binomial probability.", "Probabilité binomiale."), + ("Bitwise AND of two non-negative integers.", "AND au niveau du bit de deux entiers non négatifs."), + ("Bitwise OR of two non-negative integers.", "OR au niveau du bit de deux entiers non négatifs."), + ("Bitwise exclusive OR of two non-negative integers.", "OR exclusif au niveau du bit de deux entiers non négatifs."), + ("Bond-equivalent yield of a Treasury bill.", "Rendement équivalent à une obligation d'un bon du Trésor."), + ("Breaks a row or column into columns of the given length.", "Divise une ligne ou une colonne en colonnes de la longueur donnée."), + ("Breaks a row or column into rows of the given length.", "Divise une ligne ou une colonne en lignes de la longueur donnée."), + ( + "Builds a cell address as text from row and column numbers.", + "Crée une adresse de cellule sous forme de texte à partir de numéros de ligne et de colonne.", + ), + ( + "Builds a complex number as text from real and imaginary parts.", + "Construit un nombre complexe sous forme de texte à partir de parties réelles et imaginaires.", + ), + ("Builds a date serial number from a year, month and day.", "Crée un numéro de série de date à partir d'une année, d'un mois et d'un jour."), + ( + "Builds a summary table grouping values by row and column fields.", + "Crée un tableau récapitulatif regroupant les valeurs par champs de ligne et de colonne.", + ), + ( + "Builds a time (a fraction of a day) from hours, minutes and seconds.", + "Construit une heure (une fraction de jour) à partir d'heures, de minutes et de secondes.", + ), + ("Builds an array from a LAMBDA.", "Construit un tableau à partir d'un LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Crée un tableau de nombres régulièrement espacés."), + ("Builds an array of random numbers in a range.", "Crée un tableau de nombres aléatoires dans une plage."), + ("Byte version of FIND.", "Version en octets de FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Version octet de LEFT (identique à LEFT pour le texte à un octet)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Version octet de LEN (identique à LEN pour le texte à un octet)."), + ("Byte version of MID (same as MID for single-byte text).", "Version octet de MID (identique à MID pour le texte à un octet)."), + ("Byte version of REPLACE.", "Version en octets de REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Version octet de RIGHT (identique à RIGHT pour le texte à un octet)."), + ("Byte version of SEARCH.", "Version en octets de SEARCH."), + ( + "Capitalises the first letter of each word and lower-cases the rest.", + "Met en majuscule la première lettre de chaque mot et en minuscules le reste.", + ), + ("Chi-squared density or left-tailed probability.", "Densité du chi carré ou probabilité cumulée à gauche."), + ("Chi-squared test of independence.", "Test d'indépendance du chi carré."), + ("Column number of a reference.", "Numéro de colonne d’une référence."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Compare une expression avec une liste de valeurs et renvoie le résultat associé à la première correspondance.", + ), + ("Complementary error function, 1 - ERF(x).", "Fonction d'erreur complémentaire, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Conjugué complexe d'un nombre complexe."), + ("Confidence interval half-width using Student's t distribution.", "Demi-largeur de l'intervalle de confiance utilisant la loi t de Student."), + ("Confidence interval half-width using the normal distribution.", "Demi-largeur de l'intervalle de confiance utilisant la loi normale."), + ("Converts Roman numerals to a number.", "Convertit les chiffres romains en nombre."), + ("Converts a binary number to decimal.", "Convertit un nombre binaire en nombre décimal."), + ("Converts a binary number to hexadecimal.", "Convertit un nombre binaire en hexadécimal."), + ("Converts a binary number to octal.", "Convertit un nombre binaire en octal."), + ("Converts a date written as text into a date serial number.", "Convertit une date écrite sous forme de texte en un numéro de série de date."), + ("Converts a decimal number to binary.", "Convertit un nombre décimal en binaire."), + ("Converts a decimal number to hexadecimal.", "Convertit un nombre décimal en hexadécimal."), + ("Converts a decimal number to octal.", "Convertit un nombre décimal en nombre octal."), + ("Converts a decimal price to fractional notation.", "Convertit un prix décimal en notation fractionnaire."), + ("Converts a fractional price notation to a decimal number.", "Convertit une notation de prix fractionnaire en nombre décimal."), + ("Converts a hexadecimal number to binary.", "Convertit un nombre hexadécimal en binaire."), + ("Converts a hexadecimal number to decimal.", "Convertit un nombre hexadécimal en nombre décimal."), + ("Converts a hexadecimal number to octal.", "Convertit un nombre hexadécimal en nombre octal."), + ("Converts a measurement from one unit to another.", "Convertit une mesure d'une unité à une autre."), + ("Converts a number to Roman numerals in one of five styles.", "Convertit un nombre en chiffres romains dans l'un des cinq styles."), + ("Converts a time written as text into a fraction of a day.", "Convertit une heure écrite sous forme de texte en fraction de journée."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Convertit une valeur en nombre : les nombres restent, VRAI est 1, tout le reste est 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Convertit un tableau en texte, soit sous forme de liste séparée par des virgules, soit sous forme de constante de tableau stricte.", + ), + ("Converts an octal number to binary.", "Convertit un nombre octal en binaire."), + ("Converts an octal number to decimal.", "Convertit un nombre octal en nombre décimal."), + ("Converts an octal number to hexadecimal.", "Convertit un nombre octal en hexadécimal."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Convertit n'importe quelle valeur en texte, éventuellement sous forme stricte (entre guillemets).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Convertit entre l'euro et les anciennes monnaies membres de la zone euro aux taux fixes.", + ), + ("Converts degrees to radians.", "Convertit les degrés en radians."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Convertit les caractères pleine chasse en demi-chasse (aucun changement pour le texte à un octet).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Convertit les caractères demi-chasse en pleine chasse (aucun changement dans ces paramètres régionaux).", + ), + ("Converts radians to degrees.", "Convertit les radians en degrés."), + ( + "Converts text that looks like a number, date or time into a number.", + "Convertit le texte qui ressemble à un nombre, une date ou une heure en un nombre.", + ), + ( + "Converts text to a number using the given decimal and group separators.", + "Convertit le texte en nombre en utilisant les séparateurs décimaux et de groupe donnés.", + ), + ("Converts text to lower case.", "Convertit le texte en minuscules."), + ("Converts text to upper case.", "Convertit le texte en majuscules."), + ("Correlation coefficient of two data sets.", "Coefficient de corrélation de deux ensembles de données."), + ("Cosecant of a complex number.", "Cosécante d'un nombre complexe."), + ("Cosecant of an angle in radians.", "Cosécante d'un angle en radians."), + ("Cosine of a complex number.", "Cosinus d'un nombre complexe."), + ("Cosine of an angle in radians.", "Cosinus d'un angle en radians."), + ("Cotangent of a complex number.", "Cotangente d'un nombre complexe."), + ("Cotangent of an angle in radians.", "Cotangente d'un angle en radians."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Compte les jours entre deux dates sur une année de 360 jours (US ou méthode européenne).", + ), + ("Counts empty cells and empty text in a range.", "Compte les cellules vides de la feuille de calcul et le texte vide dans une plage."), + ( + "Counts how many values fall into each bin, as a vertical array.", + "Compte le nombre de valeurs contenues dans chaque compartiment, sous forme de tableau vertical.", + ), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Compte les cellules non vides d'une feuille de calcul dans un champ des enregistrements correspondants (ou des enregistrements correspondants).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Compte les cellules numériques de la feuille de calcul dans un champ des enregistrements correspondants (ou des enregistrements correspondants).", + ), + ("Counts the cells that meet a condition.", "Compte les cellules de la feuille de calcul qui remplissent une condition."), + ("Counts the cells that meet every condition.", "Compte les cellules de la feuille de calcul qui remplissent toutes les conditions."), + ("Counts the characters in a text.", "Compte les caractères d'un texte."), + ("Counts the columns in an array or range.", "Compte les colonnes d'un tableau ou d'une plage."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Compte les éléments d'un ensemble de cubes (aucune connexion de cube ; #N/A)."), + ("Counts the non-empty values.", "Compte les valeurs non vides."), + ("Counts the numbers.", "Compte les nombres."), + ("Counts the rows in an array or range.", "Compte les lignes d'un tableau ou d'une plage."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Compte les années entières, les mois ou les jours entre deux dates. unité : Y, M, D, MD, YM ou YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Compte les jours ouvrés (du lundi au vendredi) entre deux dates, hors jours fériés.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Compte les jours ouvrés entre deux dates avec un week-end personnalisé, hors jours fériés.", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "Crée un lien ; la cellule affiche le nom convivial ou le lien lui-même.", + ), + ("Creates a reusable custom function.", "Crée une fonction personnalisée réutilisable."), + ("Cumulative beta probability.", "Probabilité bêta cumulée."), + ("Cumulative lognormal probability.", "Probabilité lognormale cumulative."), + ("Cuts off the fractional part of a number at the given digits.", "Tronque un nombre au nombre de chiffres indiqué."), + ("Days from settlement to the next coupon date.", "Jours entre le règlement et la prochaine date de paiement des intérêts."), + ("Days from the start of the coupon period to settlement.", "Jours entre le début de la période de paiement des intérêts et le règlement."), + ("Days in the coupon period that contains settlement.", "Jours de la période de paiement des intérêts qui contient le règlement."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Amortissement dégressif sur n'importe quelle période, passant à l'amortissement linéaire.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Définit un ensemble de membres de cube (aucune connexion de cube ; #N/A)."), + ("Determinant of a square matrix.", "Déterminant d'une matrice carrée."), + ("Difference of two complex numbers.", "Différence de deux nombres complexes."), + ("Discount rate of a security.", "Taux d'escompte d'un titre."), + ("Double factorial of a number.", "Factorielle double d'un nombre."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Amortissement doublement dégressif (ou autre facteur) pour une période.", + ), + ( + "Effective annual rate from a nominal rate and compounding periods.", + "Taux annuel effectif à partir d'un taux nominal et du nombre de périodes de capitalisation.", + ), + ("Equivalent interest rate for the growth of an investment.", "Taux d'intérêt équivalent pour la croissance d'un investissement."), + ("Error function integrated from 0 to a limit, or between two limits.", "Fonction erreur intégrée de 0 à une limite, ou entre deux limites."), + ("Error function integrated from 0 to x.", "Fonction erreur intégrée de 0 à x."), + ("Excess kurtosis of a sample.", "Excès d'aplatissement d'un échantillon."), + ( + "Exponential curve coefficients and optional regression statistics.", + "Coefficients de courbe exponentielle et statistiques de régression facultatives.", + ), + ("Exponential distribution density or probability.", "Densité ou probabilité de distribution exponentielle."), + ("Exponential of a complex number.", "Exponentielle d'un nombre complexe."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Extrait les données de XML avec un XPath (non disponible ; renvoie #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Extrait la première correspondance, toutes les correspondances ou les groupes de capture d'une expression régulière.", + ), + ("F distribution density or left-tailed probability.", "Densité de la loi F ou probabilité cumulée à gauche."), + ("Factorial of a number.", "Factorielle d'un nombre."), + ( + "Fetches data from a web service (not available; returns #VALUE!).", + "Récupère les données d'un service Web (non disponible ; renvoie #VALUE!).", + ), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Recherche une valeur dans la première colonne d'un tableau et renvoie la valeur dans la même ligne d'une autre colonne.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Recherche une valeur dans la première ligne d'un tableau et renvoie la valeur dans la même colonne d'une autre ligne.", + ), + ("Finds the position of one text in another (case-sensitive).", "Recherche la position d'un texte dans un autre (sensible à la casse)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Recherche la position d'un texte dans un autre, en ignorant la casse et en autorisant les caractères génériques.", + ), + ("Fisher transformation.", "Transformation de Fisher."), + ("Fixed-declining-balance depreciation for a period.", "Amortissement fixe dégressif pour une période."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Aplatit un tableau en une seule colonne, en sautant éventuellement les blancs ou les erreurs.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Aplatit un tableau en une seule ligne, en sautant éventuellement les blancs ou les erreurs.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Prédit une valeur par lissage exponentiel additif (AAA)."), + ("Formats a number as currency text, like DOLLAR.", "Formate un nombre sous forme de texte monétaire, comme DOLLAR."), + ("Formats a number as currency text.", "Formate un nombre sous forme de texte monétaire."), + ("Formats a number as text.", "Formate un nombre sous forme de texte."), + ( + "French degressive depreciation with a life-based coefficient.", + "Amortissement dégressif français avec un coefficient lié à la durée de vie utile.", + ), + ("French linear depreciation prorated for the first period.", "Amortissement linéaire français au prorata de la première période."), + ("Future value of a principal after a series of compound rates.", "Valeur future d'un capital après application d'une série de taux composés."), + ("Future value of an investment with constant payments and rate.", "Valeur future d'un investissement à paiements et taux constants."), + ("Gamma distribution density or probability.", "Densité ou probabilité de distribution gamma."), + ("Geometric mean of positive numbers.", "Moyenne géométrique des nombres positifs."), + ("Greatest common divisor of integers.", "Plus grand diviseur commun d'entiers."), + ( + "Groups rows by key fields and aggregates the values of each group.", + "Regroupe les lignes par champs clés et agrège les valeurs de chaque groupe.", + ), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Agrandit un tableau jusqu'à la taille donnée, en remplissant les nouvelles cellules de la feuille de calcul avec une valeur de remplissage.", + ), + ( + "Half-width of the confidence interval around a FORECAST.ETS value.", + "Demi-largeur de l'intervalle de confiance autour d'une valeur FORECAST.ETS.", + ), + ("Harmonic mean of positive numbers.", "Moyenne harmonique des nombres positifs."), + ("Hyperbolic cosecant of a complex number.", "Cosécante hyperbolique d'un nombre complexe."), + ("Hyperbolic cosecant.", "Cosécante hyperbolique."), + ("Hyperbolic cosine of a complex number.", "Cosinus hyperbolique d'un nombre complexe."), + ("Hyperbolic cosine.", "Cosinus hyperbolique."), + ("Hyperbolic cotangent.", "Cotangente hyperbolique."), + ("Hyperbolic secant of a complex number.", "Sécante hyperbolique d'un nombre complexe."), + ("Hyperbolic secant.", "Sécante hyperbolique."), + ("Hyperbolic sine of a complex number.", "Sinus hyperbolique d'un nombre complexe."), + ("Hyperbolic sine.", "Sinus hyperbolique."), + ("Hyperbolic tangent.", "Tangente hyperbolique."), + ("Hypergeometric probability of an exact count.", "Probabilité hypergéométrique d'un décompte exact."), + ("Hypergeometric probability.", "Probabilité hypergéométrique."), + ("Identity matrix of the given size.", "Matrice d'identité de la taille donnée."), + ("Imaginary coefficient of a complex number.", "Coefficient imaginaire d'un nombre complexe."), + ("Information about a cell.", "Informations sur une cellule."), + ("Integer part of a division.", "Partie entière d'une division."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Intérêts payés au cours d'une période de prêt avec remboursement égal du principal.", + ), + ("Interest part of a given period's payment.", "Part des intérêts dans le paiement d'une période donnée."), + ("Interest rate of a fully invested security.", "Taux d'intérêt d’un titre entièrement libéré."), + ("Interest rate per period of an annuity, found iteratively.", "Taux d'intérêt par période de rente, trouvé de manière itérative."), + ("Internal rate of return of cash flows on specific dates.", "Taux de rendement interne des flux de trésorerie à des dates précises."), + ("Internal rate of return of periodic cash flows.", "Taux de rendement interne des flux de trésorerie périodiques."), + ("Inverse hyperbolic cosine.", "Cosinus hyperbolique inverse."), + ("Inverse hyperbolic cotangent.", "Cotangente hyperbolique inverse."), + ("Inverse hyperbolic sine.", "Sinus hyperbolique inverse."), + ("Inverse hyperbolic tangent.", "Tangente hyperbolique inverse."), + ("Inverse of a square matrix.", "Inverse d'une matrice carrée."), + ("Inverse of the Fisher transformation.", "Inverse de la transformation de Fisher."), + ("Inverse of the cumulative beta distribution.", "Inverse de la distribution bêta cumulée."), + ("Inverse of the cumulative lognormal distribution.", "Inverse de la distribution lognormale cumulative."), + ("Inverse of the gamma cumulative distribution.", "Inverse de la distribution cumulative gamma."), + ("Inverse of the left-tailed F distribution.", "Inverse de la loi F pour la probabilité cumulée à gauche."), + ("Inverse of the left-tailed chi-squared distribution.", "Inverse de la loi du chi carré pour la probabilité cumulée à gauche."), + ("Inverse of the normal cumulative distribution.", "Inverse de la distribution cumulative normale."), + ("Inverse of the right-tailed F distribution.", "Inverse de la loi F pour la probabilité à droite."), + ("Inverse of the right-tailed chi-squared distribution.", "Inverse de la loi du chi carré pour la probabilité à droite."), + ("Inverse of the standard normal cumulative distribution.", "Inverse de la distribution cumulative normale standard."), + ("Joins several text values into one.", "Joint plusieurs valeurs de texte en une seule."), + ( + "Joins text from values and every cell of ranges, without a separator.", + "Joint le texte des valeurs et de chaque cellule des plages, sans séparateur.", + ), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Joint le texte des valeurs et des plages avec un délimiteur, en ignorant éventuellement les éléments vides.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Conserve les lignes ou les colonnes du début (ou de la fin) d'un tableau."), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Conserve les lignes ou les colonnes d'un tableau dont l'indicateur d'inclusion est VRAI.", + ), + ("Largest number (0 when there are none).", "Le plus grand nombre (0 lorsqu'il n'y en a pas)."), + ("Largest number in a field of the matching records.", "Le plus grand nombre dans un champ des enregistrements correspondants."), + ( + "Largest value among cells that meet every condition.", + "Valeur la plus élevée parmi les cellules de la feuille de calcul qui remplissent toutes les conditions.", + ), + ("Largest value counting text as 0 and logicals as 1/0.", "Plus grande valeur en comptant le texte comme 0 et les valeurs logiques comme 1/0."), + ("Least common multiple of integers.", "Plus petit commun multiple d'entiers."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Coefficients de la droite des moindres carrés et statistiques de régression facultatives.", + ), + ("Left-tailed inverse of Student's t distribution.", "Inverse de la loi t de Student pour la probabilité cumulée à gauche."), + ("Length of the repeating pattern detected in a time series.", "Longueur du motif répétitif détecté dans une série temporelle."), + ("Logarithm to the given base (10 by default).", "Logarithme à la base donnée (10 par défaut)."), + ("Lognormal density or probability.", "Densité ou probabilité lognormale."), + ("Macaulay duration of a security with periodic interest.", "Duration de Macaulay d’un titre à intérêts périodiques."), + ("Matrix product of two arrays.", "Produit matriciel de deux tableaux."), + ("Mean after trimming a fraction of points from both ends.", "Moyenne après avoir coupé une fraction de points aux deux extrémités."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Moyenne en comptant le texte comme 0 et les valeurs logiques comme 1 ou 0."), + ("Middle value of the numbers.", "Valeur médiane des nombres."), + ("Modified Bessel function of the first kind, I_n(x).", "Fonction de Bessel modifiée du premier type, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Fonction de Bessel modifiée du deuxième type, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Duration modifiée d’un titre à intérêts périodiques."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Taux de rendement interne modifié utilisant des taux d'emprunt et de réinvestissement distincts.", + ), + ("Most frequently occurring number.", "Nombre le plus fréquent."), + ("Multiplies all the numbers in the arguments.", "Multiplie tous les nombres dans les arguments."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Multiplie les éléments correspondants de tableaux de tailles égales et ajoute les produits.", + ), + ("Multiplies the numbers in a field of the matching records.", "Multiplie les nombres dans un champ des enregistrements correspondants."), + ("Names intermediate results.", "Nomme les résultats intermédiaires."), + ("Natural log of the gamma function.", "Log naturel de la fonction gamma."), + ("Natural logarithm of a complex number.", "Logarithme népérien d'un nombre complexe."), + ("Natural logarithm.", "Logarithme népérien."), + ("Negative binomial probability.", "Probabilité binomiale négative."), + ("Net present value of cash flows on specific dates.", "Valeur actuelle nette des flux de trésorerie à des dates précises."), + ( + "Net present value of periodic cash flows at a discount rate.", + "Valeur actuelle nette des flux de trésorerie périodiques à un taux d'actualisation.", + ), + ("Next coupon date after settlement.", "Prochaine date de paiement des intérêts après le règlement."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Taux annuel nominal à partir d'un taux effectif et du nombre de périodes de capitalisation.", + ), + ("Normal distribution density or cumulative probability.", "Densité de distribution normale ou probabilité cumulée."), + ("Number of areas in a reference.", "Nombre de zones dans une référence."), + ("Number of combinations with repetition.", "Nombre de combinaisons avec répétition."), + ("Number of combinations without repetition.", "Nombre de combinaisons sans répétition."), + ("Number of coupons payable between settlement and maturity.", "Nombre de paiements d'intérêts dus entre le règlement et l'échéance."), + ("Number of ordered selections with repetition.", "Nombre de sélections ordonnées avec répétition."), + ("Number of ordered selections without repetition.", "Nombre de sélections ordonnées sans répétition."), + ("Number of periods needed to pay off or accumulate an amount.", "Nombre de périodes nécessaires pour rembourser ou accumuler un montant."), + ("Number of sheets.", "Nombre de feuilles."), + ("One- or two-tailed Student's t probability.", "Probabilité t de Student unilatérale ou bilatérale."), + ("One-tailed probability of a z-test.", "Probabilité unilatérale d'un test z."), + ("Pearson product-moment correlation coefficient.", "Coefficient de corrélation produit-moment de Pearson."), + ("Percent-encodes text for use in a URL.", "Encode en pourcentage le texte à utiliser dans un URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Paiement périodique pour un prêt ou une rente à versements et taux constants.", + ), + ("Periods needed for an investment to grow to a target value.", "Périodes nécessaires pour qu'un investissement atteigne une valeur cible."), + ("Picks a value from the list by its position.", "Sélectionne une valeur dans la liste en fonction de sa position."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Sélectionne les colonnes d'un tableau par position (les positions négatives sont comptées depuis la fin).", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Sélectionne les lignes d'un tableau par position (les positions négatives sont comptées depuis la fin).", + ), + ("Places arrays side by side.", "Place les tableaux côte à côte."), + ("Poisson probability.", "Probabilité de Poisson."), + ("Population covariance of paired values.", "Covariance de population de valeurs appariées."), + ("Population skewness.", "Asymétrie de la population."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Écart type de population en comptant le texte comme 0 et les logiques comme 1/0.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Écart type de population d'un champ sur les enregistrements correspondants.", + ), + ("Population standard deviation.", "Écart type de la population."), + ("Population variance counting text as 0 and logicals as 1/0.", "Variance de population en comptant le texte comme 0 et les logiques comme 1/0."), + ("Population variance of a field over the matching records.", "Variance de population d'un champ sur les enregistrements correspondants."), + ("Population variance.", "Variance de la population."), + ("Positive square root.", "Racine carrée positive."), + ("Predicts a value along a linear trend.", "Prédit une valeur le long d'une tendance linéaire."), + ("Present value of a series of equal future payments.", "Valeur actuelle d'une série de paiements futurs égaux."), + ("Previous coupon date on or before settlement.", "Date précédente de paiement des intérêts au plus tard au règlement."), + ("Price per 100 face value of a Treasury bill.", "Prix pour 100 de la valeur nominale d'un bon du Trésor."), + ("Price per 100 face value of a discounted security.", "Prix par tranche de 100 de la valeur nominale d’un titre à escompte."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Prix pour 100 de la valeur nominale d’un titre payant des intérêts à l'échéance.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Prix pour 100 de la valeur nominale d’un titre payant des intérêts périodiques.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "Prix pour 100 de valeur nominale d’un titre avec une première période d'intérêt irrégulière.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Prix pour 100 de valeur nominale d’un titre avec une dernière période d'intérêt irrégulière.", + ), + ("Principal part of a given period's payment.", "Part du capital dans le paiement d'une période donnée."), + ("Probability from Student's t-test.", "Probabilité d'après le test t de Student."), + ("Probability of a number of successes falling in a range.", "Probabilité d'un certain nombre de succès se situant dans une fourchette."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Probabilité qu'une valeur normale standard se situe entre la moyenne et z.", + ), + ("Probability that values fall between two limits.", "Probabilité que les valeurs se situent entre deux limites."), + ("Product of complex numbers.", "Produit de nombres complexes."), + ("Quartile (0–4) of a data set, inclusive method.", "Quartile (0–4) d'un ensemble de données, méthode inclusive."), + ("Quartile (0–4) of a data set.", "Quartile (0–4) d'un ensemble de données."), + ("Quartile (1–3) of a data set, exclusive method.", "Quartile (1–3) d'un ensemble de données, méthode exclusive."), + ("Quotient of two complex numbers.", "Quotient de deux nombres complexes."), + ("Raises a complex number to a power.", "Élève un nombre complexe en puissance."), + ("Raises a number to a power.", "Élève un nombre à une puissance."), + ("Rank of a number within a list.", "Rang d'un nombre dans une liste."), + ("Rank of a number within a list; ties get the average rank.", "Rang d'un nombre dans une liste ; les valeurs ex æquo obtiennent le rang moyen."), + ("Rank of a number within a list; ties share the top rank.", "Rang d'un nombre dans une liste ; les valeurs ex æquo partagent le meilleur rang."), + ("Ratio of the factorial of a sum to the product of factorials.", "Rapport de la factorielle d'une somme au produit des factorielles."), + ("Reads text in a given base as a number.", "Lit le texte dans une base donnée sous forme de nombre."), + ("Real coefficient of a complex number.", "Coefficient réel d'un nombre complexe."), + ("Relative standing of a value as a fraction of the data set.", "Position relative d'une valeur en tant que fraction de l'ensemble de données."), + ("Relative standing of a value from 0 to 1 inclusive.", "Position relative d'une valeur de 0 à 1 inclus."), + ("Relative standing of a value strictly between 0 and 1.", "Position relative d'une valeur strictement comprise entre 0 et 1."), + ("Remainder of a division, with the sign of the divisor.", "Reste d'une division, avec le signe du diviseur."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Supprime les espaces de début et de fin et réduit les séries d'espaces en un seul.", + ), + ("Removes non-printable control characters from text.", "Supprime les caractères de contrôle non imprimables du texte."), + ("Removes rows or columns from the start (or end) of an array.", "Supprime les lignes ou les colonnes du début (ou de la fin) d'un tableau."), + ("Repeats a text a given number of times.", "Répète un texte un nombre de fois donné."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Remplace les correspondances d'une expression régulière, toutes ou une occurrence choisie.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Remplace les occurrences d'un texte par un autre, éventuellement uniquement par une occurrence donnée.", + ), + ("Replaces part of a text by position.", "Remplace une partie d'un texte par position."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Renvoie 1 lorsqu'un nombre est au moins le pas, sinon 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Renvoie 1 lorsque deux nombres sont égaux, sinon 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Renvoie un code pour le type de valeur : 1 nombre, 2 texte, 4 logique, 16 erreur, 64 tableau.", + ), + ( + "Returns a fallback when the value is #N/A, otherwise the value.", + "Renvoie une solution de secours lorsque la valeur est #N/A, sinon la valeur.", + ), + ( + "Returns a fallback when the value is an error, otherwise the value.", + "Renvoie une solution de secours lorsque la valeur est une erreur, sinon la valeur.", + ), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Renvoie une propriété d'indicateur de performances clé à partir d'un cube (aucune connexion de cube ; #N/A).", + ), + ( + "Returns a member or tuple from a cube (no cube connections; #N/A).", + "Renvoie un membre ou un tuple d'un cube (aucune connexion de cube ; #N/A).", + ), + ( + "Returns a property of a cube member (no cube connections; #N/A).", + "Renvoie une propriété d'un membre de cube (aucune connexion de cube ; #N/A).", + ), + ( + "Returns an aggregated value from a cube (no cube connections; #N/A).", + "Renvoie une valeur agrégée à partir d'un cube (aucune connexion de cube ; #N/A).", + ), + ("Returns characters from the middle of a text.", "Renvoie les caractères du milieu d'un texte."), + ("Returns information about the operating environment.", "Renvoie des informations sur l'environnement d'exploitation."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Renvoie une valeur lorsqu'une condition est VRAI et une autre lorsqu'elle est FAUX.", + ), + ("Returns the #N/A error value.", "Renvoie la valeur d'erreur #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Renvoie la position de base 1 d'une valeur dans une ligne ou une colonne."), + ("Returns the ISO 8601 week number of a date.", "Renvoie le numéro de semaine ISO 8601 d'une date."), + ("Returns the Unicode code point of the first character of a text.", "Renvoie le point de code Unicode du premier caractère d'un texte."), + ("Returns the Windows-1252 code of the first character of a text.", "Renvoie le code Windows-1252 du premier caractère d'un texte."), + ("Returns the character for a Unicode code point.", "Renvoie le caractère d'un point de code Unicode."), + ("Returns the character for a code from the Windows-1252 character set.", "Renvoie le caractère d'un code du jeu de caractères Windows-1252."), + ("Returns the current date and time.", "Renvoie la date et l'heure actuelles."), + ("Returns the current date.", "Renvoie la date actuelle."), + ("Returns the date a number of months before or after a date.", "Renvoie la date plusieurs mois avant ou après une date."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Renvoie la date située un certain nombre de jours ouvrés avant ou après une date, avec un week-end personnalisé.", + ), + ( + "Returns the date a number of working days before or after a date.", + "Renvoie la date un certain nombre de jours ouvrables avant ou après une date.", + ), + ("Returns the day of the month of a date.", "Renvoie le jour du mois d'une date."), + ("Returns the day of the week of a date as a number.", "Renvoie le jour de la semaine d'une date sous forme de nombre."), + ("Returns the distinct rows or columns of an array.", "Renvoie les lignes ou colonnes distinctes d'un tableau."), + ( + "Returns the element, row or column of an array at the given position.", + "Renvoie l'élément, la ligne ou la colonne d'un tableau à la position donnée.", + ), + ( + "Returns the field value of the single record that meets the criteria.", + "Renvoie la valeur du champ de l'enregistrement unique qui répond aux critères.", + ), + ("Returns the first characters of a text.", "Renvoie les premiers caractères d'un texte."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Renvoie la fraction d'année entre deux dates selon une convention de décompte des jours.", + ), + ("Returns the hour (0-23) of a time.", "Renvoie l'heure (0-23) d'une heure."), + ("Returns the last characters of a text.", "Renvoie les derniers caractères d'un texte."), + ( + "Returns the last day of the month a number of months away.", + "Renvoie le dernier jour du mois situé un certain nombre de mois avant ou après une date.", + ), + ("Returns the logical value FALSE.", "Renvoie la valeur logique FAUX."), + ("Returns the logical value TRUE.", "Renvoie la valeur logique VRAI."), + ("Returns the minute (0-59) of a time.", "Renvoie la minute (0-59) d'une heure."), + ("Returns the month (1-12) of a date.", "Renvoie le mois (1-12) d'une date."), + ( + "Returns the nth member of a cube set (no cube connections; #N/A).", + "Renvoie le nième membre d'un ensemble de cubes (aucune connexion de cube ; #N/A).", + ), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Renvoie le numéro identifiant une valeur d'erreur, ou #N/A s'il ne s'agit pas d'une erreur.", + ), + ("Returns the number of days between two dates.", "Renvoie le nombre de jours entre deux dates."), + ("Returns the phonetic (furigana) text; here the text itself.", "Renvoie le texte phonétique (furigana) ; ici le texte lui-même."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Renvoie la position d'une valeur dans une ligne ou une colonne avec des modes de correspondance et de recherche flexibles.", + ), + ("Returns the second (0-59) of a time.", "Renvoie la seconde (0-59) d'une heure."), + ("Returns the text that comes after a delimiter.", "Renvoie le texte qui vient après un délimiteur."), + ("Returns the text that comes before a delimiter.", "Renvoie le texte qui précède un délimiteur."), + ("Returns the value if it is text, otherwise empty text.", "Renvoie la valeur s'il s'agit de texte, sinon de texte vide."), + ("Returns the value paired with the first condition that is TRUE.", "Renvoie la valeur associée à la première condition qui est VRAI."), + ("Returns the week number of a date within its year.", "Renvoie le numéro de semaine d'une date dans son année."), + ("Returns the year of a date.", "Renvoie l'année d'une date."), + ("Reverses a logical value.", "Inverse une valeur logique."), + ("Right-tailed F probability.", "Probabilité de la loi F à droite."), + ("Right-tailed Student's t probability.", "Probabilité de la loi t de Student à droite."), + ("Right-tailed chi-squared probability.", "Probabilité de la loi du chi carré à droite."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Arrondit un nombre et le formate sous forme de texte avec des décimales fixes et des séparateurs de milliers facultatifs.", + ), + ("Rounds a number away from zero to a given number of digits.", "Arrondit un nombre en s'éloignant de zéro au nombre de chiffres indiqué."), + ("Rounds a number down to a multiple of significance.", "Arrondit un nombre vers le bas à un multiple du pas indiqué."), + ("Rounds a number down to the nearest integer or multiple.", "Arrondit un nombre vers le bas à l'entier ou au multiple le plus proche."), + ("Rounds a number down to the nearest integer.", "Arrondit un nombre à l'entier inférieur le plus proche."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Arrondit un nombre au nombre de chiffres indiqué ; les valeurs exactement à mi-chemin sont arrondies en s’éloignant de zéro.", + ), + ("Rounds a number to the nearest multiple.", "Arrondit un nombre au multiple le plus proche."), + ("Rounds a number toward negative infinity to a multiple.", "Arrondit un nombre vers l'infini négatif à un multiple."), + ("Rounds a number toward positive infinity to a multiple.", "Arrondit un nombre vers l'infini positif à un multiple."), + ("Rounds a number toward zero to a given number of digits.", "Arrondit un nombre vers zéro à un nombre de chiffres donné."), + ("Rounds a number up to a multiple of significance.", "Arrondit un nombre vers le haut à un multiple du pas indiqué."), + ("Rounds a number up to the nearest integer or multiple.", "Arrondit un nombre vers le haut à l'entier ou au multiple le plus proche."), + ("Rounds away from zero to the nearest even integer.", "Arrondit en s'éloignant de zéro à l'entier pair le plus proche."), + ("Rounds away from zero to the nearest odd integer.", "Arrondit en s'éloignant de zéro à l'entier impair le plus proche."), + ("Row number of a reference.", "Numéro de ligne d'une référence."), + ("Running accumulation of an array.", "Accumulation progressive des valeurs d'un tableau."), + ("Sample covariance of paired values.", "Covariance d'échantillon de valeurs appariées."), + ("Sample skewness.", "Asymétrie d'un échantillon."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Écart type d'échantillon en comptant le texte comme 0 et les valeurs logiques comme 1/0.", + ), + ( + "Sample standard deviation of a field over the matching records.", + "Écart type d'échantillon d'un champ sur les enregistrements correspondants.", + ), + ("Sample standard deviation.", "Écart type d'échantillon."), + ( + "Sample variance counting text as 0 and logicals as 1/0.", + "Variance d'échantillon en comptant le texte comme 0 et les valeurs logiques comme 1/0.", + ), + ("Sample variance of a field over the matching records.", "Variance d'échantillon d'un champ sur les enregistrements correspondants."), + ("Sample variance.", "Variance d'échantillon."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Recherche dans une ligne ou une colonne et renvoie l’élément, la ligne ou la colonne correspondante d’un autre tableau.", + ), + ("Secant of a complex number.", "Sécante d'un nombre complexe."), + ("Secant of an angle in radians.", "Sécante d'un angle en radians."), + ("Sheet number.", "Numéro de feuille."), + ( + "Shifts the bits of a number left (right for negative shifts).", + "Décale les bits d'un nombre vers la gauche (vers la droite pour les décalages négatifs).", + ), + ( + "Shifts the bits of a number right (left for negative shifts).", + "Décale les bits d'un nombre vers la droite (vers la gauche pour les décalages négatifs).", + ), + ("Sine of a complex number.", "Sinus d'un nombre complexe."), + ("Sine of an angle in radians.", "Sinus d'un angle en radians."), + ("Slope of the least-squares regression line.", "Pente de la droite de régression des moindres carrés."), + ("Smallest number (0 when there are none).", "Plus petit nombre (0 lorsqu'il n'y en a pas)."), + ("Smallest number in a field of the matching records.", "Plus petit nombre dans un champ des enregistrements correspondants."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Plus petit nombre de réussites dont la probabilité binomiale cumulée atteint alpha.", + ), + ( + "Smallest value among cells that meet every condition.", + "Plus petite valeur parmi les cellules de la feuille de calcul qui remplissent toutes les conditions.", + ), + ("Smallest value counting text as 0 and logicals as 1/0.", "Plus petite valeur en comptant le texte comme 0 et les valeurs logiques comme 1/0."), + ( + "Sorts an array by the values of other arrays of matching size.", + "Trie un tableau en fonction des valeurs d'autres tableaux de taille correspondante.", + ), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Trie les lignes (ou colonnes) d'un tableau selon une ou plusieurs de ses colonnes.", + ), + ("Spells out a number in Thai words with Baht.", "Épelle un nombre en mots thaïlandais avec Baht."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Divise le texte en une grille de colonnes et de lignes selon les délimiteurs donnés.", + ), + ("Square of the correlation coefficient.", "Carré du coefficient de corrélation."), + ("Square root of a complex number.", "Racine carrée d'un nombre complexe."), + ("Square root of the number times pi.", "Racine carrée du nombre multiplié par pi."), + ("Stacks arrays on top of each other.", "Empile les tableaux les uns sur les autres."), + ("Standard error of predicted y values in a regression.", "Erreur type des valeurs y prévues dans une régression."), + ("Standard normal cumulative probability.", "Probabilité cumulative normale standard."), + ("Standard normal density or cumulative probability.", "Densité normale standard ou probabilité cumulée."), + ("Standard normal density.", "Densité normale standard."), + ("Straight-line depreciation for one period.", "Amortissement linéaire sur une période."), + ("Student's t density or left-tailed probability.", "Densité de la loi t de Student ou probabilité cumulée à gauche."), + ("Sum of a power series.", "Somme d'une série entière."), + ("Sum of complex numbers.", "Somme de nombres complexes."), + ("Sum of squared deviations from the mean.", "Somme des carrés des écarts par rapport à la moyenne."), + ("Sum-of-years'-digits depreciation for a period.", "Amortissement selon la somme des chiffres des années pour une période."), + ("Sums the differences of squares of matching elements.", "Additionne les différences des carrés des éléments correspondants."), + ("Sums the squared differences of matching elements.", "Additionne les carrés des différences des éléments correspondants."), + ("Sums the sums of squares of matching elements.", "Additionne les sommes des carrés des éléments correspondants."), + ("Swaps the rows and columns of an array.", "Échange les lignes et les colonnes d'un tableau."), + ("TRUE for references.", "VRAI pour les références."), + ("TRUE when a LAMBDA argument was left out.", "VRAI lorsqu'un argument LAMBDA a été omis."), + ("TRUE when a regular expression matches somewhere in the text.", "VRAI lorsqu'une expression régulière correspond quelque part dans le texte."), + ("TRUE when an odd number of arguments are TRUE.", "VRAI lorsqu'un nombre impair d'arguments est VRAI."), + ("TRUE when at least one argument is TRUE.", "VRAI lorsqu'au moins un argument est VRAI."), + ("TRUE when every argument is TRUE.", "VRAI lorsque chaque argument est VRAI."), + ("TRUE when the cell has a formula.", "VRAI lorsque la cellule contient une formule."), + ("TRUE when the integer part of a number is even.", "VRAI lorsque la partie entière d'un nombre est paire."), + ("TRUE when the integer part of a number is odd.", "VRAI lorsque la partie entière d'un nombre est impaire."), + ("TRUE when the value is TRUE or FALSE.", "VRAI lorsque la valeur est VRAI ou FAUX."), + ("TRUE when the value is a number.", "VRAI lorsque la valeur est un nombre."), + ("TRUE when the value is any error other than #N/A.", "VRAI lorsque la valeur est une erreur autre que #N/A."), + ("TRUE when the value is any error.", "VRAI lorsque la valeur correspond à une erreur."), + ("TRUE when the value is anything other than text.", "VRAI lorsque la valeur est autre chose que du texte."), + ("TRUE when the value is text.", "VRAI lorsque la valeur est du texte."), + ("TRUE when the value is the #N/A error.", "VRAI lorsque la valeur est l'erreur #N/A."), + ("TRUE when the value refers to an empty cell.", "VRAI lorsque la valeur fait référence à une cellule vide."), + ("TRUE when two texts are identical, including case.", "VRAI lorsque deux textes sont identiques, casse comprise."), + ("Tangent of a complex number.", "Tangente d'un nombre complexe."), + ("Tangent of an angle in radians.", "Tangente d'un angle en radians."), + ("The constant pi to 15 digits.", "La constante pi à 15 chiffres."), + ("The formula of a cell as text.", "La formule d'une cellule sous forme de texte."), + ("The gamma function.", "La fonction gamma."), + ("The k-th largest number in a data set.", "Le k-ième plus grand nombre dans un ensemble de données."), + ("The k-th smallest number in a data set.", "Le k-ème plus petit nombre dans un ensemble de données."), + ("The reference named by a text string.", "La référence nommée par une chaîne de texte."), + ( + "The sum of a subset as a fraction of the sum of all the values.", + "Somme d'un sous-ensemble sous forme de fraction de la somme de toutes les valeurs.", + ), + ("Total interest paid between two periods.", "Intérêts totaux payés entre deux périodes."), + ("Total principal repaid between two periods.", "Capital total remboursé entre deux périodes."), + ("Two-tailed Student's t probability.", "Probabilité t bilatérale de Student."), + ("Two-tailed inverse of Student's t distribution.", "Inverse bilatérale de la distribution t de Student."), + ("Two-tailed p-value of an F-test for equality of variances.", "Valeur p bilatérale d’un test F d’égalité des variances."), + ("Values along a fitted exponential growth curve.", "Valeurs le long d'une courbe de croissance exponentielle ajustée."), + ("Values along a least-squares linear fit.", "Valeurs selon un ajustement linéaire par les moindres carrés."), + ("Vertical array of all the most frequent numbers.", "Tableau vertical de tous les nombres les plus fréquents."), + ("Weibull density or probability.", "Densité ou probabilité de Weibull."), + ("Writes a number in another base, padded with zeros.", "Écrit un nombre dans une autre base, complété par des zéros."), + ("Y-intercept of the least-squares regression line.", "Ordonnée à l'origine de la droite de régression des moindres carrés."), + ("Yield of a Treasury bill.", "Rendement d'un bon du Trésor."), + ("Yield of a security paying periodic interest.", "Rendement d’un titre payant des intérêts périodiques."), + ("Yield of a security with an odd first period.", "Rendement d’un titre avec une première période d'intérêt irrégulière."), + ("Yield of a security with an odd last period.", "Rendement d’un titre avec une dernière période d'intérêt irrégulière."), + ("Z-score of a value.", "Score Z d'une valeur."), + ("e raised to the given power.", "e élevé à la puissance donnée."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-ème centile, k de 0 à 1 inclus."), + ("k-th percentile, k strictly between 0 and 1.", "k-ème percentile, k strictement compris entre 0 et 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "type_de_référence"), + ("actual_range", "plage_réelle"), + ("aggregation", "agrégation"), + ("alpha", "alpha"), + ("angle", "angle"), + ("area_num", "numéro_de_zone"), + ("argument", "argument"), + ("array", "tableau"), + ("array_x", "tableau_de_valeurs_x"), + ("array_y", "tableau_de_valeurs_y"), + ("average_range", "plage_à_moyenner"), + ("base", "base"), + ("basis", "base_de_décompte_des_jours"), + ("beta", "bêta"), + ("bins_array", "tableau_des_limites_des_groupes"), + ("bottom", "limite_inférieure"), + ("by_array", "tableau_de_clés_de_tri"), + ("by_col", "par_col"), + ("calc_method", "méthode_de_calcul"), + ("calculation", "calcul"), + ("caption", "légende"), + ("case_sensitivity", "sensibilité_à_la_casse"), + ("coefficients", "coefficients"), + ("col_delimiter", "délimiteur_de_col"), + ("col_fields", "champs_de_colonne"), + ("col_index_num", "index_de_colonne"), + ("col_num", "numéro_de_colonne"), + ("col_sort_order", "ordre_de_tri_des_colonnes"), + ("col_total_depth", "profondeur_totale_de_la_colonne"), + ("cols", "nombre_de_colonnes"), + ("column_num", "numéro_de_colonne"), + ("columns", "nombre_de_colonnes"), + ("confidence_level", "niveau_de_confiance"), + ("connection", "connexion_de_données"), + ("const", "constante"), + ("cost", "coût_initial"), + ("coupon", "taux_du_coupon"), + ("criteria", "critères"), + ("criteria_range", "plage_de_critères"), + ("cumulative", "distribution_cumulée"), + ("data_all", "données_toutes"), + ("data_array", "tableau_de_données"), + ("data_completion", "complétion_des_données"), + ("data_subset", "sous_ensemble_de_données"), + ("database", "base_de_données"), + ("date", "date"), + ("date_purchased", "date_d_achat"), + ("date_text", "date_écrite_sous_forme_de_texte"), + ("dates", "dates"), + ("day", "jour"), + ("days", "jours"), + ("decimal_dollar", "prix_décimal"), + ("decimal_separator", "séparateur_décimal"), + ("decimals", "décimales"), + ("default_or_value", "valeur_ou_valeur_par_défaut"), + ("deg_freedom", "degrés_de_liberté"), + ("delimiter", "délimiteur"), + ("denominator", "dénominateur"), + ("dimension", "dimension"), + ("discount", "taux_d_escompte"), + ("divisor", "diviseur"), + ("effect_rate", "taux_effectif"), + ("end_date", "date_de_fin"), + ("end_period", "dernière_période"), + ("error_val", "valeur_d_erreur"), + ("exactly_once", "exactement_une_fois"), + ("expected_range", "plage_attendue"), + ("expression", "expression"), + ("factor", "facteur"), + ("field", "champ_de_base_de_données"), + ("field_headers", "en_têtes_de_champ"), + ("field_relationship", "relation_entre_les_champs"), + ("filter_array", "tableau_de_filtres"), + ("finance_rate", "taux_d_intérêt_de_financement"), + ("find_text", "texte_à_rechercher"), + ("first_coupon", "date_de_paiement_du_premier_coupon"), + ("first_interest", "première_date_de_paiement_des_intérêts"), + ("first_period", "date_de_fin_de_la_première_période"), + ("form", "forme"), + ("format", "format"), + ("format_text", "format_du_texte"), + ("fraction", "fraction"), + ("fractional_dollar", "prix_fractionnaire"), + ("frequency", "fréquence_de_paiement_des_coupons"), + ("friendly_name", "nom_convivial"), + ("from_unit", "unité_de_mesure_source"), + ("full_precision", "précision_totale"), + ("function", "fonction"), + ("function_num", "numéro_de_fonction"), + ("fv", "valeur_future"), + ("group_separator", "séparateur_de_groupe"), + ("guess", "estimation_initiale"), + ("height", "hauteur"), + ("holidays", "jours_fériés"), + ("hour", "heure"), + ("i_num", "coefficient_imaginaire"), + ("if_empty", "si_vide"), + ("if_not_found", "si_non_trouvé"), + ("ignore", "ignorer"), + ("ignore_empty", "ignorer_le_vide"), + ("include", "inclure"), + ("index_num", "numéro_d_index"), + ("info_type", "type_d_informations"), + ("initial_value", "valeur_initiale"), + ("instance_num", "numéro_d_occurrence"), + ("inumber", "nombre_complexe"), + ("investment", "investissement"), + ("issue", "date_émission_du_titre"), + ("k", "k"), + ("known_xs", "valeurs_x_connues"), + ("known_ys", "valeurs_y_connues"), + ("kpi_name", "nom_de_l_indicateur_clé_de_performance"), + ("kpi_property", "propriété_d_indicateur_de_performance_clé"), + ("lambda", "lambda"), + ("last_interest", "date_du_dernier_paiement_des_intérêts"), + ("life", "durée_de_vie_utile"), + ("link_location", "emplacement_du_lien"), + ("logical", "valeur_logique"), + ("logical_test", "condition_logique"), + ("lookup_array", "tableau_recherche"), + ("lookup_value", "valeur_cherchée"), + ("lookup_vector", "vecteur_de_recherche"), + ("lower_limit", "limite_inférieure"), + ("m", "m"), + ("match_end", "assimiler_la_fin_du_texte_à_un_délimiteur"), + ("match_mode", "mode_correspondance"), + ("match_type", "méthode_de_correspondance"), + ("maturity", "date_échéance"), + ("max", "maximum"), + ("max_range", "plage_de_valeurs_maximale"), + ("mean", "moyenne_arithmétique"), + ("member_expression", "expression_de_membre_de_cube"), + ("method", "méthode"), + ("min", "minimum"), + ("min_length", "longueur_minimale"), + ("min_range", "plage_de_valeurs_minimale"), + ("minute", "minute"), + ("mode", "mode_de_calcul"), + ("month", "mois"), + ("months", "mois"), + ("multiple", "multiple"), + ("n", "n"), + ("name", "nom"), + ("new_text", "nouveau_texte"), + ("new_xs", "nouvelles_valeurs_x"), + ("no_commas", "omettre_les_séparateurs_de_groupes_de_chiffres"), + ("no_switch", "ne_pas_changer_de_méthode_d_amortissement"), + ("nominal_rate", "taux_nominal"), + ("nper", "nombre_de_périodes"), + ("npery", "périodes_par_an"), + ("num_bytes", "nombre_d_octets"), + ("num_chars", "nombre_de_caractères"), + ("num_digits", "nombre_de_chiffres"), + ("number", "nombre"), + ("number_chosen", "nombre_d_éléments_choisis"), + ("number_f", "nombre_d_échecs"), + ("number_pop", "taille_de_la_population"), + ("number_s", "nombre_de_réussites"), + ("number_sample", "taille_de_l_échantillon"), + ("number_times", "nombre_de_répétitions"), + ("numerator", "numérateur"), + ("occurrence", "occurrence"), + ("old_text", "ancien_texte"), + ("options", "options"), + ("order", "ordre"), + ("pad_with", "valeur_de_remplissage"), + ("par", "valeur_nominale"), + ("parameter", "paramètre"), + ("pattern", "modèle_d_expression_régulière"), + ("per", "période"), + ("percent", "pour_cent"), + ("period", "période"), + ("places", "nombre_de_chiffres_de_sortie"), + ("pmt", "paiement"), + ("population_s", "nombre_de_succès_dans_la_population"), + ("power", "puissance"), + ("pr", "prix"), + ("principal", "capital"), + ("prob_range", "plage_de_probabilité"), + ("probability", "probabilité"), + ("probability_s", "probabilité_de_réussite"), + ("property", "nom_de_la_propriété"), + ("pv", "valeur_actuelle"), + ("quart", "quartile"), + ("radix", "base"), + ("range", "plage"), + ("range_lookup", "correspondance_approximative"), + ("rank", "rang"), + ("rate", "taux"), + ("real_num", "coefficient_réel"), + ("redemption", "valeur_de_remboursement"), + ("ref", "référence"), + ("ref_text", "texte_de_référence"), + ("reference", "référence"), + ("reinvest_rate", "taux_d_intérêt_de_réinvestissement"), + ("relative_to", "par_rapport_à"), + ("replacement", "remplacement"), + ("result", "résultat"), + ("result_vector", "vecteur_de_résultat"), + ("return_array", "tableau_retour"), + ("return_mode", "mode_retour"), + ("return_type", "type_de_retour"), + ("row_delimiter", "délimiteur_de_ligne"), + ("row_fields", "champs_de_ligne"), + ("row_index_num", "index_de_ligne"), + ("row_num", "numéro_de_ligne"), + ("row_sort_order", "ordre_de_tri_des_lignes"), + ("row_total_depth", "profondeur_totale_de_la_rangée"), + ("rows", "nombre_de_lignes"), + ("salvage", "valeur_résiduelle"), + ("sample_s", "nombre_de_succès_dans_l_échantillon"), + ("scan_by_column", "parcourir_par_colonne"), + ("schedule", "série_de_taux"), + ("search_mode", "mode_recherche"), + ("seasonality", "saisonnalité"), + ("second", "seconde"), + ("serial_number", "numéro_de_série"), + ("set", "ensemble_de_membres_du_cube"), + ("set_expression", "expression_d_ensemble_de_membres_de_cube"), + ("settlement", "date_de_règlement"), + ("sheet_text", "texte_de_la_feuille"), + ("shift_amount", "nombre_de_bits_de_décalage"), + ("sigma", "sigma"), + ("significance", "pas_ou_précision"), + ("size", "taille"), + ("sort_by", "trier_par"), + ("sort_index", "indice_de_tri"), + ("sort_order", "ordre_de_tri"), + ("source", "source"), + ("standard_dev", "écart_type"), + ("start", "valeur_de_départ"), + ("start_date", "date_de_début"), + ("start_num", "position_de_départ"), + ("start_period", "période_de_début"), + ("statistic_type", "type_de_statistique"), + ("stats", "statistiques"), + ("step", "pas"), + ("suffix", "suffixe"), + ("sum_range", "plage_de_somme"), + ("table_array", "tableau_de_recherche"), + ("tails", "nombre_de_côtés"), + ("target", "cible"), + ("target_date", "date_cible"), + ("text", "texte"), + ("time_text", "heure_écrite_sous_forme_de_texte"), + ("timeline", "chronologie"), + ("to_unit", "unité_de_mesure_cible"), + ("top", "limite_supérieure"), + ("total_depth", "profondeur_totale"), + ("trials", "essais"), + ("triangulation_precision", "précision_de_la_triangulation"), + ("trim_cols", "mode_de_découpage_des_colonnes"), + ("trim_rows", "mode_de_découpage_des_lignes"), + ("type", "type"), + ("type_text", "nom_du_type_de_données"), + ("unit", "unité"), + ("upper_limit", "limite_supérieure"), + ("url", "URL"), + ("value", "valeur"), + ("value_if_error", "résultat_en_cas_d_erreur"), + ("value_if_false", "résultat_lorsque_la_condition_est_fausse"), + ("value_if_na", "résultat_pour_l_erreur_non_disponible"), + ("value_if_true", "résultat_lorsque_la_condition_est_vraie"), + ("values", "valeurs_d_entrée"), + ("vector", "vecteur"), + ("weekend", "week_end"), + ("whole_number", "nombre_entier"), + ("width", "largeur"), + ("within_text", "texte_dans_lequel_effectuer_la_recherche"), + ("wrap_count", "nombre_de_valeurs_par_ligne_ou_colonne"), + ("x", "x"), + ("x_num", "coordonnée_x"), + ("x_range", "plage_x"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "coordonnée_y"), + ("year", "année"), + ("yld", "rendement_des_placements"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/it.rs b/crates/ui-egui/src/i18n/it.rs index dcede52cc2..10c4db8f2d 100644 --- a/crates/ui-egui/src/i18n/it.rs +++ b/crates/ui-egui/src/i18n/it.rs @@ -5,6 +5,214 @@ /// Returns the Italian translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Borders|None" => "Nessuno", + "Report Layout|Outline" => "Struttura", + "Recently Used" => "Usate di recente", + "Maximum Iterations:" => "Numero massimo:", + "Maximum Change:" => "Scarto consentito:", + "Maximum Iterations must be a whole number from 1 to 32767." => "Il numero massimo di iterazioni deve essere un numero intero da 1 a 32767.", + "Maximum Change must be a number of 0 or more." => "Lo scarto consentito deve essere un numero maggiore o uguale a 0.", + "Unprotect Sheet…" => "Rimuovi protezione foglio…", + "Fit selection" => "Adatta alla selezione", + "Account" => "Account", + "Product Information" => "Informazioni sul prodotto", + "Version" => "Versione", + "Platform" => "Piattaforma", + "Licence" => "Licenza", + "Rename" => "Rinomina", + "Move or Copy…" => "Sposta o copia…", + "Duplicate" => "Duplica", + "Tab Color" => "Colore scheda", + "No Color" => "Nessun colore", + "Unhide…" => "Scopri…", + "Select All Sheets" => "Seleziona tutti i fogli", + "AutoSave: save after every change (workbooks saved to a file)" => { + "Salvataggio automatico: salva dopo ogni modifica (cartelle di lavoro salvate in un file)" + } + "All sheets" => "Tutti i fogli", + "Select Data…" => "Seleziona dati…", + "Format Chart Area…" => "Formato area del grafico…", + "Number Stored as Text" => "Numero memorizzato come testo", + "Convert to Number" => "Converti in numero", + "Error checking options" => "Opzioni di controllo errori", + "Paste formulas that refer to the copied cells" => "Incolla formule che fanno riferimento alle celle copiate", + "Cut (⌘X)" => "Taglia (⌘X)", + "Copy (⌘C)" => "Copia (⌘C)", + "Bold (⌘B)" => "Grassetto (⌘B)", + "Italic (⌘I)" => "Corsivo (⌘I)", + "Underline (⌘U)" => "Sottolineato (⌘U)", + "AutoSum (⌘⇧T)" => "Somma automatica (⌘⇧T)", + "Filter (⌘⇧F)" => "Filtro (⌘⇧F)", + "Flash Fill (⌘E)" => "Anteprima suggerimenti (⌘E)", + "Insert Link (⌘K)" => "Inserisci collegamento (⌘K)", + "Paste (⌘V)" => "Incolla (⌘V)", + "Redo (⌘Y)" => "Ripeti (⌘Y)", + "Save (⌘S)" => "Salva (⌘S)", + "Search commands (⌘⇧Space)" => "Cerca comandi (⌘⇧Spazio)", + "Table (⌘T)" => "Tabella (⌘T)", + "Undo (⌘Z)" => "Annulla (⌘Z)", + "New Workbook" => "Nuova cartella di lavoro", + "Print…" => "Stampa…", + "Export as PDF…" => "Esporta come PDF…", + "Save a Copy as Excel Workbook (.xlsx)…" => "Salva una copia come cartella di lavoro di Excel (.xlsx)…", + "Export as CSV…" => "Esporta come CSV…", + "Export as Web Page (.html)…" => "Esporta come pagina Web (.html)…", + "Inside Borders" => "Bordi interni", + "No Fill" => "Nessun riempimento", + "Theme Colors" => "Colori tema", + "Standard Colors" => "Colori standard", + "Blue" => "Blu", + "Green" => "Verde", + "Red" => "Rosso", + "Orange" => "Arancione", + "Light Blue" => "Azzurro", + "Purple" => "Viola", + "3 Arrows" => "3 frecce", + "3 Traffic Lights" => "3 semafori", + "3 Symbols" => "3 simboli", + "5 Arrows" => "5 frecce", + "Number Format" => "Formato numero", + "Place in Cell" => "Inserisci nella cella", + "Place over Cells" => "Inserisci sopra le celle", + "Rectangle" => "Rettangolo", + "Rounded Rectangle" => "Rettangolo arrotondato", + "Oval" => "Ovale", + "Triangle" => "Triangolo", + "Arrow" => "Freccia", + "Sort Ascending" => "Ordinamento crescente", + "Sort Descending" => "Ordinamento decrescente", + "Search" => "Cerca", + "Apply" => "Applica", + "20% - Accent2" => "20% - Colore2", + "20% - Accent3" => "20% - Colore3", + "20% - Accent4" => "20% - Colore4", + "20% - Accent5" => "20% - Colore5", + "20% - Accent6" => "20% - Colore6", + "40% - Accent1" => "40% - Colore1", + "40% - Accent2" => "40% - Colore2", + "40% - Accent3" => "40% - Colore3", + "40% - Accent4" => "40% - Colore4", + "40% - Accent5" => "40% - Colore5", + "40% - Accent6" => "40% - Colore6", + "60% - Accent1" => "60% - Colore1", + "60% - Accent2" => "60% - Colore2", + "60% - Accent3" => "60% - Colore3", + "60% - Accent4" => "60% - Colore4", + "60% - Accent5" => "60% - Colore5", + "60% - Accent6" => "60% - Colore6", + "Accent2" => "Colore2", + "Accent3" => "Colore3", + "Accent4" => "Colore4", + "Accent5" => "Colore5", + "Accent6" => "Colore6", + "Recent Colors" => "Colori recenti", + "More Colors…" => "Altri colori…", + "Hex" => "Hex", + "Page Break Preview" => "Anteprima interruzioni di pagina", + "Bubble" => "Bolle", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "Intestazione (&L sinistra, &C centro, &R destra; &P pagina, &N pagine, &D data, &A foglio):" + } + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Inizio previsione (data o numero nello storico; vuoto: dopo l'ultimo punto):" + } + "Source:" => "Origine:", + "End date:" => "Data di fine:", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Proteggi cartella di lavoro per: struttura (non è possibile aggiungere, spostare, rinominare, nascondere o eliminare fogli)." + } + "Printer" => "Stampante", + "Select a printer" => "Seleziona una stampante", + "Refresh printers" => "Aggiorna stampanti", + "Copies" => "Copie", + "Two-sided printing" => "Stampa fronte/retro", + "Printer default" => "Predefinita della stampante", + "One-sided" => "Solo fronte", + "Two-sided: long edge" => "Fronte/retro: lato lungo", + "Two-sided: short edge" => "Fronte/retro: lato corto", + "Grayscale" => "Scala di grigi", + "Finding printers…" => "Ricerca stampanti…", + "No printers found. Configure a system printer or export a PDF." => { + "Nessuna stampante trovata. Configura una stampante di sistema o esporta un PDF." + } + "Printer discovery failed." => "Ricerca delle stampanti non riuscita.", + "Submitting print job…" => "Invio del processo di stampa…", + "Print job submitted." => "Processo di stampa inviato.", + "Print job submitted: {receipt}" => "Processo di stampa inviato: {receipt}", + "Print failed: {error}" => "Stampa non riuscita: {error}", + "Print failed: the printing worker stopped." => "Stampa non riuscita: il servizio di stampa si è arrestato.", + "Save As…" => "Salva con nome…", + "Bottom Border" => "Bordo inferiore", + "Top Border" => "Bordo superiore", + "Left Border" => "Bordo sinistro", + "Right Border" => "Bordo destro", + "No Border" => "Nessun bordo", + "All Borders" => "Tutti i bordi", + "Outside Borders" => "Bordi esterni", + "Thick Outside Borders" => "Bordi esterni spessi", + "Bottom Double Border" => "Doppio bordo inferiore", + "Thick Bottom Border" => "Bordo inferiore spesso", + "Top and Bottom Border" => "Bordo superiore e inferiore", + "Top and Thick Bottom Border" => "Bordo superiore e inferiore spesso", + "Top and Double Bottom Border" => "Bordo superiore e inferiore doppio", + "More Borders…" => "Altri bordi…", + "More Functions…" => "Altre funzioni…", + "Highlight Cells Rules" => "Regole evidenziazione celle", + "Greater Than…" => "Maggiore di…", + "Less Than…" => "Minore di…", + "Between…" => "Tra…", + "Equal To…" => "Uguale a…", + "Text that Contains…" => "Testo contenente…", + "A Date Occurring…" => "Data corrispondente a…", + "Duplicate Values…" => "Valori duplicati…", + "Top/Bottom Rules" => "Regole primi/ultimi valori", + "Green - Yellow - Red" => "Verde - giallo - rosso", + "Red - Yellow - Green" => "Rosso - giallo - verde", + "Green - White - Red" => "Verde - bianco - rosso", + "Blue - White - Red" => "Blu - bianco - rosso", + "White - Green" => "Bianco - verde", + "White - Red" => "Bianco - rosso", + "4 Ratings" => "4 simboli valutazione", + "5 Quarters" => "Da 0 a 4 quarti", + "New Rule…" => "Nuova regola…", + "Clear Rules" => "Cancella regole", + "Manage Rules…" => "Gestisci regole…", + "Good, Bad and Neutral" => "Valore valido, non valido o neutrale", + "Bad" => "Valore non valido", + "Good" => "Valore valido", + "Neutral" => "Neutrale", + "Data and Model" => "Dati e modelli", + "Calculation" => "Calcolo", + "Check Cell" => "Cella da controllare", + "Explanatory Text" => "Testo descrittivo", + "Input" => "Input", + "Linked Cell" => "Cella collegata", + "Note" => "Nota", + "Output" => "Output", + "Warning Text" => "Testo avviso", + "Titles and Headings" => "Titoli e intestazioni", + "Heading 1" => "Titolo 1", + "Heading 2" => "Titolo 2", + "Heading 3" => "Titolo 3", + "Heading 4" => "Titolo 4", + "Total" => "Totale", + "Themed Cell Styles" => "Stili cella con tema", + "Comma [0]" => "Migliaia [0]", + "Currency [0]" => "Valuta [0]", + "Percent" => "Percentuale", + "Column" => "Colonne", + "Win/Loss" => "Positivi/Negativi", + "20% - Accent1" => "20% - Colore 1", + "Accent1" => "Colore 1", + "Box & Whisker" => "Scatola e baffi", + "Treemap" => "Albero", + "Sunburst" => "Radiale", + "Stock" => "Grafico azionario", + "Bar" => "Barre", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "Trascina per riempire le celle. Trascina dall'interno di una cella per selezionare un intervallo." + } + "Page {page}" => "Pagina {page}", "Diagram" => "Diagramma", "Decorative Text" => "Testo decorativo", "Paste" => "Incolla", @@ -28,7 +236,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Merge & Center" => "Unisci e allinea al centro", "Merge Cells" => "Unisci celle", "Merge Across" => "Unisci in orizzontale", - "Unmerge Cells" => "Separa celle", + "Unmerge Cells" => "Dividi celle", "Fill Color" => "Colore riempimento", "Font Color" => "Colore carattere", "Borders" => "Bordi", @@ -37,16 +245,16 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Bottom\nAlign" => "Allinea\nin basso", "Left" => "Sinistra", "Right" => "Destra", - "Center" => "Centro", + "Center" => "Allinea al centro", "Horizontal" => "Orizzontale", - "Vertical Text" => "Testo verticale", + "Vertical Text" => "Verticale per lettera", "Decrease Indent" => "Riduci rientro", "Increase Indent" => "Aumenta rientro", "Orientation" => "Orientamento", - "Angle Counterclockwise" => "Ruota in senso antiorario", - "Angle Clockwise" => "Ruota in senso orario", - "Rotate Text Up" => "Ruota testo verso l'alto", - "Rotate Text Down" => "Ruota testo verso il basso", + "Angle Counterclockwise" => "Ruota in diagonale verso l'alto (45 gradi)", + "Angle Clockwise" => "Ruota in diagonale verso il basso (-45 gradi)", + "Rotate Text Up" => "Ruota verso l'alto (90 gradi)", + "Rotate Text Down" => "Ruota verso il basso (-90 gradi)", "Accounting Number Format" => "Formato numero contabilità", "Percent Style" => "Stile percentuale", "Comma Style" => "Stile separatore", @@ -59,7 +267,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Cell\nStyles" => "Stili\ncella", "Format Cells…" => "Formato celle…", "Format Cell Alignment…" => "Formato allineamento celle…", - "Format\nPane" => "Riquadro\nFormato", + "Format\nPane" => "Riquadro\nformato", "Format" => "Formato", "Insert" => "Inserisci", "Header Menu|Insert" => "Inserisci", @@ -87,8 +295,8 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Clear Comments and Notes" => "Cancella commenti e note", "Clear Hyperlinks" => "Cancella collegamenti ipertestuali", "AutoSum" => "Somma automatica", - "Flash\nFill" => "Riempimento\nveloce", - "Flash Fill" => "Riempimento veloce", + "Flash\nFill" => "Anteprima\nsuggerimenti", + "Flash Fill" => "Anteprima suggerimenti", "Fill" => "Riempimento", "Clear Print Area" => "Cancella area di stampa", "Find &\nSelect" => "Trova e\nseleziona", @@ -113,7 +321,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Symbol" => "Simbolo", "Equation" => "Equazione", "Insert New Equation..." => "Inserisci nuova equazione", - "Sparklines" => "Sparkline", + "Sparklines" => "Grafici sparkline", "Checkbox" => "Casella di controllo", "Insert checkboxes in the selected cells" => "Inserisci caselle di controllo nelle celle selezionate", "Button" => "Pulsante", @@ -130,10 +338,10 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Assign Action…" => "Assegna azione…", "Format Control…" => "Formato controllo…", "Header & Footer" => "Intestazione e piè di pagina", - "Draw with ink" => "Disegna a mano libera", + "Draw with ink" => "Disegna con input penna", "Eraser" => "Gomma", "Ink to\nShape" => "Da input penna\na forma", - "Select\nObjects" => "Seleziona\noggetti", + "Select\nObjects" => "Selezione\noggetti", "Themes" => "Temi", "Margins" => "Margini", "Left Margin" => "Margine sinistro", @@ -163,8 +371,8 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Define Name" => "Definisci nome", "Use in Formula" => "Usa nella formula", "Create from Selection" => "Crea da selezione", - "Trace Precedents" => "Individua precedenti", - "Trace Dependents" => "Individua dipendenti", + "Trace Precedents" => "Trova celle precedenti", + "Trace Dependents" => "Trova celle dipendenti", "Remove Arrows" => "Rimuovi frecce", "Show Formulas" => "Mostra formule", "Error Checking" => "Controllo errori", @@ -172,12 +380,12 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Circular References" => "Riferimenti circolari", "Python Mode" => "Modalità Python", "Evaluate Formula" => "Valuta formula", - "Watch Window" => "Finestra controlli", + "Watch Window" => "Finestra controllo celle", "Calculation\nOptions" => "Opzioni di\ncalcolo", "Calculate Now" => "Calcola ora", "Calculate Sheet" => "Calcola foglio", "Automatic" => "Automatico", - "Automatic Except for Data Tables" => "Automatico ad eccezione delle tabelle dati", + "Automatic Except for Data Tables" => "Automatico eccetto tabelle dati", "Manual" => "Manuale", "Sort &\nFilter" => "Ordina e\nfiltra", "Sort" => "Ordina", @@ -242,10 +450,10 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Dark Mode" => "Modalità scura", "Interface language" => "Lingua dell'interfaccia", "Interface size" => "Dimensione dell'interfaccia", - "Auto" => "Auto", + "Auto" => "Automatica", "Drag to freeze columns" => "Trascina per bloccare le colonne", "Drag to freeze rows" => "Trascina per bloccare le righe", - "Command\nPalette" => "Riquadro\ncomandi", + "Command\nPalette" => "Palette\ncomandi", "Agent\nControl" => "Controllo\nagenti", "Action\nJournal" => "Registro\nazioni", "About\nGridCraft" => "Informazioni su\nGridCraft", @@ -269,9 +477,9 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Convert\nto Range" => "Converti\nin intervallo", "Table\nStyles" => "Stili\ntabella", "Top 10 Items" => "Primi 10 elementi", - "Top 10%" => "Primi 10%", + "Top 10%" => "Primo 10 %", "Bottom 10 Items" => "Ultimi 10 elementi", - "Bottom 10%" => "Ultimi 10%", + "Bottom 10%" => "Ultimo 10 %", "Above Average" => "Sopra la media", "Below Average" => "Sotto la media", "Clear Rules from Entire Sheet" => "Cancella regole dall'intero foglio", @@ -291,7 +499,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Table Design" => "Progettazione tabella", "Chart Design" => "Progettazione grafico", "Ready" => "Pronto", - "Enter" => "Immetti", + "Enter" => "Invio", "Edit" => "Modifica", "Point" => "Punta", "Calculate" => "Calcola", @@ -308,17 +516,17 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Text" => "Testo", "Special" => "Speciale", "Custom" => "Personalizzato", - "Short Date" => "Data breve", + "Short Date" => "Data in cifre", "Long Date" => "Data estesa", "More Number Formats…" => "Altri formati numero…", - "Financial" => "Finanziarie", - "Logical" => "Logiche", + "Financial" => "Finanze", + "Logical" => "Logica", "More Functions" => "Altre funzioni", "Page Layout|Orientation" => "Orientamento", "Display theme" => "Tema di visualizzazione", "Animations" => "Animazioni", "Glide the selection outline to the cell you move to instead of jumping there" => { - "Fa scorrere il contorno della selezione fino alla cella di destinazione invece di saltare" + "Fa scorrere il contorno della selezione fino alla cella di destinazione invece di saltarvi direttamente" } "System" => "Sistema", "Light" => "Chiaro", @@ -333,28 +541,28 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "(none)" => "(nessuno)", "Header" => "Intestazione", "Footer" => "Piè di pagina", - "Page\nNumber" => "Numero\npagina", - "Number\nof Pages" => "Numero\npagine", + "Page\nNumber" => "Numero\ndi pagina", + "Number\nof Pages" => "Numero\ndi pagine", "Current\nDate" => "Data\ncorrente", "Current\nTime" => "Ora\ncorrente", "File\nPath" => "Percorso\nfile", "File\nName" => "Nome\nfile", "Sheet\nName" => "Nome\nfoglio", - "Go to\nHeader" => "Vai a\nintestazione", - "Go to\nFooter" => "Vai a\npiè di pagina", - "Page Number" => "Numero pagina", - "Number of Pages" => "Numero pagine", + "Go to\nHeader" => "Vai\nall'intestazione", + "Go to\nFooter" => "Vai al\npiè di pagina", + "Page Number" => "Numero di pagina", + "Number of Pages" => "Numero di pagine", "Current Date" => "Data corrente", "Current Time" => "Ora corrente", "File Path" => "Percorso file", "File Name" => "Nome file", "Sheet Name" => "Nome foglio", - "Go to Header" => "Vai a intestazione", + "Go to Header" => "Vai all'intestazione", "Different First Page" => "Prima pagina diversa", "Different Odd & Even Pages" => "Pagine pari e dispari diverse", "Scale with Document" => "Ridimensiona con il documento", "Align with Page Margins" => "Allinea ai margini della pagina", - "Go to Footer" => "Vai a piè di pagina", + "Go to Footer" => "Vai al piè di pagina", "Ruler" => "Righello", // File › Backstage view. "File" => "File", @@ -371,7 +579,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Recent" => "Recenti", "No recent workbooks yet." => "Nessuna cartella di lavoro recente.", "More workbooks" => "Altre cartelle di lavoro", - "Modified" => "Modificato", + "Modified" => "Data modifica", "Not available" => "Non disponibile", "Just now" => "Adesso", "{n} min ago" => "{n} min fa", @@ -401,7 +609,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "No workbook is open." => "Nessuna cartella di lavoro aperta.", "Save as type" => "Salva come", "Excel Workbook (*.xlsx)" => "Cartella di lavoro di Excel (*.xlsx)", - "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (delimitato dal separatore di elenco) (*.csv)", + "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (delimitato da virgole) (*.csv)", "Web Page (*.html)" => "Pagina Web (*.html)", "PDF (*.pdf)" => "PDF (*.pdf)", "Download" => "Scarica", @@ -420,7 +628,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Create PDF" => "Crea PDF", "Save the sheet as a PDF document that keeps its page layout." => "Salva il foglio come documento PDF che mantiene il layout di pagina.", "Change File Type" => "Cambia tipo di file", - "CSV (Comma delimited)" => "CSV (delimitato dal separatore di elenco)", + "CSV (Comma delimited)" => "CSV (delimitato da virgole)", "Save the active sheet as comma-separated text." => "Salva il foglio attivo come testo separato da virgole.", "Web Page (.html)" => "Pagina Web (.html)", "Save the workbook as a web page." => "Salva la cartella di lavoro come pagina Web.", @@ -432,7 +640,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Enable AutoComplete for cell values" => "Abilita Completamento automatico per i valori delle celle", "Save .xlsx workbooks automatically after every change" => "Salva automaticamente le cartelle di lavoro .xlsx dopo ogni modifica", "Workbook calculation" => "Calcolo della cartella di lavoro", - "Enable iterative calculation" => "Abilita calcolo iterativo", + "Enable iterative calculation" => "Attiva calcolo iterativo", "Calculation settings are saved with the workbook." => "Le impostazioni di calcolo vengono salvate con la cartella di lavoro.", "OK" => "OK", "Cancel" => "Annulla", @@ -452,7 +660,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Select Data" => "Seleziona dati", "Row Height" => "Altezza righe", "Column Width" => "Larghezza colonne", - "Standard Width" => "Larghezza predefinita", + "Standard Width" => "Larghezza standard", "Rename Sheet" => "Rinomina foglio", "Move or Copy" => "Sposta o copia", "Protect Sheet" => "Proteggi foglio", @@ -465,7 +673,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Series" => "Serie", "New Comment" => "Nuovo commento", "Insert Hyperlink" => "Inserisci collegamento ipertestuale", - "Create Sparklines" => "Crea Sparkline", + "Create Sparklines" => "Crea grafici sparkline", "Page Setup" => "Imposta pagina", "Convert Text to Columns" => "Converti testo in colonne", "Remove Duplicates" => "Rimuovi duplicati", @@ -497,12 +705,12 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Pick From List" => "Scegli dall'elenco", "Save a Copy" => "Salva una copia", "Save Changes?" => "Salvare le modifiche?", - "Shift cells right" => "Sposta celle a destra", - "Shift cells down" => "Sposta celle in basso", - "Shift cells left" => "Sposta celle a sinistra", - "Shift cells up" => "Sposta celle in alto", - "Entire row" => "Intera riga", - "Entire column" => "Intera colonna", + "Shift cells right" => "Sposta le celle a destra", + "Shift cells down" => "Sposta le celle in basso", + "Shift cells left" => "Sposta le celle a sinistra", + "Shift cells up" => "Sposta le celle in alto", + "Entire row" => "Riga intera", + "Entire column" => "Colonna intera", "Row height (pixels):" => "Altezza riga (pixel):", "Column width (characters):" => "Larghezza colonna (caratteri):", "Standard column width (pixels):" => "Larghezza standard colonna (pixel):", @@ -513,9 +721,9 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Password (optional):" => "Password (facoltativa):", "Password:" => "Password:", "Allow all users of this sheet to:" => "Consenti a tutti gli utenti di questo foglio di:", - "Format cells" => "Formatta celle", - "Format columns" => "Formatta colonne", - "Format rows" => "Formatta righe", + "Format cells" => "Formato celle", + "Format columns" => "Formato colonne", + "Format rows" => "Formato righe", "Insert rows" => "Inserisci righe", "Delete rows" => "Elimina righe", "Use AutoFilter" => "Usa Filtro automatico", @@ -541,11 +749,12 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Comments and notes (C)" => "Commenti e note (C)", "Validation" => "Convalida", "All except borders" => "Tutto tranne i bordi", - "Column widths" => "Larghezze colonne", + "Column widths" => "Larghezza colonne", "Formulas and number formats" => "Formule e formati numero", "Values and number formats" => "Valori e formati numero", "Operation" => "Operazione", "Add" => "Aggiungi", + "Paste Special|Add" => "Aggiungi", "Subtract" => "Sottrai", "Multiply" => "Moltiplica", "Divide" => "Dividi", @@ -562,7 +771,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Weekday" => "Giorno feriale", "Month" => "Mese", "Year" => "Anno", - "Step value:" => "Incremento:", + "Step value:" => "Valore di incremento:", "Stop value:" => "Valore limite:", "Start a conversation:" => "Avvia una conversazione:", "Note:" => "Nota:", @@ -570,7 +779,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Link to (web address, e-mail or Sheet!A1):" => "Collega a (indirizzo Web, e-mail o Foglio!A1):", "ScreenTip:" => "Descrizione comando:", "Data Range:" => "Intervallo dati:", - "Location Range:" => "Intervallo di posizione:", + "Location Range:" => "Intervallo posizioni:", "Markers" => "Indicatori", "Footer:" => "Piè di pagina:", "Left margin (in):" => "Margine sinistro (poll.):", @@ -585,18 +794,19 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Tab" => "Tabulazione", "Semicolon" => "Punto e virgola", "Comma" => "Virgola", + "Text to Columns|Comma" => "Virgola", "Space" => "Spazio", "Other:" => "Altro:", "Treat consecutive delimiters as one" => "Considera delimitatori consecutivi come uno solo", "Destination:" => "Destinazione:", - "My data has headers" => "I dati contengono intestazioni", + "My data has headers" => "Dati con intestazioni", "Columns (blank = all, e.g. A,C):" => "Colonne (vuoto = tutte, ad es. A,C):", "Timeline range (blank: first column of the selection):" => "Intervallo sequenza temporale (vuoto: prima colonna della selezione):", "Values range (blank: second column of the selection):" => "Intervallo valori (vuoto: seconda colonna della selezione):", "Confidence interval" => "Intervallo di confidenza", "Confidence level (%):" => "Livello di confidenza (%):", "Seasonality (auto, 0 for none, or a season length):" => "Stagionalità (automatica, 0 per nessuna, o la lunghezza di una stagione):", - "Fill missing points using" => "Compila punti mancanti usando", + "Fill missing points using" => "Riempi punti mancanti usando", "Interpolation" => "Interpolazione", "Zeros" => "Zeri", "Aggregate duplicates using" => "Aggrega duplicati usando", @@ -640,9 +850,9 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "In-cell dropdown" => "Elenco a discesa nella cella", "Input message:" => "Messaggio di input:", "Error style" => "Stile errore", - "Stop" => "Stop", + "Stop" => "Interruzione", "Warning" => "Avviso", - "Information" => "Informazioni", + "Information" => "Informazione", "Error message:" => "Messaggio di errore:", "Format cells that are (value):" => "Formatta celle che sono (valore):", "and:" => "e:", @@ -699,11 +909,11 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Format Cells|Fill" => "Riempimento", "Protection" => "Protezione", "Category:" => "Categoria:", - "Sample" => "Campione", + "Sample" => "Esempio", "Type (custom format code):" => "Tipo (codice di formato personalizzato):", "Vertical" => "Verticale", - "Justify" => "Giustificato", - "Center Across Selection" => "Al centro della selezione", + "Justify" => "Giustifica", + "Center Across Selection" => "Allinea al centro nelle colonne", "Distributed" => "Distribuito", "Top" => "In alto", "Bottom" => "In basso", @@ -738,7 +948,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "e.g. lookup, average, date" => "ad es. cerca, media, data", "Date & Time" => "Data e ora", "Lookup & Reference" => "Ricerca e riferimento", - "Math & Trig" => "Matematiche e trigonometriche", + "Math & Trig" => "Matematica e trig.", "Statistical" => "Statistiche", "Engineering" => "Ingegneria", "Database" => "Database", @@ -757,10 +967,10 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Find All" => "Trova tutti", "Find Next" => "Trova successivo", "All done. We made {count} replacements." => "Operazione completata. Sono state effettuate {count} sostituzioni.", - "{count} cell(s) found" => "{count} cella/e trovata/e", + "{count} cell(s) found" => "Celle trovate: {count}", "Reference:" => "Riferimento:", "Special…" => "Speciale…", - "My list has headers" => "L'elenco contiene intestazioni", + "My list has headers" => "I dati contengono intestazioni", "Sort by" => "Ordina per", "Then by" => "Quindi per", "Cell Values" => "Valori cella", @@ -783,7 +993,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "100% Stacked Column" => "Colonne in pila 100%", "Clustered Bar" => "Barre raggruppate", "Stacked Bar" => "Barre in pila", - "100% Stacked Bar" => "Barre in pila 100%", + "100% Stacked Bar" => "Barre in pila al 100%", "Line" => "Linee", "Line with Markers" => "Linee con indicatori", "Stacked Line" => "Linee in pila", @@ -855,7 +1065,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Set Objective:" => "Imposta obiettivo:", "To:" => "A:", "Value Of:" => "Valore di:", - "By Changing Variable Cells:" => "Cambiando celle variabili:", + "By Changing Variable Cells:" => "Modificando le celle variabili:", "Subject to the Constraints:" => "Soggetto ai vincoli:", "Make Unconstrained Variables Non-Negative" => "Rendi non negative le variabili senza vincoli", "Select a Solving Method:" => "Seleziona un metodo di risoluzione:", @@ -896,12 +1106,12 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Delete chart" => "Elimina grafico", "Delete…" => "Elimina…", "Dismiss" => "Chiudi", - "Down" => "Giù", + "Down" => "In basso", "Edit chart title" => "Modifica titolo del grafico", "Erase ink strokes" => "Cancella tratti a penna", "Every command run in this session (replayable)" => "Tutti i comandi eseguiti in questa sessione (ripetibili)", "Expand formula bar" => "Espandi barra della formula", - "Filter by Selected Cell's Value" => "Filtra in base al valore della cella selezionata", + "Filter by Selected Cell's Value" => "Filtro in base al valore della cella selezionata", "Find & Select" => "Trova e seleziona", "Forecast Sheet" => "Foglio previsione", "Forecast end (date or number; blank: a third of the history):" => "Fine previsione (data o numero; vuoto: un terzo dello storico):", @@ -932,7 +1142,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Next sheet" => "Foglio successivo", "Page Breaks" => "Interruzioni di pagina", "Paper Size" => "Dimensioni", - "Pick From Drop-down List…" => "Scegli da elenco a discesa…", + "Pick From Drop-down List…" => "Seleziona da elenco a discesa…", "Pie or Doughnut" => "Torta o anello", "Previous sheet" => "Foglio precedente", "Print Area" => "Area di stampa", @@ -949,7 +1159,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Slicer" => "Filtro dati", "Sort & Filter" => "Ordina e filtra", "Spelling (F7)" => "Controllo ortografia (F7)", - "Statistic" => "Statistiche", + "Statistic" => "Statistico", "Switch Row/Column" => "Inverti riga/colonna", "Table Styles" => "Stili tabella", "Text to Columns" => "Testo in colonne", @@ -960,7 +1170,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Undo" => "Annulla", "Undo list" => "Elenco azioni annullabili", "Unhide Sheet…" => "Scopri foglio…", - "Up" => "Su", + "Up" => "In alto", "Version, contributors and the AI models that helped" => "Versione, collaboratori e modelli di IA che hanno contribuito", "What-If Analysis" => "Analisi di simulazione", "Zoom In" => "Ingrandisci", @@ -978,7 +1188,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Pen\nBlue" => "Penna\nblu", "Pen\nRed" => "Penna\nrossa", "Protect\nSheet" => "Proteggi\nfoglio", - "Watch\nWindow" => "Finestra\ncontrolli", + "Watch\nWindow" => "Finestra\ncontrollo celle", "Workbook\nStatistics" => "Statistiche\ncartella di lavoro", // The PivotTable Fields task pane. "PivotTable Fields" => "Campi tabella pivot", @@ -988,7 +1198,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Values" => "Valori", "Move to Row Labels" => "Sposta in Etichette di riga", "Move to Column Labels" => "Sposta in Etichette di colonna", - "Move to Report Filter" => "Sposta in Filtro rapporto", + "Move to Report Filter" => "Sposta in Filtro report", "Move to Values" => "Sposta in Valori", "Summarize by Sum" => "Riepiloga per somma", "Summarize by Count" => "Riepiloga per conteggio", @@ -1005,7 +1215,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Remove Field" => "Rimuovi campo", "Refresh" => "Aggiorna", "Calculated Field…" => "Campo calcolato…", - "Report Layout" => "Layout rapporto", + "Report Layout" => "Layout report", "Compact" => "Compatto", "Tabular" => "Tabulare", "Record Macro" => "Registra macro", @@ -1016,6 +1226,25 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Recording" => "Registrazione", "New Macro" => "Nuova macro", "Show" => "Mostra", + "Generated|Column" => "Colonna", + "Generated|Row" => "Riga", + "Book" => "Cartella", + "Sheet" => "Foglio", + "Count Numbers" => "Conta numeri", + "Type to filter…" => "Digita per filtrare…", + "Nothing to paste." => "Nessun dato da incollare.", + "No cells were found." => "Nessuna cella trovata.", + "Or select a category:" => "Oppure selezionare una categoria:", + "Most Recently Used" => "Usate di recente", + "Insert Function…" => "Inserisci funzione…", + "Paste Names…" => "Incolla nomi…", + "Macro name:" => "Nome macro:", + "Shortcut key:" => "Tasto di scelta rapida:", + "Description:" => "Descrizione:", + "Check for Updates…" => "Controlla aggiornamenti…", + "Checking for updates…" => "Ricerca aggiornamenti…", + "Could not check for updates." => "Impossibile controllare gli aggiornamenti.", + "Check Again" => "Riprova", "Collapse dialog" => "Comprimi finestra di dialogo", "Expand dialog" => "Espandi finestra di dialogo", _ => return None, diff --git a/crates/ui-egui/src/i18n/it_functions.rs b/crates/ui-egui/src/i18n/it_functions.rs new file mode 100644 index 0000000000..d954254297 --- /dev/null +++ b/crates/ui-egui/src/i18n/it_functions.rs @@ -0,0 +1,1050 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 per positivo, -1 per negativo e 0 per zero."), + ("A random integer between two bounds, inclusive.", "Un numero intero casuale compreso tra due limiti, inclusi."), + ("A random number between 0 and 1, recalculated every time.", "Un numero casuale compreso tra 0 e 1, ricalcolato ogni volta."), + ("A range or array without its blank outer rows and columns.", "Un intervallo o matrice senza righe e colonne esterne vuote."), + ("A reference shifted from a starting point.", "Un riferimento spostato rispetto a un punto iniziale."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Statistica del modello FORECAST.ETS: 1 alfa, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 ampiezza del passo.", + ), + ("A subtotal that can skip hidden rows.", "Un totale parziale che può ignorare le righe nascoste."), + ("Absolute value (modulus) of a complex number.", "Valore assoluto (modulo) di un numero complesso."), + ("Absolute value of a number.", "Valore assoluto di un numero."), + ("Accrued interest of a security paying interest at maturity.", "Interessi maturati su un'obbligazione che paga interessi alla scadenza."), + ("Accrued interest of a security paying periodic interest.", "Interessi maturati di un'obbligazione che paga interessi periodici."), + ("Accumulates an array into one value.", "Accumula un array in un valore."), + ("Adds all the numbers in the arguments.", "Somma tutti i numeri specificati negli argomenti."), + ( + "Adds the cells that meet a condition.", + "Restituisce la somma dei valori numerici nelle celle del foglio di calcolo che soddisfano una condizione.", + ), + ( + "Adds the cells that meet every condition.", + "Restituisce la somma dei valori numerici nelle celle del foglio di calcolo che soddisfano tutte le condizioni.", + ), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Restituisce la somma dei valori numerici in un campo del database, per i record che soddisfano i criteri.", + ), + ("Adds the squares of the numbers.", "Restituisce la somma dei numeri al quadrato."), + ("Amount received at maturity for a fully invested security.", "Importo ricevuto alla scadenza per un'obbligazione interamente pagata."), + ("An aggregate that can skip hidden rows and errors.", "Un aggregato che può ignorare le righe nascoste e gli errori."), + ("Angle of a complex number in radians.", "Angolo di un numero complesso in radianti."), + ("Angle of the point (x, y) from the x-axis in radians.", "Angolo del punto (x, y) rispetto all'asse x in radianti."), + ("Annual yield of a discounted security.", "Rendimento annuo di un'obbligazione a sconto."), + ("Annual yield of a security paying interest at maturity.", "Rendimento annuo di un'obbligazione che paga interessi alla scadenza."), + ("Applies a LAMBDA to each column.", "Applica un LAMBDA a ciascuna colonna."), + ("Applies a LAMBDA to each row.", "Applica un LAMBDA a ciascuna riga."), + ("Applies a LAMBDA to each value.", "Applica un LAMBDA a ciascun valore."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Ricerca approssimativa in un vettore ordinato o nella prima riga/colonna di un array.", + ), + ("Arccosine in radians.", "Arcocoseno in radianti."), + ("Arccotangent in radians (0 to pi).", "Arcocotangente in radianti (da 0 a pi greco)."), + ("Arcsine in radians.", "Arcoseno in radianti."), + ("Arctangent in radians.", "Arcotangente in radianti."), + ("Arithmetic mean of the numbers.", "Media aritmetica dei numeri."), + ("Average absolute deviation from the mean.", "Deviazione media assoluta dalla media."), + ("Average of the cells that meet a condition.", "Media delle celle del foglio di calcolo che soddisfano una condizione."), + ("Average of the cells that meet every condition.", "Media delle celle del foglio di calcolo che soddisfano ogni condizione."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Calcola la media dei numeri in un campo dei record che soddisfano i criteri.", + ), + ("Base-10 logarithm of a complex number.", "Logaritmo in base 10 di un numero complesso."), + ("Base-10 logarithm.", "Logaritmo in base 10."), + ("Base-2 logarithm of a complex number.", "Logaritmo in base 2 di un numero complesso."), + ("Bessel function of the first kind, J_n(x).", "Funzione di Bessel del primo tipo, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Funzione di Bessel del secondo tipo, Y_n(x)."), + ("Beta distribution density or probability.", "Densità o probabilità della distribuzione beta."), + ("Binomial probability.", "Probabilità binomiale."), + ("Bitwise AND of two non-negative integers.", "AND bit a bit di due numeri interi non negativi."), + ("Bitwise OR of two non-negative integers.", "OR bit a bit di due numeri interi non negativi."), + ("Bitwise exclusive OR of two non-negative integers.", "OR esclusivo bit a bit di due numeri interi non negativi."), + ("Bond-equivalent yield of a Treasury bill.", "Rendimento equivalente a un'obbligazione di un buono del Tesoro."), + ("Breaks a row or column into columns of the given length.", "Suddivide una riga o una colonna in colonne della lunghezza specificata."), + ("Breaks a row or column into rows of the given length.", "Suddivide una riga o una colonna in righe della lunghezza specificata."), + ("Builds a cell address as text from row and column numbers.", "Crea un indirizzo di cella come testo dai numeri di riga e colonna."), + ("Builds a complex number as text from real and imaginary parts.", "Costruisce un numero complesso come testo da parti reali e immaginarie."), + ("Builds a date serial number from a year, month and day.", "Crea un numero seriale di data partendo da un anno, mese e giorno."), + ( + "Builds a summary table grouping values by row and column fields.", + "Crea una tabella di riepilogo raggruppando i valori per campi riga e colonna.", + ), + ( + "Builds a time (a fraction of a day) from hours, minutes and seconds.", + "Costruisce un tempo (una frazione di giorno) da ore, minuti e secondi.", + ), + ("Builds an array from a LAMBDA.", "Costruisce un array da LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Costruisce una serie di numeri a gradini uniformi."), + ("Builds an array of random numbers in a range.", "Costruisce un array di numeri casuali in un intervallo."), + ("Byte version of FIND.", "Versione in byte di FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Versione in byte di LEFT (uguale a LEFT per testo a byte singolo)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Versione in byte di LEN (uguale a LEN per testo a byte singolo)."), + ("Byte version of MID (same as MID for single-byte text).", "Versione in byte di MID (uguale a MID per testo a byte singolo)."), + ("Byte version of REPLACE.", "Versione in byte di REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Versione in byte di RIGHT (uguale a RIGHT per testo a byte singolo)."), + ("Byte version of SEARCH.", "Versione in byte di SEARCH."), + ("Capitalises the first letter of each word and lower-cases the rest.", "Rende maiuscola la prima lettera di ogni parola e minuscola il resto."), + ("Chi-squared density or left-tailed probability.", "Densità del chi quadrato o probabilità della coda sinistra."), + ("Chi-squared test of independence.", "Test di indipendenza del chi quadrato."), + ("Column number of a reference.", "Numero di colonna di un riferimento."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Confronta un'espressione con un elenco di valori e restituisce il risultato abbinato alla prima corrispondenza.", + ), + ("Complementary error function, 1 - ERF(x).", "Funzione di errore complementare, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Coniugato complesso di un numero complesso."), + ( + "Confidence interval half-width using Student's t distribution.", + "Semiampiezza dell'intervallo di confidenza calcolata usando la distribuzione t di Student.", + ), + ( + "Confidence interval half-width using the normal distribution.", + "Semiampiezza dell'intervallo di confidenza calcolata usando la distribuzione normale.", + ), + ("Converts Roman numerals to a number.", "Converte i numeri romani in un numero."), + ("Converts a binary number to decimal.", "Converte un numero binario in decimale."), + ("Converts a binary number to hexadecimal.", "Converte un numero binario in esadecimale."), + ("Converts a binary number to octal.", "Converte un numero binario in ottale."), + ("Converts a date written as text into a date serial number.", "Converte una data scritta come testo in un numero seriale di data."), + ("Converts a decimal number to binary.", "Converte un numero decimale in binario."), + ("Converts a decimal number to hexadecimal.", "Converte un numero decimale in esadecimale."), + ("Converts a decimal number to octal.", "Converte un numero decimale in ottale."), + ("Converts a decimal price to fractional notation.", "Converte un prezzo decimale in notazione frazionaria."), + ("Converts a fractional price notation to a decimal number.", "Converte una notazione di prezzo frazionaria in un numero decimale."), + ("Converts a hexadecimal number to binary.", "Converte un numero esadecimale in binario."), + ("Converts a hexadecimal number to decimal.", "Converte un numero esadecimale in decimale."), + ("Converts a hexadecimal number to octal.", "Converte un numero esadecimale in ottale."), + ("Converts a measurement from one unit to another.", "Converte una misura da un'unità a un'altra."), + ("Converts a number to Roman numerals in one of five styles.", "Converte un numero in numeri romani in uno dei cinque stili."), + ("Converts a time written as text into a fraction of a day.", "Converte l'ora scritta come testo in una frazione di giorno."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Converte un valore in un numero: i numeri rimangono, TRUE è 1, tutto il resto è 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Converte un array in testo, come elenco separato da virgole o come costante di array in formato rigoroso.", + ), + ("Converts an octal number to binary.", "Converte un numero ottale in binario."), + ("Converts an octal number to decimal.", "Converte un numero ottale in decimale."), + ("Converts an octal number to hexadecimal.", "Converte un numero ottale in esadecimale."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Converte qualsiasi valore in testo, facoltativamente in forma rigorosa (tra virgolette).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Converte tra l'euro e le precedenti valute dei paesi membri dell'euro ai tassi fissi.", + ), + ("Converts degrees to radians.", "Converte i gradi in radianti."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Converte i caratteri a larghezza intera in caratteri a metà larghezza (nessuna modifica per il testo a byte singolo).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Converte i caratteri da metà larghezza a quelli a larghezza intera (nessuna modifica in questa locale).", + ), + ("Converts radians to degrees.", "Converte i radianti in gradi."), + ( + "Converts text that looks like a number, date or time into a number.", + "Converte il testo che assomiglia a un numero, una data o un'ora in un numero.", + ), + ( + "Converts text to a number using the given decimal and group separators.", + "Converte il testo in un numero utilizzando i separatori decimali e di gruppo specificati.", + ), + ("Converts text to lower case.", "Converte il testo in minuscolo."), + ("Converts text to upper case.", "Converte il testo in maiuscolo."), + ("Correlation coefficient of two data sets.", "Coefficiente di correlazione di due set di dati."), + ("Cosecant of a complex number.", "Cosecante di un numero complesso."), + ("Cosecant of an angle in radians.", "Cosecante di un angolo in radianti."), + ("Cosine of a complex number.", "Coseno di un numero complesso."), + ("Cosine of an angle in radians.", "Coseno di un angolo in radianti."), + ("Cotangent of a complex number.", "Cotangente di un numero complesso."), + ("Cotangent of an angle in radians.", "Cotangente di un angolo in radianti."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Conta i giorni tra due date in un anno di 360 giorni (US o metodo europeo).", + ), + ("Counts empty cells and empty text in a range.", "Conta le celle vuote del foglio di calcolo e il testo vuoto in un intervallo."), + ( + "Counts how many values fall into each bin, as a vertical array.", + "Conta quanti valori rientrano in ciascun contenitore, come array verticale.", + ), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Conta le celle del foglio di calcolo non vuote in un campo dei record corrispondenti (o dei record corrispondenti).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Conta le celle numeriche del foglio di calcolo in un campo dei record corrispondenti (o dei record corrispondenti).", + ), + ("Counts the cells that meet a condition.", "Conta le celle del foglio di calcolo che soddisfano una condizione."), + ("Counts the cells that meet every condition.", "Conta le celle del foglio di calcolo che soddisfano ogni condizione."), + ("Counts the characters in a text.", "Conta i caratteri in un testo."), + ("Counts the columns in an array or range.", "Conta le colonne in una matrice o intervallo."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Conta gli elementi in un set di cubi (nessuna connessione al cubo; #N/A)."), + ("Counts the non-empty values.", "Conta i valori non vuoti."), + ("Counts the numbers.", "Conta i numeri."), + ("Counts the rows in an array or range.", "Conta le righe in una matrice o intervallo."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Conta anni, mesi o giorni interi tra due date. unità: Y, M, D, MD, YM o YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Conta i giorni lavorativi (dal lunedì al venerdì) tra due date, esclusi i giorni festivi.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Conta i giorni lavorativi tra due date con un fine settimana personalizzato, esclusi i giorni festivi.", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "Crea un collegamento; la cella mostra il nome descrittivo o il collegamento stesso.", + ), + ("Creates a reusable custom function.", "Crea una funzione personalizzata riutilizzabile."), + ("Cumulative beta probability.", "Probabilità beta cumulativa."), + ("Cumulative lognormal probability.", "Probabilità lognormale cumulativa."), + ("Cuts off the fractional part of a number at the given digits.", "Taglia la parte frazionaria di un numero alle cifre specificate."), + ("Days from settlement to the next coupon date.", "Giorni dalla liquidazione alla successiva data di pagamento degli interessi."), + ("Days from the start of the coupon period to settlement.", "Giorni dall'inizio del periodo di pagamento degli interessi alla liquidazione."), + ("Days in the coupon period that contains settlement.", "Giorni nel periodo cedolare che comprende la data di regolamento."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Ammortamento a quote decrescenti su qualsiasi arco di periodi, passaggio a quote costanti.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Definisce un insieme di membri del cubo (nessuna connessione al cubo; #N/A)."), + ("Determinant of a square matrix.", "Determinante di una matrice quadrata."), + ("Difference of two complex numbers.", "Differenza tra due numeri complessi."), + ("Discount rate of a security.", "Tasso di sconto di un'obbligazione."), + ("Double factorial of a number.", "Fattoriale doppio di un numero."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Ammortamento con saldo decrescente doppio (o altro fattore) per un periodo.", + ), + ( + "Effective annual rate from a nominal rate and compounding periods.", + "Tasso annuo effettivo da un tasso nominale e periodi di capitalizzazione.", + ), + ("Equivalent interest rate for the growth of an investment.", "Tasso di interesse equivalente per la crescita di un investimento."), + ("Error function integrated from 0 to a limit, or between two limits.", "Funzione errore integrata da 0 a un limite o tra due limiti."), + ("Error function integrated from 0 to x.", "Funzione errore integrata da 0 a x."), + ("Excess kurtosis of a sample.", "Eccesso di curtosi di un campione."), + ( + "Exponential curve coefficients and optional regression statistics.", + "Coefficienti della curva esponenziale e statistiche di regressione opzionali.", + ), + ("Exponential distribution density or probability.", "Densità o probabilità di distribuzione esponenziale."), + ("Exponential of a complex number.", "Esponenziale di un numero complesso."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Estrae i dati da XML con un XPath (non disponibile; restituisce #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Estrae la prima corrispondenza, tutte le corrispondenze o i gruppi di acquisizione di un'espressione regolare.", + ), + ("F distribution density or left-tailed probability.", "Densità di distribuzione F o probabilità della coda sinistra."), + ("Factorial of a number.", "Fattoriale di un numero."), + ( + "Fetches data from a web service (not available; returns #VALUE!).", + "Recupera i dati da un servizio Web (non disponibile; restituisce #VALUE!).", + ), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Trova un valore nella prima colonna di una tabella e restituisce il valore nella stessa riga di un'altra colonna.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Trova un valore nella prima riga di una tabella e restituisce il valore nella stessa colonna di un'altra riga.", + ), + ( + "Finds the position of one text in another (case-sensitive).", + "Trova la posizione di un testo in un altro (con distinzione tra maiuscole e minuscole).", + ), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Trova la posizione di un testo in un altro, ignorando maiuscole e minuscole e consentendo i caratteri jolly.", + ), + ("Fisher transformation.", "Trasformazione di Fisher."), + ("Fixed-declining-balance depreciation for a period.", "Ammortamento a saldo decrescente fisso per un periodo."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Converte un array in una singola colonna, saltando facoltativamente spazi vuoti o errori.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Converte un array in una singola riga, saltando facoltativamente spazi vuoti o errori.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Prevede un valore mediante livellamento esponenziale additivo (AAA)."), + ("Formats a number as currency text, like DOLLAR.", "Formatta un numero come testo valuta, come DOLLAR."), + ("Formats a number as currency text.", "Formatta un numero come testo di valuta."), + ("Formats a number as text.", "Formatta un numero come testo."), + ("French degressive depreciation with a life-based coefficient.", "Ammortamento degressivo francese con coefficiente basato sulla vita."), + ("French linear depreciation prorated for the first period.", "Ammortamento lineare francese ripartito proporzionalmente per il primo periodo."), + ("Future value of a principal after a series of compound rates.", "Valore futuro di un capitale dopo una serie di tassi composti."), + ("Future value of an investment with constant payments and rate.", "Valore futuro di un investimento con pagamenti e tasso costanti."), + ("Gamma distribution density or probability.", "Densità o probabilità della distribuzione gamma."), + ("Geometric mean of positive numbers.", "Media geometrica dei numeri positivi."), + ("Greatest common divisor of integers.", "Massimo comun divisore di numeri interi."), + ( + "Groups rows by key fields and aggregates the values of each group.", + "Raggruppa le righe per campi chiave e aggrega i valori di ciascun gruppo.", + ), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Ingrandisce un array fino alla dimensione specificata, riempiendo le nuove celle del foglio di calcolo con un valore pad.", + ), + ( + "Half-width of the confidence interval around a FORECAST.ETS value.", + "Mezza larghezza dell'intervallo di confidenza attorno a un valore FORECAST.ETS.", + ), + ("Harmonic mean of positive numbers.", "Media armonica dei numeri positivi."), + ("Hyperbolic cosecant of a complex number.", "Cosecante iperbolica di un numero complesso."), + ("Hyperbolic cosecant.", "Cosecante iperbolica."), + ("Hyperbolic cosine of a complex number.", "Coseno iperbolico di un numero complesso."), + ("Hyperbolic cosine.", "Coseno iperbolico."), + ("Hyperbolic cotangent.", "Cotangente iperbolica."), + ("Hyperbolic secant of a complex number.", "Secante iperbolica di un numero complesso."), + ("Hyperbolic secant.", "Secante iperbolica."), + ("Hyperbolic sine of a complex number.", "Seno iperbolico di un numero complesso."), + ("Hyperbolic sine.", "Seno iperbolico."), + ("Hyperbolic tangent.", "Tangente iperbolica."), + ("Hypergeometric probability of an exact count.", "Probabilità ipergeometrica di un conteggio esatto."), + ("Hypergeometric probability.", "Probabilità ipergeometrica."), + ("Identity matrix of the given size.", "Matrice identità della dimensione data."), + ("Imaginary coefficient of a complex number.", "Coefficiente immaginario di un numero complesso."), + ("Information about a cell.", "Informazioni su una cella."), + ("Integer part of a division.", "Parte intera di una divisione."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Interessi pagati in un periodo di un prestito con quote di rimborso del capitale costanti.", + ), + ("Interest part of a given period's payment.", "Parte degli interessi del pagamento di un determinato periodo."), + ("Interest rate of a fully invested security.", "Tasso di interesse di un'obbligazione interamente pagata."), + ("Interest rate per period of an annuity, found iteratively.", "Tasso di interesse per periodo di una rendita, trovato iterativamente."), + ("Internal rate of return of cash flows on specific dates.", "Tasso interno di rendimento dei flussi di cassa a date specifiche."), + ("Internal rate of return of periodic cash flows.", "Tasso interno di rendimento dei flussi di cassa periodici."), + ("Inverse hyperbolic cosine.", "Coseno iperbolico inverso."), + ("Inverse hyperbolic cotangent.", "Cotangente iperbolica inversa."), + ("Inverse hyperbolic sine.", "Seno iperbolico inverso."), + ("Inverse hyperbolic tangent.", "Tangente iperbolica inversa."), + ("Inverse of a square matrix.", "Inversa di una matrice quadrata."), + ("Inverse of the Fisher transformation.", "Inversa della trasformazione di Fisher."), + ("Inverse of the cumulative beta distribution.", "Inverso della distribuzione beta cumulativa."), + ("Inverse of the cumulative lognormal distribution.", "Inverso della distribuzione lognormale cumulativa."), + ("Inverse of the gamma cumulative distribution.", "Inverso della distribuzione cumulativa gamma."), + ("Inverse of the left-tailed F distribution.", "Inverso della distribuzione F della coda di sinistra."), + ("Inverse of the left-tailed chi-squared distribution.", "Inverso della distribuzione chi quadrato della coda di sinistra."), + ("Inverse of the normal cumulative distribution.", "Inverso della normale distribuzione cumulativa."), + ("Inverse of the right-tailed F distribution.", "Inverso della distribuzione F della coda di destra."), + ("Inverse of the right-tailed chi-squared distribution.", "Inverso della distribuzione chi quadrato della coda di destra."), + ("Inverse of the standard normal cumulative distribution.", "Inverso della distribuzione cumulativa normale standard."), + ("Joins several text values into one.", "Unisce diversi valori di testo in uno solo."), + ( + "Joins text from values and every cell of ranges, without a separator.", + "Unisce il testo dei valori e ogni cella degli intervalli, senza separatore.", + ), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Unisce il testo da valori e intervalli con un delimitatore, saltando facoltativamente gli elementi vuoti.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Mantiene righe o colonne dall'inizio (o dalla fine) di un array."), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Mantiene le righe o le colonne di un array il cui flag di inclusione è TRUE.", + ), + ("Largest number (0 when there are none).", "Numero più grande (0 quando non ce ne sono)."), + ("Largest number in a field of the matching records.", "Numero più grande in un campo dei record corrispondenti."), + ("Largest value among cells that meet every condition.", "Valore più grande tra le celle del foglio di calcolo che soddisfano ogni condizione."), + ("Largest value counting text as 0 and logicals as 1/0.", "Valore più grande che conta il testo come 0 e i valori logici come 1/0."), + ("Least common multiple of integers.", "Minimo comune multiplo di numeri interi."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Coefficienti di linea dei minimi quadrati e statistiche di regressione opzionali.", + ), + ("Left-tailed inverse of Student's t distribution.", "Inversa della coda sinistra della distribuzione t di Student."), + ("Length of the repeating pattern detected in a time series.", "Lunghezza dello schema ripetuto rilevato in una serie temporale."), + ("Logarithm to the given base (10 by default).", "Logaritmo nella base data (10 per impostazione predefinita)."), + ("Lognormal density or probability.", "Densità o probabilità lognormale."), + ("Macaulay duration of a security with periodic interest.", "Duration di Macaulay di un titolo con interessi periodici."), + ("Matrix product of two arrays.", "Prodotto matrice di due matrici."), + ("Mean after trimming a fraction of points from both ends.", "Media dopo aver escluso una frazione di punti da entrambe le estremità."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Media che considera il testo come 0 e i valori logici come 1 o 0."), + ("Middle value of the numbers.", "Valore centrale dei numeri (mediana)."), + ("Modified Bessel function of the first kind, I_n(x).", "Funzione di Bessel modificata del primo tipo, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Funzione di Bessel modificata del secondo tipo, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Duration modificata di un titolo con interessi periodici."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Tasso di rendimento interno modificato utilizzando tassi di prestito e di reinvestimento separati.", + ), + ("Most frequently occurring number.", "Numero più frequente."), + ("Multiplies all the numbers in the arguments.", "Moltiplica tutti i numeri negli argomenti."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Moltiplica gli elementi corrispondenti di matrici di uguali dimensioni e aggiunge i prodotti.", + ), + ("Multiplies the numbers in a field of the matching records.", "Moltiplica i numeri in un campo dei record corrispondenti."), + ("Names intermediate results.", "Assegna nomi ai risultati intermedi."), + ("Natural log of the gamma function.", "Logaritmo naturale della funzione gamma."), + ("Natural logarithm of a complex number.", "Logaritmo naturale di un numero complesso."), + ("Natural logarithm.", "Logaritmo naturale."), + ("Negative binomial probability.", "Probabilità binomiale negativa."), + ("Net present value of cash flows on specific dates.", "Valore attuale netto dei flussi di cassa a date specifiche."), + ("Net present value of periodic cash flows at a discount rate.", "Valore attuale netto dei flussi di cassa periodici a un tasso di sconto."), + ("Next coupon date after settlement.", "Data di pagamento degli interessi successiva alla liquidazione."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Tasso annuo nominale da un tasso effettivo e periodi di capitalizzazione.", + ), + ("Normal distribution density or cumulative probability.", "Densità di distribuzione normale o probabilità cumulativa."), + ("Number of areas in a reference.", "Numero di aree in un riferimento."), + ("Number of combinations with repetition.", "Numero di combinazioni con ripetizione."), + ("Number of combinations without repetition.", "Numero di combinazioni senza ripetizione."), + ("Number of coupons payable between settlement and maturity.", "Numero di pagamenti di interessi dovuti tra il regolamento e la scadenza."), + ("Number of ordered selections with repetition.", "Numero di selezioni ordinate con ripetizione."), + ("Number of ordered selections without repetition.", "Numero di selezioni ordinate senza ripetizione."), + ("Number of periods needed to pay off or accumulate an amount.", "Numero di periodi necessari per saldare o accumulare un importo."), + ("Number of sheets.", "Numero di fogli."), + ("One- or two-tailed Student's t probability.", "Probabilità t di Student a una o due code."), + ("One-tailed probability of a z-test.", "Probabilità a una coda di un test z."), + ("Pearson product-moment correlation coefficient.", "Coefficiente di correlazione prodotto-momento di Pearson."), + ("Percent-encodes text for use in a URL.", "Testo con codifica percentuale da utilizzare in URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Pagamento periodico di un prestito o di una rendita con rate e tasso costanti.", + ), + ("Periods needed for an investment to grow to a target value.", "Periodi necessari affinché un investimento raggiunga un valore target."), + ("Picks a value from the list by its position.", "Seleziona un valore dall'elenco in base alla sua posizione."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Seleziona le colonne di un array in base alla posizione (conteggi negativi dalla fine).", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Seleziona le righe di un array in base alla posizione (conteggi negativi dalla fine).", + ), + ("Places arrays side by side.", "Posiziona gli array uno accanto all'altro."), + ("Poisson probability.", "Probabilità di Poisson."), + ("Population covariance of paired values.", "Covarianza della popolazione di valori accoppiati."), + ("Population skewness.", "Asimmetria della popolazione."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Deviazione standard della popolazione contando il testo come 0 e i valori logici come 1/0.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Deviazione standard della popolazione di un campo sui record corrispondenti.", + ), + ("Population standard deviation.", "Deviazione standard della popolazione."), + ( + "Population variance counting text as 0 and logicals as 1/0.", + "Varianza della popolazione che conta il testo come 0 e i valori logici come 1/0.", + ), + ("Population variance of a field over the matching records.", "Varianza della popolazione di un campo rispetto ai record corrispondenti."), + ("Population variance.", "Varianza della popolazione."), + ("Positive square root.", "Radice quadrata positiva."), + ("Predicts a value along a linear trend.", "Prevede un valore lungo un trend lineare."), + ("Present value of a series of equal future payments.", "Valore attuale di una serie di pagamenti futuri uguali."), + ( + "Previous coupon date on or before settlement.", + "Data di pagamento degli interessi coincidente con la liquidazione o immediatamente precedente.", + ), + ("Price per 100 face value of a Treasury bill.", "Prezzo per 100 del valore nominale di un buono del Tesoro."), + ("Price per 100 face value of a discounted security.", "Prezzo per 100 del valore nominale di un'obbligazione a sconto."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Prezzo per 100 del valore nominale di un'obbligazione che paga interessi alla scadenza.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Prezzo per 100 del valore nominale di un'obbligazione che paga interessi periodici.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "Prezzo per 100 del valore nominale di un'obbligazione con un primo periodo di interesse irregolare.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Prezzo per 100 del valore nominale di un'obbligazione con un ultimo periodo di interesse irregolare.", + ), + ("Principal part of a given period's payment.", "Parte capitale del pagamento di un determinato periodo."), + ("Probability from Student's t-test.", "Probabilità dal test t di Student."), + ("Probability of a number of successes falling in a range.", "Probabilità che un numero di successi rientri in un intervallo."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Probabilità che un valore normale standard sia compreso tra la media e z.", + ), + ("Probability that values fall between two limits.", "Probabilità che i valori siano compresi tra due limiti."), + ("Product of complex numbers.", "Prodotto di numeri complessi."), + ("Quartile (0–4) of a data set, inclusive method.", "Quartile (0–4) di un set di dati, metodo inclusivo."), + ("Quartile (0–4) of a data set.", "Quartile (0–4) di un set di dati."), + ("Quartile (1–3) of a data set, exclusive method.", "Quartile (1–3) di un set di dati, metodo esclusivo."), + ("Quotient of two complex numbers.", "Quoziente di due numeri complessi."), + ("Raises a complex number to a power.", "Eleva un numero complesso a potenza."), + ("Raises a number to a power.", "Eleva un numero a potenza."), + ("Rank of a number within a list.", "Rango di un numero all'interno di un elenco."), + ( + "Rank of a number within a list; ties get the average rank.", + "Rango di un numero all'interno di un elenco; ai valori uguali viene assegnato il rango medio.", + ), + ( + "Rank of a number within a list; ties share the top rank.", + "Rango di un numero all'interno di un elenco; ai valori uguali viene assegnato il rango più alto.", + ), + ("Ratio of the factorial of a sum to the product of factorials.", "Rapporto tra il fattoriale di una somma e il prodotto dei fattoriali."), + ("Reads text in a given base as a number.", "Legge il testo in una determinata base come numero."), + ("Real coefficient of a complex number.", "Coefficiente reale di un numero complesso."), + ("Relative standing of a value as a fraction of the data set.", "Posizione relativa di un valore come frazione del set di dati."), + ("Relative standing of a value from 0 to 1 inclusive.", "Posizione relativa di un valore, espressa tra 0 e 1 inclusi."), + ("Relative standing of a value strictly between 0 and 1.", "Posizione relativa di un valore rigorosamente compreso tra 0 e 1."), + ("Remainder of a division, with the sign of the divisor.", "Resto di una divisione, con il segno del divisore."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Rimuove gli spazi iniziali e finali e comprime le serie di spazi in uno.", + ), + ("Removes non-printable control characters from text.", "Rimuove i caratteri di controllo non stampabili dal testo."), + ("Removes rows or columns from the start (or end) of an array.", "Rimuove righe o colonne dall'inizio (o dalla fine) di un array."), + ("Repeats a text a given number of times.", "Ripete un testo un determinato numero di volte."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Sostituisce le corrispondenze di un'espressione regolare, tutte o un'occorrenza scelta.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Sostituisce le occorrenze di un testo con un'altra, facoltativamente solo una determinata occorrenza.", + ), + ("Replaces part of a text by position.", "Sostituisce parte di un testo per posizione."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Restituisce 1 quando un numero è maggiore o uguale alla soglia, altrimenti 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Restituisce 1 quando due numeri sono uguali, altrimenti 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Restituisce un codice per il tipo di valore: 1 numero, 2 testo, 4 logico, 16 errore, 64 array.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Restituisce un fallback quando il valore è #N/A, altrimenti il valore."), + ( + "Returns a fallback when the value is an error, otherwise the value.", + "Restituisce un fallback quando il valore è un errore, altrimenti il valore.", + ), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Restituisce una proprietà dell'indicatore di prestazioni chiave da un cubo (nessuna connessione al cubo; #N/A).", + ), + ( + "Returns a member or tuple from a cube (no cube connections; #N/A).", + "Restituisce un membro o una tupla da un cubo (nessuna connessione al cubo; #N/A).", + ), + ( + "Returns a property of a cube member (no cube connections; #N/A).", + "Restituisce una proprietà di un membro del cubo (nessuna connessione al cubo; #N/A).", + ), + ( + "Returns an aggregated value from a cube (no cube connections; #N/A).", + "Restituisce un valore aggregato da un cubo (nessuna connessione al cubo; #N/A).", + ), + ("Returns characters from the middle of a text.", "Restituisce i caratteri dal centro di un testo."), + ("Returns information about the operating environment.", "Restituisce informazioni sull'ambiente operativo."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Restituisce un valore quando una condizione è TRUE e un altro quando è FALSE.", + ), + ("Returns the #N/A error value.", "Restituisce il valore di errore #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Restituisce la posizione in base 1 di un valore in una riga o colonna."), + ("Returns the ISO 8601 week number of a date.", "Restituisce il numero della settimana ISO 8601 di una data."), + ("Returns the Unicode code point of the first character of a text.", "Restituisce il punto di codice Unicode del primo carattere di un testo."), + ("Returns the Windows-1252 code of the first character of a text.", "Restituisce il codice Windows-1252 del primo carattere di un testo."), + ("Returns the character for a Unicode code point.", "Restituisce il carattere per un punto di codice Unicode."), + ( + "Returns the character for a code from the Windows-1252 character set.", + "Restituisce il carattere per un codice dal set di caratteri Windows-1252.", + ), + ("Returns the current date and time.", "Restituisce la data e l'ora correnti."), + ("Returns the current date.", "Restituisce la data corrente."), + ("Returns the date a number of months before or after a date.", "Restituisce la data un numero di mesi prima o dopo una data."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Restituisce la data a un certo numero di giorni lavorativi di distanza con un fine settimana personalizzato.", + ), + ( + "Returns the date a number of working days before or after a date.", + "Restituisce la data un numero di giorni lavorativi prima o dopo una data.", + ), + ("Returns the day of the month of a date.", "Restituisce il giorno del mese di una data."), + ("Returns the day of the week of a date as a number.", "Restituisce il giorno della settimana di una data sotto forma di numero."), + ("Returns the distinct rows or columns of an array.", "Restituisce le righe o le colonne distinte di un array."), + ( + "Returns the element, row or column of an array at the given position.", + "Restituisce l'elemento, la riga o la colonna di un array nella posizione specificata.", + ), + ( + "Returns the field value of the single record that meets the criteria.", + "Restituisce il valore del campo del singolo record che soddisfa i criteri.", + ), + ("Returns the first characters of a text.", "Restituisce i primi caratteri di un testo."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Restituisce la frazione di anno tra due date in base al conteggio dei giorni.", + ), + ("Returns the hour (0-23) of a time.", "Restituisce l'ora (0-23) di un orario."), + ("Returns the last characters of a text.", "Restituisce gli ultimi caratteri di un testo."), + ("Returns the last day of the month a number of months away.", "Restituisce l'ultimo giorno del mese a un certo numero di mesi di distanza."), + ("Returns the logical value FALSE.", "Restituisce il valore logico FALSE."), + ("Returns the logical value TRUE.", "Restituisce il valore logico TRUE."), + ("Returns the minute (0-59) of a time.", "Restituisce i minuti (0-59) di un tempo."), + ("Returns the month (1-12) of a date.", "Restituisce il mese (1-12) di una data."), + ( + "Returns the nth member of a cube set (no cube connections; #N/A).", + "Restituisce l'ennesimo membro di un set di cubi (nessuna connessione al cubo; #N/A).", + ), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Restituisce il numero che identifica un valore di errore, oppure #N/A se non si tratta di un errore.", + ), + ("Returns the number of days between two dates.", "Restituisce il numero di giorni tra due date."), + ("Returns the phonetic (furigana) text; here the text itself.", "Restituisce il testo fonetico (furigana); qui il testo stesso."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Restituisce la posizione di un valore in una riga o colonna con modalità di corrispondenza e ricerca flessibili.", + ), + ("Returns the second (0-59) of a time.", "Restituisce i secondi (0-59) di un tempo."), + ("Returns the text that comes after a delimiter.", "Restituisce il testo che segue un delimitatore."), + ("Returns the text that comes before a delimiter.", "Restituisce il testo che precede un delimitatore."), + ("Returns the value if it is text, otherwise empty text.", "Restituisce il valore se è testo, altrimenti testo vuoto."), + ("Returns the value paired with the first condition that is TRUE.", "Restituisce il valore abbinato alla prima condizione che risulta TRUE."), + ("Returns the week number of a date within its year.", "Restituisce il numero della settimana di una data compresa nel suo anno."), + ("Returns the year of a date.", "Restituisce l'anno di una data."), + ("Reverses a logical value.", "Inverte un valore logico."), + ("Right-tailed F probability.", "Probabilità F della coda destra."), + ("Right-tailed Student's t probability.", "Probabilità t di Student della coda destra."), + ("Right-tailed chi-squared probability.", "Probabilità chi quadrato della coda destra."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Arrotonda un numero e lo formatta come testo con decimali fissi e separatori delle migliaia opzionali.", + ), + ("Rounds a number away from zero to a given number of digits.", "Arrotonda un numero allontanandosi da zero a un determinato numero di cifre."), + ("Rounds a number down to a multiple of significance.", "Arrotonda un numero per difetto a un multiplo del valore specificato."), + ("Rounds a number down to the nearest integer or multiple.", "Arrotonda un numero per difetto al numero intero o al multiplo più vicino."), + ("Rounds a number down to the nearest integer.", "Arrotonda un numero per difetto all'intero più vicino."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Arrotonda un numero al numero di cifre indicato; i valori esattamente a metà vengono arrotondati allontanandosi da zero.", + ), + ("Rounds a number to the nearest multiple.", "Arrotonda un numero al multiplo più vicino."), + ("Rounds a number toward negative infinity to a multiple.", "Arrotonda un numero verso l'infinito negativo a un multiplo."), + ("Rounds a number toward positive infinity to a multiple.", "Arrotonda un numero verso l'infinito positivo a un multiplo."), + ("Rounds a number toward zero to a given number of digits.", "Arrotonda un numero verso zero a un determinato numero di cifre."), + ("Rounds a number up to a multiple of significance.", "Arrotonda un numero per eccesso a un multiplo del valore specificato."), + ("Rounds a number up to the nearest integer or multiple.", "Arrotonda un numero per eccesso al numero intero o al multiplo più vicino."), + ("Rounds away from zero to the nearest even integer.", "Arrotonda allontanandosi da zero all'intero pari più vicino."), + ("Rounds away from zero to the nearest odd integer.", "Arrotonda allontanandosi da zero all'intero dispari più vicino."), + ("Row number of a reference.", "Numero di riga di un riferimento."), + ("Running accumulation of an array.", "Accumulo progressivo di un array."), + ("Sample covariance of paired values.", "Covarianza campione di valori accoppiati."), + ("Sample skewness.", "Asimmetria del campione."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Deviazione standard campione contando il testo come 0 e i valori logici come 1/0.", + ), + ("Sample standard deviation of a field over the matching records.", "Deviazione standard campione di un campo sui record corrispondenti."), + ("Sample standard deviation.", "Deviazione standard del campione."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Varianza campionaria che considera il testo come 0 e i valori logici come 1/0."), + ("Sample variance of a field over the matching records.", "Varianza campionaria di un campo sui record corrispondenti."), + ("Sample variance.", "Varianza del campione."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Cerca in una riga o colonna e restituisce l’elemento, la riga o la colonna corrispondente di un’altra matrice.", + ), + ("Secant of a complex number.", "Secante di un numero complesso."), + ("Secant of an angle in radians.", "Secante di un angolo in radianti."), + ("Sheet number.", "Numero del foglio."), + ("Shifts the bits of a number left (right for negative shifts).", "Sposta i bit di un numero a sinistra (a destra per spostamenti negativi)."), + ("Shifts the bits of a number right (left for negative shifts).", "Sposta i bit di un numero a destra (a sinistra per spostamenti negativi)."), + ("Sine of a complex number.", "Seno di un numero complesso."), + ("Sine of an angle in radians.", "Seno di un angolo in radianti."), + ("Slope of the least-squares regression line.", "Pendenza della retta di regressione dei minimi quadrati."), + ("Smallest number (0 when there are none).", "Numero più piccolo (0 quando non ce ne sono)."), + ("Smallest number in a field of the matching records.", "Numero più piccolo in un campo dei record corrispondenti."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Conteggio di successi più piccolo la cui probabilità binomiale cumulativa raggiunge il valore alfa.", + ), + ( + "Smallest value among cells that meet every condition.", + "Valore più piccolo tra le celle del foglio di calcolo che soddisfano ogni condizione.", + ), + ("Smallest value counting text as 0 and logicals as 1/0.", "Valore più piccolo che conta il testo come 0 e i valori logici come 1/0."), + ( + "Sorts an array by the values of other arrays of matching size.", + "Ordina un array in base ai valori di altri array di dimensione corrispondente.", + ), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Ordina le righe (o colonne) di un array in base a una o più colonne.", + ), + ("Spells out a number in Thai words with Baht.", "Scrive un numero in parole tailandesi con Baht."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Divide il testo in una griglia di colonne e righe in corrispondenza dei delimitatori specificati.", + ), + ("Square of the correlation coefficient.", "Quadrato del coefficiente di correlazione."), + ("Square root of a complex number.", "Radice quadrata di un numero complesso."), + ("Square root of the number times pi.", "Radice quadrata del prodotto del numero per pi greco."), + ("Stacks arrays on top of each other.", "Impila gli array uno sopra l'altro."), + ("Standard error of predicted y values in a regression.", "Errore standard dei valori y previsti in una regressione."), + ("Standard normal cumulative probability.", "Probabilità cumulativa normale standard."), + ("Standard normal density or cumulative probability.", "Densità normale standard o probabilità cumulativa."), + ("Standard normal density.", "Densità normale standard."), + ("Straight-line depreciation for one period.", "Ammortamento a quote costanti per un periodo."), + ("Student's t density or left-tailed probability.", "Densità t di Student o probabilità della coda sinistra."), + ("Sum of a power series.", "Somma di una serie di potenze."), + ("Sum of complex numbers.", "Somma di numeri complessi."), + ("Sum of squared deviations from the mean.", "Somma dei quadrati delle deviazioni dalla media."), + ("Sum-of-years'-digits depreciation for a period.", "Ammortamento con cifre della somma degli anni per un periodo."), + ("Sums the differences of squares of matching elements.", "Somma le differenze dei quadrati degli elementi corrispondenti."), + ("Sums the squared differences of matching elements.", "Somma le differenze al quadrato degli elementi corrispondenti."), + ("Sums the sums of squares of matching elements.", "Somma le somme dei quadrati degli elementi corrispondenti."), + ("Swaps the rows and columns of an array.", "Scambia le righe e le colonne di un array."), + ("TRUE for references.", "TRUE per riferimenti."), + ("TRUE when a LAMBDA argument was left out.", "TRUE quando un argomento LAMBDA è stato omesso."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE quando un'espressione regolare corrisponde a un punto del testo."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE quando un numero dispari di argomenti è TRUE."), + ("TRUE when at least one argument is TRUE.", "TRUE quando almeno un argomento è TRUE."), + ("TRUE when every argument is TRUE.", "TRUE quando ogni argomento è TRUE."), + ("TRUE when the cell has a formula.", "TRUE quando la cella contiene una formula."), + ("TRUE when the integer part of a number is even.", "TRUE quando la parte intera di un numero è pari."), + ("TRUE when the integer part of a number is odd.", "TRUE quando la parte intera di un numero è dispari."), + ("TRUE when the value is TRUE or FALSE.", "TRUE quando il valore è TRUE o FALSE."), + ("TRUE when the value is a number.", "TRUE quando il valore è un numero."), + ("TRUE when the value is any error other than #N/A.", "TRUE quando il valore è un errore diverso da #N/A."), + ("TRUE when the value is any error.", "TRUE quando il valore è un errore qualsiasi."), + ("TRUE when the value is anything other than text.", "TRUE quando il valore è diverso dal testo."), + ("TRUE when the value is text.", "TRUE quando il valore è testo."), + ("TRUE when the value is the #N/A error.", "TRUE quando il valore è l'errore #N/A."), + ("TRUE when the value refers to an empty cell.", "TRUE quando il valore si riferisce a una cella vuota."), + ("TRUE when two texts are identical, including case.", "TRUE quando due testi sono identici, distinguendo tra maiuscole e minuscole."), + ("Tangent of a complex number.", "Tangente di un numero complesso."), + ("Tangent of an angle in radians.", "Tangente di un angolo in radianti."), + ("The constant pi to 15 digits.", "La costante pi greco a 15 cifre."), + ("The formula of a cell as text.", "La formula di una cella come testo."), + ("The gamma function.", "La funzione gamma."), + ("The k-th largest number in a data set.", "Il k-esimo numero più grande in un set di dati."), + ("The k-th smallest number in a data set.", "Il k-esimo numero più piccolo in un set di dati."), + ("The reference named by a text string.", "Il riferimento denominato da una stringa di testo."), + ("The sum of a subset as a fraction of the sum of all the values.", "La somma di un sottoinsieme come frazione della somma di tutti i valori."), + ("Total interest paid between two periods.", "Interessi totali pagati tra due periodi."), + ("Total principal repaid between two periods.", "Capitale totale rimborsato tra due periodi."), + ("Two-tailed Student's t probability.", "Probabilità t di Student a due code."), + ("Two-tailed inverse of Student's t distribution.", "Inversa a due code della distribuzione t di Student."), + ("Two-tailed p-value of an F-test for equality of variances.", "Valore p bilaterale di un test F per l’uguaglianza delle varianze."), + ("Values along a fitted exponential growth curve.", "Valori lungo una curva di crescita esponenziale adattata."), + ("Values along a least-squares linear fit.", "Valori lungo un adattamento lineare dei minimi quadrati."), + ("Vertical array of all the most frequent numbers.", "Array verticale di tutti i numeri più frequenti."), + ("Weibull density or probability.", "Densità o probabilità di Weibull."), + ("Writes a number in another base, padded with zeros.", "Scrive un numero in un'altra base, riempito con zeri."), + ("Y-intercept of the least-squares regression line.", "Intercetta Y della retta di regressione dei minimi quadrati."), + ("Yield of a Treasury bill.", "Rendimento di un buono del Tesoro."), + ("Yield of a security paying periodic interest.", "Rendimento di un'obbligazione che paga interessi periodici."), + ("Yield of a security with an odd first period.", "Rendimento di un'obbligazione con primo periodo di interesse irregolare."), + ("Yield of a security with an odd last period.", "Rendimento di un'obbligazione con un ultimo periodo di interessi irregolare."), + ("Z-score of a value.", "Punteggio Z di un valore."), + ("e raised to the given power.", "e elevato alla potenza specificata."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-esimo percentile, k da 0 a 1 compreso."), + ("k-th percentile, k strictly between 0 and 1.", "k-esimo percentile, k rigorosamente compreso tra 0 e 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "tipo_di_riferimento"), + ("actual_range", "intervallo_effettivo"), + ("aggregation", "aggregazione"), + ("alpha", "alfa"), + ("angle", "angolo"), + ("area_num", "numero_dell_area"), + ("argument", "argomento"), + ("array", "matrice"), + ("array_x", "matrice_di_valori_x"), + ("array_y", "matrice_di_valori_y"), + ("average_range", "intervallo_da_mediare"), + ("base", "base"), + ("basis", "base"), + ("beta", "beta"), + ("bins_array", "matrice_dei_limiti_del_contenitore"), + ("bottom", "limite_inferiore"), + ("by_array", "matrice_di_ordinamento"), + ("by_col", "per_colonna"), + ("calc_method", "metodo_di_calcolo"), + ("calculation", "calcolo"), + ("caption", "didascalia"), + ("case_sensitivity", "distinzione_tra_maiuscole_e_minuscole"), + ("coefficients", "coefficienti"), + ("col_delimiter", "delimitatore_col"), + ("col_fields", "campi_colonna"), + ("col_index_num", "indice_di_colonna"), + ("col_num", "numero_di_colonna"), + ("col_sort_order", "ordinamento_delle_colonne"), + ("col_total_depth", "profondità_totale_della_colonna"), + ("cols", "conteggio_colonne"), + ("column_num", "numero_di_colonna"), + ("columns", "conteggio_colonne"), + ("confidence_level", "livello_di_confidenza"), + ("connection", "connessione_dati"), + ("const", "costante"), + ("cost", "costo_iniziale"), + ("coupon", "tasso_cedolare"), + ("criteria", "criteri"), + ("criteria_range", "intervallo_di_criteri"), + ("cumulative", "distribuzione_cumulativa"), + ("data_all", "dati_tutti"), + ("data_array", "matrice_di_dati"), + ("data_completion", "completamento_dati"), + ("data_subset", "sottoinsieme_di_dati"), + ("database", "banca_dati"), + ("date", "data"), + ("date_purchased", "data_di_acquisto"), + ("date_text", "data_scritta_come_testo"), + ("dates", "date"), + ("day", "giorno"), + ("days", "giorni"), + ("decimal_dollar", "prezzo_decimale"), + ("decimal_separator", "separatore_decimale"), + ("decimals", "cifre_decimali"), + ("default_or_value", "predefinito_o_valore"), + ("deg_freedom", "gradi_di_libertà"), + ("delimiter", "delimitatore"), + ("denominator", "denominatore"), + ("dimension", "dimensione"), + ("discount", "tasso_di_sconto"), + ("divisor", "divisore"), + ("effect_rate", "tasso_effettivo"), + ("end_date", "data_di_fine"), + ("end_period", "ultimo_periodo"), + ("error_val", "valore_di_errore"), + ("exactly_once", "esattamente_una_volta"), + ("expected_range", "intervallo_previsto"), + ("expression", "espressione"), + ("factor", "fattore"), + ("field", "campo_del_database"), + ("field_headers", "intestazioni_di_campo"), + ("field_relationship", "relazione_tra_campi"), + ("filter_array", "matrice_di_filtri"), + ("finance_rate", "tasso_di_interesse_del_finanziamento"), + ("find_text", "trova_testo"), + ("first_coupon", "data_del_primo_pagamento_della_cedola"), + ("first_interest", "prima_data_di_pagamento_degli_interessi"), + ("first_period", "data_di_fine_del_primo_periodo"), + ("form", "forma"), + ("format", "Formato"), + ("format_text", "formato_testo"), + ("fraction", "frazione"), + ("fractional_dollar", "prezzo_frazionario"), + ("frequency", "Frequenza_pagamento_cedola"), + ("friendly_name", "nome_descrittivo"), + ("from_unit", "unità_di_misura_sorgente"), + ("full_precision", "massima_precisione"), + ("function", "funzione"), + ("function_num", "numero_della_funzione"), + ("fv", "valore_futuro"), + ("group_separator", "separatore_di_gruppo"), + ("guess", "stima_iniziale"), + ("height", "altezza"), + ("holidays", "festivi"), + ("hour", "ora"), + ("i_num", "coefficiente_immaginario"), + ("if_empty", "se_vuoto"), + ("if_not_found", "se_non_trovato"), + ("ignore", "ignora"), + ("ignore_empty", "ignora_vuoto"), + ("include", "includere"), + ("index_num", "numero_indice"), + ("info_type", "tipo_di_informazione"), + ("initial_value", "valore_iniziale"), + ("instance_num", "numero_dell_occorrenza"), + ("inumber", "numero_complesso"), + ("investment", "investimento"), + ("issue", "data_di_emissione"), + ("k", "k"), + ("known_xs", "valori_x_noti"), + ("known_ys", "valori_y_noti"), + ("kpi_name", "nome_dell_indicatore_chiave_di_prestazione"), + ("kpi_property", "proprietà_dell_indicatore_chiave_di_prestazione"), + ("lambda", "lambda"), + ("last_interest", "ultima_data_di_pagamento_degli_interessi"), + ("life", "vita_utile"), + ("link_location", "posizione_del_collegamento"), + ("logical", "valore_logico"), + ("logical_test", "condizione_logica"), + ("lookup_array", "matrice_ricerca"), + ("lookup_value", "valore_cercato"), + ("lookup_vector", "vettore_di_ricerca"), + ("lower_limit", "limite_inferiore"), + ("m", "m"), + ("match_end", "considera_la_fine_come_delimitatore"), + ("match_mode", "modalità_confronto"), + ("match_type", "metodo_di_corrispondenza"), + ("maturity", "data_di_scadenza"), + ("max", "massimo"), + ("max_range", "intervallo_di_valori_massimi"), + ("mean", "media_aritmetica"), + ("member_expression", "espressione_del_membro_del_cubo"), + ("method", "metodo"), + ("min", "minimo"), + ("min_length", "lunghezza_minima"), + ("min_range", "intervallo_di_valori_minimi"), + ("minute", "minuto"), + ("mode", "modalità_di_calcolo"), + ("month", "mese"), + ("months", "mesi"), + ("multiple", "multiplo"), + ("n", "n"), + ("name", "nome"), + ("new_text", "nuovo_testo"), + ("new_xs", "nuovi_valori_x"), + ("no_commas", "ometti_i_separatori_dei_gruppi_di_cifre"), + ("no_switch", "non_cambiare_il_metodo_di_ammortamento"), + ("nominal_rate", "tasso_nominale"), + ("nper", "numero_di_periodi"), + ("npery", "periodi_all_anno"), + ("num_bytes", "numero_di_byte"), + ("num_chars", "numero_di_caratteri"), + ("num_digits", "numero_di_cifre"), + ("number", "numero"), + ("number_chosen", "numero_selezionato"), + ("number_f", "numero_di_insuccessi"), + ("number_pop", "dimensione_della_popolazione"), + ("number_s", "numero_di_successi"), + ("number_sample", "dimensione_del_campione"), + ("number_times", "conteggio_delle_ripetizioni"), + ("numerator", "numeratore"), + ("occurrence", "occorrenza"), + ("old_text", "vecchio_testo"), + ("options", "opzioni"), + ("order", "ordine"), + ("pad_with", "valore_di_riempimento"), + ("par", "valore_nominale"), + ("parameter", "parametro"), + ("pattern", "modello_di_espressione_regolare"), + ("per", "numero_del_periodo"), + ("percent", "per_cento"), + ("period", "periodo"), + ("places", "numero_di_cifre_in_uscita"), + ("pmt", "pagamento"), + ("population_s", "successi_nella_popolazione"), + ("power", "potenza"), + ("pr", "prezzo"), + ("principal", "capitale"), + ("prob_range", "intervallo_prob"), + ("probability", "probabilità"), + ("probability_s", "probabilità_di_successo"), + ("property", "nome_della_proprietà"), + ("pv", "valore_attuale"), + ("quart", "quartile"), + ("radix", "base"), + ("range", "intervallo"), + ("range_lookup", "ricerca_intervallo"), + ("rank", "rango"), + ("rate", "tasso"), + ("real_num", "coefficiente_reale"), + ("redemption", "riscatto"), + ("ref", "riferimento"), + ("ref_text", "testo_di_riferimento"), + ("reference", "riferimento"), + ("reinvest_rate", "tasso_di_interesse_di_reinvestimento"), + ("relative_to", "relativo_a"), + ("replacement", "sostituzione"), + ("result", "risultato"), + ("result_vector", "vettore_dei_risultati"), + ("return_array", "matrice_restituita"), + ("return_mode", "modalità_di_ritorno"), + ("return_type", "tipo_restituito"), + ("row_delimiter", "delimitatore_di_riga"), + ("row_fields", "campi_riga"), + ("row_index_num", "indice_riga"), + ("row_num", "numero_di_riga"), + ("row_sort_order", "ordinamento_delle_righe"), + ("row_total_depth", "Profondità_totale_riga"), + ("rows", "conteggio_delle_righe"), + ("salvage", "valore_residuo"), + ("sample_s", "successi_nel_campione"), + ("scan_by_column", "scansiona_per_colonna"), + ("schedule", "serie_di_tassi"), + ("search_mode", "modalità_ricerca"), + ("seasonality", "stagionalità"), + ("second", "secondo"), + ("serial_number", "numero_di_serie"), + ("set", "insieme_di_membri_del_cubo"), + ("set_expression", "espressione_dell_insieme_di_membri_del_cubo"), + ("settlement", "data_di_regolamento"), + ("sheet_text", "testo_del_foglio"), + ("shift_amount", "numero_di_bit_di_spostamento"), + ("sigma", "sigma"), + ("significance", "multiplo_o_precisione"), + ("size", "dimensione"), + ("sort_by", "ordina_per"), + ("sort_index", "ordina_indice"), + ("sort_order", "ordinamento"), + ("source", "fonte"), + ("standard_dev", "deviazione_standard"), + ("start", "valore_iniziale"), + ("start_date", "data_di_inizio"), + ("start_num", "posizione_iniziale"), + ("start_period", "periodo_di_inizio"), + ("statistic_type", "tipo_di_statistica"), + ("stats", "statistiche"), + ("step", "passo"), + ("suffix", "suffisso"), + ("sum_range", "intervallo_di_somma"), + ("table_array", "matrice_tabella"), + ("tails", "numero_di_code_di_distribuzione"), + ("target", "valuta_di_destinazione"), + ("target_date", "data_prevista"), + ("text", "testo"), + ("time_text", "ora_scritta_come_testo"), + ("timeline", "cronologia"), + ("to_unit", "unità_di_misura_target"), + ("top", "limite_superiore"), + ("total_depth", "profondità_totale"), + ("trials", "prove"), + ("triangulation_precision", "precisione_della_triangolazione"), + ("trim_cols", "modalità_di_ritaglio_delle_colonne"), + ("trim_rows", "modalità_di_ritaglio_delle_righe"), + ("type", "tipo"), + ("type_text", "nome_del_tipo_di_dati"), + ("unit", "unità_di_misura"), + ("upper_limit", "limite_superiore"), + ("url", "URL"), + ("value", "valore"), + ("value_if_error", "risultato_in_caso_di_errore"), + ("value_if_false", "risultato_quando_la_condizione_è_falsa"), + ("value_if_na", "risultato_per_l_errore_non_disponibile"), + ("value_if_true", "risultato_quando_la_condizione_è_vera"), + ("values", "valori"), + ("vector", "vettore"), + ("weekend", "fine_settimana"), + ("whole_number", "numero_intero"), + ("width", "larghezza"), + ("within_text", "testo_in_cui_effettuare_la_ricerca"), + ("wrap_count", "numero_di_valori_per_riga_o_colonna"), + ("x", "x"), + ("x_num", "coordinata_x"), + ("x_range", "intervallo_x"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "coordinata_y"), + ("year", "anno"), + ("yld", "rendimento_dell_investimento"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/ja.rs b/crates/ui-egui/src/i18n/ja.rs index d558be6ece..2889de622d 100644 --- a/crates/ui-egui/src/i18n/ja.rs +++ b/crates/ui-egui/src/i18n/ja.rs @@ -416,6 +416,31 @@ pub(super) const CORE: &[(&str, &str)] = &[ ("Print Entire Workbook", "ブック全体を印刷"), ("Fit Sheet on One Page", "シートを 1 ページに印刷"), ("Page Setup…", "ページ設定…"), + ("a linked (not embedded) picture was skipped", "リンクされた画像(埋め込みなし)はスキップされました。"), + ("missing picture {target}", "画像 {target} が見つかりません。"), + ("chart {target} has no supported plot and was skipped", "グラフ {target} にサポートされているプロットがないため、スキップされました。"), + ( + "a histogram, waterfall, treemap… chart without its chart part was skipped", + "グラフパーツがないヒストグラム、ウォーターフォール、ツリーマップなどのグラフはスキップされました。", + ), + ("an embedded object (diagram, OLE…) was skipped", "埋め込みオブジェクト(図解、OLE など)はスキップされました。"), + ("grouped shapes are not supported and were skipped", "グループ化された図形はサポートされていないため、スキップされました。"), + ( + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported.", + "XLSB はデータのみをインポートします。数式は保存済みの結果に変換され、再計算されません。書式、グラフ、画像、マクロなどの機能はインポートされず、日付、通貨、パーセンテージが数値として表示される場合があります。新しい .xlsx ファイルとして保存してください。XLSB 形式での保存はサポートされていません。", + ), + ("XLSB module sheets were skipped.", "XLSB のモジュールシートはスキップされました。"), + ("XLSB non-worksheet sheets were skipped.", "XLSB のワークシート以外のシートはスキップされました。"), + ( + "Unsupported XLSB future-record and alternate-content blocks were skipped.", + "サポートされていない XLSB の将来レコードと代替コンテンツブロックはスキップされました。", + ), + ("Invalid XLSB merged ranges were skipped.", "無効な XLSB の結合範囲はスキップされました。"), + ( + "{count} items in this file were handled differently. First: {warning}", + "このファイルの {count} 項目は通常とは異なる方法で処理されました。最初の項目: {warning}", + ), + ("Page {page}", "{page} ページ"), ("Page {page} of {pages}", "{page} / {pages} ページ"), ("Nothing to print.", "印刷する内容がありません。"), ("Previous page", "前のページ"), @@ -563,6 +588,7 @@ pub(super) const DIALOGS: &[(&str, &str)] = &[ ("Values and number formats", "値と数値の書式"), ("Operation", "演算"), ("Add", "加算"), + ("Paste Special|Add", "加算"), ("Subtract", "減算"), ("Multiply", "乗算"), ("Divide", "除算"), @@ -602,6 +628,7 @@ pub(super) const DIALOGS: &[(&str, &str)] = &[ ("Tab", "タブ"), ("Semicolon", "セミコロン"), ("Comma", "コンマ"), + ("Text to Columns|Comma", "コンマ"), ("Space", "スペース"), ("Other:", "その他:"), ("Treat consecutive delimiters as one", "連続した区切り文字は 1 文字として扱う"), @@ -753,7 +780,7 @@ pub(super) const DIALOGS: &[(&str, &str)] = &[ ("Search:", "検索:"), ("e.g. lookup, average, date", "例: 検索、平均、日付"), ("Date & Time", "日付/時刻"), - ("Lookup & Reference", "検索/行列"), + ("Lookup & Reference", "検索/参照"), ("Math & Trig", "数学/三角"), ("Statistical", "統計"), ("Engineering", "エンジニアリング"), @@ -1171,6 +1198,24 @@ pub(super) const EXTRA: &[(&str, &str)] = &[ "Drag to fill cells. Drag from inside a cell to select a range.", "ドラッグしてセルをオートフィルします。セルの内側からドラッグすると範囲を選択します。", ), + ("Generated|Column", "列"), + ("Generated|Row", "行"), + ("Book", "ブック"), + ("Sheet", "シート"), + ("Count Numbers", "数値の個数"), + ("Nothing to paste.", "貼り付けるデータがありません。"), + ("No cells were found.", "セルが見つかりません。"), + ("Or select a category:", "またはカテゴリを選択:"), + ("Most Recently Used", "最近使った関数"), + ("Insert Function…", "関数の挿入…"), + ("Paste Names…", "名前の貼り付け…"), + ("Macro name:", "マクロ名:"), + ("Shortcut key:", "ショートカットキー:"), + ("Description:", "説明:"), + ("Check for Updates…", "更新プログラムの確認…"), + ("Checking for updates…", "更新プログラムを確認中…"), + ("Could not check for updates.", "更新プログラムを確認できませんでした。"), + ("Check Again", "再確認"), ]; /// Translates an interface label; `None` for a label the catalog does not know, so `i18n.rs` can diff --git a/crates/ui-egui/src/i18n/ja_functions.rs b/crates/ui-egui/src/i18n/ja_functions.rs new file mode 100644 index 0000000000..dbe1915906 --- /dev/null +++ b/crates/ui-egui/src/i18n/ja_functions.rs @@ -0,0 +1,891 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "正の場合は 1、負の場合は -1、ゼロの場合は 0。"), + ("A random integer between two bounds, inclusive.", "両端を含む指定範囲内のランダムな整数を返します。"), + ("A random number between 0 and 1, recalculated every time.", "毎回再計算される 0 から 1 までの乱数。"), + ("A range or array without its blank outer rows and columns.", "外周の空白行と空白列を取り除いた範囲または配列。"), + ("A reference shifted from a starting point.", "開始位置から指定量だけ移動した参照。"), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "FORECAST.ETS モデルの統計量: 1 アルファ、2 ベータ、3 ガンマ、4 MASE、5 SMAPE、6 MAE、7 RMSE、8 ステップ幅。", + ), + ("A subtotal that can skip hidden rows.", "非表示の行をスキップできる小計。"), + ("Absolute value (modulus) of a complex number.", "複素数の絶対値(大きさ)。"), + ("Absolute value of a number.", "数値の絶対値。"), + ("Accrued interest of a security paying interest at maturity.", "満期時に利息が支払われる証券の経過利息。"), + ("Accrued interest of a security paying periodic interest.", "定期的に利息が支払われる証券の経過利息。"), + ("Accumulates an array into one value.", "配列を 1 つの値に累積します。"), + ("Adds all the numbers in the arguments.", "引数として指定したすべての数値を合計します。"), + ("Adds the cells that meet a condition.", "条件を満たすスプレッドシートのセルの数値の合計を返します。"), + ("Adds the cells that meet every condition.", "すべての条件を満たすスプレッドシートのセルの数値の合計を返します。"), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "条件を満たすレコードについて、データベース フィールドの数値の合計を返します。", + ), + ("Adds the squares of the numbers.", "2 乗した数値の合計を返します。"), + ("Amount received at maturity for a fully invested security.", "全額投資した証券について満期時に受け取る金額。"), + ("An aggregate that can skip hidden rows and errors.", "非表示の行とエラーをスキップできる集計。"), + ("Angle of a complex number in radians.", "ラジアン単位の複素数の角度。"), + ("Angle of the point (x, y) from the x-axis in radians.", "x 軸からの点 (x, y) の角度 (ラジアン単位)。"), + ("Annual yield of a discounted security.", "割引証券の年間利回り。"), + ("Annual yield of a security paying interest at maturity.", "満期時に利息が支払われる証券の年間利回り。"), + ("Applies a LAMBDA to each column.", "LAMBDA を各列に適用します。"), + ("Applies a LAMBDA to each row.", "LAMBDA を各行に適用します。"), + ("Applies a LAMBDA to each value.", "各値に LAMBDA を適用します。"), + ("Approximate lookup in a sorted vector or the first row/column of an array.", "ソートされたベクトルまたは配列の最初の行/列の近似検索。"), + ("Arccosine in radians.", "ラジアン単位の逆余弦。"), + ("Arccotangent in radians (0 to pi).", "ラジアン単位の逆余接 (0 ~ pi)。"), + ("Arcsine in radians.", "ラジアン単位の逆正弦。"), + ("Arctangent in radians.", "逆正接 (ラジアン単位)。"), + ("Arithmetic mean of the numbers.", "数値の算術平均。"), + ("Average absolute deviation from the mean.", "平均からの平均絶対偏差。"), + ("Average of the cells that meet a condition.", "条件を満たすスプレッドシートのセルの平均。"), + ("Average of the cells that meet every condition.", "すべての条件を満たすスプレッドシートのセルの平均。"), + ("Averages the numbers in a field of the records that meet the criteria.", "基準を満たすレコードのフィールドの数値を平均します。"), + ("Base-10 logarithm of a complex number.", "複素数の 10 を底とする対数。"), + ("Base-10 logarithm.", "10 を底とする対数。"), + ("Base-2 logarithm of a complex number.", "複素数の底 2 の対数。"), + ("Bessel function of the first kind, J_n(x).", "第 1 種ベッセル関数 J_n(x)。"), + ("Bessel function of the second kind, Y_n(x).", "第 2 種ベッセル関数 Y_n(x)。"), + ("Beta distribution density or probability.", "ベータ分布密度または確率。"), + ("Binomial probability.", "二項確率。"), + ("Bitwise AND of two non-negative integers.", "2 つの非負整数のビット単位の AND。"), + ("Bitwise OR of two non-negative integers.", "2 つの非負整数のビット単位の OR。"), + ("Bitwise exclusive OR of two non-negative integers.", "2 つの非負の整数のビット単位の排他的な OR。"), + ("Bond-equivalent yield of a Treasury bill.", "財務省短期証券の債券換算利回り。"), + ("Breaks a row or column into columns of the given length.", "行または列を指定された長さの列に分割します。"), + ("Breaks a row or column into rows of the given length.", "行または列を指定された長さの行に分割します。"), + ("Builds a cell address as text from row and column numbers.", "行番号と列番号からセルアドレスをテキストとして構築します。"), + ("Builds a complex number as text from real and imaginary parts.", "実数部と虚数部から複素数をテキストとして構築します。"), + ("Builds a date serial number from a year, month and day.", "年、月、日から日付のシリアル番号を構築します。"), + ( + "Builds a summary table grouping values by row and column fields.", + "行フィールドと列フィールドごとに値をグループ化した要約テーブルを作成します。", + ), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "時、分、秒から時刻 (1 日の一部) を計算します。"), + ("Builds an array from a LAMBDA.", "LAMBDA から配列を構築します。"), + ("Builds an array of evenly stepped numbers.", "均等にステップされた数値の配列を構築します。"), + ("Builds an array of random numbers in a range.", "範囲内の乱数の配列を構築します。"), + ("Byte version of FIND.", "FIND のバイト バージョン。"), + ("Byte version of LEFT (same as LEFT for single-byte text).", "LEFT のバイト バージョン (シングルバイト テキストの LEFT と同じ)。"), + ("Byte version of LEN (same as LEN for single-byte text).", "LEN のバイト バージョン (シングルバイト テキストの LEN と同じ)。"), + ("Byte version of MID (same as MID for single-byte text).", "MID のバイト バージョン (シングルバイト テキストの MID と同じ)。"), + ("Byte version of REPLACE.", "REPLACE のバイト バージョン。"), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "RIGHT のバイト バージョン (シングルバイト テキストの RIGHT と同じ)。"), + ("Byte version of SEARCH.", "SEARCHのバイトバージョン。"), + ("Capitalises the first letter of each word and lower-cases the rest.", "各単語の最初の文字を大文字にし、残りを小文字にします。"), + ("Chi-squared density or left-tailed probability.", "カイ二乗密度または左側確率。"), + ("Chi-squared test of independence.", "独立性のカイ二乗検定。"), + ("Column number of a reference.", "参照の列番号を返します。"), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "式を値のリストと比較し、最初に一致したものと組み合わせた結果を返します。", + ), + ("Complementary error function, 1 - ERF(x).", "相補誤差関数、1 - ERF(x)。"), + ("Complex conjugate of a complex number.", "複素数の複素共役。"), + ("Confidence interval half-width using Student's t distribution.", "スチューデントの t 分布を使用した信頼区間の半幅。"), + ("Confidence interval half-width using the normal distribution.", "正規分布を使用した信頼区間の半幅。"), + ("Converts Roman numerals to a number.", "ローマ数字を数字に変換します。"), + ("Converts a binary number to decimal.", "2 進数を 10 進数に変換します。"), + ("Converts a binary number to hexadecimal.", "2 進数を 16 進数に変換します。"), + ("Converts a binary number to octal.", "2 進数を 8 進数に変換します。"), + ("Converts a date written as text into a date serial number.", "テキストで書かれた日付を日付のシリアル値に変換します。"), + ("Converts a decimal number to binary.", "10 進数を 2 進数に変換します。"), + ("Converts a decimal number to hexadecimal.", "10 進数を 16 進数に変換します。"), + ("Converts a decimal number to octal.", "10 進数を 8 進数に変換します。"), + ("Converts a decimal price to fractional notation.", "小数点の価格を分数表記に変換します。"), + ("Converts a fractional price notation to a decimal number.", "価格の分数表記を 10 進数に変換します。"), + ("Converts a hexadecimal number to binary.", "16 進数を 2 進数に変換します。"), + ("Converts a hexadecimal number to decimal.", "16 進数を 10 進数に変換します。"), + ("Converts a hexadecimal number to octal.", "16 進数を 8 進数に変換します。"), + ("Converts a measurement from one unit to another.", "測定値をある単位から別の単位に変換します。"), + ("Converts a number to Roman numerals in one of five styles.", "数値を 5 つのスタイルのいずれかでローマ数字に変換します。"), + ("Converts a time written as text into a fraction of a day.", "テキストとして書かれた時刻を 1 日の小数に変換します。"), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "値を数値に変換します。数値はそのままで、TRUE は 1、その他はすべて 0 です。", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "配列をコンマ リストまたは厳密な配列定数としてテキストに変換します。", + ), + ("Converts an octal number to binary.", "8 進数を 2 進数に変換します。"), + ("Converts an octal number to decimal.", "8 進数を 10 進数に変換します。"), + ("Converts an octal number to hexadecimal.", "8 進数を 16 進数に変換します。"), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "任意の値をテキストに変換します。オプションで厳密な (引用符付き) 形式に変換します。", + ), + ("Converts between the euro and the former euro member currencies at the fixed rates.", "ユーロと旧ユーロ加盟通貨を固定レートで両替します。"), + ("Converts degrees to radians.", "度をラジアンに変換します。"), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "全角文字を半角に変換します(半角文字の場合は変化しません)。", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "半角文字を全角文字に変換します(このロケールでは変更ありません)。", + ), + ("Converts radians to degrees.", "ラジアンを度に変換します。"), + ("Converts text that looks like a number, date or time into a number.", "数値、日付、時刻のように見えるテキストを数値に変換します。"), + ( + "Converts text to a number using the given decimal and group separators.", + "指定された小数点およびグループ区切り文字を使用してテキストを数値に変換します。", + ), + ("Converts text to lower case.", "テキストを小文字に変換します。"), + ("Converts text to upper case.", "テキストを大文字に変換します。"), + ("Correlation coefficient of two data sets.", "2 つのデータセットの相関係数。"), + ("Cosecant of a complex number.", "複素数の余割。"), + ("Cosecant of an angle in radians.", "ラジアン単位の角度のコセカント。"), + ("Cosine of a complex number.", "複素数のコサイン。"), + ("Cosine of an angle in radians.", "ラジアン単位の角度のコサイン。"), + ("Cotangent of a complex number.", "複素数の余接。"), + ("Cotangent of an angle in radians.", "ラジアン単位の角度の余接。"), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "1 年 360 日における 2 つの日付間の日数をカウントします (US またはヨーロッパの方法)。", + ), + ("Counts empty cells and empty text in a range.", "範囲内の空のスプレッドシート セルと空のテキストをカウントします。"), + ("Counts how many values fall into each bin, as a vertical array.", "各ビンに入る値の数を垂直配列としてカウントします。"), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "条件を満たすレコードの指定フィールドにある空白でないセル(または条件を満たすレコード)を数えます。", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "条件を満たすレコードの指定フィールドにある数値セル(または条件を満たすレコード)を数えます。", + ), + ("Counts the cells that meet a condition.", "条件を満たすスプレッドシートのセルをカウントします。"), + ("Counts the cells that meet every condition.", "すべての条件を満たすスプレッドシートのセルをカウントします。"), + ("Counts the characters in a text.", "テキスト内の文字数をカウントします。"), + ("Counts the columns in an array or range.", "配列または範囲内の列をカウントします。"), + ("Counts the items in a cube set (no cube connections; #N/A).", "キューブ セット内の項目をカウントします (キューブ接続なし、#N/A)。"), + ("Counts the non-empty values.", "空でない値をカウントします。"), + ("Counts the numbers.", "数字を数えます。"), + ("Counts the rows in an array or range.", "配列または範囲内の行をカウントします。"), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "2 つの日付間の年数、月数、または日数を整数で求めます。単位: Y、M、D、MD、YM、または YD。", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "休日を除く、2 つの日付の間の営業日 (月曜から金曜) をカウントします。", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "週末の曜日を指定し、祝日を除いて 2 つの日付間の営業日数を求めます。", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "リンクを作成します。セルにはフレンドリ名、またはリンク自体が表示されます。", + ), + ("Creates a reusable custom function.", "再利用可能なカスタム関数を作成します。"), + ("Cumulative beta probability.", "累積ベータ確率。"), + ("Cumulative lognormal probability.", "累積対数正規確率。"), + ("Cuts off the fractional part of a number at the given digits.", "数値を指定した桁で切り捨てます(ゼロに近づく方向)。"), + ("Days from settlement to the next coupon date.", "決済日から次回利払日までの日数を求めます。"), + ("Days from the start of the coupon period to settlement.", "利払期間の開始日から決済日までの日数を求めます。"), + ("Days in the coupon period that contains settlement.", "決済日を含む利払期間の日数を求めます。"), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "定額法に切り替えた、任意の期間にわたる定率法による減価償却。", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "キューブ メンバーのセットを定義します (キューブ接続なし、#N/A)。"), + ("Determinant of a square matrix.", "正方行列の行列式。"), + ("Difference of two complex numbers.", "2 つの複素数の差。"), + ("Discount rate of a security.", "証券の割引率。"), + ("Double factorial of a number.", "数値の二重階乗。"), + ("Double-declining-balance (or other factor) depreciation for a period.", "倍額定率法(または指定した償却係数)による指定期間の減価償却費。"), + ("Effective annual rate from a nominal rate and compounding periods.", "名目金利と複利期間から得られる実効年率。"), + ("Equivalent interest rate for the growth of an investment.", "投資の成長に対する等価金利。"), + ("Error function integrated from 0 to a limit, or between two limits.", "0 から限界まで、または 2 つの限界の間で積分された誤差関数。"), + ("Error function integrated from 0 to x.", "0 から x まで積分した誤差関数。"), + ("Excess kurtosis of a sample.", "標本の超過尖度。"), + ("Exponential curve coefficients and optional regression statistics.", "指数曲線係数とオプションの回帰統計。"), + ("Exponential distribution density or probability.", "指数分布密度または確率。"), + ("Exponential of a complex number.", "複素数の指数関数。"), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "XPath を使用して XML からデータを抽出します (使用できません。#VALUE! を返します)。", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "正規表現の最初の一致、すべての一致、またはキャプチャ グループを抽出します。", + ), + ("F distribution density or left-tailed probability.", "F 分布密度または左側確率。"), + ("Factorial of a number.", "数値の階乗。"), + ( + "Fetches data from a web service (not available; returns #VALUE!).", + "Web サービスからデータを取得します (利用できません。#VALUE! を返します)。", + ), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "テーブルの最初の列の値を検索し、別の列の同じ行の値を返します。", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "テーブルの最初の行の値を検索し、別の行の同じ列の値を返します。", + ), + ("Finds the position of one text in another (case-sensitive).", "あるテキストの別のテキストの位置を検索します (大文字と小文字は区別されます)。"), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "大文字と小文字を無視し、ワイルドカードを許可して、あるテキストの別のテキスト内の位置を検索します。", + ), + ("Fisher transformation.", "フィッシャー変換。"), + ("Fixed-declining-balance depreciation for a period.", "期間の固定定率減価償却。"), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "配列を単一の列にフラット化し、オプションで空白やエラーをスキップします。", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "配列を単一の行に平坦化し、オプションで空白やエラーをスキップします。", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "加法的(AAA)指数平滑法により値を予測します。"), + ("Formats a number as currency text, like DOLLAR.", "数値を DOLLAR などの通貨テキストとしてフォーマットします。"), + ("Formats a number as currency text.", "数値を通貨テキストとしてフォーマットします。"), + ("Formats a number as text.", "数値をテキストとしてフォーマットします。"), + ("French degressive depreciation with a life-based coefficient.", "耐用年数ベースの係数を持つフランスの逓減減価償却。"), + ("French linear depreciation prorated for the first period.", "初回の期間を日割り計算するフランスの定額法による減価償却費。"), + ("Future value of a principal after a series of compound rates.", "一連の複利率後の元本の将来価値。"), + ("Future value of an investment with constant payments and rate.", "一定の支払いと金利による投資の将来価値。"), + ("Gamma distribution density or probability.", "ガンマ分布密度または確率。"), + ("Geometric mean of positive numbers.", "正の数の幾何平均。"), + ("Greatest common divisor of integers.", "整数の最大公約数。"), + ("Groups rows by key fields and aggregates the values of each group.", "行をキー フィールドごとにグループ化し、各グループの値を集計します。"), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "配列を指定されたサイズまで拡大し、新しいスプレッドシートのセルにパッド値を入力します。", + ), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "FORECAST.ETS の予測値に対する信頼区間の半幅。"), + ("Harmonic mean of positive numbers.", "正の数の調和平均。"), + ("Hyperbolic cosecant of a complex number.", "複素数の双曲線余割。"), + ("Hyperbolic cosecant.", "双曲線余割。"), + ("Hyperbolic cosine of a complex number.", "複素数の双曲線余弦。"), + ("Hyperbolic cosine.", "双曲線余弦。"), + ("Hyperbolic cotangent.", "双曲線余接。"), + ("Hyperbolic secant of a complex number.", "複素数の双曲線正割。"), + ("Hyperbolic secant.", "双曲線正割。"), + ("Hyperbolic sine of a complex number.", "複素数の双曲線正弦。"), + ("Hyperbolic sine.", "双曲線正弦。"), + ("Hyperbolic tangent.", "双曲線正接。"), + ("Hypergeometric probability of an exact count.", "正確なカウントの超幾何確率。"), + ("Hypergeometric probability.", "超幾何確率。"), + ("Identity matrix of the given size.", "指定されたサイズの単位行列。"), + ("Imaginary coefficient of a complex number.", "複素数の虚数係数。"), + ("Information about a cell.", "セルに関する情報。"), + ("Integer part of a division.", "除算の整数部分。"), + ("Interest paid in a period of a loan with even principal payments.", "元金均等返済のローン期間中に支払われる利息。"), + ("Interest part of a given period's payment.", "特定期間の支払いの利息部分。"), + ("Interest rate of a fully invested security.", "全額投資した証券の利率。"), + ("Interest rate per period of an annuity, found iteratively.", "年金の期間ごとの利率。反復的に求められます。"), + ("Internal rate of return of cash flows on specific dates.", "特定の日付におけるキャッシュ フローの内部収益率。"), + ("Internal rate of return of periodic cash flows.", "定期的なキャッシュ フローの内部収益率。"), + ("Inverse hyperbolic cosine.", "逆双曲線余弦。"), + ("Inverse hyperbolic cotangent.", "逆双曲線余接。"), + ("Inverse hyperbolic sine.", "逆双曲線正弦。"), + ("Inverse hyperbolic tangent.", "逆双曲線正接。"), + ("Inverse of a square matrix.", "正方行列の逆行列。"), + ("Inverse of the Fisher transformation.", "フィッシャー変換の逆変換。"), + ("Inverse of the cumulative beta distribution.", "累積ベータ分布の逆関数。"), + ("Inverse of the cumulative lognormal distribution.", "累積対数正規分布の逆関数。"), + ("Inverse of the gamma cumulative distribution.", "ガンマ累積分布の逆関数。"), + ("Inverse of the left-tailed F distribution.", "左裾 F 分布の逆関数。"), + ("Inverse of the left-tailed chi-squared distribution.", "左尾カイ二乗分布の逆関数。"), + ("Inverse of the normal cumulative distribution.", "正規累積分布の逆関数。"), + ("Inverse of the right-tailed F distribution.", "右裾 F 分布の逆関数。"), + ("Inverse of the right-tailed chi-squared distribution.", "右尾カイ二乗分布の逆関数。"), + ("Inverse of the standard normal cumulative distribution.", "標準正規累積分布の逆関数。"), + ("Joins several text values into one.", "複数のテキスト値を 1 つに結合します。"), + ("Joins text from values and every cell of ranges, without a separator.", "値のテキストと範囲のすべてのセルを区切り文字なしで結合します。"), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "値と範囲のテキストを区切り文字で結合し、オプションで空の項目をスキップします。", + ), + ("Keeps rows or columns from the start (or end) of an array.", "配列の先頭 (または末尾) からの行または列を保持します。"), + ("Keeps the rows or columns of an array whose include flag is TRUE.", "インクルードフラグが TRUE である配列の行または列を保持します。"), + ("Largest number (0 when there are none).", "最大の数値(無い場合は0)。"), + ("Largest number in a field of the matching records.", "一致するレコードのフィールド内の最大の数値。"), + ("Largest value among cells that meet every condition.", "すべての条件を満たすスプレッドシートのセルの最大値。"), + ("Largest value counting text as 0 and logicals as 1/0.", "文字列を 0、論理値を 1 または 0 として扱い、最大値を返します。"), + ("Least common multiple of integers.", "整数の最小公倍数。"), + ("Least-squares line coefficients and optional regression statistics.", "最小二乗線係数とオプションの回帰統計。"), + ("Left-tailed inverse of Student's t distribution.", "Student の t 分布の左裾逆関数。"), + ("Length of the repeating pattern detected in a time series.", "時系列で検出された繰り返しパターンの長さ。"), + ("Logarithm to the given base (10 by default).", "指定した底の対数を返します。底の既定値は 10 です。"), + ("Lognormal density or probability.", "対数正規密度または確率。"), + ("Macaulay duration of a security with periodic interest.", "定期的に利息を支払う証券のマコーレー・デュレーションを求めます。"), + ("Matrix product of two arrays.", "2 つの配列の行列積。"), + ("Mean after trimming a fraction of points from both ends.", "データの両端から指定割合の値を除外した平均。"), + ("Mean counting text as 0 and logical values as 1 or 0.", "文字列を 0、論理値を 1 または 0 として扱い、平均を求めます。"), + ("Middle value of the numbers.", "数値の中央値。"), + ("Modified Bessel function of the first kind, I_n(x).", "第 1 種の修正ベッセル関数 I_n(x)。"), + ("Modified Bessel function of the second kind, K_n(x).", "第 2 種の修正ベッセル関数 K_n(x)。"), + ("Modified duration of a security with periodic interest.", "定期的に利息を支払う証券の修正デュレーションを求めます。"), + ("Modified internal rate of return using separate borrow and reinvest rates.", "借入金利と再投資金利を別々に指定した修正内部収益率。"), + ("Most frequently occurring number.", "最も頻繁に出現する数値。"), + ("Multiplies all the numbers in the arguments.", "引数内のすべての数値を乗算します。"), + ("Multiplies matching elements of equally sized arrays and adds the products.", "同じサイズの配列の一致する要素を乗算し、その積を加算します。"), + ("Multiplies the numbers in a field of the matching records.", "一致するレコードのフィールドの数値を乗算します。"), + ("Names intermediate results.", "中間結果に名前を付けます。"), + ("Natural log of the gamma function.", "ガンマ関数の自然対数。"), + ("Natural logarithm of a complex number.", "複素数の自然対数。"), + ("Natural logarithm.", "自然対数。"), + ("Negative binomial probability.", "負の二項確率。"), + ("Net present value of cash flows on specific dates.", "特定の日付のキャッシュ フローの正味現在価値。"), + ("Net present value of periodic cash flows at a discount rate.", "割引率での定期キャッシュ フローの正味現在価値。"), + ("Next coupon date after settlement.", "決済日後の次回利払日を返します。"), + ("Nominal annual rate from an effective rate and compounding periods.", "実効金利と複利期間から得た名目年率。"), + ("Normal distribution density or cumulative probability.", "正規分布密度または累積確率。"), + ("Number of areas in a reference.", "参照内の領域の数。"), + ("Number of combinations with repetition.", "繰り返しのある組み合わせの数。"), + ("Number of combinations without repetition.", "繰り返しのない組み合わせの数。"), + ("Number of coupons payable between settlement and maturity.", "決済日から満期日までの利払い回数を求めます。"), + ("Number of ordered selections with repetition.", "繰り返しのある順序付けされた選択の数。"), + ("Number of ordered selections without repetition.", "繰り返しのない順序付けされた選択の数。"), + ("Number of periods needed to pay off or accumulate an amount.", "金額を返済または蓄積するために必要な期間の数。"), + ("Number of sheets.", "枚数。"), + ("One- or two-tailed Student's t probability.", "片側または両側の Student の t 確率。"), + ("One-tailed probability of a z-test.", "Z 検定の片側確率。"), + ("Pearson product-moment correlation coefficient.", "ピアソン積率相関係数。"), + ("Percent-encodes text for use in a URL.", "URL で使用するテキストをパーセント エンコードします。"), + ("Periodic payment for a loan or annuity with constant payments and rate.", "一定の支払いと金利によるローンまたは年金の定期的な支払い。"), + ("Periods needed for an investment to grow to a target value.", "投資が目標値に達するまでに必要な期間。"), + ("Picks a value from the list by its position.", "位置に基づいてリストから値を選択します。"), + ("Picks columns of an array by position (negative counts from the end).", "位置に基づいて配列の列を選択します(負の位置は末尾から数えます)。"), + ("Picks rows of an array by position (negative counts from the end).", "位置に基づいて配列の行を選択します(負の位置は末尾から数えます)。"), + ("Places arrays side by side.", "配列を並べて配置します。"), + ("Poisson probability.", "ポアソン確率。"), + ("Population covariance of paired values.", "ペアの値の母共分散。"), + ("Population skewness.", "母集団の歪度。"), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "文字列を 0、論理値を 1 または 0 として扱い、母集団の標準偏差を求めます。", + ), + ("Population standard deviation of a field over the matching records.", "一致するレコードにわたるフィールドの母集団標準偏差。"), + ("Population standard deviation.", "母集団の標準偏差。"), + ("Population variance counting text as 0 and logicals as 1/0.", "文字列を 0、論理値を 1 または 0 として扱い、母分散を求めます。"), + ("Population variance of a field over the matching records.", "一致するレコードにわたるフィールドの母集団分散。"), + ("Population variance.", "母集団の分散。"), + ("Positive square root.", "正の平方根。"), + ("Predicts a value along a linear trend.", "線形トレンドに沿って値を予測します。"), + ("Present value of a series of equal future payments.", "一連の将来の均等支払いの現在価値。"), + ("Previous coupon date on or before settlement.", "決済日以前の直近利払日を返します。"), + ("Price per 100 face value of a Treasury bill.", "短期国債の額面 100 あたりの価格を求めます。"), + ("Price per 100 face value of a discounted security.", "割引証券の額面 100 あたりの価格を求めます。"), + ("Price per 100 face value of a security paying interest at maturity.", "満期時に利息を支払う証券の額面 100 あたりの価格を求めます。"), + ("Price per 100 face value of a security paying periodic interest.", "定期的に利息を支払う証券の額面 100 あたりの価格を求めます。"), + ("Price per 100 face value of a security with an odd first period.", "最初の利払期間が変則的な証券の額面 100 あたりの価格を求めます。"), + ("Price per 100 face value of a security with an odd last period.", "最後の利払期間が変則的な証券の額面 100 あたりの価格を求めます。"), + ("Principal part of a given period's payment.", "特定期間の支払いの元本部分。"), + ("Probability from Student's t-test.", "Student の t 検定からの確率。"), + ("Probability of a number of successes falling in a range.", "成功回数が範囲内に収まる確率。"), + ("Probability that a standard normal value falls between the mean and z.", "標準正規分布に従う値が平均と z の間に入る確率。"), + ("Probability that values fall between two limits.", "値が 2 つの制限値の間に収まる確率。"), + ("Product of complex numbers.", "複素数の積。"), + ("Quartile (0–4) of a data set, inclusive method.", "両端を含む方法で、データの四分位数(0~4)を求めます。"), + ("Quartile (0–4) of a data set.", "データセットの四分位数 (0 ~ 4)。"), + ("Quartile (1–3) of a data set, exclusive method.", "両端を除く方法で、データの四分位数(1~3)を求めます。"), + ("Quotient of two complex numbers.", "2 つの複素数の商。"), + ("Raises a complex number to a power.", "複素数のべき乗を計算します。"), + ("Raises a number to a power.", "数値をべき乗します。"), + ("Rank of a number within a list.", "リスト内の数値のランク。"), + ("Rank of a number within a list; ties get the average rank.", "リスト内の数値のランク。同点の場合は平均順位が得られます。"), + ("Rank of a number within a list; ties share the top rank.", "リスト内の数値の順位。同値には、それらが占める順位のうち最上位の順位を付けます。"), + ("Ratio of the factorial of a sum to the product of factorials.", "階乗の積に対する合計の階乗の比率。"), + ("Reads text in a given base as a number.", "指定された基数のテキストを数値として読み取ります。"), + ("Real coefficient of a complex number.", "複素数の実係数。"), + ("Relative standing of a value as a fraction of the data set.", "データセット内での値の相対順位を割合で表します。"), + ("Relative standing of a value from 0 to 1 inclusive.", "値の相対的な順位を、0 と 1 を含む範囲で返します。"), + ("Relative standing of a value strictly between 0 and 1.", "値の相対的な順位を、0 と 1 を除く範囲で返します。"), + ("Remainder of a division, with the sign of the divisor.", "除数の符号付きの割り算の余り。"), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "先頭と末尾のスペースを削除し、連続するスペースを 1 つにまとめます。", + ), + ("Removes non-printable control characters from text.", "テキストから印刷不可能な制御文字を削除します。"), + ("Removes rows or columns from the start (or end) of an array.", "配列の先頭 (または末尾) から行または列を削除します。"), + ("Repeats a text a given number of times.", "テキストを指定された回数繰り返します。"), + ("Replaces matches of a regular expression, all of them or a chosen occurrence.", "正規表現の一致、すべて、または選択した出現を置換します。"), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "あるテキストの出現箇所を別のテキストに置き換えます (オプションで指定された出現箇所のみ)。", + ), + ("Replaces part of a text by position.", "テキストの一部を位置に基づいて置換します。"), + ("Returns 1 when a number is at least the step, otherwise 0.", "数値がしきい値以上なら 1、それ以外なら 0 を返します。"), + ("Returns 1 when two numbers are equal, otherwise 0.", "2 つの数値が等しい場合は 1、それ以外の場合は 0 を返します。"), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "値の種類を表すコードを返します。1 は数値、2 は文字列、4 は論理値、16 はエラー、64 は配列です。", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "値が #N/A の場合はフォールバックを返し、それ以外の場合は値を返します。"), + ("Returns a fallback when the value is an error, otherwise the value.", "値がエラーの場合はフォールバックを返し、それ以外の場合は値を返します。"), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "キューブから主要業績評価指標プロパティを返します (キューブ接続なし、#N/A)。", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "キューブからメンバーまたはタプルを返します (キューブ接続なし、#N/A)。"), + ("Returns a property of a cube member (no cube connections; #N/A).", "キューブ メンバーのプロパティを返します (キューブ接続なし、#N/A)。"), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "キューブから集計値を返します (キューブ接続なし、#N/A)。"), + ("Returns characters from the middle of a text.", "テキストの途中から文字を返します。"), + ("Returns information about the operating environment.", "動作環境に関する情報を返します。"), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "条件が TRUE の場合は 1 つの値を返し、FALSE の場合は別の値を返します。", + ), + ("Returns the #N/A error value.", "#N/A エラー値を返します。"), + ("Returns the 1-based position of a value in a row or column.", "行または列内の値の 1 から始まる位置を返します。"), + ("Returns the ISO 8601 week number of a date.", "日付の ISO 8601 週番号を返します。"), + ("Returns the Unicode code point of the first character of a text.", "テキストの最初の文字の Unicode コード ポイントを返します。"), + ("Returns the Windows-1252 code of the first character of a text.", "テキストの最初の文字の Windows-1252 コードを返します。"), + ("Returns the character for a Unicode code point.", "Unicode コードポイントの文字を返します。"), + ("Returns the character for a code from the Windows-1252 character set.", "Windows-1252 文字セットからコードの文字を返します。"), + ("Returns the current date and time.", "現在の日付と時刻を返します。"), + ("Returns the current date.", "現在の日付を返します。"), + ("Returns the date a number of months before or after a date.", "日付の数か月前または後の日付を返します。"), + ("Returns the date a number of working days away with a custom weekend.", "週末の曜日を指定し、指定した営業日数だけ前または後の日付を返します。"), + ("Returns the date a number of working days before or after a date.", "日付の営業日数前または後の日付を返します。"), + ("Returns the day of the month of a date.", "日付の日(何日か)を返します。"), + ("Returns the day of the week of a date as a number.", "日付の曜日を数値として返します。"), + ("Returns the distinct rows or columns of an array.", "配列の個別の行または列を返します。"), + ("Returns the element, row or column of an array at the given position.", "指定された位置にある配列の要素、行、または列を返します。"), + ("Returns the field value of the single record that meets the criteria.", "条件を満たす単一レコードのフィールド値を返します。"), + ("Returns the first characters of a text.", "テキストの最初の文字を返します。"), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "指定した日数計算基準で、2 つの日付間の期間が 1 年に占める割合を返します。", + ), + ("Returns the hour (0-23) of a time.", "時刻の時(0 ~ 23)を返します。"), + ("Returns the last characters of a text.", "テキストの最後の文字を返します。"), + ("Returns the last day of the month a number of months away.", "指定した月数だけ前または後の月の最終日を返します。"), + ("Returns the logical value FALSE.", "論理値 FALSE を返します。"), + ("Returns the logical value TRUE.", "論理値 TRUE を返します。"), + ("Returns the minute (0-59) of a time.", "時刻の分 (0 ~ 59) を返します。"), + ("Returns the month (1-12) of a date.", "日付の月 (1 ~ 12) を返します。"), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "キューブ セットの n 番目のメンバーを返します (キューブ接続なし、#N/A)。"), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "エラー値を識別する番号を返します。エラーでない場合は #N/A を返します。", + ), + ("Returns the number of days between two dates.", "2 つの日付間の日数を返します。"), + ("Returns the phonetic (furigana) text; here the text itself.", "ふりがなテキストを返します。ここでは元のテキスト自体を返します。"), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "柔軟な一致および検索モードを使用して、行または列内の値の位置を返します。", + ), + ("Returns the second (0-59) of a time.", "時刻の秒 (0 ~ 59) を返します。"), + ("Returns the text that comes after a delimiter.", "区切り文字の後に続くテキストを返します。"), + ("Returns the text that comes before a delimiter.", "区切り文字の前にあるテキストを返します。"), + ("Returns the value if it is text, otherwise empty text.", "テキストの場合は値を返し、それ以外の場合は空のテキストを返します。"), + ("Returns the value paired with the first condition that is TRUE.", "最初に TRUE となる条件に対応する値を返します。"), + ("Returns the week number of a date within its year.", "年の内の日付の週番号を返します。"), + ("Returns the year of a date.", "日付の年を返します。"), + ("Reverses a logical value.", "論理値を反転します。"), + ("Right-tailed F probability.", "右尾F確率。"), + ("Right-tailed Student's t probability.", "スチューデントの t 分布の右側確率。"), + ("Right-tailed chi-squared probability.", "右尾カイ二乗確率。"), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "数値を四捨五入し、固定小数点とオプションの千の位の区切り文字を使用してテキストとしてフォーマットします。", + ), + ("Rounds a number away from zero to a given number of digits.", "数値を指定した桁数に、ゼロから離れる方向に丸めます。"), + ("Rounds a number down to a multiple of significance.", "数値を指定した基準値の倍数に切り捨てます。"), + ("Rounds a number down to the nearest integer or multiple.", "数値を最も近い整数または倍数に切り捨てます。"), + ("Rounds a number down to the nearest integer.", "数値を最も近い整数に切り捨てます。"), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "数値を指定した桁数に丸めます。ちょうど中間の値はゼロから離れる方向に丸めます。", + ), + ("Rounds a number to the nearest multiple.", "数値を最も近い倍数に丸めます。"), + ("Rounds a number toward negative infinity to a multiple.", "数値を負の無限大に向かって倍数に丸めます。"), + ("Rounds a number toward positive infinity to a multiple.", "数値を正の無限大に向かって倍数に丸めます。"), + ("Rounds a number toward zero to a given number of digits.", "数値を指定された桁数にゼロ方向に丸めます。"), + ("Rounds a number up to a multiple of significance.", "数値を指定した基準値の倍数に切り上げます。"), + ("Rounds a number up to the nearest integer or multiple.", "数値を最も近い整数または倍数に切り上げます。"), + ("Rounds away from zero to the nearest even integer.", "ゼロから離れる方向に、最も近い偶数の整数へ丸めます。"), + ("Rounds away from zero to the nearest odd integer.", "ゼロから離れる方向に、最も近い奇数の整数へ丸めます。"), + ("Row number of a reference.", "参照の行番号。"), + ("Running accumulation of an array.", "配列の各要素までの累積結果。"), + ("Sample covariance of paired values.", "対応する値の標本共分散。"), + ("Sample skewness.", "サンプルの歪度。"), + ("Sample standard deviation counting text as 0 and logicals as 1/0.", "テキストを 0、論理値を 1/0 としてカウントしたサンプル標準偏差。"), + ("Sample standard deviation of a field over the matching records.", "一致するレコードにわたるフィールドのサンプル標準偏差。"), + ("Sample standard deviation.", "サンプルの標準偏差。"), + ("Sample variance counting text as 0 and logicals as 1/0.", "サンプルの分散はテキストを 0、論理値を 1/0 としてカウントします。"), + ("Sample variance of a field over the matching records.", "一致するレコードにわたるフィールドのサンプル分散。"), + ("Sample variance.", "標本分散。"), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "行または列を検索し、別の配列から一致する要素、行または列を返します。", + ), + ("Secant of a complex number.", "複素数の正割。"), + ("Secant of an angle in radians.", "ラジアン単位の角度の正割。"), + ("Sheet number.", "シート番号。"), + ("Shifts the bits of a number left (right for negative shifts).", "数値のビットを左にシフトします (負のシフトの場合は右)。"), + ("Shifts the bits of a number right (left for negative shifts).", "数値のビットを右にシフトします (負のシフトの場合は左)。"), + ("Sine of a complex number.", "複素数の正弦。"), + ("Sine of an angle in radians.", "ラジアン単位の角度の正弦。"), + ("Slope of the least-squares regression line.", "最小二乗回帰直線の傾き。"), + ("Smallest number (0 when there are none).", "最小の数値(無い場合は0)。"), + ("Smallest number in a field of the matching records.", "一致するレコードのフィールド内の最小の数値。"), + ("Smallest success count whose cumulative binomial probability reaches alpha.", "累積二項確率がアルファに達する最小成功数。"), + ("Smallest value among cells that meet every condition.", "すべての条件を満たすスプレッドシートのセルの最小値。"), + ("Smallest value counting text as 0 and logicals as 1/0.", "テキストを 0、論理値を 1/0 としてカウントした最小値。"), + ("Sorts an array by the values of other arrays of matching size.", "サイズが一致する他の配列の値によって配列を並べ替えます。"), + ("Sorts the rows (or columns) of an array by one or more of its columns.", "配列の行 (または列) を 1 つ以上の列で並べ替えます。"), + ("Spells out a number in Thai words with Baht.", "数値をタイ語の綴りに変換し、通貨単位バーツを付けます。"), + ("Splits text into a grid of columns and rows at the given delimiters.", "指定された区切り文字でテキストを列と行のグリッドに分割します。"), + ("Square of the correlation coefficient.", "相関係数の二乗。"), + ("Square root of a complex number.", "複素数の平方根。"), + ("Square root of the number times pi.", "数値と円周率の積の平方根。"), + ("Stacks arrays on top of each other.", "配列を互いに積み重ねます。"), + ("Standard error of predicted y values in a regression.", "回帰で予測された y 値の標準誤差。"), + ("Standard normal cumulative probability.", "標準正規分布の累積確率。"), + ("Standard normal density or cumulative probability.", "標準正規密度または累積確率。"), + ("Standard normal density.", "標準正規分布の確率密度。"), + ("Straight-line depreciation for one period.", "1 期間の定額法による減価償却費。"), + ("Student's t density or left-tailed probability.", "スチューデントの t 密度または左側確率。"), + ("Sum of a power series.", "べき級数の和。"), + ("Sum of complex numbers.", "複素数の合計。"), + ("Sum of squared deviations from the mean.", "平均からの偏差の二乗の合計。"), + ("Sum-of-years'-digits depreciation for a period.", "級数法による指定期間の減価償却費。"), + ("Sums the differences of squares of matching elements.", "一致する要素の二乗の差を合計します。"), + ("Sums the squared differences of matching elements.", "一致する要素の差の二乗を合計します。"), + ("Sums the sums of squares of matching elements.", "一致する要素の二乗和を合計します。"), + ("Swaps the rows and columns of an array.", "配列の行と列を交換します。"), + ("TRUE for references.", "参照である場合に TRUE。"), + ("TRUE when a LAMBDA argument was left out.", "TRUE (LAMBDA 引数が省略された場合)。"), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE 正規表現がテキスト内のどこかに一致した場合。"), + ("TRUE when an odd number of arguments are TRUE.", "TRUE である引数の個数が奇数の場合に TRUE。"), + ("TRUE when at least one argument is TRUE.", "TRUE (少なくとも 1 つの引数が TRUE の場合)。"), + ("TRUE when every argument is TRUE.", "TRUE (すべての引数が TRUE の場合)。"), + ("TRUE when the cell has a formula.", "TRUE (セルに数式がある場合)。"), + ("TRUE when the integer part of a number is even.", "TRUE 数値の整数部分が偶数の場合。"), + ("TRUE when the integer part of a number is odd.", "TRUE 数値の整数部分が奇数の場合。"), + ("TRUE when the value is TRUE or FALSE.", "TRUE (値が TRUE または FALSE の場合)。"), + ("TRUE when the value is a number.", "TRUE 値が数値の場合。"), + ("TRUE when the value is any error other than #N/A.", "値が #N/A 以外のエラーの場合に TRUE。"), + ("TRUE when the value is any error.", "TRUE 値がエラーの場合。"), + ("TRUE when the value is anything other than text.", "TRUE 値がテキスト以外の場合。"), + ("TRUE when the value is text.", "TRUE (値がテキストの場合)。"), + ("TRUE when the value is the #N/A error.", "TRUE 値が #N/A エラーの場合。"), + ("TRUE when the value refers to an empty cell.", "TRUE 値が空のセルを参照している場合。"), + ("TRUE when two texts are identical, including case.", "TRUE 2 つのテキストが大文字と小文字を含めて同一である場合。"), + ("Tangent of a complex number.", "複素数の正接。"), + ("Tangent of an angle in radians.", "ラジアン単位の角度の正接。"), + ("The constant pi to 15 digits.", "15 桁の定数 pi。"), + ("The formula of a cell as text.", "テキストとしてのセルの数式。"), + ("The gamma function.", "ガンマ関数。"), + ("The k-th largest number in a data set.", "データセット内で k 番目に大きい数値。"), + ("The k-th smallest number in a data set.", "データセット内の k 番目に小さい数値。"), + ("The reference named by a text string.", "テキスト文字列で指定された参照。"), + ("The sum of a subset as a fraction of the sum of all the values.", "すべての値の合計に対する、部分集合の合計の割合。"), + ("Total interest paid between two periods.", "2 つの期間の間に支払われる利息の合計。"), + ("Total principal repaid between two periods.", "2 つの期間の間に返済された元本の合計。"), + ("Two-tailed Student's t probability.", "スチューデントの t 分布の両側確率。"), + ("Two-tailed inverse of Student's t distribution.", "Student の t 分布の両側逆関数。"), + ("Two-tailed p-value of an F-test for equality of variances.", "分散の等しさを検定する F 検定の両側 p 値を返します。"), + ("Values along a fitted exponential growth curve.", "近似された指数関数的増加曲線に沿った値。"), + ("Values along a least-squares linear fit.", "最小二乗線形近似に基づく値。"), + ("Vertical array of all the most frequent numbers.", "すべての最頻値の垂直配列。"), + ("Weibull density or probability.", "ワイブル密度または確率。"), + ("Writes a number in another base, padded with zeros.", "数値を別の基数の文字列に変換し、必要に応じて先頭にゼロを補います。"), + ("Y-intercept of the least-squares regression line.", "最小二乗回帰直線の Y 切片。"), + ("Yield of a Treasury bill.", "財務省短期証券の利回り。"), + ("Yield of a security paying periodic interest.", "定期的に利息が支払われる証券の利回り。"), + ("Yield of a security with an odd first period.", "最初の利払期間が変則的な証券の利回り。"), + ("Yield of a security with an odd last period.", "最後の利払期間が変則的な証券の利回り。"), + ("Z-score of a value.", "値の Z スコア。"), + ("e raised to the given power.", "e を指定の累乗します。"), + ("k-th percentile, k from 0 to 1 inclusive.", "k 番目の百分位数、k は 0 から 1 までです。"), + ("k-th percentile, k strictly between 0 and 1.", "k 番目のパーセンタイル、k は厳密に 0 と 1 の間です。"), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "参照型"), + ("actual_range", "実際の範囲"), + ("aggregation", "集約"), + ("alpha", "アルファ"), + ("angle", "角度"), + ("area_num", "領域番号"), + ("argument", "引数"), + ("array", "配列"), + ("array_x", "x_値の配列"), + ("array_y", "y_値の配列"), + ("average_range", "平均範囲"), + ("base", "底"), + ("basis", "日数計算基準"), + ("beta", "ベータ"), + ("bins_array", "ビン境界配列"), + ("bottom", "下限"), + ("by_array", "ソートキー配列"), + ("by_col", "列単位"), + ("calc_method", "計算方法"), + ("calculation", "計算"), + ("caption", "キャプション"), + ("case_sensitivity", "大文字と小文字の区別"), + ("coefficients", "係数"), + ("col_delimiter", "列区切り文字"), + ("col_fields", "列フィールド"), + ("col_index_num", "列インデックス"), + ("col_num", "列番号"), + ("col_sort_order", "列のソート順"), + ("col_total_depth", "列の合計深さ"), + ("cols", "列数"), + ("column_num", "列番号"), + ("columns", "列数"), + ("confidence_level", "信頼レベル"), + ("connection", "データ接続"), + ("const", "定数"), + ("cost", "初期費用"), + ("coupon", "利払い"), + ("criteria", "基準"), + ("criteria_range", "基準範囲"), + ("cumulative", "累積分布"), + ("data_all", "データすべて"), + ("data_array", "データ配列"), + ("data_completion", "欠損データの補完方法"), + ("data_subset", "データ_サブセット"), + ("database", "データベース"), + ("date", "日付"), + ("date_purchased", "購入日"), + ("date_text", "テキストとして書き込まれた日付"), + ("dates", "日付"), + ("day", "日"), + ("days", "日"), + ("decimal_dollar", "10進価格"), + ("decimal_separator", "小数点記号"), + ("decimals", "小数点以下の桁数"), + ("default_or_value", "デフォルトまたは値"), + ("deg_freedom", "自由度"), + ("delimiter", "区切り文字"), + ("denominator", "分母"), + ("dimension", "次元"), + ("discount", "割引率"), + ("divisor", "除数"), + ("effect_rate", "実効利率"), + ("end_date", "終了日"), + ("end_period", "最後の期間"), + ("error_val", "エラー値"), + ("exactly_once", "1_回だけ"), + ("expected_range", "予想される範囲"), + ("expression", "式"), + ("factor", "係数"), + ("field", "データベース_フィールド"), + ("field_headers", "フィールドヘッダー"), + ("field_relationship", "フィールド間の関係"), + ("filter_array", "フィルター配列"), + ("finance_rate", "融資金利"), + ("find_text", "テキストを検索"), + ("first_coupon", "初回クーポン支払日"), + ("first_interest", "初回利息支払日"), + ("first_period", "最初の期間の終了日"), + ("form", "形式"), + ("format", "形式"), + ("format_text", "形式のテキスト"), + ("fraction", "分母"), + ("fractional_dollar", "端数価格"), + ("frequency", "年間利払回数"), + ("friendly_name", "フレンドリーな名前"), + ("from_unit", "ソース測定ユニット"), + ("full_precision", "完全精度"), + ("function", "関数"), + ("function_num", "関数番号"), + ("fv", "将来価値"), + ("group_separator", "グループ区切り文字"), + ("guess", "推測"), + ("height", "高さ"), + ("holidays", "休日"), + ("hour", "時"), + ("i_num", "虚数係数"), + ("if_empty", "空の場合"), + ("if_not_found", "見つからない場合"), + ("ignore", "無視"), + ("ignore_empty", "空を無視"), + ("include", "含む"), + ("index_num", "インデックス番号"), + ("info_type", "情報の種類"), + ("initial_value", "初期値"), + ("instance_num", "発生番号"), + ("inumber", "複素数"), + ("investment", "投資"), + ("issue", "発行日"), + ("k", "k"), + ("known_xs", "既知の_x_値"), + ("known_ys", "既知の_y_値"), + ("kpi_name", "主要業績評価指標の名前"), + ("kpi_property", "主要業績評価指標のプロパティ"), + ("lambda", "ラムダ"), + ("last_interest", "最終利息支払日"), + ("life", "耐用年数"), + ("link_location", "リンク先"), + ("logical", "論理値"), + ("logical_test", "論理条件"), + ("lookup_array", "検索配列"), + ("lookup_value", "検索値"), + ("lookup_vector", "ルックアップ_ベクトル"), + ("lower_limit", "下限値"), + ("m", "m"), + ("match_end", "末尾を区切り文字として扱う"), + ("match_mode", "一致モード"), + ("match_type", "マッチング方法"), + ("maturity", "満期日"), + ("max", "最大値"), + ("max_range", "最大値の範囲"), + ("mean", "平均"), + ("member_expression", "キューブ要素式"), + ("method", "メソッド"), + ("min", "最小値"), + ("min_length", "最小長"), + ("min_range", "最小値の範囲"), + ("minute", "分"), + ("mode", "計算モード"), + ("month", "月"), + ("months", "月"), + ("multiple", "倍数"), + ("n", "n"), + ("name", "名前"), + ("new_text", "新しいテキスト"), + ("new_xs", "新しい_x_値"), + ("no_commas", "数字グループ区切り文字を省略"), + ("no_switch", "定額法への切替禁止"), + ("nominal_rate", "名目利率"), + ("nper", "期間の数"), + ("npery", "年間複利回数"), + ("num_bytes", "バイト数"), + ("num_chars", "文字数"), + ("num_digits", "桁数"), + ("number", "数値"), + ("number_chosen", "選択する個数"), + ("number_f", "失敗数"), + ("number_pop", "母集団の大きさ"), + ("number_s", "成功数"), + ("number_sample", "サンプルサイズ"), + ("number_times", "繰り返し回数"), + ("numerator", "分子"), + ("occurrence", "出現箇所"), + ("old_text", "古いテキスト"), + ("options", "オプション"), + ("order", "順序"), + ("pad_with", "埋める値"), + ("par", "額面"), + ("parameter", "パラメータ"), + ("pattern", "正規表現パターン"), + ("per", "期間"), + ("percent", "パーセント"), + ("period", "期間"), + ("places", "出力桁数"), + ("pmt", "支払額"), + ("population_s", "母集団内の成功数"), + ("power", "指数"), + ("pr", "価格"), + ("principal", "元金"), + ("prob_range", "確率範囲"), + ("probability", "確率"), + ("probability_s", "成功確率"), + ("property", "プロパティ名"), + ("pv", "現在価値"), + ("quart", "四分位数の番号"), + ("radix", "基数"), + ("range", "範囲"), + ("range_lookup", "範囲検索"), + ("rank", "ランク"), + ("rate", "率"), + ("real_num", "実係数"), + ("redemption", "償還額"), + ("ref", "参照"), + ("ref_text", "参照テキスト"), + ("reference", "参照"), + ("reinvest_rate", "再投資金利"), + ("relative_to", "相対参照の基準"), + ("replacement", "置換文字列"), + ("result", "結果"), + ("result_vector", "結果ベクトル"), + ("return_array", "戻り配列"), + ("return_mode", "リターンモード"), + ("return_type", "戻り値の形式"), + ("row_delimiter", "行区切り文字"), + ("row_fields", "行フィールド"), + ("row_index_num", "行インデックス"), + ("row_num", "行番号"), + ("row_sort_order", "行のソート順"), + ("row_total_depth", "行の合計深さ"), + ("rows", "行数"), + ("salvage", "残価"), + ("sample_s", "標本内の成功数"), + ("scan_by_column", "列ごとにスキャン"), + ("schedule", "スケジュール"), + ("search_mode", "検索モード"), + ("seasonality", "季節性"), + ("second", "秒"), + ("serial_number", "シリアル番号"), + ("set", "キューブ要素の集合"), + ("set_expression", "キューブ集合式"), + ("settlement", "決済日"), + ("sheet_text", "シートのテキスト"), + ("shift_amount", "シフト量"), + ("sigma", "シグマ"), + ("significance", "丸めの基準値または有効桁数"), + ("size", "サイズ"), + ("sort_by", "並べ替え"), + ("sort_index", "ソートインデックス"), + ("sort_order", "並べ替え順"), + ("source", "ソース"), + ("standard_dev", "標準偏差"), + ("start", "開始値"), + ("start_date", "開始日"), + ("start_num", "開始位置"), + ("start_period", "開始期間"), + ("statistic_type", "統計タイプ"), + ("stats", "統計"), + ("step", "ステップ"), + ("suffix", "サフィックス"), + ("sum_range", "合計範囲"), + ("table_array", "テーブル配列"), + ("tails", "検定の片側両側"), + ("target", "ターゲット"), + ("target_date", "対象日"), + ("text", "テキスト"), + ("time_text", "テキストとして書き込まれた時間"), + ("timeline", "タイムライン"), + ("to_unit", "対象測定単位"), + ("top", "上限"), + ("total_depth", "合計深さ"), + ("trials", "試行回数"), + ("triangulation_precision", "ユーロ換算時の精度"), + ("trim_cols", "列トリミングモード"), + ("trim_rows", "行トリミングモード"), + ("type", "タイプ"), + ("type_text", "データ型の名前"), + ("unit", "単位"), + ("upper_limit", "上限"), + ("url", "URL"), + ("value", "値"), + ("value_if_error", "エラーの場合の結果"), + ("value_if_false", "偽の場合の値"), + ("value_if_na", "利用不可エラーの結果"), + ("value_if_true", "真の場合の値"), + ("values", "値"), + ("vector", "ベクトル"), + ("weekend", "週末"), + ("whole_number", "整数"), + ("width", "幅"), + ("within_text", "検索対象の文字列"), + ("wrap_count", "行または列ごとの値の数"), + ("x", "x"), + ("x_num", "x座標"), + ("x_range", "x_範囲"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "y座標"), + ("year", "年"), + ("yld", "利回り"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/ka.rs b/crates/ui-egui/src/i18n/ka.rs new file mode 100644 index 0000000000..6c179ee1f8 --- /dev/null +++ b/crates/ui-egui/src/i18n/ka.rs @@ -0,0 +1,1226 @@ +//! Georgian (ქართული) translations for the interface strings in i18n.rs. Original wording from the +//! meaning of the English labels, following the Craft apps' shared Georgian glossary (masdar +//! commands, no capitals: Georgian has no case); anything absent falls back to English. + +pub(super) fn translate(text: &str) -> Option<&'static str> { + Some(match text { + "Paste" => "ჩასმა", + "Paste Values" => "მნიშვნელობების ჩასმა", + "Paste Formulas" => "ფორმულების ჩასმა", + "Paste Formatting" => "ფორმატის ჩასმა", + "Transpose" => "ტრანსპოზიცია", + "Paste Link" => "ბმულის ჩასმა", + "Paste Special…" => "სპეციალური ჩასმა…", + "Insert Copied Cells" => "კოპირებული უჯრების ჩასმა", + "Insert Copied Cells…" => "კოპირებული უჯრების ჩასმა…", + "Insert Cut Cells" => "ამოჭრილი უჯრების ჩასმა", + "Insert Paste" => "ჩასმა წანაცვლებით", + "Cut (⌘X)" => "ამოჭრა (⌘X)", + "Copy (⌘C)" => "კოპირება (⌘C)", + "Format Painter (double-click to keep it on)" => "ფორმატის ფუნჯი (ორმაგი დაწკაპუნებით ჩართული რჩება)", + "Bold (⌘B)" => "მუქი (⌘B)", + "Italic (⌘I)" => "დახრილი (⌘I)", + "Underline (⌘U)" => "ხაზგასმული (⌘U)", + "Double Underline" => "ორმაგი ხაზგასმა", + "Strikethrough" => "გადახაზული", + "Underline" => "ხაზგასმული", + "Increase Font Size" => "შრიფტის გაზრდა", + "Decrease Font Size" => "შრიფტის შემცირება", + "Wrap Text" => "ტექსტის გადატანა", + "Merge & Center" => "შერწყმა და ცენტრირება", + "Merge Cells" => "უჯრების შერწყმა", + "Merge Across" => "სტრიქონების მიხედვით შერწყმა", + "Unmerge Cells" => "უჯრების შერწყმის გაუქმება", + "Fill Color" => "შევსების ფერი", + "Font Color" => "შრიფტის ფერი", + "Borders" => "ჩარჩოები", + "Top\nAlign" => "ზემოთ\nსწორება", + "Middle\nAlign" => "შუაში\nსწორება", + "Bottom\nAlign" => "ქვემოთ\nსწორება", + "Left" => "მარცხნივ", + "Right" => "მარჯვნივ", + "Center" => "ცენტრში", + "Horizontal" => "ჰორიზონტალური", + "Vertical Text" => "ვერტიკალური ტექსტი", + "Decrease Indent" => "შეწევის შემცირება", + "Increase Indent" => "შეწევის გაზრდა", + "Orientation" => "ორიენტაცია", + "Page Layout|Orientation" => "ორიენტაცია", + "Angle Counterclockwise" => "საათის ისრის საწინააღმდეგოდ დახრა", + "Angle Clockwise" => "საათის ისრის მიმართულებით დახრა", + "Rotate Text Up" => "ტექსტის ზემოთ შემობრუნება", + "Rotate Text Down" => "ტექსტის ქვემოთ შემობრუნება", + "Accounting Number Format" => "საბუღალტრო რიცხვის ფორმატი", + "Percent Style" => "პროცენტული სტილი", + "Comma Style" => "გამყოფიანი სტილი", + "Increase Decimal" => "მძიმის შემდეგ ციფრების გაზრდა", + "Decrease Decimal" => "მძიმის შემდეგ ციფრების შემცირება", + "More Accounting Formats…" => "სხვა საბუღალტრო ფორმატები…", + "Conditional\nFormatting" => "პირობითი\nფორმატირება", + "Conditional Formatting" => "პირობითი ფორმატირება", + "Format\nas Table" => "ცხრილად\nფორმატირება", + "Cell\nStyles" => "უჯრის\nსტილები", + "Format Cells…" => "უჯრების ფორმატირება…", + "Format Cell Alignment…" => "უჯრის სწორების ფორმატირება…", + "Format\nPane" => "ფორმატირების\nპანელი", + "Format" => "ფორმატი", + "Insert" => "ჩასმა", + "Header Menu|Insert" => "ჩასმა", + "Insert Cells…" => "უჯრების ჩასმა…", + "Delete" => "წაშლა", + "Delete Cells…" => "უჯრების წაშლა…", + "Insert Sheet Rows" => "ფურცლის სტრიქონების ჩასმა", + "Insert Sheet Columns" => "ფურცლის სვეტების ჩასმა", + "Delete Sheet Rows" => "ფურცლის სტრიქონების წაშლა", + "Delete Sheet Columns" => "ფურცლის სვეტების წაშლა", + "Row Height…" => "სტრიქონის სიმაღლე…", + "AutoFit Row Height" => "სტრიქონის სიმაღლის ავტომორგება", + "Column Width…" => "სვეტის სიგანე…", + "AutoFit Column Width" => "სვეტის სიგანის ავტომორგება", + "Default Width…" => "ნაგულისხმევი სიგანე…", + "Hide Rows" => "სტრიქონების დამალვა", + "Unhide Rows" => "სტრიქონების გამოჩენა", + "Hide Columns" => "სვეტების დამალვა", + "Unhide Columns" => "სვეტების გამოჩენა", + "Lock Cell" => "უჯრის ჩაკეტვა", + "Clear" => "გასუფთავება", + "Clear All" => "ყველას გასუფთავება", + "Clear Formats" => "ფორმატების გასუფთავება", + "Clear Contents" => "შიგთავსის გასუფთავება", + "Clear Comments and Notes" => "კომენტარებისა და შენიშვნების გასუფთავება", + "Clear Hyperlinks" => "ბმულების გასუფთავება", + "AutoSum" => "ავტოჯამი", + "AutoSum (⌘⇧T)" => "ავტოჯამი (⌘⇧T)", + "Flash\nFill" => "მყისიერი\nშევსება", + "Flash Fill" => "მყისიერი შევსება", + "Fill" => "შევსება", + "Clear Print Area" => "ბეჭდვის არის გასუფთავება", + "Find &\nSelect" => "ძებნა და\nმონიშვნა", + "Find…" => "ძებნა…", + "Replace…" => "ჩანაცვლება…", + "Go To…" => "გადასვლა…", + "Go To Special…" => "სპეციალური გადასვლა…", + "PivotTable" => "კრებსითი ცხრილი", + "Recommended\nCharts" => "რეკომენდებული\nდიაგრამები", + "Table" => "ცხრილი", + "Pictures" => "სურათები", + "Shapes" => "ფიგურები", + "Icons" => "ხატულები", + "Text\nBox" => "ტექსტური\nბლოკი", + "Comment" => "კომენტარი", + "New\nComment" => "ახალი\nკომენტარი", + "New Note" => "ახალი შენიშვნა", + "Show/Hide Note" => "შენიშვნის ჩვენება/დამალვა", + "Header &\nFooter" => "კოლონტიტულები", + "Text to\nColumns" => "ტექსტის\nსვეტებად დაყოფა", + "Link" => "ბმული", + "Symbol" => "სიმბოლო", + "Sparklines" => "მინიდიაგრამები", + "Checkbox" => "მოსანიშნი ველი", + "Insert checkboxes in the selected cells" => "მოსანიშნი ველების ჩასმა მონიშნულ უჯრებში", + "Header & Footer" => "კოლონტიტულები", + "Draw with ink" => "მელნით ხატვა", + "Eraser" => "საშლელი", + "Ink to\nShape" => "მელნიდან\nფიგურა", + "Select\nObjects" => "ობიექტების\nმონიშვნა", + "Themes" => "თემები", + "Margins" => "ველები", + "Size" => "ზომა", + "Print\nArea" => "ბეჭდვის\nარე", + "Set Print Area" => "ბეჭდვის არის დაყენება", + "Breaks" => "გამყოფები", + "Insert Page Break" => "გვერდის გამყოფის ჩასმა", + "Remove Page Break" => "გვერდის გამყოფის მოხსნა", + "Reset All Page Breaks" => "ყველა გვერდის გამყოფის ჩამოყრა", + "Print\nTitles" => "სათაურების\nბეჭდვა", + "Sheet\nRight-to-Left" => "ფურცელი\nმარჯვნიდან მარცხნივ", + "Sheet Right-to-Left" => "ფურცელი მარჯვნიდან მარცხნივ", + "Narrow" => "ვიწრო", + "Wide" => "ფართო", + "Normal" => "ჩვეულებრივი", + "Portrait" => "ვერტიკალური", + "Landscape" => "ჰორიზონტალური", + "Custom Margins…" => "საკუთარი ველები…", + "Insert\nFunction" => "ფუნქციის\nჩასმა", + "Name\nManager" => "სახელების\nმართვა", + "Define Name" => "სახელის განსაზღვრა", + "Use in Formula" => "ფორმულაში გამოყენება", + "Create from Selection" => "მონიშნულიდან შექმნა", + "Trace Precedents" => "გავლენის მქონე უჯრების მიდევნება", + "Trace Dependents" => "დამოკიდებული უჯრების მიდევნება", + "Remove Arrows" => "ისრების მოშორება", + "Show Formulas" => "ფორმულების ჩვენება", + "Error Checking" => "შეცდომების შემოწმება", + "Evaluate Formula" => "ფორმულის ნაბიჯ-ნაბიჯ გამოთვლა", + "Watch Window" => "დაკვირვების ფანჯარა", + "Calculation\nOptions" => "გამოთვლის\nპარამეტრები", + "Calculate Now" => "ახლავე გადათვლა", + "Calculate Sheet" => "ფურცლის გადათვლა", + "Automatic" => "ავტომატური", + "Automatic Except for Data Tables" => "ავტომატური, მონაცემთა ცხრილების გარდა", + "Manual" => "ხელით", + "Sort &\nFilter" => "სორტირება\nდა ფილტრი", + "Sort" => "სორტირება", + "Sort A to Z" => "სორტირება ა-დან ჰ-მდე", + "Sort Z to A" => "სორტირება ჰ-დან ა-მდე", + "Custom Sort…" => "საკუთარი სორტირება…", + "Filter" => "ფილტრი", + "Reapply" => "ხელახლა გამოყენება", + "Get Data\n(Text/CSV)" => "მონაცემების მიღება\n(ტექსტი/CSV)", + "Remove\nDuplicates" => "დუბლიკატების\nწაშლა", + "Data\nValidation" => "მონაცემთა\nშემოწმება", + "Data Validation" => "მონაცემთა შემოწმება", + "Data Validation…" => "მონაცემთა შემოწმება…", + "Circle Invalid Data" => "არასწორი მონაცემების შემოხაზვა", + "Clear Validation" => "შემოწმების წესის მოხსნა", + "Group" => "დაჯგუფება", + "Ungroup" => "დაჯგუფების მოხსნა", + "Show Detail" => "დეტალების ჩვენება", + "Hide Detail" => "დეტალების დამალვა", + "Subtotal" => "შუალედური ჯამი", + "Data\nAnalysis" => "მონაცემთა\nანალიზი", + "Data Analysis" => "მონაცემთა ანალიზი", + "Solver" => "ამომხსნელი", + "What-If\nAnalysis" => "ანალიზი „რა\nმოხდება, თუ“", + "Data Table…" => "მონაცემთა ცხრილი…", + "Scenario Manager…" => "სცენარების მართვა…", + "Goal Seek…" => "მიზნის ძიება…", + "Forecast\nSheet" => "პროგნოზის\nფურცელი", + "Spelling" => "მართლწერა", + "Check\nAccessibility" => "ხელმისაწვდომობის\nშემოწმება", + "Threaded Comments" => "კომენტარები ხის სახით", + "Show\nComments" => "კომენტარების\nჩვენება", + "Previous" => "წინა", + "Next" => "შემდეგი", + "Previous Comment" => "წინა კომენტარი", + "Next Comment" => "შემდეგი კომენტარი", + "Show All Notes" => "ყველა შენიშვნის ჩვენება", + "Convert to Comments" => "კომენტარებად გარდაქმნა", + "Protect\nWorkbook" => "სამუშაო\nწიგნის დაცვა", + "Allow Edit\nRanges" => "დიაპაზონების\nრედაქტირების ნებართვა", + "Allow Edit Ranges" => "დიაპაზონების რედაქტირება", + "Unprotect\nSheet" => "ფურცლის\nდაცვის მოხსნა", + "Protect Sheet…" => "ფურცლის დაცვა…", + "Comments" => "კომენტარები", + "Notes" => "შენიშვნები", + "Page Break\nPreview" => "გვერდის გამყოფის\nგადახედვა", + "Page\nLayout" => "გვერდის\nგანლაგება", + "Formula Bar" => "ფორმულათა ზოლი", + "Name Box" => "სახელის ველი", + "Cell Editor" => "უჯრის რედაქტორი", + "Font Size" => "შრიფტის ზომა", + "Gridlines" => "ბადე", + "Headings" => "სათაურები", + "Zoom" => "მასშტაბი", + "100%" => "100%", + "Zoom to\nSelection" => "მონიშნულის\nმასშტაბირება", + "Freeze\nPanes" => "არეების\nდაფიქსირება", + "Freeze Panes" => "არეების დაფიქსირება", + "Freeze Top Row" => "ზედა სტრიქონის დაფიქსირება", + "Freeze First Column" => "პირველი სვეტის დაფიქსირება", + "Unfreeze Panes" => "არეების დაფიქსირების მოხსნა", + "Dark Mode" => "ბნელი რეჟიმი", + "Display theme" => "ინტერფეისის თემა", + "Animations" => "ანიმაციები", + "Glide the selection outline to the cell you move to instead of jumping there" => { + "მონიშვნის ჩარჩო ახალ უჯრაზე ნახტომის ნაცვლად შეუფერხებლად გადაინაცვლებს" + } + "System" => "სისტემა", + "Light" => "ღია", + "Dark" => "ბნელი", + "Interface language" => "ინტერფეისის ენა", + "Regional format" => "რეგიონული ფორმატი", + "Interface size" => "ინტერფეისის ზომა", + "Auto" => "ავტომატური", + "Drag to freeze columns" => "გადაათრიეთ სვეტების დასაფიქსირებლად", + "Drag to freeze rows" => "გადაათრიეთ სტრიქონების დასაფიქსირებლად", + "Command\nPalette" => "ბრძანებების\nპალიტრა", + "Agent\nControl" => "აგენტის\nმართვა", + "Action\nJournal" => "მოქმედებების\nჟურნალი", + "About\nGridCraft" => "GridCraft-ის\nშესახებ", + "Share" => "გაზიარება", + "Add Chart\nElement" => "დიაგრამის\nელემენტის დამატება", + "Change\nChart Type" => "დიაგრამის ტიპის\nშეცვლა", + "Switch\nRow/Column" => "სტრიქონი/სვეტის\nშეცვლა", + "Select\nData" => "მონაცემების\nარჩევა", + "Data Labels: None" => "მონაცემთა წარწერები: არ არის", + "Data Labels: Show" => "მონაცემთა წარწერები: ჩვენება", + "Legend: None" => "ლეგენდა: არ არის", + "Legend: Bottom" => "ლეგენდა: ქვემოთ", + "Legend: Top" => "ლეგენდა: ზემოთ", + "Legend: Right" => "ლეგენდა: მარჯვნივ", + "Gridlines: None" => "ბადე: არ არის", + "Gridlines: Show" => "ბადე: ჩვენება", + "Chart\nTitle" => "დიაგრამის\nსათაური", + "Delete\nChart" => "დიაგრამის\nწაშლა", + "Convert\nto Range" => "დიაპაზონად\nგარდაქმნა", + "Table\nStyles" => "ცხრილის\nსტილები", + "Top 10 Items" => "10 უდიდესი ელემენტი", + "Top 10%" => "ზედა 10%", + "Bottom 10 Items" => "10 უმცირესი ელემენტი", + "Bottom 10%" => "ქვედა 10%", + "Above Average" => "საშუალოზე მეტი", + "Below Average" => "საშუალოზე ნაკლები", + "Clear Rules from Entire Sheet" => "წესების გასუფთავება მთელი ფურცლიდან", + "Clear Rules from Selected Cells" => "წესების გასუფთავება მონიშნული უჯრებიდან", + "Constants" => "მუდმივები", + "Data Bars" => "მონაცემთა ზოლები", + "Color Scales" => "ფერადი შკალები", + "Icon Sets" => "ხატულების ნაკრები", + "Home" => "მთავარი", + "Draw" => "ხატვა", + "Page Layout" => "გვერდის განლაგება", + "Formulas" => "ფორმულები", + "Data" => "მონაცემები", + "Review" => "განხილვა", + "View" => "ხედი", + "Automate" => "ავტომატიზაცია", + "Table Design" => "ცხრილის დიზაინი", + "Chart Design" => "დიაგრამის დიზაინი", + "Ready" => "მზადაა", + "Enter" => "შეყვანა", + "Edit" => "რედაქტირება", + "Point" => "მიმართვის არჩევა", + "Calculate" => "გამოთვლა", + "Select destination and press Enter or choose Paste" => "აირჩიეთ დანიშნულება და დააჭირეთ Enter-ს ან აირჩიეთ ჩასმა", + "General" => "ზოგადი", + "Number" => "რიცხვი", + "Currency" => "ფულადი", + "Accounting" => "საბუღალტრო", + "Date" => "თარიღი", + "Time" => "დრო", + "Percentage" => "პროცენტული", + "Fraction" => "წილადი", + "Scientific" => "სამეცნიერო", + "Text" => "ტექსტი", + "Special" => "სპეციალური", + "Custom" => "მორგებული", + "Short Date" => "მოკლე თარიღი", + "Long Date" => "გრძელი თარიღი", + "More Number Formats…" => "სხვა რიცხვითი ფორმატები…", + "Financial" => "ფინანსური", + "Logical" => "ლოგიკური", + "Date &\nTime" => "თარიღი\nდა დრო", + "Lookup &\nReference" => "ძებნა და\nცნობარები", + "Math &\nTrig" => "მათემატიკა და\nტრიგონომეტრია", + "More\nFunctions" => "სხვა\nფუნქციები", + "Sheet Options|View" => "ხედი", + "Print" => "დაბეჭდვა", + "Click to add data" => "დაწკაპეთ მონაცემების დასამატებლად", + "Add header" => "ზედა კოლონტიტულის დამატება", + "Add footer" => "ქვედა კოლონტიტულის დამატება", + "(none)" => "(არცერთი)", + "Header" => "ზედა კოლონტიტული", + "Footer" => "ქვედა კოლონტიტული", + "Page\nNumber" => "გვერდის\nნომერი", + "Number\nof Pages" => "გვერდების\nრაოდენობა", + "Current\nDate" => "მიმდინარე\nთარიღი", + "Current\nTime" => "მიმდინარე\nდრო", + "File\nPath" => "ფაილის\nმისამართი", + "File\nName" => "ფაილის\nსახელი", + "Sheet\nName" => "ფურცლის\nსახელი", + "Go to\nHeader" => "ზედა კოლონტიტულზე\nგადასვლა", + "Go to\nFooter" => "ქვედა კოლონტიტულზე\nგადასვლა", + "Page Number" => "გვერდის ნომერი", + "Number of Pages" => "გვერდების რაოდენობა", + "Current Date" => "მიმდინარე თარიღი", + "Current Time" => "მიმდინარე დრო", + "File Path" => "ფაილის მისამართი", + "File Name" => "ფაილის სახელი", + "Sheet Name" => "ფურცლის სახელი", + "Go to Header" => "ზედა კოლონტიტულზე გადასვლა", + "Different First Page" => "განსხვავებული პირველი გვერდი", + "Different Odd & Even Pages" => "განსხვავებული კენტი და ლუწი გვერდები", + "Go to Footer" => "ქვედა კოლონტიტულზე გადასვლა", + "Ruler" => "სახაზავი", + "File" => "ფაილი", + "Back" => "უკან", + "New" => "ახალი", + "Open" => "გახსნა", + "Info" => "ინფორმაცია", + "Save" => "შენახვა", + "Save As" => "შენახვა როგორც", + "Export" => "ექსპორტი", + "Close" => "დახურვა", + "Options" => "პარამეტრები", + "Blank workbook" => "ცარიელი სამუშაო წიგნი", + "Recent" => "ბოლოდროინდელი", + "No recent workbooks yet." => "ბოლოდროინდელი სამუშაო წიგნები ჯერ არ არის.", + "More workbooks" => "სხვა სამუშაო წიგნები", + "Browse…" => "არჩევა…", + "Not saved yet" => "ჯერ არ შენახულა", + "Location" => "მდებარეობა", + "Sheets" => "ფურცლები", + "Protect Workbook" => "სამუშაო წიგნის დაცვა", + "Sheet structure is locked: sheets can't be added, moved, renamed or deleted." => { + "ფურცლების სტრუქტურა ჩაკეტილია: ფურცლების დამატება, გადატანა, სახელის შეცვლა და წაშლა შეუძლებელია." + } + "Lock the sheet structure so sheets can't be added, moved, renamed or deleted." => { + "ფურცლების სტრუქტურის ჩაკეტვა, რომ ფურცლების დამატება, გადატანა, სახელის შეცვლა და წაშლა შეუძლებელი იყოს." + } + "Properties" => "თვისებები", + "Title" => "დასახელება", + "Subject" => "თემა", + "Author" => "ავტორი", + "Company" => "კომპანია", + "Keywords" => "საკვანძო სიტყვები", + "Description" => "აღწერა", + "No workbook is open." => "სამუშაო წიგნი არ არის გახსნილი.", + "Save as type" => "ფაილის ტიპი", + "Excel Workbook (*.xlsx)" => "Excel-ის სამუშაო წიგნი (*.xlsx)", + "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (მძიმით გამოყოფილი) (*.csv)", + "Web Page (*.html)" => "ვებგვერდი (*.html)", + "PDF (*.pdf)" => "PDF (*.pdf)", + "Download" => "ჩამოტვირთვა", + "A CSV file, web page or PDF is a copy: the workbook keeps its own file." => { + "CSV ფაილი, ვებგვერდი ან PDF ასლია: სამუშაო წიგნი საკუთარ ფაილში რჩება." + } + "Save the workbook under another name or in another folder." => "სამუშაო წიგნის შენახვა სხვა სახელით ან სხვა საქაღალდეში.", + "Print Active Sheets" => "აქტიური ფურცლების დაბეჭდვა", + "Print Entire Workbook" => "მთელი სამუშაო წიგნის დაბეჭდვა", + "Fit Sheet on One Page" => "ფურცლის ერთ გვერდში ჩატევა", + "Page Setup…" => "გვერდის პარამეტრები…", + "Page {page} of {pages}" => "გვერდი {page} / {pages}", + "Nothing to print." => "დასაბეჭდი არაფერია.", + "Previous page" => "წინა გვერდი", + "Next page" => "შემდეგი გვერდი", + "Create PDF" => "PDF-ის შექმნა", + "Save the sheet as a PDF document that keeps its page layout." => "ფურცლის შენახვა PDF დოკუმენტად, გვერდის განლაგების შენარჩუნებით.", + "Change File Type" => "ფაილის ტიპის შეცვლა", + "CSV (Comma delimited)" => "CSV (მძიმით გამოყოფილი)", + "Save the active sheet as comma-separated text." => "აქტიური ფურცლის შენახვა მძიმით გამოყოფილ ტექსტად.", + "Web Page (.html)" => "ვებგვერდი (.html)", + "Save the workbook as a web page." => "სამუშაო წიგნის შენახვა ვებგვერდად.", + "Options|General" => "ზოგადი", + "Options|Save" => "შენახვა", + "Show formula bar" => "ფორმულათა ზოლის ჩვენება", + "Save .xlsx workbooks automatically after every change" => ".xlsx სამუშაო წიგნების ავტომატური შენახვა ყოველი ცვლილების შემდეგ", + "Workbook calculation" => "სამუშაო წიგნის გამოთვლა", + "Enable iterative calculation" => "იტერაციული გამოთვლის ჩართვა", + "Calculation settings are saved with the workbook." => "გამოთვლის პარამეტრები სამუშაო წიგნთან ერთად ინახება.", + "Left Margin" => "მარცხენა ველი", + "Right Margin" => "მარჯვენა ველი", + "Top Margin" => "ზედა ველი", + "Bottom Margin" => "ქვედა ველი", + "Header Margin" => "ზედა კოლონტიტულის ველი", + "Footer Margin" => "ქვედა კოლონტიტულის ველი", + "Modified" => "შეცვლილია", + "Not available" => "მიუწვდომელია", + "Just now" => "ახლახან", + "Yesterday" => "გუშინ", + "{n} min ago" => "{n} წთ-ის წინ", + "{n} h ago" => "{n} სთ-ის წინ", + "{n} days ago" => "{n} დღის წინ", + "{n} weeks ago" => "{n} კვირის წინ", + "{n} months ago" => "{n} თვის წინ", + "{n} years ago" => "{n} წლის წინ", + "Enable AutoComplete for cell values" => "უჯრის მნიშვნელობების ავტოდასრულების ჩართვა", + "OK" => "OK", + "Cancel" => "გაუქმება", + "Don't Save" => "არ შეინახო", + "Open…" => "გახსნა…", + "Show password" => "პაროლის ჩვენება", + "Start a new workbook" => "ახალი სამუშაო წიგნის დაწყება", + "Household Budget" => "ოჯახის ბიუჯეტი", + "Quarterly Sales Dashboard" => "კვარტალური გაყიდვების პანელი", + "Gradebook" => "შეფასებების ჟურნალი", + "this workbook" => "ეს სამუშაო წიგნი", + "This workbook" => "ეს სამუშაო წიგნი", + "Do you want to save the changes you made to {title}?" => "შევინახო ცვლილებები ფაილში {title}?", + "Save a copy as .{format}" => "ასლის შენახვა .{format} ფორმატში", + "Select a chart first." => "ჯერ აირჩიეთ დიაგრამა.", + "Text Box" => "ტექსტური ბლოკი", + "Select Data" => "მონაცემების არჩევა", + "Row Height" => "სტრიქონის სიმაღლე", + "Column Width" => "სვეტის სიგანე", + "Standard Width" => "სტანდარტული სიგანე", + "Rename Sheet" => "ფურცლის სახელის შეცვლა", + "Move or Copy" => "გადატანა ან კოპირება", + "Protect Sheet" => "ფურცლის დაცვა", + "Protect Structure and Windows" => "სტრუქტურისა და ფანჯრების დაცვა", + "Unprotect Workbook" => "სამუშაო წიგნის დაცვის მოხსნა", + "Unprotect Sheet" => "ფურცლის დაცვის მოხსნა", + "Password" => "პაროლი", + "Unhide" => "გამოჩენა", + "Paste Special" => "სპეციალური ჩასმა", + "Series" => "მწკრივი", + "New Comment" => "ახალი კომენტარი", + "Insert Hyperlink" => "ბმულის ჩასმა", + "Create Sparklines" => "მინიდიაგრამების შექმნა", + "Page Setup" => "გვერდის პარამეტრები", + "Convert Text to Columns" => "ტექსტის სვეტებად დაყოფა", + "Remove Duplicates" => "დუბლიკატების წაშლა", + "Goal Seek" => "მიზნის ძიება", + "Create Forecast Worksheet" => "პროგნოზის ფურცლის შექმნა", + "Solver Parameters" => "ამომხსნელის პარამეტრები", + "Solver Results" => "ამომხსნელის შედეგები", + "Edit Name" => "სახელის რედაქტირება", + "New Name" => "ახალი სახელი", + "Format Cells" => "უჯრების ფორმატირება", + "Formula Builder" => "ფორმულის კონსტრუქტორი", + "Find and Replace" => "ძებნა და ჩანაცვლება", + "Go To" => "გადასვლა", + "Insert Calculated Field" => "გამოთვლადი ველის ჩასმა", + "Go To Special" => "სპეციალური გადასვლა", + "Name Manager" => "სახელების მართვა", + "Conditional Formatting Rules Manager" => "პირობითი ფორმატირების წესების მართვა", + "Search Commands" => "ბრძანებების ძიება", + "Agent Control" => "აგენტის მართვა", + "About GridCraft" => "GridCraft-ის შესახებ", + "Insert Chart" => "დიაგრამის ჩასმა", + "Select Data Source" => "მონაცემთა წყაროს არჩევა", + "Action Journal" => "მოქმედებების ჟურნალი", + "Macros" => "მაკროსები", + "Workbook Statistics" => "სამუშაო წიგნის სტატისტიკა", + "Accessibility" => "ხელმისაწვდომობა", + "Chart Title" => "დიაგრამის სათაური", + "Place Picture in Cell" => "სურათის უჯრაში განთავსება", + "Place Picture over Cells" => "სურათის უჯრებზე განთავსება", + "Pick From List" => "სიიდან არჩევა", + "Save a Copy" => "ასლის შენახვა", + "Save Changes?" => "შევინახო ცვლილებები?", + "Shift cells right" => "უჯრების მარჯვნივ გადაწევა", + "Shift cells down" => "უჯრების ქვემოთ გადაწევა", + "Shift cells left" => "უჯრების მარცხნივ გადაწევა", + "Shift cells up" => "უჯრების ზემოთ გადაწევა", + "Entire row" => "მთელი სტრიქონი", + "Entire column" => "მთელი სვეტი", + "Row height (pixels):" => "სტრიქონის სიმაღლე (პიქსელი):", + "Column width (characters):" => "სვეტის სიგანე (სიმბოლო):", + "Standard column width (pixels):" => "სვეტის სტანდარტული სიგანე (პიქსელი):", + "Name:" => "სახელი:", + "Before sheet (position, 0 = first):" => "ფურცლის წინ (პოზიცია, 0 = პირველი):", + "Create a copy" => "ასლის შექმნა", + "Sheets: {sheets}" => "ფურცლები: {sheets}", + "Password (optional):" => "პაროლი (არასავალდებულო):", + "Password:" => "პაროლი:", + "Allow all users of this sheet to:" => "ამ ფურცლის ყველა მომხმარებელს შეუძლია:", + "Format cells" => "უჯრების ფორმატირება", + "Format columns" => "სვეტების ფორმატირება", + "Format rows" => "სტრიქონების ფორმატირება", + "Insert rows" => "სტრიქონების ჩასმა", + "Delete rows" => "სტრიქონების წაშლა", + "Use AutoFilter" => "ავტოფილტრის გამოყენება", + " (password, unlocked)" => " (პაროლით, განბლოკილი)", + " (password)" => " (პაროლით)", + "No ranges yet." => "დიაპაზონები ჯერ არ არის.", + "Ranges that stay editable when the sheet is protected:" => "დიაპაზონები, რომლებიც ფურცლის დაცვისას რედაქტირებადი რჩება:", + "Action" => "მოქმედება", + "Modify" => "შეცვლა", + "Unlock with password" => "პაროლით განბლოკვა", + "Title:" => "სათაური:", + "Refers to cells:" => "მიმართავს უჯრებს:", + "Range password:" => "დიაპაზონის პაროლი:", + "New title (Modify):" => "ახალი სათაური (შეცვლა):", + "Remove the password (Modify)" => "პაროლის მოხსნა (შეცვლა)", + "'{file}' is protected." => "„{file}“ დაცულია.", + "Unhide sheet:" => "ფურცლის გამოჩენა:", + "Hidden: {sheets}" => "დამალული: {sheets}", + "All" => "ყველა", + "Formulas (F)" => "ფორმულები (F)", + "Values (V)" => "მნიშვნელობები (V)", + "Formats (T)" => "ფორმატები (T)", + "Comments and notes (C)" => "კომენტარები და შენიშვნები (C)", + "Validation" => "შემოწმება", + "All except borders" => "ყველა, ჩარჩოების გარდა", + "Column widths" => "სვეტების სიგანეები", + "Formulas and number formats" => "ფორმულები და რიცხვის ფორმატები", + "Values and number formats" => "მნიშვნელობები და რიცხვის ფორმატები", + "Operation" => "ოპერაცია", + "Add" => "დამატება", + "Subtract" => "გამოკლება", + "Multiply" => "გამრავლება", + "Divide" => "გაყოფა", + "Skip blanks" => "ცარიელების გამოტოვება", + "Transpose (E)" => "ტრანსპოზიცია (E)", + "Series in" => "მწკრივი მიმართულებით:", + "Columns" => "სვეტები", + "Rows" => "სტრიქონები", + "Type" => "ტიპი", + "Linear" => "წრფივი", + "Growth" => "ზრდა", + "Date unit" => "თარიღის ერთეული", + "Day" => "დღე", + "Weekday" => "სამუშაო დღე", + "Month" => "თვე", + "Year" => "წელი", + "Step value:" => "ბიჯის მნიშვნელობა:", + "Stop value:" => "საბოლოო მნიშვნელობა:", + "Start a conversation:" => "დაიწყეთ საუბარი:", + "Note:" => "შენიშვნა:", + "Display:" => "საჩვენებელი ტექსტი:", + "Link to (web address, e-mail or Sheet!A1):" => "ბმული (ვებმისამართი, ელფოსტა ან Sheet!A1):", + "ScreenTip:" => "მინიშნება:", + "Data Range:" => "მონაცემთა დიაპაზონი:", + "Location Range:" => "განთავსების დიაპაზონი:", + "Markers" => "მარკერები", + "Footer:" => "ქვედა კოლონტიტული:", + "Left margin (in):" => "მარცხენა ველი (დუიმი):", + "Right margin (in):" => "მარჯვენა ველი (დუიმი):", + "Top margin (in):" => "ზედა ველი (დუიმი):", + "Bottom margin (in):" => "ქვედა ველი (დუიმი):", + "Header (in):" => "ზედა კოლონტიტული (დუიმი):", + "Footer (in):" => "ქვედა კოლონტიტული (დუიმი):", + "Tab" => "ტაბულაცია", + "Semicolon" => "წერტილმძიმე", + "Comma" => "მძიმე", + "Space" => "სივრცე", + "Other:" => "სხვა:", + "Treat consecutive delimiters as one" => "მიმდევრობითი გამყოფების ერთად ჩათვლა", + "Destination:" => "დანიშნულება:", + "My data has headers" => "ჩემს მონაცემებს სათაურები აქვს", + "Columns (blank = all, e.g. A,C):" => "სვეტები (ცარიელი = ყველა, მაგ. A,C):", + "Timeline range (blank: first column of the selection):" => "დროის ღერძის დიაპაზონი (ცარიელი: მონიშნულის პირველი სვეტი):", + "Values range (blank: second column of the selection):" => "მნიშვნელობების დიაპაზონი (ცარიელი: მონიშნულის მეორე სვეტი):", + "Confidence interval" => "ნდობის ინტერვალი", + "Confidence level (%):" => "ნდობის დონე (%):", + "Seasonality (auto, 0 for none, or a season length):" => "სეზონურობა (ავტომატური, 0: გარეშე, ან სეზონის სიგრძე):", + "Fill missing points using" => "გამოტოვებული წერტილების შევსება", + "Interpolation" => "ინტერპოლაცია", + "Zeros" => "ნულები", + "Aggregate duplicates using" => "დუბლიკატების აგრეგაცია", + "Average" => "საშუალო", + "Count" => "რაოდენობა", + "CountA" => "COUNTA", + "Max" => "მაქსიმუმი", + "Median" => "მედიანა", + "Min" => "მინიმუმი", + "Sum" => "ჯამი", + "Product" => "ნამრავლი", + "Include forecast statistics" => "პროგნოზის სტატისტიკის ჩართვა", + "Chart" => "დიაგრამა", + "Diagram" => "სქემა", + "Decorative Text" => "დეკორატიული ტექსტი", + "Line chart" => "ხაზოვანი დიაგრამა", + "Column chart" => "სვეტოვანი დიაგრამა", + "At each change in (column letter):" => "ყოველი ცვლილებისას სვეტში (ასო):", + "Use function" => "ფუნქცია:", + "Add subtotal to (columns, e.g. C,D):" => "შუალედური ჯამის დამატება (სვეტები, მაგ. C,D):", + "Magnification" => "გადიდების ხარისხი", + "Custom (%):" => "საკუთარი (%):", + "Scope (Workbook or sheet name):" => "მოქმედების არე (სამუშაო წიგნი ან ფურცლის სახელი):", + "Comment:" => "კომენტარი:", + "Refers to:" => "მიმართავს:", + "Allow" => "დაშვებულია", + "Any value" => "ნებისმიერი მნიშვნელობა", + "Whole number" => "მთელი რიცხვი", + "Decimal" => "ათწილადი", + "List" => "სია", + "Text length" => "ტექსტის სიგრძე", + "between" => "შორის", + "not between" => "არა შორის", + "equal to" => "ტოლია", + "not equal to" => "არ არის ტოლი", + "greater than" => "მეტია", + "less than" => "ნაკლებია", + "greater than or equal to" => "მეტია ან ტოლი", + "less than or equal to" => "ნაკლებია ან ტოლი", + "Minimum / Source / Formula:" => "მინიმუმი / წყარო / ფორმულა:", + "Maximum:" => "მაქსიმუმი:", + "Ignore blank" => "ცარიელის იგნორირება", + "In-cell dropdown" => "ჩამოსაშლელი სია უჯრაში", + "Input message:" => "შეყვანის შეტყობინება:", + "Error style" => "შეცდომის სტილი", + "Stop" => "შეწყვეტა", + "Warning" => "გაფრთხილება", + "Information" => "ინფორმაცია", + "Error message:" => "შეცდომის შეტყობინება:", + "Format cells that are (value):" => "დაფორმატდეს უჯრები, რომლებიც (მნიშვნელობა):", + "and:" => "და:", + "Format cells that contain the text:" => "დაფორმატდეს უჯრები, რომლებიც შეიცავს ტექსტს:", + "Format cells that contain a date occurring:" => "დაფორმატდეს უჯრები, რომლებიც შეიცავს თარიღს:", + "Today" => "დღეს", + "Tomorrow" => "ხვალ", + "In the last 7 days" => "ბოლო 7 დღეში", + "Last week" => "წინა კვირა", + "This week" => "ეს კვირა", + "Next week" => "შემდეგი კვირა", + "Last month" => "წინა თვე", + "This month" => "ეს თვე", + "Next month" => "შემდეგი თვე", + "Format values where this formula is true:" => "დაფორმატდეს მნიშვნელობები, სადაც ეს ფორმულა ჭეშმარიტია:", + "with" => "ფორმატით:", + "Light Red Fill with Dark Red Text" => "ღია წითელი შევსება მუქი წითელი ტექსტით", + "Yellow Fill with Dark Yellow Text" => "ყვითელი შევსება მუქი ყვითელი ტექსტით", + "Green Fill with Dark Green Text" => "მწვანე შევსება მუქი მწვანე ტექსტით", + "Light Red Fill" => "ღია წითელი შევსება", + "Red Text" => "წითელი ტექსტი", + "Red Border" => "წითელი ჩარჩო", + "Formula:" => "ფორმულა:", + "Select" => "მონიშვნა", + "Blanks" => "ცარიელები", + "Errors" => "შეცდომები", + "Numbers" => "რიცხვები", + "Current region" => "მიმდინარე რეგიონი", + "Last cell" => "ბოლო უჯრა", + "Visible cells only" => "მხოლოდ ხილული უჯრები", + "Conditional formats" => "პირობითი ფორმატები", + "Data validation" => "მონაცემთა შემოწმება", + "Horizontal axis title:" => "ჰორიზონტალური ღერძის სათაური:", + "Vertical axis title:" => "ვერტიკალური ღერძის სათაური:", + "No picture selected" => "სურათი არ არის მონიშნული", + "Picture file path (PNG or JPEG):" => "სურათის ფაილის მისამართი (PNG ან JPEG):", + "Description (optional):" => "აღწერა (არასავალდებულო):", + "Fits inside the selected cell and moves with its content." => "ეტევა მონიშნულ უჯრაში და მის შიგთავსთან ერთად გადაადგილდება.", + "Choose a PNG or JPEG no larger than 16 MB." => "აირჩიეთ PNG ან JPEG, არაუმეტეს 16 მბ.", + "About" => "პროგრამის შესახებ", + "Contributors" => "მონაწილეები", + "Models" => "მოდელები", + "Version {version}" => "ვერსია {version}", + "Join the ArtCraft Discord" => "შემოუერთდით ArtCraft-ის Discord-ს", + "This workbook has no scripts or macros." => "ამ სამუშაო წიგნში სკრიპტები და მაკროსები არ არის.", + "(unnamed)" => "(უსახელო)", + "— VBA project (preserved, not run)" => "— VBA პროექტი (შენახულია, არ სრულდება)", + "— 1 step" => "— 1 ნაბიჯი", + "— {steps} steps" => "— ნაბიჯი: {steps}", + "Alignment" => "სწორება", + "Font" => "შრიფტი", + "Border" => "ჩარჩო", + "Format Cells|Fill" => "შევსება", + "Protection" => "დაცვა", + "Category:" => "კატეგორია:", + "Sample" => "ნიმუში", + "Type (custom format code):" => "ტიპი (საკუთარი ფორმატის კოდი):", + "Vertical" => "ვერტიკალური", + "Justify" => "ორმხრივი სწორება", + "Center Across Selection" => "მონიშნულის ცენტრში", + "Distributed" => "თანაბრად განაწილებული", + "Top" => "ზემოთ", + "Bottom" => "ქვემოთ", + "Indent" => "შეწევა", + "Orientation (degrees)" => "ორიენტაცია (გრადუსი)", + "Wrap text" => "ტექსტის გადატანა", + "Shrink to fit" => "ზომაზე მორგება", + "Bold" => "მუქი", + "Italic" => "დახრილი", + "None" => "არცერთი", + "Single" => "ერთმაგი", + "Double" => "ორმაგი", + "Single Accounting" => "ერთმაგი საბუღალტრო", + "Double Accounting" => "ორმაგი საბუღალტრო", + "Superscript" => "ზედა ინდექსი", + "Subscript" => "ქვედა ინდექსი", + "Color:" => "ფერი:", + "Outline" => "კონტური", + "Diagonal ↘" => "დიაგონალი ↘", + "Diagonal ↗" => "დიაგონალი ↗", + "none" => "არცერთი", + "thin" => "თხელი", + "medium" => "საშუალო", + "thick" => "სქელი", + "dashed" => "ტირეებიანი", + "dotted" => "პუნქტირი", + "double" => "ორმაგი", + "Background Color:" => "ფონის ფერი:", + "Locked" => "ჩაკეტილი", + "Hidden" => "დამალული", + "Search:" => "ძიება:", + "e.g. lookup, average, date" => "მაგ. lookup, average, date", + "Date & Time" => "თარიღი და დრო", + "Lookup & Reference" => "ძებნა და ცნობარები", + "Math & Trig" => "მათემატიკა და ტრიგონომეტრია", + "Statistical" => "სტატისტიკური", + "Engineering" => "საინჟინრო", + "Database" => "მონაცემთა ბაზა", + "Compatibility" => "თავსებადობა", + "Web" => "ვები", + "Cube" => "კუბი", + "Add-in and Automation" => "დანამატები და ავტომატიზაცია", + "Find" => "ძებნა", + "Replace" => "ჩანაცვლება", + "Find what:" => "რა მოიძებნოს:", + "Replace with:" => "ჩანაცვლება:", + "Match case" => "რეგისტრის გათვალისწინება", + "Match entire cell contents" => "უჯრის მთელი შიგთავსის დამთხვევა", + "Within workbook" => "მთელ სამუშაო წიგნში", + "Replace All" => "ყველას ჩანაცვლება", + "Find All" => "ყველას ძებნა", + "Find Next" => "შემდეგის ძებნა", + "All done. We made {count} replacements." => "დასრულდა. ჩანაცვლდა: {count}.", + "{count} cell(s) found" => "ნაპოვნი უჯრა: {count}", + "Reference:" => "ცნობარი:", + "Special…" => "სპეციალური…", + "My list has headers" => "ჩემს სიას სათაურები აქვს", + "Sort by" => "სორტირება:", + "Then by" => "შემდეგ:", + "Cell Values" => "უჯრის მნიშვნელობები", + "Cell Color" => "უჯრის ფერი", + "A to Z" => "ა-დან ჰ-მდე", + "Z to A" => "ჰ-დან ა-მდე", + "+ Add Level" => "+ დონის დამატება", + "New…" => "ახალი…", + "Edit…" => "რედაქტირება…", + "Name" => "სახელი", + "Value" => "მნიშვნელობა", + "Refers To" => "მიმართავს", + "Scope" => "მოქმედების არე", + "Workbook" => "სამუშაო წიგნი", + "No names defined" => "სახელები არ არის განსაზღვრული", + "Recommended Charts" => "რეკომენდებული დიაგრამები", + "All Charts" => "ყველა დიაგრამა", + "Clustered Column" => "დაჯგუფებული სვეტოვანი", + "Stacked Column" => "დასტად სვეტოვანი", + "100% Stacked Column" => "100% დასტად სვეტოვანი", + "Clustered Bar" => "დაჯგუფებული ზოლოვანი", + "Stacked Bar" => "დასტად ზოლოვანი", + "100% Stacked Bar" => "100% დასტად ზოლოვანი", + "Line" => "ხაზოვანი", + "Line with Markers" => "ხაზოვანი მარკერებით", + "Stacked Line" => "დასტად ხაზოვანი", + "Pie" => "წრიული", + "Doughnut" => "რგოლოვანი", + "Area" => "ფართობითი", + "Stacked Area" => "დასტად ფართობითი", + "Scatter" => "წერტილოვანი", + "Scatter with Lines" => "წერტილოვანი ხაზებით", + "Radar" => "რადარული", + "Histogram" => "ჰისტოგრამა", + "Waterfall" => "ჩანჩქერი", + "Funnel" => "ძაბრი", + "Combo" => "კომბინირებული", + "Chart data range:" => "დიაგრამის მონაცემთა დიაპაზონი:", + "Legend Entries (Series)" => "ლეგენდის ელემენტები (მწკრივები)", + "Series{n}" => "მწკრივი{n}", + "Keep" => "შენარჩუნება:", + "Remove" => "წაშლა", + "Horizontal (Category) Axis Labels:" => "ჰორიზონტალური ღერძის (კატეგორიების) წარწერები:", + "There are no conditional formatting rules on this sheet." => "ამ ფურცელზე პირობითი ფორმატირების წესები არ არის.", + "applies to" => "ეხება", + "Type a command, e.g. freeze, chart, bold…" => "აკრიფეთ ბრძანება, მაგ. დაფიქსირება, დიაგრამა, მუქი…", + "Set cell:" => "უჯრა:", + "To value:" => "მნიშვნელობა:", + "By changing cell:" => "ცვლადი უჯრა:", + "Goal Seeking found a solution: {value}" => "მიზნის ძიებამ იპოვა ამოხსნა: {value}", + "Analysis Tools" => "ანალიზის ხელსაწყოები", + "Anova: Single Factor" => "დისპერსიული ანალიზი: ერთფაქტორიანი", + "Correlation" => "კორელაცია", + "Covariance" => "კოვარიაცია", + "Descriptive Statistics" => "აღწერითი სტატისტიკა", + "Exponential Smoothing" => "ექსპონენციალური დაგლუვება", + "F-Test Two-Sample for Variances" => "F-ტესტი: ორი შერჩევა დისპერსიებისთვის", + "Moving Average" => "მცოცავი საშუალო", + "Rank and Percentile" => "რანგი და პროცენტილი", + "Regression" => "რეგრესია", + "t-Test: Paired Two Sample for Means" => "t-ტესტი: ორი დაწყვილებული შერჩევა საშუალოებისთვის", + "t-Test: Two-Sample Assuming Equal Variances" => "t-ტესტი: ორი შერჩევა ტოლი დისპერსიების დაშვებით", + "t-Test: Two-Sample Assuming Unequal Variances" => "t-ტესტი: ორი შერჩევა განსხვავებული დისპერსიების დაშვებით", + "Output options" => "გამოტანის პარამეტრები", + "Output Range:" => "გამომავალი დიაპაზონი:", + "New Worksheet Ply:" => "ახალი ფურცელი:", + "Grouped By:" => "დაჯგუფება:", + "Labels in first row" => "წარწერები პირველ სტრიქონში", + "Input Range:" => "შემავალი დიაპაზონი:", + "Variable 1 Range:" => "ცვლადი 1-ის დიაპაზონი:", + "Variable 2 Range:" => "ცვლადი 2-ის დიაპაზონი:", + "Summary statistics" => "შემაჯამებელი სტატისტიკა", + "Confidence Level for Mean (%), blank for none:" => "საშუალოს ნდობის დონე (%), ცარიელი: გარეშე:", + "Kth Largest (blank for none):" => "k-ური უდიდესი (ცარიელი: გარეშე):", + "Kth Smallest (blank for none):" => "k-ური უმცირესი (ცარიელი: გარეშე):", + "Bin Range (blank for automatic bins):" => "ინტერვალების დიაპაზონი (ცარიელი: ავტომატური ინტერვალები):", + "Pareto (sorted histogram)" => "პარეტო (დალაგებული ჰისტოგრამა)", + "Cumulative Percentage" => "კუმულაციური პროცენტი", + "Alpha:" => "ალფა:", + "Input Y Range:" => "შემავალი Y დიაპაზონი:", + "Input X Range:" => "შემავალი X დიაპაზონი:", + "Constant is Zero" => "მუდმივა ნულია", + "Confidence Level (%):" => "ნდობის დონე (%):", + "Residuals" => "ნაშთები", + "Standardized Residuals" => "სტანდარტიზებული ნაშთები", + "Normal Probability" => "ნორმალური ალბათობა", + "Interval:" => "ინტერვალი:", + "Standard Errors" => "სტანდარტული ცდომილებები", + "Damping factor:" => "ჩაქრობის კოეფიციენტი:", + "Hypothesized Mean Difference:" => "საშუალოების ჰიპოთეტური სხვაობა:", + "Set Objective:" => "მიზანი:", + "To:" => "სადამდე:", + "Value Of:" => "მნიშვნელობა:", + "By Changing Variable Cells:" => "ცვლადი უჯრების შეცვლით:", + "Subject to the Constraints:" => "შეზღუდვების გათვალისწინებით:", + "Make Unconstrained Variables Non-Negative" => "შეუზღუდავი ცვლადების არაუარყოფითად ქცევა", + "Select a Solving Method:" => "ამოხსნის მეთოდის არჩევა:", + "GRG Nonlinear" => "GRG არაწრფივი", + "Solve" => "ამოხსნა", + "Keep Solver Solution" => "ამომხსნელის ამონახსნის შენარჩუნება", + "Restore Original Values" => "საწყისი მნიშვნელობების აღდგენა", + "The spelling check is complete for the entire sheet." => "მართლწერის შემოწმება მთელ ფურცელზე დასრულდა.", + "Not in Dictionary ({cell}):" => "ლექსიკონში არ არის ({cell}):", + "Suggestions:" => "შეთავაზებები:", + "(No suggestions)" => "(შეთავაზებები არ არის)", + "Ignore Once" => "ერთხელ გამოტოვება", + "Add to Dictionary" => "ლექსიკონში დამატება", + "Change" => "ჩანაცვლება", + "Change All" => "ყველას ჩანაცვლება", + "$ English (United States)" => "$ ინგლისური (აშშ)", + "Add Chart Element" => "დიაგრამის ელემენტის დამატება", + "Align Left" => "მარცხნივ სწორება", + "Align Right" => "მარჯვნივ სწორება", + "Bottom Align" => "ქვემოთ სწორება", + "Calculate Now (F9)" => "ახლავე გადათვლა (F9)", + "Calculate Sheet (⇧F9)" => "ფურცლის გადათვლა (⇧F9)", + "Calculation Options" => "გამოთვლის პარამეტრები", + "Cell Styles" => "უჯრის სტილები", + "Change Chart Type" => "დიაგრამის ტიპის შეცვლა", + "Check Accessibility" => "ხელმისაწვდომობის შემოწმება", + "Clear Filter" => "ფილტრის მოხსნა", + "Column or Bar" => "სვეტოვანი ან ზოლოვანი", + "Comments pane" => "კომენტარების პანელი", + "Convert the last ink stroke to a shape" => "ბოლო შტრიხის ფიგურად გარდაქმნა", + "Convert to Range" => "დიაპაზონად გარდაქმნა", + "Copy" => "კოპირება", + "Custom Sort" => "საკუთარი სორტირება", + "Cut" => "ამოჭრა", + "Define Name…" => "სახელის განსაზღვრა…", + "Delete Comment" => "კომენტარის წაშლა", + "Delete Sheet" => "ფურცლის წაშლა", + "Delete chart" => "დიაგრამის წაშლა", + "Delete…" => "წაშლა…", + "Dismiss" => "უგულებელყოფა", + "Down" => "ქვემოთ", + "Edit chart title" => "დიაგრამის სათაურის რედაქტირება", + "Erase ink strokes" => "მელნის შტრიხების წაშლა", + "Every command run in this session (replayable)" => "ამ სესიაში შესრულებული ყველა ბრძანება (განმეორებადი)", + "Expand formula bar" => "ფორმულათა ზოლის გაშლა", + "Filter (⌘⇧F)" => "ფილტრი (⌘⇧F)", + "Filter by Selected Cell's Value" => "მონიშნული უჯრის მნიშვნელობით გაფილტვრა", + "Find & Select" => "ძებნა და მონიშვნა", + "Flash Fill (⌘E)" => "მყისიერი შევსება (⌘E)", + "Forecast Sheet" => "პროგნოზის ფურცელი", + "Forecast end (date or number; blank: a third of the history):" => "პროგნოზის დასასრული (თარიღი ან რიცხვი; ცარიელი: ისტორიის მესამედი):", + "Format Chart pane" => "დიაგრამის ფორმატირების პანელი", + "Format as Table" => "ცხრილად ფორმატირება", + "Hide" => "დამალვა", + "Hide Sheet" => "ფურცლის დამალვა", + "Hierarchy & more" => "იერარქია და სხვა", + "Highlighter" => "მარკერი", + "How agents drive GridCraft (MCP / control channel)" => "როგორ მართავენ აგენტები GridCraft-ს (MCP / მართვის არხი)", + "Import a text or CSV file" => "ტექსტური ან CSV ფაილის შემოტანა", + "Insert Function" => "ფუნქციის ჩასმა", + "Insert Function (⇧F3)" => "ფუნქციის ჩასმა (⇧F3)", + "Insert Link (⌘K)" => "ბმულის ჩასმა (⌘K)", + "Insert Sheet" => "ფურცლის ჩასმა", + "Insert Slicer" => "სრეზის ჩასმა", + "Insert a picture" => "სურათის ჩასმა", + "Insert a slicer to filter a table" => "სრეზის ჩასმა ცხრილის გასაფილტრად", + "Insert an icon" => "ხატულის ჩასმა", + "Insert…" => "ჩასმა…", + "Line or Area" => "ხაზოვანი ან ფართობითი", + "Link…" => "ბმული…", + "Macros and scripts in this workbook (Alt+F8)" => "ამ სამუშაო წიგნის მაკროსები და სკრიპტები (Alt+F8)", + "Middle Align" => "შუაში სწორება", + "More commands" => "სხვა ბრძანებები", + "Move or Copy Sheet…" => "ფურცლის გადატანა ან კოპირება…", + "New sheet (⇧F11)" => "ახალი ფურცელი (⇧F11)", + "Next sheet" => "შემდეგი ფურცელი", + "Page Breaks" => "გვერდის გამყოფები", + "Paper Size" => "ფურცლის ზომა", + "Paste (⌘V)" => "ჩასმა (⌘V)", + "Pick From Drop-down List…" => "ჩამოსაშლელი სიიდან არჩევა…", + "Pie or Doughnut" => "წრიული ან რგოლოვანი", + "Previous sheet" => "წინა ფურცელი", + "Print Area" => "ბეჭდვის არე", + "Print Titles" => "სათაურების ბეჭდვა", + "Protect Workbook structure" => "სამუშაო წიგნის სტრუქტურის დაცვა", + "Redo (⌘Y)" => "ხელახლა შესრულება (⌘Y)", + "Save (⌘S)" => "შენახვა (⌘S)", + "Scatter or Bubble" => "წერტილოვანი ან ბუშტოვანი", + "Search and run any command" => "ნებისმიერი ბრძანების ძიება და გაშვება", + "Search commands (⌘⇧Space)" => "ბრძანებების ძიება (⌘⇧Space)", + "Select and move ink and shapes" => "მელნისა და ფიგურების მონიშვნა და გადაადგილება", + "Series…" => "მწკრივი…", + "Share: export or save a copy" => "გაზიარება: ექსპორტი ან ასლის შენახვა", + "Show Formulas (⌃`)" => "ფორმულების ჩვენება (⌃`)", + "Slicer" => "სლაისერი", + "Sort & Filter" => "სორტირება და ფილტრი", + "Spelling (F7)" => "მართლწერა (F7)", + "Statistic" => "სტატისტიკური", + "Switch Row/Column" => "სტრიქონი/სვეტის შეცვლა", + "Table (⌘T)" => "ცხრილი (⌘T)", + "Table Styles" => "ცხრილის სტილები", + "Text to Columns" => "ტექსტის სვეტებად დაყოფა", + "The output range already holds data. Replace it with the report?" => "გამომავალ დიაპაზონში უკვე არის მონაცემები. ჩავანაცვლოთ ანგარიშით?", + "Top Align" => "ზემოთ სწორება", + "Undo (⌘Z)" => "დაბრუნება (⌘Z)", + "Undo list" => "დაბრუნების სია", + "Unhide Sheet…" => "ფურცლის გამოჩენა…", + "Up" => "ზემოთ", + "Version, contributors and the AI models that helped" => "ვერსია, მონაწილეები და დამხმარე AI მოდელები", + "What-If Analysis" => "ანალიზი „რა მოხდება, თუ“", + "Zoom In" => "გადიდება", + "Zoom Out" => "დაპატარავება", + "Zoom to 100%" => "მასშტაბი 100%", + "Zoom to Selection" => "მონიშნულის მასშტაბირება", + "Zoom…" => "მასშტაბი…", + "£ English (United Kingdom)" => "£ ინგლისური (გაერთიანებული სამეფო)", + "¥ Japanese" => "¥ იაპონური", + "€ Euro" => "€ ევრო", + "Tab|Insert" => "ჩასმა", + "AutoSave" => "ავტოშენახვა", + "new workbook|Book" => "წიგნი", + "new workbook|Sheet" => "ფურცელი", + "Insert\nSlicer" => "სრეზის\nჩასმა", + "Pen\nBlack" => "შავი\nკალამი", + "Pen\nBlue" => "ლურჯი\nკალამი", + "Pen\nRed" => "წითელი\nკალამი", + "Protect\nSheet" => "ფურცლის\nდაცვა", + "Watch\nWindow" => "დაკვირვების\nფანჯარა", + "Workbook\nStatistics" => "სამუშაო წიგნის\nსტატისტიკა", + "PivotTable Fields" => "კრებსითი ცხრილის ველები", + "Choose fields to add to report:" => "აირჩიეთ ანგარიშში დასამატებელი ველები:", + "Use a field's menu to move it between areas:" => "არეებს შორის გადასატანად გამოიყენეთ ველის მენიუ:", + "Filters" => "ფილტრები", + "Values" => "მნიშვნელობები", + "Move to Row Labels" => "სტრიქონების სათაურებში გადატანა", + "Move to Column Labels" => "სვეტების სათაურებში გადატანა", + "Move to Report Filter" => "ანგარიშის ფილტრში გადატანა", + "Move to Values" => "მნიშვნელობებში გადატანა", + "Summarize by Sum" => "შეჯამება: ჯამი", + "Summarize by Count" => "შეჯამება: რაოდენობა", + "Summarize by Average" => "საშუალოთი შეჯამება", + "Summarize by Max" => "შეჯამება: მაქსიმუმი", + "Summarize by Min" => "შეჯამება: მინიმუმი", + "Show as No Calculation" => "ჩვენება: გამოთვლის გარეშე", + "Show as % of Grand Total" => "ჩვენება: % საერთო ჯამიდან", + "Show as Running Total" => "ჩვენება: მზარდი ჯამი", + "Show as Rank" => "რანგის სახით ჩვენება", + "Group by Years" => "წლების მიხედვით დაჯგუფება", + "Group by Quarters" => "კვარტლების მიხედვით დაჯგუფება", + "Group by Months" => "თვეების მიხედვით დაჯგუფება", + "Remove Field" => "ველის წაშლა", + "Refresh" => "განახლება", + "Calculated Field…" => "გამოთვლადი ველი…", + "Report Layout" => "ანგარიშის განლაგება", + "Compact" => "კომპაქტური", + "Tabular" => "ცხრილური", + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet)." => { + "უჯრების ჩაკეტვა ან ფორმულების დამალვა მხოლოდ ფურცლის დაცვის შემდეგ მოქმედებს (განხილვა › ფურცლის დაცვა)." + } + "No Color" => "ფერის გარეშე", + "Unprotect Sheet…" => "ფურცლის დაცვის მოხსნა…", + "Fit selection" => "მონიშნულის ჩატევა", + "Account" => "ანგარიში", + "Product Information" => "ინფორმაცია პროდუქტის შესახებ", + "Version" => "ვერსია", + "Platform" => "პლატფორმა", + "Licence" => "ლიცენზია", + "Select Data…" => "მონაცემების არჩევა…", + "Format Chart Area…" => "დიაგრამის არის ფორმატირება…", + "Number Stored as Text" => "ტექსტად შენახული რიცხვი", + "Convert to Number" => "რიცხვად გარდაქმნა", + "Error checking options" => "შეცდომების შემოწმების პარამეტრები", + "Paste formulas that refer to the copied cells" => "დაკოპირებულ უჯრებზე მიმართული ფორმულების ჩასმა", + "Insert Link" => "ბმულის ჩასმა", + "Redo" => "ხელახლა შესრულება", + "Search commands" => "ბრძანებების ძიება", + "Undo" => "დაბრუნება", + "Rename" => "სახელის შეცვლა", + "Move or Copy…" => "გადატანა ან კოპირება…", + "Duplicate" => "დუბლირება", + "Tab Color" => "ჩანართის ფერი", + "Unhide…" => "გამოჩენა…", + "Select All Sheets" => "ყველა ფურცლის მონიშვნა", + "All sheets" => "ყველა ფურცელი", + "AutoSave: save after every change (workbooks saved to a file)" => { + "ავტოშენახვა: შენახვა ყოველი ცვლილების შემდეგ (ფაილში შენახული სამუშაო წიგნებისთვის)" + } + "Copies" => "ასლები", + "End date:" => "საბოლოო თარიღი:", + "Finding printers…" => "პრინტერების ძიება…", + "Forecast start (a date or number in the history; blank: after the last point):" => { + "პროგნოზის დასაწყისი (თარიღი ან რიცხვი ისტორიიდან; ცარიელი: ბოლო წერტილის შემდეგ):" + } + "Grayscale" => "ნაცრისფერი ტონები", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "ზედა კოლონტიტული (&L მარცხნივ, &C ცენტრში, &R მარჯვნივ; &P გვერდი, &N გვერდები, &D თარიღი, &A ფურცელი):" + } + "No printers found. Configure a system printer or export a PDF." => { + "პრინტერი ვერ მოიძებნა. დააყენეთ სისტემის პრინტერი ან გააკეთეთ PDF ექსპორტი." + } + "One-sided" => "ცალმხრივი", + "Options|Editing" => "რედაქტირება", + "Print failed: the printing worker stopped." => "დაბეჭდვა ვერ მოხერხდა: ბეჭდვის პროცესი შეწყდა.", + "Print failed: {error}" => "დაბეჭდვა ვერ მოხერხდა: {error}", + "Print job submitted." => "ბეჭდვის დავალება გაიგზავნა.", + "Print job submitted: {receipt}" => "ბეჭდვის დავალება გაიგზავნა: {receipt}", + "Printer" => "პრინტერი", + "Printer default" => "პრინტერის ნაგულისხმევი პარამეტრი", + "Printer discovery failed." => "პრინტერების მოძებნა ვერ მოხერხდა.", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "სამუშაო წიგნის დაცვა: სტრუქტურა (ფურცლების დამატება, გადატანა, სახელის შეცვლა, დამალვა და წაშლა შეუძლებელია)." + } + "Refresh printers" => "პრინტერების განახლება", + "Select a printer" => "აირჩიეთ პრინტერი", + "Source:" => "წყარო:", + "Submitting print job…" => "ბეჭდვის დავალება იგზავნება…", + "Two-sided printing" => "ორმხრივი ბეჭდვა", + "Two-sided: long edge" => "ორმხრივი: გრძელი გვერდი", + "Two-sided: short edge" => "ორმხრივი: მოკლე გვერდი", + "Click to copy" => "დაწკაპეთ დასაკოპირებლად", + "Circular References" => "წრიული ცნობარები", + "Scale with Document" => "დოკუმენტთან ერთად მასშტაბირება", + "Align with Page Margins" => "გვერდის ველებთან სწორება", + "Maximum Iterations:" => "იტერაციების მაქსიმალური რაოდენობა:", + "Maximum Change:" => "მაქსიმალური ცვლილება:", + "Maximum Iterations must be a whole number from 1 to 32767." => "იტერაციების მაქსიმალური რაოდენობა უნდა იყოს მთელი რიცხვი 1-დან 32767-მდე.", + "Maximum Change must be a number of 0 or more." => "მაქსიმალური ცვლილება უნდა იყოს 0 ან მეტი რიცხვი.", + "Print What" => "რა დაიბეჭდოს", + "100% Stacked Area" => "100% დასტად ფართობითი", + "Save As…" => "შენახვა როგორც…", + "Print…" => "დაბეჭდვა…", + "Export as PDF…" => "PDF-ად ექსპორტი…", + "Type to filter…" => "აკრიფეთ გასაფილტრად…", + "Sort Ascending" => "ზრდადი სორტირება", + "Sort Descending" => "კლებადი სორტირება", + "Search" => "ძიება", + "Hex" => "Hex", + "New Workbook" => "ახალი სამუშაო წიგნი", + "Save a Copy as Excel Workbook (.xlsx)…" => "ასლის შენახვა Excel-ის სამუშაო წიგნად (.xlsx)…", + "Export as CSV…" => "CSV-ად ექსპორტი…", + "Export as Web Page (.html)…" => "ვებგვერდად ექსპორტი (.html)…", + "Bottom Border" => "ქვედა ჩარჩო", + "Top Border" => "ზედა ჩარჩო", + "Left Border" => "მარცხენა ჩარჩო", + "Right Border" => "მარჯვენა ჩარჩო", + "No Border" => "ჩარჩოს გარეშე", + "All Borders" => "ყველა ჩარჩო", + "Outside Borders" => "გარე ჩარჩოები", + "Thick Outside Borders" => "სქელი გარე ჩარჩოები", + "Bottom Double Border" => "ორმაგი ქვედა ჩარჩო", + "Thick Bottom Border" => "სქელი ქვედა ჩარჩო", + "Top and Bottom Border" => "ზედა და ქვედა ჩარჩო", + "Top and Thick Bottom Border" => "ზედა და სქელი ქვედა ჩარჩო", + "Top and Double Bottom Border" => "ზედა და ორმაგი ქვედა ჩარჩო", + "Inside Borders" => "შიდა ჩარჩოები", + "More Borders…" => "სხვა ჩარჩოები…", + "More Functions…" => "სხვა ფუნქციები…", + "No Fill" => "შევსების გარეშე", + "Theme Colors" => "თემის ფერები", + "Standard Colors" => "სტანდარტული ფერები", + "Highlight Cells Rules" => "უჯრების გამოკვეთის წესები", + "Greater Than…" => "მეტია…", + "Less Than…" => "ნაკლებია…", + "Between…" => "შორის…", + "Equal To…" => "ტოლია…", + "Text that Contains…" => "ტექსტი, რომელიც შეიცავს…", + "A Date Occurring…" => "თარიღი…", + "Duplicate Values…" => "განმეორებადი მნიშვნელობები…", + "Top/Bottom Rules" => "ზედა/ქვედა მნიშვნელობების წესები", + "Blue" => "ლურჯი", + "Green" => "მწვანე", + "Red" => "წითელი", + "Orange" => "ნარინჯისფერი", + "Light Blue" => "ღია ლურჯი", + "Purple" => "იისფერი", + "Green - Yellow - Red" => "მწვანე - ყვითელი - წითელი", + "Red - Yellow - Green" => "წითელი - ყვითელი - მწვანე", + "Green - White - Red" => "მწვანე - თეთრი - წითელი", + "Blue - White - Red" => "ლურჯი - თეთრი - წითელი", + "White - Green" => "თეთრი - მწვანე", + "White - Red" => "თეთრი - წითელი", + "3 Arrows" => "3 ისარი", + "3 Traffic Lights" => "3 შუქნიშანი", + "3 Symbols" => "3 სიმბოლო", + "4 Ratings" => "4 შეფასება", + "5 Arrows" => "5 ისარი", + "5 Quarters" => "5 მეოთხედი", + "New Rule…" => "ახალი წესი…", + "Clear Rules" => "წესების გასუფთავება", + "Manage Rules…" => "წესების მართვა…", + "Good, Bad and Neutral" => "კარგი, ცუდი და ნეიტრალური", + "Bad" => "ცუდი", + "Good" => "კარგი", + "Neutral" => "ნეიტრალური", + "Data and Model" => "მონაცემები და მოდელი", + "Calculation" => "გამოთვლა", + "Check Cell" => "საკონტროლო უჯრა", + "Explanatory Text" => "განმარტებითი ტექსტი", + "Input" => "შეყვანა", + "Linked Cell" => "დაკავშირებული უჯრა", + "Note" => "შენიშვნა", + "Output" => "გამოტანა", + "Warning Text" => "გამაფრთხილებელი ტექსტი", + "Titles and Headings" => "სათაურები და ქვესათაურები", + "Heading 1" => "სათაური 1", + "Heading 2" => "სათაური 2", + "Heading 3" => "სათაური 3", + "Heading 4" => "სათაური 4", + "Total" => "სულ", + "Themed Cell Styles" => "თემის უჯრის სტილები", + "Number Format" => "რიცხვის ფორმატი", + "Comma [0]" => "გამყოფიანი [0]", + "Currency [0]" => "ფულადი [0]", + "Percent" => "პროცენტული", + "Place in Cell" => "უჯრაში განთავსება", + "Place over Cells" => "უჯრებზე განთავსება", + "Rectangle" => "მართკუთხედი", + "Rounded Rectangle" => "მომრგვალებული მართკუთხედი", + "Oval" => "ოვალი", + "Triangle" => "სამკუთხედი", + "Arrow" => "ისარი", + "Column" => "სვეტოვანი", + "Win/Loss" => "მოგება/წაგება", + "Apply" => "გამოყენება", + "20% - Accent1" => "20% - აქცენტი1", + "20% - Accent2" => "20% - აქცენტი2", + "20% - Accent3" => "20% - აქცენტი3", + "20% - Accent4" => "20% - აქცენტი4", + "20% - Accent5" => "20% - აქცენტი5", + "20% - Accent6" => "20% - აქცენტი6", + "40% - Accent1" => "40% - აქცენტი1", + "40% - Accent2" => "40% - აქცენტი2", + "40% - Accent3" => "40% - აქცენტი3", + "40% - Accent4" => "40% - აქცენტი4", + "40% - Accent5" => "40% - აქცენტი5", + "40% - Accent6" => "40% - აქცენტი6", + "60% - Accent1" => "60% - აქცენტი1", + "60% - Accent2" => "60% - აქცენტი2", + "60% - Accent3" => "60% - აქცენტი3", + "60% - Accent4" => "60% - აქცენტი4", + "60% - Accent5" => "60% - აქცენტი5", + "60% - Accent6" => "60% - აქცენტი6", + "Accent1" => "აქცენტი1", + "Accent2" => "აქცენტი2", + "Accent3" => "აქცენტი3", + "Accent4" => "აქცენტი4", + "Accent5" => "აქცენტი5", + "Accent6" => "აქცენტი6", + "Recent Colors" => "ბოლოდროინდელი ფერები", + "More Colors…" => "სხვა ფერები…", + "Page Break Preview" => "გვერდის გამყოფის გადახედვა", + "Bubble" => "ბუშტოვანი", + "Box & Whisker" => "ყუთი და ულვაშები", + "Treemap" => "ხის რუკა", + "Sunburst" => "მზისებრი", + "Stock" => "საბირჟო", + "Bar" => "ზოლოვანი", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "გადაათრიეთ უჯრების შესავსებად. დიაპაზონის მოსანიშნად გადაათრიეთ უჯრის შიგნიდან." + } + "Record Macro" => "მაკროსის ჩაწერა", + "Stop Recording" => "ჩაწერის შეწყვეტა", + "Use Relative References" => "ფარდობითი ცნობარების გამოყენება", + "Run\nMacro" => "მაკროსის\nგაშვება", + "Macros…" => "მაკროსები…", + "Recording" => "იწერება", + "New Macro" => "ახალი მაკროსი", + "Show" => "ჩვენება", + "Equation" => "განტოლება", + "Insert New Equation..." => "ახალი განტოლების ჩასმა...", + "Trace Error" => "შეცდომის მიდევნება", + "Python Mode" => "Python-ის რეჟიმი", + "Recently Used" => "ბოლოს გამოყენებული", + "More Functions" => "სხვა ფუნქციები", + "Page order" => "გვერდების რიგი", + "Down, then over" => "ჯერ ქვემოთ, შემდეგ მარჯვნივ", + "Over, then down" => "ჯერ მარჯვნივ, შემდეგ ქვემოთ", + "Collapse dialog" => "დიალოგის აკეცვა", + "Expand dialog" => "დიალოგის ჩამოშლა", + "Book" => "წიგნი", + "Sheet" => "ფურცელი", + "Generated|Column" => "სვეტი", + "Generated|Row" => "მწკრივი", + "Page {page}" => "გვერდი {page}", + "Paste Special|Add" => "მიმატება", + "Text to Columns|Comma" => "მძიმე", + _ => return None, + }) +} diff --git a/crates/ui-egui/src/i18n/keys.rs b/crates/ui-egui/src/i18n/keys.rs new file mode 100644 index 0000000000..9ebc41abf4 --- /dev/null +++ b/crates/ui-egui/src/i18n/keys.rs @@ -0,0 +1,2432 @@ +// Shared interface-key inventory. Locale catalogs must cover this same set. +// This includes existing catalog keys and the additional audited UI labels. +// Formula identifiers and user document text are not interface translation keys. + +pub(super) const INTERFACE: &[&str] = &[ + " OK ", + " OK ", + " Solve ", + " (password)", + " (password, unlocked)", + " Cancel ", + " Close ", + " without {key}: another macro took it while recording", + " · at a breakpoint", + " · pass {at} of {of}", + " — Edited", + "$ English (United States)", + "% of all commits", + "'This workbook' is protected.", + "'{file}' is protected.", + "(Blanks)", + "(No suggestions)", + "(Select All Search Results)", + "(Select All)", + "(none)", + "(unnamed)", + ")", + "+ Add Level", + "+Bin", + "+LOC", + ", over no data", + ", {conflicts} of them hold data (red)", + ". Later steps can't be previewed.", + "100%", + "100% Stacked Area", + "100% Stacked Bar", + "100% Stacked Column", + "20% - Accent1", + "20% - Accent2", + "20% - Accent3", + "20% - Accent4", + "20% - Accent5", + "20% - Accent6", + "2×2 matrix", + "3 Arrows", + "3 Symbols", + "3 Traffic Lights", + "4 Ratings", + "40% - Accent1", + "40% - Accent2", + "40% - Accent3", + "40% - Accent4", + "40% - Accent5", + "40% - Accent6", + "5 Arrows", + "5 Quarters", + "60% - Accent1", + "60% - Accent2", + "60% - Accent3", + "60% - Accent4", + "60% - Accent5", + "60% - Accent6", + "= {ref} on the example", + "@{login}: {prs} PRs, {commits} commits, +{added} / −{deleted} lines (Δ {delta}), +{binary_added} / −{binary_deleted} binary assets, {first} – {last}", + "A CSV file, web page or PDF is a copy: the workbook keeps its own file.", + "A Date Occurring", + "A Date Occurring…", + "A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft.", + "A print job is already being submitted.", + "A table can't overlap another table.", + "A to Z", + "A workbook must contain at least one visible worksheet.", + "About", + "About\nGridCraft", + "About GridCraft", + "Above Average", + "Above/Below Average", + "Abs", + "Absolute: always these cells", + "Accent", + "Accent 1", + "Accent 2", + "Accent 3", + "Accent 4", + "Accent 5", + "Accent 6", + "Accent1", + "Accent2", + "Accent3", + "Accent4", + "Accent5", + "Accent6", + "Accessibility", + "Account", + "Accounting", + "Accounting Number Format", + "Action", + "Action\nJournal", + "Action Journal", + "Actions", + "Activate Sheet", + "Active Field", + "Add", + "Add Chart\nElement", + "Add Chart Element", + "Add Field", + "Add Scenario", + "Add Step", + "Add Watch (active cell)", + "Add a step after the selected one", + "Add footer", + "Add header", + "Add subtotal to (columns, e.g. C,D):", + "Add to Dictionary", + "Add-in and Automation", + "Add-ins", + "Advanced", + "Advanced Filter", + "Advanced…", + "Agent\nControl", + "Agent Control", + "Agent Control (MCP)…", + "Agents and other programs that run the macro get an error instead of the question.", + "Aggregate duplicates using", + "Align", + "Align Left", + "Align Right", + "Align with Page Margins", + "Alignment", + "All", + "All Borders", + "All Charts", + "All Methods", + "All Scripts", + "All done. We made {count} replacements.", + "All except borders", + "All sheets", + "Allow", + "Allow Edit\nRanges", + "Allow Edit Ranges", + "Allow Edit Ranges…", + "Allow all users of this sheet to:", + "Alpha:", + "Always run on this range", + "Always this range:", + "Analysis", + "Analysis Tools", + "Angle Clockwise", + "Angle Counterclockwise", + "Animations", + "Anova needs at least two groups, each with at least one number.", + "Anova: Single Factor", + "Answer", + "Any value", + "Applies to", + "Apply", + "Area", + "Area of a circle", + "Arrange", + "Arrange\nAll", + "Arrange All", + "Arrange Windows", + "Arrow", + "Assign Action: {control}", + "Assign Action…", + "At each change in (column letter):", + "At most", + "Author", + "Auto", + "Auto Fill Options", + "AutoFill", + "AutoFit Column Width", + "AutoFit Row Height", + "AutoSave", + "AutoSave: save after every change (workbooks saved to a file)", + "AutoSum", + "AutoSum (⌘⇧T)", + "AutoSum|AVERAGE", + "AutoSum|COUNT", + "AutoSum|MAX", + "AutoSum|MIN", + "AutoSum|SUM", + "Automate", + "Automatic", + "Automatic Except for Data Tables", + "Automation in this workbook. GridCraft runs its own scripts; a file's VBA project is preserved but not executed.", + "Available for column, bar, line, area and compatible combo charts.", + "Average", + "Average: {n}", + "Average: {value}", + "B4 (ISO)", + "B5 (ISO)", + "B6 (ISO)", + "Back", + "Background", + "Background Color:", + "Bad", + "Banded Columns", + "Banded Rows", + "Bar", + "Before sheet (position, 0 = first):", + "Begins With", + "Below Average", + "Between…", + "Bin Range (blank for automatic bins):", + "Binary assets added", + "Binary assets removed", + "Binomial theorem", + "Blank workbook", + "Blanks", + "Blue", + "Blue - White - Red", + "Bold", + "Bold (⌘B)", + "Book", + "Border", + "Border presets", + "Border preview", + "Borders", + "Borders|None", + "Bottom", + "Bottom\nAlign", + "Bottom 10 Items", + "Bottom 10%", + "Bottom Align", + "Bottom Border", + "Bottom Double Border", + "Bottom Margin", + "Bottom margin (in):", + "Box & Whisker", + "Brackets that grow", + "Breakpoint", + "Breakpoint: the debugger stops before this step", + "Breaks", + "Bring Forward", + "Browse…", + "Bubble", + "Button", + "By Changing Variable Cells:", + "By changing cell:", + "CHF German (Switzerland)", + "CSV (Comma delimited)", + "CSV UTF-8 (Comma delimited) (*.csv)", + "Calculate", + "Calculate Now", + "Calculate Now (F9)", + "Calculate Sheet", + "Calculate Sheet (⇧F9)", + "Calculated Field", + "Calculated Field…", + "Calculation", + "Calculation\nOptions", + "Calculation Options", + "Calculation settings are saved with the workbook.", + "Calculations", + "Can't Undo", + "Cancel", + "Cancel Copy", + "Cannot auto-update this installation type. Please download manually.", + "Cascade", + "Category:", + "Cell", + "Cell\nStyles", + "Cell Color", + "Cell Controls", + "Cell Editor", + "Cell Styles", + "Cell Value", + "Cell Values", + "Cell link:", + "Cell must contain a formula.", + "Cell must contain a value.", + "Cells", + "Cells with data", + "Cells…", + "Center", + "Center Across Selection", + "Change", + "Change\nChart Type", + "Change All", + "Change Chart Type", + "Change Chart Type…", + "Change Colors", + "Change Data Source", + "Change File Type", + "Changed so far: {cells}", + "Change…", + "Chart", + "Chart\nTitle", + "Chart Design", + "Chart Layouts", + "Chart Properties", + "Chart Recommendations", + "Chart Styles", + "Chart Title", + "Chart Type", + "Chart data range:", + "Charts", + "Check", + "Check\nAccessibility", + "Check Accessibility", + "Check Again", + "Check Cell", + "Check Macro", + "Check Value Against Validation", + "Check for\nUpdates…", + "Check for Updates…", + "Check passed: writes {cells}", + "Check shows on the grid what the macro reads and writes. Click a step's gutter to set a breakpoint.", + "Check the inputs and show on the grid what the macro would change", + "Checkbox", + "Checking for updates…", + "Choose a PNG or JPEG no larger than 16 MB.", + "Choose a command.", + "Choose a light or dark appearance, or follow your system's theme.", + "Choose fields to add to report:", + "Choose the cell to test.", + "Choose the language used by the interface.", + "Choose the range to repeat over.", + "Circle Invalid Data", + "Circular References", + "Circular References:", + "Circular References: {cell}", + "Circular References: {range}", + "Clear", + "Clear All", + "Clear Comments and Notes", + "Clear Contents", + "Clear Filter", + "Clear Formats", + "Clear Hyperlinks", + "Clear Print Area", + "Clear Rules", + "Clear Rules from Entire Sheet", + "Clear Rules from Selected Cells", + "Clear Slicer Filter", + "Clear Validation", + "Click once to follow. Click and hold to select this cell.", + "Click to add data", + "Click to copy", + "Clipboard", + "Close", + "Close Window", + "Close the macro step editor first: it keeps its window until it closes itself, so its steps and debug run are not lost.", + "Clustered Bar", + "Clustered Column", + "Code Editor", + "Collapse Ribbon", + "Collapse dialog", + "Color Scales", + "Color:", + "Colorful", + "Colors", + "Colors & Layout", + "Column", + "Column Width", + "Column Width…", + "Column chart", + "Column or Bar", + "Column width (characters):", + "Column width must be between 0 and 1800 pixels.", + "Column width must be between 0 and 255 characters.", + "Column widths", + "Column {number}", + "Column {n}", + "Columns", + "Columns (blank = all, e.g. A,C):", + "Columns:", + "Combo", + "Comma", + "Comma Style", + "Comma [0]", + "Command\nPalette", + "Command Palette…", + "Command:", + "Comment", + "Comment:", + "Comments", + "Comments and notes (C)", + "Comments pane", + "Commits", + "Compact", + "Company", + "Compatibility", + "Complete text from a matching value in the same column while typing in a cell.", + "Conditional\nFormatting", + "Conditional Formatting", + "Conditional Formatting Rules Manager", + "Conditional Formatting…", + "Conditional formats", + "Confidence Level (%):", + "Confidence Level for Mean (%), blank for none:", + "Confidence interval", + "Confidence level (%):", + "Consolidate…", + "Constant is Zero", + "Constants", + "Constraint Cell Reference", + "Constraint Operator", + "Constraint Value", + "Constraint cells must be on the objective cell's sheet.", + "Contains Text", + "Continue", + "Contributors", + "Contributors…", + "Convergence:", + "Convert", + "Convert\nto Range", + "Convert Text to Columns", + "Convert the last ink stroke to a shape", + "Convert to Comments", + "Convert to Number", + "Convert to Range", + "Copies", + "Copy", + "Copy (⌘C)", + "Copy Cells", + "Copy matching rows elsewhere", + "Copy to:", + "Correlation", + "Could not check for updates.", + "Could not check for updates: {error}", + "Couldn't decode the generated PDF.", + "Couldn't start the update ({error})", + "Count", + "Count Numbers", + "Count: {n}", + "Count: {value}", + "CountA", + "Covariance", + "Create", + "Create Forecast Worksheet", + "Create PDF", + "Create Sparklines", + "Create a copy", + "Create from Selection", + "Criteria range (optional):", + "Cube", + "Cumulative Percentage", + "Currency", + "Currency [0]", + "Current\nDate", + "Current\nTime", + "Current Date", + "Current Selection", + "Current Time", + "Current region", + "Current value:", + "Custom", + "Custom (%):", + "Custom Margins…", + "Custom Sort", + "Custom Sort…", + "Custom Views…", + "Customize Status Bar", + "Cut", + "Cut (⌘X)", + "Damping factor:", + "Dark", + "Dark Mode", + "Data", + "Data\nAnalysis", + "Data\nValidation", + "Data Analysis", + "Data Analysis…", + "Data Bars", + "Data Labels", + "Data Labels: None", + "Data Labels: Show", + "Data Range:", + "Data Table", + "Data Table|Outline", + "Data Table…", + "Data Tools", + "Data Validation", + "Data Validation…", + "Data and Model", + "Data rows:", + "Data validation", + "Database", + "Date", + "Date &\nTime", + "Date & Time", + "Date unit", + "Date:", + "Day", + "Debugging “{name}”", + "Decimal", + "Decrease Decimal", + "Decrease Font Size", + "Decrease Indent", + "Default Width…", + "Default sheet name", + "Defer updates to dependent formulas until Calculate Now or Calculate Sheet. Formulas you edit still calculate immediately.", + "Define Name", + "Define Name…", + "Defined Names", + "Delete", + "Delete\nChart", + "Delete Cells…", + "Delete Chart", + "Delete Columns", + "Delete Comment", + "Delete Macro", + "Delete Name", + "Delete Object", + "Delete PivotTable", + "Delete Scenario", + "Delete Script", + "Delete Sheet", + "Delete Sheet Columns", + "Delete Sheet Rows", + "Delete Slicer", + "Delete chart", + "Delete columns", + "Delete rows", + "Delete the selected step", + "Delete…", + "Delta", + "Description", + "Description (optional):", + "Description:", + "Descriptive Statistics", + "Destination:", + "Details", + "Diagonal ↗", + "Diagonal ↘", + "Different First Page", + "Different Odd & Even Pages", + "Dismiss", + "Display Theme", + "Display name", + "Display options for this workbook", + "Display theme", + "Display:", + "Distributed", + "Divide", + "Divided by", + "Do you want to delete {what} “{name}”?", + "Do you want to save the changes you made to", + "Do you want to save the changes you made to {title}?", + "Does Not Contain Text", + "Don't Replace", + "Don't Save", + "Double", + "Double Accounting", + "Double Underline", + "Doughnut", + "Doughnut hole size", + "Down", + "Down, then over", + "Download", + "Downloading and installing update…", + "Drag to fill cells. Drag from inside a cell to select a range.", + "Drag to freeze columns", + "Drag to freeze rows", + "Draw", + "Draw Border", + "Draw a button that runs a macro or a command", + "Draw a slider that sets a whole number in a linked cell", + "Draw a spin button that steps a whole number in a linked cell", + "Draw with ink", + "Duplicate", + "Duplicate Values", + "Duplicate Values…", + "Duplicate the selected step", + "Each column must hold:", + "Each input range needs at least two numbers.", + "Edit", + "Edit Cell", + "Edit Equation", + "Edit Hyperlink", + "Edit Hyperlink…", + "Edit Name", + "Edit Text", + "Edit Text Box", + "Edit chart title", + "Edited", + "Editing", + "Edit…", + "Effects", + "Elements", + "Else", + "Ember", + "Enable AutoComplete for cell values", + "Enable iterative calculation", + "Enabled", + "Encode Workbook", + "End date:", + "End time:", + "Ends With", + "Engineering", + "Enter", + "Enter Cell", + "Entire column", + "Entire row", + "Equal To…", + "Equation", + "Erase ink strokes", + "Eraser", + "Error", + "Error Checking", + "Error Checking…", + "Error at character {position}: {message}", + "Error checking options", + "Error message:", + "Error style", + "Errors", + "Euler's identity", + "Evaluate", + "Evaluate Formula", + "Evaluate Formula…", + "Every cell must hold something", + "Every command run in this session (replayable)", + "Evolutionary", + "Evolutionary: a genetic search for models that aren't smooth; every variable cell needs bounds.", + "Example (what Check, Run and Debug use here):", + "Excel 97-2003 (.xls) is supported for import only. Save as .xlsx or another supported export format.", + "Excel Workbook (*.xlsx)", + "Executive", + "Expand Formula Bar", + "Expand dialog", + "Expand formula bar", + "Expand/Collapse Field", + "Explanatory Text", + "Exponential Smoothing", + "Export", + "Export as CSV", + "Export as CSV…", + "Export as PDF", + "Export as PDF…", + "Export as Web Page (.html)…", + "Exporting needs a file picker, which this window doesn't have.", + "Expression", + "F-Test Two-Sample for Variances", + "Field List", + "File", + "File\nName", + "File\nPath", + "File (Backstage view)", + "File Name", + "File Path", + "Fill", + "Fill Color", + "Fill Days", + "Fill Down", + "Fill Formatting Only", + "Fill Left", + "Fill Months", + "Fill Range With Input", + "Fill Right", + "Fill Series", + "Fill Up", + "Fill Weekdays", + "Fill Without Formatting", + "Fill Years", + "Fill missing points using", + "Fill…", + "Filter", + "Filter (⌘⇧F)", + "Filter Column", + "Filter Items", + "Filter by Selected Cell's Value", + "Filtering", + "Filters", + "Financial", + "Find", + "Find &\nSelect", + "Find & Select", + "Find All", + "Find Next", + "Find and Replace", + "Find what:", + "Finding printers…", + "Find…", + "Finished: {count} ran, one undo step.", + "First", + "First Column", + "First commit", + "First row holds column names", + "First slice angle", + "Fit Sheet on One Page", + "Fit selection", + "Fits inside the selected cell and moves with its content.", + "Flash\nFill", + "Flash Fill", + "Flash Fill (⌘E)", + "Font", + "Font Color", + "Font Size", + "Fonts", + "Footer", + "Footer (in):", + "Footer Margin", + "Footer:", + "For each", + "Forecast", + "Forecast\nSheet", + "Forecast Sheet", + "Forecast end (date or number; blank: a third of the history):", + "Forecast start (a date or number in the history; blank: after the last point):", + "Format", + "Format\nPane", + "Format\nas Table", + "Format Cell Alignment…", + "Format Cells", + "Format Cells|Fill", + "Format Cells…", + "Format Chart Area", + "Format Chart Area…", + "Format Chart pane", + "Format Control: {control}", + "Format Control…", + "Format Painter", + "Format Painter (double-click to keep it on)", + "Format Selection", + "Format as Table", + "Format cells", + "Format cells that are (value):", + "Format cells that contain a date occurring:", + "Format cells that contain the text:", + "Format columns", + "Format rows", + "Format values where this formula is true:", + "Formats (T)", + "Formula", + "Formula Auditing", + "Formula Bar", + "Formula Bar|Enter", + "Formula Builder", + "Formula:", + "Formulas", + "Formulas (F)", + "Formulas and number formats", + "Fraction", + "Freeze\nPanes", + "Freeze First Column", + "Freeze Panes", + "Freeze Top Row", + "From Table/Range", + "From Text/CSV", + "Function Library", + "Function…", + "Funnel", + "GRG Nonlinear", + "GRG Nonlinear: a local optimum of a smooth model, from the current values.", + "General", + "Generated|Column", + "Generated|Row", + "Get & Transform Data", + "Get Cell", + "Get Data", + "Get Data\n(Text/CSV)", + "Get Macro", + "Glide the selection outline to the cell you move to instead of jumping there", + "Go To", + "Go To Special", + "Go To Special…", + "Go To…", + "Go to\nFooter", + "Go to\nHeader", + "Go to Footer", + "Go to Header", + "Goal Seek", + "Goal Seeking found a solution: {value}", + "Goal Seek…", + "Good", + "Good, Bad and Neutral", + "Grab bag", + "Gradebook", + "Grand Totals", + "Graphite", + "Grayscale", + "Greater Than…", + "Greater than or equal to", + "Green", + "Green - White - Red", + "Green - Yellow - Red", + "Green Fill with Dark Green Text", + "GridCraft User", + "GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:", + "GridCraft on getartcraft.com", + "GridCraft {version} is the newest version available.", + "GridCraft {version} is up to date.", + "Gridlines", + "Gridlines: None", + "Gridlines: Show", + "Group", + "Group Field", + "Group by Months", + "Group by Quarters", + "Group by Years", + "Grouped By:", + "Growth", + "Header", + "Header &\nFooter", + "Header & Footer", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):", + "Header (in):", + "Header Margin", + "Header Row", + "Heading 1", + "Heading 2", + "Heading 3", + "Heading 4", + "Headings", + "Hebrew עברית", + "Height", + "Height ", + "Height: {size} ({px} pixels)", + "Help", + "Hex", + "Hidden", + "Hidden:", + "Hidden: {sheets}", + "Hide", + "Hide & Unhide", + "Hide Columns", + "Hide Detail", + "Hide GridCraft", + "Hide Others", + "Hide Rows", + "Hide Sheet", + "Hierarchy & more", + "Highlight Cells Rules", + "Highlight the active cell's row", + "Highlighter", + "Histogram", + "Home", + "Horizontal", + "Horizontal (Category) Axis Labels:", + "Horizontal Borders", + "Horizontal axis title:", + "Household Budget", + "How agents drive GridCraft (MCP / control channel)", + "Hyperlink", + "Hypothesized Mean Difference:", + "Icon Sets", + "Icons", + "Icon|book", + "Icon|calculator", + "Icon|chart", + "Icon|check", + "Icon|close", + "Icon|comment", + "Icon|filter", + "Icon|folder", + "Icon|home", + "Icon|line chart", + "Icon|link", + "Icon|lock", + "Icon|minus", + "Icon|note", + "Icon|pen", + "Icon|picture", + "Icon|pie chart", + "Icon|plus", + "Icon|save", + "Icon|scatter", + "Icon|search", + "Icon|settings", + "Icon|shapes", + "Icon|share", + "Icon|sum", + "Icon|table", + "Icon|text", + "Icon|theme", + "Icon|trace", + "Icon|validation", + "If cell", + "If {cell} is empty", + "If {cell} isn't empty", + "If {cell} {op} {value}", + "Ignore Once", + "Ignore blank", + "Illustrations", + "Import a text or CSV file", + "In Cell", + "In the last 7 days", + "In-cell dropdown", + "Include forecast statistics", + "Increase Decimal", + "Increase Font Size", + "Increase Indent", + "Incremental change:", + "Indent", + "Infinity", + "Info", + "Information", + "Ink Stroke", + "Ink to\nShape", + "Ink to Shape", + "Input", + "Input Range:", + "Input X Range:", + "Input Y Range:", + "Input Y range and input X range must have the same number of rows.", + "Input Y range must be a single column.", + "Input cell reference is not valid.", + "Input message:", + "Input range contains non-numeric data.", + "Input range must be a single row or column.", + "Input ranges must have the same number of values.", + "Inputs", + "Insert", + "Insert\nFunction", + "Insert\nSlicer", + "Insert Calculated Field", + "Insert Cells…", + "Insert Chart", + "Insert Columns", + "Insert Copied Cells", + "Insert Copied Cells…", + "Insert Cut Cells", + "Insert Cut Cells works on whole rows or columns; cut whole rows or columns, or use Paste.", + "Insert Function", + "Insert Function (⇧F3)", + "Insert Function…", + "Insert Hyperlink", + "Insert Link", + "Insert Link (⌘K)", + "Insert New Equation...", + "Insert Page Break", + "Insert Paste", + "Insert Sheet", + "Insert Sheet Columns", + "Insert Sheet Rows", + "Insert Slicer", + "Insert a chart to format it.", + "Insert a picture", + "Insert a slicer to filter a table", + "Insert an icon", + "Insert checkboxes in the selected cells", + "Insert columns", + "Insert rows", + "Insert {ch}", + "Insert…", + "Inside Borders", + "Inside, Row (or Column) stands for the current one, e.g. Row.right.", + "Inspect Workbook", + "Integer Optimality (%):", + "Integer and binary constraints must be on variable cells.", + "Integral", + "Interface Language", + "Interface Language: English", + "Interface Language: Japanese", + "Interface Size", + "Interface language", + "Interface size", + "Interpolation", + "Interval:", + "Invalid XLSB merged ranges were skipped.", + "Issue", + "Italic", + "Italic (⌘I)", + "Japanese Double Postcard", + "Japanese Envelope #3", + "Japanese Envelope #4", + "Japanese Envelope Kaku #2", + "Japanese Envelope Kaku #3", + "Japanese Postcard", + "Join the ArtCraft Discord", + "Join the ArtCraft Discord…", + "Just now", + "Justify", + "Keep", + "Keep Changes", + "Keep Solver Solution", + "Keep the changes the macro has made so far? They are one undo step either way.", + "Keywords", + "Kth Largest (blank for none):", + "Kth Smallest (blank for none):", + "LaTeX:", + "Labels in first row", + "Landscape", + "Lasso Select", + "Last", + "Last Column", + "Last cell", + "Last commit", + "Last month", + "Last week", + "Later", + "Layout", + "Layout {number}", + "Layout {n}", + "Leave it empty when no step uses Output. A token such as Input.right keeps it beside the data.", + "Left", + "Left Border", + "Left Margin", + "Left margin (in):", + "Legal", + "Legend", + "Legend Entries (Series)", + "Legend: Bottom", + "Legend: None", + "Legend: Right", + "Legend: Top", + "Legend|None", + "Less Than…", + "Less than or equal to", + "Let this workbook's scripts run for the rest of this session", + "Letter", + "Licence", + "Light", + "Light Blue", + "Light Red Fill", + "Light Red Fill with Dark Red Text", + "Limit", + "Limits", + "Line", + "Line chart", + "Line delta", + "Line or Area", + "Line with Markers", + "Linear", + "Lines +/−", + "Lines added", + "Lines deleted", + "Link", + "Link to (web address, e-mail or Sheet!A1):", + "Linked Cell", + "Links", + "Link…", + "List", + "List Commands", + "List Functions", + "List Macros", + "List range:", + "Load", + "Load Model", + "Load/Save", + "Location", + "Location Range:", + "Lock Cell", + "Lock the sheet structure so sheets can't be added, moved, renamed or deleted.", + "Locked", + "Locked (when the sheet is protected)", + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet).", + "Logical", + "Long Date", + "Look for a newer GridCraft release", + "Lookup", + "Lookup &\nReference", + "Lookup & Reference", + "Macro", + "Macro name:", + "Macro name: {name}", + "Macro “{name}” stopped: {message}", + "Macro: {name}", + "Macro: {name}{dirty}", + "Macros", + "Macros and scripts in this workbook (Alt+F8)", + "Macros preserved (not executed)", + "Macros…", + "Magnification", + "Make Unconstrained Variables Non-Negative", + "Manage Rules…", + "Manual", + "Margins", + "Markers", + "Match case", + "Match entire cell contents", + "Math &\nTrig", + "Math & Trig", + "Matrix", + "Max", + "Max Evaluations:", + "Max Subproblems:", + "Maximum", + "Maximum Change must be a number of 0 or more.", + "Maximum Change:", + "Maximum Generations without Improvement:", + "Maximum Iterations must be a whole number from 1 to 32767.", + "Maximum Iterations:", + "Maximum value:", + "Maximum:", + "Maximum: {n}", + "Maximum: {value}", + "May use files through:", + "May use files through: {paths}", + "Meadow", + "Median", + "Medium", + "Merge & Center", + "Merge Across", + "Merge Cells", + "Merged PRs", + "Merged cells", + "Message", + "Message:", + "Middle\nAlign", + "Middle Align", + "Min", + "Minimum", + "Minimum / Source / Formula:", + "Minimum value:", + "Minimum:", + "Minimum: {n}", + "Minimum: {value}", + "Missing alternative text", + "Model", + "Model Range:", + "Models", + "Modified", + "Modify", + "Monochromatic", + "Monochrome", + "Month", + "More\nFunctions", + "More Accounting Formats…", + "More Borders…", + "More Colors…", + "More Functions", + "More Functions…", + "More Number Formats…", + "More Table Styles", + "More commands", + "More workbooks", + "Most Recently Used", + "Move Chart…", + "Move Columns", + "Move Field", + "Move Object", + "Move Selection", + "Move or Copy", + "Move or Copy Sheet…", + "Move or Copy…", + "Move to Column Labels", + "Move to Report Filter", + "Move to Row Labels", + "Move to Values", + "Moving Average", + "Multi-cell array formulas aren't allowed in tables.", + "Multiply", + "Mutation Rate:", + "My data has headers", + "My list has headers", + "Name", + "Name\nManager", + "Name (A–Z)", + "Name Box", + "Name Manager", + "Name:", + "Names", + "Name…", + "Narrow", + "Needs Simplex LP or GRG Nonlinear, a Max or Min objective and no integer constraints.", + "Needs an optimal or converged solution: Solver stopped before reaching one.", + "Needs approval before it can run: it {what}.", + "Neutral", + "New", + "New\nComment", + "New\nWindow", + "New Cell Style…", + "New Comment", + "New Formatting Rule", + "New Macro", + "New Name", + "New Note", + "New Rule…", + "New Script", + "New Window", + "New Workbook", + "New Worksheet Ply:", + "New from Sample…", + "New range for the table:", + "New sheet (⇧F11)", + "New title (Modify):", + "New…", + "Next", + "Next Cell in Selection", + "Next Comment", + "Next Sheet", + "Next month", + "Next page", + "Next sheet", + "Next week", + "No Blanks", + "No Border", + "No Color", + "No Errors", + "No Fill", + "No cells found.", + "No cells were found.", + "No chart selected.", + "No command matches.", + "No comments on this sheet yet. Select a cell and choose New Comment.", + "No contributor data was built into this copy.", + "No dependent cells.", + "No dictionary is available on this system (GridCraft uses the system word list).", + "No functions match.", + "No inputs: the macro works on fixed cells only.", + "No macros in this workbook", + "No model credits were built into this copy.", + "No names defined", + "No picture selected", + "No precedent cells.", + "No printers found. Configure a system printer or export a PDF.", + "No ranges yet.", + "No recent workbooks yet.", + "No sheets are hidden.", + "No steps yet. Add Step picks a command, or record one with Automate › Record Macro.", + "No workbook is open.", + "None", + "Normal", + "Normal Probability", + "Not available", + "Not equal to", + "Not in Dictionary", + "Not in Dictionary ({cell}):", + "Not saved yet", + "Note", + "Note:", + "Notes", + "Nothing to import.", + "Nothing to paste.", + "Nothing to print.", + "Number", + "Number\nof Pages", + "Number Format", + "Number Stored as Text", + "Number of Pages", + "Numbers", + "Numerical Count", + "Numerical Count: {n}", + "Numerical Count: {value}", + "ODS is supported for data import only. Save as .xlsx or another supported export format.", + "OK", + "Object", + "Object Properties", + "Ocean", + "One-sided", + "Open", + "Open Dialog", + "Open Hyperlink", + "Open the macro in the step editor", + "Open the macro in the step editor and stop before its first step", + "Open…", + "Operation", + "Options", + "Options|Editing", + "Options|General", + "Options|Save", + "Options…", + "Or select a category:", + "Orange", + "Orchid", + "Orientation", + "Orientation (degrees)", + "Orientation:", + "Other:", + "Otherwise the macro runs on the selection", + "Outline", + "Outline Settings", + "Output", + "Output Range:", + "Output anchor (what the Output token stands for):", + "Output options", + "Output to (optional):", + "Outside Borders", + "Oval", + "Over Cells", + "Over, then down", + "Overwrite", + "Overwrite them, or move the data out of the way?", + "PDF (*.pdf)", + "PRs", + "Page", + "Page\nLayout", + "Page\nNumber", + "Page 1", + "Page 1 of ?", + "Page Break\nPreview", + "Page Break Preview", + "Page Breaks", + "Page Layout", + "Page Layout|Orientation", + "Page Number", + "Page Setup", + "Page Setup…", + "Page change:", + "Page order", + "Page {page}", + "Page {page} of {pages}", + "Paper Size", + "Parameters (JSON):", + "Pareto (sorted histogram)", + "Password", + "Password (optional):", + "Password:", + "Paste", + "Paste (⌘V)", + "Paste Formatting", + "Paste Formulas", + "Paste Link", + "Paste List", + "Paste Name", + "Paste Names…", + "Paste Special", + "Paste Special|Add", + "Paste Special|None", + "Paste Special…", + "Paste Values", + "Paste formulas that refer to the copied cells", + "Paste name", + "Paused before step {step} · {what}", + "Pen", + "Pen\nBlack", + "Pen\nBlue", + "Pen\nRed", + "Percent", + "Percent Style", + "Percentage", + "Pick From Drop-down List…", + "Pick From List", + "Pick up a format first.", + "Picture", + "Picture file path (PNG or JPEG):", + "Picture in cell", + "Picture: {alt}", + "Picture: {name}", + "Pictures", + "Picture…", + "Pie", + "Pie or Doughnut", + "PivotChart", + "PivotTable", + "PivotTable Analyze", + "PivotTable Design", + "PivotTable Fields", + "PivotTable Layout", + "PivotTable Options", + "PivotTable Styles", + "PivotTables", + "Place Picture in Cell", + "Place Picture over Cells", + "Place in Cell", + "Place over Cells", + "Platform", + "Plus or minus", + "Point", + "Population Size:", + "Portrait", + "Preview", + "Previous", + "Previous Comment", + "Previous Sheet", + "Previous page", + "Previous sheet", + "Print", + "Print\nArea", + "Print\nTitles", + "Print Active Sheets", + "Print Area", + "Print Entire Workbook", + "Print Gridlines", + "Print Headings", + "Print Preview", + "Print Settings", + "Print Titles", + "Print What", + "Print failed: the printing worker stopped.", + "Print failed: {error}", + "Print job submitted.", + "Print job submitted: {receipt}", + "Print object", + "Printer", + "Printer default", + "Printer discovery failed.", + "Printing is unavailable here; export a PDF instead.", + "Print…", + "Product", + "Product Information", + "Proofing", + "Properties", + "Properties…", + "Protect", + "Protect\nSheet", + "Protect\nWorkbook", + "Protect Sheet", + "Protect Sheet…", + "Protect Structure and Windows", + "Protect Workbook", + "Protect Workbook structure", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted).", + "Protection", + "Purple", + "Pythagoras", + "Python Mode", + "Python Output", + "Quadratic formula", + "Quarterly Sales Dashboard", + "Queries & Connections", + "Quick Layout", + "Quit GridCraft", + "R$ Portuguese (Brazil)", + "Radar", + "Ran macro “{name}” ({count})", + "Ran {count}.", + "Random Seed:", + "Range password:", + "Range:", + "Ranges that stay editable when the sheet is protected:", + "Ranges that stay editable when the sheet is protected:\nNo ranges yet.", + "Rank and Percentile", + "Read Range", + "Ready", + "Real name", + "Reapply", + "Recalculate formulas automatically when workbook values or formulas change.", + "Recalculate formulas automatically. What-if data tables are currently snapshots; run Data Table again to update them.", + "Recent", + "Recent Colors", + "Recently Used", + "Recommended\nCharts", + "Recommended Charts", + "Recommended PivotTables", + "Record Actions", + "Record Macro", + "Record steps relative to the cells selected when recording starts, so the macro works on other data", + "Record your actions as a macro", + "Recording", + "Recording stopped", + "Recording · {count}", + "Rectangle", + "Red", + "Red - Yellow - Green", + "Red Border", + "Red Text", + "Redo", + "Redo (⌘Y)", + "Reference isn't valid.", + "Reference:", + "Refers To", + "Refers to cells:", + "Refers to:", + "Refresh", + "Refresh All", + "Refresh printers", + "Regional format", + "Regression", + "Rel", + "Relative: a token that follows the input the macro runs on", + "Remove", + "Remove\nDuplicates", + "Remove Arrows", + "Remove Duplicates", + "Remove Duplicates…", + "Remove Field", + "Remove Hyperlink", + "Remove Page Break", + "Remove level", + "Remove the password (Modify)", + "Rename", + "Rename Macro", + "Rename Sheet", + "Rename Sheet…", + "Reopen", + "Repeat for each {what} of {over}", + "Repeatedly calculate circular references until results converge or the iteration limit is reached. Enable only for intentional circular formulas.", + "Replace", + "Replace All", + "Replace with:", + "Replace…", + "Reply", + "Reply…", + "Report Layout", + "Report Layout|Outline", + "Reports:", + "Require Bounds on Variables", + "Reset All", + "Reset All Page Breaks", + "Residuals", + "Resize\nTable", + "Resize Table", + "Resize formula bar", + "Resolve", + "Resolve Thread", + "Resolved", + "Restore Original Values", + "Result", + "Return to the original worksheet to insert this picture, or cancel and choose another cell.", + "Reverse the order", + "Review", + "Ribbon Tab", + "Right", + "Right Border", + "Right Margin", + "Right margin (in):", + "Rotate", + "Rotate Text Down", + "Rotate Text Up", + "Rounded Rectangle", + "Row", + "Row Height", + "Row Height…", + "Row height (pixels):", + "Row height (points):", + "Row height must be between 0 and 409.5 points.", + "Row height must be between 0 and 546 pixels (409.5 points).", + "Rows", + "Rp Indonesian", + "Ruler", + "Run", + "Run\nMacro", + "Run Macro", + "Run Script", + "Run a command", + "Run a macro", + "Run a macro on the selection", + "Run it on:", + "Run the macro as one undo step", + "Run this step (a disabled step is skipped)", + "Run to Here", + "Run to the next breakpoint or the end", + "Run until the selected step", + "Runs with:", + "Sample", + "Save", + "Save (⌘S)", + "Save .xlsx workbooks automatically after every change", + "Save As", + "Save As…", + "Save Changes?", + "Save Macro", + "Save Model", + "Save a Copy", + "Save a Copy as Excel Workbook (.xlsx)…", + "Save a copy as", + "Save a copy as .{format}", + "Save as Web Page", + "Save as Web Page…", + "Save as type", + "Save changes automatically to .xlsx workbooks that already have a file path.", + "Save changes to macro “{name}”?", + "Save or close your open work first; the update restarts the app.", + "Save the active sheet as comma-separated text.", + "Save the sheet as a PDF document that keeps its page layout.", + "Save the workbook as a web page.", + "Save the workbook under another name or in another folder.", + "Saved macro “{name}” ({count})", + "Scale to Fit", + "Scale with Document", + "Scatter", + "Scatter or Bubble", + "Scatter with Lines", + "Scenario Manager…", + "Scenario Summary", + "Scientific", + "Scope", + "Scope (Workbook or sheet name):", + "Scope:", + "ScreenTip:", + "Scripting Tools", + "Scripts in this workbook came from a file and are disabled.", + "Scroll ribbon left", + "Scroll ribbon right", + "Search", + "Search Commands", + "Search and run any command", + "Search commands", + "Search commands (⌘⇧Space)", + "Search commands, e.g. bold, sort, set…", + "Search:", + "Seasonality (auto, 0 for none, or a season length):", + "Select", + "Select\nData", + "Select\nObjects", + "Select All", + "Select All Sheets", + "Select Current Region", + "Select Data", + "Select Data Source", + "Select Data…", + "Select Dependents", + "Select Entire Column", + "Select Entire Row", + "Select Locked Cells", + "Select Precedents", + "Select Unlocked Cells", + "Select a Solving Method:", + "Select a cell inside a table first, or pass `table`.", + "Select a chart first.", + "Select a chart to format it.", + "Select a printer", + "Select a step to see its settings.", + "Select a timeline column and a values column for the forecast.", + "Select an available printer in File > Print before submitting.", + "Select and move ink and shapes", + "Select data for the chart first.", + "Select destination and press Enter or choose Paste", + "Select locked cells", + "Select unlocked cells", + "Select {range}", + "Selection", + "Selection Pane", + "Selection Statistics", + "Semicolon", + "Send", + "Send Backward", + "Sensitivity", + "Series", + "Series in", + "Series {n}", + "Series{n}", + "Series…", + "Services", + "Set Objective:", + "Set Print Area", + "Set Python Code", + "Set Values", + "Set cell:", + "Set {cell} to {input}", + "Settings", + "Severity", + "Shape Fill", + "Shape Outline", + "Shape Styles", + "Shape:", + "Shapes", + "Shapes|Line", + "Shape|Line", + "Share", + "Share: export or save a copy", + "Sheet", + "Sheet\nName", + "Sheet\nRight-to-Left", + "Sheet Name", + "Sheet Options", + "Sheet Options|View", + "Sheet Right-to-Left", + "Sheet structure is locked: sheets can't be added, moved, renamed or deleted.", + "Sheets", + "Sheets: {sheets}", + "Shift Down", + "Shift Right", + "Shift cells down", + "Shift cells left", + "Shift cells right", + "Shift cells up", + "Short Date", + "Shortcut key:", + "Show", + "Show\nComments", + "Show All", + "Show All Notes", + "Show Comments", + "Show Data Table", + "Show Detail", + "Show Details", + "Show Formulas", + "Show Formulas (⌃`)", + "Show Legend Keys", + "Show Objects", + "Show Outline Levels", + "Show Outline Symbols", + "Show Scenario", + "Show Zeros", + "Show as % of Grand Total", + "Show as No Calculation", + "Show as Rank", + "Show as Running Total", + "Show formula bar", + "Show horizontal scroll bar", + "Show matching rows in place", + "Show or hide the formula bar used to view and edit the active cell.", + "Show password", + "Show sheet tabs", + "Show vertical scroll bar", + "Show/Hide Note", + "Shrink to Fit", + "Shrink to fit", + "Simplex LP", + "Simplex LP: for linear models; integer and binary constraints by branch and bound.", + "Single", + "Single Accounting", + "Size", + "Skip blanks", + "Slate", + "Slicer", + "Slider", + "Solve", + "Solver", + "Solver Parameters", + "Solver Reports", + "Solver Results", + "Solver|To:", + "Solver…", + "Sort", + "Sort &\nFilter", + "Sort & Filter", + "Sort A to Z", + "Sort Ascending", + "Sort Descending", + "Sort Field", + "Sort On", + "Sort Z to A", + "Sort by", + "Sorting", + "Sort…", + "Source:", + "Space", + "Sparklines", + "Sparklines…", + "Special", + "Special…", + "Spelling", + "Spelling (F7)", + "Spelling…", + "Spin Button", + "Split", + "Split tabs", + "Square root", + "Stacked", + "Stacked Area", + "Stacked Bar", + "Stacked Column", + "Stacked Line", + "Standard Colors", + "Standard Errors", + "Standard Width", + "Standard column width (pixels):", + "Standardized Residuals", + "Start a conversation:", + "Start a new workbook", + "Start date:", + "Start debugging: stop before the first step", + "Start time:", + "Statistic", + "Statistical", + "Status|Count", + "Status|Sum", + "Step", + "Step Into", + "Step value:", + "Step {path} · {title}", + "Steps", + "Steps here run when the If is {cond}. Add Step puts a step in this branch.", + "Stock", + "Stop", + "Stop Action", + "Stop Recording", + "Stop debugging", + "Stop recording and save the macro", + "Stop value:", + "Stop: {message}", + "Stopped after {count}; the changes were kept.", + "Stopped: {message}", + "Stopped; the changes were undone.", + "Strikethrough", + "Structure", + "Styles", + "Subject", + "Subject to the Constraints:", + "Submit Print Job", + "Submitting print job…", + "Subscript", + "Subtotal", + "Subtotals", + "Subtotal…", + "Subtract", + "Suggestions:", + "Sum", + "Sum: {n}", + "Sum: {value}", + "Summarize by Average", + "Summarize by Count", + "Summarize by Max", + "Summarize by Min", + "Summarize by Sum", + "Summarize with PivotTable", + "Summary columns to right of detail", + "Summary rows below detail", + "Summary statistics", + "Summation", + "Sunburst", + "Superscript", + "Switch\nRow/Column", + "Switch\nWindows", + "Switch Row/Column", + "Switch Window", + "Switch Windows", + "Symbol", + "Symbols", + "System", + "TRUE or FALSE", + "Tab", + "Tab Color", + "Table", + "Table\nStyles", + "Table (⌘T)", + "Table Design", + "Table Name", + "Table Name:", + "Table Style Options", + "Table Styles", + "Tables", + "Tabloid", + "Tabular", + "Tab|Insert", + "Tends to", + "Text", + "Text\nBox", + "Text Box", + "Text length", + "Text that Contains", + "Text that Contains…", + "Text to\nColumns", + "Text to Columns", + "Text to Columns|Comma", + "Text to Columns…", + "Text:", + "That undo group has already ended.", + "The Evolutionary method needs a lower and an upper bound on every variable cell (constraints such as \"A1:A3 <= 10\"), or requireBounds: false.", + "The Limits report doesn't apply to models with integer or binary constraints.", + "The Limits report is available for Simplex LP and GRG Nonlinear.", + "The PivotTable field name is not valid. To create a PivotTable, you must use data that is organized as a list with labeled columns.", + "The PivotTable report is out of date. Refresh it first.", + "The PivotTable report is too large.", + "The PivotTable report will not fit on the sheet.", + "The X variables are collinear; the regression can't be computed.", + "The bin range holds no numbers.", + "The cell being edited can't be entered.", + "The cell has no formula.", + "The cell or chart you're trying to change is on a protected sheet.", + "The cell you are trying to change is on a protected sheet that does not allow selecting it.", + "The cell you're trying to change is on a protected sheet.", + "The chart no longer exists.", + "The consolidated data doesn't fit below and right of the destination.", + "The constraint's two sides must be the same size (or the right side one cell).", + "The control is gone.", + "The copied cells don't fit on the sheet at this position.", + "The copied sheet no longer exists.", + "The copy area is the whole sheet; there is no room to insert it.", + "The cut area doesn't fit at this position; nothing was moved.", + "The cut rows or columns can't be inserted inside themselves.", + "The damping factor must be between 0 and 1.", + "The extract range can't overlap the list range.", + "The file is empty.", + "The fill is too large.", + "The forecast end must be after the last point of the timeline.", + "The forecast start needs at least two values before it to fit the forecast.", + "The formula has an unterminated field name.", + "The formula has an unterminated text value.", + "The formula is empty.", + "The formula is too long.", + "The headers must remain in the same row, and the resulting table range must overlap the original table range.", + "The input range holds no numbers.", + "The interval must be a whole number from 1 to the number of data points.", + "The macro failed; nothing was changed.", + "The macro “{name}” is in “{book}”. Switch back to it to save, check or run the macro.", + "The model was loaded.", + "The name entered already exists. Enter a unique name.", + "The name that you entered is not valid.", + "The number must be between 1 and 409.", + "The objective cell must contain a formula.", + "The objective must be a single cell.", + "The output range already holds data. Replace it with the report?", + "The parameters must be a JSON object, such as {\"range\": \"A1:B2\"}.", + "The password you supplied is not correct.", + "The print command did not produce a PDF.", + "The question was about “{book}”, which is no longer the active workbook, so nothing was done.", + "The ranges the macro works on. Each is checked before the macro runs.", + "The reference isn't valid. Select a cell in a range with labeled columns, or pass `source`.", + "The report doesn't fit on the sheet below and right of the output cell.", + "The selection when the button is pressed", + "The sheet is protected with a password. Unprotect it first (Review › Unprotect Sheet).", + "The spelling check is complete for the entire sheet.", + "The text box's worksheet is no longer active.", + "The timeline needs at least two points a constant step apart.", + "The update is installed. Close {app} to finish; it restarts by itself.", + "The variable cells must be a reference like B2:B4.", + "The variable cells must be on the objective cell's sheet.", + "The web version is always the latest release.", + "The weekday series runs past the supported date range.", + "The workbook is protected and cannot be changed.", + "Theme Colors", + "Themed Cell Styles", + "Themes", + "Then", + "Then by", + "There are no comments in this workbook.", + "There are no conditional formatting rules on this sheet.", + "There are no scenarios on this sheet.", + "There are no shapes, pictures or charts on this sheet.", + "There are no values to forecast.", + "There is no command “{id}”.", + "There isn't room on the sheet for the list of names.", + "There's a problem with this formula.", + "There's a problem with this formula:", + "There's no comment in this cell.", + "There's no hyperlink in this cell.", + "There's no room below the selection for the totals.", + "There's no room below the table for the total row.", + "There's no room to the right of the selection for the total.", + "Thesaurus", + "Thick Bottom Border", + "Thick Outside Borders", + "This action won't work on multiple selections.", + "This macro is in “{title}”. Switch back to it to edit, check or run the macro.", + "This month", + "This operation isn't allowed: it would shift cells in a table on your worksheet.", + "This sheet", + "This sheet has no saved Solver model.", + "This week", + "This workbook", + "This workbook also has a VBA project. GridCraft keeps it when you save but does not run it.", + "This workbook asks to open the address below. Links can lead to harmful sites or start other programs: open it only if you trust the workbook.", + "This workbook asks to open the address below. Links can lead to harmful sites or start other programs: open it only if you trust the workbook.\n\n", + "This workbook contains VBA macros. GridCraft keeps them intact when you save, but does not run them.", + "This workbook contains VBA macros. GridCraft keeps them when you save as .xlsm, but does not run them.", + "This workbook has no macros yet.", + "This workbook has no names to paste.", + "This workbook has no scripts or macros.", + "This workbook's VBA macros could not be loaded and were dropped, so they will not be in the saved file. Keep the original file.", + "Threaded Comments", + "Tiled", + "Time", + "Time:", + "Timeline range (blank: first column of the selection):", + "Times", + "Title", + "Title:", + "Titles and Headings", + "To do this, all the merged cells need to be the same size.", + "To prevent possible loss of data, Excel cannot shift nonblank cells off of the worksheet.", + "To prevent possible loss of data, cells can't be pushed off the end of the worksheet.", + "To prevent possible loss of data, columns cannot be shifted off of the worksheet.", + "To value:", + "To:", + "Today", + "Toggle Checkbox", + "Toggle Slicer Value", + "Tokens", + "Tomorrow", + "Too few observations for this many X variables.", + "Too many report sheets.", + "Tools", + "Top", + "Top\nAlign", + "Top 10 Items", + "Top 10%", + "Top Align", + "Top Border", + "Top Margin", + "Top and Bottom Border", + "Top and Double Bottom Border", + "Top and Thick Bottom Border", + "Top margin (in):", + "Top/Bottom Rules", + "Total", + "Total Row", + "Totals Function", + "Trace Dependents", + "Trace Error", + "Trace Precedents", + "Transpose", + "Transpose (E)", + "Treat consecutive delimiters as one", + "Treemap", + "Triangle", + "Trust Scripts", + "Two-sided printing", + "Two-sided: long edge", + "Two-sided: short edge", + "Type", + "Type (custom format code):", + "Type a command, e.g. freeze, chart, bold…", + "Type an equation in LaTeX, such as x^2 + y^2 = r^2", + "Type or choose a macro name.", + "Type the range the macro always runs on.", + "Type to filter…", + "Underline", + "Underline (⌘U)", + "Undo", + "Undo (⌘Z)", + "Undo Changes", + "Undo History", + "Undo list", + "Undo what the macro did before stopping", + "Undo {action}", + "Undo {label}", + "Unfreeze Panes", + "Ungroup", + "Unhide", + "Unhide Columns", + "Unhide Rows", + "Unhide Sheet…", + "Unhide sheet:", + "Unhide…", + "Unique Values", + "Unique rows only", + "Unlock with password", + "Unmerge Cells", + "Unprotect\nSheet", + "Unprotect Sheet", + "Unprotect Sheet…", + "Unprotect Workbook", + "Unprotect the sheet to change its edit ranges.", + "Unsupported XLSB future-record and alternate-content blocks were skipped.", + "Up", + "Update", + "Update and Restart", + "Use AutoFilter", + "Use Relative References", + "Use a field's menu to move it between areas:", + "Use current selection as example", + "Use function", + "Use in Formula", + "Username", + "Validation", + "Value", + "Value Field Settings", + "Value Of:", + "Value:", + "Values", + "Values (V)", + "Values and number formats", + "Values range (blank: second column of the selection):", + "Variable 1 Range:", + "Variable 2 Range:", + "Variable cells must hold constants, not formulas.", + "Version", + "Version {version}", + "Version, contributors and the AI models that helped", + "Vertical", + "Vertical Borders", + "Vertical Text", + "Vertical axis title:", + "View", + "Visible cells only", + "Warning", + "Warning Text", + "Watch\nWindow", + "Watch Window", + "Waterfall", + "We looked at all the data next to your selection and didn't see a pattern for filling in values for you.", + "Web", + "Web Page (*.html)", + "Web Page (.html)", + "Weekday", + "What this means", + "What's new", + "What-If\nAnalysis", + "What-If Analysis", + "When results would land on cells that hold data:", + "White - Green", + "White - Red", + "Whole number", + "Wide", + "Width", + "Width ", + "Width: {size} ({px} pixels)", + "Win/Loss", + "Window", + "Windows", + "Windows of active workbook", + "Within workbook", + "Workbook", + "Workbook\nStatistics", + "Workbook Statistics", + "Workbook Views", + "Workbook calculation", + "Wrap Text", + "Wrap text", + "Write a macro step by step", + "Write a new macro with this name", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported.", + "XLSB is supported for data import only. Save as .xlsx or another supported export format.", + "XLSB module sheets were skipped.", + "XLSB non-worksheet sheets were skipped.", + "Year", + "Yellow Fill with Dark Yellow Text", + "Yesterday", + "You can't change part of an array.", + "Z to A", + "Zeros", + "Zoom", + "Zoom In", + "Zoom Out", + "Zoom to\nSelection", + "Zoom to 100%", + "Zoom to Selection", + "Zoom…", + "`categories` is not a range", + "`columns` must name at least one column of the range", + "`commands` must be an array", + "`confidence` is between 0 and 1 (or 0 and 100%)", + "`constraints` must be an array", + "`enableShowDetails` must be true or false", + "`end` is not on the timeline", + "`flip` is not supported: shapes have no flip state", + "`forecastStart` is not on the timeline (it is a point of the history, before its last point)", + "`id` must be a text box id", + "`model` must be data.solver params", + "`name` must be 1 to 255 characters", + "`numberFormat` is a format code or null", + "`printArea` must be a range like \"A1:F50\"", + "`reports` is empty (answer, limits)", + "`reports` must be an array of answer and limits", + "`seasonality` is \"auto\", 0 (none) or a season length from 2 to 8,760", + "`selected` is a list of item labels or null", + "`text` is longer than 32,767 characters", + "`text` must be a string", + "`to` must be a number", + "`trusted` must be true or false", + "`{cell}` for `{key}` names a sheet other than the one this command works on", + "a field object needs `field`", + "a histogram, waterfall, treemap… chart without its chart part was skipped", + "a linked (not embedded) picture was skipped", + "a list validation needs `formula1`", + "a stroke needs at least two points", + "accent1", + "accent2", + "accent3", + "accent4", + "accent5", + "accent6", + "all cells must be on one sheet", + "all cells of a reference must be on one sheet", + "alpha", + "alpha must be between 0 and 1", + "an embedded object (diagram, OLE…) was skipped", + "and", + "and:", + "anything", + "applies to", + "apply", + "array constants may only contain constants, found {token}", + "array rows must have the same length", + "bad number `{number}`", + "beta", + "between", + "book", + "by {developer}", + "calculator", + "cell", + "cell pictures are limited to 8192 pixels per side and 16 million pixels", + "cell pictures must be at most 16 MiB", + "cell pictures support PNG and JPEG", + "cells", + "cf|AboveAverage", + "cf|BeginsWith", + "cf|Blanks", + "cf|CellIs", + "cf|ColorScale", + "cf|ContainsText", + "cf|DataBar", + "cf|Duplicate", + "cf|EndsWith", + "cf|Errors", + "cf|Expression", + "cf|IconSet", + "cf|NoBlanks", + "cf|NoErrors", + "cf|NotContainsText", + "cf|TimePeriod", + "cf|Top10", + "cf|Unique", + "chart", + "chart {target} has no supported plot and was skipped", + "check", + "choose a valid PNG or JPEG picture", + "choose at least one of summary, confidence, kthLargest or kthSmallest", + "close", + "colorful", + "column", + "column outside the filter range", + "comment", + "commits", + "contains", + "contributors", + "dashed", + "dates", + "destination columns are outside the worksheet", + "dotted", + "double", + "e.g. lookup, average, date", + "empty input Y range", + "empty input range", + "equal to", + "expected ! after sheet name", + "expected `,` or `)`, found {token}", + "expected a number in array, found {token}", + "expected a reference after the sheet name, found {token}", + "expected exclusive or inclusive", + "expected {expected}, found {actual}", + "false", + "files larger than 2 GB aren't supported", + "filter", + "folder", + "formula is longer than {limit} characters", + "formula is nested too deeply", + "give `rowInput`, `columnInput` or both", + "give at least one source range in `sources`", + "give both `timeline` and `values`, or neither", + "goal `value` needs a number in `value`", + "gone", + "greater than", + "greater than or equal to", + "grouped shapes are not supported and were skipped", + "home", + "image larger than 64 MB", + "insert", + "invalid 3-D reference", + "invalid base64", + "invalid cell address", + "invalid cell reference `{cell}` for `{key}`", + "invalid image dimensions", + "kind must be chart, image or shape", + "less than", + "less than or equal to", + "line chart", + "link", + "lock", + "macro", + "medium", + "menu|Tools", + "minus", + "missing `area` (rows|columns|values|filters)", + "missing `before`", + "missing `cell`", + "missing `cell`: the selection is on the active sheet", + "missing `changing`", + "missing `column`", + "missing `field`", + "missing `format` or `code`", + "missing `formula`", + "missing `height` (pixels) or `points`", + "missing `id`", + "missing `index`", + "missing `input` (or `value`)", + "missing `location`", + "missing `name`", + "missing `output` (the output range)", + "missing `path`", + "missing `percent`", + "missing `range`", + "missing `range`, `categories` or `removeSeries`", + "missing `range`: the selection is on the active sheet", + "missing `reference`", + "missing `reports` (answer, limits)", + "missing `rows` or `cols`: the selection is on the active sheet", + "missing `size`", + "missing `source`", + "missing `target`", + "missing `title`", + "missing `to`", + "missing `value`", + "missing `values` (array of rows)", + "missing `what`", + "missing `width`", + "missing `width` (pixels) or `chars`", + "missing `word`", + "missing `{parameter}`", + "missing or invalid `color`", + "missing picture {target}", + "missing the constraint's right side", + "mode must be moveAndSize, moveOnly or absolute", + "monochrome", + "multi-area charts require a text category column followed by equal-height series columns", + "multi-area series columns require headers", + "new workbook|Book", + "new workbook|Sheet", + "no changing cells", + "no chart on this sheet", + "no filter", + "no ink stroke to convert", + "no sheet named `{sheet}`", + "no slicer", + "no slicer on this sheet", + "no such chart", + "no such name", + "no such name to edit", + "no such object", + "no such range", + "no such scenario", + "no such script", + "no such series", + "no such shape", + "no such sheet", + "no such text box", + "no such view", + "no such window", + "no suggestion with that index", + "no value field at that index", + "no workbook open", + "none", + "not a range", + "not a range: `{range}`", + "not between", + "not equal to", + "not found", + "note", + "nothing", + "number too large `{number}`", + "numbers", + "of", + "of:", + "parameter", + "pass `field` or `index`", + "pen", + "pi", + "picture", + "picture cannot be decoded within the 64 MiB limit", + "pie chart", + "pixels", + "placement must be cell or overCells", + "plus", + "range", + "range larger than 1,000,000 cells; read it in parts", + "range too large", + "range too large for a chart", + "result cells must be on the scenarios' sheet", + "row", + "save", + "scatter", + "script", + "scripts in this workbook came from a file and are disabled; trust the workbook first (Trust Scripts in View › Macros, Alt+F8; `automate.trustScripts`; or `trusted: true`)", + "search", + "select a cell in a table", + "selection too large", + "selection too large to format cell by cell", + "settings", + "shapes", + "share", + "single cell", + "sort key row must be 1 or greater", + "source columns are outside the worksheet", + "step", + "steps", + "style name too long", + "sum", + "t-Test: Paired Two Sample for Means", + "t-Test: Two-Sample Assuming Equal Variances", + "t-Test: Two-Sample Assuming Unequal Variances", + "table", + "text", + "the changes you made?|changes", + "the confidence level must be between 0 and 100", + "the constraint's right side must be a number", + "the criteria range is too large", + "the extract range exceeds the worksheet", + "the forecast runs past the last date", + "the inserted lines would extend past the end of the worksheet", + "the list range is too large", + "the move is too close to the worksheet boundary", + "the name is too long (255 characters max)", + "the report is too large", + "the shape is not a text box", + "the sources are too large", + "the symbol can't contain a quote, a backslash or a control character", + "the table has no columns", + "the table needs at least two rows and two columns", + "the target must contain the source in one of its corners", + "the timeline and the values are each one row or one column", + "the timeline and the values must be on one sheet", + "the timeline and the values need the same number of cells", + "theme", + "theta", + "thick", + "thin", + "this workbook", + "times", + "too many arguments", + "too many items", + "too many rows", + "too many scenarios", + "too many sort levels (64 max)", + "too many sources (255 max)", + "trace", + "trendlines need a 2-D column, bar, line, area, scatter or bubble series", + "true", + "unbalanced [", + "unexpected character `{character}`", + "unexpected end of formula", + "unexpected {token}", + "unknown command `{command}`", + "unknown error literal", + "validation", + "value", + "value is not in the column", + "v{from} to {to}", + "with", + "{app} {version} is available with the latest features and bug fixes.", + "{asked} already holds data. Replace it with the model?", + "{contributors} contributors · {commits} commits", + "{count} cell(s) found", + "{count} engine commands are available. See docs/mcp.md and docs/control-protocol.md.", + "{count} items in this file were handled differently. First: {warning}", + "{family} table style {number}", + "{file}, Page 1", + "{function} has too few arguments. Use {signature}", + "{function} has too many arguments. Use {signature}", + "{id} can't run in a macro: {why}.", + "{id} {what}: the macro must list it in its permissions.", + "{name} (script, {count})", + "{number}. {kind} applies to {ranges}", + "{n} cell(s) found", + "{n} days ago", + "{n} h ago", + "{n} min ago", + "{n} months ago", + "{n} weeks ago", + "{n} years ago", + "{range} already holds data. Replace it with the model?", + "{sheet}, Page 1", + "£ English (United Kingdom)", + "¥ Chinese (PRC)", + "¥ Japanese", + "·", + "ΔLOC", + "— 1 step", + "— VBA project (preserved, not run)", + "— {steps} step", + "— {steps} steps", + "₩ Korean", + "€ Euro", + "₹ English (India)", + "₽ Russian", + "↑ Sort Ascending", + "↓ Sort Descending", + "−Bin", + "−LOC", + "⌘/Ctrl+Enter to apply", + "⌘/Ctrl+Enter to insert", + "⌘/Ctrl+Enter to {verb}", + "▲", + "▼", + "▾", +]; diff --git a/crates/ui-egui/src/i18n/ko.rs b/crates/ui-egui/src/i18n/ko.rs index ca27102723..dd83acc42a 100644 --- a/crates/ui-egui/src/i18n/ko.rs +++ b/crates/ui-egui/src/i18n/ko.rs @@ -3,6 +3,65 @@ /// Returns the Korean translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Series{n}" => "계열 {n}", + "3 Arrows" => "3방향 화살표", + "3 Symbols" => "기호 3개", + "3 Traffic Lights" => "신호등 3개", + "4 Ratings" => "4가지 등급", + "5 Arrows" => "5방향 화살표", + "5 Quarters" => "5개 사분면", + "applies to" => "적용 대상", + "Apply" => "적용", + "Blanks" => "빈 셀", + "Conditional Formatting Rules Manager" => "조건부 서식 규칙 관리자", + "Errors" => "오류", + "Format values where this formula is true:" => "다음 수식이 참인 값의 서식 지정:", + "Formula" => "수식", + "Green Fill with Dark Green Text" => "진한 녹색 텍스트가 있는 녹색 채우기", + "In the last 7 days" => "지난 7일 동안", + "Last month" => "지난달", + "Last week" => "지난주", + "Light Red Fill" => "연한 빨강 채우기", + "Light Red Fill with Dark Red Text" => "진한 빨강 텍스트가 있는 연한 빨강 채우기", + "Maximum" => "최대값", + "Minimum" => "최소값", + "New Formatting Rule" => "새 서식 규칙", + "New Rule…" => "새 규칙…", + "Next month" => "다음 달", + "Next week" => "다음 주", + "No Border" => "테두리 없음", + "Percent" => "백분율", + "Red Border" => "빨강 테두리", + "Red Text" => "빨강 텍스트", + "This month" => "이번 달", + "This week" => "이번 주", + "Today" => "오늘", + "Tomorrow" => "내일", + "Yellow Fill with Dark Yellow Text" => "진한 노랑 텍스트가 있는 노랑 채우기", + "and" => "및", + "Formula:" => "수식:", + "OK" => "확인", + "There are no conditional formatting rules on this sheet." => "이 시트에는 조건부 서식 규칙이 없습니다.", + "a linked (not embedded) picture was skipped" => "연결된(포함되지 않은) 그림을 건너뛰었습니다.", + "missing picture {target}" => "그림 {target}을(를) 찾을 수 없습니다.", + "chart {target} has no supported plot and was skipped" => "차트 {target}에 지원되는 플롯이 없어 건너뛰었습니다.", + "a histogram, waterfall, treemap… chart without its chart part was skipped" => { + "차트 부분이 없는 히스토그램, 폭포형, 트리맵… 차트를 건너뛰었습니다." + } + "an embedded object (diagram, OLE…) was skipped" => "포함된 개체(다이어그램, OLE…)를 건너뛰었습니다.", + "grouped shapes are not supported and were skipped" => "그룹화된 도형은 지원되지 않아 건너뛰었습니다.", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported." => { + "XLSB 데이터만 가져옵니다. 수식은 저장된 결과로 바뀌며 다시 계산되지 않습니다. 서식, 차트, 그림, 매크로 및 기타 기능은 가져오지 않으며 날짜, 통화 및 백분율이 숫자로 표시될 수 있습니다. 새 .xlsx 파일로 저장하세요. XLSB 저장은 지원되지 않습니다." + } + "XLSB module sheets were skipped." => "XLSB 모듈 시트를 건너뛰었습니다.", + "XLSB non-worksheet sheets were skipped." => "XLSB 워크시트가 아닌 시트를 건너뛰었습니다.", + "Unsupported XLSB future-record and alternate-content blocks were skipped." => { + "지원되지 않는 XLSB 미래 레코드 및 대체 콘텐츠 블록을 건너뛰었습니다." + } + "Invalid XLSB merged ranges were skipped." => "잘못된 XLSB 병합 범위를 건너뛰었습니다.", + "{count} items in this file were handled differently. First: {warning}" => { + "이 파일의 {count}개 항목이 다르게 처리되었습니다. 첫 번째 항목: {warning}" + } "Diagram" => "다이어그램", "Decorative Text" => "장식 텍스트", "Paste" => "붙여넣기", @@ -317,7 +376,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Logical" => "논리", "Date & Time" => "날짜 및 시간", "Lookup & Reference" => "조회 및 참조", - "Math & Trig" => "수학 및 삼각", + "Math & Trig" => "수학 및 삼각 함수", "More Functions" => "기타 함수", "Page Layout|Orientation" => "용지 방향", "Display theme" => "표시 테마", @@ -426,6 +485,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Print Entire Workbook" => "전체 통합 문서 인쇄", "Fit Sheet on One Page" => "한 페이지에 시트 맞추기", "Page Setup…" => "페이지 설정…", + "Page {page}" => "{page} 페이지", "Page {page} of {pages}" => "{page}/{pages} 페이지", "Nothing to print." => "인쇄할 내용이 없습니다.", "Previous page" => "이전 페이지", @@ -485,6 +545,31 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "중지", "New Macro" => "새 매크로", "Show" => "표시", + "Generated|Column" => "열", + "Generated|Row" => "행", + "Book" => "통합문서", + "Sheet" => "시트", + "Count Numbers" => "숫자 개수", + "Type to filter…" => "입력하여 필터링…", + "Nothing to paste." => "붙여넣을 데이터가 없습니다.", + "No cells were found." => "셀을 찾을 수 없습니다.", + "Or select a category:" => "또는 범주 선택:", + "Most Recently Used" => "최근에 사용한 함수", + "Insert Function…" => "함수 삽입…", + "Paste Names…" => "이름 붙여넣기…", + "Macro name:" => "매크로 이름:", + "Shortcut key:" => "바로 가기 키:", + "Description:" => "설명:", + "This workbook has no scripts or macros." => "이 통합 문서에는 스크립트나 매크로가 없습니다.", + "Check for Updates…" => "업데이트 확인…", + "Checking for updates…" => "업데이트 확인 중…", + "Could not check for updates." => "업데이트를 확인할 수 없습니다.", + "Check Again" => "다시 확인", + "Insert Function" => "함수 삽입", + "Search:" => "검색:", + "e.g. lookup, average, date" => "예: 검색, 평균, 날짜", + "Cancel" => "취소", + "All" => "모두", "Collapse dialog" => "대화 상자 축소", "Expand dialog" => "대화 상자 확장", _ => return None, diff --git a/crates/ui-egui/src/i18n/ko_functions.rs b/crates/ui-egui/src/i18n/ko_functions.rs new file mode 100644 index 0000000000..6af6cd882a --- /dev/null +++ b/crates/ui-egui/src/i18n/ko_functions.rs @@ -0,0 +1,882 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "양수이면 1, 음수이면 -1, 0이면 0을 반환합니다."), + ("A random integer between two bounds, inclusive.", "두 경곗값을 포함하는 범위에서 임의의 정수를 반환합니다."), + ("A random number between 0 and 1, recalculated every time.", "0에서 1 사이의 임의의 숫자이며 매번 다시 계산됩니다."), + ("A range or array without its blank outer rows and columns.", "바깥쪽의 빈 행과 열을 제거한 범위 또는 배열입니다."), + ("A reference shifted from a starting point.", "시작점에서 지정한 만큼 이동한 참조입니다."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "FORECAST.ETS 모델의 통계량: 1 알파, 2 베타, 3 감마, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 단계 크기.", + ), + ("A subtotal that can skip hidden rows.", "숨겨진 행을 건너뛸 수 있는 소계입니다."), + ("Absolute value (modulus) of a complex number.", "복소수의 절대값(모듈러스)입니다."), + ("Absolute value of a number.", "숫자의 절대값입니다."), + ("Accrued interest of a security paying interest at maturity.", "만기에 이자를 지급하는 유가증권의 경과이자입니다."), + ("Accrued interest of a security paying periodic interest.", "정기적으로 이자를 지급하는 유가증권의 경과이자입니다."), + ("Accumulates an array into one value.", "배열을 하나의 값으로 누적합니다."), + ("Adds all the numbers in the arguments.", "인수에 지정된 모든 숫자의 합계를 구합니다."), + ("Adds the cells that meet a condition.", "조건을 만족하는 스프레드시트 셀의 숫자 값 합계를 반환합니다."), + ("Adds the cells that meet every condition.", "모든 조건을 만족하는 스프레드시트 셀의 숫자 값 합계를 반환합니다."), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "기준을 충족하는 레코드에 대해 데이터베이스 필드의 숫자 값 합계를 반환합니다.", + ), + ("Adds the squares of the numbers.", "제곱된 숫자의 합을 반환합니다."), + ("Amount received at maturity for a fully invested security.", "전액 투자한 유가증권의 만기 수령액입니다."), + ("An aggregate that can skip hidden rows and errors.", "숨겨진 행과 오류를 건너뛸 수 있는 집계입니다."), + ("Angle of a complex number in radians.", "라디안 단위의 복소수의 각도입니다."), + ("Angle of the point (x, y) from the x-axis in radians.", "x축에서 점(x, y)의 각도(라디안)입니다."), + ("Annual yield of a discounted security.", "할인 유가증권의 연간 수익률입니다."), + ("Annual yield of a security paying interest at maturity.", "만기 시 이자를 지급하는 유가증권의 연간 수익률입니다."), + ("Applies a LAMBDA to each column.", "각 열에 LAMBDA를 적용합니다."), + ("Applies a LAMBDA to each row.", "각 행에 LAMBDA를 적용합니다."), + ("Applies a LAMBDA to each value.", "각 값에 LAMBDA를 적용합니다."), + ("Approximate lookup in a sorted vector or the first row/column of an array.", "정렬된 벡터 또는 배열의 첫 번째 행/열에서 대략적인 조회입니다."), + ("Arccosine in radians.", "라디안 단위의 아크코사인입니다."), + ("Arccotangent in radians (0 to pi).", "아크코탄젠트(라디안)(0~pi)."), + ("Arcsine in radians.", "아크사인(라디안)입니다."), + ("Arctangent in radians.", "아크탄젠트(라디안)입니다."), + ("Arithmetic mean of the numbers.", "숫자의 산술 평균입니다."), + ("Average absolute deviation from the mean.", "평균에 대한 절대 편차의 평균입니다."), + ("Average of the cells that meet a condition.", "조건을 충족하는 스프레드시트 셀의 평균입니다."), + ("Average of the cells that meet every condition.", "모든 조건을 충족하는 스프레드시트 셀의 평균입니다."), + ("Averages the numbers in a field of the records that meet the criteria.", "기준을 충족하는 레코드 필드의 숫자를 평균합니다."), + ("Base-10 logarithm of a complex number.", "복소수의 밑이 10인 로그입니다."), + ("Base-10 logarithm.", "밑이 10인 로그."), + ("Base-2 logarithm of a complex number.", "복소수의 밑이 2인 로그입니다."), + ("Bessel function of the first kind, J_n(x).", "제1종 베셀 함수 J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "제2종 베셀 함수 Y_n(x)."), + ("Beta distribution density or probability.", "베타 분포 밀도 또는 확률입니다."), + ("Binomial probability.", "이항확률."), + ("Bitwise AND of two non-negative integers.", "음수가 아닌 두 정수의 비트별 AND입니다."), + ("Bitwise OR of two non-negative integers.", "음수가 아닌 두 정수의 비트별 OR입니다."), + ("Bitwise exclusive OR of two non-negative integers.", "음수가 아닌 두 정수의 비트별 배타적 OR입니다."), + ("Bond-equivalent yield of a Treasury bill.", "단기 국채의 채권 등가 수익률입니다."), + ("Breaks a row or column into columns of the given length.", "행이나 열을 주어진 길이의 열로 나눕니다."), + ("Breaks a row or column into rows of the given length.", "행이나 열을 주어진 길이의 행으로 나눕니다."), + ("Builds a cell address as text from row and column numbers.", "행 및 열 번호의 텍스트로 셀 주소를 작성합니다."), + ("Builds a complex number as text from real and imaginary parts.", "실수부와 허수부에서 텍스트로 복소수를 만듭니다."), + ("Builds a date serial number from a year, month and day.", "연, 월, 일로부터 날짜 일련번호를 만듭니다."), + ("Builds a summary table grouping values by row and column fields.", "행 및 열 필드별로 값을 그룹화하는 요약 테이블을 작성합니다."), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "시, 분, 초로 시간(하루의 일부)을 구성합니다."), + ("Builds an array from a LAMBDA.", "LAMBDA에서 배열을 구축합니다."), + ("Builds an array of evenly stepped numbers.", "일정한 간격의 숫자로 이루어진 배열을 만듭니다."), + ("Builds an array of random numbers in a range.", "범위 내에서 난수 배열을 만듭니다."), + ("Byte version of FIND.", "FIND의 바이트 버전입니다."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "LEFT의 바이트 버전입니다(싱글바이트 텍스트의 경우 LEFT와 동일)."), + ("Byte version of LEN (same as LEN for single-byte text).", "LEN의 바이트 버전입니다(싱글바이트 텍스트의 경우 LEN와 동일)."), + ("Byte version of MID (same as MID for single-byte text).", "MID의 바이트 버전입니다(싱글바이트 텍스트의 경우 MID와 동일)."), + ("Byte version of REPLACE.", "REPLACE의 바이트 버전입니다."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "RIGHT의 바이트 버전입니다(싱글바이트 텍스트의 경우 RIGHT와 동일)."), + ("Byte version of SEARCH.", "SEARCH의 바이트 버전입니다."), + ("Capitalises the first letter of each word and lower-cases the rest.", "각 단어의 첫 글자를 대문자로 하고 나머지는 소문자로 만듭니다."), + ("Chi-squared density or left-tailed probability.", "카이제곱 밀도 또는 왼쪽 꼬리 확률."), + ("Chi-squared test of independence.", "카이제곱 독립성 검정."), + ("Column number of a reference.", "참조의 열 번호를 반환합니다."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "표현식을 값 목록과 비교하고 첫 번째 일치 항목과 쌍을 이루는 결과를 반환합니다.", + ), + ("Complementary error function, 1 - ERF(x).", "상보 오차 함수 1 - ERF(x)입니다."), + ("Complex conjugate of a complex number.", "복소수의 켤레 복소수입니다."), + ("Confidence interval half-width using Student's t distribution.", "스튜던트 t 분포를 사용한 신뢰구간 반폭입니다."), + ("Confidence interval half-width using the normal distribution.", "정규 분포를 사용한 신뢰 구간 반폭입니다."), + ("Converts Roman numerals to a number.", "로마 숫자를 숫자로 변환합니다."), + ("Converts a binary number to decimal.", "이진수를 십진수로 변환합니다."), + ("Converts a binary number to hexadecimal.", "2진수를 16진수로 변환합니다."), + ("Converts a binary number to octal.", "2진수를 8진수로 변환합니다."), + ("Converts a date written as text into a date serial number.", "텍스트로 작성된 날짜를 날짜 일련번호로 변환합니다."), + ("Converts a decimal number to binary.", "10진수를 2진수로 변환합니다."), + ("Converts a decimal number to hexadecimal.", "10진수를 16진수로 변환합니다."), + ("Converts a decimal number to octal.", "10진수를 8진수로 변환합니다."), + ("Converts a decimal price to fractional notation.", "소수 가격을 분수 표기법으로 변환합니다."), + ("Converts a fractional price notation to a decimal number.", "분수 가격 표기를 소수로 변환합니다."), + ("Converts a hexadecimal number to binary.", "16진수를 2진수로 변환합니다."), + ("Converts a hexadecimal number to decimal.", "16진수를 10진수로 변환합니다."), + ("Converts a hexadecimal number to octal.", "16진수를 8진수로 변환합니다."), + ("Converts a measurement from one unit to another.", "측정값을 한 단위에서 다른 단위로 변환합니다."), + ("Converts a number to Roman numerals in one of five styles.", "숫자를 다섯 가지 스타일 중 하나로 로마 숫자로 변환합니다."), + ("Converts a time written as text into a fraction of a day.", "텍스트로 작성된 시간을 하루의 일부로 변환합니다."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "값을 숫자로 변환합니다. 숫자는 유지되고 TRUE는 1이고 나머지는 모두 0입니다.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "배열을 쉼표 목록이나 엄격한 배열 상수로 텍스트로 변환합니다.", + ), + ("Converts an octal number to binary.", "8진수를 2진수로 변환합니다."), + ("Converts an octal number to decimal.", "8진수를 10진수로 변환합니다."), + ("Converts an octal number to hexadecimal.", "8진수를 16진수로 변환합니다."), + ("Converts any value to text, optionally in strict (quoted) form.", "모든 값을 선택적으로 엄격한(인용) 형식의 텍스트로 변환합니다."), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "유로화와 이전 유로 회원국 통화를 고정 환율로 변환합니다.", + ), + ("Converts degrees to radians.", "도를 라디안으로 변환합니다."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "전자 문자를 반자 문자로 변환합니다(단일 바이트 텍스트의 경우에는 변경되지 않음).", + ), + ("Converts half-width characters to full-width (no change in this locale).", "반자 문자를 전자로 변환합니다(이 로케일에서는 변경되지 않음)."), + ("Converts radians to degrees.", "라디안을 도로 변환합니다."), + ("Converts text that looks like a number, date or time into a number.", "숫자, 날짜, 시간처럼 보이는 텍스트를 숫자로 변환합니다."), + ( + "Converts text to a number using the given decimal and group separators.", + "주어진 소수점 및 그룹 구분 기호를 사용하여 텍스트를 숫자로 변환합니다.", + ), + ("Converts text to lower case.", "텍스트를 소문자로 변환합니다."), + ("Converts text to upper case.", "텍스트를 대문자로 변환합니다."), + ("Correlation coefficient of two data sets.", "두 데이터 세트의 상관 계수입니다."), + ("Cosecant of a complex number.", "복소수의 코시컨트입니다."), + ("Cosecant of an angle in radians.", "각도의 코시컨트(라디안 단위)입니다."), + ("Cosine of a complex number.", "복소수의 코사인입니다."), + ("Cosine of an angle in radians.", "라디안 단위 각도의 코사인입니다."), + ("Cotangent of a complex number.", "복소수의 코탄젠트입니다."), + ("Cotangent of an angle in radians.", "각도의 코탄젠트(라디안 단위)입니다."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "1년을 360일로 보아 두 날짜 사이의 일수를 계산합니다(미국 또는 유럽 방식).", + ), + ("Counts empty cells and empty text in a range.", "빈 스프레드시트 셀과 범위 내 빈 텍스트의 수를 계산합니다."), + ("Counts how many values fall into each bin, as a vertical array.", "수직 배열로 각 Bin에 속하는 값 수를 계산합니다."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "일치하는 레코드의 필드에서 비어 있지 않은 셀 수를 계산합니다(또는 일치하는 레코드 수를 계산합니다).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "일치하는 레코드의 필드에서 숫자가 있는 셀 수를 계산합니다(또는 일치하는 레코드 수를 계산합니다).", + ), + ("Counts the cells that meet a condition.", "조건을 충족하는 스프레드시트 셀의 수를 계산합니다."), + ("Counts the cells that meet every condition.", "모든 조건을 충족하는 스프레드시트 셀의 수를 계산합니다."), + ("Counts the characters in a text.", "텍스트의 문자 수를 계산합니다."), + ("Counts the columns in an array or range.", "배열 또는 범위의 열 수를 계산합니다."), + ("Counts the items in a cube set (no cube connections; #N/A).", "큐브 세트의 항목 수를 계산합니다(큐브 연결 없음, #N/A)."), + ("Counts the non-empty values.", "비어 있지 않은 값의 개수를 계산합니다."), + ("Counts the numbers.", "숫자의 개수를 계산합니다."), + ("Counts the rows in an array or range.", "배열 또는 범위의 행 수를 계산합니다."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "두 날짜 사이의 완전히 경과한 연수, 개월 수 또는 일수를 계산합니다. 단위: Y, M, D, MD, YM 또는 YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "공휴일을 제외한 두 날짜 사이의 근무일(월요일~금요일)을 계산합니다.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "휴일을 제외한 사용자 정의 주말을 사용하여 두 날짜 사이의 근무일을 계산합니다.", + ), + ("Creates a link; the cell shows the friendly name, or the link itself.", "링크를 생성합니다. 셀에는 친숙한 이름이나 링크 자체가 표시됩니다."), + ("Creates a reusable custom function.", "재사용 가능한 사용자 정의 함수를 만듭니다."), + ("Cumulative beta probability.", "누적 베타 확률입니다."), + ("Cumulative lognormal probability.", "누적 로그 정규 확률입니다."), + ("Cuts off the fractional part of a number at the given digits.", "숫자를 지정된 자릿수에서 잘라냅니다."), + ("Days from settlement to the next coupon date.", "정산일부터 다음 이자지급일까지의 일수입니다."), + ("Days from the start of the coupon period to settlement.", "이자지급기간 개시일로부터 정산일까지의 일수입니다."), + ("Days in the coupon period that contains settlement.", "정산이 포함된 이자지급기간의 일수입니다."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "지정한 기간 범위의 정률법 감가상각액을 계산하며 정액법으로 전환합니다.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "큐브 구성원 집합을 정의합니다(큐브 연결 없음, #N/A)."), + ("Determinant of a square matrix.", "정사각 행렬의 행렬식."), + ("Difference of two complex numbers.", "두 복소수의 차이."), + ("Discount rate of a security.", "유가증권의 할인율입니다."), + ("Double factorial of a number.", "숫자의 이중 계승입니다."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "한 기간의 이중 체감법(또는 지정한 배율을 사용한 정률법) 감가상각액입니다.", + ), + ("Effective annual rate from a nominal rate and compounding periods.", "명목 이율과 복리 기간을 바탕으로 한 유효 연간 이율입니다."), + ("Equivalent interest rate for the growth of an investment.", "투자 성장에 대한 등가 이자율입니다."), + ("Error function integrated from 0 to a limit, or between two limits.", "0부터 한 경곗값까지 또는 두 경곗값 사이를 적분한 오차 함수입니다."), + ("Error function integrated from 0 to x.", "0부터 x까지 적분한 오차 함수입니다."), + ("Excess kurtosis of a sample.", "표본의 초과 첨도입니다."), + ("Exponential curve coefficients and optional regression statistics.", "지수 곡선 계수 및 선택적 회귀 통계."), + ("Exponential distribution density or probability.", "지수 분포 밀도 또는 확률."), + ("Exponential of a complex number.", "복소수의 지수 함수 값입니다."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "XPath를 사용하여 XML에서 데이터를 추출합니다(사용할 수 없음, #VALUE! 반환).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "첫 번째 일치, 모든 일치 또는 정규식의 캡처 그룹을 추출합니다.", + ), + ("F distribution density or left-tailed probability.", "F 분포 밀도 또는 왼쪽 꼬리 확률입니다."), + ("Factorial of a number.", "숫자의 계승."), + ("Fetches data from a web service (not available; returns #VALUE!).", "웹 서비스에서 데이터를 가져옵니다(사용할 수 없음, #VALUE! 반환)."), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "테이블의 첫 번째 열에서 값을 찾아 다른 열의 동일한 행에 있는 값을 반환합니다.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "테이블의 첫 번째 행에서 값을 찾아 다른 행의 동일한 열에 있는 값을 반환합니다.", + ), + ("Finds the position of one text in another (case-sensitive).", "다른 텍스트에서 한 텍스트의 위치를 찾습니다(대소문자 구분)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "대소문자를 무시하고 와일드카드를 허용하여 다른 텍스트에서 한 텍스트의 위치를 찾습니다.", + ), + ("Fisher transformation.", "피셔 변환입니다."), + ("Fixed-declining-balance depreciation for a period.", "일정 기간 동안의 고정 정률 감가상각비입니다."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "배열을 단일 열로 평면화하고 선택적으로 공백이나 오류를 건너뜁니다.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "배열을 단일 행으로 평면화하고 선택적으로 공백이나 오류를 건너뜁니다.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "가산(AAA) 지수 평활법으로 값을 예측합니다."), + ("Formats a number as currency text, like DOLLAR.", "숫자를 DOLLAR와 같은 통화 텍스트 형식으로 지정합니다."), + ("Formats a number as currency text.", "숫자를 통화 텍스트 형식으로 지정합니다."), + ("Formats a number as text.", "숫자 형식을 텍스트로 지정합니다."), + ("French degressive depreciation with a life-based coefficient.", "내용연수에 따른 계수를 사용하는 프랑스식 체감법 감가상각입니다."), + ("French linear depreciation prorated for the first period.", "첫 기간에 비례 배분을 적용하는 프랑스식 정액법 감가상각입니다."), + ("Future value of a principal after a series of compound rates.", "일련의 복리 이율 이후 원금의 미래 가치입니다."), + ("Future value of an investment with constant payments and rate.", "일정한 납입액과 이율을 적용한 투자의 미래 가치입니다."), + ("Gamma distribution density or probability.", "감마 분포 밀도 또는 확률입니다."), + ("Geometric mean of positive numbers.", "양수의 기하평균입니다."), + ("Greatest common divisor of integers.", "정수의 최대 공약수입니다."), + ("Groups rows by key fields and aggregates the values of each group.", "키 필드별로 행을 그룹화하고 각 그룹의 값을 집계합니다."), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "배열을 주어진 크기로 늘리고 새 스프레드시트 셀을 패드 값으로 채웁니다.", + ), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "FORECAST.ETS 값에 대한 신뢰 구간의 절반 너비입니다."), + ("Harmonic mean of positive numbers.", "양수의 조화평균입니다."), + ("Hyperbolic cosecant of a complex number.", "복소수의 쌍곡코시컨트입니다."), + ("Hyperbolic cosecant.", "쌍곡코시컨트."), + ("Hyperbolic cosine of a complex number.", "복소수의 쌍곡선 코사인입니다."), + ("Hyperbolic cosine.", "쌍곡선 코사인."), + ("Hyperbolic cotangent.", "쌍곡선 코탄젠트."), + ("Hyperbolic secant of a complex number.", "복소수의 쌍곡선 시컨트입니다."), + ("Hyperbolic secant.", "쌍곡선 시컨트."), + ("Hyperbolic sine of a complex number.", "복소수의 쌍곡선 사인입니다."), + ("Hyperbolic sine.", "쌍곡선 사인."), + ("Hyperbolic tangent.", "쌍곡탄젠트."), + ("Hypergeometric probability of an exact count.", "정확한 개수의 초기하 확률입니다."), + ("Hypergeometric probability.", "초기하 확률."), + ("Identity matrix of the given size.", "주어진 크기의 단위 행렬입니다."), + ("Imaginary coefficient of a complex number.", "복소수의 허수 계수입니다."), + ("Information about a cell.", "셀에 대한 정보입니다."), + ("Integer part of a division.", "나눗셈 몫의 정수 부분입니다."), + ("Interest paid in a period of a loan with even principal payments.", "원금균등분할로 대출기간에 지급되는 이자입니다."), + ("Interest part of a given period's payment.", "일정기간 지급액의 이자부분입니다."), + ("Interest rate of a fully invested security.", "전액 투자한 유가증권의 이자율입니다."), + ("Interest rate per period of an annuity, found iteratively.", "연금 기간당 이자율을 반복적으로 구합니다."), + ("Internal rate of return of cash flows on specific dates.", "특정 날짜의 현금 흐름 내부 수익률입니다."), + ("Internal rate of return of periodic cash flows.", "정기적인 현금 흐름의 내부 수익률입니다."), + ("Inverse hyperbolic cosine.", "역쌍곡선코사인."), + ("Inverse hyperbolic cotangent.", "역쌍곡선코탄젠트."), + ("Inverse hyperbolic sine.", "역쌍곡사인."), + ("Inverse hyperbolic tangent.", "역쌍곡탄젠트."), + ("Inverse of a square matrix.", "정사각 행렬의 역행렬입니다."), + ("Inverse of the Fisher transformation.", "피셔 변환의 역변환입니다."), + ("Inverse of the cumulative beta distribution.", "누적 베타 분포의 역함수입니다."), + ("Inverse of the cumulative lognormal distribution.", "누적 로그 정규 분포의 역함수입니다."), + ("Inverse of the gamma cumulative distribution.", "감마 누적 분포의 역함수입니다."), + ("Inverse of the left-tailed F distribution.", "왼쪽 꼬리 F 분포의 역함수입니다."), + ("Inverse of the left-tailed chi-squared distribution.", "왼쪽 꼬리 카이제곱 분포의 역함수입니다."), + ("Inverse of the normal cumulative distribution.", "정규 누적 분포의 역함수입니다."), + ("Inverse of the right-tailed F distribution.", "오른쪽 꼬리 F 분포의 역함수입니다."), + ("Inverse of the right-tailed chi-squared distribution.", "오른쪽 꼬리 카이제곱 분포의 역함수입니다."), + ("Inverse of the standard normal cumulative distribution.", "표준 정규 누적 분포의 역함수입니다."), + ("Joins several text values into one.", "여러 텍스트 값을 하나로 결합합니다."), + ("Joins text from values and every cell of ranges, without a separator.", "값과 범위의 모든 셀에서 구분 기호 없이 텍스트를 결합합니다."), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "값과 범위의 텍스트를 구분 기호로 결합하고 선택적으로 빈 항목을 건너뜁니다.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "배열의 시작(또는 끝)에서 행이나 열을 유지합니다."), + ("Keeps the rows or columns of an array whose include flag is TRUE.", "포함 플래그가 TRUE인 배열의 행 또는 열을 유지합니다."), + ("Largest number (0 when there are none).", "가장 큰 숫자(없으면 0)입니다."), + ("Largest number in a field of the matching records.", "일치하는 레코드의 필드에서 가장 큰 숫자입니다."), + ("Largest value among cells that meet every condition.", "모든 조건을 만족하는 스프레드시트 셀 중 가장 큰 값입니다."), + ("Largest value counting text as 0 and logicals as 1/0.", "텍스트를 0으로, 논리를 1/0으로 계산하는 가장 큰 값입니다."), + ("Least common multiple of integers.", "정수의 최소공배수입니다."), + ("Least-squares line coefficients and optional regression statistics.", "최소제곱선 계수 및 선택적 회귀 통계."), + ("Left-tailed inverse of Student's t distribution.", "스튜던트 t 분포의 왼쪽 꼬리 역함수입니다."), + ("Length of the repeating pattern detected in a time series.", "시계열에서 감지된 반복 패턴의 길이입니다."), + ("Logarithm to the given base (10 by default).", "주어진 밑수에 대한 로그(기본값은 10)입니다."), + ("Lognormal density or probability.", "대수정규 밀도 또는 확률입니다."), + ("Macaulay duration of a security with periodic interest.", "정기적으로 이자를 지급하는 유가증권의 매콜리 듀레이션을 구합니다."), + ("Matrix product of two arrays.", "두 어레이의 매트릭스 곱입니다."), + ("Mean after trimming a fraction of points from both ends.", "양쪽 끝에서 일부 점을 잘라낸 후의 평균입니다."), + ("Mean counting text as 0 and logical values as 1 or 0.", "텍스트를 0으로, 논리값을 1 또는 0으로 처리한 평균입니다."), + ("Middle value of the numbers.", "숫자의 중앙값입니다."), + ("Modified Bessel function of the first kind, I_n(x).", "수정된 제1종 베셀 함수 I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "수정된 제2종 베셀 함수 K_n(x)."), + ("Modified duration of a security with periodic interest.", "정기적으로 이자를 지급하는 유가증권의 수정 듀레이션을 구합니다."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "차입 이율과 재투자 이율을 별도로 사용하는 수정 내부 수익률입니다.", + ), + ("Most frequently occurring number.", "가장 자주 발생하는 번호입니다."), + ("Multiplies all the numbers in the arguments.", "인수의 모든 숫자를 곱합니다."), + ("Multiplies matching elements of equally sized arrays and adds the products.", "동일한 크기의 배열에서 일치하는 요소를 곱하고 곱을 더합니다."), + ("Multiplies the numbers in a field of the matching records.", "일치하는 레코드의 필드에 있는 숫자를 곱합니다."), + ("Names intermediate results.", "중간 결과의 이름을 지정합니다."), + ("Natural log of the gamma function.", "감마 함수의 자연 로그입니다."), + ("Natural logarithm of a complex number.", "복소수의 자연로그입니다."), + ("Natural logarithm.", "자연로그."), + ("Negative binomial probability.", "음이항 확률."), + ("Net present value of cash flows on specific dates.", "특정 날짜의 현금 흐름의 순 현재 가치입니다."), + ("Net present value of periodic cash flows at a discount rate.", "할인율로 계산한 정기 현금 흐름의 순 현재 가치입니다."), + ("Next coupon date after settlement.", "정산 후 다음 이자지급일입니다."), + ("Nominal annual rate from an effective rate and compounding periods.", "유효 이율과 복리 기간을 바탕으로 한 명목 연이율입니다."), + ("Normal distribution density or cumulative probability.", "정규분포 밀도 또는 누적 확률입니다."), + ("Number of areas in a reference.", "참조의 영역 수입니다."), + ("Number of combinations with repetition.", "중복을 허용하는 조합의 수입니다."), + ("Number of combinations without repetition.", "중복을 허용하지 않는 조합의 수입니다."), + ("Number of coupons payable between settlement and maturity.", "결제일부터 만기일까지의 이자 지급 횟수입니다."), + ("Number of ordered selections with repetition.", "중복을 허용하는 순열의 수입니다."), + ("Number of ordered selections without repetition.", "중복을 허용하지 않는 순열의 수입니다."), + ("Number of periods needed to pay off or accumulate an amount.", "금액을 상환하거나 적립하는 데 필요한 기간 수입니다."), + ("Number of sheets.", "시트 수입니다."), + ("One- or two-tailed Student's t probability.", "단측 또는 양측 스튜던트 t 확률."), + ("One-tailed probability of a z-test.", "z-검정의 단측 확률입니다."), + ("Pearson product-moment correlation coefficient.", "피어슨 적률 상관 계수입니다."), + ("Percent-encodes text for use in a URL.", "URL에 사용할 텍스트를 백분율로 인코딩합니다."), + ("Periodic payment for a loan or annuity with constant payments and rate.", "일정한 납입액과 이율을 적용한 대출 또는 연금의 정기 납입액입니다."), + ("Periods needed for an investment to grow to a target value.", "투자가 목표 가치까지 성장하는 데 필요한 기간 수입니다."), + ("Picks a value from the list by its position.", "목록에서 위치별로 값을 선택합니다."), + ("Picks columns of an array by position (negative counts from the end).", "배열의 열을 위치별로 선택합니다(음수는 끝에서부터 계산됩니다)."), + ("Picks rows of an array by position (negative counts from the end).", "위치별로 배열의 행을 선택합니다(음수는 끝에서부터 계산됩니다)."), + ("Places arrays side by side.", "배열을 나란히 배치합니다."), + ("Poisson probability.", "포아송 확률."), + ("Population covariance of paired values.", "쌍을 이루는 값의 모집단 공분산입니다."), + ("Population skewness.", "모집단 왜도입니다."), + ("Population standard deviation counting text as 0 and logicals as 1/0.", "텍스트를 0으로, 논리를 1/0으로 계산하는 모집단 표준 편차입니다."), + ("Population standard deviation of a field over the matching records.", "일치하는 레코드에 대한 필드의 모집단 표준 편차입니다."), + ("Population standard deviation.", "모집단 표준편차."), + ("Population variance counting text as 0 and logicals as 1/0.", "모집단 분산은 텍스트를 0으로, 논리를 1/0으로 계산합니다."), + ("Population variance of a field over the matching records.", "일치하는 레코드의 필드에 대한 모집단 분산입니다."), + ("Population variance.", "모집단 분산입니다."), + ("Positive square root.", "양의 제곱근."), + ("Predicts a value along a linear trend.", "선형 추세에 따라 값을 예측합니다."), + ("Present value of a series of equal future payments.", "일련의 동일한 미래 지급액의 현재 가치입니다."), + ("Previous coupon date on or before settlement.", "결제일 또는 결제 전 이자 지급일입니다."), + ("Price per 100 face value of a Treasury bill.", "단기 국채의 액면가 100당 가격입니다."), + ("Price per 100 face value of a discounted security.", "할인 유가증권의 액면가 100당 가격입니다."), + ("Price per 100 face value of a security paying interest at maturity.", "만기 시 이자를 지급하는 유가증권의 액면가 100당 가격입니다."), + ("Price per 100 face value of a security paying periodic interest.", "정기적으로 이자를 지급하는 유가증권의 액면가 100당 가격입니다."), + ("Price per 100 face value of a security with an odd first period.", "첫 번째 이자 기간이 불규칙한 유가증권의 액면가 100당 가격입니다."), + ("Price per 100 face value of a security with an odd last period.", "마지막 이자 기간이 불규칙한 유가증권의 액면가 100당 가격입니다."), + ("Principal part of a given period's payment.", "특정 기간 납입액 중 원금 부분입니다."), + ("Probability from Student's t-test.", "스튜던트 t-검정의 확률입니다."), + ("Probability of a number of successes falling in a range.", "특정 범위에 속하는 성공 횟수의 확률입니다."), + ("Probability that a standard normal value falls between the mean and z.", "표준정규값이 평균과 z 사이에 속할 확률입니다."), + ("Probability that values fall between two limits.", "값이 두 한계 사이에 속할 확률입니다."), + ("Product of complex numbers.", "복소수의 곱입니다."), + ("Quartile (0–4) of a data set, inclusive method.", "데이터 세트의 사분위수(0-4), 포괄적 방법."), + ("Quartile (0–4) of a data set.", "데이터 세트의 사분위수(0-4)입니다."), + ("Quartile (1–3) of a data set, exclusive method.", "데이터 세트의 사분위수(1–3), 배타적 방법."), + ("Quotient of two complex numbers.", "두 복소수의 몫."), + ("Raises a complex number to a power.", "복소수를 거듭제곱합니다."), + ("Raises a number to a power.", "숫자를 거듭제곱합니다."), + ("Rank of a number within a list.", "목록 내 숫자의 순위입니다."), + ("Rank of a number within a list; ties get the average rank.", "목록 내 숫자의 순위입니다. 동점은 평균 순위를 얻습니다."), + ("Rank of a number within a list; ties share the top rank.", "목록 내 숫자의 순위입니다. 동점 값에는 해당 순위 중 가장 높은 순위를 부여합니다."), + ("Ratio of the factorial of a sum to the product of factorials.", "계승의 곱에 대한 합계의 계승의 비율입니다."), + ("Reads text in a given base as a number.", "주어진 베이스의 텍스트를 숫자로 읽습니다."), + ("Real coefficient of a complex number.", "복소수의 실수 계수입니다."), + ("Relative standing of a value as a fraction of the data set.", "데이터 집합에서 값의 상대적 순위를 비율로 나타냅니다."), + ("Relative standing of a value from 0 to 1 inclusive.", "값의 상대적 순위를 0과 1을 포함하는 범위의 비율로 나타냅니다."), + ("Relative standing of a value strictly between 0 and 1.", "값의 상대적 순위를 0과 1을 제외한 범위의 비율로 나타냅니다."), + ("Remainder of a division, with the sign of the divisor.", "제수와 같은 부호를 갖는 나눗셈의 나머지입니다."), + ("Removes leading and trailing spaces and collapses runs of spaces to one.", "선행 및 후행 공백을 제거하고 일련의 공백을 하나로 축소합니다."), + ("Removes non-printable control characters from text.", "텍스트에서 인쇄할 수 없는 제어 문자를 제거합니다."), + ("Removes rows or columns from the start (or end) of an array.", "배열의 시작(또는 끝)에서 행이나 열을 제거합니다."), + ("Repeats a text a given number of times.", "지정된 횟수만큼 텍스트를 반복합니다."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "정규 표현식의 일치 항목, 전체 항목 또는 선택한 항목을 바꿉니다.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "한 텍스트의 발생을 다른 텍스트로 바꿉니다. 선택적으로 지정된 발생만 바꿉니다.", + ), + ("Replaces part of a text by position.", "지정한 위치에 있는 텍스트의 일부를 바꿉니다."), + ("Returns 1 when a number is at least the step, otherwise 0.", "숫자가 기준값 이상이면 1을, 그렇지 않으면 0을 반환합니다."), + ("Returns 1 when two numbers are equal, otherwise 0.", "두 숫자가 같으면 1을 반환하고, 그렇지 않으면 0을 반환합니다."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "값의 종류를 나타내는 코드를 반환합니다: 숫자 1, 텍스트 2, 논리값 4, 오류 16, 배열 64.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "값이 #N/A이면 대체를 반환하고, 그렇지 않으면 값을 반환합니다."), + ("Returns a fallback when the value is an error, otherwise the value.", "값이 오류이면 대체를 반환하고, 그렇지 않으면 값을 반환합니다."), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "큐브에서 핵심 성과 지표 속성을 반환합니다(큐브 연결 없음, #N/A).", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "큐브에서 멤버 또는 튜플을 반환합니다(큐브 연결 없음, #N/A)."), + ("Returns a property of a cube member (no cube connections; #N/A).", "큐브 구성원의 속성을 반환합니다(큐브 연결 없음, #N/A)."), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "큐브에서 집계된 값을 반환합니다(큐브 연결 없음, #N/A)."), + ("Returns characters from the middle of a text.", "텍스트 중간부터 문자를 반환합니다."), + ("Returns information about the operating environment.", "운영 환경에 대한 정보를 반환합니다."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "조건이 TRUE인 경우 하나의 값을 반환하고 FALSE인 경우 다른 값을 반환합니다.", + ), + ("Returns the #N/A error value.", "#N/A 오류 값을 반환합니다."), + ("Returns the 1-based position of a value in a row or column.", "행이나 열에서 값의 1 기반 위치를 반환합니다."), + ("Returns the ISO 8601 week number of a date.", "날짜의 ISO 8601 주 번호를 반환합니다."), + ("Returns the Unicode code point of the first character of a text.", "텍스트의 첫 번째 문자에 대한 유니코드 코드 포인트를 반환합니다."), + ("Returns the Windows-1252 code of the first character of a text.", "텍스트의 첫 번째 문자에 대한 Windows-1252 코드를 반환합니다."), + ("Returns the character for a Unicode code point.", "유니코드 코드 포인트의 문자를 반환합니다."), + ("Returns the character for a code from the Windows-1252 character set.", "Windows-1252 문자 집합에서 코드 문자를 반환합니다."), + ("Returns the current date and time.", "현재 날짜와 시간을 반환합니다."), + ("Returns the current date.", "현재 날짜를 반환합니다."), + ("Returns the date a number of months before or after a date.", "날짜 이전 또는 이후 개월 수의 날짜를 반환합니다."), + ( + "Returns the date a number of working days away with a custom weekend.", + "사용자 지정 주말을 적용하여 지정한 근무일 수만큼 전후의 날짜를 반환합니다.", + ), + ("Returns the date a number of working days before or after a date.", "지정한 근무일 수만큼 전후의 날짜를 반환합니다."), + ("Returns the day of the month of a date.", "날짜의 해당 월의 일자를 반환합니다."), + ("Returns the day of the week of a date as a number.", "날짜의 요일을 숫자로 반환합니다."), + ("Returns the distinct rows or columns of an array.", "배열의 고유한 행이나 열을 반환합니다."), + ("Returns the element, row or column of an array at the given position.", "주어진 위치에 있는 배열의 요소, 행 또는 열을 반환합니다."), + ("Returns the field value of the single record that meets the criteria.", "기준을 충족하는 단일 레코드의 필드 값을 반환합니다."), + ("Returns the first characters of a text.", "텍스트의 처음부터 지정한 수의 문자를 반환합니다."), + ("Returns the fraction of a year between two dates under a day-count basis.", "일수 기준으로 두 날짜 사이의 1년 비율을 반환합니다."), + ("Returns the hour (0-23) of a time.", "시간의 시간(0-23)을 반환합니다."), + ("Returns the last characters of a text.", "텍스트의 끝에서 지정한 수의 문자를 반환합니다."), + ("Returns the last day of the month a number of months away.", "지정한 개월 수만큼 전후인 달의 마지막 날을 반환합니다."), + ("Returns the logical value FALSE.", "논리값 FALSE를 반환합니다."), + ("Returns the logical value TRUE.", "논리값 TRUE를 반환합니다."), + ("Returns the minute (0-59) of a time.", "시간의 분(0-59)을 반환합니다."), + ("Returns the month (1-12) of a date.", "날짜의 월(1-12)을 반환합니다."), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "큐브 세트의 n번째 구성원을 반환합니다(큐브 연결 없음, #N/A)."), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "오류 값을 식별하는 숫자를 반환하거나, 오류가 아닌 경우 #N/A를 반환합니다.", + ), + ("Returns the number of days between two dates.", "두 날짜 사이의 일수를 반환합니다."), + ("Returns the phonetic (furigana) text; here the text itself.", "발음 표기(후리가나) 텍스트를 반환합니다. 여기서는 텍스트 자체를 반환합니다."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "유연한 일치 및 검색 모드를 사용하여 행이나 열의 값 위치를 반환합니다.", + ), + ("Returns the second (0-59) of a time.", "시간의 초(0-59)를 반환합니다."), + ("Returns the text that comes after a delimiter.", "구분 기호 뒤에 오는 텍스트를 반환합니다."), + ("Returns the text that comes before a delimiter.", "구분 기호 앞에 오는 텍스트를 반환합니다."), + ("Returns the value if it is text, otherwise empty text.", "텍스트인 경우 값을 반환하고, 그렇지 않으면 빈 텍스트를 반환합니다."), + ("Returns the value paired with the first condition that is TRUE.", "TRUE가 되는 첫 번째 조건에 대응하는 값을 반환합니다."), + ("Returns the week number of a date within its year.", "해당 연도 내 날짜의 주 번호를 반환합니다."), + ("Returns the year of a date.", "날짜의 연도를 반환합니다."), + ("Reverses a logical value.", "논리값을 반대로 바꿉니다."), + ("Right-tailed F probability.", "오른쪽 꼬리 F 확률."), + ("Right-tailed Student's t probability.", "스튜던트 t 분포의 오른쪽 꼬리 확률입니다."), + ("Right-tailed chi-squared probability.", "오른쪽 꼬리 카이제곱 확률입니다."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "숫자를 반올림하고 고정 소수점 및 선택적 천 단위 구분 기호를 사용하여 텍스트 형식으로 지정합니다.", + ), + ("Rounds a number away from zero to a given number of digits.", "숫자를 0에서 멀어지는 방향으로 지정된 자릿수까지 올림합니다."), + ("Rounds a number down to a multiple of significance.", "숫자를 지정한 기준 배수로 내림합니다."), + ("Rounds a number down to the nearest integer or multiple.", "숫자를 가장 가까운 정수 또는 배수로 내림합니다."), + ("Rounds a number down to the nearest integer.", "숫자를 가장 가까운 정수로 내림합니다."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "숫자를 지정한 자릿수로 반올림합니다. 정확히 중간인 값은 0에서 멀어지는 방향으로 반올림합니다.", + ), + ("Rounds a number to the nearest multiple.", "숫자를 가장 가까운 배수로 반올림합니다."), + ("Rounds a number toward negative infinity to a multiple.", "숫자를 음의 무한대 방향으로 내려 배수로 만듭니다."), + ("Rounds a number toward positive infinity to a multiple.", "숫자를 양의 무한대 방향으로 올려 배수로 만듭니다."), + ("Rounds a number toward zero to a given number of digits.", "숫자를 0 방향으로 지정된 자릿수까지 버림합니다."), + ("Rounds a number up to a multiple of significance.", "숫자를 지정한 기준 배수로 올림합니다."), + ("Rounds a number up to the nearest integer or multiple.", "숫자를 가장 가까운 정수 또는 배수로 올림합니다."), + ("Rounds away from zero to the nearest even integer.", "0에서 멀어지는 방향으로 가장 가까운 짝수 정수로 올림합니다."), + ("Rounds away from zero to the nearest odd integer.", "0에서 멀어지는 방향으로 가장 가까운 홀수 정수로 올림합니다."), + ("Row number of a reference.", "참조의 행 번호입니다."), + ("Running accumulation of an array.", "배열의 각 단계까지 누적한 결과입니다."), + ("Sample covariance of paired values.", "쌍을 이루는 값의 표본 공분산입니다."), + ("Sample skewness.", "표본 왜도입니다."), + ("Sample standard deviation counting text as 0 and logicals as 1/0.", "텍스트를 0으로, 논리를 1/0으로 계산하는 샘플 표준 편차입니다."), + ("Sample standard deviation of a field over the matching records.", "일치하는 레코드에 대한 필드의 샘플 표준 편차입니다."), + ("Sample standard deviation.", "표본 표준편차."), + ("Sample variance counting text as 0 and logicals as 1/0.", "샘플 분산은 텍스트를 0으로, 논리를 1/0으로 계산합니다."), + ("Sample variance of a field over the matching records.", "일치하는 레코드에 대한 필드의 샘플 분산입니다."), + ("Sample variance.", "표본분산."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "행 또는 열에서 검색하여 다른 배열의 일치하는 항목, 행 또는 열을 반환합니다.", + ), + ("Secant of a complex number.", "복소수의 시컨트입니다."), + ("Secant of an angle in radians.", "각도의 시컨트(라디안 단위)입니다."), + ("Sheet number.", "시트번호."), + ("Shifts the bits of a number left (right for negative shifts).", "숫자의 비트를 왼쪽으로 이동합니다(음수 이동의 경우 오른쪽으로 이동)."), + ("Shifts the bits of a number right (left for negative shifts).", "숫자의 비트를 오른쪽으로 이동합니다(음수 이동의 경우 왼쪽)."), + ("Sine of a complex number.", "복소수의 사인입니다."), + ("Sine of an angle in radians.", "각도의 사인(라디안)입니다."), + ("Slope of the least-squares regression line.", "최소제곱 회귀선의 기울기입니다."), + ("Smallest number (0 when there are none).", "가장 작은 숫자(없으면 0)입니다."), + ("Smallest number in a field of the matching records.", "일치하는 레코드 필드의 가장 작은 숫자입니다."), + ("Smallest success count whose cumulative binomial probability reaches alpha.", "누적 이항 확률이 알파에 도달하는 최소 성공 횟수입니다."), + ("Smallest value among cells that meet every condition.", "모든 조건을 충족하는 스프레드시트 셀 중 가장 작은 값입니다."), + ("Smallest value counting text as 0 and logicals as 1/0.", "텍스트를 0으로, 논리를 1/0으로 계산하는 가장 작은 값입니다."), + ("Sorts an array by the values of other arrays of matching size.", "크기가 일치하는 다른 배열의 값을 기준으로 배열을 정렬합니다."), + ("Sorts the rows (or columns) of an array by one or more of its columns.", "하나 이상의 열을 기준으로 배열의 행(또는 열)을 정렬합니다."), + ("Spells out a number in Thai words with Baht.", "태국어로 숫자를 바트로 표기합니다."), + ("Splits text into a grid of columns and rows at the given delimiters.", "지정된 구분 기호에서 텍스트를 열과 행의 그리드로 분할합니다."), + ("Square of the correlation coefficient.", "상관계수의 제곱입니다."), + ("Square root of a complex number.", "복소수의 제곱근입니다."), + ("Square root of the number times pi.", "숫자와 pi의 곱의 제곱근입니다."), + ("Stacks arrays on top of each other.", "배열을 서로 쌓습니다."), + ("Standard error of predicted y values in a regression.", "회귀에서 예측된 y 값의 표준 오차입니다."), + ("Standard normal cumulative probability.", "표준 정규 누적 확률입니다."), + ("Standard normal density or cumulative probability.", "표준 정규 밀도 또는 누적 확률입니다."), + ("Standard normal density.", "표준정규밀도."), + ("Straight-line depreciation for one period.", "한 기간 동안의 정액법 감가상각입니다."), + ("Student's t density or left-tailed probability.", "스튜던트 t 밀도 또는 왼쪽 꼬리 확률."), + ("Sum of a power series.", "멱급수의 합입니다."), + ("Sum of complex numbers.", "복소수의 합입니다."), + ("Sum of squared deviations from the mean.", "평균으로부터의 편차 제곱의 합입니다."), + ("Sum-of-years'-digits depreciation for a period.", "한 기간의 연수합계법 감가상각액입니다."), + ("Sums the differences of squares of matching elements.", "일치하는 요소의 제곱의 차이를 합산합니다."), + ("Sums the squared differences of matching elements.", "일치하는 요소의 차이 제곱을 합산합니다."), + ("Sums the sums of squares of matching elements.", "일치하는 요소의 제곱합을 더합니다."), + ("Swaps the rows and columns of an array.", "배열의 행과 열을 바꿉니다."), + ("TRUE for references.", "참조이면 TRUE입니다."), + ("TRUE when a LAMBDA argument was left out.", "LAMBDA 인수가 생략되었으면 TRUE입니다."), + ("TRUE when a regular expression matches somewhere in the text.", "정규식이 텍스트의 어딘가와 일치하면 TRUE입니다."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE인 인수의 개수가 홀수이면 TRUE입니다."), + ("TRUE when at least one argument is TRUE.", "하나 이상의 인수가 TRUE인 경우 TRUE입니다."), + ("TRUE when every argument is TRUE.", "모든 인수가 TRUE인 경우 TRUE입니다."), + ("TRUE when the cell has a formula.", "셀에 수식이 있으면 TRUE입니다."), + ("TRUE when the integer part of a number is even.", "숫자의 정수 부분이 짝수이면 TRUE입니다."), + ("TRUE when the integer part of a number is odd.", "숫자의 정수 부분이 홀수이면 TRUE입니다."), + ("TRUE when the value is TRUE or FALSE.", "값이 TRUE 또는 FALSE인 경우 TRUE입니다."), + ("TRUE when the value is a number.", "값이 숫자이면 TRUE입니다."), + ("TRUE when the value is any error other than #N/A.", "값이 #N/A 이외의 오류이면 TRUE입니다."), + ("TRUE when the value is any error.", "값이 오류이면 TRUE입니다."), + ("TRUE when the value is anything other than text.", "값이 텍스트가 아니면 TRUE입니다."), + ("TRUE when the value is text.", "값이 텍스트인 경우 TRUE입니다."), + ("TRUE when the value is the #N/A error.", "값이 #N/A 오류이면 TRUE입니다."), + ("TRUE when the value refers to an empty cell.", "값이 빈 셀을 참조하면 TRUE입니다."), + ("TRUE when two texts are identical, including case.", "두 텍스트가 대소문자까지 같으면 TRUE입니다."), + ("Tangent of a complex number.", "복소수의 탄젠트입니다."), + ("Tangent of an angle in radians.", "각도의 탄젠트(라디안 단위)입니다."), + ("The constant pi to 15 digits.", "15자리 정밀도의 상수 파이입니다."), + ("The formula of a cell as text.", "셀의 수식을 텍스트로 표현한 것입니다."), + ("The gamma function.", "감마 함수."), + ("The k-th largest number in a data set.", "데이터 세트에서 k번째로 큰 숫자입니다."), + ("The k-th smallest number in a data set.", "데이터 세트에서 k번째로 작은 숫자입니다."), + ("The reference named by a text string.", "텍스트 문자열로 명명된 참조입니다."), + ("The sum of a subset as a fraction of the sum of all the values.", "모든 값의 합계에 대한 부분 집합의 합계 비율입니다."), + ("Total interest paid between two periods.", "두 기간 사이에 지급된 총 이자입니다."), + ("Total principal repaid between two periods.", "두 기간 사이에 상환된 총 원금입니다."), + ("Two-tailed Student's t probability.", "스튜던트 t 분포의 양측 확률입니다."), + ("Two-tailed inverse of Student's t distribution.", "스튜던트 t 분포의 양측 역함수입니다."), + ("Two-tailed p-value of an F-test for equality of variances.", "두 분산의 동일성을 검정하는 F 검정의 양측 p값입니다."), + ("Values along a fitted exponential growth curve.", "적합 지수 성장 곡선에 따른 값입니다."), + ("Values along a least-squares linear fit.", "최소 제곱 선형 피팅에 따른 값입니다."), + ("Vertical array of all the most frequent numbers.", "가장 빈번한 모든 숫자의 수직 배열입니다."), + ("Weibull density or probability.", "Weibull 밀도 또는 확률."), + ("Writes a number in another base, padded with zeros.", "숫자를 다른 진수로 표기하고 앞에 0을 채웁니다."), + ("Y-intercept of the least-squares regression line.", "최소제곱 회귀선의 Y 절편입니다."), + ("Yield of a Treasury bill.", "단기 국채의 수익률입니다."), + ("Yield of a security paying periodic interest.", "정기적으로 이자를 지급하는 유가증권의 수익률입니다."), + ("Yield of a security with an odd first period.", "첫 번째 이자 기간이 불규칙한 유가증권의 수익률입니다."), + ("Yield of a security with an odd last period.", "최종 이자 기간이 불규칙한 유가증권의 수익률입니다."), + ("Z-score of a value.", "값의 Z 점수입니다."), + ("e raised to the given power.", "e를 주어진 거듭제곱으로 올린 값입니다."), + ("k-th percentile, k from 0 to 1 inclusive.", "k번째 백분위수, k는 0부터 1까지입니다."), + ("k-th percentile, k strictly between 0 and 1.", "k번째 백분위수, k는 엄격히 0과 1 사이입니다."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "참조_유형"), + ("actual_range", "실제_범위"), + ("aggregation", "집계"), + ("alpha", "알파"), + ("angle", "각도"), + ("area_num", "영역_번호"), + ("argument", "인수"), + ("array", "배열"), + ("array_x", "x_값의_배열"), + ("array_y", "y_값_배열"), + ("average_range", "평균_범위"), + ("base", "밑"), + ("basis", "기준"), + ("beta", "베타"), + ("bins_array", "구간_경계_배열"), + ("bottom", "하한"), + ("by_array", "정렬_키_배열"), + ("by_col", "열_기준"), + ("calc_method", "계산_방법"), + ("calculation", "계산"), + ("caption", "캡션"), + ("case_sensitivity", "대소문자_구분"), + ("coefficients", "계수"), + ("col_delimiter", "열_구분_기호"), + ("col_fields", "열_필드"), + ("col_index_num", "열_인덱스"), + ("col_num", "열_번호"), + ("col_sort_order", "열_정렬_순서"), + ("col_total_depth", "열_합계_깊이"), + ("cols", "열_개수"), + ("column_num", "열_번호"), + ("columns", "열_개수"), + ("confidence_level", "신뢰_수준"), + ("connection", "데이터_연결"), + ("const", "상수"), + ("cost", "초기_비용"), + ("coupon", "표면_이자율"), + ("criteria", "기준"), + ("criteria_range", "기준_범위"), + ("cumulative", "누적_분포"), + ("data_all", "데이터_전부"), + ("data_array", "데이터_배열"), + ("data_completion", "데이터_완성"), + ("data_subset", "데이터_하위_집합"), + ("database", "데이터베이스"), + ("date", "날짜"), + ("date_purchased", "구입일"), + ("date_text", "날짜_텍스트"), + ("dates", "날짜"), + ("day", "일"), + ("days", "일"), + ("decimal_dollar", "소수점_가격"), + ("decimal_separator", "소수_구분_기호"), + ("decimals", "소수점_자리"), + ("default_or_value", "기본값_또는_값"), + ("deg_freedom", "자유도"), + ("delimiter", "구분_기호"), + ("denominator", "분모"), + ("dimension", "차원"), + ("discount", "할인율"), + ("divisor", "제수"), + ("effect_rate", "실효_이율"), + ("end_date", "종료일"), + ("end_period", "마지막_기간"), + ("error_val", "오류_값"), + ("exactly_once", "정확히_한_번만"), + ("expected_range", "기대_범위"), + ("expression", "표현식"), + ("factor", "배율"), + ("field", "데이터베이스_필드"), + ("field_headers", "필드_헤더"), + ("field_relationship", "필드_간_관계"), + ("filter_array", "필터_배열"), + ("finance_rate", "융자이자율"), + ("find_text", "텍스트_찾기"), + ("first_coupon", "첫_쿠폰_지급일"), + ("first_interest", "첫_번째_이자_지급일"), + ("first_period", "첫_기간_종료일"), + ("form", "양식"), + ("format", "형식"), + ("format_text", "형식_텍스트"), + ("fraction", "분모"), + ("fractional_dollar", "분수_가격"), + ("frequency", "쿠폰_지급_빈도"), + ("friendly_name", "친근한_이름"), + ("from_unit", "원본_측정_단위"), + ("full_precision", "전체_정밀도"), + ("function", "함수"), + ("function_num", "함수_번호"), + ("fv", "미래가치"), + ("group_separator", "그룹_구분_기호"), + ("guess", "추정값"), + ("height", "높이"), + ("holidays", "공휴일"), + ("hour", "시"), + ("i_num", "허수계수"), + ("if_empty", "비어_있는_경우"), + ("if_not_found", "찾지_못한_경우"), + ("ignore", "무시"), + ("ignore_empty", "공백_무시"), + ("include", "포함"), + ("index_num", "색인번호"), + ("info_type", "정보형"), + ("initial_value", "초기값"), + ("instance_num", "발생번호"), + ("inumber", "복소수"), + ("investment", "투자"), + ("issue", "발행일"), + ("k", "k"), + ("known_xs", "알려진_x_값"), + ("known_ys", "알려진_y_값"), + ("kpi_name", "핵심_성과_지표_이름"), + ("kpi_property", "핵심_성과_지표_속성"), + ("lambda", "람다"), + ("last_interest", "마지막_이자지급일"), + ("life", "내용연수"), + ("link_location", "링크_위치"), + ("logical", "논리값"), + ("logical_test", "논리적_조건"), + ("lookup_array", "찾을_배열"), + ("lookup_value", "찾을_값"), + ("lookup_vector", "조회_벡터"), + ("lower_limit", "하한"), + ("m", "m"), + ("match_end", "텍스트_끝을_구분_기호로_처리"), + ("match_mode", "일치_모드"), + ("match_type", "매칭_방법"), + ("maturity", "만기일"), + ("max", "최대"), + ("max_range", "최대값_범위"), + ("mean", "산술_평균"), + ("member_expression", "큐브_멤버_표현"), + ("method", "메소드"), + ("min", "최소"), + ("min_length", "최소_길이"), + ("min_range", "최소값_범위"), + ("minute", "분"), + ("mode", "계산_모드"), + ("month", "월"), + ("months", "개월"), + ("multiple", "배수"), + ("n", "n"), + ("name", "이름"), + ("new_text", "새_문자"), + ("new_xs", "새로운_x_값"), + ("no_commas", "숫자_구분_기호_생략"), + ("no_switch", "정액법_전환_안_함"), + ("nominal_rate", "명목금리"), + ("nper", "기간_수"), + ("npery", "연간_기간"), + ("num_bytes", "바이트_수"), + ("num_chars", "문자_수"), + ("num_digits", "자릿수"), + ("number", "숫자"), + ("number_chosen", "선택할_개수"), + ("number_f", "실패_횟수"), + ("number_pop", "모집단_크기"), + ("number_s", "성공횟수"), + ("number_sample", "표본_크기"), + ("number_times", "반복_횟수"), + ("numerator", "분자"), + ("occurrence", "발생"), + ("old_text", "이전_텍스트"), + ("options", "옵션"), + ("order", "순서"), + ("pad_with", "채울_값"), + ("par", "액면가"), + ("parameter", "매개변수"), + ("pattern", "정규식_패턴"), + ("per", "기간"), + ("percent", "퍼센트"), + ("period", "기간"), + ("places", "출력_자리수"), + ("pmt", "정기_납입액"), + ("population_s", "모집단_성공_횟수"), + ("power", "지수"), + ("pr", "가격"), + ("principal", "원금"), + ("prob_range", "확률_범위"), + ("probability", "확률"), + ("probability_s", "성공확률"), + ("property", "속성_이름"), + ("pv", "현재가치"), + ("quart", "사분위수_번호"), + ("radix", "기수"), + ("range", "범위"), + ("range_lookup", "범위_조회"), + ("rank", "순위"), + ("rate", "이율_또는_비율"), + ("real_num", "실수계수"), + ("redemption", "상환액"), + ("ref", "참조"), + ("ref_text", "참조_텍스트"), + ("reference", "참조"), + ("reinvest_rate", "재투자_이자율"), + ("relative_to", "비율_계산_기준"), + ("replacement", "교체"), + ("result", "결과"), + ("result_vector", "결과_벡터"), + ("return_array", "반환_배열"), + ("return_mode", "반환_모드"), + ("return_type", "반환_유형"), + ("row_delimiter", "행_구분_기호"), + ("row_fields", "행_필드"), + ("row_index_num", "행_인덱스"), + ("row_num", "행_번호"), + ("row_sort_order", "행_정렬_순서"), + ("row_total_depth", "행_합계_깊이"), + ("rows", "행_개수"), + ("salvage", "잔존가치"), + ("sample_s", "표본_성공_횟수"), + ("scan_by_column", "열로_스캔"), + ("schedule", "이율_목록"), + ("search_mode", "검색_모드"), + ("seasonality", "계절성"), + ("second", "초"), + ("serial_number", "일련번호"), + ("set", "큐브_멤버_집합"), + ("set_expression", "큐브_구성원_집합_표현식"), + ("settlement", "결제일"), + ("sheet_text", "시트_텍스트"), + ("shift_amount", "비트_이동량"), + ("sigma", "시그마"), + ("significance", "기준_배수_또는_유효_자릿수"), + ("size", "사이즈"), + ("sort_by", "정렬_기준"), + ("sort_index", "정렬_인덱스"), + ("sort_order", "정렬_순서"), + ("source", "원본_통화"), + ("standard_dev", "표준편차"), + ("start", "시작_값"), + ("start_date", "시작일"), + ("start_num", "시작_위치"), + ("start_period", "시작_기간"), + ("statistic_type", "통계_유형"), + ("stats", "통계"), + ("step", "간격_또는_기준값"), + ("suffix", "접미사"), + ("sum_range", "합계_범위"), + ("table_array", "테이블_배열"), + ("tails", "분포_꼬리_수"), + ("target", "대상_통화"), + ("target_date", "목표일"), + ("text", "문자"), + ("time_text", "시간_텍스트"), + ("timeline", "타임라인"), + ("to_unit", "목표_측정_단위"), + ("top", "상한"), + ("total_depth", "합계_깊이"), + ("trials", "시행_횟수"), + ("triangulation_precision", "유로_중간_환산_정밀도"), + ("trim_cols", "열_트리밍_모드"), + ("trim_rows", "행_트리밍_모드"), + ("type", "형"), + ("type_text", "데이터_유형_이름"), + ("unit", "단위"), + ("upper_limit", "상한"), + ("url", "URL"), + ("value", "값"), + ("value_if_error", "오류_발생_시_결과"), + ("value_if_false", "조건이_거짓인_경우_결과"), + ("value_if_na", "사용할_수_없음_오류에_대한_결과"), + ("value_if_true", "조건이_true일_때의_결과"), + ("values", "입력값"), + ("vector", "벡터"), + ("weekend", "주말"), + ("whole_number", "정수"), + ("width", "폭"), + ("within_text", "검색할_텍스트"), + ("wrap_count", "행_또는_열당_값_수"), + ("x", "x"), + ("x_num", "x_좌표"), + ("x_range", "x_범위"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "y_좌표"), + ("year", "년"), + ("yld", "투자수익률"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/lt.rs b/crates/ui-egui/src/i18n/lt.rs new file mode 100644 index 0000000000..d44ce5d762 --- /dev/null +++ b/crates/ui-egui/src/i18n/lt.rs @@ -0,0 +1,1046 @@ +//! Lithuanian interface translations, prepared for @ulrichas with Codex. +//! +//! Original AI-assisted wording from this repository's English source labels. No other +//! product's localisation or terminology database was copied. Native-speaker review pending. +//! Interface only: formula names, separators, workbook contents and proofing stay unchanged. +//! Counts use neutral labels or unit abbreviations because Lithuanian number forms vary. + +pub(super) fn translate(text: &str) -> Option<&'static str> { + Some(match text { + " (password)" => " (slaptažodis)", + " (password, unlocked)" => " (slaptažodis, atrakinta)", + "$ English (United States)" => "$ Anglų (Jungtinės Valstijos)", + "'{file}' is protected." => "„{file}“ apsaugotas.", + "(No suggestions)" => "(Pasiūlymų nėra)", + "(none)" => "(nėra)", + "(unnamed)" => "(be pavadinimo)", + "+ Add Level" => "+ Pridėti lygį", + "100%" => "100 %", + "100% Stacked Bar" => "100 % sudėtinė juostinė", + "100% Stacked Column" => "100 % sudėtinė stulpelinė", + "A CSV file, web page or PDF is a copy: the workbook keeps its own file." => { + "CSV failas, tinklalapis ar PDF yra kopija: darbaknygė išlaiko savo failą." + } + "A to Z" => "Nuo A iki Ž", + "About" => "Apie", + "About\nGridCraft" => "Apie\nGridCraft", + "About GridCraft" => "Apie GridCraft", + "Above Average" => "Virš vidurkio", + "Accessibility" => "Prieinamumas", + "Accounting" => "Apskaitos", + "Accounting Number Format" => "Apskaitos skaičių formatas", + "Action" => "Veiksmas", + "Action\nJournal" => "Veiksmų\nžurnalas", + "Action Journal" => "Veiksmų žurnalas", + "Add" => "Pridėti", + "Add Chart\nElement" => "Pridėti diagramos\nelementą", + "Add Chart Element" => "Pridėti diagramos elementą", + "Add footer" => "Pridėti poraštę", + "Add header" => "Pridėti puslapinę antraštę", + "Add subtotal to (columns, e.g. C,D):" => "Pridėti tarpines sumas (stulpeliai, pvz., C,D):", + "Add to Dictionary" => "Pridėti į žodyną", + "Add-in and Automation" => "Priedai ir automatizavimas", + "Agent\nControl" => "Agentų\nvaldymas", + "Agent Control" => "Agentų valdymas", + "Aggregate duplicates using" => "Sujungti dublikatus naudojant", + "Align Left" => "Lygiuoti kairėje", + "Align Right" => "Lygiuoti dešinėje", + "Alignment" => "Lygiuotė", + "All" => "Visi", + "All Charts" => "Visos diagramos", + "All done. We made {count} replacements." => "Baigta. Pakeitimų skaičius: {count}.", + "All except borders" => "Viskas, išskyrus kraštines", + "Allow" => "Leisti", + "Allow Edit\nRanges" => "Leisti redaguoti\ndiapazonus", + "Allow Edit Ranges" => "Leisti redaguoti diapazonus", + "Allow all users of this sheet to:" => "Visiems šio lakšto naudotojams leisti:", + "Alpha:" => "Alfa:", + "Analysis Tools" => "Analizės įrankiai", + "Angle Clockwise" => "Pasukti pagal laikrodžio rodyklę", + "Angle Counterclockwise" => "Pasukti prieš laikrodžio rodyklę", + "Animations" => "Animacijos", + "Anova: Single Factor" => "Dispersinė analizė: vienas veiksnys", + "Any value" => "Bet kokia reikšmė", + "Area" => "Sritinė", + "At each change in (column letter):" => "Kaskart pasikeitus (stulpelio raidė):", + "Author" => "Autorius", + "Auto" => "Automatiškai", + "AutoFit Column Width" => "Automatiškai pritaikyti stulpelio plotį", + "AutoFit Row Height" => "Automatiškai pritaikyti eilutės aukštį", + "AutoSave" => "Automatinis įrašymas", + "AutoSum" => "Automatinė suma", + "AutoSum (⌘⇧T)" => "Automatinė suma (⌘⇧T)", + "Automate" => "Automatizuoti", + "Automatic" => "Automatiškai", + "Automatic Except for Data Tables" => "Automatiškai, išskyrus duomenų lenteles", + "Average" => "Vidurkis", + "Back" => "Atgal", + "Background Color:" => "Fono spalva:", + "Before sheet (position, 0 = first):" => "Prieš lakštą (pozicija, 0 = pirmas):", + "Below Average" => "Žemiau vidurkio", + "Bin Range (blank for automatic bins):" => "Intervalų diapazonas (tuščias – automatiniai intervalai):", + "Blank workbook" => "Tuščia darbaknygė", + "Blanks" => "Tušti langeliai", + "Bold" => "Pusjuodis", + "Bold (⌘B)" => "Pusjuodis (⌘B)", + "Border" => "Kraštinė", + "Borders" => "Kraštinės", + "Bottom" => "Apačia", + "Bottom\nAlign" => "Lygiuoti\napačioje", + "Bottom 10 Items" => "10 mažiausių reikšmių", + "Bottom 10%" => "Mažiausi 10 %", + "Bottom Align" => "Lygiuoti apačioje", + "Bottom Margin" => "Apatinė paraštė", + "Bottom margin (in):" => "Apatinė paraštė (col.):", + "Breaks" => "Lūžiai", + "Browse…" => "Naršyti…", + "By Changing Variable Cells:" => "Keičiami kintamųjų langeliai:", + "By changing cell:" => "Keičiant langelį:", + "CSV (Comma delimited)" => "CSV (atskirta kableliais)", + "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (atskirta kableliais) (*.csv)", + "Calculate" => "Skaičiuoti", + "Calculate Now" => "Perskaičiuoti dabar", + "Calculate Now (F9)" => "Perskaičiuoti dabar (F9)", + "Calculate Sheet" => "Perskaičiuoti lakštą", + "Calculate Sheet (⇧F9)" => "Perskaičiuoti lakštą (⇧F9)", + "Calculated Field…" => "Skaičiuojamasis laukas…", + "Calculation\nOptions" => "Skaičiavimo\nparinktys", + "Calculation Options" => "Skaičiavimo parinktys", + "Calculation settings are saved with the workbook." => "Skaičiavimo nuostatos įrašomos kartu su darbaknyge.", + "Cancel" => "Atsisakyti", + "Category:" => "Kategorija:", + "Cell\nStyles" => "Langelių\nstiliai", + "Cell Color" => "Langelio spalva", + "Cell Styles" => "Langelių stiliai", + "Cell Values" => "Langelių reikšmės", + "Center" => "Centras", + "Center Across Selection" => "Centruoti per pažymėtą sritį", + "Change" => "Keisti", + "Change\nChart Type" => "Keisti\ndiagramos tipą", + "Change All" => "Keisti visus", + "Change Chart Type" => "Keisti diagramos tipą", + "Change File Type" => "Keisti failo tipą", + "Chart" => "Diagrama", + "Diagram" => "Schema", + "Decorative Text" => "Dekoratyvus tekstas", + "Chart\nTitle" => "Diagramos\npavadinimas", + "Chart Design" => "Diagramos dizainas", + "Chart Title" => "Diagramos pavadinimas", + "Chart data range:" => "Diagramos duomenų diapazonas:", + "Check\nAccessibility" => "Tikrinti\nprieinamumą", + "Check Accessibility" => "Tikrinti prieinamumą", + "Checkbox" => "Žymimasis langelis", + "Choose a PNG or JPEG no larger than 16 MB." => "Pasirinkite ne didesnį kaip 16 MB PNG arba JPEG failą.", + "Choose fields to add to report:" => "Pasirinkite ataskaitos laukus:", + "Circle Invalid Data" => "Apvesti netinkamus duomenis", + "Clear" => "Valyti", + "Clear All" => "Išvalyti viską", + "Clear Comments and Notes" => "Valyti komentarus ir pastabas", + "Clear Contents" => "Valyti turinį", + "Clear Filter" => "Valyti filtrą", + "Clear Formats" => "Valyti formatus", + "Clear Hyperlinks" => "Valyti hipersaitus", + "Clear Print Area" => "Valyti spausdinimo sritį", + "Clear Rules from Entire Sheet" => "Valyti viso lakšto taisykles", + "Clear Rules from Selected Cells" => "Valyti pažymėtų langelių taisykles", + "Clear Validation" => "Valyti tikrinimą", + "Click to add data" => "Spustelėkite duomenims pridėti", + "Close" => "Užverti", + "Clustered Bar" => "Sugrupuota juostinė", + "Clustered Column" => "Sugrupuota stulpelinė", + "Color Scales" => "Spalvų skalės", + "Color:" => "Spalva:", + "Column Width" => "Stulpelio plotis", + "Column Width…" => "Stulpelio plotis…", + "Column chart" => "Stulpelinė diagrama", + "Column or Bar" => "Stulpelinė arba juostinė", + "Column width (characters):" => "Stulpelio plotis (rašmenimis):", + "Column widths" => "Stulpelių pločiai", + "Columns" => "Stulpeliai", + "Columns (blank = all, e.g. A,C):" => "Stulpeliai (tuščias – visi, pvz., A,C):", + "Combo" => "Mišri", + "Comma" => "Tūkstančių skirtuko stilius", + "Comma Style" => "Tūkstančių skirtuko stilius", + "Command\nPalette" => "Komandų\npaletė", + "Comment" => "Komentaras", + "Comment:" => "Komentaras:", + "Comments" => "Komentarai", + "Comments and notes (C)" => "Komentarai ir pastabos (C)", + "Comments pane" => "Komentarų sritis", + "Compact" => "Glaustas", + "Company" => "Įmonė", + "Compatibility" => "Suderinamumas", + "Conditional\nFormatting" => "Sąlyginis\nformatavimas", + "Conditional Formatting" => "Sąlyginis formatavimas", + "Conditional Formatting Rules Manager" => "Sąlyginio formatavimo taisyklių tvarkytuvė", + "Conditional formats" => "Sąlyginiai formatai", + "Confidence Level (%):" => "Pasikliovimo lygmuo (%):", + "Confidence Level for Mean (%), blank for none:" => "Vidurkio pasikliovimo lygmuo (%, tuščias – nenaudoti):", + "Confidence interval" => "Pasikliautinasis intervalas", + "Confidence level (%):" => "Pasikliovimo lygmuo (%):", + "Constant is Zero" => "Konstanta lygi nuliui", + "Constants" => "Konstantos", + "Contributors" => "Prisidėjusieji", + "Convert\nto Range" => "Konvertuoti\nį diapazoną", + "Convert Text to Columns" => "Skaidyti tekstą į stulpelius", + "Convert the last ink stroke to a shape" => "Paskutinį rankraščio brūkšnį keisti figūra", + "Convert to Comments" => "Konvertuoti į komentarus", + "Convert to Range" => "Konvertuoti į diapazoną", + "Copy" => "Kopijuoti", + "Copy (⌘C)" => "Kopijuoti (⌘C)", + "Correlation" => "Koreliacija", + "Count" => "Skaičius", + "CountA" => "Netuščių langelių skaičius", + "Covariance" => "Kovariacija", + "Create Forecast Worksheet" => "Kurti prognozės lakštą", + "Create PDF" => "Kurti PDF", + "Create Sparklines" => "Kurti miniatiūrines diagramas", + "Create a copy" => "Kurti kopiją", + "Create from Selection" => "Kurti iš pažymėtos srities", + "Cube" => "Kubas", + "Cumulative Percentage" => "Sukauptasis procentas", + "Currency" => "Valiuta", + "Current\nDate" => "Dabartinė\ndata", + "Current\nTime" => "Dabartinis\nlaikas", + "Current Date" => "Dabartinė data", + "Current Time" => "Dabartinis laikas", + "Current region" => "Dabartinė sritis", + "Custom" => "Pasirinktinis", + "Custom (%):" => "Pasirinktinis (%):", + "Custom Margins…" => "Pasirinktinės paraštės…", + "Custom Sort" => "Pasirinktinis rikiavimas", + "Custom Sort…" => "Pasirinktinis rikiavimas…", + "Cut" => "Iškirpti", + "Cut (⌘X)" => "Iškirpti (⌘X)", + "Damping factor:" => "Slopinimo koeficientas:", + "Dark" => "Tamsus", + "Dark Mode" => "Tamsusis režimas", + "Data" => "Duomenys", + "Data\nAnalysis" => "Duomenų\nanalizė", + "Data\nValidation" => "Duomenų\ntikrinimas", + "Data Analysis" => "Duomenų analizė", + "Data Bars" => "Duomenų juostos", + "Data Labels: None" => "Duomenų etiketės: nerodyti", + "Data Labels: Show" => "Duomenų etiketės: rodyti", + "Data Range:" => "Duomenų diapazonas:", + "Data Table…" => "Duomenų lentelė…", + "Data Validation" => "Duomenų tikrinimas", + "Data Validation…" => "Duomenų tikrinimas…", + "Data validation" => "Duomenų tikrinimas", + "Database" => "Duomenų bazė", + "Date" => "Data", + "Date &\nTime" => "Data ir\nlaikas", + "Date & Time" => "Data ir laikas", + "Date unit" => "Datos vienetas", + "Day" => "Diena", + "Decimal" => "Dešimtainis", + "Decrease Decimal" => "Mažinti dešimtainių skilčių skaičių", + "Decrease Font Size" => "Mažinti šriftą", + "Decrease Indent" => "Mažinti įtrauką", + "Default Width…" => "Numatytasis plotis…", + "Define Name" => "Apibrėžti pavadinimą", + "Define Name…" => "Apibrėžti pavadinimą…", + "Delete" => "Naikinti", + "Delete\nChart" => "Naikinti\ndiagramą", + "Delete Cells…" => "Naikinti langelius…", + "Delete Comment" => "Naikinti komentarą", + "Delete Sheet" => "Naikinti lakštą", + "Delete Sheet Columns" => "Naikinti lakšto stulpelius", + "Delete Sheet Rows" => "Naikinti lakšto eilutes", + "Delete chart" => "Naikinti diagramą", + "Delete rows" => "Naikinti eilutes", + "Delete…" => "Naikinti…", + "Description" => "Aprašas", + "Description (optional):" => "Aprašas (nebūtina):", + "Descriptive Statistics" => "Aprašomoji statistika", + "Destination:" => "Paskirtis:", + "Diagonal ↗" => "Įstrižainė ↗", + "Diagonal ↘" => "Įstrižainė ↘", + "Different First Page" => "Kitoks pirmasis puslapis", + "Different Odd & Even Pages" => "Skirtingi lyginiai ir nelyginiai puslapiai", + "Dismiss" => "Užverti", + "Display theme" => "Rodymo tema", + "Display:" => "Rodymas:", + "Distributed" => "Tolygiai paskirstyta", + "Divide" => "Dalyti", + "Do you want to save the changes you made to {title}?" => "Ar įrašyti darbaknygės „{title}“ pakeitimus?", + "Don't Save" => "Neįrašyti", + "Double" => "Dvigubas", + "Double Accounting" => "Dvigubas apskaitos pabraukimas", + "Double Underline" => "Dvigubas pabraukimas", + "Doughnut" => "Žiedinė", + "Down" => "Žemyn", + "Download" => "Atsisiųsti", + "Drag to freeze columns" => "Vilkite stulpeliams užfiksuoti", + "Drag to freeze rows" => "Vilkite eilutėms užfiksuoti", + "Draw" => "Piešti", + "Draw with ink" => "Piešti ranka", + "Edit" => "Redaguoti", + "Edit Name" => "Redaguoti pavadinimą", + "Edit chart title" => "Redaguoti diagramos pavadinimą", + "Edit…" => "Redaguoti…", + "Enable AutoComplete for cell values" => "Įjungti automatinį langelių reikšmių užbaigimą", + "Enable iterative calculation" => "Įjungti iteracinį skaičiavimą", + "Engineering" => "Inžinerinės", + "Enter" => "Įvesti", + "Entire column" => "Visas stulpelis", + "Entire row" => "Visa eilutė", + "Erase ink strokes" => "Trinti rankraščio brūkšnius", + "Eraser" => "Trintukas", + "Error Checking" => "Klaidų tikrinimas", + "Error message:" => "Klaidos pranešimas:", + "Error style" => "Klaidos stilius", + "Errors" => "Klaidos", + "Evaluate Formula" => "Įvertinti formulę", + "Every command run in this session (replayable)" => "Visos šios sesijos komandos (galima atkurti)", + "Excel Workbook (*.xlsx)" => "Excel darbaknygė (*.xlsx)", + "Expand formula bar" => "Išskleisti formulės juostą", + "Exponential Smoothing" => "Eksponentinis glodinimas", + "Export" => "Eksportuoti", + "F-Test Two-Sample for Variances" => "Dviejų imčių dispersijų F kriterijus", + "File" => "Failas", + "File\nName" => "Failo\npavadinimas", + "File\nPath" => "Failo\nkelias", + "File Name" => "Failo pavadinimas", + "File Path" => "Failo kelias", + "Fill" => "Užpildas", + "Fill Color" => "Užpildo spalva", + "Fill missing points using" => "Trūkstamus taškus užpildyti naudojant", + "Filter" => "Filtras", + "Filter (⌘⇧F)" => "Filtras (⌘⇧F)", + "Filter by Selected Cell's Value" => "Filtruoti pagal pažymėto langelio reikšmę", + "Filters" => "Filtrai", + "Financial" => "Finansinės", + "Find" => "Rasti", + "Find &\nSelect" => "Rasti ir\npažymėti", + "Find & Select" => "Rasti ir pažymėti", + "Find All" => "Rasti visus", + "Find Next" => "Rasti kitą", + "Find and Replace" => "Rasti ir pakeisti", + "Find what:" => "Ko ieškoti:", + "Find…" => "Rasti…", + "Fit Sheet on One Page" => "Sutalpinti lakštą viename puslapyje", + "Fits inside the selected cell and moves with its content." => "Telpa pažymėtame langelyje ir juda kartu su jo turiniu.", + "Flash\nFill" => "Spartusis\nužpildymas", + "Flash Fill" => "Spartusis užpildymas", + "Flash Fill (⌘E)" => "Spartusis užpildymas (⌘E)", + "Font" => "Šriftas", + "Font Color" => "Šrifto spalva", + "Footer" => "Poraštė", + "Footer (in):" => "Poraštė (col.):", + "Footer Margin" => "Poraštės paraštė", + "Footer:" => "Poraštė:", + "Forecast\nSheet" => "Prognozės\nlakštas", + "Forecast Sheet" => "Prognozės lakštas", + "Forecast end (date or number; blank: a third of the history):" => "Prognozės pabaiga (data arba skaičius; tuščias – trečdalis istorijos):", + "Format" => "Formatas", + "Format\nPane" => "Formatavimo\nsritis", + "Format\nas Table" => "Formatuoti\nkaip lentelę", + "Format Cell Alignment…" => "Formatuoti langelių lygiuotę…", + "Format Cells" => "Formatuoti langelius", + "Format Cells|Fill" => "Langelio fonas", + "Format Cells…" => "Formatuoti langelius…", + "Format Chart pane" => "Diagramos formatavimo sritis", + "Format Painter (double-click to keep it on)" => "Formato kopijavimas (dukart spustelėkite, kad liktų įjungtas)", + "Format as Table" => "Formatuoti kaip lentelę", + "Format cells" => "Formatuoti langelius", + "Format cells that are (value):" => "Formatuoti langelius, kurių reikšmė:", + "Format cells that contain a date occurring:" => "Formatuoti langelius, kuriuose data yra:", + "Format cells that contain the text:" => "Formatuoti langelius su tekstu:", + "Format columns" => "Formatuoti stulpelius", + "Format rows" => "Formatuoti eilutes", + "Format values where this formula is true:" => "Formatuoti reikšmes, kai ši formulė teisinga:", + "Formats (T)" => "Formatai (T)", + "Formula Bar" => "Formulės juosta", + "Formula Builder" => "Formulių kūrimo įrankis", + "Formula:" => "Formulė:", + "Formulas" => "Formulės", + "Formulas (F)" => "Formulės (F)", + "Formulas and number formats" => "Formulės ir skaičių formatai", + "Fraction" => "Trupmena", + "Freeze\nPanes" => "Fiksuoti\nsritis", + "Freeze First Column" => "Fiksuoti pirmą stulpelį", + "Freeze Panes" => "Fiksuoti sritis", + "Freeze Top Row" => "Fiksuoti viršutinę eilutę", + "Funnel" => "Piltuvinė", + "GRG Nonlinear" => "GRG netiesinis metodas", + "General" => "Bendrasis", + "Get Data\n(Text/CSV)" => "Gauti duomenis\n(tekstas / CSV)", + "Glide the selection outline to the cell you move to instead of jumping there" => { + "Tolygiai perkelti pažymėjimo rėmelį į pasirinktą langelį, užuot peršokus" + } + "Go To" => "Eiti į", + "Go To Special" => "Specialusis perėjimas", + "Go To Special…" => "Specialusis perėjimas…", + "Go To…" => "Eiti į…", + "Go to\nFooter" => "Eiti į\nporaštę", + "Go to\nHeader" => "Eiti į\npuslapinę antraštę", + "Go to Footer" => "Eiti į poraštę", + "Go to Header" => "Eiti į puslapinę antraštę", + "Goal Seek" => "Tikslo siekimas", + "Goal Seeking found a solution: {value}" => "Tikslo siekimas rado sprendinį: {value}", + "Goal Seek…" => "Tikslo siekimas…", + "Gradebook" => "Pažymių žurnalas", + "Green Fill with Dark Green Text" => "Žalias užpildas su tamsiai žaliu tekstu", + "Gridlines" => "Tinklelio linijos", + "Gridlines: None" => "Tinklelio linijos: nerodyti", + "Gridlines: Show" => "Tinklelio linijos: rodyti", + "Group" => "Grupuoti", + "Group by Months" => "Grupuoti pagal mėnesius", + "Group by Quarters" => "Grupuoti pagal ketvirčius", + "Group by Years" => "Grupuoti pagal metus", + "Grouped By:" => "Grupuoti pagal:", + "Growth" => "Augimas", + "Header" => "Puslapinė antraštė", + "Header &\nFooter" => "Puslapinė antraštė\nir poraštė", + "Header & Footer" => "Puslapinė antraštė ir poraštė", + "Header (in):" => "Puslapinė antraštė (col.):", + "Header Margin" => "Puslapinės antraštės paraštė", + "Headings" => "Antraštės", + "Hidden" => "Paslėptas", + "Hidden: {sheets}" => "Paslėpti lakštai: {sheets}", + "Hide" => "Slėpti", + "Hide Columns" => "Slėpti stulpelius", + "Hide Detail" => "Slėpti išsamią informaciją", + "Hide Rows" => "Slėpti eilutes", + "Hide Sheet" => "Slėpti lakštą", + "Hierarchy & more" => "Hierarchija ir kitos", + "Highlighter" => "Žymeklis", + "Histogram" => "Histograma", + "Home" => "Pradžia", + "Horizontal" => "Horizontalus", + "Horizontal (Category) Axis Labels:" => "Horizontaliosios (kategorijų) ašies etiketės:", + "Horizontal axis title:" => "Horizontaliosios ašies pavadinimas:", + "Household Budget" => "Namų ūkio biudžetas", + "How agents drive GridCraft (MCP / control channel)" => "Kaip agentai valdo GridCraft (MCP / valdymo kanalas)", + "Hypothesized Mean Difference:" => "Hipotetinis vidurkių skirtumas:", + "Icon Sets" => "Piktogramų rinkiniai", + "Icons" => "Piktogramos", + "Ignore Once" => "Praleisti šį kartą", + "Ignore blank" => "Nepaisyti tuščių langelių", + "Import a text or CSV file" => "Importuoti tekstinį arba CSV failą", + "In the last 7 days" => "Per paskutines 7 dienas", + "In-cell dropdown" => "Išskleidžiamasis sąrašas langelyje", + "Include forecast statistics" => "Įtraukti prognozės statistiką", + "Increase Decimal" => "Didinti dešimtainių skilčių skaičių", + "Increase Font Size" => "Didinti šriftą", + "Increase Indent" => "Didinti įtrauką", + "Indent" => "Įtrauka", + "Info" => "Informacija", + "Information" => "Informacija", + "Ink to\nShape" => "Rankraštį keisti\nfigūra", + "Input Range:" => "Įvesties diapazonas:", + "Input X Range:" => "X įvesties diapazonas:", + "Input Y Range:" => "Y įvesties diapazonas:", + "Input message:" => "Įvesties pranešimas:", + "Insert" => "Įterpti", + "Header Menu|Insert" => "Įterpti", + "Insert\nFunction" => "Įterpti\nfunkciją", + "Insert\nSlicer" => "Įterpti\nduomenų filtrą", + "Insert Calculated Field" => "Įterpti skaičiuojamąjį lauką", + "Insert Cells…" => "Įterpti langelius…", + "Insert Chart" => "Įterpti diagramą", + "Insert Copied Cells" => "Įterpti nukopijuotus langelius", + "Insert Copied Cells…" => "Įterpti nukopijuotus langelius…", + "Insert Cut Cells" => "Įterpti iškirptus langelius", + "Insert Function" => "Įterpti funkciją", + "Insert Function (⇧F3)" => "Įterpti funkciją (⇧F3)", + "Insert Hyperlink" => "Įterpti hipersaitą", + "Insert Link (⌘K)" => "Įterpti saitą (⌘K)", + "Insert Page Break" => "Įterpti puslapio lūžį", + "Insert Paste" => "Įterpti įklijuojant", + "Insert Sheet" => "Įterpti lakštą", + "Insert Sheet Columns" => "Įterpti lakšto stulpelius", + "Insert Sheet Rows" => "Įterpti lakšto eilutes", + "Insert Slicer" => "Įterpti duomenų filtrą", + "Insert a picture" => "Įterpti paveikslą", + "Insert a slicer to filter a table" => "Įterpti duomenų filtrą lentelei filtruoti", + "Insert an icon" => "Įterpti piktogramą", + "Insert checkboxes in the selected cells" => "Įterpti žymimuosius langelius į pažymėtus langelius", + "Insert rows" => "Įterpti eilutes", + "Insert…" => "Įterpti…", + "Interface language" => "Sąsajos kalba", + "Interface size" => "Sąsajos dydis", + "Interpolation" => "Interpoliacija", + "Interval:" => "Intervalas:", + "Italic" => "Kursyvas", + "Italic (⌘I)" => "Kursyvas (⌘I)", + "Join the ArtCraft Discord" => "Prisijunkite prie ArtCraft Discord", + "Just now" => "Ką tik", + "Justify" => "Lygiuoti abipus", + "Keep" => "Palikti", + "Keep Solver Solution" => "Palikti optimizavimo sprendinį", + "Keywords" => "Raktažodžiai", + "Kth Largest (blank for none):" => "K-oji didžiausia reikšmė (tuščias – nenaudoti):", + "Kth Smallest (blank for none):" => "K-oji mažiausia reikšmė (tuščias – nenaudoti):", + "Labels in first row" => "Etiketės pirmoje eilutėje", + "Landscape" => "Gulsčias", + "Last cell" => "Paskutinis langelis", + "Last month" => "Praėjusį mėnesį", + "Last week" => "Praėjusią savaitę", + "Left" => "Kairė", + "Left Margin" => "Kairioji paraštė", + "Left margin (in):" => "Kairioji paraštė (col.):", + "Legend Entries (Series)" => "Legendos įrašai (sekos)", + "Legend: Bottom" => "Legenda: apačioje", + "Legend: None" => "Legenda: nerodyti", + "Legend: Right" => "Legenda: dešinėje", + "Legend: Top" => "Legenda: viršuje", + "Light" => "Šviesus", + "Light Red Fill" => "Šviesiai raudonas užpildas", + "Light Red Fill with Dark Red Text" => "Šviesiai raudonas užpildas su tamsiai raudonu tekstu", + "Line" => "Linija", + "Line chart" => "Linijinė diagrama", + "Line or Area" => "Linijinė arba sritinė", + "Line with Markers" => "Linijinė su žymekliais", + "Linear" => "Tiesinis", + "Link" => "Saitas", + "Link to (web address, e-mail or Sheet!A1):" => "Saitas į (žiniatinklio adresas, el. paštas arba Sheet!A1):", + "Link…" => "Saitas…", + "List" => "Sąrašas", + "Location" => "Vieta", + "Location Range:" => "Vietos diapazonas:", + "Lock Cell" => "Užrakinti langelį", + "Lock the sheet structure so sheets can't be added, moved, renamed or deleted." => { + "Užrakinti lakštų struktūrą, kad jų nebūtų galima pridėti, perkelti, pervadinti ar naikinti." + } + "Locked" => "Užrakintas", + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet)." => { + "Langelių užrakinimas ar formulių slėpimas neveikia, kol neapsaugotas lakštas (Recenzavimas › Apsaugoti lakštą)." + } + "Logical" => "Loginės", + "Long Date" => "Ilgasis datos formatas", + "Lookup &\nReference" => "Paieška ir\nnuorodos", + "Lookup & Reference" => "Paieška ir nuorodos", + "Macros" => "Makrokomandos", + "Macros and scripts in this workbook (Alt+F8)" => "Šios darbaknygės makrokomandos ir scenarijai (Alt+F8)", + "Magnification" => "Didinimas", + "Make Unconstrained Variables Non-Negative" => "Neapribotus kintamuosius laikyti neneigiamais", + "Manual" => "Rankiniu būdu", + "Margins" => "Paraštės", + "Markers" => "Žymekliai", + "Match case" => "Skirti didžiąsias ir mažąsias raides", + "Match entire cell contents" => "Atitikti visą langelio turinį", + "Math &\nTrig" => "Matematika ir\ntrigonometrija", + "Math & Trig" => "Matematika ir trigonometrija", + "Max" => "Maksimumas", + "Maximum:" => "Didžiausia reikšmė:", + "Median" => "Mediana", + "Merge & Center" => "Sulieti ir centruoti", + "Merge Across" => "Sulieti pagal eilutes", + "Merge Cells" => "Sulieti langelius", + "Middle\nAlign" => "Lygiuoti\nviduryje", + "Middle Align" => "Lygiuoti viduryje", + "Min" => "Minimumas", + "Minimum / Source / Formula:" => "Mažiausia reikšmė / šaltinis / formulė:", + "Models" => "Modeliai", + "Modified" => "Keista", + "Modify" => "Keisti", + "Month" => "Mėnuo", + "More\nFunctions" => "Daugiau\nfunkcijų", + "More Accounting Formats…" => "Daugiau apskaitos formatų…", + "More Number Formats…" => "Daugiau skaičių formatų…", + "More commands" => "Daugiau komandų", + "More workbooks" => "Daugiau darbaknygių", + "Move or Copy" => "Perkelti arba kopijuoti", + "Move or Copy Sheet…" => "Perkelti arba kopijuoti lakštą…", + "Move to Column Labels" => "Perkelti į stulpelių etiketes", + "Move to Report Filter" => "Perkelti į ataskaitos filtrą", + "Move to Row Labels" => "Perkelti į eilučių etiketes", + "Move to Values" => "Perkelti į reikšmes", + "Moving Average" => "Slenkamasis vidurkis", + "Multiply" => "Dauginti", + "My data has headers" => "Duomenys turi antraštes", + "My list has headers" => "Sąrašas turi antraštes", + "Name" => "Pavadinimas", + "Name\nManager" => "Pavadinimų\ntvarkytuvė", + "Name Manager" => "Pavadinimų tvarkytuvė", + "Name:" => "Pavadinimas:", + "Narrow" => "Siauros", + "New" => "Naujas", + "New\nComment" => "Naujas\nkomentaras", + "New Comment" => "Naujas komentaras", + "New Name" => "Naujas pavadinimas", + "New Note" => "Nauja pastaba", + "New Worksheet Ply:" => "Naujo lakšto pavadinimas:", + "New sheet (⇧F11)" => "Naujas lakštas (⇧F11)", + "New title (Modify):" => "Naujas pavadinimas (keisti):", + "New…" => "Naujas…", + "Next" => "Kitas", + "Next Comment" => "Kitas komentaras", + "Next month" => "Kitą mėnesį", + "Next page" => "Kitas puslapis", + "Next sheet" => "Kitas lakštas", + "Next week" => "Kitą savaitę", + "No Color" => "Be spalvos", + "No names defined" => "Nėra apibrėžtų pavadinimų", + "No picture selected" => "Nepažymėtas paveikslas", + "No ranges yet." => "Diapazonų dar nėra.", + "No recent workbooks yet." => "Naujausių darbaknygių dar nėra.", + "No workbook is open." => "Nėra atidarytos darbaknygės.", + "None" => "Nėra", + "Normal" => "Įprastas", + "Normal Probability" => "Normaliojo skirstinio tikimybė", + "Not available" => "Neprieinama", + "Not in Dictionary ({cell}):" => "Nėra žodyne ({cell}):", + "Not saved yet" => "Dar neįrašyta", + "Note:" => "Pastaba:", + "Notes" => "Pastabos", + "Nothing to print." => "Nėra ką spausdinti.", + "Number" => "Skaičius", + "Number\nof Pages" => "Puslapių\nskaičius", + "Number of Pages" => "Puslapių skaičius", + "Numbers" => "Skaičiai", + "OK" => "Gerai", + "Open" => "Atidaryti", + "Open…" => "Atidaryti…", + "Operation" => "Veiksmas", + "Options" => "Parinktys", + "Options|General" => "Bendrosios", + "Options|Save" => "Įrašymas", + "Orientation" => "Teksto kryptis", + "Orientation (degrees)" => "Pasukimas (laipsniais)", + "Other:" => "Kita:", + "Outline" => "Struktūra", + "Output Range:" => "Išvesties diapazonas:", + "Output options" => "Išvesties parinktys", + "PDF (*.pdf)" => "PDF (*.pdf)", + "Page\nLayout" => "Puslapio\nmaketas", + "Page\nNumber" => "Puslapio\nnumeris", + "Page Break\nPreview" => "Puslapių lūžių\nperžiūra", + "Page Breaks" => "Puslapių lūžiai", + "Page Layout" => "Puslapio maketas", + "Page Layout|Orientation" => "Puslapio padėtis", + "Page Number" => "Puslapio numeris", + "Page Setup" => "Puslapio nuostatos", + "Page Setup…" => "Puslapio nuostatos…", + "Page {page} of {pages}" => "Puslapis {page} iš {pages}", + "Paper Size" => "Popieriaus dydis", + "Pareto (sorted histogram)" => "Pareto diagrama (surikiuota histograma)", + "Password" => "Slaptažodis", + "Password (optional):" => "Slaptažodis (nebūtina):", + "Password:" => "Slaptažodis:", + "Paste" => "Įklijuoti", + "Paste (⌘V)" => "Įklijuoti (⌘V)", + "Paste Formatting" => "Įklijuoti formatavimą", + "Paste Formulas" => "Įklijuoti formules", + "Paste Link" => "Įklijuoti saitą", + "Paste Special" => "Specialusis įklijavimas", + "Paste Special…" => "Specialusis įklijavimas…", + "Paste Values" => "Įklijuoti reikšmes", + "Pen\nBlack" => "Juodas\nrašiklis", + "Pen\nBlue" => "Mėlynas\nrašiklis", + "Pen\nRed" => "Raudonas\nrašiklis", + "Percent Style" => "Procentų stilius", + "Percentage" => "Procentai", + "Pick From Drop-down List…" => "Pasirinkti iš išskleidžiamojo sąrašo…", + "Pick From List" => "Pasirinkti iš sąrašo", + "Picture file path (PNG or JPEG):" => "Paveikslo failo kelias (PNG arba JPEG):", + "Pictures" => "Paveikslai", + "Pie" => "Skritulinė", + "Pie or Doughnut" => "Skritulinė arba žiedinė", + "PivotTable" => "Suvestinė lentelė", + "PivotTable Fields" => "Suvestinės lentelės laukai", + "Place Picture in Cell" => "Įdėti paveikslą į langelį", + "Place Picture over Cells" => "Įdėti paveikslą virš langelių", + "Point" => "Taškas", + "Portrait" => "Stačias", + "Previous" => "Ankstesnis", + "Previous Comment" => "Ankstesnis komentaras", + "Previous page" => "Ankstesnis puslapis", + "Previous sheet" => "Ankstesnis lakštas", + "Print" => "Spausdinti", + "Print\nArea" => "Spausdinimo\nsritis", + "Print\nTitles" => "Spausdinimo\nantraštės", + "Print Active Sheets" => "Spausdinti aktyvius lakštus", + "Print Area" => "Spausdinimo sritis", + "Print Entire Workbook" => "Spausdinti visą darbaknygę", + "Print Titles" => "Spausdinimo antraštės", + "Product" => "Sandauga", + "Properties" => "Ypatybės", + "Protect\nSheet" => "Apsaugoti\nlakštą", + "Protect\nWorkbook" => "Apsaugoti\ndarbaknygę", + "Protect Sheet" => "Apsaugoti lakštą", + "Protect Sheet…" => "Apsaugoti lakštą…", + "Protect Structure and Windows" => "Apsaugoti struktūrą ir langus", + "Protect Workbook" => "Apsaugoti darbaknygę", + "Protect Workbook structure" => "Apsaugoti darbaknygės struktūrą", + "Protection" => "Apsauga", + "Quarterly Sales Dashboard" => "Ketvirčio pardavimo skydelis", + "Radar" => "Spindulinė", + "Range password:" => "Diapazono slaptažodis:", + "Ranges that stay editable when the sheet is protected:" => "Diapazonai, kuriuos galima redaguoti apsaugotame lakšte:", + "Rank and Percentile" => "Rangas ir procentilis", + "Ready" => "Parengta", + "Reapply" => "Taikyti iš naujo", + "Recent" => "Naujausi", + "Recommended\nCharts" => "Rekomenduojamos\ndiagramos", + "Recommended Charts" => "Rekomenduojamos diagramos", + "Red Border" => "Raudona kraštinė", + "Red Text" => "Raudonas tekstas", + "Redo (⌘Y)" => "Grąžinti (⌘Y)", + "Reference:" => "Nuoroda:", + "Refers To" => "Nurodo", + "Refers to cells:" => "Nurodo langelius:", + "Refers to:" => "Nurodo:", + "Refresh" => "Atnaujinti", + "Regression" => "Regresija", + "Remove" => "Pašalinti", + "Remove\nDuplicates" => "Šalinti\ndublikatus", + "Remove Arrows" => "Šalinti rodykles", + "Remove Duplicates" => "Šalinti dublikatus", + "Remove Field" => "Šalinti lauką", + "Remove Page Break" => "Šalinti puslapio lūžį", + "Remove the password (Modify)" => "Pašalinti slaptažodį (keisti)", + "Rename Sheet" => "Pervadinti lakštą", + "Replace" => "Pakeisti", + "Replace All" => "Pakeisti visus", + "Replace with:" => "Kuo pakeisti:", + "Replace…" => "Pakeisti…", + "Report Layout" => "Ataskaitos maketas", + "Reset All Page Breaks" => "Atkurti visus puslapių lūžius", + "Residuals" => "Liekanos", + "Restore Original Values" => "Atkurti pradines reikšmes", + "Review" => "Recenzavimas", + "Right" => "Dešinė", + "Right Margin" => "Dešinioji paraštė", + "Right margin (in):" => "Dešinioji paraštė (col.):", + "Rotate Text Down" => "Pasukti tekstą žemyn", + "Rotate Text Up" => "Pasukti tekstą aukštyn", + "Row Height" => "Eilutės aukštis", + "Row Height…" => "Eilutės aukštis…", + "Row height (pixels):" => "Eilutės aukštis (pikseliais):", + "Rows" => "Eilutės", + "Ruler" => "Liniuotė", + "Sample" => "Pavyzdys", + "Save" => "Įrašyti", + "Save (⌘S)" => "Įrašyti (⌘S)", + "Save .xlsx workbooks automatically after every change" => "Automatiškai įrašyti .xlsx darbaknyges po kiekvieno pakeitimo", + "Save As" => "Įrašyti kaip", + "Save Changes?" => "Įrašyti pakeitimus?", + "Save a Copy" => "Įrašyti kopiją", + "Save a copy as .{format}" => "Įrašyti kopiją .{format} formatu", + "Save as type" => "Įrašymo failo tipas", + "Save the active sheet as comma-separated text." => "Įrašyti aktyvų lakštą kaip kableliais atskirtą tekstą.", + "Save the sheet as a PDF document that keeps its page layout." => "Įrašyti lakštą kaip PDF dokumentą, išlaikant puslapio maketą.", + "Save the workbook as a web page." => "Įrašyti darbaknygę kaip tinklalapį.", + "Save the workbook under another name or in another folder." => "Įrašyti darbaknygę kitu pavadinimu arba kitame aplanke.", + "Scatter" => "Sklaidos", + "Scatter or Bubble" => "Sklaidos arba burbulinė", + "Scatter with Lines" => "Sklaidos su linijomis", + "Scenario Manager…" => "Scenarijų tvarkytuvė…", + "Scientific" => "Mokslinis", + "Scope" => "Galiojimo sritis", + "Scope (Workbook or sheet name):" => "Galiojimo sritis (darbaknygė arba lakšto pavadinimas):", + "ScreenTip:" => "Patarimas:", + "Search Commands" => "Ieškoti komandų", + "Search and run any command" => "Ieškoti ir vykdyti bet kurią komandą", + "Search commands (⌘⇧Space)" => "Ieškoti komandų (⌘⇧Space)", + "Search:" => "Paieška:", + "Seasonality (auto, 0 for none, or a season length):" => "Sezoniškumas (auto, 0 – nėra arba sezono ilgis):", + "Select" => "Pažymėti", + "Select\nData" => "Pasirinkti\nduomenis", + "Select\nObjects" => "Pažymėti\nobjektus", + "Select Data" => "Pasirinkti duomenis", + "Select Data Source" => "Pasirinkti duomenų šaltinį", + "Select a Solving Method:" => "Pasirinkite sprendimo metodą:", + "Select a chart first." => "Pirmiausia pažymėkite diagramą.", + "Select and move ink and shapes" => "Pažymėti ir perkelti rankraštį bei figūras", + "Select destination and press Enter or choose Paste" => "Pasirinkite paskirties vietą ir paspauskite Enter arba pasirinkite „Įklijuoti“", + "Semicolon" => "Kabliataškis", + "Series" => "Sekos", + "Series in" => "Sekos pagal", + "Series{n}" => "Seka{n}", + "Series…" => "Seka…", + "Set Objective:" => "Tikslo langelis:", + "Set Print Area" => "Nustatyti spausdinimo sritį", + "Set cell:" => "Nustatyti langelį:", + "Shapes" => "Figūros", + "Share" => "Bendrinti", + "Share: export or save a copy" => "Bendrinti: eksportuoti arba įrašyti kopiją", + "Sheet\nName" => "Lakšto\npavadinimas", + "Sheet\nRight-to-Left" => "Lakštas iš\ndešinės į kairę", + "Sheet Name" => "Lakšto pavadinimas", + "Sheet Options|View" => "Rodyti", + "Sheet Right-to-Left" => "Lakštas iš dešinės į kairę", + "Sheet structure is locked: sheets can't be added, moved, renamed or deleted." => { + "Lakštų struktūra užrakinta: jų negalima pridėti, perkelti, pervadinti ar naikinti." + } + "Sheets" => "Lakštai", + "Sheets: {sheets}" => "Lakštai: {sheets}", + "Shift cells down" => "Pastumti langelius žemyn", + "Shift cells left" => "Pastumti langelius kairėn", + "Shift cells right" => "Pastumti langelius dešinėn", + "Shift cells up" => "Pastumti langelius aukštyn", + "Short Date" => "Trumpasis datos formatas", + "Show\nComments" => "Rodyti\nkomentarus", + "Show All Notes" => "Rodyti visas pastabas", + "Show Detail" => "Rodyti išsamią informaciją", + "Show Formulas" => "Rodyti formules", + "Show Formulas (⌃`)" => "Rodyti formules (⌃`)", + "Show as % of Grand Total" => "Rodyti kaip bendrosios sumos procentą", + "Show as No Calculation" => "Rodyti be skaičiavimo", + "Show as Rank" => "Rodyti kaip rangą", + "Show as Running Total" => "Rodyti kaip sukauptąją sumą", + "Show formula bar" => "Rodyti formulės juostą", + "Show password" => "Rodyti slaptažodį", + "Show/Hide Note" => "Rodyti / slėpti pastabą", + "Shrink to fit" => "Sumažinti, kad tilptų", + "Single" => "Viengubas", + "Single Accounting" => "Viengubas apskaitos pabraukimas", + "Size" => "Dydis", + "Skip blanks" => "Praleisti tuščius langelius", + "Slicer" => "Duomenų filtras", + "Solve" => "Spręsti", + "Solver" => "Optimizavimas", + "Solver Parameters" => "Optimizavimo parametrai", + "Solver Results" => "Optimizavimo rezultatai", + "Sort" => "Rikiuoti", + "Sort &\nFilter" => "Rikiuoti ir\nfiltruoti", + "Sort & Filter" => "Rikiuoti ir filtruoti", + "Sort A to Z" => "Rikiuoti nuo A iki Ž", + "Sort Z to A" => "Rikiuoti nuo Ž iki A", + "Sort by" => "Rikiuoti pagal", + "Space" => "Tarpas", + "Sparklines" => "Miniatiūrinės diagramos", + "Special" => "Specialusis", + "Special…" => "Specialusis…", + "Spelling" => "Rašyba", + "Spelling (F7)" => "Rašyba (F7)", + "Stacked Area" => "Sudėtinė sritinė", + "Stacked Bar" => "Sudėtinė juostinė", + "Stacked Column" => "Sudėtinė stulpelinė", + "Stacked Line" => "Sudėtinė linijinė", + "Standard Errors" => "Standartinės paklaidos", + "Standard Width" => "Standartinis plotis", + "Standard column width (pixels):" => "Standartinis stulpelio plotis (pikseliais):", + "Standardized Residuals" => "Standartizuotos liekanos", + "Start a conversation:" => "Pradėkite pokalbį:", + "Start a new workbook" => "Kurti naują darbaknygę", + "Statistic" => "Statistinis rodiklis", + "Statistical" => "Statistinės", + "Step value:" => "Žingsnio reikšmė:", + "Stop" => "Stabdyti", + "Stop value:" => "Pabaigos reikšmė:", + "Strikethrough" => "Perbraukimas", + "Subject" => "Tema", + "Subject to the Constraints:" => "Taikomi apribojimai:", + "Subscript" => "Apatinis indeksas", + "Subtotal" => "Tarpinė suma", + "Subtract" => "Atimti", + "Suggestions:" => "Pasiūlymai:", + "Sum" => "Suma", + "Summarize by Average" => "Apibendrinti vidurkiu", + "Summarize by Count" => "Apibendrinti skaičiumi", + "Summarize by Max" => "Apibendrinti maksimumu", + "Summarize by Min" => "Apibendrinti minimumu", + "Summarize by Sum" => "Apibendrinti suma", + "Summary statistics" => "Suvestinė statistika", + "Superscript" => "Viršutinis indeksas", + "Switch\nRow/Column" => "Sukeisti\neilutes / stulpelius", + "Switch Row/Column" => "Sukeisti eilutes ir stulpelius", + "Symbol" => "Simbolis", + "System" => "Sistema", + "Tab" => "Tabuliavimas", + "Table" => "Lentelė", + "Table\nStyles" => "Lentelių\nstiliai", + "Table (⌘T)" => "Lentelė (⌘T)", + "Table Design" => "Lentelės dizainas", + "Table Styles" => "Lentelių stiliai", + "Tabular" => "Lentelės pavidalo", + "Tab|Insert" => "Įterpimas", + "Text" => "Tekstas", + "Text\nBox" => "Teksto\nlaukas", + "Text Box" => "Teksto laukas", + "Text length" => "Teksto ilgis", + "Text to\nColumns" => "Tekstą skaidyti\nį stulpelius", + "Text to Columns" => "Tekstą skaidyti į stulpelius", + "The output range already holds data. Replace it with the report?" => "Išvesties diapazone jau yra duomenų. Pakeisti juos ataskaita?", + "The spelling check is complete for the entire sheet." => "Viso lakšto rašybos tikrinimas baigtas.", + "Themes" => "Temos", + "Then by" => "Tada pagal", + "There are no conditional formatting rules on this sheet." => "Šiame lakšte nėra sąlyginio formatavimo taisyklių.", + "This month" => "Šį mėnesį", + "This week" => "Šią savaitę", + "This workbook" => "Ši darbaknygė", + "This workbook has no scripts or macros." => "Šioje darbaknygėje nėra scenarijų ar makrokomandų.", + "Threaded Comments" => "Komentarų gijos", + "Time" => "Laikas", + "Timeline range (blank: first column of the selection):" => "Laiko juostos diapazonas (tuščias – pirmas pažymėtos srities stulpelis):", + "Title" => "Pavadinimas", + "Title:" => "Pavadinimas:", + "To value:" => "Siekiama reikšmė:", + "To:" => "Iki:", + "Today" => "Šiandien", + "Tomorrow" => "Rytoj", + "Top" => "Viršus", + "Top\nAlign" => "Lygiuoti\nviršuje", + "Top 10 Items" => "10 didžiausių reikšmių", + "Top 10%" => "Didžiausi 10 %", + "Top Align" => "Lygiuoti viršuje", + "Top Margin" => "Viršutinė paraštė", + "Top margin (in):" => "Viršutinė paraštė (col.):", + "Trace Dependents" => "Rodyti priklausomus langelius", + "Trace Precedents" => "Rodyti įtaką darančius langelius", + "Transpose" => "Transponuoti", + "Transpose (E)" => "Transponuoti (E)", + "Treat consecutive delimiters as one" => "Iš eilės einančius skirtukus laikyti vienu", + "Type" => "Tipas", + "Type (custom format code):" => "Tipas (pasirinktinis formato kodas):", + "Type a command, e.g. freeze, chart, bold…" => "Įveskite komandą, pvz., fiksuoti, diagrama, pusjuodis…", + "Underline" => "Pabraukimas", + "Underline (⌘U)" => "Pabraukimas (⌘U)", + "Undo (⌘Z)" => "Anuliuoti (⌘Z)", + "Undo list" => "Anuliavimo sąrašas", + "Unfreeze Panes" => "Atlaisvinti sritis", + "Ungroup" => "Išgrupuoti", + "Unhide" => "Rodyti paslėptus", + "Unhide Columns" => "Rodyti paslėptus stulpelius", + "Unhide Rows" => "Rodyti paslėptas eilutes", + "Unhide Sheet…" => "Rodyti paslėptą lakštą…", + "Unhide sheet:" => "Rodyti paslėptą lakštą:", + "Unlock with password" => "Atrakinti slaptažodžiu", + "Unmerge Cells" => "Atskirti sulietus langelius", + "Unprotect\nSheet" => "Atšaukti lakšto\napsaugą", + "Unprotect Sheet" => "Atšaukti lakšto apsaugą", + "Unprotect Workbook" => "Atšaukti darbaknygės apsaugą", + "Up" => "Aukštyn", + "Use AutoFilter" => "Naudoti automatinį filtrą", + "Use a field's menu to move it between areas:" => "Lauko meniu perkelkite jį tarp sričių:", + "Use function" => "Naudoti funkciją", + "Use in Formula" => "Naudoti formulėje", + "Validation" => "Tikrinimas", + "Value" => "Reikšmė", + "Value Of:" => "Reikšmė:", + "Values" => "Reikšmės", + "Values (V)" => "Reikšmės (V)", + "Values and number formats" => "Reikšmės ir skaičių formatai", + "Values range (blank: second column of the selection):" => "Reikšmių diapazonas (tuščias – antras pažymėtos srities stulpelis):", + "Variable 1 Range:" => "1 kintamojo diapazonas:", + "Variable 2 Range:" => "2 kintamojo diapazonas:", + "Version {version}" => "Versija {version}", + "Version, contributors and the AI models that helped" => "Versija, prisidėjusieji ir padėję DI modeliai", + "Vertical" => "Vertikalus", + "Vertical Text" => "Vertikalus tekstas", + "Vertical axis title:" => "Vertikaliosios ašies pavadinimas:", + "View" => "Rodinys", + "Visible cells only" => "Tik matomi langeliai", + "Warning" => "Įspėjimas", + "Watch\nWindow" => "Stebėjimo\nlangas", + "Watch Window" => "Stebėjimo langas", + "Waterfall" => "Krioklinė", + "Web" => "Žiniatinklis", + "Web Page (*.html)" => "Tinklalapis (*.html)", + "Web Page (.html)" => "Tinklalapis (.html)", + "Weekday" => "Savaitės diena", + "What-If\nAnalysis" => "Sąlyginė\nanalizė", + "What-If Analysis" => "Sąlyginė analizė", + "Whole number" => "Sveikasis skaičius", + "Wide" => "Plačios", + "Within workbook" => "Darbaknygėje", + "Workbook" => "Darbaknygė", + "Workbook\nStatistics" => "Darbaknygės\nstatistika", + "Workbook Statistics" => "Darbaknygės statistika", + "Workbook calculation" => "Darbaknygės skaičiavimas", + "Wrap Text" => "Laužyti tekstą", + "Wrap text" => "Laužyti tekstą", + "Year" => "Metai", + "Yellow Fill with Dark Yellow Text" => "Geltonas užpildas su tamsiai geltonu tekstu", + "Yesterday" => "Vakar", + "Z to A" => "Nuo Ž iki A", + "Zeros" => "Nuliai", + "Zoom" => "Mastelis", + "Zoom In" => "Didinti", + "Zoom Out" => "Mažinti", + "Zoom to\nSelection" => "Pritaikyti\npažymėtai sričiai", + "Zoom to 100%" => "Nustatyti 100 % mastelį", + "Zoom to Selection" => "Pritaikyti pažymėtai sričiai", + "Zoom…" => "Mastelis…", + "and:" => "ir:", + "applies to" => "taikoma", + "between" => "tarp", + "dashed" => "brūkšninis", + "dotted" => "taškinis", + "double" => "dvigubas", + "e.g. lookup, average, date" => "pvz., paieška, vidurkis, data", + "equal to" => "lygu", + "greater than" => "daugiau nei", + "greater than or equal to" => "daugiau arba lygu", + "less than" => "mažiau nei", + "less than or equal to" => "mažiau arba lygu", + "medium" => "vidutinis", + "none" => "nėra", + "not between" => "ne tarp", + "not equal to" => "nelygu", + "t-Test: Paired Two Sample for Means" => "Porinių imčių vidurkių t kriterijus", + "t-Test: Two-Sample Assuming Equal Variances" => "Dviejų imčių t kriterijus, laikant dispersijas lygiomis", + "t-Test: Two-Sample Assuming Unequal Variances" => "Dviejų imčių t kriterijus, laikant dispersijas nelygiomis", + "thick" => "storas", + "thin" => "plonas", + "this workbook" => "ši darbaknygė", + "with" => "su", + "{count} cell(s) found" => "Rasta langelių: {count}", + "{n} days ago" => "Prieš {n} d.", + "{n} h ago" => "Prieš {n} val.", + "{n} min ago" => "Prieš {n} min.", + "{n} months ago" => "Prieš {n} mėn.", + "{n} weeks ago" => "Prieš {n} sav.", + "{n} years ago" => "Prieš {n} m.", + "£ English (United Kingdom)" => "£ Anglų (Jungtinė Karalystė)", + "¥ Japanese" => "¥ Japonų", + "— 1 step" => "— 1 veiksmas", + "— VBA project (preserved, not run)" => "— VBA projektas (išsaugomas, nevykdomas)", + "— {steps} steps" => "— Veiksmų: {steps}", + "€ Euro" => "€ Euras", + "Book" => "Knyga", + "Sheet" => "Lapas", + "Generated|Column" => "Stulpelis", + "Generated|Row" => "Eilutė", + "Page {page}" => "Puslapis {page}", + "Paste Special|Add" => "Sudėti", + "Text to Columns|Comma" => "Kablelis", + "Name Box" => "Vardo laukas", + "Cell Editor" => "Langelio rengyklė", + "Font Size" => "Šrifto dydis", + "Page order" => "Puslapių tvarka", + "Down, then over" => "Žemyn, tada į dešinę", + "Over, then down" => "Į dešinę, tada žemyn", + _ => return None, + }) +} + +#[cfg(test)] +mod tests { + use super::translate; + + #[test] + fn context_keys_and_workbook_syntax_stay_distinct() { + assert_eq!(translate("Orientation"), Some("Teksto kryptis")); + assert_eq!(translate("Page Layout|Orientation"), Some("Puslapio padėtis")); + assert_eq!(translate("Options|General"), Some("Bendrosios")); + assert_eq!(translate("General"), Some("Bendrasis")); + assert_eq!(translate("Sheet1!A1"), None); + assert_eq!(translate("=SUM(1,2)"), None); + assert_eq!(translate("A personal sheet name"), None); + } + + #[test] + fn neutral_counts_handle_lithuanian_number_forms() { + for n in [0, 1, 2, 9, 10, 11, 19, 21, 22, 101, 111, 1000] { + assert_eq!(translate("{count} cell(s) found").unwrap().replace("{count}", &n.to_string()), format!("Rasta langelių: {n}")); + assert_eq!(translate("{n} days ago").unwrap().replace("{n}", &n.to_string()), format!("Prieš {n} d.")); + assert_eq!(translate("{n} years ago").unwrap().replace("{n}", &n.to_string()), format!("Prieš {n} m.")); + } + assert_eq!(translate("— 1 step"), Some("— 1 veiksmas")); + assert_eq!(translate("— {steps} steps"), Some("— Veiksmų: {steps}")); + } + + #[test] + fn ribbon_line_breaks_and_placeholders_survive() { + assert_eq!(translate("Top\nAlign"), Some("Lygiuoti\nviršuje")); + assert_eq!(translate("Bottom\nAlign"), Some("Lygiuoti\napačioje")); + assert_eq!(translate("Page {page} of {pages}").unwrap().replace("{page}", "3").replace("{pages}", "9"), "Puslapis 3 iš 9"); + assert_eq!(translate("Find…"), Some("Rasti…")); + assert_eq!(translate(" (password)"), Some(" (slaptažodis)")); + } +} diff --git a/crates/ui-egui/src/i18n/nl.rs b/crates/ui-egui/src/i18n/nl.rs index 64c24b1f2b..e25fef35b1 100644 --- a/crates/ui-egui/src/i18n/nl.rs +++ b/crates/ui-egui/src/i18n/nl.rs @@ -3,6 +3,8 @@ /// Returns the Dutch translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Series{n}" => "Reeks {n}", + "Page {page}" => "Pagina {page}", "Diagram" => "Diagram", "Decorative Text" => "Decoratieve tekst", "Paste" => "Plakken", @@ -556,6 +558,29 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "Stoppen", "New Macro" => "Nieuwe macro", "Show" => "Weergeven", + "Generated|Column" => "Kolom", + "Generated|Row" => "Rij", + "Book" => "Map", + "Sheet" => "Blad", + "Count Numbers" => "Aantal getallen", + "Type to filter…" => "Typ om te filteren…", + "Nothing to paste." => "Geen gegevens om te plakken.", + "No cells were found." => "Er zijn geen cellen gevonden.", + "Or select a category:" => "Of selecteer een categorie:", + "Most Recently Used" => "Laatst gebruikt", + "Insert Function…" => "Functie invoegen…", + "Paste Names…" => "Namen plakken…", + "Macro name:" => "Macronaam:", + "Shortcut key:" => "Sneltoets:", + "Description:" => "Beschrijving:", + "This workbook has no scripts or macros." => "Deze werkmap bevat geen scripts of macro’s.", + "Check for Updates…" => "Naar updates zoeken…", + "Checking for updates…" => "Zoeken naar updates…", + "Could not check for updates." => "Kan niet naar updates zoeken.", + "Check Again" => "Opnieuw controleren", + "Search:" => "Zoeken:", + "e.g. lookup, average, date" => "bijv. zoeken, gemiddelde, datum", + "All" => "Alle", "Collapse dialog" => "Dialoogvenster samenvouwen", "Expand dialog" => "Dialoogvenster uitvouwen", _ => return None, diff --git a/crates/ui-egui/src/i18n/nl_functions.rs b/crates/ui-egui/src/i18n/nl_functions.rs new file mode 100644 index 0000000000..c9a729eef8 --- /dev/null +++ b/crates/ui-egui/src/i18n/nl_functions.rs @@ -0,0 +1,1023 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 voor positief, -1 voor negatief en 0 voor nul."), + ("A random integer between two bounds, inclusive.", "Een willekeurig geheel getal tussen twee grenzen, inclusief."), + ("A random number between 0 and 1, recalculated every time.", "Een willekeurig getal tussen 0 en 1, dat elke keer opnieuw wordt berekend."), + ("A range or array without its blank outer rows and columns.", "Een bereik of array zonder lege buitenste rijen en kolommen."), + ("A reference shifted from a starting point.", "Een referentie is verschoven vanaf een startpunt."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Statistiek van het FORECAST.ETS-model: 1 alfa, 2 bèta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 stapgrootte.", + ), + ("A subtotal that can skip hidden rows.", "Een subtotaal dat verborgen rijen kan overslaan."), + ("Absolute value (modulus) of a complex number.", "Absolute waarde (modulus) van een complex getal."), + ("Absolute value of a number.", "Absolute waarde van een getal."), + ("Accrued interest of a security paying interest at maturity.", "Opgelopen rente van een effect dat op de vervaldag rente betaalt."), + ("Accrued interest of a security paying periodic interest.", "Opgebouwde rente van een effect dat periodieke rente betaalt."), + ("Accumulates an array into one value.", "Accumuleert een array tot één waarde."), + ("Adds all the numbers in the arguments.", "Telt alle getallen in de argumenten op."), + ("Adds the cells that meet a condition.", "Geeft de som terug van numerieke waarden in spreadsheetcellen die aan een voorwaarde voldoen."), + ("Adds the cells that meet every condition.", "Geeft de som terug van numerieke waarden in spreadsheetcellen die aan alle voorwaarden voldoen."), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Geeft de som van numerieke waarden in een databaseveld terug, voor records die aan de criteria voldoen.", + ), + ("Adds the squares of the numbers.", "Telt de kwadraten van de getallen op."), + ("Amount received at maturity for a fully invested security.", "Bedrag ontvangen op de vervaldag voor een volledig betaald effect."), + ("An aggregate that can skip hidden rows and errors.", "Een aggregatie die verborgen rijen en fouten kan overslaan."), + ("Angle of a complex number in radians.", "Hoek van een complex getal in radialen."), + ("Angle of the point (x, y) from the x-axis in radians.", "Hoek van het punt (x, y) vanaf de x-as in radialen."), + ("Annual yield of a discounted security.", "Jaarlijks rendement van een effect uitgegeven met korting."), + ("Annual yield of a security paying interest at maturity.", "Jaarlijks rendement van een effect dat rente betaalt op de vervaldag."), + ("Applies a LAMBDA to each column.", "Past een LAMBDA toe op elke kolom."), + ("Applies a LAMBDA to each row.", "Past een LAMBDA toe op elke rij."), + ("Applies a LAMBDA to each value.", "Past een LAMBDA toe op elke waarde."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Geschatte zoekopdracht in een gesorteerde vector of de eerste rij/kolom van een array.", + ), + ("Arccosine in radians.", "Arccosinus in radialen."), + ("Arccotangent in radians (0 to pi).", "Arccotangens in radialen (0 tot pi)."), + ("Arcsine in radians.", "Arcsinus in radialen."), + ("Arctangent in radians.", "Boogtangens in radialen."), + ("Arithmetic mean of the numbers.", "Rekenkundig gemiddelde van de getallen."), + ("Average absolute deviation from the mean.", "Gemiddelde absolute afwijking van het gemiddelde."), + ("Average of the cells that meet a condition.", "Gemiddelde van de spreadsheetcellen die aan een voorwaarde voldoen."), + ("Average of the cells that meet every condition.", "Gemiddelde van de spreadsheetcellen die aan alle voorwaarden voldoen."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Berekent het gemiddelde van de getallen in een veld van de records die aan de criteria voldoen.", + ), + ("Base-10 logarithm of a complex number.", "Logaritme met grondtal 10 van een complex getal."), + ("Base-10 logarithm.", "Logaritme met grondtal 10."), + ("Base-2 logarithm of a complex number.", "Logaritme met grondtal 2 van een complex getal."), + ("Bessel function of the first kind, J_n(x).", "Besselfunctie van de eerste soort, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Bessel-functie van de tweede soort, Y_n(x)."), + ("Beta distribution density or probability.", "Bèta-distributiedichtheid of waarschijnlijkheid."), + ("Binomial probability.", "Binomiale waarschijnlijkheid."), + ("Bitwise AND of two non-negative integers.", "Bitsgewijze AND van twee niet-negatieve gehele getallen."), + ("Bitwise OR of two non-negative integers.", "Bitsgewijze OR van twee niet-negatieve gehele getallen."), + ("Bitwise exclusive OR of two non-negative integers.", "Bitsgewijze exclusieve OR van twee niet-negatieve gehele getallen."), + ("Bond-equivalent yield of a Treasury bill.", "Obligatie-equivalent rendement van schatkistpapier."), + ("Breaks a row or column into columns of the given length.", "Verdeelt een rij of kolom in kolommen van de opgegeven lengte."), + ("Breaks a row or column into rows of the given length.", "Verdeelt een rij of kolom in rijen van de opgegeven lengte."), + ("Builds a cell address as text from row and column numbers.", "Bouwt een celadres op als tekst op basis van rij- en kolomnummers."), + ("Builds a complex number as text from real and imaginary parts.", "Bouwt een complex getal op als tekst uit reële en denkbeeldige delen."), + ("Builds a date serial number from a year, month and day.", "Creëert een datumserienummer op basis van een jaar, maand en dag."), + ( + "Builds a summary table grouping values by row and column fields.", + "Bouwt een overzichtstabel waarin waarden worden gegroepeerd op rij- en kolomvelden.", + ), + ( + "Builds a time (a fraction of a day) from hours, minutes and seconds.", + "Bouwt een tijd (een fractie van een dag) op uit uren, minuten en seconden.", + ), + ("Builds an array from a LAMBDA.", "Bouwt een array op vanaf een LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Bouwt een array van gelijkmatig getrapte getallen op."), + ("Builds an array of random numbers in a range.", "Creëert een array van willekeurige getallen in een bereik."), + ("Byte version of FIND.", "Byteversie van FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Byteversie van LEFT (hetzelfde als LEFT voor tekst van één byte)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Byteversie van LEN (hetzelfde als LEN voor tekst van één byte)."), + ("Byte version of MID (same as MID for single-byte text).", "Byteversie van MID (hetzelfde als MID voor tekst van één byte)."), + ("Byte version of REPLACE.", "Byteversie van REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Byteversie van RIGHT (hetzelfde als RIGHT voor tekst van één byte)."), + ("Byte version of SEARCH.", "Byteversie van SEARCH."), + ( + "Capitalises the first letter of each word and lower-cases the rest.", + "Geeft de eerste letter van elk woord een hoofdletter en de rest in kleine letters.", + ), + ("Chi-squared density or left-tailed probability.", "Chi-kwadraatdichtheid of linkszijdige waarschijnlijkheid."), + ("Chi-squared test of independence.", "Chi-kwadraattoets voor onafhankelijkheid."), + ("Column number of a reference.", "Kolomnummer van een verwijzing."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Vergelijkt een expressie met een lijst met waarden en retourneert het resultaat gekoppeld aan de eerste overeenkomst.", + ), + ("Complementary error function, 1 - ERF(x).", "Aanvullende foutfunctie, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Complexe conjugaat van een complex getal."), + ( + "Confidence interval half-width using Student's t distribution.", + "Betrouwbaarheidsinterval halve breedte met behulp van Student's t-verdeling.", + ), + ( + "Confidence interval half-width using the normal distribution.", + "Betrouwbaarheidsinterval halve breedte met gebruikmaking van de normale verdeling.", + ), + ("Converts Roman numerals to a number.", "Converteert Romeinse cijfers naar een getal."), + ("Converts a binary number to decimal.", "Converteert een binair getal naar decimaal."), + ("Converts a binary number to hexadecimal.", "Converteert een binair getal naar hexadecimaal."), + ("Converts a binary number to octal.", "Converteert een binair getal naar octaal."), + ("Converts a date written as text into a date serial number.", "Converteert een datum geschreven als tekst naar een datumserienummer."), + ("Converts a decimal number to binary.", "Converteert een decimaal getal naar binair getal."), + ("Converts a decimal number to hexadecimal.", "Converteert een decimaal getal naar hexadecimaal."), + ("Converts a decimal number to octal.", "Converteert een decimaal getal naar octaal."), + ("Converts a decimal price to fractional notation.", "Converteert een decimale prijs naar breukennotatie."), + ("Converts a fractional price notation to a decimal number.", "Converteert een gebroken prijsnotatie naar een decimaal getal."), + ("Converts a hexadecimal number to binary.", "Converteert een hexadecimaal getal naar binair getal."), + ("Converts a hexadecimal number to decimal.", "Converteert een hexadecimaal getal naar decimaal."), + ("Converts a hexadecimal number to octal.", "Converteert een hexadecimaal getal naar octaal."), + ("Converts a measurement from one unit to another.", "Converteert een meting van de ene eenheid naar de andere."), + ("Converts a number to Roman numerals in one of five styles.", "Converteert een getal naar Romeinse cijfers in een van de vijf stijlen."), + ("Converts a time written as text into a fraction of a day.", "Converteert een tijd die als tekst is geschreven naar een fractie van een dag."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Converteert een waarde naar een getal: getallen blijven, TRUE is 1, al het andere is 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Converteert een array naar tekst, als kommalijst of als strikte arrayconstante.", + ), + ("Converts an octal number to binary.", "Converteert een octaal getal naar binair getal."), + ("Converts an octal number to decimal.", "Converteert een octaal getal naar decimaal."), + ("Converts an octal number to hexadecimal.", "Converteert een octaal getal naar hexadecimaal."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Converteert elke waarde naar tekst, eventueel in strikte vorm (tussen aanhalingstekens).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Converteert tussen de euro en de voormalige nationale valuta's van eurolanden tegen vaste koersen.", + ), + ("Converts degrees to radians.", "Zet graden om in radialen."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Converteert tekens van volledige breedte naar tekens van halve breedte (geen wijziging voor tekst van één byte).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Converteert tekens van halve breedte naar tekens van volledige breedte (geen wijziging in deze landinstelling).", + ), + ("Converts radians to degrees.", "Converteert radialen naar graden."), + ( + "Converts text that looks like a number, date or time into a number.", + "Converteert tekst die lijkt op een getal, datum of tijd naar een getal.", + ), + ( + "Converts text to a number using the given decimal and group separators.", + "Converteert tekst naar een getal met behulp van de opgegeven decimale scheidingstekens en groepsscheidingstekens.", + ), + ("Converts text to lower case.", "Converteert tekst naar kleine letters."), + ("Converts text to upper case.", "Converteert tekst naar hoofdletters."), + ("Correlation coefficient of two data sets.", "Correlatiecoëfficiënt van twee datasets."), + ("Cosecant of a complex number.", "Cosecans van een complex getal."), + ("Cosecant of an angle in radians.", "Cosecans van een hoek in radialen."), + ("Cosine of a complex number.", "Cosinus van een complex getal."), + ("Cosine of an angle in radians.", "Cosinus van een hoek in radialen."), + ("Cotangent of a complex number.", "Cotangens van een complex getal."), + ("Cotangent of an angle in radians.", "Cotangens van een hoek in radialen."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Telt dagen tussen twee datums in een jaar van 360 dagen (US of Europese methode).", + ), + ("Counts empty cells and empty text in a range.", "Telt lege spreadsheetcellen en lege tekst in een bereik."), + ("Counts how many values fall into each bin, as a vertical array.", "Telt hoeveel waarden in elke bak vallen, als een verticale array."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Telt niet-lege spreadsheetcellen in een veld van de overeenkomende records (of de overeenkomende records).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Telt numerieke spreadsheetcellen in een veld met de overeenkomende records (of de overeenkomende records).", + ), + ("Counts the cells that meet a condition.", "Telt de spreadsheetcellen die aan een voorwaarde voldoen."), + ("Counts the cells that meet every condition.", "Telt de spreadsheetcellen die aan alle voorwaarden voldoen."), + ("Counts the characters in a text.", "Telt de tekens in een tekst."), + ("Counts the columns in an array or range.", "Telt de kolommen in een array of bereik."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Telt de items in een kubusset (geen kubusverbindingen; #N/A)."), + ("Counts the non-empty values.", "Telt de niet-lege waarden."), + ("Counts the numbers.", "Telt de getallen."), + ("Counts the rows in an array or range.", "Telt de rijen in een array of bereik."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Telt hele jaren, maanden of dagen tussen twee datums. eenheid: Y, M, D, MD, YM of YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Telt werkdagen (maandag tot en met vrijdag) tussen twee data, met uitzondering van feestdagen.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Telt werkdagen tussen twee data met een aangepast weekend, met uitzondering van feestdagen.", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "Creëert een link; de cel toont de beschrijvende naam, of de link zelf.", + ), + ("Creates a reusable custom function.", "Creëert een herbruikbare aangepaste functie."), + ("Cumulative beta probability.", "Cumulatieve bètawaarschijnlijkheid."), + ("Cumulative lognormal probability.", "Cumulatieve lognormale waarschijnlijkheid."), + ("Cuts off the fractional part of a number at the given digits.", "Snijdt het breukgedeelte van een getal af bij de opgegeven cijfers."), + ("Days from settlement to the next coupon date.", "Dagen vanaf de afwikkeling tot de volgende rentebetalingsdatum."), + ("Days from the start of the coupon period to settlement.", "Dagen vanaf het begin van de rentebetalingsperiode tot aan de afwikkeling."), + ("Days in the coupon period that contains settlement.", "Dagen in de rentebetalingsperiode die verrekening bevat."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Degressieve afschrijving over een willekeurige periode, waarbij wordt overgegaan op een lineaire afschrijving.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Definieert een set kubusleden (geen kubusverbindingen; #N/A)."), + ("Determinant of a square matrix.", "Determinant van een vierkante matrix."), + ("Difference of two complex numbers.", "Verschil tussen twee complexe getallen."), + ("Discount rate of a security.", "Disconteringsvoet van een effect."), + ("Double factorial of a number.", "Dubbele faculteit van een getal."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Degressieve afschrijving met een dubbele (of andere) factor voor een periode.", + ), + ( + "Effective annual rate from a nominal rate and compounding periods.", + "Effectieve jaarrente op basis van een nominale rente en het aantal renteperioden.", + ), + ("Equivalent interest rate for the growth of an investment.", "Equivalent rentetarief voor de groei van een belegging."), + ( + "Error function integrated from 0 to a limit, or between two limits.", + "Foutfunctie geïntegreerd van 0 tot een limiet, of tussen twee limieten.", + ), + ("Error function integrated from 0 to x.", "Foutfunctie geïntegreerd van 0 tot x."), + ("Excess kurtosis of a sample.", "Exceskurtosis van een steekproef."), + ("Exponential curve coefficients and optional regression statistics.", "Exponentiële curvecoëfficiënten en optionele regressiestatistieken."), + ("Exponential distribution density or probability.", "Exponentiële distributiedichtheid of waarschijnlijkheid."), + ("Exponential of a complex number.", "Exponentieel van een complex getal."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Extraheert gegevens uit XML met een XPath (niet beschikbaar; retourneert #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Extraheert de eerste overeenkomst, alle overeenkomsten of de vastgelegde groepen van een reguliere expressie.", + ), + ("F distribution density or left-tailed probability.", "F-verdelingsdichtheid of linkszijdige waarschijnlijkheid."), + ("Factorial of a number.", "Faculteit van een getal."), + ( + "Fetches data from a web service (not available; returns #VALUE!).", + "Haalt gegevens op van een webservice (niet beschikbaar; retourneert #VALUE!).", + ), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Zoekt een waarde in de eerste kolom van een tabel en retourneert de waarde in dezelfde rij van een andere kolom.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Zoekt een waarde in de eerste rij van een tabel en retourneert de waarde in dezelfde kolom van een andere rij.", + ), + ("Finds the position of one text in another (case-sensitive).", "Vindt de positie van de ene tekst in de andere (hoofdlettergevoelig)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Vindt de positie van de ene tekst in een andere, waarbij hoofdletters en kleine letters worden genegeerd en jokertekens worden toegestaan.", + ), + ("Fisher transformation.", "Fisher-transformatie."), + ("Fixed-declining-balance depreciation for a period.", "Afschrijving met vast degressief saldo voor een bepaalde periode."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Maakt een array plat tot één enkele kolom, waarbij eventueel lege cellen of fouten worden overgeslagen.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Maakt een array plat tot één enkele rij, waarbij eventueel lege cellen of fouten worden overgeslagen.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Voorspelt een waarde door additieve (AAA) exponentiële afvlakking."), + ("Formats a number as currency text, like DOLLAR.", "Formatteert een getal als valutatekst, zoals DOLLAR."), + ("Formats a number as currency text.", "Formatteert een getal als valutatekst."), + ("Formats a number as text.", "Formatteert een getal als tekst."), + ( + "French degressive depreciation with a life-based coefficient.", + "Franse degressieve afschrijving met een op de levensduur gebaseerde coëfficiënt.", + ), + ("French linear depreciation prorated for the first period.", "Franse lineaire afschrijving pro rata voor de eerste periode."), + ( + "Future value of a principal after a series of compound rates.", + "Toekomstige waarde van een hoofdsom na een reeks samengestelde rentetarieven.", + ), + ("Future value of an investment with constant payments and rate.", "Toekomstige waarde van een investering met constante betalingen en rente."), + ("Gamma distribution density or probability.", "Gammaverdelingsdichtheid of waarschijnlijkheid."), + ("Geometric mean of positive numbers.", "Geometrisch gemiddelde van positieve getallen."), + ("Greatest common divisor of integers.", "Grootste gemene deler van gehele getallen."), + ( + "Groups rows by key fields and aggregates the values of each group.", + "Groepeert rijen op sleutelvelden en aggregeert de waarden van elke groep.", + ), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Vergroot een array tot de opgegeven grootte en vult nieuwe cellen met een opvulwaarde.", + ), + ( + "Half-width of the confidence interval around a FORECAST.ETS value.", + "Halve breedte van het betrouwbaarheidsinterval rond een FORECAST.ETS-waarde.", + ), + ("Harmonic mean of positive numbers.", "Harmonisch gemiddelde van positieve getallen."), + ("Hyperbolic cosecant of a complex number.", "Hyperbolische cosecans van een complex getal."), + ("Hyperbolic cosecant.", "Hyperbolische cosecant."), + ("Hyperbolic cosine of a complex number.", "Hyperbolische cosinus van een complex getal."), + ("Hyperbolic cosine.", "Hyperbolische cosinus."), + ("Hyperbolic cotangent.", "Hyperbolische cotangens."), + ("Hyperbolic secant of a complex number.", "Hyperbolische secans van een complex getal."), + ("Hyperbolic secant.", "Hyperbolische secans."), + ("Hyperbolic sine of a complex number.", "Hyperbolische sinus van een complex getal."), + ("Hyperbolic sine.", "Hyperbolische sinus."), + ("Hyperbolic tangent.", "Hyperbolische tangens."), + ("Hypergeometric probability of an exact count.", "Hypergeometrische waarschijnlijkheid van een exacte telling."), + ("Hypergeometric probability.", "Hypergeometrische waarschijnlijkheid."), + ("Identity matrix of the given size.", "Identiteitsmatrix van de opgegeven grootte."), + ("Imaginary coefficient of a complex number.", "Denkbeeldige coëfficiënt van een complex getal."), + ("Information about a cell.", "Informatie over een cel."), + ("Integer part of a division.", "Geheel deel van een deling."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Rente betaald in een periode van een lening met gelijke aflossingen van de hoofdsom.", + ), + ("Interest part of a given period's payment.", "Rentegedeelte van de betaling van een bepaalde periode."), + ("Interest rate of a fully invested security.", "Rentepercentage van een volledig betaald effect."), + ("Interest rate per period of an annuity, found iteratively.", "Rentepercentage per periode van een lijfrente, iteratief gevonden."), + ("Internal rate of return of cash flows on specific dates.", "Intern rendement van cashflows op specifieke data."), + ("Internal rate of return of periodic cash flows.", "Intern rendement van periodieke kasstromen."), + ("Inverse hyperbolic cosine.", "Inverse hyperbolische cosinus."), + ("Inverse hyperbolic cotangent.", "Inverse hyperbolische cotangens."), + ("Inverse hyperbolic sine.", "Inverse hyperbolische sinus."), + ("Inverse hyperbolic tangent.", "Inverse hyperbolische tangens."), + ("Inverse of a square matrix.", "Inverse van een vierkante matrix."), + ("Inverse of the Fisher transformation.", "Inverse van de Fisher-transformatie."), + ("Inverse of the cumulative beta distribution.", "Inverse van de cumulatieve bètaverdeling."), + ("Inverse of the cumulative lognormal distribution.", "Inverse van de cumulatieve lognormale verdeling."), + ("Inverse of the gamma cumulative distribution.", "Inverse van de cumulatieve gammaverdeling."), + ("Inverse of the left-tailed F distribution.", "Inverse van de linkszijdige F-verdeling."), + ("Inverse of the left-tailed chi-squared distribution.", "Inverse van de linkszijdige chikwadraatverdeling."), + ("Inverse of the normal cumulative distribution.", "Inverse van de normale cumulatieve verdeling."), + ("Inverse of the right-tailed F distribution.", "Inverse van de rechtszijdige F-verdeling."), + ("Inverse of the right-tailed chi-squared distribution.", "Inverse van de rechtszijdige chikwadraatverdeling."), + ("Inverse of the standard normal cumulative distribution.", "Inverse van de standaardnormale cumulatieve verdeling."), + ("Joins several text values into one.", "Voegt verschillende tekstwaarden samen tot één."), + ( + "Joins text from values and every cell of ranges, without a separator.", + "Voegt tekst uit waarden en elke cel van bereiken samen, zonder scheidingsteken.", + ), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Voegt tekst uit waarden en bereiken samen met een scheidingsteken, waarbij eventueel lege items worden overgeslagen.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Behoudt rijen of kolommen vanaf het begin (of einde) van een array."), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Behoudt de rijen of kolommen van een array waarvan de include-vlag TRUE is.", + ), + ("Largest number (0 when there are none).", "Grootste nummer (0 als er geen zijn)."), + ("Largest number in a field of the matching records.", "Grootste getal in een veld van de overeenkomende records."), + ("Largest value among cells that meet every condition.", "Grootste waarde onder spreadsheetcellen die aan alle voorwaarden voldoen."), + ("Largest value counting text as 0 and logicals as 1/0.", "Grootste waarde, tekst telt als 0 en logica als 1/0."), + ("Least common multiple of integers.", "Kleinste gemene veelvoud van gehele getallen."), + ("Least-squares line coefficients and optional regression statistics.", "Kleinstekwadratenlijncoëfficiënten en optionele regressiestatistieken."), + ("Left-tailed inverse of Student's t distribution.", "Linkszijdige inverse van Student's t-verdeling."), + ("Length of the repeating pattern detected in a time series.", "Lengte van het zich herhalende patroon dat in een tijdreeks wordt gedetecteerd."), + ("Logarithm to the given base (10 by default).", "Logaritme met het opgegeven grondtal (standaard 10)."), + ("Lognormal density or probability.", "Lognormale dichtheid of waarschijnlijkheid."), + ("Macaulay duration of a security with periodic interest.", "Macaulay-duration van een effect met periodieke rente."), + ("Matrix product of two arrays.", "Matrixproduct van twee arrays."), + ("Mean after trimming a fraction of points from both ends.", "Gemiddelde na het weglaten van een fractie van de punten aan beide uiteinden."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Gemiddelde waarbij tekst als 0 en logische waarden als 1 of 0 meetellen."), + ("Middle value of the numbers.", "Mediaan van de getallen."), + ("Modified Bessel function of the first kind, I_n(x).", "Gewijzigde Bessel-functie van de eerste soort, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Gewijzigde Bessel-functie van de tweede soort, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Gewijzigde duration van een effect met periodieke rente."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Gewijzigd intern rendement met gebruikmaking van aparte rentetarieven voor lenen en herinvesteren.", + ), + ("Most frequently occurring number.", "Meest voorkomende nummer."), + ("Multiplies all the numbers in the arguments.", "Vermenigvuldigt alle getallen in de argumenten."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Vermenigvuldigt overeenkomende elementen van arrays van gelijke grootte en telt de producten op.", + ), + ("Multiplies the numbers in a field of the matching records.", "Vermenigvuldigt de getallen in een veld van de overeenkomende records."), + ("Names intermediate results.", "Benoemt tussenresultaten."), + ("Natural log of the gamma function.", "Natuurlijke log van de gammafunctie."), + ("Natural logarithm of a complex number.", "Natuurlijke logaritme van een complex getal."), + ("Natural logarithm.", "Natuurlijke logaritme."), + ("Negative binomial probability.", "Negatieve binomiale waarschijnlijkheid."), + ("Net present value of cash flows on specific dates.", "Netto contante waarde van kasstromen op specifieke data."), + ("Net present value of periodic cash flows at a discount rate.", "Netto contante waarde van periodieke kasstromen tegen een disconteringsvoet."), + ("Next coupon date after settlement.", "Volgende rentebetalingsdatum na afwikkeling."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Nominale jaarrente op basis van een effectieve rente en het aantal renteperioden.", + ), + ("Normal distribution density or cumulative probability.", "Normale distributiedichtheid of cumulatieve waarschijnlijkheid."), + ("Number of areas in a reference.", "Aantal gebieden in een referentie."), + ("Number of combinations with repetition.", "Aantal combinaties met herhaling."), + ("Number of combinations without repetition.", "Aantal combinaties zonder herhaling."), + ("Number of coupons payable between settlement and maturity.", "Aantal verschuldigde rentebetalingen tussen afwikkeling en vervaldatum."), + ("Number of ordered selections with repetition.", "Aantal geordende selecties met herhaling."), + ("Number of ordered selections without repetition.", "Aantal geordende selecties zonder herhaling."), + ("Number of periods needed to pay off or accumulate an amount.", "Aantal termijnen nodig om een bedrag af te lossen of op te bouwen."), + ("Number of sheets.", "Aantal vellen."), + ("One- or two-tailed Student's t probability.", "Een- of tweezijdige Student's t-kans."), + ("One-tailed probability of a z-test.", "Eenzijdige waarschijnlijkheid van een z-toets."), + ("Pearson product-moment correlation coefficient.", "Pearson product-moment correlatiecoëfficiënt."), + ("Percent-encodes text for use in a URL.", "Codeert tekst in procenten voor gebruik in een URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Periodieke betaling voor een lening of lijfrente met constante betalingen en rente.", + ), + ( + "Periods needed for an investment to grow to a target value.", + "Perioden die nodig zijn om een investering te laten groeien naar een streefwaarde.", + ), + ("Picks a value from the list by its position.", "Kiest een waarde uit de lijst op basis van zijn positie."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Kiest kolommen van een array op positie (negatieve tellingen vanaf het einde).", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Kiest rijen van een array op positie (negatieve tellingen vanaf het einde).", + ), + ("Places arrays side by side.", "Plaatst arrays naast elkaar."), + ("Poisson probability.", "Poisson-waarschijnlijkheid."), + ("Population covariance of paired values.", "Populatiecovariantie van gepaarde waarden."), + ("Population skewness.", "Scheefheid van de populatie."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Standaardafwijking van de populatie waarbij tekst als 0 en logica als 1/0 wordt geteld.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Populatiestandaardafwijking van een veld ten opzichte van de overeenkomende records.", + ), + ("Population standard deviation.", "Standaardafwijking van de populatie."), + ("Population variance counting text as 0 and logicals as 1/0.", "Populatievariantie waarbij tekst als 0 en logische waarden als 1/0 meetellen."), + ("Population variance of a field over the matching records.", "Populatievariantie van een veld ten opzichte van de overeenkomende records."), + ("Population variance.", "Populatievariantie."), + ("Positive square root.", "Positieve vierkantswortel."), + ("Predicts a value along a linear trend.", "Voorspelt een waarde langs een lineaire trend."), + ("Present value of a series of equal future payments.", "Contante waarde van een reeks gelijke toekomstige betalingen."), + ("Previous coupon date on or before settlement.", "Vorige rentebetalingsdatum op of vóór afwikkeling."), + ("Price per 100 face value of a Treasury bill.", "Prijs per 100 nominale waarde van een schatkistpapier."), + ("Price per 100 face value of a discounted security.", "Prijs per 100 nominale waarde van een effect uitgegeven met korting."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Prijs per 100 nominale waarde van een effect dat rente betaalt op de vervaldag.", + ), + ("Price per 100 face value of a security paying periodic interest.", "Prijs per 100 nominale waarde van een effect met periodieke rente."), + ( + "Price per 100 face value of a security with an odd first period.", + "Prijs per 100 nominale waarde van een effect met een onregelmatige eerste renteperiode.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Prijs per 100 nominale waarde van een effect met een onregelmatige laatste rentetermijn.", + ), + ("Principal part of a given period's payment.", "Aflossingsgedeelte van de betaling van een bepaalde periode."), + ("Probability from Student's t-test.", "Waarschijnlijkheid op basis van Student's t-toets."), + ("Probability of a number of successes falling in a range.", "Waarschijnlijkheid dat een aantal successen binnen een bereik vallen."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Waarschijnlijkheid dat een standaardnormale waarde tussen het gemiddelde en z ligt.", + ), + ("Probability that values fall between two limits.", "Waarschijnlijkheid dat waarden tussen twee grenzen vallen."), + ("Product of complex numbers.", "Product van complexe getallen."), + ("Quartile (0–4) of a data set, inclusive method.", "Kwartiel (0–4) van een dataset, inclusief methode."), + ("Quartile (0–4) of a data set.", "Kwartiel (0–4) van een dataset."), + ("Quartile (1–3) of a data set, exclusive method.", "Kwartiel (1–3) van een dataset, exclusieve methode."), + ("Quotient of two complex numbers.", "Quotiënt van twee complexe getallen."), + ("Raises a complex number to a power.", "Verheft een complex getal tot een macht."), + ("Raises a number to a power.", "Verheft een getal tot een macht."), + ("Rank of a number within a list.", "Rang van een nummer binnen een lijst."), + ( + "Rank of a number within a list; ties get the average rank.", + "Rang van een getal binnen een lijst; gelijke waarden krijgen de gemiddelde rang.", + ), + ("Rank of a number within a list; ties share the top rank.", "Rang van een getal binnen een lijst; gelijke waarden delen de hoogste rang."), + ("Ratio of the factorial of a sum to the product of factorials.", "Verhouding tussen de faculteit van een som en het product van faculteiten."), + ("Reads text in a given base as a number.", "Leest tekst in een bepaald grondtal als een getal."), + ("Real coefficient of a complex number.", "Reële coëfficiënt van een complex getal."), + ("Relative standing of a value as a fraction of the data set.", "Relatieve rangpositie van een waarde als fractie van de dataset."), + ("Relative standing of a value from 0 to 1 inclusive.", "Relatieve rangpositie van een waarde van 0 tot en met 1."), + ("Relative standing of a value strictly between 0 and 1.", "Relatieve rangpositie van een waarde strikt tussen 0 en 1."), + ("Remainder of a division, with the sign of the divisor.", "Rest van een deling, met het teken van de deler."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Verwijdert voorloop- en volgspaties en vouwt reeksen spaties samen tot één.", + ), + ("Removes non-printable control characters from text.", "Verwijdert niet-afdrukbare stuurtekens uit tekst."), + ("Removes rows or columns from the start (or end) of an array.", "Verwijdert rijen of kolommen aan het begin (of einde) van een array."), + ("Repeats a text a given number of times.", "Herhaalt een tekst een bepaald aantal keren."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Vervangt overeenkomsten van een reguliere expressie, allemaal of een gekozen exemplaar.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Vervangt de ene tekst door een andere, eventueel alleen bij een bepaald voorkomen.", + ), + ("Replaces part of a text by position.", "Vervangt een deel van een tekst op positie."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Geeft 1 terug als een getal minimaal de stap is, anders 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Geeft 1 terug als twee getallen gelijk zijn, anders 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Geeft een code terug voor het soort waarde: 1 getal, 2 tekst, 4 logisch, 16 fout, 64 array.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Retourneert een fallback als de waarde #N/A is, anders de waarde."), + ("Returns a fallback when the value is an error, otherwise the value.", "Geeft een fallback terug als de waarde een fout is, anders de waarde."), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Retourneert een Key Performance Indicator-eigenschap van een kubus (geen kubusverbindingen; #N/A).", + ), + ( + "Returns a member or tuple from a cube (no cube connections; #N/A).", + "Retourneert een lid of tupel uit een kubus (geen kubusverbindingen; #N/A).", + ), + ( + "Returns a property of a cube member (no cube connections; #N/A).", + "Geeft een eigenschap van een kubuslid terug (geen kubusverbindingen; #N/A).", + ), + ( + "Returns an aggregated value from a cube (no cube connections; #N/A).", + "Retourneert een geaggregeerde waarde van een kubus (geen kubusverbindingen; #N/A).", + ), + ("Returns characters from the middle of a text.", "Geeft tekens uit het midden van een tekst terug."), + ("Returns information about the operating environment.", "Geeft informatie over de besturingsomgeving."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Retourneert één waarde als een voorwaarde TRUE is, en een andere waarde als deze FALSE is.", + ), + ("Returns the #N/A error value.", "Geeft de foutwaarde #N/A terug."), + ("Returns the 1-based position of a value in a row or column.", "Retourneert de op 1 gebaseerde positie van een waarde in een rij of kolom."), + ("Returns the ISO 8601 week number of a date.", "Geeft het ISO 8601 weeknummer van een datum terug."), + ("Returns the Unicode code point of the first character of a text.", "Geeft het Unicode-codepunt van het eerste teken van een tekst terug."), + ("Returns the Windows-1252 code of the first character of a text.", "Geeft de Windows-1252-code van het eerste teken van een tekst terug."), + ("Returns the character for a Unicode code point.", "Geeft het teken terug voor een Unicode-codepunt."), + ("Returns the character for a code from the Windows-1252 character set.", "Geeft het teken terug voor een code uit de Windows-1252-tekenset."), + ("Returns the current date and time.", "Geeft de huidige datum en tijd terug."), + ("Returns the current date.", "Geeft de huidige datum terug."), + ("Returns the date a number of months before or after a date.", "Geeft als resultaat de datum een aantal maanden vóór of na een datum."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Geeft de datum een aantal werkdagen vóór of na een datum terug, met een aangepast weekend.", + ), + ("Returns the date a number of working days before or after a date.", "Geeft de datum terug een aantal werkdagen vóór of na een datum."), + ("Returns the day of the month of a date.", "Geeft de dag van de maand van een datum terug."), + ("Returns the day of the week of a date as a number.", "Geeft de dag van de week van een datum als getal terug."), + ("Returns the distinct rows or columns of an array.", "Geeft de afzonderlijke rijen of kolommen van een array terug."), + ( + "Returns the element, row or column of an array at the given position.", + "Geeft het element, de rij of de kolom van een array op de opgegeven positie terug.", + ), + ( + "Returns the field value of the single record that meets the criteria.", + "Geeft de veldwaarde terug van het enkele record dat aan de criteria voldoet.", + ), + ("Returns the first characters of a text.", "Geeft de eerste tekens van een tekst terug."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Retourneert de fractie van een jaar tussen twee datums op basis van dagentelling.", + ), + ("Returns the hour (0-23) of a time.", "Geeft het uur (0-23) van een tijd terug."), + ("Returns the last characters of a text.", "Geeft de laatste tekens van een tekst terug."), + ("Returns the last day of the month a number of months away.", "Geeft de laatste dag van de maand over een aantal maanden terug."), + ("Returns the logical value FALSE.", "Geeft de logische waarde FALSE terug."), + ("Returns the logical value TRUE.", "Geeft de logische waarde TRUE terug."), + ("Returns the minute (0-59) of a time.", "Geeft de minuut (0-59) van een tijd terug."), + ("Returns the month (1-12) of a date.", "Geeft de maand (1-12) van een datum terug."), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "Geeft het nde lid van een kubusset terug (geen kubusverbindingen; #N/A)."), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Geeft het nummer terug dat een foutwaarde identificeert, of #N/A als het geen fout is.", + ), + ("Returns the number of days between two dates.", "Geeft het aantal dagen tussen twee datums terug."), + ("Returns the phonetic (furigana) text; here the text itself.", "Geeft de fonetische (furigana) tekst terug; hier de tekst zelf."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Geeft de positie van een waarde in een rij of kolom terug met flexibele vergelijkings- en zoekmodi.", + ), + ("Returns the second (0-59) of a time.", "Geeft de seconde (0-59) van een tijd terug."), + ("Returns the text that comes after a delimiter.", "Geeft de tekst terug die na een scheidingsteken komt."), + ("Returns the text that comes before a delimiter.", "Geeft de tekst terug die vóór een scheidingsteken staat."), + ("Returns the value if it is text, otherwise empty text.", "Geeft de waarde terug als het tekst is, anders lege tekst."), + ("Returns the value paired with the first condition that is TRUE.", "Geeft de waarde terug die hoort bij de eerste voorwaarde die TRUE is."), + ("Returns the week number of a date within its year.", "Geeft het weeknummer van een datum binnen het jaartal terug."), + ("Returns the year of a date.", "Geeft het jaartal van een datum terug."), + ("Reverses a logical value.", "Keert een logische waarde om."), + ("Right-tailed F probability.", "Rechtszijdige F-waarschijnlijkheid."), + ("Right-tailed Student's t probability.", "Rechtszijdige kans van de t-verdeling van Student."), + ("Right-tailed chi-squared probability.", "Rechtszijdige chikwadraat-waarschijnlijkheid."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Rondt een getal af en formatteert het als tekst met vaste decimalen en optionele scheidingstekens voor duizendtallen.", + ), + ("Rounds a number away from zero to a given number of digits.", "Rondt een getal van nul af op het opgegeven aantal cijfers."), + ("Rounds a number down to a multiple of significance.", "Rondt een getal naar beneden af op een veelvoud van de opgegeven stapgrootte."), + ("Rounds a number down to the nearest integer or multiple.", "Rondt een getal naar beneden af op het dichtstbijzijnde gehele getal of veelvoud."), + ("Rounds a number down to the nearest integer.", "Rondt een getal naar beneden af op het dichtstbijzijnde gehele getal."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Rondt een getal af op het opgegeven aantal cijfers; exacte halve waarden worden van nul af afgerond.", + ), + ("Rounds a number to the nearest multiple.", "Rondt een getal af op het dichtstbijzijnde veelvoud."), + ("Rounds a number toward negative infinity to a multiple.", "Rondt een getal naar negatief oneindig af op een veelvoud."), + ("Rounds a number toward positive infinity to a multiple.", "Rondt een getal naar positief oneindig af op een veelvoud."), + ("Rounds a number toward zero to a given number of digits.", "Rondt een getal naar nul af op een bepaald aantal cijfers."), + ("Rounds a number up to a multiple of significance.", "Rondt een getal naar boven af op een veelvoud van de opgegeven stapgrootte."), + ("Rounds a number up to the nearest integer or multiple.", "Rondt een getal naar boven af op het dichtstbijzijnde gehele getal of veelvoud."), + ("Rounds away from zero to the nearest even integer.", "Rondt van nul af op het dichtstbijzijnde even gehele getal."), + ("Rounds away from zero to the nearest odd integer.", "Rondt van nul af op het dichtstbijzijnde oneven gehele getal."), + ("Row number of a reference.", "Rijnummer van een referentie."), + ("Running accumulation of an array.", "Voortschrijdende accumulatie van een array."), + ("Sample covariance of paired values.", "Steekproefcovariantie van gepaarde waarden."), + ("Sample skewness.", "Scheefheid van een steekproef."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Standaardafwijking van een steekproef waarbij tekst als 0 en logische waarden als 1/0 meetellen.", + ), + ("Sample standard deviation of a field over the matching records.", "Steekproefstandaardafwijking van een veld over de overeenkomende records."), + ("Sample standard deviation.", "Standaardafwijking van een steekproef."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Steekproefvariantie waarbij tekst als 0 en logische waarden als 1/0 meetellen."), + ("Sample variance of a field over the matching records.", "Steekproefvariantie van een veld over de overeenkomende records."), + ("Sample variance.", "Steekproefvariantie."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Zoekt in een rij of kolom en geeft het overeenkomende item, de rij of kolom uit een andere matrix terug.", + ), + ("Secant of a complex number.", "Secans van een complex getal."), + ("Secant of an angle in radians.", "Secans van een hoek in radialen."), + ("Sheet number.", "Bladnummer."), + ( + "Shifts the bits of a number left (right for negative shifts).", + "Verschuift de bits van een getal naar links (rechts voor negatieve verschuivingen).", + ), + ( + "Shifts the bits of a number right (left for negative shifts).", + "Verschuift de bits van een getal naar rechts (links voor negatieve verschuivingen).", + ), + ("Sine of a complex number.", "Sinus van een complex getal."), + ("Sine of an angle in radians.", "Sinus van een hoek in radialen."), + ("Slope of the least-squares regression line.", "Helling van de regressielijn met de kleinste kwadraten."), + ("Smallest number (0 when there are none).", "Kleinste getal (0 als er geen zijn)."), + ("Smallest number in a field of the matching records.", "Kleinste getal in een veld van de overeenkomende records."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Kleinste succestelling waarvan de cumulatieve binomiale waarschijnlijkheid alfa bereikt.", + ), + ("Smallest value among cells that meet every condition.", "Kleinste waarde onder spreadsheetcellen die aan alle voorwaarden voldoen."), + ("Smallest value counting text as 0 and logicals as 1/0.", "Kleinste waarde, tekst telt als 0 en logica als 1/0."), + ("Sorts an array by the values of other arrays of matching size.", "Sorteert een array op de waarden van andere arrays met dezelfde grootte."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Sorteert de rijen (of kolommen) van een array op een of meer kolommen.", + ), + ("Spells out a number in Thai words with Baht.", "Schrijft een getal uit in Thaise woorden met Baht."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Splits tekst in een raster van kolommen en rijen met de opgegeven scheidingstekens.", + ), + ("Square of the correlation coefficient.", "Kwadraat van de correlatiecoëfficiënt."), + ("Square root of a complex number.", "Vierkantswortel van een complex getal."), + ("Square root of the number times pi.", "Vierkantswortel van het getal maal pi."), + ("Stacks arrays on top of each other.", "Stapelt arrays op elkaar."), + ("Standard error of predicted y values in a regression.", "Standaardfout van voorspelde y-waarden in een regressie."), + ("Standard normal cumulative probability.", "Standaard normale cumulatieve waarschijnlijkheid."), + ("Standard normal density or cumulative probability.", "Standaard normale dichtheid of cumulatieve waarschijnlijkheid."), + ("Standard normal density.", "Standaard normale dichtheid."), + ("Straight-line depreciation for one period.", "Lineaire afschrijving gedurende één periode."), + ("Student's t density or left-tailed probability.", "Student's t-dichtheid of linkszijdige waarschijnlijkheid."), + ("Sum of a power series.", "Som van een machtreeks."), + ("Sum of complex numbers.", "Som van complexe getallen."), + ("Sum of squared deviations from the mean.", "Som van de gekwadrateerde afwijkingen van het gemiddelde."), + ("Sum-of-years'-digits depreciation for a period.", "Som van jaren-cijfers afschrijving voor een periode."), + ("Sums the differences of squares of matching elements.", "Telt de verschillen op tussen kwadraten van overeenkomende elementen."), + ("Sums the squared differences of matching elements.", "Telt de gekwadrateerde verschillen van overeenkomende elementen op."), + ("Sums the sums of squares of matching elements.", "Telt de som van de kwadraten van overeenkomende elementen op."), + ("Swaps the rows and columns of an array.", "Verwisselt de rijen en kolommen van een array."), + ("TRUE for references.", "TRUE voor referenties."), + ("TRUE when a LAMBDA argument was left out.", "TRUE wanneer een LAMBDA-argument werd weggelaten."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE wanneer een reguliere expressie ergens in de tekst overeenkomt."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE wanneer een oneven aantal argumenten TRUE is."), + ("TRUE when at least one argument is TRUE.", "TRUE wanneer ten minste één argument TRUE is."), + ("TRUE when every argument is TRUE.", "TRUE wanneer elk argument TRUE is."), + ("TRUE when the cell has a formula.", "TRUE wanneer de cel een formule bevat."), + ("TRUE when the integer part of a number is even.", "TRUE wanneer het gehele deel van een getal even is."), + ("TRUE when the integer part of a number is odd.", "TRUE wanneer het gehele deel van een getal oneven is."), + ("TRUE when the value is TRUE or FALSE.", "TRUE wanneer de waarde TRUE of FALSE is."), + ("TRUE when the value is a number.", "TRUE wanneer de waarde een getal is."), + ("TRUE when the value is any error other than #N/A.", "TRUE wanneer de waarde een andere fout is dan #N/A."), + ("TRUE when the value is any error.", "TRUE als de waarde een fout is."), + ("TRUE when the value is anything other than text.", "TRUE wanneer de waarde iets anders is dan tekst."), + ("TRUE when the value is text.", "TRUE wanneer de waarde tekst is."), + ("TRUE when the value is the #N/A error.", "TRUE wanneer de waarde de #N/A-fout is."), + ("TRUE when the value refers to an empty cell.", "TRUE wanneer de waarde verwijst naar een lege cel."), + ("TRUE when two texts are identical, including case.", "TRUE wanneer twee teksten identiek zijn, inclusief hoofdlettergebruik."), + ("Tangent of a complex number.", "Tangens van een complex getal."), + ("Tangent of an angle in radians.", "Tangens van een hoek in radialen."), + ("The constant pi to 15 digits.", "De constante pi tot 15 cijfers."), + ("The formula of a cell as text.", "De formule van een cel als tekst."), + ("The gamma function.", "De gammafunctie."), + ("The k-th largest number in a data set.", "Het k-de grootste getal in een dataset."), + ("The k-th smallest number in a data set.", "Het k-de kleinste getal in een dataset."), + ("The reference named by a text string.", "De referentie genoemd door een tekstreeks."), + ("The sum of a subset as a fraction of the sum of all the values.", "De som van een deelverzameling als fractie van de som van alle waarden."), + ("Total interest paid between two periods.", "Totaal betaalde rente tussen twee perioden."), + ("Total principal repaid between two periods.", "Totale hoofdsom afgelost tussen twee periodes."), + ("Two-tailed Student's t probability.", "Tweezijdige kans van de t-verdeling van Student."), + ("Two-tailed inverse of Student's t distribution.", "Tweezijdige inverse van Student's t-verdeling."), + ("Two-tailed p-value of an F-test for equality of variances.", "Tweezijdige p-waarde van een F-toets op gelijkheid van varianties."), + ("Values along a fitted exponential growth curve.", "Waarden langs een aangepaste exponentiële groeicurve."), + ("Values along a least-squares linear fit.", "Waarden langs een lineaire aanpassing met de kleinste kwadraten."), + ("Vertical array of all the most frequent numbers.", "Verticale reeks van de meest voorkomende nummers."), + ("Weibull density or probability.", "Weibull-dichtheid of waarschijnlijkheid."), + ("Writes a number in another base, padded with zeros.", "Schrijft een getal in een ander grondtal, opgevuld met nullen."), + ("Y-intercept of the least-squares regression line.", "Y-snijpunt van de regressielijn met de kleinste kwadraten."), + ("Yield of a Treasury bill.", "Rendement van een schatkistpapier."), + ("Yield of a security paying periodic interest.", "Rendement van een effect met periodieke rente."), + ("Yield of a security with an odd first period.", "Rendement van een effect met een onregelmatige eerste renteperiode."), + ("Yield of a security with an odd last period.", "Rendement van een effect met een onregelmatige laatste rentetermijn."), + ("Z-score of a value.", "Z-score van een waarde."), + ("e raised to the given power.", "e verheven tot de gegeven macht."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-de percentiel, k van 0 tot en met 1."), + ("k-th percentile, k strictly between 0 and 1.", "k-de percentiel, k strikt tussen 0 en 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "referentietype"), + ("actual_range", "feitelijk_bereik"), + ("aggregation", "aggregatie"), + ("alpha", "alfa"), + ("angle", "hoek"), + ("area_num", "gebiedsnummer"), + ("argument", "argument"), + ("array", "array"), + ("array_x", "matrix_met_x_waarden"), + ("array_y", "array_met_y_waarden"), + ("average_range", "bereik_voor_gemiddelde"), + ("base", "basis"), + ("basis", "basis"), + ("beta", "bèta"), + ("bins_array", "array_met_bingrenzen"), + ("bottom", "ondergrens"), + ("by_array", "sorteersleutelarray"), + ("by_col", "per_kolom"), + ("calc_method", "berekeningsmethode"), + ("calculation", "berekening"), + ("caption", "onderschrift"), + ("case_sensitivity", "hoofdlettergevoeligheid"), + ("coefficients", "coëfficiënten"), + ("col_delimiter", "col_scheidingsteken"), + ("col_fields", "kolomvelden"), + ("col_index_num", "kolomindex"), + ("col_num", "kolomnummer"), + ("col_sort_order", "kolomsorteervolgorde"), + ("col_total_depth", "totale_diepte_van_de_kolom"), + ("cols", "kolomtelling"), + ("column_num", "kolomnummer"), + ("columns", "kolomtelling"), + ("confidence_level", "betrouwbaarheidsniveau"), + ("connection", "gegevensverbinding"), + ("const", "constante"), + ("cost", "initiële_kosten"), + ("coupon", "couponbetaling"), + ("criteria", "criteria"), + ("criteria_range", "criteriumbereik"), + ("cumulative", "cumulatieve_verdeling"), + ("data_all", "gegevens_allemaal"), + ("data_array", "gegevensarray"), + ("data_completion", "gegevensaanvulling"), + ("data_subset", "gegevenssubset"), + ("database", "database"), + ("date", "datum"), + ("date_purchased", "aankoopdatum"), + ("date_text", "datum_geschreven_als_tekst"), + ("dates", "data"), + ("day", "dag"), + ("days", "dagen"), + ("decimal_dollar", "decimale_prijs"), + ("decimal_separator", "decimaal_scheidingsteken"), + ("decimals", "decimalen"), + ("default_or_value", "standaard_of_waarde"), + ("deg_freedom", "vrijheidsgraden"), + ("delimiter", "scheidingsteken"), + ("denominator", "noemer"), + ("dimension", "dimensie"), + ("discount", "discontovoet"), + ("divisor", "deler"), + ("effect_rate", "effectieve_rente"), + ("end_date", "einddatum"), + ("end_period", "eindperiode"), + ("error_val", "foutwaarde"), + ("exactly_once", "precies_één_keer"), + ("expected_range", "verwacht_bereik"), + ("expression", "expressie"), + ("factor", "factor"), + ("field", "databaseveld"), + ("field_headers", "veldkoppen"), + ("field_relationship", "relatie_tussen_velden"), + ("filter_array", "filterarray"), + ("finance_rate", "financieringsrente"), + ("find_text", "tekst_zoeken"), + ("first_coupon", "eerste_betaaldatum_van_de_coupon"), + ("first_interest", "eerste_rentebetalingsdatum"), + ("first_period", "einddatum_eerste_periode"), + ("form", "vorm"), + ("format", "formaat"), + ("format_text", "opmaakcode"), + ("fraction", "fractie"), + ("fractional_dollar", "fractionele_prijs"), + ("frequency", "betalingsfrequentie_van_coupons"), + ("friendly_name", "beschrijvende_naam"), + ("from_unit", "bronmeeteenheid"), + ("full_precision", "volledige_precisie"), + ("function", "functie"), + ("function_num", "functienummer"), + ("fv", "toekomstige_waarde"), + ("group_separator", "groepsscheidingsteken"), + ("guess", "schatting"), + ("height", "hoogte"), + ("holidays", "feestdagen"), + ("hour", "uur"), + ("i_num", "denkbeeldige_coëfficiënt"), + ("if_empty", "indien_leeg"), + ("if_not_found", "indien_niet_gevonden"), + ("ignore", "negeren"), + ("ignore_empty", "negeren_leeg"), + ("include", "opnemen"), + ("index_num", "indexnummer"), + ("info_type", "informatietype"), + ("initial_value", "initiële_waarde"), + ("instance_num", "gebeurtenisnummer"), + ("inumber", "complex_getal"), + ("investment", "investering"), + ("issue", "uitgiftedatum"), + ("k", "k"), + ("known_xs", "bekende_x_waarden"), + ("known_ys", "bekende_y_waarden"), + ("kpi_name", "naam_van_de_belangrijkste_prestatie_indicator"), + ("kpi_property", "eigenschap_van_de_belangrijkste_prestatie_indicator"), + ("lambda", "lambda"), + ("last_interest", "laatste_rentebetalingsdatum"), + ("life", "levensduur"), + ("link_location", "linklocatie"), + ("logical", "logische_waarde"), + ("logical_test", "logische_voorwaarde"), + ("lookup_array", "zoekmatrix"), + ("lookup_value", "zoekwaarde"), + ("lookup_vector", "opzoekvector"), + ("lower_limit", "ondergrens"), + ("m", "m"), + ("match_end", "teksteinde_als_scheidingsteken"), + ("match_mode", "overeenkomstmodus"), + ("match_type", "matchingsmethode"), + ("maturity", "vervaldatum"), + ("max", "maximaal"), + ("max_range", "maximumwaardebereik"), + ("mean", "rekenkundig_gemiddelde"), + ("member_expression", "kubuslidexpressie"), + ("method", "methode"), + ("min", "minimaal"), + ("min_length", "min_lengte"), + ("min_range", "minimumwaardebereik"), + ("minute", "minuut"), + ("mode", "berekeningsmodus"), + ("month", "maand"), + ("months", "maanden"), + ("multiple", "veelvoud"), + ("n", "n"), + ("name", "naam"), + ("new_text", "nieuwe_tekst"), + ("new_xs", "nieuwe_x_waarden"), + ("no_commas", "laat_cijfergroepscheidingstekens_weg"), + ("no_switch", "Wissel_niet_van_afschrijvingsmethode"), + ("nominal_rate", "nominale_rente"), + ("nper", "aantal_perioden"), + ("npery", "periodes_per_jaar"), + ("num_bytes", "aantal_bytes"), + ("num_chars", "aantal_tekens"), + ("num_digits", "aantal_cijfers"), + ("number", "getal"), + ("number_chosen", "aantal_gekozen"), + ("number_f", "aantal_mislukkingen"), + ("number_pop", "populatieomvang"), + ("number_s", "aantal_successen"), + ("number_sample", "steekproefomvang"), + ("number_times", "aantal_herhalingen"), + ("numerator", "teller"), + ("occurrence", "gebeurtenis"), + ("old_text", "oude_tekst"), + ("options", "opties"), + ("order", "rangschikkingsvolgorde"), + ("pad_with", "opvullen_met"), + ("par", "nominale_waarde"), + ("parameter", "parameter"), + ("pattern", "patroon_voor_reguliere_expressies"), + ("per", "periode"), + ("percent", "procent"), + ("period", "periode"), + ("places", "aantal_uitgangscijfers"), + ("pmt", "betaling"), + ("population_s", "aantal_successen_in_populatie"), + ("power", "macht"), + ("pr", "prijs"), + ("principal", "hoofdsom"), + ("prob_range", "kansbereik"), + ("probability", "waarschijnlijkheid"), + ("probability_s", "kans_op_succes"), + ("property", "eigenschapsnaam"), + ("pv", "contante_waarde"), + ("quart", "kwartielindex"), + ("radix", "grondtal"), + ("range", "bereik"), + ("range_lookup", "bereik_opzoeken"), + ("rank", "rang"), + ("rate", "rente_disconto_of_afschrijvingspercentage"), + ("real_num", "reële_coëfficiënt"), + ("redemption", "aflossingswaarde"), + ("ref", "referentie"), + ("ref_text", "referentietekst"), + ("reference", "verwijzing"), + ("reinvest_rate", "herbeleggingsrente"), + ("relative_to", "relatief_ten_opzichte_van"), + ("replacement", "vervanging"), + ("result", "resultaat"), + ("result_vector", "resultaatvector"), + ("return_array", "resultaatmatrix"), + ("return_mode", "retourmodus"), + ("return_type", "retourtype"), + ("row_delimiter", "rijscheidingsteken"), + ("row_fields", "rijvelden"), + ("row_index_num", "rijindex"), + ("row_num", "rijnummer"), + ("row_sort_order", "rijsorteervolgorde"), + ("row_total_depth", "rij_totale_diepte"), + ("rows", "rijtelling"), + ("salvage", "restwaarde"), + ("sample_s", "aantal_successen_in_steekproef"), + ("scan_by_column", "scannen_per_kolom"), + ("schedule", "schema"), + ("search_mode", "zoekmodus"), + ("seasonality", "seizoensinvloeden"), + ("second", "seconde"), + ("serial_number", "serienummer"), + ("set", "set_kubusleden"), + ("set_expression", "expressie_van_kubusledenset"), + ("settlement", "afwikkelingsdatum"), + ("sheet_text", "bladtekst"), + ("shift_amount", "aantal_bitverschuivingen"), + ("sigma", "sigma"), + ("significance", "afrondingsstap_of_precisie"), + ("size", "maat"), + ("sort_by", "sorteren_op"), + ("sort_index", "sorteerindex"), + ("sort_order", "sorteervolgorde"), + ("source", "bron"), + ("standard_dev", "standaardafwijking"), + ("start", "startwaarde"), + ("start_date", "startdatum"), + ("start_num", "startpositie"), + ("start_period", "startperiode"), + ("statistic_type", "statistiektype"), + ("stats", "statistieken"), + ("step", "stap"), + ("suffix", "achtervoegsel"), + ("sum_range", "sombereik"), + ("table_array", "tabelarray"), + ("tails", "aantal_distributiestaarten"), + ("target", "doel"), + ("target_date", "streefdatum"), + ("text", "tekst"), + ("time_text", "tijd_geschreven_als_tekst"), + ("timeline", "tijdlijn"), + ("to_unit", "doelmeeteenheid"), + ("top", "bovengrens"), + ("total_depth", "totale_diepte"), + ("trials", "aantal_proeven"), + ("triangulation_precision", "triangulatieprecisie"), + ("trim_cols", "modus_voor_het_bijsnijden_van_kolommen"), + ("trim_rows", "rijenbijsnijdmodus"), + ("type", "type"), + ("type_text", "naam_van_het_gegevenstype"), + ("unit", "meeteenheid"), + ("upper_limit", "bovengrens"), + ("url", "URL"), + ("value", "waarde"), + ("value_if_error", "resultaat_in_geval_van_een_fout"), + ("value_if_false", "resultaat_als_voorwaarde_onwaar_is"), + ("value_if_na", "resultaat_voor_de_niet_beschikbare_fout"), + ("value_if_true", "resultaat_wanneer_voorwaarde_waar_is"), + ("values", "invoerwaarden"), + ("vector", "vector"), + ("weekend", "weekend"), + ("whole_number", "geheel_getal"), + ("width", "breedte"), + ("within_text", "tekst_om_in_te_zoeken"), + ("wrap_count", "aantal_waarden_per_rij_of_kolom"), + ("x", "x"), + ("x_num", "x_coördinaat"), + ("x_range", "x_bereik"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "y_coördinaat"), + ("year", "jaar"), + ("yld", "beleggingsrendement"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/pl.rs b/crates/ui-egui/src/i18n/pl.rs index 29264ce916..e953924227 100644 --- a/crates/ui-egui/src/i18n/pl.rs +++ b/crates/ui-egui/src/i18n/pl.rs @@ -1,6 +1,468 @@ /// Returns the Polish translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Borders|None" => "Brak", + "Report Layout|Outline" => "Konspekt", + "Shapes|Line" => "Linia", + "Cut (⌘X)" => "Wytnij (⌘X)", + "Copy (⌘C)" => "Kopiuj (⌘C)", + "Bold (⌘B)" => "Pogrubienie (⌘B)", + "Italic (⌘I)" => "Kursywa (⌘I)", + "Underline (⌘U)" => "Podkreślenie (⌘U)", + "AutoSum (⌘⇧T)" => "Autosumowanie (⌘⇧T)", + "Filter (⌘⇧F)" => "Filtr (⌘⇧F)", + "Flash Fill (⌘E)" => "Wypełnianie błyskawiczne (⌘E)", + "Insert Link (⌘K)" => "Wstaw link (⌘K)", + "Paste (⌘V)" => "Wklej (⌘V)", + "Redo (⌘Y)" => "Wykonaj ponownie (⌘Y)", + "Save (⌘S)" => "Zapisz (⌘S)", + "Search commands (⌘⇧Space)" => "Wyszukaj polecenia (⌘⇧Space)", + "Table (⌘T)" => "Tabela (⌘T)", + "Undo (⌘Z)" => "Cofnij (⌘Z)", + "Hidden:" => "Ukryte:", + "(Blanks)" => "(Puste)", + "(Select All)" => "(Zaznacz wszystko)", + "(Select All Search Results)" => "(Zaznacz wszystkie wyniki wyszukiwania)", + "Search" => "Wyszukaj", + "Apply" => "Zastosuj", + "Click once to follow. Click and hold to select this cell." => "Kliknij raz, aby przejść. Kliknij i przytrzymaj, aby zaznaczyć tę komórkę.", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "Przeciągnij, aby wypełnić komórki. Przeciągnij od środka komórki, aby zaznaczyć zakres." + } + "Width: {size} ({px} pixels)" => "Szerokość: {size} ({px} pikseli)", + "Height: {size} ({px} pixels)" => "Wysokość: {size} ({px} pikseli)", + "Hyperlink" => "Hiperłącze", + "Open Hyperlink" => "Otwórz hiperłącze", + "Page" => "Strona", + "Page 1" => "Strona 1", + "Page 1 of ?" => "Strona 1 z ?", + "Picture in cell" => "Obraz w komórce", + "Rename" => "Zmień nazwę", + "Move or Copy…" => "Przenieś lub kopiuj…", + "Duplicate" => "Duplikuj", + "Tab Color" => "Kolor karty", + "No Color" => "Brak koloru", + "Unhide…" => "Odkryj…", + "Unprotect Sheet…" => "Nie chroń arkusza…", + "Select All Sheets" => "Zaznacz wszystkie arkusze", + "All sheets" => "Wszystkie arkusze", + "Sum: {n}" => "Suma: {n}", + "Count: {n}" => "Licznik: {n}", + "Average: {n}" => "Średnia: {n}", + "Numerical Count: {n}" => "Licznik wartości liczbowych: {n}", + "Minimum: {n}" => "Minimum: {n}", + "Maximum: {n}" => "Maksimum: {n}", + "Numerical Count" => "Licznik wartości liczbowych", + "Minimum" => "Minimum", + "Maximum" => "Maksimum", + "Circular References:" => "Odwołania cykliczne:", + "Macros preserved (not executed)" => "Makra zachowane (nieuruchamiane)", + "Page Break Preview" => "Podgląd podziału stron", + "Can't Undo" => "Nie można cofnąć", + "New Workbook" => "Nowy skoroszyt", + "Save As…" => "Zapisz jako…", + "Print…" => "Drukuj…", + "Export as PDF…" => "Eksportuj jako PDF…", + "Export as CSV…" => "Eksportuj jako CSV…", + "Export as Web Page (.html)…" => "Eksportuj jako stronę sieci Web (.html)…", + "Save a Copy as Excel Workbook (.xlsx)…" => "Zapisz kopię jako skoroszyt programu Excel (.xlsx)…", + "AutoSave: save after every change (workbooks saved to a file)" => "Autozapis: zapisuj po każdej zmianie (skoroszyty zapisane w pliku)", + "Exporting needs a file picker, which this window doesn't have." => "Eksportowanie wymaga okna wyboru pliku, którego to okno nie ma.", + "Printer" => "Drukarka", + "Select a printer" => "Wybierz drukarkę", + "Refresh printers" => "Odśwież listę drukarek", + "Copies" => "Kopie", + "Two-sided printing" => "Drukowanie dwustronne", + "Printer default" => "Ustawienie domyślne drukarki", + "One-sided" => "Jednostronnie", + "Two-sided: long edge" => "Dwustronnie: wzdłuż dłuższej krawędzi", + "Two-sided: short edge" => "Dwustronnie: wzdłuż krótszej krawędzi", + "Grayscale" => "Skala szarości", + "Finding printers…" => "Wyszukiwanie drukarek…", + "No printers found. Configure a system printer or export a PDF." => { + "Nie znaleziono drukarek. Skonfiguruj drukarkę w systemie lub wyeksportuj plik PDF." + } + "Printer discovery failed." => "Nie udało się wyszukać drukarek.", + "Submitting print job…" => "Wysyłanie zadania drukowania…", + "Print job submitted." => "Wysłano zadanie drukowania.", + "Print job submitted: {receipt}" => "Wysłano zadanie drukowania: {receipt}", + "Print failed: {error}" => "Drukowanie nie powiodło się: {error}", + "Print failed: the printing worker stopped." => "Drukowanie nie powiodło się: proces drukowania został zatrzymany.", + "A print job is already being submitted." => "Zadanie drukowania jest już wysyłane.", + "Select an available printer in File > Print before submitting." => "Przed wysłaniem wybierz dostępną drukarkę w obszarze Plik > Drukuj.", + "The print command did not produce a PDF." => "Polecenie drukowania nie utworzyło pliku PDF.", + "Couldn't decode the generated PDF." => "Nie udało się odczytać utworzonego pliku PDF.", + "Printing is unavailable here; export a PDF instead." => "Drukowanie jest tu niedostępne; zamiast tego wyeksportuj plik PDF.", + "Print Settings" => "Ustawienia drukowania", + "Submit Print Job" => "Wyślij zadanie drukowania", + "Border presets" => "Gotowe obramowania", + "Border preview" => "Podgląd obramowania", + "Preview" => "Podgląd", + "Bottom Border" => "Krawędź dolna", + "Top Border" => "Krawędź górna", + "Left Border" => "Krawędź lewa", + "Right Border" => "Krawędź prawa", + "No Border" => "Bez krawędzi", + "All Borders" => "Wszystkie krawędzie", + "Outside Borders" => "Krawędzie zewnętrzne", + "Thick Outside Borders" => "Grube krawędzie zewnętrzne", + "Bottom Double Border" => "Podwójna krawędź dolna", + "Thick Bottom Border" => "Gruba krawędź dolna", + "Top and Bottom Border" => "Krawędź górna i dolna", + "Top and Thick Bottom Border" => "Krawędź górna i gruba dolna", + "Top and Double Bottom Border" => "Krawędź górna i podwójna dolna", + "Inside Borders" => "Krawędzie wewnętrzne", + "More Borders…" => "Więcej obramowań…", + "No Fill" => "Brak wypełnienia", + "Theme Colors" => "Kolory motywu", + "Standard Colors" => "Kolory standardowe", + "Highlight Cells Rules" => "Reguły wyróżniania komórek", + "Greater Than…" => "Większe niż…", + "Less Than…" => "Mniejsze niż…", + "Between…" => "Między…", + "Equal To…" => "Równe…", + "Text that Contains" => "Tekst, który zawiera", + "Text that Contains…" => "Tekst, który zawiera…", + "A Date Occurring" => "Data występująca", + "A Date Occurring…" => "Data występująca…", + "Duplicate Values…" => "Duplikujące się wartości…", + "Top/Bottom Rules" => "Reguły pierwszych/ostatnich", + "Blue" => "Niebieski", + "Green" => "Zielony", + "Red" => "Czerwony", + "Orange" => "Pomarańczowy", + "Light Blue" => "Jasnoniebieski", + "Purple" => "Fioletowy", + "Green - Yellow - Red" => "Zielony - żółty - czerwony", + "Red - Yellow - Green" => "Czerwony - żółty - zielony", + "Green - White - Red" => "Zielony - biały - czerwony", + "Blue - White - Red" => "Niebieski - biały - czerwony", + "White - Green" => "Biały - zielony", + "White - Red" => "Biały - czerwony", + "New Rule…" => "Nowa reguła…", + "New Formatting Rule" => "Nowa reguła formatowania", + "Clear Rules" => "Wyczyść reguły", + "Manage Rules…" => "Zarządzaj regułami…", + "Medium" => "Średni", + "Header Row" => "Wiersz nagłówka", + "Total Row" => "Wiersz sumy", + "Banded Rows" => "Wiersze naprzemienne", + "First Column" => "Pierwsza kolumna", + "Last Column" => "Ostatnia kolumna", + "Banded Columns" => "Kolumny naprzemienne", + "Table Name:" => "Nazwa tabeli:", + "Good, Bad and Neutral" => "Dobry, zły i neutralny", + "Good" => "Dobry", + "Bad" => "Zły", + "Neutral" => "Neutralny", + "Data and Model" => "Dane i model", + "Calculation" => "Obliczenia", + "Check Cell" => "Komórka do sprawdzenia", + "Explanatory Text" => "Tekst objaśniający", + "Input" => "Dane wejściowe", + "Linked Cell" => "Komórka połączona", + "Note" => "Uwaga", + "Output" => "Dane wyjściowe", + "Warning Text" => "Tekst ostrzegawczy", + "Titles and Headings" => "Tytuły i nagłówki", + "Heading 1" => "Nagłówek 1", + "Heading 2" => "Nagłówek 2", + "Heading 3" => "Nagłówek 3", + "Heading 4" => "Nagłówek 4", + "Total" => "Suma", + "Themed Cell Styles" => "Style komórki z motywem", + "Accent" => "Akcent", + "Accent1" => "Akcent1", + "Accent2" => "Akcent2", + "Accent3" => "Akcent3", + "Accent4" => "Akcent4", + "Accent5" => "Akcent5", + "Accent6" => "Akcent6", + "Number Format" => "Format liczb", + "Comma [0]" => "Dziesiętny [0]", + "Currency [0]" => "Walutowy [0]", + "Percent" => "Procentowy", + "Place in Cell" => "Umieść w komórce", + "Place over Cells" => "Umieść na komórkach", + "Rectangle" => "Prostokąt", + "Rounded Rectangle" => "Prostokąt zaokrąglony", + "Oval" => "Owal", + "Triangle" => "Trójkąt", + "Arrow" => "Strzałka", + "Column" => "Kolumnowy", + "Bar" => "Słupkowy", + "Stacked" => "Skumulowany", + "Bubble" => "Bąbelkowy", + "Box & Whisker" => "Pudełkowy", + "Treemap" => "Mapa drzewa", + "Sunburst" => "Pierścieniowy wielopoziomowy", + "Stock" => "Giełdowy", + "Win/Loss" => "Zysk/strata", + "More Functions…" => "Więcej funkcji…", + "No comments on this sheet yet. Select a cell and choose New Comment." => { + "Ten arkusz nie ma jeszcze komentarzy. Zaznacz komórkę i wybierz polecenie Nowy komentarz." + } + "Resolved" => "Rozwiązany", + "Resolve" => "Rozwiąż", + "Reopen" => "Otwórz ponownie", + "Reply…" => "Odpowiedz…", + "Send" => "Wyślij", + "Add Watch (active cell)" => "Dodaj czujkę (aktywna komórka)", + "Cell" => "Komórka", + "Formula" => "Formuła", + "Selection" => "Zaznaczenie", + "There are no shapes, pictures or charts on this sheet." => "W tym arkuszu nie ma kształtów, obrazów ani wykresów.", + "Bring Forward" => "Przesuń do przodu", + "Send Backward" => "Przesuń do tyłu", + "Format Chart Area" => "Formatuj obszar wykresu", + "Select a chart to format it." => "Zaznacz wykres, aby go sformatować.", + "The chart no longer exists." => "Ten wykres już nie istnieje.", + "Chart Type" => "Typ wykresu", + "Legend" => "Legenda", + "Elements" => "Elementy", + "Data Labels" => "Etykiety danych", + "Fill…" => "Wypełnienie…", + "Colors & Layout" => "Kolory i układ", + "Layout" => "Układ", + "Width" => "Szerokość", + "Height" => "Wysokość", + "Source:" => "Źródło:", + "Start date:" => "Data początkowa:", + "End date:" => "Data końcowa:", + "Date:" => "Data:", + "Start time:" => "Godzina początkowa:", + "End time:" => "Godzina końcowa:", + "Time:" => "Godzina:", + "Minimum:" => "Minimum:", + "Value:" => "Wartość:", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "Nagłówek (&L lewa, &C środek, &R prawa; &P strona, &N liczba stron, &D data, &A arkusz):" + } + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Początek prognozy (data lub liczba z historii; puste: po ostatnim punkcie):" + } + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Chroń skoroszyt pod względem: Struktura (arkuszy nie można dodawać, przenosić, zmieniać ich nazw, ukrywać ani usuwać)." + } + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet)." => { + "Zablokowanie komórek lub ukrycie formuł zadziała dopiero po włączeniu ochrony arkusza (Recenzja › Chroń arkusz)." + } + "Return to the original worksheet to insert this picture, or cancel and choose another cell." => { + "Wróć do pierwotnego arkusza, aby wstawić ten obraz, lub anuluj i wybierz inną komórkę." + } + "Simplex LP" => "Simplex LP", + "Evolutionary" => "Ewolucyjna", + "Simplex LP: for linear models; integer and binary constraints by branch and bound." => { + "Simplex LP: dla modeli liniowych; ograniczenia całkowitoliczbowe i binarne metodą podziału i ograniczeń." + } + "Evolutionary: a genetic search for models that aren't smooth; every variable cell needs bounds." => { + "Ewolucyjna: wyszukiwanie genetyczne dla modeli, które nie są gładkie; każda komórka zmiennej wymaga granic." + } + "GRG Nonlinear: a local optimum of a smooth model, from the current values." => { + "GRG nieliniowa: optimum lokalne gładkiego modelu, począwszy od bieżących wartości." + } + "Reports:" => "Raporty:", + "Answer" => "Wyniki", + "Limits" => "Granice", + "GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:" => { + "GridCraft można w pełni sterować za pomocą agentów. Każda pozycja menu, przycisk i gest to polecenie:" + } + "A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft." => { + "Arkusz kalkulacyjny o otwartym kodzie, napisany od podstaw w języku Rust. Część ArtCraft." + } + "Automation in this workbook. GridCraft runs its own scripts; a file's VBA project is preserved but not executed." => { + "Automatyzacja w tym skoroszycie. GridCraft uruchamia własne skrypty; projekt VBA z pliku jest zachowywany, ale nie jest uruchamiany." + } + "This workbook contains VBA macros. GridCraft keeps them intact when you save, but does not run them." => { + "Ten skoroszyt zawiera makra VBA. GridCraft zachowuje je bez zmian przy zapisie, ale ich nie uruchamia." + } + "This workbook's VBA macros could not be loaded and were dropped, so they will not be in the saved file. Keep the original file." => { + "Nie udało się wczytać makr VBA tego skoroszytu i zostały pominięte, więc nie będzie ich w zapisanym pliku. Zachowaj oryginalny plik." + } + "This workbook contains VBA macros. GridCraft keeps them when you save as .xlsm, but does not run them." => { + "Ten skoroszyt zawiera makra VBA. GridCraft zachowuje je przy zapisie jako .xlsm, ale ich nie uruchamia." + } + "What this means" => "Co to oznacza", + "The cell or chart you're trying to change is on a protected sheet." => { + "Komórka lub wykres, który próbujesz zmienić, znajduje się w chronionym arkuszu." + } + "The text box's worksheet is no longer active." => "Arkusz tego pola tekstowego nie jest już aktywny.", + "Username" => "Nazwa użytkownika", + "Display name" => "Nazwa wyświetlana", + "Real name" => "Imię i nazwisko", + "Name (A–Z)" => "Nazwa (A–Z)", + "Merged PRs" => "Scalone PR", + "PRs" => "PR", + "Commits" => "Commity", + "Lines added" => "Dodane wiersze", + "Lines deleted" => "Usunięte wiersze", + "Line delta" => "Bilans wierszy", + "Lines +/−" => "Wiersze +/−", + "Binary assets added" => "Dodane pliki binarne", + "Binary assets removed" => "Usunięte pliki binarne", + "First commit" => "Pierwszy commit", + "First" => "Pierwszy", + "Last commit" => "Ostatni commit", + "Last" => "Ostatni", + "Reverse the order" => "Odwróć kolejność", + "Grab bag" => "Losowo", + "No contributor data was built into this copy." => "Ta kopia nie zawiera danych o współtwórcach.", + "No model credits were built into this copy." => "Ta kopia nie zawiera informacji o modelach.", + "Model" => "Model", + "Version" => "Wersja", + "Account" => "Konto", + "Licence" => "Licencja", + "Platform" => "Platforma", + "Product Information" => "Informacje o produkcie", + "20% - Accent1" => "20% - Akcent1", + "20% - Accent2" => "20% - Akcent2", + "20% - Accent3" => "20% - Akcent3", + "20% - Accent4" => "20% - Akcent4", + "20% - Accent5" => "20% - Akcent5", + "20% - Accent6" => "20% - Akcent6", + "40% - Accent1" => "40% - Akcent1", + "40% - Accent2" => "40% - Akcent2", + "40% - Accent3" => "40% - Akcent3", + "40% - Accent4" => "40% - Akcent4", + "40% - Accent5" => "40% - Akcent5", + "40% - Accent6" => "40% - Akcent6", + "60% - Accent1" => "60% - Akcent1", + "60% - Accent2" => "60% - Akcent2", + "60% - Accent3" => "60% - Akcent3", + "60% - Accent4" => "60% - Akcent4", + "60% - Accent5" => "60% - Akcent5", + "60% - Accent6" => "60% - Akcent6", + "3 Arrows" => "3 strzałki", + "3 Symbols" => "3 symbole", + "3 Traffic Lights" => "3 sygnalizatory świetlne", + "4 Ratings" => "4 oceny", + "5 Arrows" => "5 strzałek", + "5 Quarters" => "5 ćwiartek", + "Convert to Number" => "Konwertuj na liczbę", + "Number Stored as Text" => "Liczba przechowywana jako tekst", + "Error checking options" => "Opcje sprawdzania błędów", + "Fit selection" => "Dopasuj do zaznaczenia", + "Format Chart Area…" => "Formatuj obszar wykresu…", + "Select Data…" => "Zaznacz dane…", + "Hex" => "Szesnastkowo", + "More Colors…" => "Więcej kolorów…", + "Recent Colors" => "Ostatnio używane kolory", + "Maximum Change:" => "Maksymalna zmiana:", + "Maximum Change must be a number of 0 or more." => "Maksymalna zmiana musi być liczbą równą 0 lub większą.", + "Maximum Iterations:" => "Maksymalna liczba iteracji:", + "Maximum Iterations must be a whole number from 1 to 32767." => "Maksymalna liczba iteracji musi być liczbą całkowitą od 1 do 32767.", + "Paste formulas that refer to the copied cells" => "Wklej formuły odwołujące się do skopiowanych komórek", + "Sort Ascending" => "Sortuj rosnąco", + "Sort Descending" => "Sortuj malejąco", + "Icon|check" => "znacznik wyboru", + "Icon|close" => "zamknij", + "Icon|plus" => "plus", + "Icon|minus" => "minus", + "Icon|chart" => "wykres", + "Icon|line chart" => "wykres liniowy", + "Icon|pie chart" => "wykres kołowy", + "Icon|scatter" => "wykres punktowy", + "Icon|table" => "tabela", + "Icon|sum" => "suma", + "Icon|filter" => "filtr", + "Icon|lock" => "kłódka", + "Icon|comment" => "komentarz", + "Icon|note" => "notatka", + "Icon|picture" => "obraz", + "Icon|book" => "książka", + "Icon|folder" => "folder", + "Icon|search" => "wyszukiwanie", + "Icon|calculator" => "kalkulator", + "Icon|link" => "łącze", + "Icon|pen" => "pióro", + "Icon|share" => "udostępnianie", + "Icon|settings" => "ustawienia", + "Icon|home" => "dom", + "Icon|save" => "zapisz", + "Icon|theme" => "motyw", + "Icon|shapes" => "kształty", + "Icon|text" => "tekst", + "Icon|trace" => "śledzenie", + "Icon|validation" => "poprawność danych", + "Settings" => "Ustawienia", + "Outline Settings" => "Ustawienia konspektu", + "Summary rows below detail" => "Wiersze podsumowania poniżej szczegółów", + "Summary columns to right of detail" => "Kolumny podsumowania z prawej strony szczegółów", + "Advanced" => "Zaawansowane", + "Advanced Filter" => "Filtr zaawansowany", + "Show matching rows in place" => "Filtruj listę na miejscu", + "Copy matching rows elsewhere" => "Kopiuj w inne miejsce", + "List range:" => "Zakres listy:", + "Criteria range (optional):" => "Zakres kryteriów (opcjonalnie):", + "Copy to:" => "Kopiuj do:", + "Unique rows only" => "Tylko unikatowe rekordy", + "Arrange" => "Rozmieść", + "Arrange Windows" => "Rozmieszczanie okien", + "Tiled" => "Sąsiadująco", + "Cascade" => "Kaskadowo", + "Windows of active workbook" => "Okna aktywnego skoroszytu", + "Switch Windows" => "Przełącz okna", + "Auto Fill Options" => "Opcje autowypełniania", + "Copy Cells" => "Kopiuj komórki", + "Fill Series" => "Wypełnij serią", + "Fill Formatting Only" => "Wypełnij tylko formatowaniem", + "Fill Without Formatting" => "Wypełnij bez formatowania", + "Fill Days" => "Wypełnij dniami", + "Fill Weekdays" => "Wypełnij dniami powszednimi", + "Fill Months" => "Wypełnij miesiącami", + "Fill Years" => "Wypełnij latami", + "Constraint Cell Reference" => "Odwołanie do komórki ograniczenia", + "Constraint Operator" => "Operator ograniczenia", + "Constraint Value" => "Wartość ograniczenia", + "Insert columns" => "Wstawianie kolumn", + "Delete columns" => "Usuwanie kolumn", + "Select locked cells" => "Zaznaczanie zablokowanych komórek", + "Select unlocked cells" => "Zaznaczanie odblokowanych komórek", + "Row height (points):" => "Wysokość wiersza (w punktach):", + "More Table Styles" => "Więcej stylów tabeli", + "Resize Table" => "Zmień rozmiar tabeli", + "New range for the table:" => "Nowy zakres dla tabeli:", + "Paste Name" => "Wklej nazwę", + "Paste name" => "Wklej nazwę", + "Paste List" => "Wklej listę", + "Picture: {name}" => "Obraz: {name}", + "Insert {ch}" => "Wstaw {ch}", + "Remove level" => "Usuń poziom", + "Sort On" => "Sortuj według", + "Show Details" => "Pokaż szczegóły", + "Split tabs" => "Podział kart", + "Scroll ribbon left" => "Przewiń wstążkę w lewo", + "Scroll ribbon right" => "Przewiń wstążkę w prawo", + "Format Painter" => "Malarz formatów", + "Lookup" => "Wyszukiwanie i adres", + "GridCraft {version} is up to date." => "GridCraft {version} jest aktualny.", + "Could not check for updates: {error}" => "Nie można sprawdzić aktualizacji: {error}", + "The web version is always the latest release." => "Wersja internetowa to zawsze najnowsze wydanie.", + "The cell being edited can't be entered." => "Nie można zatwierdzić edytowanej komórki.", + "Scripts in this workbook came from a file and are disabled." => "Skrypty w tym skoroszycie pochodzą z pliku i są wyłączone.", + "Trust Scripts" => "Ufaj skryptom", + "Let this workbook's scripts run for the rest of this session" => "Pozwól skryptom tego skoroszytu działać do końca tej sesji", + "Collapse Ribbon" => "Zwiń wstążkę", + "Expand Formula Bar" => "Rozwiń pasek formuły", + "Display Theme" => "Motyw wyświetlania", + "Interface Size" => "Rozmiar interfejsu", + "Interface Language" => "Język interfejsu", + "Interface Language: English" => "Język interfejsu: angielski", + "Interface Language: Japanese" => "Język interfejsu: japoński", + "Ribbon Tab" => "Karta wstążki", + "Open Dialog" => "Otwórz okno dialogowe", + "File (Backstage view)" => "Plik (widok Backstage)", + "Japanese Postcard" => "Pocztówka japońska", + "Japanese Double Postcard" => "Podwójna pocztówka japońska", + "Japanese Envelope #3" => "Koperta japońska nr 3", + "Japanese Envelope #4" => "Koperta japońska nr 4", + "Japanese Envelope Kaku #2" => "Koperta japońska Kaku nr 2", + "Japanese Envelope Kaku #3" => "Koperta japońska Kaku nr 3", + "{count} engine commands are available. See docs/mcp.md and docs/control-protocol.md." => { + "Dostępne polecenia silnika: {count}. Zobacz docs/mcp.md i docs/control-protocol.md." + } + "{contributors} contributors · {commits} commits" => "Współtwórcy: {contributors} · commity: {commits}", + "Page {page}" => "Strona {page}", "Diagram" => "Diagram", "Decorative Text" => "Tekst ozdobny", "Paste" => "Wklej", @@ -418,7 +880,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Save the workbook as a web page." => "Zapisz skoroszyt jako stronę sieci Web.", "Options|General" => "Ogólne", "Options|Save" => "Zapisywanie", - "Options|Editing" => "Editing", + "Options|Editing" => "Edytowanie", "Show formula bar" => "Pokaż pasek formuły", "Enable AutoComplete for cell values" => "Włącz Autouzupełnianie dla wartości komórek", "Save .xlsx workbooks automatically after every change" => "Automatycznie zapisuj skoroszyty .xlsx po każdej zmianie", @@ -537,6 +999,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Values and number formats" => "Wartości i formaty liczb", "Operation" => "Operacja", "Add" => "Dodaj", + "Paste Special|Add" => "Dodaj", "Subtract" => "Odejmij", "Multiply" => "Pomnóż", "Divide" => "Podziel", @@ -576,6 +1039,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Tab" => "Tabulator", "Semicolon" => "Średnik", "Comma" => "Przecinek", + "Text to Columns|Comma" => "Przecinek", "Space" => "Spacja", "Other:" => "Inny:", "Treat consecutive delimiters as one" => "Traktuj kolejne ograniczniki jako jeden", @@ -1004,6 +1468,25 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Recording" => "Rejestrowanie", "New Macro" => "Nowe makro", "Show" => "Pokaż", + "Generated|Column" => "Kolumna", + "Generated|Row" => "Wiersz", + "Book" => "Zeszyt", + "Sheet" => "Arkusz", + "Count Numbers" => "Zlicz liczby", + "Type to filter…" => "Wpisz, aby filtrować…", + "Nothing to paste." => "Brak danych do wklejenia.", + "No cells were found." => "Nie znaleziono komórek.", + "Or select a category:" => "Lub wybierz kategorię:", + "Most Recently Used" => "Ostatnio używane", + "Insert Function…" => "Wstaw funkcję…", + "Paste Names…" => "Wklej nazwy…", + "Macro name:" => "Nazwa makra:", + "Shortcut key:" => "Klawisz skrótu:", + "Description:" => "Opis:", + "Check for Updates…" => "Sprawdź aktualizacje…", + "Checking for updates…" => "Sprawdzanie aktualizacji…", + "Could not check for updates." => "Nie można sprawdzić aktualizacji.", + "Check Again" => "Sprawdź ponownie", "Collapse dialog" => "Zwiń okno dialogowe", "Expand dialog" => "Rozwiń okno dialogowe", _ => return None, diff --git a/crates/ui-egui/src/i18n/pl_functions.rs b/crates/ui-egui/src/i18n/pl_functions.rs new file mode 100644 index 0000000000..48dbfc3ca5 --- /dev/null +++ b/crates/ui-egui/src/i18n/pl_functions.rs @@ -0,0 +1,990 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 dla wartości dodatniej, -1 dla wartości ujemnej i 0 dla zera."), + ("A random integer between two bounds, inclusive.", "Losowa liczba całkowita z zakresu dwóch granic włącznie."), + ("A random number between 0 and 1, recalculated every time.", "Losowa liczba z zakresu od 0 do 1, za każdym razem przeliczana."), + ("A range or array without its blank outer rows and columns.", "Zakres lub tablica bez pustych zewnętrznych wierszy i kolumn."), + ("A reference shifted from a starting point.", "Odniesienie przesunięte z punktu początkowego."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Statystyka modelu FORECAST.ETS: 1 alfa, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 rozmiar kroku.", + ), + ("A subtotal that can skip hidden rows.", "Suma częściowa, w której można pominąć ukryte wiersze."), + ("Absolute value (modulus) of a complex number.", "Wartość bezwzględna (moduł) liczby zespolonej."), + ("Absolute value of a number.", "Wartość bezwzględna liczby."), + ( + "Accrued interest of a security paying interest at maturity.", + "Naliczone odsetki od papieru wartościowego z odsetkami płatnymi w terminie zapadalności.", + ), + ("Accrued interest of a security paying periodic interest.", "Naliczone odsetki od papieru wartościowego z okresowymi płatnościami odsetek."), + ("Accumulates an array into one value.", "Redukuje tablicę do jednej wartości."), + ("Adds all the numbers in the arguments.", "Dodaje wszystkie liczby podane jako argumenty."), + ("Adds the cells that meet a condition.", "Zwraca sumę wartości liczbowych w komórkach arkusza kalkulacyjnego, które spełniają warunek."), + ( + "Adds the cells that meet every condition.", + "Zwraca sumę wartości liczbowych w komórkach arkusza kalkulacyjnego, które spełniają wszystkie warunki.", + ), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Zwraca sumę wartości numerycznych w polu bazy danych dla rekordów spełniających kryteria.", + ), + ("Adds the squares of the numbers.", "Zwraca sumę kwadratów liczb."), + ( + "Amount received at maturity for a fully invested security.", + "Kwota otrzymana w terminie zapadalności w pełni opłaconego papieru wartościowego.", + ), + ("An aggregate that can skip hidden rows and errors.", "Agregat, który może pomijać ukryte wiersze i błędy."), + ("Angle of a complex number in radians.", "Kąt liczby zespolonej w radianach."), + ("Angle of the point (x, y) from the x-axis in radians.", "Kąt punktu (x, y) od osi x w radianach."), + ("Annual yield of a discounted security.", "Roczna rentowność dyskontowego papieru wartościowego."), + ( + "Annual yield of a security paying interest at maturity.", + "Roczna rentowność papieru wartościowego z odsetkami płatnymi w terminie zapadalności.", + ), + ("Applies a LAMBDA to each column.", "Stosuje LAMBDA do każdej kolumny."), + ("Applies a LAMBDA to each row.", "Stosuje LAMBDA do każdego wiersza."), + ("Applies a LAMBDA to each value.", "Stosuje LAMBDA do każdej wartości."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Przybliżone wyszukiwanie w posortowanym wektorze lub pierwszym wierszu/kolumnie tablicy.", + ), + ("Arccosine in radians.", "Arcus cosinus w radianach."), + ("Arccotangent in radians (0 to pi).", "Arcus cotangens w radianach (od 0 do pi)."), + ("Arcsine in radians.", "Arcus sinus w radianach."), + ("Arctangent in radians.", "Arcus tangens w radianach."), + ("Arithmetic mean of the numbers.", "Średnia arytmetyczna liczb."), + ("Average absolute deviation from the mean.", "Średnie bezwzględne odchylenie od średniej."), + ("Average of the cells that meet a condition.", "Średnia wartości w komórkach spełniających warunek."), + ("Average of the cells that meet every condition.", "Średnia wartości w komórkach spełniających wszystkie warunki."), + ("Averages the numbers in a field of the records that meet the criteria.", "Uśrednia liczby w polu rekordów spełniających kryteria."), + ("Base-10 logarithm of a complex number.", "Logarytm o podstawie 10 liczby zespolonej."), + ("Base-10 logarithm.", "Logarytm o podstawie 10."), + ("Base-2 logarithm of a complex number.", "Logarytm o podstawie 2 liczby zespolonej."), + ("Bessel function of the first kind, J_n(x).", "Funkcja Bessela pierwszego rodzaju, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Funkcja Bessela drugiego rodzaju, Y_n(x)."), + ("Beta distribution density or probability.", "Gęstość lub prawdopodobieństwo rozkładu beta."), + ("Binomial probability.", "Prawdopodobieństwo dwumianowe."), + ("Bitwise AND of two non-negative integers.", "Bitowe AND dwóch nieujemnych liczb całkowitych."), + ("Bitwise OR of two non-negative integers.", "Bitowe OR dwóch nieujemnych liczb całkowitych."), + ("Bitwise exclusive OR of two non-negative integers.", "Bitowa alternatywa wykluczająca (XOR) dwóch nieujemnych liczb całkowitych."), + ("Bond-equivalent yield of a Treasury bill.", "Rentowność bonu skarbowego przeliczona na równoważną rentowność obligacji."), + ("Breaks a row or column into columns of the given length.", "Dzieli wiersz lub kolumnę na kolumny o podanej długości."), + ("Breaks a row or column into rows of the given length.", "Dzieli wiersz lub kolumnę na wiersze o podanej długości."), + ("Builds a cell address as text from row and column numbers.", "Tworzy adres komórki w postaci tekstu z numerów wierszy i kolumn."), + ( + "Builds a complex number as text from real and imaginary parts.", + "Tworzy liczbę zespoloną w postaci tekstu z części rzeczywistych i urojonych.", + ), + ("Builds a date serial number from a year, month and day.", "Tworzy numer seryjny daty na podstawie roku, miesiąca i dnia."), + ( + "Builds a summary table grouping values by row and column fields.", + "Tworzy tabelę podsumowującą grupującą wartości według pól wierszy i kolumn.", + ), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "Tworzy czas (ułamek dnia) na podstawie godzin, minut i sekund."), + ("Builds an array from a LAMBDA.", "Tworzy tablicę na podstawie LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Tworzy tablicę liczb o stałym kroku."), + ("Builds an array of random numbers in a range.", "Tworzy tablicę liczb losowych z zakresu."), + ("Byte version of FIND.", "Wersja bajtowa FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Wersja bajtowa LEFT (taka sama jak LEFT dla tekstu jednobajtowego)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Wersja bajtowa LEN (taka sama jak LEN dla tekstu jednobajtowego)."), + ("Byte version of MID (same as MID for single-byte text).", "Wersja bajtowa MID (taka sama jak MID dla tekstu jednobajtowego)."), + ("Byte version of REPLACE.", "Wersja bajtowa REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Wersja bajtowa RIGHT (taka sama jak RIGHT dla tekstu jednobajtowego)."), + ("Byte version of SEARCH.", "Wersja bajtowa SEARCH."), + ( + "Capitalises the first letter of each word and lower-cases the rest.", + "Zapisuje pierwszą literę każdego słowa wielką literą, a pozostałe małe.", + ), + ("Chi-squared density or left-tailed probability.", "Gęstość chi-kwadrat lub prawdopodobieństwo lewostronne."), + ("Chi-squared test of independence.", "Test niezależności chi-kwadrat."), + ("Column number of a reference.", "Numer kolumny odwołania."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Porównuje wyrażenie z listą wartości i zwraca wynik w parze z pierwszym dopasowaniem.", + ), + ("Complementary error function, 1 - ERF(x).", "Uzupełniająca funkcja błędu, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Sprzężenie liczby zespolonej."), + ("Confidence interval half-width using Student's t distribution.", "Szerokość połówkowa przedziału ufności przy użyciu rozkładu t-Studenta."), + ("Confidence interval half-width using the normal distribution.", "Szerokość połówkowa przedziału ufności przy użyciu rozkładu normalnego."), + ("Converts Roman numerals to a number.", "Konwertuje cyfry rzymskie na liczbę."), + ("Converts a binary number to decimal.", "Konwertuje liczbę binarną na dziesiętną."), + ("Converts a binary number to hexadecimal.", "Konwertuje liczbę binarną na liczbę szesnastkową."), + ("Converts a binary number to octal.", "Konwertuje liczbę binarną na ósemkową."), + ("Converts a date written as text into a date serial number.", "Konwertuje datę zapisaną jako tekst na numer seryjny daty."), + ("Converts a decimal number to binary.", "Konwertuje liczbę dziesiętną na binarną."), + ("Converts a decimal number to hexadecimal.", "Konwertuje liczbę dziesiętną na szesnastkową."), + ("Converts a decimal number to octal.", "Konwertuje liczbę dziesiętną na ósemkową."), + ("Converts a decimal price to fractional notation.", "Konwertuje cenę dziesiętną na zapis ułamkowy."), + ("Converts a fractional price notation to a decimal number.", "Konwertuje ułamkowy zapis ceny na liczbę dziesiętną."), + ("Converts a hexadecimal number to binary.", "Konwertuje liczbę szesnastkową na binarną."), + ("Converts a hexadecimal number to decimal.", "Konwertuje liczbę szesnastkową na dziesiętną."), + ("Converts a hexadecimal number to octal.", "Konwertuje liczbę szesnastkową na ósemkową."), + ("Converts a measurement from one unit to another.", "Konwertuje miarę z jednej jednostki na drugą."), + ("Converts a number to Roman numerals in one of five styles.", "Konwertuje liczbę na cyfry rzymskie w jednym z pięciu stylów."), + ("Converts a time written as text into a fraction of a day.", "Konwertuje czas zapisany jako tekst na ułamek dnia."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Konwertuje wartość na liczbę: liczby pozostają, TRUE wynosi 1, wszystko inne wynosi 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Konwertuje tablicę na tekst w postaci listy rozdzielonej przecinkami lub ścisłej stałej tablicowej.", + ), + ("Converts an octal number to binary.", "Konwertuje liczbę ósemkową na binarną."), + ("Converts an octal number to decimal.", "Konwertuje liczbę ósemkową na dziesiętną."), + ("Converts an octal number to hexadecimal.", "Konwertuje liczbę ósemkową na liczbę szesnastkową."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Konwertuje dowolną wartość na tekst, opcjonalnie w formie ścisłej (w cudzysłowie).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Przelicza między euro a dawnymi walutami państw strefy euro po stałych kursach.", + ), + ("Converts degrees to radians.", "Przelicza stopnie na radiany."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Konwertuje znaki o pełnej szerokości na znaki o połowie szerokości (bez zmian w przypadku tekstu jednobajtowego).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Konwertuje znaki o połowie szerokości na znaki o pełnej szerokości (bez zmian w tych ustawieniach regionalnych).", + ), + ("Converts radians to degrees.", "Konwertuje radiany na stopnie."), + ("Converts text that looks like a number, date or time into a number.", "Konwertuje tekst wyglądający jak liczba, data lub godzina na liczbę."), + ( + "Converts text to a number using the given decimal and group separators.", + "Konwertuje tekst na liczbę przy użyciu podanych separatorów dziesiętnych i grupowych.", + ), + ("Converts text to lower case.", "Konwertuje tekst na małe litery."), + ("Converts text to upper case.", "Konwertuje tekst na wielkie litery."), + ("Correlation coefficient of two data sets.", "Współczynnik korelacji dwóch zbiorów danych."), + ("Cosecant of a complex number.", "Cosecans liczby zespolonej."), + ("Cosecant of an angle in radians.", "Cosecans kąta w radianach."), + ("Cosine of a complex number.", "Cosinus liczby zespolonej."), + ("Cosine of an angle in radians.", "Cosinus kąta w radianach."), + ("Cotangent of a complex number.", "Cotangens liczby zespolonej."), + ("Cotangent of an angle in radians.", "Cotangens kąta w radianach."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Zlicza dni pomiędzy dwiema datami w roku 360-dniowym (US lub metoda europejska).", + ), + ("Counts empty cells and empty text in a range.", "Zlicza puste komórki arkusza kalkulacyjnego i pusty tekst w zakresie."), + ( + "Counts how many values fall into each bin, as a vertical array.", + "Zlicza wartości w poszczególnych przedziałach i zwraca wyniki w tablicy pionowej.", + ), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Zlicza niepuste komórki arkusza kalkulacyjnego w polu pasujących rekordów (lub pasujących rekordów).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Zlicza numeryczne komórki arkusza kalkulacyjnego w polu pasujących rekordów (lub pasujących rekordów).", + ), + ("Counts the cells that meet a condition.", "Zlicza komórki arkusza kalkulacyjnego spełniające warunek."), + ("Counts the cells that meet every condition.", "Zlicza komórki arkusza kalkulacyjnego spełniające wszystkie warunki."), + ("Counts the characters in a text.", "Zlicza znaki w tekście."), + ("Counts the columns in an array or range.", "Zlicza kolumny w tablicy lub zakresie."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Zlicza elementy zbioru elementów kostki (brak połączeń z kostką; #N/A)."), + ("Counts the non-empty values.", "Zlicza niepuste wartości."), + ("Counts the numbers.", "Zlicza liczby."), + ("Counts the rows in an array or range.", "Zlicza wiersze tablicy lub zakresu."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Liczy całe lata, miesiące lub dni pomiędzy dwiema datami. jednostka: Y, M, D, MD, YM lub YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Zlicza dni robocze (od poniedziałku do piątku) pomiędzy dwiema datami, z wyłączeniem świąt.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Zlicza dni robocze pomiędzy dwiema datami z niestandardowym weekendem, z wyłączeniem świąt.", + ), + ("Creates a link; the cell shows the friendly name, or the link itself.", "Tworzy łącze; komórka pokazuje przyjazną nazwę lub sam link."), + ("Creates a reusable custom function.", "Tworzy funkcję niestandardową wielokrotnego użytku."), + ("Cumulative beta probability.", "Skumulowane prawdopodobieństwo beta."), + ("Cumulative lognormal probability.", "Skumulowane prawdopodobieństwo lognormalne."), + ("Cuts off the fractional part of a number at the given digits.", "Obcina część ułamkową liczby do podanej liczby cyfr."), + ("Days from settlement to the next coupon date.", "Liczba dni od rozliczenia do następnej daty płatności odsetek."), + ("Days from the start of the coupon period to settlement.", "Liczba dni od rozpoczęcia okresu płatności odsetek do rozliczenia."), + ("Days in the coupon period that contains settlement.", "Liczba dni w okresie odsetkowym obejmującym dzień rozliczenia."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Amortyzacja degresywna za dowolny przedział okresów, z przejściem na metodę liniową.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Definiuje zbiór elementów kostki (bez połączeń z kostką; #N/A)."), + ("Determinant of a square matrix.", "Wyznacznik macierzy kwadratowej."), + ("Difference of two complex numbers.", "Różnica dwóch liczb zespolonych."), + ("Discount rate of a security.", "Stopa dyskontowa papieru wartościowego."), + ("Double factorial of a number.", "Podwójna silnia liczby."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Amortyzacja degresywna z podwójną stawką (lub innym współczynnikiem) za dany okres.", + ), + ( + "Effective annual rate from a nominal rate and compounding periods.", + "Efektywna stopa roczna na podstawie stopy nominalnej i okresów kapitalizacji.", + ), + ("Equivalent interest rate for the growth of an investment.", "Równoważna stopa procentowa dla wzrostu inwestycji."), + ("Error function integrated from 0 to a limit, or between two limits.", "Funkcja błędu zintegrowana od 0 do limitu lub pomiędzy dwoma limitami."), + ("Error function integrated from 0 to x.", "Funkcja błędu zintegrowana od 0 do x."), + ("Excess kurtosis of a sample.", "Kurtoza nadmiarowa próby."), + ("Exponential curve coefficients and optional regression statistics.", "Współczynniki krzywej wykładniczej i opcjonalne statystyki regresji."), + ("Exponential distribution density or probability.", "Gęstość lub prawdopodobieństwo rozkładu wykładniczego."), + ("Exponential of a complex number.", "Funkcja wykładnicza liczby zespolonej."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Wyodrębnia dane z XML za pomocą XPath (niedostępne; zwraca #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Wyodrębnia pierwsze dopasowanie, wszystkie dopasowania lub grupy przechwytywania wyrażenia regularnego.", + ), + ("F distribution density or left-tailed probability.", "Gęstość rozkładu F lub prawdopodobieństwo lewostronne."), + ("Factorial of a number.", "Silnia liczby."), + ("Fetches data from a web service (not available; returns #VALUE!).", "Pobiera dane z usługi internetowej (niedostępne; zwraca #VALUE!)."), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Znajduje wartość w pierwszej kolumnie tabeli i zwraca wartość w tym samym wierszu innej kolumny.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Znajduje wartość w pierwszym wierszu tabeli i zwraca wartość w tej samej kolumnie innego wiersza.", + ), + ("Finds the position of one text in another (case-sensitive).", "Znajduje położenie jednego tekstu w innym (wielkość liter ma znaczenie)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Znajduje położenie jednego tekstu w innym, ignorując wielkość liter i dopuszczając symbole wieloznaczne.", + ), + ("Fisher transformation.", "Transformacja Fishera."), + ("Fixed-declining-balance depreciation for a period.", "Amortyzacja degresywna według stałej stawki za dany okres."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Spłaszcza tablicę do pojedynczej kolumny, opcjonalnie pomijając puste komórki lub błędy.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Spłaszcza tablicę do pojedynczego wiersza, opcjonalnie pomijając puste komórki lub błędy.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Prognozuje wartość poprzez addytywne (AAA) wygładzanie wykładnicze."), + ("Formats a number as currency text, like DOLLAR.", "Formatuje liczbę jako tekst waluty, np. DOLLAR."), + ("Formats a number as currency text.", "Formatuje liczbę jako tekst waluty."), + ("Formats a number as text.", "Formatuje liczbę jako tekst."), + ( + "French degressive depreciation with a life-based coefficient.", + "Francuska amortyzacja degresywna ze współczynnikiem zależnym od okresu użytkowania.", + ), + ("French linear depreciation prorated for the first period.", "Francuska amortyzacja liniowa proporcjonalnie za pierwszy okres."), + ( + "Future value of a principal after a series of compound rates.", + "Przyszła wartość kapitału po zastosowaniu szeregu stóp procentowych z kapitalizacją.", + ), + ("Future value of an investment with constant payments and rate.", "Przyszła wartość inwestycji przy stałych płatnościach i stopie procentowej."), + ("Gamma distribution density or probability.", "Gęstość lub prawdopodobieństwo rozkładu gamma."), + ("Geometric mean of positive numbers.", "Średnia geometryczna liczb dodatnich."), + ("Greatest common divisor of integers.", "Największy wspólny dzielnik liczb całkowitych."), + ("Groups rows by key fields and aggregates the values of each group.", "Grupuje wiersze według pól kluczowych i agreguje wartości każdej grupy."), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Powiększa tablicę do podanego rozmiaru, wypełniając nowe komórki arkusza kalkulacyjnego wartością dopełniającą.", + ), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "Połowa szerokości przedziału ufności wokół wartości FORECAST.ETS."), + ("Harmonic mean of positive numbers.", "Średnia harmoniczna liczb dodatnich."), + ("Hyperbolic cosecant of a complex number.", "Hiperboliczny cosecans liczby zespolonej."), + ("Hyperbolic cosecant.", "Cosecans hiperboliczny."), + ("Hyperbolic cosine of a complex number.", "Cosinus hiperboliczny liczby zespolonej."), + ("Hyperbolic cosine.", "Cosinus hiperboliczny."), + ("Hyperbolic cotangent.", "Cotangens hiperboliczny."), + ("Hyperbolic secant of a complex number.", "Secans hiperboliczny liczby zespolonej."), + ("Hyperbolic secant.", "Secans hiperboliczny."), + ("Hyperbolic sine of a complex number.", "Sinus hiperboliczny liczby zespolonej."), + ("Hyperbolic sine.", "Sinus hiperboliczny."), + ("Hyperbolic tangent.", "Tangens hiperboliczny."), + ("Hypergeometric probability of an exact count.", "Prawdopodobieństwo hipergeometryczne dokładnego zliczenia."), + ("Hypergeometric probability.", "Prawdopodobieństwo hipergeometryczne."), + ("Identity matrix of the given size.", "Macierz jednostkowa o podanym rozmiarze."), + ("Imaginary coefficient of a complex number.", "Urojony współczynnik liczby zespolonej."), + ("Information about a cell.", "Informacje o komórce."), + ("Integer part of a division.", "Część całkowita ilorazu."), + ("Interest paid in a period of a loan with even principal payments.", "Odsetki płacone w okresie pożyczki z równą spłatą kapitału."), + ("Interest part of a given period's payment.", "Część odsetkowa płatności za dany okres."), + ("Interest rate of a fully invested security.", "Stopa procentowa w pełni opłaconego papieru wartościowego."), + ("Interest rate per period of an annuity, found iteratively.", "Stopa procentowa za okres renty, wyznaczana iteracyjnie."), + ("Internal rate of return of cash flows on specific dates.", "Wewnętrzna stopa zwrotu przepływów pieniężnych w określonych dniach."), + ("Internal rate of return of periodic cash flows.", "Wewnętrzna stopa zwrotu okresowych przepływów pieniężnych."), + ("Inverse hyperbolic cosine.", "Funkcja odwrotna do cosinusa hiperbolicznego."), + ("Inverse hyperbolic cotangent.", "Funkcja odwrotna do cotangensa hiperbolicznego."), + ("Inverse hyperbolic sine.", "Funkcja odwrotna do sinusa hiperbolicznego."), + ("Inverse hyperbolic tangent.", "Funkcja odwrotna do tangensa hiperbolicznego."), + ("Inverse of a square matrix.", "Odwrotność macierzy kwadratowej."), + ("Inverse of the Fisher transformation.", "Odwrotność transformacji Fishera."), + ("Inverse of the cumulative beta distribution.", "Odwrotność skumulowanego rozkładu beta."), + ("Inverse of the cumulative lognormal distribution.", "Odwrotność skumulowanego rozkładu logarytmiczno-normalnego."), + ("Inverse of the gamma cumulative distribution.", "Odwrotność skumulowanego rozkładu gamma."), + ("Inverse of the left-tailed F distribution.", "Odwrotność lewostronnego rozkładu F."), + ("Inverse of the left-tailed chi-squared distribution.", "Odwrotność lewostronnego rozkładu chi-kwadrat."), + ("Inverse of the normal cumulative distribution.", "Odwrotność skumulowanego rozkładu normalnego."), + ("Inverse of the right-tailed F distribution.", "Odwrotność prawostronnego rozkładu F."), + ("Inverse of the right-tailed chi-squared distribution.", "Odwrotność prawostronnego rozkładu chi-kwadrat."), + ("Inverse of the standard normal cumulative distribution.", "Odwrotność standardowego skumulowanego rozkładu normalnego."), + ("Joins several text values into one.", "Łączy kilka wartości tekstowych w jedną."), + ("Joins text from values and every cell of ranges, without a separator.", "Łączy tekst z wartości i każdej komórki zakresów, bez separatora."), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Łączy tekst z wartości i zakresów za pomocą ogranicznika, opcjonalnie pomijając puste elementy.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Zachowuje wiersze lub kolumny z początku (lub końca) tablicy."), + ("Keeps the rows or columns of an array whose include flag is TRUE.", "Przechowuje wiersze lub kolumny tablicy, której flaga włączania to TRUE."), + ("Largest number (0 when there are none).", "Największa liczba (0, jeśli nie ma żadnej)."), + ("Largest number in a field of the matching records.", "Największa liczba w polu pasujących rekordów."), + ( + "Largest value among cells that meet every condition.", + "Największa wartość spośród komórek arkusza kalkulacyjnego spełniających wszystkie warunki.", + ), + ("Largest value counting text as 0 and logicals as 1/0.", "Największa wartość licząca tekst jako 0 i wartości logiczne jako 1/0."), + ("Least common multiple of integers.", "Najmniejsza wspólna wielokrotność liczb całkowitych."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Współczynniki linii najmniejszych kwadratów i opcjonalne statystyki regresji.", + ), + ("Left-tailed inverse of Student's t distribution.", "Lewostronna odwrotność rozkładu t-Studenta."), + ("Length of the repeating pattern detected in a time series.", "Długość powtarzającego się wzorca wykrytego w szeregu czasowym."), + ("Logarithm to the given base (10 by default).", "Logarytm o podanej podstawie (domyślnie 10)."), + ("Lognormal density or probability.", "Gęstość lub prawdopodobieństwo lognormalne."), + ("Macaulay duration of a security with periodic interest.", "Duracja Macaulaya papieru wartościowego z okresowymi płatnościami odsetek."), + ("Matrix product of two arrays.", "Iloczyn macierzowy dwóch tablic."), + ("Mean after trimming a fraction of points from both ends.", "Średnia po odcięciu części punktów z obu końców."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Średnia z uwzględnieniem tekstu jako 0 i wartości logicznych jako 1 lub 0."), + ("Middle value of the numbers.", "Środkowa wartość liczb."), + ("Modified Bessel function of the first kind, I_n(x).", "Zmodyfikowana funkcja Bessela pierwszego rodzaju, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Zmodyfikowana funkcja Bessela drugiego rodzaju, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Zmodyfikowana duracja papieru wartościowego z okresowymi płatnościami odsetek."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Zmodyfikowana wewnętrzna stopa zwrotu przy zastosowaniu odrębnych stóp oprocentowania pożyczek i reinwestycji.", + ), + ("Most frequently occurring number.", "Najczęściej występująca liczba."), + ("Multiplies all the numbers in the arguments.", "Mnoży wszystkie liczby zawarte w argumentach."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Mnoży pasujące elementy tablic o tej samej wielkości i dodaje iloczyny.", + ), + ("Multiplies the numbers in a field of the matching records.", "Mnoży liczby w polu pasujących rekordów."), + ("Names intermediate results.", "Nazywa wyniki pośrednie."), + ("Natural log of the gamma function.", "Logarytm naturalny funkcji gamma."), + ("Natural logarithm of a complex number.", "Logarytm naturalny liczby zespolonej."), + ("Natural logarithm.", "Logarytm naturalny."), + ("Negative binomial probability.", "Prawdopodobieństwo ujemnego rozkładu dwumianowego."), + ("Net present value of cash flows on specific dates.", "Wartość bieżąca netto przepływów pieniężnych w określonych dniach."), + ( + "Net present value of periodic cash flows at a discount rate.", + "Wartość bieżąca netto okresowych przepływów pieniężnych przy stopie dyskontowej.", + ), + ("Next coupon date after settlement.", "Następna data płatności odsetek po rozliczeniu."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Nominalna stopa roczna na podstawie stopy efektywnej i okresów kapitalizacji.", + ), + ("Normal distribution density or cumulative probability.", "Gęstość rozkładu normalnego lub prawdopodobieństwo skumulowane."), + ("Number of areas in a reference.", "Liczba obszarów w odniesieniu."), + ("Number of combinations with repetition.", "Liczba kombinacji z powtórzeniami."), + ("Number of combinations without repetition.", "Liczba kombinacji bez powtórzeń."), + ( + "Number of coupons payable between settlement and maturity.", + "Liczba płatności odsetek należnych pomiędzy rozliczeniem a terminem zapadalności.", + ), + ("Number of ordered selections with repetition.", "Liczba uporządkowanych selekcji z powtórzeniami."), + ("Number of ordered selections without repetition.", "Liczba uporządkowanych selekcji bez powtórzeń."), + ("Number of periods needed to pay off or accumulate an amount.", "Liczba okresów potrzebnych do spłaty lub zgromadzenia kwoty."), + ("Number of sheets.", "Liczba arkuszy."), + ("One- or two-tailed Student's t probability.", "Jedno- lub dwustronne prawdopodobieństwo t-Studenta."), + ("One-tailed probability of a z-test.", "Jednostronne prawdopodobieństwo testu z."), + ("Pearson product-moment correlation coefficient.", "Współczynnik korelacji liniowej Pearsona."), + ("Percent-encodes text for use in a URL.", "Tekst koduje procentowo do użycia w URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Okresowa rata pożyczki lub renty przy stałych płatnościach i stopie procentowej.", + ), + ("Periods needed for an investment to grow to a target value.", "Okresy potrzebne, aby inwestycja osiągnęła wartość docelową."), + ("Picks a value from the list by its position.", "Wybiera wartość z listy według jej pozycji."), + ("Picks columns of an array by position (negative counts from the end).", "Wybiera kolumny tablicy według pozycji (liczba ujemna od końca)."), + ("Picks rows of an array by position (negative counts from the end).", "Wybiera wiersze tablicy według pozycji (liczba ujemna od końca)."), + ("Places arrays side by side.", "Umieszcza tablice obok siebie."), + ("Poisson probability.", "Prawdopodobieństwo Poissona."), + ("Population covariance of paired values.", "Kowariancja populacji sparowanych wartości."), + ("Population skewness.", "Skośność populacji."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Odchylenie standardowe populacji liczące tekst jako 0 i logiczne jako 1/0.", + ), + ("Population standard deviation of a field over the matching records.", "Odchylenie standardowe populacji pola w pasujących rekordach."), + ("Population standard deviation.", "Odchylenie standardowe populacji."), + ("Population variance counting text as 0 and logicals as 1/0.", "Wariancja populacji liczy tekst jako 0, a wartości logiczne jako 1/0."), + ("Population variance of a field over the matching records.", "Wariancja populacji pola w pasujących rekordach."), + ("Population variance.", "Wariancja populacji."), + ("Positive square root.", "Dodatni pierwiastek kwadratowy."), + ("Predicts a value along a linear trend.", "Przewiduje wartość według trendu liniowego."), + ("Present value of a series of equal future payments.", "Wartość bieżąca serii równych przyszłych płatności."), + ("Previous coupon date on or before settlement.", "Poprzednia data płatności odsetek w dniu rozliczenia lub przed nim."), + ("Price per 100 face value of a Treasury bill.", "Cena bonu skarbowego za 100 jednostek wartości nominalnej."), + ("Price per 100 face value of a discounted security.", "Cena dyskontowego papieru wartościowego za 100 jednostek wartości nominalnej."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Cena papieru wartościowego z odsetkami płatnymi w terminie zapadalności za 100 jednostek wartości nominalnej.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Cena papieru wartościowego z okresowymi odsetkami za 100 jednostek wartości nominalnej.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "Cena papieru wartościowego z nieregularnym pierwszym okresem odsetkowym za 100 jednostek wartości nominalnej.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Cena papieru wartościowego z nieregularnym ostatnim okresem odsetkowym za 100 jednostek wartości nominalnej.", + ), + ("Principal part of a given period's payment.", "Część kapitałowa płatności za dany okres."), + ("Probability from Student's t-test.", "Prawdopodobieństwo na podstawie testu t-Studenta."), + ("Probability of a number of successes falling in a range.", "Prawdopodobieństwo liczby sukcesów mieszczących się w określonym przedziale."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Prawdopodobieństwo, że standardowa wartość normalna mieści się pomiędzy średnią a z.", + ), + ("Probability that values fall between two limits.", "Prawdopodobieństwo, że wartości mieszczą się pomiędzy dwiema granicami."), + ("Product of complex numbers.", "Iloczyn liczb zespolonych."), + ("Quartile (0–4) of a data set, inclusive method.", "Kwartyl (0–4) zbioru danych, metoda włączająca."), + ("Quartile (0–4) of a data set.", "Kwartyl (0–4) zbioru danych."), + ("Quartile (1–3) of a data set, exclusive method.", "Kwartyl (1–3) zbioru danych, metoda wyłączna."), + ("Quotient of two complex numbers.", "Iloraz dwóch liczb zespolonych."), + ("Raises a complex number to a power.", "Podnosi liczbę zespoloną do potęgi."), + ("Raises a number to a power.", "Podnosi liczbę do potęgi."), + ("Rank of a number within a list.", "Pozycja numeru na liście."), + ("Rank of a number within a list; ties get the average rank.", "Pozycja numeru na liście; remisy uzyskują średnią rangę."), + ("Rank of a number within a list; ties share the top rank.", "Pozycja liczby na liście; jednakowe wartości otrzymują najwyższą wspólną pozycję."), + ("Ratio of the factorial of a sum to the product of factorials.", "Stosunek silni sumy do iloczynu silni."), + ("Reads text in a given base as a number.", "Odczytuje tekst z podanej bazy jako liczbę."), + ("Real coefficient of a complex number.", "Rzeczywisty współczynnik liczby zespolonej."), + ("Relative standing of a value as a fraction of the data set.", "Względna pozycja wartości jako ułamka zbioru danych."), + ("Relative standing of a value from 0 to 1 inclusive.", "Pozycja względna wartości od 0 do 1 włącznie."), + ("Relative standing of a value strictly between 0 and 1.", "Względna pozycja wartości ściśle między 0 a 1."), + ("Remainder of a division, with the sign of the divisor.", "Pozostałość dzielenia ze znakiem dzielnika."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Usuwa spacje początkowe i końcowe oraz zwija ciągi spacji do jednego.", + ), + ("Removes non-printable control characters from text.", "Usuwa z tekstu niedrukowalne znaki sterujące."), + ("Removes rows or columns from the start (or end) of an array.", "Usuwa wiersze lub kolumny z początku (lub końca) tablicy."), + ("Repeats a text a given number of times.", "Powtarza tekst określoną liczbę razy."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Zastępuje dopasowania wyrażenia regularnego, wszystkie lub wybrane wystąpienie.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Zastępuje wystąpienia jednego tekstu innym, opcjonalnie tylko danym wystąpieniem.", + ), + ("Replaces part of a text by position.", "Zastępuje część tekstu według pozycji."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Zwraca 1, gdy liczba jest większa lub równa progowi, w przeciwnym razie 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Zwraca 1, gdy dwie liczby są równe, w przeciwnym razie 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Zwraca kod rodzaju wartości: 1 liczba, 2 tekst, 4 wartość logiczna, 16 błąd, 64 tablica.", + ), + ( + "Returns a fallback when the value is #N/A, otherwise the value.", + "Zwraca wartość rezerwową, gdy wartość wynosi #N/A, w przeciwnym razie wartość.", + ), + ( + "Returns a fallback when the value is an error, otherwise the value.", + "Zwraca wartość rezerwową, gdy wartość jest błędna, w przeciwnym razie wartość.", + ), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Zwraca właściwość kluczowego wskaźnika wydajności z kostki (brak połączeń z kostką; #N/A).", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "Zwraca element lub krotkę z kostki (brak połączeń z kostką; #N/A)."), + ("Returns a property of a cube member (no cube connections; #N/A).", "Zwraca właściwość elementu kostki (brak połączeń z kostką; #N/A)."), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "Zwraca zagregowaną wartość z kostki (brak połączeń z kostką; #N/A)."), + ("Returns characters from the middle of a text.", "Zwraca znaki ze środka tekstu."), + ("Returns information about the operating environment.", "Zwraca informacje o środowisku operacyjnym."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Zwraca jedną wartość, gdy warunkiem jest TRUE, a drugą, gdy warunkiem jest FALSE.", + ), + ("Returns the #N/A error value.", "Zwraca wartość błędu #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Zwraca pozycję wartości w wierszu lub kolumnie, licząc od 1."), + ("Returns the ISO 8601 week number of a date.", "Zwraca ISO 8601 numer tygodnia daty."), + ("Returns the Unicode code point of the first character of a text.", "Zwraca punkt kodowy Unicode pierwszego znaku tekstu."), + ("Returns the Windows-1252 code of the first character of a text.", "Zwraca kod Windows-1252 pierwszego znaku tekstu."), + ("Returns the character for a Unicode code point.", "Zwraca znak punktu kodowego Unicode."), + ("Returns the character for a code from the Windows-1252 character set.", "Zwraca znak kodu z zestawu znaków Windows-1252."), + ("Returns the current date and time.", "Zwraca bieżącą datę i godzinę."), + ("Returns the current date.", "Zwraca bieżącą datę."), + ("Returns the date a number of months before or after a date.", "Zwraca datę przesuniętą o podaną liczbę miesięcy wstecz lub w przód."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Zwraca datę odległą o liczbę dni roboczych z niestandardowym weekendem.", + ), + ("Returns the date a number of working days before or after a date.", "Zwraca datę o liczbę dni roboczych przed lub po dacie."), + ("Returns the day of the month of a date.", "Zwraca dzień miesiąca danej daty."), + ("Returns the day of the week of a date as a number.", "Zwraca dzień tygodnia danej daty jako liczbę."), + ("Returns the distinct rows or columns of an array.", "Zwraca odrębne wiersze lub kolumny tablicy."), + ("Returns the element, row or column of an array at the given position.", "Zwraca element, wiersz lub kolumnę tablicy na podanej pozycji."), + ("Returns the field value of the single record that meets the criteria.", "Zwraca wartość pola pojedynczego rekordu spełniającego kryteria."), + ("Returns the first characters of a text.", "Zwraca pierwsze znaki tekstu."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Zwraca ułamek roku pomiędzy dwiema datami w oparciu o liczbę dni.", + ), + ("Returns the hour (0-23) of a time.", "Zwraca godzinę (0-23) czasu."), + ("Returns the last characters of a text.", "Zwraca ostatnie znaki tekstu."), + ("Returns the last day of the month a number of months away.", "Zwraca ostatni dzień miesiąca przesuniętego o podaną liczbę miesięcy."), + ("Returns the logical value FALSE.", "Zwraca wartość logiczną FALSE."), + ("Returns the logical value TRUE.", "Zwraca wartość logiczną TRUE."), + ("Returns the minute (0-59) of a time.", "Zwraca minutę (0-59) czasu."), + ("Returns the month (1-12) of a date.", "Zwraca miesiąc (1-12) daty."), + ( + "Returns the nth member of a cube set (no cube connections; #N/A).", + "Zwraca n-ty element zbioru elementów kostki (brak połączeń z kostką; #N/A).", + ), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Zwraca liczbę identyfikującą wartość błędu lub #N/A, jeśli nie jest to błąd.", + ), + ("Returns the number of days between two dates.", "Zwraca liczbę dni pomiędzy dwiema datami."), + ("Returns the phonetic (furigana) text; here the text itself.", "Zwraca tekst fonetyczny (furigana); tutaj sam tekst."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Zwraca pozycję wartości w wierszu lub kolumnie z elastycznymi trybami dopasowywania i wyszukiwania.", + ), + ("Returns the second (0-59) of a time.", "Zwraca sekundę (0-59) czasu."), + ("Returns the text that comes after a delimiter.", "Zwraca tekst znajdujący się po ograniczniku."), + ("Returns the text that comes before a delimiter.", "Zwraca tekst znajdujący się przed ogranicznikiem."), + ("Returns the value if it is text, otherwise empty text.", "Zwraca wartość, jeśli jest to tekst, w przeciwnym razie jest to pusty tekst."), + ("Returns the value paired with the first condition that is TRUE.", "Zwraca wartość przypisaną do pierwszego warunku, który ma wartość TRUE."), + ("Returns the week number of a date within its year.", "Zwraca numer tygodnia daty w jej roku."), + ("Returns the year of a date.", "Zwraca rok daty."), + ("Reverses a logical value.", "Odwraca wartość logiczną."), + ("Right-tailed F probability.", "Prawostronne prawdopodobieństwo F."), + ("Right-tailed Student's t probability.", "Prawostronne prawdopodobieństwo t-Studenta."), + ("Right-tailed chi-squared probability.", "Prawostronne prawdopodobieństwo chi-kwadrat."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Zaokrągla liczbę i formatuje ją jako tekst ze stałymi miejscami dziesiętnymi i opcjonalnymi separatorami tysięcy.", + ), + ("Rounds a number away from zero to a given number of digits.", "Zaokrągla liczbę od zera do określonej liczby cyfr."), + ("Rounds a number down to a multiple of significance.", "Zaokrągla liczbę w dół do wielokrotności podanej wartości."), + ("Rounds a number down to the nearest integer or multiple.", "Zaokrągla liczbę w dół do najbliższej liczby całkowitej lub wielokrotności."), + ("Rounds a number down to the nearest integer.", "Zaokrągla liczbę w dół do najbliższej liczby całkowitej."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Zaokrągla liczbę do podanej liczby cyfr; wartości dokładnie w połowie zaokrągla w kierunku od zera.", + ), + ("Rounds a number to the nearest multiple.", "Zaokrągla liczbę do najbliższej wielokrotności."), + ("Rounds a number toward negative infinity to a multiple.", "Zaokrągla liczbę w kierunku ujemnej nieskończoności do wielokrotności."), + ("Rounds a number toward positive infinity to a multiple.", "Zaokrągla liczbę w kierunku dodatniej nieskończoności do wielokrotności."), + ("Rounds a number toward zero to a given number of digits.", "Zaokrągla liczbę w kierunku zera do określonej liczby cyfr."), + ("Rounds a number up to a multiple of significance.", "Zaokrągla liczbę w górę do wielokrotności podanej wartości."), + ("Rounds a number up to the nearest integer or multiple.", "Zaokrągla liczbę w górę do najbliższej liczby całkowitej lub wielokrotności."), + ("Rounds away from zero to the nearest even integer.", "Zaokrągla od zera do najbliższej parzystej liczby całkowitej."), + ("Rounds away from zero to the nearest odd integer.", "Zaokrągla od zera do najbliższej nieparzystej liczby całkowitej."), + ("Row number of a reference.", "Numer wiersza odniesienia."), + ("Running accumulation of an array.", "Zwraca kolejne wyniki akumulacji elementów tablicy."), + ("Sample covariance of paired values.", "Kowariancja próby dla sparowanych wartości."), + ("Sample skewness.", "Skośność próby."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Odchylenie standardowe próby z uwzględnieniem tekstu jako 0 i wartości logicznych jako 1/0.", + ), + ("Sample standard deviation of a field over the matching records.", "Odchylenie standardowe próby dla pola pasujących rekordów."), + ("Sample standard deviation.", "Odchylenie standardowe próby."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Wariancja próby z uwzględnieniem tekstu jako 0 i wartości logicznych jako 1/0."), + ("Sample variance of a field over the matching records.", "Wariancja próby dla pola pasujących rekordów."), + ("Sample variance.", "Wariancja próby."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Wyszukuje w wierszu lub kolumnie i zwraca pasujący element, wiersz lub kolumnę z innej tablicy.", + ), + ("Secant of a complex number.", "Secans liczby zespolonej."), + ("Secant of an angle in radians.", "Secans kąta w radianach."), + ("Sheet number.", "Numer arkusza."), + ("Shifts the bits of a number left (right for negative shifts).", "Przesuwa bity liczby w lewo (w prawo w przypadku przesunięć ujemnych)."), + ("Shifts the bits of a number right (left for negative shifts).", "Przesuwa bity liczby w prawo (w lewo w przypadku przesunięć ujemnych)."), + ("Sine of a complex number.", "Sinus liczby zespolonej."), + ("Sine of an angle in radians.", "Sinus kąta w radianach."), + ("Slope of the least-squares regression line.", "Nachylenie linii regresji metodą najmniejszych kwadratów."), + ("Smallest number (0 when there are none).", "Najmniejsza liczba (0, jeśli ich nie ma)."), + ("Smallest number in a field of the matching records.", "Najmniejsza liczba w polu pasujących rekordów."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Najmniejsza liczba sukcesów, której skumulowane prawdopodobieństwo dwumianu osiąga alfa.", + ), + ( + "Smallest value among cells that meet every condition.", + "Najmniejsza wartość spośród komórek arkusza kalkulacyjnego spełniających wszystkie warunki.", + ), + ("Smallest value counting text as 0 and logicals as 1/0.", "Najmniejsza wartość licząca tekst jako 0 i wartości logiczne jako 1/0."), + ("Sorts an array by the values of other arrays of matching size.", "Sortuje tablicę według wartości innych tablic o pasującym rozmiarze."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Sortuje wiersze (lub kolumny) tablicy według jednej lub większej liczby jej kolumn.", + ), + ("Spells out a number in Thai words with Baht.", "Zapisuje liczbę słownie po tajsku, z nazwą waluty baht."), + ("Splits text into a grid of columns and rows at the given delimiters.", "Dzieli tekst na siatkę kolumn i wierszy w podanych ogranicznikach."), + ("Square of the correlation coefficient.", "Kwadrat współczynnika korelacji."), + ("Square root of a complex number.", "Pierwiastek kwadratowy z liczby zespolonej."), + ("Square root of the number times pi.", "Pierwiastek kwadratowy z iloczynu liczby i pi."), + ("Stacks arrays on top of each other.", "Układa tablice jedna na drugiej."), + ("Standard error of predicted y values in a regression.", "Błąd standardowy przewidywanych wartości y w regresji."), + ("Standard normal cumulative probability.", "Prawdopodobieństwo skumulowane standardowego rozkładu normalnego."), + ("Standard normal density or cumulative probability.", "Gęstość lub prawdopodobieństwo skumulowane standardowego rozkładu normalnego."), + ("Standard normal density.", "Gęstość standardowego rozkładu normalnego."), + ("Straight-line depreciation for one period.", "Amortyzacja liniowa w jednym okresie."), + ("Student's t density or left-tailed probability.", "Gęstość t-Studenta lub prawdopodobieństwo lewostronne."), + ("Sum of a power series.", "Suma szeregu potęgowego."), + ("Sum of complex numbers.", "Suma liczb zespolonych."), + ("Sum of squared deviations from the mean.", "Suma kwadratów odchyleń od średniej."), + ("Sum-of-years'-digits depreciation for a period.", "Amortyzacja metodą sumy cyfr lat za dany okres."), + ("Sums the differences of squares of matching elements.", "Sumuje różnice kwadratów pasujących elementów."), + ("Sums the squared differences of matching elements.", "Sumuje kwadraty różnic pasujących elementów."), + ("Sums the sums of squares of matching elements.", "Sumuje sumy kwadratów pasujących elementów."), + ("Swaps the rows and columns of an array.", "Zamienia wiersze i kolumny tablicy."), + ("TRUE for references.", "TRUE dla odwołań."), + ("TRUE when a LAMBDA argument was left out.", "TRUE, gdy pominięto argument LAMBDA."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE, gdy wyrażenie regularne pasuje gdzieś w tekście."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE, gdy nieparzysta liczba argumentów to TRUE."), + ("TRUE when at least one argument is TRUE.", "TRUE, gdy co najmniej jeden argument to TRUE."), + ("TRUE when every argument is TRUE.", "TRUE, gdy każdy argument to TRUE."), + ("TRUE when the cell has a formula.", "TRUE, gdy komórka zawiera formułę."), + ("TRUE when the integer part of a number is even.", "TRUE, gdy część całkowita liczby jest parzysta."), + ("TRUE when the integer part of a number is odd.", "TRUE, gdy część całkowita liczby jest nieparzysta."), + ("TRUE when the value is TRUE or FALSE.", "TRUE, gdy wartość wynosi TRUE lub FALSE."), + ("TRUE when the value is a number.", "TRUE, gdy wartość jest liczbą."), + ("TRUE when the value is any error other than #N/A.", "TRUE, gdy wartość jest dowolnym błędem innym niż #N/A."), + ("TRUE when the value is any error.", "TRUE, gdy wartość jest błędna."), + ("TRUE when the value is anything other than text.", "TRUE, gdy wartość jest inna niż tekst."), + ("TRUE when the value is text.", "TRUE, gdy wartością jest tekst."), + ("TRUE when the value is the #N/A error.", "TRUE, gdy wartością jest błąd #N/A."), + ("TRUE when the value refers to an empty cell.", "TRUE, gdy wartość odnosi się do pustej komórki."), + ("TRUE when two texts are identical, including case.", "TRUE, gdy dwa teksty są identyczne, łącznie z wielkością liter."), + ("Tangent of a complex number.", "Tangens liczby zespolonej."), + ("Tangent of an angle in radians.", "Tangens kąta w radianach."), + ("The constant pi to 15 digits.", "Stała liczba pi do 15 cyfr."), + ("The formula of a cell as text.", "Formuła komórki jako tekst."), + ("The gamma function.", "Funkcja gamma."), + ("The k-th largest number in a data set.", "K-ta największa liczba w zbiorze danych."), + ("The k-th smallest number in a data set.", "K-ta najmniejsza liczba w zbiorze danych."), + ("The reference named by a text string.", "Odniesienie nazwane ciągiem tekstowym."), + ("The sum of a subset as a fraction of the sum of all the values.", "Suma podzbioru jako ułamek sumy wszystkich wartości."), + ("Total interest paid between two periods.", "Łączne odsetki zapłacone pomiędzy dwoma okresami."), + ("Total principal repaid between two periods.", "Łączny kapitał spłacony między dwoma okresami."), + ("Two-tailed Student's t probability.", "Dwustronne prawdopodobieństwo t-Studenta."), + ("Two-tailed inverse of Student's t distribution.", "Dwustronna odwrotność rozkładu t-Studenta."), + ("Two-tailed p-value of an F-test for equality of variances.", "Dwustronna wartość p testu F równości wariancji."), + ("Values along a fitted exponential growth curve.", "Wartości wzdłuż dopasowanej krzywej wzrostu wykładniczego."), + ("Values along a least-squares linear fit.", "Wartości zgodne z dopasowaniem liniowym metodą najmniejszych kwadratów."), + ("Vertical array of all the most frequent numbers.", "Pionowa tablica wszystkich najczęściej występujących liczb."), + ("Weibull density or probability.", "Gęstość lub prawdopodobieństwo Weibulla."), + ("Writes a number in another base, padded with zeros.", "Zapisuje liczbę w innej podstawie, uzupełnioną zerami."), + ("Y-intercept of the least-squares regression line.", "Punkt przecięcia prostej regresji z osią y, wyznaczony metodą najmniejszych kwadratów."), + ("Yield of a Treasury bill.", "Rentowność bonu skarbowego."), + ("Yield of a security paying periodic interest.", "Rentowność papieru wartościowego z okresowymi płatnościami odsetek."), + ("Yield of a security with an odd first period.", "Rentowność papieru wartościowego z nieregularnym pierwszym okresem odsetkowym."), + ("Yield of a security with an odd last period.", "Rentowność papieru wartościowego z nieregularnym ostatnim okresem odsetkowym."), + ("Z-score of a value.", "Wynik Z wartości."), + ("e raised to the given power.", "e podniesione do podanej potęgi."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-ty percentyl, k od 0 do 1 włącznie."), + ("k-th percentile, k strictly between 0 and 1.", "k-ty percentyl, k ściśle pomiędzy 0 a 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "typ_odniesienia"), + ("actual_range", "zakres_obserwowany"), + ("aggregation", "agregacja"), + ("alpha", "alfa"), + ("angle", "kąt"), + ("area_num", "numer_obszaru"), + ("argument", "Argument"), + ("array", "Tablica"), + ("array_x", "tablica_wartości_x"), + ("array_y", "tablica_wartości_y"), + ("average_range", "zakres_uśredniany"), + ("base", "podstawa"), + ("basis", "podstawa"), + ("beta", "beta"), + ("bins_array", "tablica_granic_przedziałów"), + ("bottom", "dolna_granica"), + ("by_array", "tablica_kluczy_sortowania"), + ("by_col", "według_kolumn"), + ("calc_method", "metoda_obliczeniowa"), + ("calculation", "obliczenia"), + ("caption", "podpis"), + ("case_sensitivity", "uwzględnianie_wielkości_liter"), + ("coefficients", "współczynniki"), + ("col_delimiter", "separator_kol"), + ("col_fields", "pola_kolumnowe"), + ("col_index_num", "indeks_kolumny"), + ("col_num", "numer_kolumny"), + ("col_sort_order", "kolejność_sortowania_kolumn"), + ("col_total_depth", "głębokość_sum_kolumn"), + ("cols", "liczba_kolumn"), + ("column_num", "numer_kolumny"), + ("columns", "liczba_kolumn"), + ("confidence_level", "poziom_ufności"), + ("connection", "połączenie_danych"), + ("const", "stała"), + ("cost", "koszt_początkowy"), + ("coupon", "stopa_kuponowa"), + ("criteria", "Kryteria"), + ("criteria_range", "zakres_kryteriów"), + ("cumulative", "dystrybucja_skumulowana"), + ("data_all", "dane_wszystkie"), + ("data_array", "tablica_danych"), + ("data_completion", "uzupełnienie_danych"), + ("data_subset", "podzbiór_danych"), + ("database", "Baza_danych"), + ("date", "data"), + ("date_purchased", "data_zakupu"), + ("date_text", "data_zapisana_jako_tekst"), + ("dates", "daty"), + ("day", "dzień"), + ("days", "dni"), + ("decimal_dollar", "cena_dziesiętna"), + ("decimal_separator", "separator_dziesiętny"), + ("decimals", "miejsca_dziesiętne"), + ("default_or_value", "wartość_domyślna_lub_wartość"), + ("deg_freedom", "stopnie_swobody"), + ("delimiter", "ogranicznik"), + ("denominator", "mianownik"), + ("dimension", "wymiar"), + ("discount", "stopa_dyskontowa"), + ("divisor", "dzielnik"), + ("effect_rate", "stopa_efektywna"), + ("end_date", "data_zakończenia"), + ("end_period", "ostatni_okres"), + ("error_val", "wartość_błędu"), + ("exactly_once", "dokładnie_raz"), + ("expected_range", "oczekiwany_zakres"), + ("expression", "wyrażenie"), + ("factor", "współczynnik"), + ("field", "Pole_bazy_danych"), + ("field_headers", "nagłówki_pól"), + ("field_relationship", "relacja_pomiędzy_polami"), + ("filter_array", "tablica_filtrów"), + ("finance_rate", "stopa_procentowa_finansowania"), + ("find_text", "znajdź_tekst"), + ("first_coupon", "data_pierwszej_wypłaty_kuponu"), + ("first_interest", "data_pierwszej_płatności_odsetek"), + ("first_period", "pierwszy_okres"), + ("form", "forma"), + ("format", "format"), + ("format_text", "format_tekstu"), + ("fraction", "ułamek"), + ("fractional_dollar", "cena_ułamkowa"), + ("frequency", "częstotliwość_płatności_odsetek"), + ("friendly_name", "przyjazna_nazwa"), + ("from_unit", "źródłowa_jednostka_miary"), + ("full_precision", "pełna_precyzja"), + ("function", "Funkcja"), + ("function_num", "numer_funkcji"), + ("fv", "wartość_przyszła"), + ("group_separator", "separator_grup"), + ("guess", "przybliżenie_początkowe"), + ("height", "wysokość"), + ("holidays", "dni_wolne"), + ("hour", "godzina"), + ("i_num", "urojony_współczynnik"), + ("if_empty", "jeśli_jest_pusty"), + ("if_not_found", "jeśli_nie_znaleziono"), + ("ignore", "zignoruj"), + ("ignore_empty", "zignoruj_puste"), + ("include", "zawiera"), + ("index_num", "numer_indeksu"), + ("info_type", "typ_informacji"), + ("initial_value", "wartość_początkowa"), + ("instance_num", "numer_wystąpienia"), + ("inumber", "liczba_zespolona"), + ("investment", "inwestycja"), + ("issue", "data_emisji"), + ("k", "k"), + ("known_xs", "znane_wartości_x"), + ("known_ys", "znane_wartości_y"), + ("kpi_name", "nazwa_kluczowego_wskaźnika_wydajności"), + ("kpi_property", "właściwość_kluczowego_wskaźnika_wydajności"), + ("lambda", "lambda"), + ("last_interest", "ostatnia_data_płatności_odsetek"), + ("life", "okres_użytkowania"), + ("link_location", "lokalizacja_łącza"), + ("logical", "wartość_logiczna"), + ("logical_test", "warunek_logiczny"), + ("lookup_array", "przeszukiwana_tablica"), + ("lookup_value", "szukana_wartość"), + ("lookup_vector", "wektor_wyszukiwania"), + ("lower_limit", "dolny_limit"), + ("m", "m"), + ("match_end", "dopasowuje_ogranicznik_od_końca"), + ("match_mode", "tryb_dopasowania"), + ("match_type", "metoda_dopasowywania"), + ("maturity", "data_zapadalności"), + ("max", "maksymalnie"), + ("max_range", "zakres_maksimum"), + ("mean", "średnia_arytmetyczna"), + ("member_expression", "wyrażenie_elementu_kostki"), + ("method", "Metoda"), + ("min", "minimum"), + ("min_length", "długość_min"), + ("min_range", "zakres_minimum"), + ("minute", "minuta"), + ("mode", "tryb_obliczeniowy"), + ("month", "miesiąc"), + ("months", "miesięcy"), + ("multiple", "wielokrotność"), + ("n", "n"), + ("name", "nazwa"), + ("new_text", "nowy_tekst"), + ("new_xs", "nowe_wartości_x"), + ("no_commas", "pomiń_separatory_grup_cyfr"), + ("no_switch", "nie_zmieniaj_metody_amortyzacji"), + ("nominal_rate", "stopa_nominalna"), + ("nper", "liczba_okresów"), + ("npery", "okresów_w_roku"), + ("num_bytes", "liczba_bajtów"), + ("num_chars", "liczba_znaków"), + ("num_digits", "liczba_cyfr"), + ("number", "liczba"), + ("number_chosen", "liczba_wybranych_elementów"), + ("number_f", "liczba_niepowodzeń"), + ("number_pop", "wielkość_populacji"), + ("number_s", "liczba_sukcesów"), + ("number_sample", "liczebność_próby"), + ("number_times", "liczba_powtórzeń"), + ("numerator", "licznik"), + ("occurrence", "wystąpienie"), + ("old_text", "stary_tekst"), + ("options", "opcje"), + ("order", "kolejność"), + ("pad_with", "wartość_wypełnienia"), + ("par", "wartość_nominalna"), + ("parameter", "Parametr"), + ("pattern", "wzorzec_wyrażenia_regularnego"), + ("per", "numer_okresu"), + ("percent", "procent"), + ("period", "okres"), + ("places", "liczba_cyfr_wyjściowych"), + ("pmt", "płatność"), + ("population_s", "liczba_sukcesów_w_populacji"), + ("power", "wykładnik"), + ("pr", "cena"), + ("principal", "kapitał_początkowy"), + ("prob_range", "zakres_prawdopodobieństw"), + ("probability", "prawdopodobieństwo"), + ("probability_s", "prawdopodobieństwo_sukcesu"), + ("property", "nazwa_właściwości"), + ("pv", "wartość_bieżąca"), + ("quart", "kwartyl"), + ("radix", "podstawa"), + ("range", "zakres"), + ("range_lookup", "wyszukiwanie_zakresu"), + ("rank", "Ranga"), + ("rate", "stopa_procentowa"), + ("real_num", "współczynnik_rzeczywisty"), + ("redemption", "wartość_wykupu"), + ("ref", "odniesienie"), + ("ref_text", "tekst_ref"), + ("reference", "odwołanie"), + ("reinvest_rate", "stopa_procentowa_reinwestycji"), + ("relative_to", "w_stosunku_do"), + ("replacement", "tekst_zastępujący"), + ("result", "wynik"), + ("result_vector", "wektor_wynikowy"), + ("return_array", "zwracana_tablica"), + ("return_mode", "tryb_wyniku"), + ("return_type", "typ_wyniku"), + ("row_delimiter", "ogranicznik_wiersza"), + ("row_fields", "pola_wierszy"), + ("row_index_num", "indeks_wiersza"), + ("row_num", "numer_wiersza"), + ("row_sort_order", "kolejność_sortowania_wierszy"), + ("row_total_depth", "głębokość_sum_wierszy"), + ("rows", "liczba_wierszy"), + ("salvage", "wartość_rezydualna"), + ("sample_s", "liczba_sukcesów_w_próbie"), + ("scan_by_column", "skanowanie_według_kolumny"), + ("schedule", "harmonogram"), + ("search_mode", "tryb_wyszukiwania"), + ("seasonality", "sezonowość"), + ("second", "sekunda"), + ("serial_number", "numer_seryjny"), + ("set", "zestaw_elementów_kostki"), + ("set_expression", "wyrażenie_zestawu_elementów_kostki"), + ("settlement", "data_rozliczenia"), + ("sheet_text", "tekst_arkusza"), + ("shift_amount", "wielkość_przesunięcia"), + ("sigma", "sigma"), + ("significance", "wielokrotność_lub_liczba_cyfr"), + ("size", "rozmiar"), + ("sort_by", "sortuj_według"), + ("sort_index", "indeks_sortowania"), + ("sort_order", "kolejność_sortowania"), + ("source", "źródło"), + ("standard_dev", "odchylenie_standardowe"), + ("start", "wartość_początkowa"), + ("start_date", "data_rozpoczęcia"), + ("start_num", "pozycja_wyjściowa"), + ("start_period", "okres_początkowy"), + ("statistic_type", "typ_statystyki"), + ("stats", "statystyki"), + ("step", "krok"), + ("suffix", "przyrostek"), + ("sum_range", "zakres_sumy"), + ("table_array", "tablica_danych"), + ("tails", "liczba_ogonów_rozkładu"), + ("target", "cel"), + ("target_date", "data_docelowa"), + ("text", "tekst"), + ("time_text", "czas_zapisany_jako_tekst"), + ("timeline", "oś_czasu"), + ("to_unit", "docelowa_jednostka_miary"), + ("top", "górna_granica"), + ("total_depth", "głębokość_sum"), + ("trials", "próby"), + ("triangulation_precision", "precyzja_triangulacji"), + ("trim_cols", "tryb_przycinania_kolumn"), + ("trim_rows", "tryb_przycinania_rzędów"), + ("type", "typ"), + ("type_text", "nazwa_typu_danych"), + ("unit", "jednostka"), + ("upper_limit", "górny_limit"), + ("url", "adres_URL"), + ("value", "Wartość"), + ("value_if_error", "wynik_w_przypadku_błędu"), + ("value_if_false", "wynik_gdy_warunek_jest_fałszywy"), + ("value_if_na", "wynik_dla_błędu_NA"), + ("value_if_true", "wynik_gdy_warunek_jest_prawdziwy"), + ("values", "wartości_wejściowe"), + ("vector", "wektor"), + ("weekend", "weekend"), + ("whole_number", "liczba_całkowita"), + ("width", "szerokość"), + ("within_text", "przeszukiwany_tekst"), + ("wrap_count", "liczba_wartości_w_wierszu_lub_kolumnie"), + ("x", "x"), + ("x_num", "współrzędna_x"), + ("x_range", "x_zakres"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "współrzędna_y"), + ("year", "rok"), + ("yld", "rentowność"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/pt.rs b/crates/ui-egui/src/i18n/pt.rs index 3cc4faf763..f5ec6cca4a 100644 --- a/crates/ui-egui/src/i18n/pt.rs +++ b/crates/ui-egui/src/i18n/pt.rs @@ -4,6 +4,44 @@ /// Returns the Portuguese translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "3 Arrows" => "3 setas", + "3 Symbols" => "3 símbolos", + "3 Traffic Lights" => "3 semáforos", + "4 Ratings" => "4 classificações", + "5 Arrows" => "5 setas", + "5 Quarters" => "5 quartos", + "Applies to" => "Aplica-se a", + "Apply" => "Aplicar", + "Formula" => "Fórmula", + "Maximum" => "Máximo", + "Minimum" => "Mínimo", + "New Formatting Rule" => "Nova regra de formatação", + "New Rule…" => "Nova regra…", + "No Border" => "Sem borda", + "Percent" => "Percentual", + "and" => "e", + "Borders|None" => "Nenhum", + "Report Layout|Outline" => "Estrutura de Tópicos", + "a linked (not embedded) picture was skipped" => "A imagem vinculada (não incorporada) foi ignorada.", + "missing picture {target}" => "Imagem ausente: {target}.", + "chart {target} has no supported plot and was skipped" => "O gráfico {target} não tem um tipo de gráfico compatível e foi ignorado.", + "a histogram, waterfall, treemap… chart without its chart part was skipped" => { + "O gráfico de histograma, cascata, mapa de árvore… sem a parte de gráfico foi ignorado." + } + "an embedded object (diagram, OLE…) was skipped" => "O objeto incorporado (diagrama, OLE…) foi ignorado.", + "grouped shapes are not supported and were skipped" => "Formas agrupadas não têm suporte e foram ignoradas.", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported." => { + "Importação XLSB somente dos dados: as fórmulas se tornam os resultados salvos e não serão recalculadas. A formatação, os gráficos, as imagens, as macros e outros recursos não são importados; datas, moeda e porcentagens podem ser exibidas como números. Salve um novo arquivo .xlsx; não há suporte para salvar como XLSB." + } + "XLSB module sheets were skipped." => "As planilhas de módulo XLSB foram ignoradas.", + "XLSB non-worksheet sheets were skipped." => "As planilhas XLSB que não são planilhas de cálculo foram ignoradas.", + "Unsupported XLSB future-record and alternate-content blocks were skipped." => { + "Os blocos de registros futuros e de conteúdo alternativo não compatíveis do XLSB foram ignorados." + } + "Invalid XLSB merged ranges were skipped." => "Os intervalos mesclados inválidos do XLSB foram ignorados.", + "{count} items in this file were handled differently. First: {warning}" => { + "{count} itens deste arquivo foram processados de forma diferente. Primeiro: {warning}" + } "Diagram" => "Diagrama", "Decorative Text" => "Texto decorativo", "Paste" => "Colar", @@ -420,6 +458,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Print Entire Workbook" => "Imprimir toda a pasta de trabalho", "Fit Sheet on One Page" => "Ajustar planilha em uma página", "Page Setup…" => "Configurar página…", + "Page {page}" => "Página {page}", "Page {page} of {pages}" => "Página {page} de {pages}", "Nothing to print." => "Nada para imprimir.", "Previous page" => "Página anterior", @@ -571,6 +610,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Values and number formats" => "Valores e formatos de número", "Operation" => "Operação", "Add" => "Adicionar", + "Paste Special|Add" => "Adicionar", "Subtract" => "Subtrair", "Multiply" => "Multiplicar", "Divide" => "Dividir", @@ -610,6 +650,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Tab" => "Tabulação", "Semicolon" => "Ponto e vírgula", "Comma" => "Vírgula", + "Text to Columns|Comma" => "Vírgula", "Space" => "Espaço", "Other:" => "Outros:", "Treat consecutive delimiters as one" => "Considerar delimitadores consecutivos como um só", @@ -862,7 +903,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Confidence Level for Mean (%), blank for none:" => "Nível de confiabilidade para a média (%), em branco para nenhum:", "Kth Largest (blank for none):" => "K-ésimo maior (em branco para nenhum):", "Kth Smallest (blank for none):" => "K-ésimo menor (em branco para nenhum):", - "Bin Range (blank for automatic bins):" => "Intervalo do bloco (em branco para blocos automáticos):", + "Bin Range (blank for automatic bins):" => "Intervalo de classes (em branco para classes automáticas):", "Pareto (sorted histogram)" => "Pareto (histograma classificado)", "Cumulative Percentage" => "Porcentagem cumulativa", "Alpha:" => "Alfa:", @@ -1022,6 +1063,25 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Recording" => "Gravando", "New Macro" => "Nova Macro", "Show" => "Mostrar", + "Generated|Column" => "Coluna", + "Generated|Row" => "Linha", + "Book" => "Pasta", + "Sheet" => "Planilha", + "Count Numbers" => "Contar números", + "Type to filter…" => "Digite para filtrar…", + "Nothing to paste." => "Não há dados para colar.", + "No cells were found." => "Nenhuma célula foi encontrada.", + "Or select a category:" => "Ou selecione uma categoria:", + "Most Recently Used" => "Usadas recentemente", + "Insert Function…" => "Inserir função…", + "Paste Names…" => "Colar nomes…", + "Macro name:" => "Nome da macro:", + "Shortcut key:" => "Tecla de atalho:", + "Description:" => "Descrição:", + "Check for Updates…" => "Verificar atualizações…", + "Checking for updates…" => "Verificando atualizações…", + "Could not check for updates." => "Não foi possível verificar atualizações.", + "Check Again" => "Verificar novamente", "Collapse dialog" => "Recolher caixa de diálogo", "Expand dialog" => "Expandir caixa de diálogo", _ => return None, diff --git a/crates/ui-egui/src/i18n/pt_functions.rs b/crates/ui-egui/src/i18n/pt_functions.rs new file mode 100644 index 0000000000..3f004df924 --- /dev/null +++ b/crates/ui-egui/src/i18n/pt_functions.rs @@ -0,0 +1,999 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 para positivo, -1 para negativo e 0 para zero."), + ("A random integer between two bounds, inclusive.", "Um número inteiro aleatório entre dois limites, inclusive."), + ("A random number between 0 and 1, recalculated every time.", "Um número aleatório entre 0 e 1, sempre recalculado."), + ("A range or array without its blank outer rows and columns.", "Um intervalo ou matriz sem linhas e colunas externas em branco."), + ("A reference shifted from a starting point.", "Uma referência deslocada de um ponto de partida."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Estatística do modelo FORECAST.ETS: 1 alfa, 2 beta, 3 gama, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 tamanho do passo.", + ), + ("A subtotal that can skip hidden rows.", "Um subtotal que pode pular linhas ocultas."), + ("Absolute value (modulus) of a complex number.", "Valor absoluto (módulo) de um número complexo."), + ("Absolute value of a number.", "Valor absoluto de um número."), + ("Accrued interest of a security paying interest at maturity.", "Juros acumulados de um título que paga juros no vencimento."), + ("Accrued interest of a security paying periodic interest.", "Juros acumulados de um título que paga juros periódicos."), + ("Accumulates an array into one value.", "Acumula um array em um valor."), + ("Adds all the numbers in the arguments.", "Soma todos os números dos argumentos."), + ("Adds the cells that meet a condition.", "Retorna a soma dos valores numéricos nas células da planilha que satisfazem uma condição."), + ("Adds the cells that meet every condition.", "Retorna a soma dos valores numéricos nas células da planilha que satisfazem todas as condições."), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Retorna a soma dos valores numéricos em um campo do banco de dados, para registros que atendem aos critérios.", + ), + ("Adds the squares of the numbers.", "Retorna a soma dos quadrados dos números."), + ("Amount received at maturity for a fully invested security.", "Valor recebido no vencimento de um título totalmente pago."), + ("An aggregate that can skip hidden rows and errors.", "Um agregado que pode pular linhas ocultas e erros."), + ("Angle of a complex number in radians.", "Ângulo de um número complexo em radianos."), + ("Angle of the point (x, y) from the x-axis in radians.", "Ângulo do ponto (x, y) em relação ao eixo x em radianos."), + ("Annual yield of a discounted security.", "Rendimento anual de um título com desconto."), + ("Annual yield of a security paying interest at maturity.", "Rendimento anual de um título que paga juros no vencimento."), + ("Applies a LAMBDA to each column.", "Aplica um LAMBDA a cada coluna."), + ("Applies a LAMBDA to each row.", "Aplica um LAMBDA a cada linha."), + ("Applies a LAMBDA to each value.", "Aplica um LAMBDA a cada valor."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Pesquisa aproximada em um vetor classificado ou na primeira linha/coluna de um array.", + ), + ("Arccosine in radians.", "Arcocosseno em radianos."), + ("Arccotangent in radians (0 to pi).", "Arcocotangente em radianos (0 a pi)."), + ("Arcsine in radians.", "Arco seno em radianos."), + ("Arctangent in radians.", "Arctangente em radianos."), + ("Arithmetic mean of the numbers.", "Média aritmética dos números."), + ("Average absolute deviation from the mean.", "Desvio absoluto médio da média."), + ("Average of the cells that meet a condition.", "Média das células da planilha que atendem a uma condição."), + ("Average of the cells that meet every condition.", "Média das células da planilha que atendem a todas as condições."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Calcula a média dos números em um campo dos registros que atendem aos critérios.", + ), + ("Base-10 logarithm of a complex number.", "Logaritmo de base 10 de um número complexo."), + ("Base-10 logarithm.", "Logaritmo de base 10."), + ("Base-2 logarithm of a complex number.", "Logaritmo de base 2 de um número complexo."), + ("Bessel function of the first kind, J_n(x).", "Função de Bessel de primeiro tipo, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Função de Bessel de segundo tipo, Y_n(x)."), + ("Beta distribution density or probability.", "Densidade ou probabilidade de distribuição beta."), + ("Binomial probability.", "Probabilidade binomial."), + ("Bitwise AND of two non-negative integers.", "AND bit a bit de dois inteiros não negativos."), + ("Bitwise OR of two non-negative integers.", "OR bit a bit de dois inteiros não negativos."), + ("Bitwise exclusive OR of two non-negative integers.", "OR exclusivo bit a bit de dois números inteiros não negativos."), + ("Bond-equivalent yield of a Treasury bill.", "Rendimento de uma letra do Tesouro equivalente ao de um título de dívida."), + ("Breaks a row or column into columns of the given length.", "Quebra uma linha ou coluna em colunas de determinado comprimento."), + ("Breaks a row or column into rows of the given length.", "Quebra uma linha ou coluna em linhas de determinado comprimento."), + ( + "Builds a cell address as text from row and column numbers.", + "Constrói um endereço de célula como texto a partir de números de linha e coluna.", + ), + ( + "Builds a complex number as text from real and imaginary parts.", + "Constrói um número complexo como texto a partir de partes reais e imaginárias.", + ), + ("Builds a date serial number from a year, month and day.", "Constrói um número de série de data a partir de um ano, mês e dia."), + ( + "Builds a summary table grouping values by row and column fields.", + "Constrói uma tabela de resumo agrupando valores por campos de linha e coluna.", + ), + ( + "Builds a time (a fraction of a day) from hours, minutes and seconds.", + "Constrói um tempo (uma fração de um dia) a partir de horas, minutos e segundos.", + ), + ("Builds an array from a LAMBDA.", "Constrói um array a partir de um LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Constrói uma matriz de números escalonados uniformemente."), + ("Builds an array of random numbers in a range.", "Constrói uma matriz de números aleatórios em um intervalo."), + ("Byte version of FIND.", "Versão em bytes de FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Versão em bytes de LEFT (igual a LEFT para texto de byte único)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Versão em byte de LEN (igual a LEN para texto de byte único)."), + ("Byte version of MID (same as MID for single-byte text).", "Versão em bytes de MID (igual a MID para texto de byte único)."), + ("Byte version of REPLACE.", "Versão em bytes de REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Versão em bytes de RIGHT (igual a RIGHT para texto de byte único)."), + ("Byte version of SEARCH.", "Versão em bytes de SEARCH."), + ( + "Capitalises the first letter of each word and lower-cases the rest.", + "Coloca a primeira letra de cada palavra em maiúscula e o resto em minúscula.", + ), + ("Chi-squared density or left-tailed probability.", "Densidade qui-quadrada ou probabilidade de cauda esquerda."), + ("Chi-squared test of independence.", "Teste qui-quadrado de independência."), + ("Column number of a reference.", "Número da coluna de uma referência."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Compara uma expressão com uma lista de valores e retorna o resultado emparelhado com a primeira correspondência.", + ), + ("Complementary error function, 1 - ERF(x).", "Função de erro complementar, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Conjugado complexo de um número complexo."), + ("Confidence interval half-width using Student's t distribution.", "Meia largura do intervalo de confiança usando distribuição t de Student."), + ("Confidence interval half-width using the normal distribution.", "Meia largura do intervalo de confiança usando a distribuição normal."), + ("Converts Roman numerals to a number.", "Converte algarismos romanos em um número."), + ("Converts a binary number to decimal.", "Converte um número binário em decimal."), + ("Converts a binary number to hexadecimal.", "Converte um número binário em hexadecimal."), + ("Converts a binary number to octal.", "Converte um número binário em octal."), + ("Converts a date written as text into a date serial number.", "Converte uma data escrita como texto em um número de série de data."), + ("Converts a decimal number to binary.", "Converte um número decimal em binário."), + ("Converts a decimal number to hexadecimal.", "Converte um número decimal em hexadecimal."), + ("Converts a decimal number to octal.", "Converte um número decimal em octal."), + ("Converts a decimal price to fractional notation.", "Converte um preço decimal em notação fracionária."), + ("Converts a fractional price notation to a decimal number.", "Converte uma notação de preço fracionário em um número decimal."), + ("Converts a hexadecimal number to binary.", "Converte um número hexadecimal em binário."), + ("Converts a hexadecimal number to decimal.", "Converte um número hexadecimal em decimal."), + ("Converts a hexadecimal number to octal.", "Converte um número hexadecimal em octal."), + ("Converts a measurement from one unit to another.", "Converte uma medida de uma unidade para outra."), + ("Converts a number to Roman numerals in one of five styles.", "Converte um número em algarismos romanos em um dos cinco estilos."), + ("Converts a time written as text into a fraction of a day.", "Converte uma hora escrita como texto em uma fração de um dia."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Converte um valor em um número: os números permanecem, TRUE é 1, todo o resto é 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Converte uma matriz em texto, como uma lista separada por vírgulas ou como uma constante de matriz estrita.", + ), + ("Converts an octal number to binary.", "Converte um número octal em binário."), + ("Converts an octal number to decimal.", "Converte um número octal em decimal."), + ("Converts an octal number to hexadecimal.", "Converte um número octal em hexadecimal."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Converte qualquer valor em texto, opcionalmente em formato estrito (entre aspas).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Converte entre o euro e as antigas moedas dos países da zona do euro a taxas fixas.", + ), + ("Converts degrees to radians.", "Converte graus em radianos."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Converte caracteres de largura total em meia largura (sem alteração para texto de byte único).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Converte caracteres de meia largura em largura total (sem alteração nesta localidade).", + ), + ("Converts radians to degrees.", "Converte radianos em graus."), + ("Converts text that looks like a number, date or time into a number.", "Converte texto que se parece com um número, data ou hora em um número."), + ( + "Converts text to a number using the given decimal and group separators.", + "Converte texto em um número usando os separadores decimais e de grupo fornecidos.", + ), + ("Converts text to lower case.", "Converte texto em minúsculas."), + ("Converts text to upper case.", "Converte texto em maiúsculas."), + ("Correlation coefficient of two data sets.", "Coeficiente de correlação de dois conjuntos de dados."), + ("Cosecant of a complex number.", "Cosecante de um número complexo."), + ("Cosecant of an angle in radians.", "Cosecante de um ângulo em radianos."), + ("Cosine of a complex number.", "Cosseno de um número complexo."), + ("Cosine of an angle in radians.", "Cosseno de um ângulo em radianos."), + ("Cotangent of a complex number.", "Cotangente de um número complexo."), + ("Cotangent of an angle in radians.", "Cotangente de um ângulo em radianos."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Conta os dias entre duas datas num ano de 360 dias (US ou método europeu).", + ), + ("Counts empty cells and empty text in a range.", "Conta células vazias da planilha e texto vazio em um intervalo."), + ("Counts how many values fall into each bin, as a vertical array.", "Conta quantos valores caem em cada classe, como uma matriz vertical."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Conta células não vazias da planilha em um campo dos registros correspondentes (ou dos registros correspondentes).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Conta células numéricas da planilha em um campo dos registros correspondentes (ou dos registros correspondentes).", + ), + ("Counts the cells that meet a condition.", "Conta as células da planilha que atendem a uma condição."), + ("Counts the cells that meet every condition.", "Conta as células da planilha que atendem a todas as condições."), + ("Counts the characters in a text.", "Conta os caracteres de um texto."), + ("Counts the columns in an array or range.", "Conta as colunas em uma matriz ou intervalo."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Conta os itens em um conjunto de cubos (sem conexões de cubo; #N/A)."), + ("Counts the non-empty values.", "Conta os valores não vazios."), + ("Counts the numbers.", "Conta os números."), + ("Counts the rows in an array or range.", "Conta as linhas em uma matriz ou intervalo."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Conta anos, meses ou dias inteiros entre duas datas. unidade: Y, M, D, MD, YM ou YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Conta dias úteis (segunda a sexta) entre duas datas, exceto feriados.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Conta dias úteis entre duas datas com fim de semana personalizado, exceto feriados.", + ), + ("Creates a link; the cell shows the friendly name, or the link itself.", "Cria um link; a célula mostra o nome amigável ou o próprio link."), + ("Creates a reusable custom function.", "Cria uma função personalizada reutilizável."), + ("Cumulative beta probability.", "Probabilidade beta cumulativa."), + ("Cumulative lognormal probability.", "Probabilidade lognormal cumulativa."), + ("Cuts off the fractional part of a number at the given digits.", "Corta a parte fracionária de um número nos dígitos fornecidos."), + ("Days from settlement to the next coupon date.", "Dias desde a liquidação até a próxima data de pagamento de juros."), + ("Days from the start of the coupon period to settlement.", "Dias desde o início do período de pagamento de juros até a liquidação."), + ("Days in the coupon period that contains settlement.", "Dias do período de pagamento de juros que contém liquidação."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Depreciação pelo método do saldo decrescente em qualquer intervalo de períodos, mudando para o método linear.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Define um conjunto de membros de cubo (sem conexões de cubo; #N/A)."), + ("Determinant of a square matrix.", "Determinante de uma matriz quadrada."), + ("Difference of two complex numbers.", "Diferença de dois números complexos."), + ("Discount rate of a security.", "Taxa de desconto de um título."), + ("Double factorial of a number.", "Fatorial duplo de um número."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Depreciação de saldo decrescente duplo (ou outro fator) por um período.", + ), + ( + "Effective annual rate from a nominal rate and compounding periods.", + "Taxa anual efetiva a partir de uma taxa nominal e períodos de capitalização.", + ), + ("Equivalent interest rate for the growth of an investment.", "Taxa de juros equivalente ao crescimento de um investimento."), + ("Error function integrated from 0 to a limit, or between two limits.", "Função de erro integrada de 0 a um limite, ou entre dois limites."), + ("Error function integrated from 0 to x.", "Função de erro integrada de 0 a x."), + ("Excess kurtosis of a sample.", "Excesso de curtose de uma amostra."), + ( + "Exponential curve coefficients and optional regression statistics.", + "Coeficientes de curva exponencial e estatísticas de regressão opcionais.", + ), + ("Exponential distribution density or probability.", "Densidade ou probabilidade de distribuição exponencial."), + ("Exponential of a complex number.", "Exponencial de um número complexo."), + ("Extracts data from XML with an XPath (not available; returns #VALUE!).", "Extrai dados de XML com um XPath (não disponível; retorna #VALUE!)."), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Extrai a primeira correspondência, todas as correspondências ou os grupos de captura de uma expressão regular.", + ), + ("F distribution density or left-tailed probability.", "Densidade de distribuição F ou probabilidade de cauda esquerda."), + ("Factorial of a number.", "Fatorial de um número."), + ("Fetches data from a web service (not available; returns #VALUE!).", "Busca dados de um serviço web (não disponível; retorna #VALUE!)."), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Encontra um valor na primeira coluna de uma tabela e retorna o valor na mesma linha de outra coluna.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Encontra um valor na primeira linha de uma tabela e retorna o valor na mesma coluna de outra linha.", + ), + ("Finds the position of one text in another (case-sensitive).", "Encontra a posição de um texto em outro (diferencia maiúsculas de minúsculas)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Encontra a posição de um texto em outro, ignorando maiúsculas e minúsculas e permitindo curingas.", + ), + ("Fisher transformation.", "Transformação de Fisher."), + ("Fixed-declining-balance depreciation for a period.", "Depreciação de saldo decrescente fixo por um período."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Achata um array em uma única coluna, opcionalmente ignorando espaços em branco ou erros.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Achata um array em uma única linha, opcionalmente ignorando espaços em branco ou erros.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Prevê um valor por suavização exponencial aditiva (AAA)."), + ("Formats a number as currency text, like DOLLAR.", "Formata um número como texto monetário, como DOLLAR."), + ("Formats a number as currency text.", "Formata um número como texto monetário."), + ("Formats a number as text.", "Formata um número como texto."), + ("French degressive depreciation with a life-based coefficient.", "Depreciação degressiva francesa com coeficiente baseado na vida útil."), + ("French linear depreciation prorated for the first period.", "Depreciação linear francesa rateada para o primeiro período."), + ("Future value of a principal after a series of compound rates.", "Valor futuro de um principal após uma série de taxas compostas."), + ("Future value of an investment with constant payments and rate.", "Valor futuro de um investimento com pagamentos e taxas constantes."), + ("Gamma distribution density or probability.", "Densidade ou probabilidade de distribuição gama."), + ("Geometric mean of positive numbers.", "Média geométrica de números positivos."), + ("Greatest common divisor of integers.", "Máximo divisor comum de inteiros."), + ("Groups rows by key fields and aggregates the values of each group.", "Agrupa linhas por campos-chave e agrega os valores de cada grupo."), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Expande uma matriz até o tamanho determinado, preenchendo as novas células com um valor de preenchimento.", + ), + ( + "Half-width of the confidence interval around a FORECAST.ETS value.", + "Meia largura do intervalo de confiança em torno de um valor FORECAST.ETS.", + ), + ("Harmonic mean of positive numbers.", "Média harmônica de números positivos."), + ("Hyperbolic cosecant of a complex number.", "Cosecante hiperbólica de um número complexo."), + ("Hyperbolic cosecant.", "Cosecante hiperbólica."), + ("Hyperbolic cosine of a complex number.", "Cosseno hiperbólico de um número complexo."), + ("Hyperbolic cosine.", "Cosseno hiperbólico."), + ("Hyperbolic cotangent.", "Cotangente hiperbólica."), + ("Hyperbolic secant of a complex number.", "Secante hiperbólica de um número complexo."), + ("Hyperbolic secant.", "Secante hiperbólica."), + ("Hyperbolic sine of a complex number.", "Seno hiperbólico de um número complexo."), + ("Hyperbolic sine.", "Seno hiperbólico."), + ("Hyperbolic tangent.", "Tangente hiperbólica."), + ("Hypergeometric probability of an exact count.", "Probabilidade hipergeométrica de uma contagem exata."), + ("Hypergeometric probability.", "Probabilidade hipergeométrica."), + ("Identity matrix of the given size.", "Matriz de identidade do tamanho fornecido."), + ("Imaginary coefficient of a complex number.", "Coeficiente imaginário de um número complexo."), + ("Information about a cell.", "Informações sobre uma célula."), + ("Integer part of a division.", "Parte inteira de uma divisão."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Juros pagos num período de empréstimo com pagamentos iguais do principal.", + ), + ("Interest part of a given period's payment.", "Parcela de juros do pagamento de um determinado período."), + ("Interest rate of a fully invested security.", "Taxa de juros de um título totalmente pago."), + ("Interest rate per period of an annuity, found iteratively.", "Taxa de juros por período de uma anuidade, apurada iterativamente."), + ("Internal rate of return of cash flows on specific dates.", "Taxa interna de retorno dos fluxos de caixa em datas específicas."), + ("Internal rate of return of periodic cash flows.", "Taxa interna de retorno dos fluxos de caixa periódicos."), + ("Inverse hyperbolic cosine.", "Cosseno hiperbólico inverso."), + ("Inverse hyperbolic cotangent.", "Cotangente hiperbólica inversa."), + ("Inverse hyperbolic sine.", "Seno hiperbólico inverso."), + ("Inverse hyperbolic tangent.", "Tangente hiperbólica inversa."), + ("Inverse of a square matrix.", "Inversa de uma matriz quadrada."), + ("Inverse of the Fisher transformation.", "Inverso da transformação de Fisher."), + ("Inverse of the cumulative beta distribution.", "Inverso da distribuição beta cumulativa."), + ("Inverse of the cumulative lognormal distribution.", "Inverso da distribuição lognormal cumulativa."), + ("Inverse of the gamma cumulative distribution.", "Inverso da distribuição gama cumulativa."), + ("Inverse of the left-tailed F distribution.", "Inverso da distribuição F de cauda esquerda."), + ("Inverse of the left-tailed chi-squared distribution.", "Inverso da distribuição qui-quadrado de cauda esquerda."), + ("Inverse of the normal cumulative distribution.", "Inverso da distribuição cumulativa normal."), + ("Inverse of the right-tailed F distribution.", "Inverso da distribuição F de cauda direita."), + ("Inverse of the right-tailed chi-squared distribution.", "Inverso da distribuição qui-quadrado de cauda direita."), + ("Inverse of the standard normal cumulative distribution.", "Inverso da distribuição cumulativa normal padrão."), + ("Joins several text values into one.", "Junta vários valores de texto em um."), + ( + "Joins text from values and every cell of ranges, without a separator.", + "Une o texto dos valores e de todas as células dos intervalos, sem separador.", + ), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Une texto de valores e intervalos com um delimitador, opcionalmente ignorando itens vazios.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Mantém linhas ou colunas desde o início (ou final) de um array."), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Mantém as linhas ou colunas de um array cujo sinalizador de inclusão é TRUE.", + ), + ("Largest number (0 when there are none).", "Maior número (0 quando não há nenhum)."), + ("Largest number in a field of the matching records.", "Maior número em um campo dos registros correspondentes."), + ("Largest value among cells that meet every condition.", "Maior valor entre as células da planilha que atendem a todas as condições."), + ("Largest value counting text as 0 and logicals as 1/0.", "Maior valor contando texto como 0 e lógico como 1/0."), + ("Least common multiple of integers.", "Mínimo múltiplo comum de inteiros."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Coeficientes de linha de mínimos quadrados e estatísticas de regressão opcionais.", + ), + ("Left-tailed inverse of Student's t distribution.", "Inverso de cauda esquerda da distribuição t de Student."), + ("Length of the repeating pattern detected in a time series.", "Comprimento do padrão de repetição detectado em uma série temporal."), + ("Logarithm to the given base (10 by default).", "Logaritmo para a base fornecida (10 por padrão)."), + ("Lognormal density or probability.", "Lognormal densidade ou probabilidade."), + ("Macaulay duration of a security with periodic interest.", "Duração de Macaulay de um título com juros periódicos."), + ("Matrix product of two arrays.", "Produto matricial de duas matrizes."), + ("Mean after trimming a fraction of points from both ends.", "Média após cortar uma fração de pontos de ambas as extremidades."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Média considerando texto como 0 e valores lógicos como 1 ou 0."), + ("Middle value of the numbers.", "Valor central dos números (mediana)."), + ("Modified Bessel function of the first kind, I_n(x).", "Função de Bessel modificada do primeiro tipo, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Função de Bessel modificada de segundo tipo, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Duração modificada de um título com juros periódicos."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Taxa interna de retorno modificada usando taxas de empréstimo e reinvestimento separadas.", + ), + ("Most frequently occurring number.", "Número que ocorre com mais frequência."), + ("Multiplies all the numbers in the arguments.", "Multiplica todos os números nos argumentos."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Multiplica elementos correspondentes de matrizes de tamanhos iguais e adiciona os produtos.", + ), + ("Multiplies the numbers in a field of the matching records.", "Multiplica os números em um campo dos registros correspondentes."), + ("Names intermediate results.", "Nomeia resultados intermediários."), + ("Natural log of the gamma function.", "Log natural da função gama."), + ("Natural logarithm of a complex number.", "Logaritmo natural de um número complexo."), + ("Natural logarithm.", "Logaritmo natural."), + ("Negative binomial probability.", "Probabilidade binomial negativa."), + ("Net present value of cash flows on specific dates.", "Valor presente líquido dos fluxos de caixa em datas específicas."), + ("Net present value of periodic cash flows at a discount rate.", "Valor presente líquido dos fluxos de caixa periódicos a uma taxa de desconto."), + ("Next coupon date after settlement.", "Próxima data de pagamento de juros após a liquidação."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Taxa anual nominal a partir de uma taxa efetiva e períodos de capitalização.", + ), + ("Normal distribution density or cumulative probability.", "Densidade de distribuição normal ou probabilidade cumulativa."), + ("Number of areas in a reference.", "Número de áreas em uma referência."), + ("Number of combinations with repetition.", "Número de combinações com repetição."), + ("Number of combinations without repetition.", "Número de combinações sem repetição."), + ("Number of coupons payable between settlement and maturity.", "Número de pagamentos de juros devidos entre a liquidação e o vencimento."), + ("Number of ordered selections with repetition.", "Número de seleções ordenadas com repetição."), + ("Number of ordered selections without repetition.", "Número de seleções ordenadas sem repetição."), + ("Number of periods needed to pay off or accumulate an amount.", "Número de períodos necessários para quitar ou acumular um valor."), + ("Number of sheets.", "Número de folhas."), + ("One- or two-tailed Student's t probability.", "Probabilidade t de Student uni ou bicaudal."), + ("One-tailed probability of a z-test.", "Probabilidade unilateral de um teste z."), + ("Pearson product-moment correlation coefficient.", "Coeficiente de correlação produto-momento de Pearson."), + ("Percent-encodes text for use in a URL.", "Texto com codificação percentual para uso em um URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Pagamento periódico de um empréstimo ou anuidade com pagamentos e taxas constantes.", + ), + ("Periods needed for an investment to grow to a target value.", "Períodos necessários para que um investimento cresça até um valor alvo."), + ("Picks a value from the list by its position.", "Seleciona um valor da lista por sua posição."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Seleciona colunas de um array por posição (contagens negativas a partir do final).", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Seleciona linhas de um array por posição (contagens negativas a partir do final).", + ), + ("Places arrays side by side.", "Coloca matrizes lado a lado."), + ("Poisson probability.", "Probabilidade de Poisson."), + ("Population covariance of paired values.", "Covariância populacional de valores pareados."), + ("Population skewness.", "Assimetria populacional."), + ("Population standard deviation counting text as 0 and logicals as 1/0.", "Desvio padrão da população contando texto como 0 e lógico como 1/0."), + ( + "Population standard deviation of a field over the matching records.", + "Desvio padrão populacional de um campo sobre os registros correspondentes.", + ), + ("Population standard deviation.", "Desvio padrão da população."), + ("Population variance counting text as 0 and logicals as 1/0.", "Variância populacional considerando texto como 0 e valores lógicos como 1/0."), + ("Population variance of a field over the matching records.", "Variância populacional de um campo nos registros correspondentes."), + ("Population variance.", "Variância populacional."), + ("Positive square root.", "Raiz quadrada positiva."), + ("Predicts a value along a linear trend.", "Prevê um valor ao longo de uma tendência linear."), + ("Present value of a series of equal future payments.", "Valor presente de uma série de pagamentos futuros iguais."), + ("Previous coupon date on or before settlement.", "Data anterior de pagamento de juros na liquidação ou antes dela."), + ("Price per 100 face value of a Treasury bill.", "Preço por 100 do valor nominal de uma letra do Tesouro."), + ("Price per 100 face value of a discounted security.", "Preço por 100 do valor nominal de um título com desconto."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Preço por 100 do valor nominal de um título que paga juros no vencimento.", + ), + ("Price per 100 face value of a security paying periodic interest.", "Preço por 100 do valor nominal de um título que paga juros periódicos."), + ( + "Price per 100 face value of a security with an odd first period.", + "Preço por 100 do valor nominal de um título com primeiro período de juros irregular.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Preço por 100 do valor nominal de um título com último período de juros irregular.", + ), + ("Principal part of a given period's payment.", "Parcela de amortização do principal no pagamento de um determinado período."), + ("Probability from Student's t-test.", "Probabilidade do teste t de Student."), + ("Probability of a number of successes falling in a range.", "Probabilidade de um número de sucessos dentro de um intervalo."), + ("Probability that a standard normal value falls between the mean and z.", "Probabilidade de um valor normal padrão ficar entre a média e z."), + ("Probability that values fall between two limits.", "Probabilidade de os valores ficarem entre dois limites."), + ("Product of complex numbers.", "Produto de números complexos."), + ("Quartile (0–4) of a data set, inclusive method.", "Quartil (0–4) de um conjunto de dados, método inclusivo."), + ("Quartile (0–4) of a data set.", "Quartil (0–4) de um conjunto de dados."), + ("Quartile (1–3) of a data set, exclusive method.", "Quartil (1–3) de um conjunto de dados, método exclusivo."), + ("Quotient of two complex numbers.", "Quociente de dois números complexos."), + ("Raises a complex number to a power.", "Eleva um número complexo a uma potência."), + ("Raises a number to a power.", "Eleva um número a uma potência."), + ("Rank of a number within a list.", "Classificação de um número em uma lista."), + ("Rank of a number within a list; ties get the average rank.", "Classificação de um número em uma lista; empates obtêm a classificação média."), + ( + "Rank of a number within a list; ties share the top rank.", + "Classificação de um número em uma lista; empates compartilham a classificação superior.", + ), + ("Ratio of the factorial of a sum to the product of factorials.", "Razão entre o fatorial de uma soma e o produto dos fatoriais."), + ("Reads text in a given base as a number.", "Lê texto em uma determinada base como um número."), + ("Real coefficient of a complex number.", "Coeficiente real de um número complexo."), + ("Relative standing of a value as a fraction of the data set.", "Posição relativa de um valor como uma fração do conjunto de dados."), + ("Relative standing of a value from 0 to 1 inclusive.", "Posição relativa de um valor de 0 a 1 inclusive."), + ("Relative standing of a value strictly between 0 and 1.", "Posição relativa de um valor estritamente entre 0 e 1."), + ("Remainder of a division, with the sign of the divisor.", "Resto de uma divisão, com o sinal do divisor."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Remove espaços iniciais e finais e reduz séries de espaços para um.", + ), + ("Removes non-printable control characters from text.", "Remove caracteres de controle não imprimíveis do texto."), + ("Removes rows or columns from the start (or end) of an array.", "Remove linhas ou colunas do início (ou final) de uma matriz."), + ("Repeats a text a given number of times.", "Repete um texto um determinado número de vezes."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Substitui correspondências de uma expressão regular, todas elas ou uma ocorrência escolhida.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Substitui ocorrências de um texto por outro, opcionalmente apenas uma determinada ocorrência.", + ), + ("Replaces part of a text by position.", "Substitui parte de um texto por posição."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Retorna 1 quando um número é pelo menos o passo, caso contrário, 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Retorna 1 quando dois números são iguais, caso contrário, 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Retorna um código para o tipo de valor: 1 número, 2 texto, 4 lógico, 16 erro, 64 array.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Retorna um substituto quando o valor for #N/A, caso contrário, o valor."), + ( + "Returns a fallback when the value is an error, otherwise the value.", + "Retorna um substituto quando o valor é um erro, caso contrário, o valor.", + ), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Retorna uma propriedade de indicador chave de desempenho de um cubo (sem conexões de cubo; #N/A).", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "Retorna um membro ou tupla de um cubo (sem conexões de cubo; #N/A)."), + ( + "Returns a property of a cube member (no cube connections; #N/A).", + "Retorna uma propriedade de um membro do cubo (sem conexões de cubo; #N/A).", + ), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "Retorna um valor agregado de um cubo (sem conexões de cubo; #N/A)."), + ("Returns characters from the middle of a text.", "Retorna caracteres do meio de um texto."), + ("Returns information about the operating environment.", "Retorna informações sobre o ambiente operacional."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Retorna um valor quando uma condição é TRUE e outro quando é FALSE.", + ), + ("Returns the #N/A error value.", "Retorna o valor do erro #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Retorna a posição baseada em 1 de um valor em uma linha ou coluna."), + ("Returns the ISO 8601 week number of a date.", "Retorna o número da semana ISO 8601 de uma data."), + ("Returns the Unicode code point of the first character of a text.", "Retorna o ponto de código Unicode do primeiro caractere de um texto."), + ("Returns the Windows-1252 code of the first character of a text.", "Retorna o código Windows-1252 do primeiro caractere de um texto."), + ("Returns the character for a Unicode code point.", "Retorna o caractere de um ponto de código Unicode."), + ( + "Returns the character for a code from the Windows-1252 character set.", + "Retorna o caractere de um código do conjunto de caracteres Windows-1252.", + ), + ("Returns the current date and time.", "Retorna a data e hora atuais."), + ("Returns the current date.", "Retorna a data atual."), + ("Returns the date a number of months before or after a date.", "Retorna a data alguns meses antes ou depois de uma data."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Retorna a data a um número de dias úteis antes ou depois de uma data, com um fim de semana personalizado.", + ), + ("Returns the date a number of working days before or after a date.", "Retorna a data alguns dias úteis antes ou depois de uma data."), + ("Returns the day of the month of a date.", "Retorna o dia do mês de uma data."), + ("Returns the day of the week of a date as a number.", "Retorna o dia da semana de uma data como um número."), + ("Returns the distinct rows or columns of an array.", "Retorna as linhas ou colunas distintas de um array."), + ( + "Returns the element, row or column of an array at the given position.", + "Retorna o elemento, linha ou coluna de um array na posição especificada.", + ), + ("Returns the field value of the single record that meets the criteria.", "Retorna o valor do campo do registro único que atende aos critérios."), + ("Returns the first characters of a text.", "Retorna os primeiros caracteres de um texto."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Retorna a fração de ano entre duas datas com base na contagem de dias.", + ), + ("Returns the hour (0-23) of a time.", "Retorna a hora (0-23) de um horário."), + ("Returns the last characters of a text.", "Retorna os últimos caracteres de um texto."), + ("Returns the last day of the month a number of months away.", "Retorna o último dia do mês a um número de meses antes ou depois de uma data."), + ("Returns the logical value FALSE.", "Retorna o valor lógico FALSE."), + ("Returns the logical value TRUE.", "Retorna o valor lógico TRUE."), + ("Returns the minute (0-59) of a time.", "Retorna o minuto (0-59) de uma hora."), + ("Returns the month (1-12) of a date.", "Retorna o mês (1-12) de uma data."), + ( + "Returns the nth member of a cube set (no cube connections; #N/A).", + "Retorna o enésimo membro de um conjunto de cubos (sem conexões de cubo; #N/A).", + ), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Retorna o número que identifica um valor de erro ou #N/A se não for um erro.", + ), + ("Returns the number of days between two dates.", "Retorna o número de dias entre duas datas."), + ("Returns the phonetic (furigana) text; here the text itself.", "Retorna o texto fonético (furigana); aqui o próprio texto."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Retorna a posição de um valor em uma linha ou coluna com modos flexíveis de correspondência e pesquisa.", + ), + ("Returns the second (0-59) of a time.", "Retorna o segundo (0-59) de uma hora."), + ("Returns the text that comes after a delimiter.", "Retorna o texto que vem depois de um delimitador."), + ("Returns the text that comes before a delimiter.", "Retorna o texto que vem antes de um delimitador."), + ("Returns the value if it is text, otherwise empty text.", "Retorna o valor se for texto, caso contrário, texto vazio."), + ("Returns the value paired with the first condition that is TRUE.", "Retorna o valor emparelhado com a primeira condição que é TRUE."), + ("Returns the week number of a date within its year.", "Retorna o número da semana de uma data dentro do seu ano."), + ("Returns the year of a date.", "Retorna o ano de uma data."), + ("Reverses a logical value.", "Reverte um valor lógico."), + ("Right-tailed F probability.", "Probabilidade F de cauda direita."), + ("Right-tailed Student's t probability.", "Probabilidade t de Student de cauda direita."), + ("Right-tailed chi-squared probability.", "Probabilidade qui-quadrado de cauda direita."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Arredonda um número e formata-o como texto com decimais fixos e separadores de milhares opcionais.", + ), + ("Rounds a number away from zero to a given number of digits.", "Arredonda um número para longe de zero para um determinado número de dígitos."), + ("Rounds a number down to a multiple of significance.", "Arredonda um número para baixo até um múltiplo da significância."), + ("Rounds a number down to the nearest integer or multiple.", "Arredonda um número para baixo até o inteiro ou múltiplo mais próximo."), + ("Rounds a number down to the nearest integer.", "Arredonda um número para baixo até o inteiro mais próximo."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Arredonda um número para a quantidade de dígitos indicada; valores exatamente na metade são arredondados para longe de zero.", + ), + ("Rounds a number to the nearest multiple.", "Arredonda um número para o múltiplo mais próximo."), + ("Rounds a number toward negative infinity to a multiple.", "Arredonda um número em direção ao infinito negativo para um múltiplo."), + ("Rounds a number toward positive infinity to a multiple.", "Arredonda um número em direção ao infinito positivo para um múltiplo."), + ("Rounds a number toward zero to a given number of digits.", "Arredonda um número em direção a zero para um determinado número de dígitos."), + ("Rounds a number up to a multiple of significance.", "Arredonda um número para cima até um múltiplo da significância."), + ("Rounds a number up to the nearest integer or multiple.", "Arredonda um número para cima até o inteiro ou múltiplo mais próximo."), + ("Rounds away from zero to the nearest even integer.", "Arredonda para longe de zero até o inteiro par mais próximo."), + ("Rounds away from zero to the nearest odd integer.", "Arredonda para longe de zero até o inteiro ímpar mais próximo."), + ("Row number of a reference.", "Número da linha de uma referência."), + ("Running accumulation of an array.", "Acumulação progressiva de uma matriz."), + ("Sample covariance of paired values.", "Covariância amostral de valores pareados."), + ("Sample skewness.", "Assimetria amostral."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Desvio padrão amostral considerando texto como 0 e valores lógicos como 1/0.", + ), + ("Sample standard deviation of a field over the matching records.", "Desvio padrão amostral de um campo nos registros correspondentes."), + ("Sample standard deviation.", "Desvio padrão da amostra."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Variância amostral considerando texto como 0 e valores lógicos como 1/0."), + ("Sample variance of a field over the matching records.", "Variância amostral de um campo nos registros correspondentes."), + ("Sample variance.", "Variância amostral."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Pesquisa em uma linha ou coluna e retorna o item, a linha ou a coluna correspondente de outra matriz.", + ), + ("Secant of a complex number.", "Secante de um número complexo."), + ("Secant of an angle in radians.", "Secante de um ângulo em radianos."), + ("Sheet number.", "Número da folha."), + ( + "Shifts the bits of a number left (right for negative shifts).", + "Desloca os bits de um número para a esquerda (para a direita para deslocamentos negativos).", + ), + ( + "Shifts the bits of a number right (left for negative shifts).", + "Desloca os bits de um número para a direita (esquerda para deslocamentos negativos).", + ), + ("Sine of a complex number.", "Seno de um número complexo."), + ("Sine of an angle in radians.", "Seno de um ângulo em radianos."), + ("Slope of the least-squares regression line.", "Inclinação da linha de regressão de mínimos quadrados."), + ("Smallest number (0 when there are none).", "Menor número (0 quando não há nenhum)."), + ("Smallest number in a field of the matching records.", "Menor número em um campo dos registros correspondentes."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Menor contagem de sucesso cuja probabilidade binomial cumulativa atinge alfa.", + ), + ("Smallest value among cells that meet every condition.", "Menor valor entre as células da planilha que atendem a todas as condições."), + ("Smallest value counting text as 0 and logicals as 1/0.", "Menor valor contando texto como 0 e lógico como 1/0."), + ( + "Sorts an array by the values of other arrays of matching size.", + "Classifica um array pelos valores de outros arrays de tamanho correspondente.", + ), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Classifica as linhas (ou colunas) de um array por uma ou mais de suas colunas.", + ), + ("Spells out a number in Thai words with Baht.", "Soletra um número em palavras tailandesas com Baht."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Divide o texto em uma grade de colunas e linhas nos delimitadores fornecidos.", + ), + ("Square of the correlation coefficient.", "Quadrado do coeficiente de correlação."), + ("Square root of a complex number.", "Raiz quadrada de um número complexo."), + ("Square root of the number times pi.", "Raiz quadrada do produto do número por pi."), + ("Stacks arrays on top of each other.", "Empilha matrizes umas sobre as outras."), + ("Standard error of predicted y values in a regression.", "Erro padrão dos valores y previstos em uma regressão."), + ("Standard normal cumulative probability.", "Probabilidade cumulativa normal padrão."), + ("Standard normal density or cumulative probability.", "Densidade normal padrão ou probabilidade cumulativa."), + ("Standard normal density.", "Densidade normal padrão."), + ("Straight-line depreciation for one period.", "Depreciação linear por um período."), + ("Student's t density or left-tailed probability.", "Densidade t de Student ou probabilidade de cauda esquerda."), + ("Sum of a power series.", "Soma de uma série de potências."), + ("Sum of complex numbers.", "Soma de números complexos."), + ("Sum of squared deviations from the mean.", "Soma dos desvios quadrados da média."), + ("Sum-of-years'-digits depreciation for a period.", "Depreciação da soma dos dígitos dos anos para um período."), + ("Sums the differences of squares of matching elements.", "Soma as diferenças dos quadrados dos elementos correspondentes."), + ("Sums the squared differences of matching elements.", "Soma as diferenças quadradas dos elementos correspondentes."), + ("Sums the sums of squares of matching elements.", "Soma as somas dos quadrados dos elementos correspondentes."), + ("Swaps the rows and columns of an array.", "Troca as linhas e colunas de um array."), + ("TRUE for references.", "TRUE para referências."), + ("TRUE when a LAMBDA argument was left out.", "TRUE quando um argumento LAMBDA foi omitido."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE quando uma expressão regular corresponde a algum lugar do texto."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE quando um número ímpar de argumentos é TRUE."), + ("TRUE when at least one argument is TRUE.", "TRUE quando pelo menos um argumento é TRUE."), + ("TRUE when every argument is TRUE.", "TRUE quando cada argumento é TRUE."), + ("TRUE when the cell has a formula.", "TRUE quando a célula possui uma fórmula."), + ("TRUE when the integer part of a number is even.", "TRUE quando a parte inteira de um número é par."), + ("TRUE when the integer part of a number is odd.", "TRUE quando a parte inteira de um número é ímpar."), + ("TRUE when the value is TRUE or FALSE.", "TRUE quando o valor for TRUE ou FALSE."), + ("TRUE when the value is a number.", "TRUE quando o valor é um número."), + ("TRUE when the value is any error other than #N/A.", "TRUE quando o valor for qualquer erro diferente de #N/A."), + ("TRUE when the value is any error.", "TRUE quando o valor for algum erro."), + ("TRUE when the value is anything other than text.", "TRUE quando o valor for diferente de texto."), + ("TRUE when the value is text.", "TRUE quando o valor é texto."), + ("TRUE when the value is the #N/A error.", "TRUE quando o valor é o erro #N/A."), + ("TRUE when the value refers to an empty cell.", "TRUE quando o valor se refere a uma célula vazia."), + ("TRUE when two texts are identical, including case.", "TRUE quando dois textos são idênticos, incluindo maiúsculas e minúsculas."), + ("Tangent of a complex number.", "Tangente de um número complexo."), + ("Tangent of an angle in radians.", "Tangente de um ângulo em radianos."), + ("The constant pi to 15 digits.", "A constante pi com 15 dígitos."), + ("The formula of a cell as text.", "A fórmula de uma célula como texto."), + ("The gamma function.", "A função gama."), + ("The k-th largest number in a data set.", "O k-ésimo maior número em um conjunto de dados."), + ("The k-th smallest number in a data set.", "O k-ésimo menor número em um conjunto de dados."), + ("The reference named by a text string.", "A referência nomeada por uma sequência de texto."), + ("The sum of a subset as a fraction of the sum of all the values.", "A soma de um subconjunto como uma fração da soma de todos os valores."), + ("Total interest paid between two periods.", "Juros totais pagos entre dois períodos."), + ("Total principal repaid between two periods.", "Total do principal reembolsado entre dois períodos."), + ("Two-tailed Student's t probability.", "Probabilidade t de Student bicaudal."), + ("Two-tailed inverse of Student's t distribution.", "Inverso bicaudal da distribuição t de Student."), + ("Two-tailed p-value of an F-test for equality of variances.", "Valor p bilateral de um teste F de igualdade de variâncias."), + ("Values along a fitted exponential growth curve.", "Valores ao longo de uma curva de crescimento exponencial ajustada."), + ("Values along a least-squares linear fit.", "Valores ao longo de um ajuste linear de mínimos quadrados."), + ("Vertical array of all the most frequent numbers.", "Matriz vertical de todos os números mais frequentes."), + ("Weibull density or probability.", "Densidade ou probabilidade de Weibull."), + ("Writes a number in another base, padded with zeros.", "Escreve um número em outra base, preenchido com zeros."), + ("Y-intercept of the least-squares regression line.", "Intercepto no eixo y da reta de regressão de mínimos quadrados."), + ("Yield of a Treasury bill.", "Rendimento de uma letra do Tesouro."), + ("Yield of a security paying periodic interest.", "Rendimento de um título que paga juros periódicos."), + ("Yield of a security with an odd first period.", "Rendimento de uma obrigação com primeiro período de juros irregular."), + ("Yield of a security with an odd last period.", "Rendimento de um título com último período de juros irregular."), + ("Z-score of a value.", "pontuação Z de um valor."), + ("e raised to the given power.", "e elevado à potência dada."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-ésimo percentil, k de 0 a 1 inclusive."), + ("k-th percentile, k strictly between 0 and 1.", "k-ésimo percentil, k estritamente entre 0 e 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "tipo_de_referência"), + ("actual_range", "intervalo_observado"), + ("aggregation", "agregação"), + ("alpha", "alfa"), + ("angle", "ângulo"), + ("area_num", "número_da_área"), + ("argument", "argumento"), + ("array", "matriz"), + ("array_x", "matriz_de_valores_x"), + ("array_y", "matriz_de_valores_y"), + ("average_range", "intervalo_da_média"), + ("base", "base"), + ("basis", "base"), + ("beta", "beta"), + ("bins_array", "matriz_de_limites_de_classes"), + ("bottom", "limite_inferior"), + ("by_array", "matriz_de_chave_de_classificação"), + ("by_col", "por_col"), + ("calc_method", "método_de_cálculo"), + ("calculation", "cálculo"), + ("caption", "legenda"), + ("case_sensitivity", "distinção_entre_maiúsculas_e_minúsculas"), + ("coefficients", "coeficientes"), + ("col_delimiter", "delimitador_de_coluna"), + ("col_fields", "Campos_da_coluna"), + ("col_index_num", "índice_da_coluna"), + ("col_num", "número_da_coluna"), + ("col_sort_order", "ordem_de_classificação_das_colunas"), + ("col_total_depth", "profundidade_total_da_coluna"), + ("cols", "contagem_de_colunas"), + ("column_num", "número_da_coluna"), + ("columns", "contagem_de_colunas"), + ("confidence_level", "nível_de_confiança"), + ("connection", "conexão_de_dados"), + ("const", "constante"), + ("cost", "custo_inicial"), + ("coupon", "taxa_de_cupom"), + ("criteria", "critérios"), + ("criteria_range", "intervalo_de_critérios"), + ("cumulative", "distribuição_cumulativa"), + ("data_all", "dados_todos"), + ("data_array", "matriz_de_dados"), + ("data_completion", "preenchimento_de_dados"), + ("data_subset", "subconjunto_de_dados"), + ("database", "banco_de_dados"), + ("date", "data"), + ("date_purchased", "data_de_compra"), + ("date_text", "data_escrita_como_texto"), + ("dates", "datas"), + ("day", "dia"), + ("days", "dias"), + ("decimal_dollar", "preço_decimal"), + ("decimal_separator", "separador_decimal"), + ("decimals", "casas_decimais"), + ("default_or_value", "padrão_ou_valor"), + ("deg_freedom", "graus_de_liberdade"), + ("delimiter", "delimitador"), + ("denominator", "denominador"), + ("dimension", "dimensão"), + ("discount", "taxa_de_desconto"), + ("divisor", "divisor"), + ("effect_rate", "taxa_efetiva"), + ("end_date", "data_final"), + ("end_period", "último_período"), + ("error_val", "valor_de_erro"), + ("exactly_once", "exatamente_uma_vez"), + ("expected_range", "intervalo_esperado"), + ("expression", "expressão"), + ("factor", "fator"), + ("field", "campo_do_banco_de_dados"), + ("field_headers", "cabeçalhos_de_campo"), + ("field_relationship", "relacionamento_entre_campos"), + ("filter_array", "matriz_de_filtros"), + ("finance_rate", "taxa_de_juros_de_financiamento"), + ("find_text", "encontrar_texto"), + ("first_coupon", "data_do_primeiro_pagamento_do_cupom"), + ("first_interest", "primeira_data_de_pagamento_de_juros"), + ("first_period", "primeiro_período"), + ("form", "forma"), + ("format", "formato"), + ("format_text", "formato_de_texto"), + ("fraction", "fração"), + ("fractional_dollar", "preço_fracionário"), + ("frequency", "frequência_de_taxa_de_cupom"), + ("friendly_name", "nome_amigável"), + ("from_unit", "unidade_de_medição_de_origem"), + ("full_precision", "precisão_total"), + ("function", "função"), + ("function_num", "número_da_função"), + ("fv", "valor_futuro"), + ("group_separator", "separador_de_grupo"), + ("guess", "estimativa"), + ("height", "altura"), + ("holidays", "feriados"), + ("hour", "hora"), + ("i_num", "coeficiente_imaginário"), + ("if_empty", "se_estiver_vazio"), + ("if_not_found", "se_não_encontrado"), + ("ignore", "ignorar"), + ("ignore_empty", "ignorar_vazio"), + ("include", "incluir"), + ("index_num", "número_de_índice"), + ("info_type", "tipo_de_informação"), + ("initial_value", "valor_inicial"), + ("instance_num", "número_de_ocorrência"), + ("inumber", "número_complexo"), + ("investment", "investimento"), + ("issue", "data_de_emissão"), + ("k", "k"), + ("known_xs", "valores_x_conhecidos"), + ("known_ys", "valores_de_y_conhecidos"), + ("kpi_name", "nome_do_indicador_chave_de_desempenho"), + ("kpi_property", "propriedade_do_indicador_chave_de_desempenho"), + ("lambda", "lambda"), + ("last_interest", "última_data_de_pagamento_de_juros"), + ("life", "vida_útil"), + ("link_location", "localização_do_link"), + ("logical", "valor_lógico"), + ("logical_test", "condição_lógica"), + ("lookup_array", "matriz_procura"), + ("lookup_value", "valor_procurado"), + ("lookup_vector", "vetor_de_pesquisa"), + ("lower_limit", "limite_inferior"), + ("m", "m"), + ("match_end", "corresponde_ao_delimitador_do_final"), + ("match_mode", "modo_correspondência"), + ("match_type", "método_de_correspondência"), + ("maturity", "data_de_vencimento"), + ("max", "máximo"), + ("max_range", "faixa_de_valor_máximo"), + ("mean", "média_aritmética"), + ("member_expression", "expressão_de_membro_do_cubo"), + ("method", "método"), + ("min", "mínimo"), + ("min_length", "comprimento_mínimo"), + ("min_range", "faixa_de_valor_mínimo"), + ("minute", "minuto"), + ("mode", "modo_de_cálculo"), + ("month", "mês"), + ("months", "meses"), + ("multiple", "múltiplo"), + ("n", "n"), + ("name", "nome"), + ("new_text", "novo_texto"), + ("new_xs", "novos_valores_de_x"), + ("no_commas", "omitir_separadores_de_grupo_de_dígitos"), + ("no_switch", "não_mude_o_método_de_depreciação"), + ("nominal_rate", "taxa_nominal"), + ("nper", "número_de_períodos"), + ("npery", "períodos_por_ano"), + ("num_bytes", "número_de_bytes"), + ("num_chars", "número_de_caracteres"), + ("num_digits", "número_de_dígitos"), + ("number", "número"), + ("number_chosen", "número_selecionado"), + ("number_f", "número_de_falhas"), + ("number_pop", "tamanho_da_população"), + ("number_s", "número_de_sucessos"), + ("number_sample", "tamanho_da_amostra"), + ("number_times", "contagem_de_repetições"), + ("numerator", "numerador"), + ("occurrence", "ocorrência"), + ("old_text", "texto_antigo"), + ("options", "opções"), + ("order", "ordem"), + ("pad_with", "preencher_com"), + ("par", "valor_nominal"), + ("parameter", "parâmetro"), + ("pattern", "padrão_de_expressão_regular"), + ("per", "período"), + ("percent", "por_cento"), + ("period", "período"), + ("places", "número_de_dígitos_de_saída"), + ("pmt", "pagamento"), + ("population_s", "sucessos_na_população"), + ("power", "expoente"), + ("pr", "preço"), + ("principal", "principal"), + ("prob_range", "intervalo_de_probabilidades"), + ("probability", "probabilidade"), + ("probability_s", "probabilidade_de_sucesso"), + ("property", "nome_da_propriedade"), + ("pv", "valor_presente"), + ("quart", "quartil"), + ("radix", "base_numérica"), + ("range", "intervalo"), + ("range_lookup", "pesquisa_de_intervalo"), + ("rank", "classificação"), + ("rate", "taxa"), + ("real_num", "coeficiente_real"), + ("redemption", "resgate"), + ("ref", "referência"), + ("ref_text", "texto_de_referência"), + ("reference", "referência"), + ("reinvest_rate", "taxa_de_juros_de_reinvestimento"), + ("relative_to", "em_relação_a"), + ("replacement", "substituição"), + ("result", "resultado"), + ("result_vector", "vetor_de_resultado"), + ("return_array", "matriz_retorno"), + ("return_mode", "modo_de_retorno"), + ("return_type", "tipo_de_retorno"), + ("row_delimiter", "delimitador_de_linha"), + ("row_fields", "campos_de_linha"), + ("row_index_num", "índice_de_linha"), + ("row_num", "número_da_linha"), + ("row_sort_order", "ordem_de_classificação_de_linhas"), + ("row_total_depth", "profundidade_total_da_linha"), + ("rows", "contagem_de_linhas"), + ("salvage", "valor_residual"), + ("sample_s", "sucessos_na_amostra"), + ("scan_by_column", "percorrer_por_coluna"), + ("schedule", "série_de_taxas"), + ("search_mode", "modo_pesquisa"), + ("seasonality", "sazonalidade"), + ("second", "segundo"), + ("serial_number", "número_de_série"), + ("set", "conjunto_de_membros_do_cubo"), + ("set_expression", "expressão_do_conjunto_de_membros_do_cubo"), + ("settlement", "data_de_liquidação"), + ("sheet_text", "texto_da_folha"), + ("shift_amount", "número_de_bits_de_deslocamento"), + ("sigma", "sigma"), + ("significance", "significância"), + ("size", "tamanho"), + ("sort_by", "classificar_por"), + ("sort_index", "classificar_índice"), + ("sort_order", "ordem_de_classificação"), + ("source", "fonte"), + ("standard_dev", "desvio_padrão"), + ("start", "valor_inicial"), + ("start_date", "data_de_início"), + ("start_num", "posição_inicial"), + ("start_period", "período_de_início"), + ("statistic_type", "tipo_de_estatística"), + ("stats", "estatísticas"), + ("step", "passo"), + ("suffix", "sufixo"), + ("sum_range", "intervalo_de_soma"), + ("table_array", "matriz_de_tabela"), + ("tails", "número_de_caudas_de_distribuição"), + ("target", "alvo"), + ("target_date", "data_prevista"), + ("text", "texto"), + ("time_text", "hora_escrita_como_texto"), + ("timeline", "linha_do_tempo"), + ("to_unit", "unidade_de_medição_alvo"), + ("top", "limite_superior"), + ("total_depth", "profundidade_total"), + ("trials", "tentativas"), + ("triangulation_precision", "precisão_de_triangulação"), + ("trim_cols", "modo_de_corte_de_coluna"), + ("trim_rows", "modo_de_corte_de_linha"), + ("type", "tipo"), + ("type_text", "nome_do_tipo_de_dados"), + ("unit", "unidade"), + ("upper_limit", "limite_superior"), + ("url", "URL"), + ("value", "valor"), + ("value_if_error", "resultado_em_caso_de_erro"), + ("value_if_false", "resultado_quando_a_condição_é_falsa"), + ("value_if_na", "resultado_para_o_erro_não_disponível"), + ("value_if_true", "resultado_quando_a_condição_é_verdadeira"), + ("values", "valores_de_entrada"), + ("vector", "vetor"), + ("weekend", "fim_de_semana"), + ("whole_number", "número_inteiro"), + ("width", "largura"), + ("within_text", "texto_para_pesquisar"), + ("wrap_count", "número_de_valores_por_linha_ou_coluna"), + ("x", "x"), + ("x_num", "coordenada_x"), + ("x_range", "intervalo_x"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "coordenada_y"), + ("year", "ano"), + ("yld", "rendimento_do_investimento"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/ro.rs b/crates/ui-egui/src/i18n/ro.rs index 3d5a193d1e..2353c3ec5e 100644 --- a/crates/ui-egui/src/i18n/ro.rs +++ b/crates/ui-egui/src/i18n/ro.rs @@ -8,6 +8,9 @@ /// Returns the Romanian translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Borders|None" => "Niciunul", + "Report Layout|Outline" => "Schiță", + "Page {page}" => "Pagina {page}", "Diagram" => "Schemă", "Decorative Text" => "Text decorativ", "Paste" => "Lipire", @@ -543,6 +546,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Values and number formats" => "Valori și formate de număr", "Operation" => "Operație", "Add" => "Adăugare", + "Paste Special|Add" => "Adăugare", "Subtract" => "Scădere", "Multiply" => "Înmulțire", "Divide" => "Împărțire", @@ -582,6 +586,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Tab" => "Tab", "Semicolon" => "Punct și virgulă", "Comma" => "Virgulă", + "Text to Columns|Comma" => "Virgulă", "Space" => "Spațiu", "Other:" => "Altele:", "Treat consecutive delimiters as one" => "Delimitatorii consecutivi se tratează ca unul singur", @@ -1066,6 +1071,25 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Recording" => "Înregistrare", "New Macro" => "Macrocomandă nouă", "Show" => "Afișare", + "Generated|Column" => "Coloană", + "Generated|Row" => "Rând", + "Book" => "Registru", + "Sheet" => "Foaie", + "Count Numbers" => "Numără numere", + "Type to filter…" => "Tastați pentru filtrare…", + "Nothing to paste." => "Nu există date de lipit.", + "No cells were found." => "Nu au fost găsite celule.", + "Or select a category:" => "Sau selectați o categorie:", + "Most Recently Used" => "Utilizate recent", + "Insert Function…" => "Inserare funcție…", + "Paste Names…" => "Lipire nume…", + "Macro name:" => "Nume macrocomandă:", + "Shortcut key:" => "Tastă de comandă rapidă:", + "Description:" => "Descriere:", + "Check for Updates…" => "Căutare actualizări…", + "Checking for updates…" => "Se caută actualizări…", + "Could not check for updates." => "Actualizările nu au putut fi verificate.", + "Check Again" => "Verificare din nou", "Collapse dialog" => "Restrângere casetă de dialog", "Expand dialog" => "Extindere casetă de dialog", _ => return None, diff --git a/crates/ui-egui/src/i18n/ro_functions.rs b/crates/ui-egui/src/i18n/ro_functions.rs new file mode 100644 index 0000000000..17a63fda06 --- /dev/null +++ b/crates/ui-egui/src/i18n/ro_functions.rs @@ -0,0 +1,1050 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 pentru pozitiv, -1 pentru negativ și 0 pentru zero."), + ("A random integer between two bounds, inclusive.", "Un număr întreg aleatoriu între două limite, inclusiv."), + ("A random number between 0 and 1, recalculated every time.", "Un număr aleatoriu între 0 și 1, recalculat de fiecare dată."), + ("A range or array without its blank outer rows and columns.", "Un interval sau o matrice fără rândurile și coloanele exterioare goale."), + ("A reference shifted from a starting point.", "O referință mutată de la un punct de plecare."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Statistică a modelului FORECAST.ETS: 1 alfa, 2 beta, 3 gama, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 mărimea pasului.", + ), + ("A subtotal that can skip hidden rows.", "Un subtotal care poate sări peste rândurile ascunse."), + ("Absolute value (modulus) of a complex number.", "Valoarea absolută (modul) a unui număr complex."), + ("Absolute value of a number.", "Valoarea absolută a unui număr."), + ("Accrued interest of a security paying interest at maturity.", "Dobândă acumulată a unui titlu de valoare care plătește dobândă la scadență."), + ("Accrued interest of a security paying periodic interest.", "Dobândă acumulată a unui titlu de valoare care plătește dobândă periodică."), + ("Accumulates an array into one value.", "Acumulează o matrice într-o singură valoare."), + ("Adds all the numbers in the arguments.", "Adună toate numerele specificate în argumente."), + ("Adds the cells that meet a condition.", "Returnează suma valorilor numerice din celulele foii de calcul care îndeplinesc o condiție."), + ( + "Adds the cells that meet every condition.", + "Returnează suma valorilor numerice din celulele foii de calcul care îndeplinesc toate condițiile.", + ), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Returnează suma valorilor numerice dintr-un câmp al bazei de date, pentru înregistrările care îndeplinesc criteriile.", + ), + ("Adds the squares of the numbers.", "Returnează suma pătratelor numerelor."), + ("Amount received at maturity for a fully invested security.", "Suma primită la scadență pentru un titlu de valoare achiziționat integral."), + ("An aggregate that can skip hidden rows and errors.", "Un agregat care poate omite rândurile ascunse și erorile."), + ("Angle of a complex number in radians.", "Unghiul unui număr complex în radiani."), + ("Angle of the point (x, y) from the x-axis in radians.", "Unghiul punctului (x, y) față de axa x în radiani."), + ("Annual yield of a discounted security.", "Randamentul anual al unui titlu de valoare emis cu scont."), + ("Annual yield of a security paying interest at maturity.", "Randamentul anual al unui titlu de valoare care plătește dobândă la scadență."), + ("Applies a LAMBDA to each column.", "Aplică un LAMBDA fiecărei coloane."), + ("Applies a LAMBDA to each row.", "Aplică un LAMBDA fiecărui rând."), + ("Applies a LAMBDA to each value.", "Aplică un LAMBDA fiecărei valori."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Căutare aproximativă într-un vector sortat sau pe primul rând/coloană a unui tablou.", + ), + ("Arccosine in radians.", "Arccosinus în radiani."), + ("Arccotangent in radians (0 to pi).", "Arccotangentă în radiani (de la 0 la pi)."), + ("Arcsine in radians.", "Arcsinus în radiani."), + ("Arctangent in radians.", "Arctangentă în radiani."), + ("Arithmetic mean of the numbers.", "Media aritmetică a numerelor."), + ("Average absolute deviation from the mean.", "Abaterea medie absolută de la medie."), + ("Average of the cells that meet a condition.", "Media celulelor foii de calcul care îndeplinesc o condiție."), + ("Average of the cells that meet every condition.", "Media celulelor foii de calcul care îndeplinesc fiecare condiție."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Mediază numerele dintr-un câmp al înregistrărilor care îndeplinesc criteriile.", + ), + ("Base-10 logarithm of a complex number.", "Logaritmul de bază 10 al unui număr complex."), + ("Base-10 logarithm.", "Logaritm de bază 10."), + ("Base-2 logarithm of a complex number.", "Logaritmul de bază 2 al unui număr complex."), + ("Bessel function of the first kind, J_n(x).", "Funcția Bessel de primul fel, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Funcția Bessel de al doilea fel, Y_n(x)."), + ("Beta distribution density or probability.", "Densitatea sau probabilitatea distribuției beta."), + ("Binomial probability.", "Probabilitate binomială."), + ("Bitwise AND of two non-negative integers.", "AND pe biți din două numere întregi nenegative."), + ("Bitwise OR of two non-negative integers.", "OR pe biți din două numere întregi nenegative."), + ("Bitwise exclusive OR of two non-negative integers.", "OR exclusiv pe biți din două numere întregi nenegative."), + ("Bond-equivalent yield of a Treasury bill.", "Randamentul echivalent în obligațiuni al unui bon de trezorerie."), + ("Breaks a row or column into columns of the given length.", "Desparte un rând sau o coloană în coloane de lungimea dată."), + ("Breaks a row or column into rows of the given length.", "Desparte un rând sau o coloană în rânduri de lungimea dată."), + ("Builds a cell address as text from row and column numbers.", "Construiește o adresă de celulă ca text din numerele rândurilor și coloanelor."), + ("Builds a complex number as text from real and imaginary parts.", "Construiește un număr complex ca text din părți reale și imaginare."), + ("Builds a date serial number from a year, month and day.", "Construiește numărul de serie al unei date din an, lună și zi."), + ( + "Builds a summary table grouping values by row and column fields.", + "Construiește un tabel rezumat care grupează valorile după câmpuri de rând și coloană.", + ), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "Construiește un timp (o fracțiune de zi) din ore, minute și secunde."), + ("Builds an array from a LAMBDA.", "Construiește o matrice dintr-un LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Construiește o matrice de numere cu pas constant."), + ("Builds an array of random numbers in a range.", "Construiește o matrice de numere aleatorii într-un interval."), + ("Byte version of FIND.", "Versiunea pe octeți a lui FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Versiunea de octet a LEFT (la fel ca LEFT pentru textul pe un singur octet)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Versiunea de octet a LEN (la fel ca LEN pentru textul pe un singur octet)."), + ("Byte version of MID (same as MID for single-byte text).", "Versiunea de octet a MID (la fel ca MID pentru textul pe un singur octet)."), + ("Byte version of REPLACE.", "Versiunea pe octeți a lui REPLACE."), + ( + "Byte version of RIGHT (same as RIGHT for single-byte text).", + "Versiunea de octet a lui RIGHT (la fel ca RIGHT pentru textul pe un singur octet).", + ), + ("Byte version of SEARCH.", "Versiunea pe octeți a lui SEARCH."), + ( + "Capitalises the first letter of each word and lower-cases the rest.", + "Scrie cu majuscule prima literă a fiecărui cuvânt și restul cu litere mici.", + ), + ("Chi-squared density or left-tailed probability.", "Densitate chi-pătrat sau probabilitate cu coada stângă."), + ("Chi-squared test of independence.", "Testul chi-pătrat al independenței."), + ("Column number of a reference.", "Numărul coloanei unei referințe."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Compară o expresie cu o listă de valori și returnează rezultatul asociat cu prima potrivire.", + ), + ("Complementary error function, 1 - ERF(x).", "Funcție de eroare complementară, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Conjugat complex al unui număr complex."), + ( + "Confidence interval half-width using Student's t distribution.", + "Jumătate din lățimea intervalului de încredere folosind distribuția t a lui Student.", + ), + ("Confidence interval half-width using the normal distribution.", "Jumătate din lățimea intervalului de încredere folosind distribuția normală."), + ("Converts Roman numerals to a number.", "Convertește cifrele romane într-un număr."), + ("Converts a binary number to decimal.", "Convertește un număr binar în zecimal."), + ("Converts a binary number to hexadecimal.", "Convertește un număr binar în hexazecimal."), + ("Converts a binary number to octal.", "Convertește un număr binar în octal."), + ("Converts a date written as text into a date serial number.", "Convertește o dată scrisă ca text într-un număr de serie pentru dată."), + ("Converts a decimal number to binary.", "Convertește un număr zecimal în binar."), + ("Converts a decimal number to hexadecimal.", "Convertește un număr zecimal în hexazecimal."), + ("Converts a decimal number to octal.", "Convertește un număr zecimal în octal."), + ("Converts a decimal price to fractional notation.", "Convertește un preț zecimal în notație fracțională."), + ("Converts a fractional price notation to a decimal number.", "Convertește o notație de preț fracțională într-un număr zecimal."), + ("Converts a hexadecimal number to binary.", "Convertește un număr hexazecimal în binar."), + ("Converts a hexadecimal number to decimal.", "Convertește un număr hexazecimal în zecimal."), + ("Converts a hexadecimal number to octal.", "Convertește un număr hexazecimal în octal."), + ("Converts a measurement from one unit to another.", "Convertește o măsurătoare de la o unitate la alta."), + ("Converts a number to Roman numerals in one of five styles.", "Convertește un număr în cifre romane într-unul din cele cinci stiluri."), + ("Converts a time written as text into a fraction of a day.", "Transformă o oră scrisă ca text într-o fracțiune de zi."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Convertește o valoare într-un număr: numerele rămân, TRUE este 1, orice altceva este 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Convertește o matrice în text, fie ca listă separată prin virgule, fie ca o constantă de matrice strictă.", + ), + ("Converts an octal number to binary.", "Convertește un număr octal în binar."), + ("Converts an octal number to decimal.", "Convertește un număr octal în zecimal."), + ("Converts an octal number to hexadecimal.", "Convertește un număr octal în hexazecimal."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Convertește orice valoare în text, opțional în formă strictă (între ghilimele).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Convertește între euro și fostele monede ale statelor din zona euro, la cursurile fixe.", + ), + ("Converts degrees to radians.", "Transformă gradele în radiani."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Convertește caracterele cu lățime completă în lățime pe jumătate (nicio modificare pentru textul pe un singur octet).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Convertește caracterele cu jumătate de lățime în caractere cu lățime completă (fără modificări pentru această configurație regională).", + ), + ("Converts radians to degrees.", "Convertește radianii în grade."), + ("Converts text that looks like a number, date or time into a number.", "Convertește textul care arată ca un număr, dată sau oră într-un număr."), + ( + "Converts text to a number using the given decimal and group separators.", + "Convertește textul într-un număr folosind separatorul zecimal și separatorul de grupare indicate.", + ), + ("Converts text to lower case.", "Convertește textul în litere mici."), + ("Converts text to upper case.", "Convertește textul în majuscule."), + ("Correlation coefficient of two data sets.", "Coeficientul de corelație a două seturi de date."), + ("Cosecant of a complex number.", "Cosecanta unui număr complex."), + ("Cosecant of an angle in radians.", "Cosecanta unui unghi în radiani."), + ("Cosine of a complex number.", "Cosinusul unui număr complex."), + ("Cosine of an angle in radians.", "Cosinusul unui unghi în radiani."), + ("Cotangent of a complex number.", "Cotangenta unui număr complex."), + ("Cotangent of an angle in radians.", "Cotangenta unui unghi în radiani."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Numărează zilele dintre două date într-un an de 360 de zile (US sau metoda europeană).", + ), + ("Counts empty cells and empty text in a range.", "Contorizează celulele goale din foaia de calcul și textul gol dintr-un interval."), + ( + "Counts how many values fall into each bin, as a vertical array.", + "Numără valorile din fiecare interval de clasă și returnează o matrice verticală.", + ), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Numărează celulele din foaia de calcul care nu sunt goale într-un câmp al înregistrărilor care se potrivesc (sau ale înregistrărilor care se potrivesc).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Numărează celulele numerice ale foii de calcul dintr-un câmp al înregistrărilor care se potrivesc (sau ale înregistrărilor care se potrivesc).", + ), + ("Counts the cells that meet a condition.", "Numărează celulele foii de calcul care îndeplinesc o condiție."), + ("Counts the cells that meet every condition.", "Numărează celulele foii de calcul care îndeplinesc fiecare condiție."), + ("Counts the characters in a text.", "Numărează caracterele dintr-un text."), + ("Counts the columns in an array or range.", "Numărează coloanele dintr-o matrice sau interval."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Numărează elementele dintr-un set de cuburi (fără conexiuni cub; #N/A)."), + ("Counts the non-empty values.", "Contorizează valorile nevide."), + ("Counts the numbers.", "Numărează numerele."), + ("Counts the rows in an array or range.", "Numărează rândurile dintr-o matrice sau interval."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Numărează ani întregi, luni sau zile între două date. unitate: Y, M, D, MD, YM sau YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Contorizează zile lucrătoare (de luni până vineri) între două date, excluzând sărbătorile.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Contorizează zilele lucrătoare dintre două date cu un weekend personalizat, excluzând sărbătorile.", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "Creează un link; celula afișează numele de afișat sau linkul în sine.", + ), + ("Creates a reusable custom function.", "Creează o funcție personalizată reutilizabilă."), + ("Cumulative beta probability.", "Probabilitate beta cumulativă."), + ("Cumulative lognormal probability.", "Probabilitate lognormală cumulativă."), + ("Cuts off the fractional part of a number at the given digits.", "Taie partea fracționară a unui număr la cifrele date."), + ("Days from settlement to the next coupon date.", "Zile de la decontare până la următoarea dată de plată a dobânzii."), + ("Days from the start of the coupon period to settlement.", "Zile de la începutul perioadei de plată a dobânzii până la decontare."), + ("Days in the coupon period that contains settlement.", "Zile din perioada de plată a dobânzii care conține decontarea."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Amortizare degresivă pe orice interval de perioade, cu trecere la amortizare liniară.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Definește un set de membri de cub (fără conexiuni de cub; #N/A)."), + ("Determinant of a square matrix.", "Determinant al unei matrice pătrate."), + ("Difference of two complex numbers.", "Diferența a două numere complexe."), + ("Discount rate of a security.", "Rata de scont a unui titlu de valoare."), + ("Double factorial of a number.", "Factorial dublu al unui număr."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Amortizare degresivă cu rată dublă (sau alt factor) pentru o perioadă.", + ), + ("Effective annual rate from a nominal rate and compounding periods.", "Rată anuală efectivă de la o rată nominală și perioade de capitalizare."), + ("Equivalent interest rate for the growth of an investment.", "Rata dobânzii echivalentă pentru creșterea unei investiții."), + ( + "Error function integrated from 0 to a limit, or between two limits.", + "Funcție de eroare integrată de la 0 la o limită, sau între două limite.", + ), + ("Error function integrated from 0 to x.", "Funcție de eroare integrată de la 0 la x."), + ("Excess kurtosis of a sample.", "Excesul de curtoză al unui eșantion."), + ("Exponential curve coefficients and optional regression statistics.", "Coeficienți de curbă exponențială și statistici de regresie opționale."), + ("Exponential distribution density or probability.", "Densitatea sau probabilitatea distribuției exponențiale."), + ("Exponential of a complex number.", "Exponenţialul unui număr complex."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Extrage datele din XML cu un XPath (nu este disponibil; returnează #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Extrage prima potrivire, toate potrivirile sau grupurile de captare ale unei expresii regulate.", + ), + ("F distribution density or left-tailed probability.", "Densitatea distribuției F sau probabilitatea cu coada stângă."), + ("Factorial of a number.", "Factorial al unui număr."), + ( + "Fetches data from a web service (not available; returns #VALUE!).", + "Preia date de la un serviciu web (nu este disponibil; returnează #VALUE!).", + ), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Găsește o valoare în prima coloană a unui tabel și returnează valoarea în același rând al altei coloane.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Găsește o valoare în primul rând al unui tabel și returnează valoarea în aceeași coloană a altui rând.", + ), + ("Finds the position of one text in another (case-sensitive).", "Găsește poziția unui text într-un altul (sensibil la majuscule)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Găsește poziția unui text în altul, ignorând majuscule și permițând metacaracterele.", + ), + ("Fisher transformation.", "Transformare Fisher."), + ("Fixed-declining-balance depreciation for a period.", "Amortizare degresivă cu rată fixă pentru o perioadă."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Transformă o matrice într-o singură coloană, omițând opțional valorile goale sau erorile.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Transformă o matrice într-un singur rând, omițând opțional valorile goale sau erorile.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Estimează o valoare prin netezire exponențială aditivă (AAA)."), + ("Formats a number as currency text, like DOLLAR.", "Formatează un număr ca text valutar, cum ar fi DOLLAR."), + ("Formats a number as currency text.", "Formatează un număr ca text valutar."), + ("Formats a number as text.", "Formatează un număr ca text."), + ( + "French degressive depreciation with a life-based coefficient.", + "Amortizare degresivă franceză cu un coeficient bazat pe durata de viață utilă.", + ), + ("French linear depreciation prorated for the first period.", "Amortizarea liniară franceză proporțională pentru prima perioadă."), + ( + "Future value of a principal after a series of compound rates.", + "Valoarea viitoare a capitalului inițial după aplicarea succesivă a unor rate de dobândă compusă.", + ), + ("Future value of an investment with constant payments and rate.", "Valoarea viitoare a unei investiții cu plăți și rate constante."), + ("Gamma distribution density or probability.", "Densitatea sau probabilitatea distribuției gamma."), + ("Geometric mean of positive numbers.", "Media geometrică a numerelor pozitive."), + ("Greatest common divisor of integers.", "Cel mai mare divizor comun al numerelor întregi."), + ( + "Groups rows by key fields and aggregates the values of each group.", + "Grupează rândurile după câmpurile cheie și agregează valorile fiecărui grup.", + ), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Extinde o matrice la dimensiunea dată, completând celulele noi cu o valoare de umplere.", + ), + ( + "Half-width of the confidence interval around a FORECAST.ETS value.", + "Jumătate de lățime a intervalului de încredere în jurul valorii FORECAST.ETS.", + ), + ("Harmonic mean of positive numbers.", "Media armonică a numerelor pozitive."), + ("Hyperbolic cosecant of a complex number.", "Cosecanta hiperbolică a unui număr complex."), + ("Hyperbolic cosecant.", "Cosecantă hiperbolică."), + ("Hyperbolic cosine of a complex number.", "Cosinusul hiperbolic al unui număr complex."), + ("Hyperbolic cosine.", "Cosinus hiperbolic."), + ("Hyperbolic cotangent.", "Cotangentă hiperbolică."), + ("Hyperbolic secant of a complex number.", "Secanta hiperbolică a unui număr complex."), + ("Hyperbolic secant.", "Secantă hiperbolică."), + ("Hyperbolic sine of a complex number.", "Sinus hiperbolic al unui număr complex."), + ("Hyperbolic sine.", "Sinus hiperbolic."), + ("Hyperbolic tangent.", "Tangentă hiperbolică."), + ("Hypergeometric probability of an exact count.", "Probabilitatea hipergeometrică a unui număr exact."), + ("Hypergeometric probability.", "Probabilitate hipergeometrică."), + ("Identity matrix of the given size.", "Matricea de identitate a mărimii date."), + ("Imaginary coefficient of a complex number.", "Coeficientul imaginar al unui număr complex."), + ("Information about a cell.", "Informații despre o celulă."), + ("Integer part of a division.", "Partea întreagă a câtului unei împărțiri."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Dobânda plătită într-o perioadă a unui împrumut cu rambursări egale de capital.", + ), + ("Interest part of a given period's payment.", "Componenta de dobândă a plății pentru o anumită perioadă."), + ("Interest rate of a fully invested security.", "Rata dobânzii unui titlu de valoare achiziționat integral."), + ("Interest rate per period of an annuity, found iteratively.", "Rata dobânzii pe perioada unei anuități, găsită iterativ."), + ("Internal rate of return of cash flows on specific dates.", "Rata internă de rentabilitate a fluxurilor de numerar la anumite date."), + ("Internal rate of return of periodic cash flows.", "Rata internă de rentabilitate a fluxurilor de numerar periodice."), + ("Inverse hyperbolic cosine.", "Inversa cosinusului hiperbolic."), + ("Inverse hyperbolic cotangent.", "Inversa cotangentei hiperbolice."), + ("Inverse hyperbolic sine.", "Inversa sinusului hiperbolic."), + ("Inverse hyperbolic tangent.", "Inversa tangentei hiperbolice."), + ("Inverse of a square matrix.", "Inversa unei matrice pătrate."), + ("Inverse of the Fisher transformation.", "Inversa transformării Fisher."), + ("Inverse of the cumulative beta distribution.", "Inversa distribuției beta cumulate."), + ("Inverse of the cumulative lognormal distribution.", "Inversa distribuției lognormale cumulative."), + ("Inverse of the gamma cumulative distribution.", "Inversa distribuției cumulative gamma."), + ("Inverse of the left-tailed F distribution.", "Inversa distribuției F cu coada stângă."), + ("Inverse of the left-tailed chi-squared distribution.", "Inversa distribuției chi-pătrat din coada stângă."), + ("Inverse of the normal cumulative distribution.", "Inversa distribuției cumulative normale."), + ("Inverse of the right-tailed F distribution.", "Inversa distribuției F cu coada dreaptă."), + ("Inverse of the right-tailed chi-squared distribution.", "Inversa distribuției chi-pătrat din coada dreaptă."), + ("Inverse of the standard normal cumulative distribution.", "Inversa distribuției cumulative normale standard."), + ("Joins several text values into one.", "Unește mai multe valori de text într-una singură."), + ( + "Joins text from values and every cell of ranges, without a separator.", + "Unește textul din valori și din fiecare celulă de intervale, fără un separator.", + ), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Unește textul din valori și intervale cu un delimitator, opțional sărind elementele goale.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Păstrează rândurile sau coloanele de la începutul (sau sfârșitul) unui tablou."), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Păstrează rândurile sau coloanele unui tablou al cărui indicator de includere este TRUE.", + ), + ("Largest number (0 when there are none).", "Cel mai mare număr (0 când nu există)."), + ("Largest number in a field of the matching records.", "Cel mai mare număr dintr-un câmp al înregistrărilor care se potrivesc."), + ( + "Largest value among cells that meet every condition.", + "Cea mai mare valoare dintre celulele foii de calcul care îndeplinesc fiecare condiție.", + ), + ("Largest value counting text as 0 and logicals as 1/0.", "Cea mai mare valoare, considerând textul ca 0 și valorile logice ca 1/0."), + ("Least common multiple of integers.", "Cel mai mic multiplu comun de numere întregi."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Coeficienții dreptei determinate prin metoda celor mai mici pătrate și, opțional, statistici de regresie.", + ), + ("Left-tailed inverse of Student's t distribution.", "Inversa distribuției t a lui Student pentru coada stângă."), + ("Length of the repeating pattern detected in a time series.", "Lungimea modelului repetat detectat într-o serie temporală."), + ("Logarithm to the given base (10 by default).", "Logaritm la baza dată (10 în mod implicit)."), + ("Lognormal density or probability.", "Densitate sau probabilitate lognormală."), + ("Macaulay duration of a security with periodic interest.", "Durata Macaulay a unui titlu cu dobândă periodică."), + ("Matrix product of two arrays.", "Produs matriceal din două matrice."), + ( + "Mean after trimming a fraction of points from both ends.", + "Media după eliminarea unei proporții de valori extreme, repartizate egal între cele două capete ale șirului ordonat.", + ), + ("Mean counting text as 0 and logical values as 1 or 0.", "Media, considerând textul ca 0 și valorile logice ca 1 sau 0."), + ("Middle value of the numbers.", "Valoarea mediană a numerelor."), + ("Modified Bessel function of the first kind, I_n(x).", "Funcția Bessel modificată de primul fel, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Funcția Bessel modificată de al doilea fel, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Durata modificată a unui titlu cu dobândă periodică."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Rata internă de rentabilitate modificată folosind rate separate de împrumut și reinvestire.", + ), + ("Most frequently occurring number.", "Număr care apare cel mai frecvent."), + ("Multiplies all the numbers in the arguments.", "Înmulțește toate numerele din argumente."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Înmulțește elementele care se potrivesc din matrice de dimensiuni egale și adaugă produsele.", + ), + ("Multiplies the numbers in a field of the matching records.", "Înmulțește numerele dintr-un câmp al înregistrărilor care se potrivesc."), + ("Names intermediate results.", "Denumește rezultatele intermediare."), + ("Natural log of the gamma function.", "Logaritmul natural al funcției gamma."), + ("Natural logarithm of a complex number.", "Logaritmul natural al unui număr complex."), + ("Natural logarithm.", "Logaritm natural."), + ("Negative binomial probability.", "Probabilitate binomială negativă."), + ("Net present value of cash flows on specific dates.", "Valoarea actuală netă a fluxurilor de numerar la anumite date."), + ( + "Net present value of periodic cash flows at a discount rate.", + "Valoarea actualizată netă a fluxurilor de numerar periodice la o rată de actualizare.", + ), + ("Next coupon date after settlement.", "Următoarea dată de plată a dobânzii după decontare."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Rata anuală nominală dintr-o rată efectivă și perioade de capitalizare.", + ), + ("Normal distribution density or cumulative probability.", "Densitatea distribuției normale sau probabilitatea cumulativă."), + ("Number of areas in a reference.", "Numărul de zone dintr-o referință."), + ("Number of combinations with repetition.", "Numărul de combinații cu repetare."), + ("Number of combinations without repetition.", "Număr de combinații fără repetare."), + ("Number of coupons payable between settlement and maturity.", "Numărul de plăți de dobândă datorate între decontare și scadență."), + ("Number of ordered selections with repetition.", "Numărul de selecții ordonate cu repetare."), + ("Number of ordered selections without repetition.", "Numărul de selecții ordonate fără repetare."), + ("Number of periods needed to pay off or accumulate an amount.", "Numărul de perioade necesare pentru achitarea sau acumularea unei sume."), + ("Number of sheets.", "Număr de foi."), + ("One- or two-tailed Student's t probability.", "Probabilitatea unilaterală sau bilaterală pentru distribuția t a lui Student."), + ("One-tailed probability of a z-test.", "Probabilitatea cu o singură coadă a unui test z."), + ("Pearson product-moment correlation coefficient.", "Coeficientul de corelație produs-moment Pearson."), + ("Percent-encodes text for use in a URL.", "Codează procentual textul pentru utilizare într-un URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Plată periodică pentru un împrumut sau o anuitate cu plăți și rată constante.", + ), + ("Periods needed for an investment to grow to a target value.", "Perioadele necesare pentru ca o investiție să crească până la o valoare țintă."), + ("Picks a value from the list by its position.", "Alege o valoare din listă după poziția sa."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Alege coloanele unui tablou după poziție (numărări negative de la sfârșit).", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Alege rândurile unui tablou după poziție (numărări negative de la sfârșit).", + ), + ("Places arrays side by side.", "Plasează matrice una lângă alta."), + ("Poisson probability.", "Probabilitatea Poisson."), + ("Population covariance of paired values.", "Covarianța populației pentru valori pereche."), + ("Population skewness.", "Asimetria populației."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Abaterea standard a populației, considerând textul ca 0 și valorile logice ca 1/0.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Abaterea standard a populației pentru valorile unui câmp din înregistrările care îndeplinesc criteriile.", + ), + ("Population standard deviation.", "Abaterea standard a populației."), + ("Population variance counting text as 0 and logicals as 1/0.", "Dispersia populației, considerând textul ca 0 și valorile logice ca 1/0."), + ( + "Population variance of a field over the matching records.", + "Dispersia populației pentru valorile unui câmp din înregistrările care îndeplinesc criteriile.", + ), + ("Population variance.", "Dispersia populației."), + ("Positive square root.", "Rădăcină pătrată pozitivă."), + ("Predicts a value along a linear trend.", "Prezice o valoare de-a lungul unei tendințe liniare."), + ("Present value of a series of equal future payments.", "Valoarea actuală a unei serii de plăți viitoare egale."), + ("Previous coupon date on or before settlement.", "Data anterioară de plată a dobânzii la sau înainte de decontare."), + ("Price per 100 face value of a Treasury bill.", "Prețul pentru valoarea nominală de 100 a unui bon de trezorerie."), + ("Price per 100 face value of a discounted security.", "Prețul pentru valoarea nominală de 100 a unui titlu de valoare emis cu scont."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Prețul pentru o valoare nominală de 100 al unui titlu de valoare care plătește dobândă la scadență.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Prețul pentru o valoare nominală de 100 al unui titlu de valoare care plătește dobândă periodică.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "Prețul pentru o valoare nominală de 100 al unui titlu de valoare cu prima perioadă de dobândă neregulată.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Prețul pentru o valoare nominală de 100 al unui titlu de valoare cu ultima perioadă de dobândă neregulată.", + ), + ("Principal part of a given period's payment.", "Componenta de capital rambursat a plății pentru o anumită perioadă."), + ("Probability from Student's t-test.", "Probabilitatea de la testul t al lui Student."), + ("Probability of a number of successes falling in a range.", "Probabilitatea ca un număr de succese să se încadreze într-un interval."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Probabilitatea ca o valoare normală standard să se încadreze între medie și z.", + ), + ("Probability that values fall between two limits.", "Probabilitatea ca valorile să se încadreze între două limite."), + ("Product of complex numbers.", "Produsul numerelor complexe."), + ("Quartile (0–4) of a data set, inclusive method.", "Cuartila (0–4) a unui set de date, metoda inclusivă."), + ("Quartile (0–4) of a data set.", "Cuartila (0–4) a unui set de date."), + ("Quartile (1–3) of a data set, exclusive method.", "Cuartila (1–3) a unui set de date, metodă exclusivă."), + ("Quotient of two complex numbers.", "Câtul a două numere complexe."), + ("Raises a complex number to a power.", "Ridică un număr complex la o putere."), + ("Raises a number to a power.", "Ridică un număr la o putere."), + ("Rank of a number within a list.", "Poziția unui număr într-o listă."), + ("Rank of a number within a list; ties get the average rank.", "Rangul unui număr într-o listă; valorile egale primesc media rangurilor lor."), + ("Rank of a number within a list; ties share the top rank.", "Rangul unui număr într-o listă; valorile egale primesc cel mai bun rang comun."), + ("Ratio of the factorial of a sum to the product of factorials.", "Raportul dintre factorialul unei sume și produsul factorialelor."), + ("Reads text in a given base as a number.", "Citește textul dintr-o bază dată ca număr."), + ("Real coefficient of a complex number.", "Coeficientul real al unui număr complex."), + ("Relative standing of a value as a fraction of the data set.", "Poziția relativă a unei valori ca o fracțiune din setul de date."), + ("Relative standing of a value from 0 to 1 inclusive.", "Poziția relativă a unei valori de la 0 la 1 inclusiv."), + ("Relative standing of a value strictly between 0 and 1.", "Poziția relativă a unei valori strict între 0 și 1."), + ("Remainder of a division, with the sign of the divisor.", "Restul unei împărțiri, cu semnul împărțitorului."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Elimină spațiile de la început și de la sfârșit și reduce secvențele de spații la un singur spațiu.", + ), + ("Removes non-printable control characters from text.", "Elimină caracterele de control neprintabile din text."), + ( + "Removes rows or columns from the start (or end) of an array.", + "Elimină rândurile sau coloanele de la începutul (sau la sfârșitul) unui tablou.", + ), + ("Repeats a text a given number of times.", "Repetă un text de un anumit număr de ori."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Înlocuiește potrivirile unei expresii regulate, toate sau o apariție aleasă.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Înlocuiește aparițiile unui text cu altul, opțional doar o apariție dată.", + ), + ("Replaces part of a text by position.", "Înlocuiește o parte a unui text pe baza poziției."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Returnează 1 când un număr este cel puțin pasul, în caz contrar 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Returnează 1 când două numere sunt egale, în caz contrar 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Returnează un cod pentru tipul de valoare: 1 număr, 2 text, 4 logic, 16 eroare, 64 matrice.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Returnează o rezervă când valoarea este #N/A, în caz contrar, valoarea."), + ( + "Returns a fallback when the value is an error, otherwise the value.", + "Returnează o rezervă atunci când valoarea este o eroare, în caz contrar valoarea.", + ), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Returnează o proprietate a indicatorului cheie de performanță dintr-un cub (fără conexiuni cub; #N/A).", + ), + ( + "Returns a member or tuple from a cube (no cube connections; #N/A).", + "Returnează un membru sau un tuplu dintr-un cub (fără conexiuni cub; #N/A).", + ), + ("Returns a property of a cube member (no cube connections; #N/A).", "Returnează o proprietate a unui membru de cub (fără conexiuni cub; #N/A)."), + ( + "Returns an aggregated value from a cube (no cube connections; #N/A).", + "Returnează o valoare agregată dintr-un cub (fără conexiuni cub; #N/A).", + ), + ("Returns characters from the middle of a text.", "Returnează caractere de la mijlocul unui text."), + ("Returns information about the operating environment.", "Returnează informații despre mediul de operare."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Returnează o valoare când o condiție este TRUE și alta când este FALSE.", + ), + ("Returns the #N/A error value.", "Returnează valoarea erorii #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Returnează poziția bazată pe 1 a unei valori într-un rând sau coloană."), + ("Returns the ISO 8601 week number of a date.", "Returnează numărul de săptămână ISO 8601 al unei date."), + ("Returns the Unicode code point of the first character of a text.", "Returnează punctul de cod Unicode al primului caracter al unui text."), + ("Returns the Windows-1252 code of the first character of a text.", "Returnează codul Windows-1252 al primului caracter al unui text."), + ("Returns the character for a Unicode code point.", "Returnează caracterul pentru un punct de cod Unicode."), + ( + "Returns the character for a code from the Windows-1252 character set.", + "Returnează caracterul pentru un cod din setul de caractere Windows-1252.", + ), + ("Returns the current date and time.", "Returnează data și ora curente."), + ("Returns the current date.", "Returnează data curentă."), + ("Returns the date a number of months before or after a date.", "Returnează data cu un număr de luni înainte sau după o dată."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Returnează data la un număr de zile lucrătoare distanță cu un weekend personalizat.", + ), + ("Returns the date a number of working days before or after a date.", "Returnează data cu un număr de zile lucrătoare înainte sau după o dată."), + ("Returns the day of the month of a date.", "Returnează ziua lunii unei date."), + ("Returns the day of the week of a date as a number.", "Returnează ziua săptămânii unei date ca număr."), + ("Returns the distinct rows or columns of an array.", "Returnează rândurile sau coloanele distincte ale unui tablou."), + ( + "Returns the element, row or column of an array at the given position.", + "Returnează elementul, rândul sau coloana unui tablou la poziția dată.", + ), + ( + "Returns the field value of the single record that meets the criteria.", + "Returnează valoarea câmpului unei singure înregistrări care îndeplinește criteriile.", + ), + ("Returns the first characters of a text.", "Returnează primele caractere ale unui text."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Returnează fracțiunea de an dintre două date conform unei convenții de calcul al zilelor.", + ), + ("Returns the hour (0-23) of a time.", "Returnează ora (0-23) dintr-un timp."), + ("Returns the last characters of a text.", "Returnează ultimele caractere ale unui text."), + ("Returns the last day of the month a number of months away.", "Returnează ultima zi a lunii la un număr de luni distanță."), + ("Returns the logical value FALSE.", "Returnează valoarea logică FALSE."), + ("Returns the logical value TRUE.", "Returnează valoarea logică TRUE."), + ("Returns the minute (0-59) of a time.", "Returnează minutul (0-59) al unui timp."), + ("Returns the month (1-12) of a date.", "Returnează luna (1-12) a unei date."), + ( + "Returns the nth member of a cube set (no cube connections; #N/A).", + "Returnează al n-lea membru al unui set de cuburi (fără conexiuni cub; #N/A).", + ), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Returnează numărul care identifică o valoare de eroare sau #N/A dacă nu este o eroare.", + ), + ("Returns the number of days between two dates.", "Returnează numărul de zile dintre două date."), + ("Returns the phonetic (furigana) text; here the text itself.", "Returnează textul fonetic (furigana); aici textul în sine."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Returnează poziția unei valori într-un rând sau coloană cu potrivire flexibilă și moduri de căutare.", + ), + ("Returns the second (0-59) of a time.", "Returnează secunda (0-59) a unei ore."), + ("Returns the text that comes after a delimiter.", "Returnează textul care vine după un delimitator."), + ("Returns the text that comes before a delimiter.", "Returnează textul care vine înaintea unui delimitator."), + ("Returns the value if it is text, otherwise empty text.", "Returnează valoarea dacă este text, în caz contrar text gol."), + ("Returns the value paired with the first condition that is TRUE.", "Returnează valoarea asociată cu prima condiție care este TRUE."), + ("Returns the week number of a date within its year.", "Returnează numărul săptămânii unei date din anul său."), + ("Returns the year of a date.", "Returnează anul unei date."), + ("Reverses a logical value.", "Inversează o valoare logică."), + ("Right-tailed F probability.", "Probabilitate F cu coada dreaptă."), + ("Right-tailed Student's t probability.", "Probabilitatea pentru coada dreaptă a distribuției t a lui Student."), + ("Right-tailed chi-squared probability.", "Probabilitatea chi-pătrat din coada dreaptă."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Rotunjește un număr și îl formatează ca text cu zecimale fixe și separatori opționali de mii.", + ), + ("Rounds a number away from zero to a given number of digits.", "Rotunjește un număr în sens opus lui zero, la numărul de cifre indicat."), + ("Rounds a number down to a multiple of significance.", "Rotunjește un număr în jos la un multiplu al valorii indicate."), + ("Rounds a number down to the nearest integer or multiple.", "Rotunjește un număr în jos la cel mai apropiat număr întreg sau multiplu."), + ("Rounds a number down to the nearest integer.", "Rotunjește un număr în jos la cel mai apropiat număr întreg."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Rotunjește un număr la numărul de cifre indicat; valorile exact la jumătate se rotunjesc în sens opus lui zero.", + ), + ("Rounds a number to the nearest multiple.", "Rotunjește un număr la cel mai apropiat multiplu."), + ("Rounds a number toward negative infinity to a multiple.", "Rotunjește un număr spre infinit negativ la un multiplu."), + ("Rounds a number toward positive infinity to a multiple.", "Rotunjește un număr spre infinit pozitiv la un multiplu."), + ("Rounds a number toward zero to a given number of digits.", "Rotunjește un număr spre zero la un anumit număr de cifre."), + ("Rounds a number up to a multiple of significance.", "Rotunjește un număr în sus la un multiplu al valorii indicate."), + ("Rounds a number up to the nearest integer or multiple.", "Rotunjește un număr în sus la cel mai apropiat număr întreg sau multiplu."), + ("Rounds away from zero to the nearest even integer.", "Rotunjește în sens opus lui zero la cel mai apropiat număr întreg par."), + ("Rounds away from zero to the nearest odd integer.", "Rotunjește în sens opus lui zero la cel mai apropiat număr întreg impar."), + ("Row number of a reference.", "Numărul de rând al unei referințe."), + ("Running accumulation of an array.", "Acumularea succesivă a valorilor unei matrice."), + ("Sample covariance of paired values.", "Covarianța eșantionului pentru valori pereche."), + ("Sample skewness.", "Asimetria eșantionului."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Abaterea standard a eșantionului, considerând textul ca 0 și valorile logice ca 1/0.", + ), + ( + "Sample standard deviation of a field over the matching records.", + "Abaterea standard a eșantionului pentru valorile unui câmp din înregistrările care îndeplinesc criteriile.", + ), + ("Sample standard deviation.", "Abaterea standard a eșantionului."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Dispersia eșantionului, considerând textul ca 0 și valorile logice ca 1/0."), + ( + "Sample variance of a field over the matching records.", + "Dispersia eșantionului pentru valorile unui câmp din înregistrările care îndeplinesc criteriile.", + ), + ("Sample variance.", "Dispersia eșantionului."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Caută într-un rând sau într-o coloană și returnează elementul, rândul sau coloana corespunzătoare dintr-o altă matrice.", + ), + ("Secant of a complex number.", "Secanta unui număr complex."), + ("Secant of an angle in radians.", "Secanta unui unghi în radiani."), + ("Sheet number.", "Numărul foii."), + ( + "Shifts the bits of a number left (right for negative shifts).", + "Deplasează biții unui număr la stânga (la dreapta pentru deplasări negative).", + ), + ("Shifts the bits of a number right (left for negative shifts).", "Mută biții unui număr la dreapta (la stânga pentru deplasări negative)."), + ("Sine of a complex number.", "Sinusul unui număr complex."), + ("Sine of an angle in radians.", "Sinusul unui unghi în radiani."), + ("Slope of the least-squares regression line.", "Panta dreptei de regresie a celor mai mici pătrate."), + ("Smallest number (0 when there are none).", "Cel mai mic număr (0 când nu există)."), + ("Smallest number in a field of the matching records.", "Cel mai mic număr dintr-un câmp al înregistrărilor care se potrivesc."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Cel mai mic număr de succese pentru care probabilitatea binomială cumulată atinge alfa.", + ), + ( + "Smallest value among cells that meet every condition.", + "Cea mai mică valoare dintre celulele foii de calcul care îndeplinesc fiecare condiție.", + ), + ("Smallest value counting text as 0 and logicals as 1/0.", "Cea mai mică valoare, considerând textul ca 0 și valorile logice ca 1/0."), + ("Sorts an array by the values of other arrays of matching size.", "Sortează o matrice după valorile altor matrice cu dimensiunea potrivită."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Sortează rândurile (sau coloanele) unui tablou după una sau mai multe dintre coloanele sale.", + ), + ("Spells out a number in Thai words with Baht.", "Scrie un număr în cuvinte thailandeze cu Baht."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Împarte textul într-o grilă de coloane și rânduri la delimitatorii dați.", + ), + ("Square of the correlation coefficient.", "Pătrat al coeficientului de corelație."), + ("Square root of a complex number.", "Rădăcina pătrată a unui număr complex."), + ("Square root of the number times pi.", "Rădăcina pătrată a produsului dintre număr și pi."), + ("Stacks arrays on top of each other.", "Stivuiește matrice una peste alta."), + ("Standard error of predicted y values in a regression.", "Eroare standard a valorilor y prezise într-o regresie."), + ("Standard normal cumulative probability.", "Probabilitate cumulată normală standard."), + ("Standard normal density or cumulative probability.", "Densitate normală standard sau probabilitate cumulativă."), + ("Standard normal density.", "Densitate normală standard."), + ("Straight-line depreciation for one period.", "Amortizare liniară pentru o perioadă."), + ("Student's t density or left-tailed probability.", "Densitatea distribuției t a lui Student sau probabilitatea pentru coada stângă."), + ("Sum of a power series.", "Suma unei serii de puteri."), + ("Sum of complex numbers.", "Suma numerelor complexe."), + ("Sum of squared deviations from the mean.", "Suma abaterilor pătrate de la medie."), + ("Sum-of-years'-digits depreciation for a period.", "Amortizare prin metoda sumei cifrelor anilor pentru o perioadă."), + ("Sums the differences of squares of matching elements.", "Însumează diferențele de pătrate ale elementelor care se potrivesc."), + ("Sums the squared differences of matching elements.", "Însumează diferențele pătrate ale elementelor care se potrivesc."), + ("Sums the sums of squares of matching elements.", "Însumează sumele pătratelor elementelor care se potrivesc."), + ("Swaps the rows and columns of an array.", "Schimbă rândurile și coloanele unei matrice."), + ("TRUE for references.", "TRUE pentru referințe."), + ("TRUE when a LAMBDA argument was left out.", "TRUE când un argument LAMBDA a fost omis."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE când o expresie regulată se potrivește undeva în text."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE când un număr impar de argumente este TRUE."), + ("TRUE when at least one argument is TRUE.", "TRUE când cel puțin un argument este TRUE."), + ("TRUE when every argument is TRUE.", "TRUE când fiecare argument este TRUE."), + ("TRUE when the cell has a formula.", "TRUE când celula are o formulă."), + ("TRUE when the integer part of a number is even.", "TRUE când partea întreagă a unui număr este pară."), + ("TRUE when the integer part of a number is odd.", "TRUE când partea întreagă a unui număr este impară."), + ("TRUE when the value is TRUE or FALSE.", "TRUE când valoarea este TRUE sau FALSE."), + ("TRUE when the value is a number.", "TRUE când valoarea este un număr."), + ("TRUE when the value is any error other than #N/A.", "TRUE când valoarea este orice eroare, alta decât #N/A."), + ("TRUE when the value is any error.", "TRUE când valoarea este orice eroare."), + ("TRUE when the value is anything other than text.", "TRUE când valoarea este altceva decât text."), + ("TRUE when the value is text.", "TRUE când valoarea este text."), + ("TRUE when the value is the #N/A error.", "TRUE când valoarea este eroarea #N/A."), + ("TRUE when the value refers to an empty cell.", "TRUE când valoarea se referă la o celulă goală."), + ("TRUE when two texts are identical, including case.", "TRUE când două texte sunt identice, inclusiv majuscule."), + ("Tangent of a complex number.", "Tangenta unui număr complex."), + ("Tangent of an angle in radians.", "Tangenta unui unghi în radiani."), + ("The constant pi to 15 digits.", "Constanta pi la 15 cifre."), + ("The formula of a cell as text.", "Formula unei celule ca text."), + ("The gamma function.", "Funcția gamma."), + ("The k-th largest number in a data set.", "Al k-lea cel mai mare număr dintr-un set de date."), + ("The k-th smallest number in a data set.", "Al k-lea cel mai mic număr dintr-un set de date."), + ("The reference named by a text string.", "Referința numită printr-un șir de text."), + ("The sum of a subset as a fraction of the sum of all the values.", "Suma unei submulțimi ca o fracțiune din suma tuturor valorilor."), + ("Total interest paid between two periods.", "Dobânda totală plătită între două perioade."), + ("Total principal repaid between two periods.", "Capitalul total rambursat între două perioade."), + ("Two-tailed Student's t probability.", "Probabilitatea bilaterală pentru distribuția t a lui Student."), + ("Two-tailed inverse of Student's t distribution.", "Inversa bilaterală a distribuției t a lui Student."), + ("Two-tailed p-value of an F-test for equality of variances.", "Valoarea p bilaterală a unui test F pentru egalitatea varianțelor."), + ("Values along a fitted exponential growth curve.", "Valori de-a lungul unei curbe de creștere exponențială adaptată."), + ("Values along a least-squares linear fit.", "Valori de-a lungul unei drepte ajustate prin metoda celor mai mici pătrate."), + ("Vertical array of all the most frequent numbers.", "Matrice verticală a tuturor celor mai frecvente numere."), + ("Weibull density or probability.", "Densitatea sau probabilitatea Weibull."), + ("Writes a number in another base, padded with zeros.", "Scrie un număr într-o altă bază, completat cu zerouri."), + ( + "Y-intercept of the least-squares regression line.", + "Ordonata la origine a dreptei de regresie determinate prin metoda celor mai mici pătrate.", + ), + ("Yield of a Treasury bill.", "Randamentul unui bon de trezorerie."), + ("Yield of a security paying periodic interest.", "Randamentul unui titlu de valoare care plătește dobândă periodică."), + ("Yield of a security with an odd first period.", "Randamentul unui titlu de valoare cu prima perioadă de dobândă neregulată."), + ("Yield of a security with an odd last period.", "Randamentul unui titlu de valoare cu ultima perioadă de dobândă neregulată."), + ("Z-score of a value.", "Scorul Z al unei valori."), + ("e raised to the given power.", "e ridicat la puterea dată."), + ("k-th percentile, k from 0 to 1 inclusive.", "Percentila de ordin k, cu k de la 0 la 1 inclusiv."), + ("k-th percentile, k strictly between 0 and 1.", "Percentila de ordin k, cu k strict între 0 și 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "tip_de_referință"), + ("actual_range", "interval_real"), + ("aggregation", "agregare"), + ("alpha", "alfa"), + ("angle", "unghi"), + ("area_num", "numărul_zonei"), + ("argument", "argument"), + ("array", "matrice"), + ("array_x", "matrice_de_valori_x"), + ("array_y", "matrice_de_valori_y"), + ("average_range", "interval_de_calcul_al_mediei"), + ("base", "bază"), + ("basis", "convenția_de_calcul_al_zilelor"), + ("beta", "beta"), + ("bins_array", "matrice_de_limite_ale_claselor"), + ("bottom", "limita_inferioară"), + ("by_array", "matrice_de_chei_de_sortare"), + ("by_col", "după_coloană"), + ("calc_method", "metoda_de_calcul"), + ("calculation", "calcul"), + ("caption", "legenda"), + ("case_sensitivity", "diferențiere_majuscule_minuscule"), + ("coefficients", "coeficienți"), + ("col_delimiter", "delimitator_col"), + ("col_fields", "câmpuri_de_coloană"), + ("col_index_num", "indexul_coloanei"), + ("col_num", "numărul_coloanei"), + ("col_sort_order", "ordinea_de_sortare_a_coloanei"), + ("col_total_depth", "nivelul_totalurilor_pe_coloane"), + ("cols", "numărul_de_coloane"), + ("column_num", "numărul_coloanei"), + ("columns", "numărul_de_coloane"), + ("confidence_level", "nivelul_de_încredere"), + ("connection", "conexiune_de_date"), + ("const", "constantă"), + ("cost", "cost_inițial"), + ("coupon", "rata_anuală_a_cuponului"), + ("criteria", "criterii"), + ("criteria_range", "interval_de_criterii"), + ("cumulative", "distribuție_cumulativă"), + ("data_all", "toate_datele"), + ("data_array", "matrice_de_date"), + ("data_completion", "completarea_datelor"), + ("data_subset", "subsetul_de_date"), + ("database", "baza_de_date"), + ("date", "data"), + ("date_purchased", "data_achiziției"), + ("date_text", "data_scrisă_ca_text"), + ("dates", "date"), + ("day", "ziua"), + ("days", "zile"), + ("decimal_dollar", "preț_zecimal"), + ("decimal_separator", "separator_zecimal"), + ("decimals", "zecimale"), + ("default_or_value", "implicit_sau_valoare"), + ("deg_freedom", "grade_de_libertate"), + ("delimiter", "delimitator"), + ("denominator", "numitor"), + ("dimension", "dimensiune"), + ("discount", "rata_de_scont"), + ("divisor", "divizor"), + ("effect_rate", "rata_efectivă"), + ("end_date", "data_de_încheiere"), + ("end_period", "ultima_perioadă"), + ("error_val", "valoare_de_eroare"), + ("exactly_once", "exact_o_dată"), + ("expected_range", "interval_așteptat"), + ("expression", "expresie"), + ("factor", "factor"), + ("field", "câmpul_bazei_de_date"), + ("field_headers", "anteturi_de_câmp"), + ("field_relationship", "relația_dintre_câmpuri"), + ("filter_array", "matrice_de_filtrare"), + ("finance_rate", "rata_dobânzii_de_finanțare"), + ("find_text", "text_căutat"), + ("first_coupon", "data_primei_plăți_a_cuponului"), + ("first_interest", "data_primei_plăți_a_dobânzii"), + ("first_period", "data_sfârșitului_primei_perioade"), + ("form", "formă"), + ("format", "format"), + ("format_text", "format_text"), + ("fraction", "fracție"), + ("fractional_dollar", "preț_fracționat"), + ("frequency", "frecvența_plății_cuponului"), + ("friendly_name", "nume_de_afișat"), + ("from_unit", "unitate_de_măsură_sursă"), + ("full_precision", "precizie_deplină"), + ("function", "funcția"), + ("function_num", "numărul_funcției"), + ("fv", "valoarea_viitoare"), + ("group_separator", "separator_de_grup"), + ("guess", "estimare_inițială"), + ("height", "înălțime"), + ("holidays", "sărbători"), + ("hour", "oră"), + ("i_num", "coeficient_imaginar"), + ("if_empty", "dacă_este_gol"), + ("if_not_found", "dacă_nu_se_găsește"), + ("ignore", "omitere"), + ("ignore_empty", "omite_valorile_goale"), + ("include", "includere"), + ("index_num", "număr_de_index"), + ("info_type", "tip_de_informații"), + ("initial_value", "valoarea_inițială"), + ("instance_num", "numărul_de_apariție"), + ("inumber", "număr_complex"), + ("investment", "investiție"), + ("issue", "data_emiterii"), + ("k", "k"), + ("known_xs", "valori_x_cunoscute"), + ("known_ys", "valori_y_cunoscute"), + ("kpi_name", "numele_indicatorului_cheie_de_performanță"), + ("kpi_property", "proprietatea_indicatorului_cheie_de_performanță"), + ("lambda", "lambda"), + ("last_interest", "data_ultimei_plăți_a_dobânzii"), + ("life", "durata_de_viață_utilă"), + ("link_location", "locația_linkului"), + ("logical", "valoare_logică"), + ("logical_test", "condiție_logică"), + ("lookup_array", "matrice_căutare"), + ("lookup_value", "valoare_căutată"), + ("lookup_vector", "vector_de_căutare"), + ("lower_limit", "limita_inferioară"), + ("m", "m"), + ("match_end", "potrivire_la_sfârșitul_textului"), + ("match_mode", "mod_potrivire"), + ("match_type", "metoda_de_potrivire"), + ("maturity", "data_de_scadență"), + ("max", "maxim"), + ("max_range", "interval_de_valori_maxime"), + ("mean", "medie_aritmetică"), + ("member_expression", "expresie_membru_cub"), + ("method", "metoda"), + ("min", "minim"), + ("min_length", "lungime_min"), + ("min_range", "interval_de_valori_minime"), + ("minute", "minut"), + ("mode", "modul_de_calcul"), + ("month", "luna"), + ("months", "luni"), + ("multiple", "multiplu"), + ("n", "n"), + ("name", "nume"), + ("new_text", "text_nou"), + ("new_xs", "noi_valori_x"), + ("no_commas", "omite_separatorii_de_grupuri_de_cifre"), + ("no_switch", "nu_schimbați_metoda_de_amortizare"), + ("nominal_rate", "rata_nominală"), + ("nper", "numărul_de_perioade"), + ("npery", "perioade_pe_an"), + ("num_bytes", "numărul_de_octeți"), + ("num_chars", "numărul_de_caractere"), + ("num_digits", "numărul_de_cifre"), + ("number", "număr"), + ("number_chosen", "numărul_de_elemente_alese"), + ("number_f", "numărul_de_eșecuri"), + ("number_pop", "dimensiunea_populației"), + ("number_s", "numărul_de_succese"), + ("number_sample", "dimensiunea_eșantionului"), + ("number_times", "număr_de_repetiții"), + ("numerator", "numărător"), + ("occurrence", "apariție"), + ("old_text", "text_vechi"), + ("options", "opțiuni"), + ("order", "ordine"), + ("pad_with", "valoare_de_umplere"), + ("par", "valoarea_nominală"), + ("parameter", "parametru"), + ("pattern", "model_de_expresie_regulată"), + ("per", "perioada"), + ("percent", "proporție"), + ("period", "perioada"), + ("places", "numărul_de_cifre_de_ieșire"), + ("pmt", "plată"), + ("population_s", "numărul_de_succese_din_populație"), + ("power", "putere"), + ("pr", "preț"), + ("principal", "capital_inițial"), + ("prob_range", "interval_de_probabilități"), + ("probability", "probabilitate"), + ("probability_s", "probabilitatea_de_succes"), + ("property", "numele_proprietății"), + ("pv", "valoarea_actuală"), + ("quart", "numărul_cuartilei"), + ("radix", "baza_de_numerație"), + ("range", "interval"), + ("range_lookup", "căutare_interval"), + ("rank", "rang"), + ("rate", "rată"), + ("real_num", "coeficient_real"), + ("redemption", "valoare_de_răscumpărare"), + ("ref", "referință"), + ("ref_text", "text_de_referință"), + ("reference", "referință"), + ("reinvest_rate", "rata_dobânzii_de_reinvestire"), + ("relative_to", "relativ_la"), + ("replacement", "înlocuire"), + ("result", "rezultat"), + ("result_vector", "vector_rezultat"), + ("return_array", "matrice_rezultat"), + ("return_mode", "mod_de_returnare"), + ("return_type", "tip_de_returnare"), + ("row_delimiter", "delimitator_de_rând"), + ("row_fields", "câmpuri_de_rând"), + ("row_index_num", "index_de_rând"), + ("row_num", "numărul_rândului"), + ("row_sort_order", "ordinea_de_sortare_a_rândurilor"), + ("row_total_depth", "nivelul_totalurilor_pe_rânduri"), + ("rows", "numărul_de_rânduri"), + ("salvage", "valoarea_reziduală"), + ("sample_s", "numărul_de_succese_din_eșantion"), + ("scan_by_column", "scanează_după_coloană"), + ("schedule", "serie_de_rate_ale_dobânzii"), + ("search_mode", "mod_căutare"), + ("seasonality", "sezonalitate"), + ("second", "secundă"), + ("serial_number", "numărul_de_serie"), + ("set", "set_de_membri_ai_cubului"), + ("set_expression", "expresie_set_de_membri_cub"), + ("settlement", "data_decontării"), + ("sheet_text", "textul_foii"), + ("shift_amount", "numărul_de_biți_de_deplasat"), + ("sigma", "sigma"), + ("significance", "multiplu_de_rotunjire_sau_precizie"), + ("size", "dimensiune"), + ("sort_by", "criteriu_de_sortare"), + ("sort_index", "index_de_sortare"), + ("sort_order", "ordine_de_sortare"), + ("source", "sursa"), + ("standard_dev", "abatere_standard"), + ("start", "valoarea_de_pornire"), + ("start_date", "data_de_începere"), + ("start_num", "poziția_de_pornire"), + ("start_period", "perioada_de_începere"), + ("statistic_type", "tipul_statisticii"), + ("stats", "statistici"), + ("step", "pas"), + ("suffix", "sufix"), + ("sum_range", "interval_de_sumă"), + ("table_array", "matrice_de_tabel"), + ("tails", "numărul_de_cozi_de_distribuție"), + ("target", "țintă"), + ("target_date", "data_țintă"), + ("text", "text"), + ("time_text", "ora_scrisă_ca_text"), + ("timeline", "cronologie"), + ("to_unit", "unitate_de_măsură_țintă"), + ("top", "limita_superioară"), + ("total_depth", "nivelul_totalurilor"), + ("trials", "încercări"), + ("triangulation_precision", "precizia_triangulației"), + ("trim_cols", "modul_de_tăiere_a_coloanei"), + ("trim_rows", "modul_de_tăiere_a_rândurilor"), + ("type", "tip"), + ("type_text", "numele_tipului_de_date"), + ("unit", "unitate"), + ("upper_limit", "limita_superioară"), + ("url", "url"), + ("value", "valoare"), + ("value_if_error", "rezultat_în_cazul_unei_erori"), + ("value_if_false", "rezultat_când_condiția_este_falsă"), + ("value_if_na", "rezultat_pentru_eroarea_NA"), + ("value_if_true", "rezultat_când_condiția_este_adevărată"), + ("values", "valorile_de_intrare"), + ("vector", "vector"), + ("weekend", "weekend"), + ("whole_number", "număr_întreg"), + ("width", "lățime"), + ("within_text", "text_în_care_se_caută"), + ("wrap_count", "numărul_de_valori_pe_rând_sau_coloană"), + ("x", "x"), + ("x_num", "coordonata_x"), + ("x_range", "interval_de_valori_x"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "coordonata_y"), + ("year", "an"), + ("yld", "randamentul_investiției"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/ru.rs b/crates/ui-egui/src/i18n/ru.rs index 2d4d3fe1f9..dd7b91f155 100644 --- a/crates/ui-egui/src/i18n/ru.rs +++ b/crates/ui-egui/src/i18n/ru.rs @@ -1,8 +1,87 @@ //! Russian translations for the interface strings in i18n.rs. -/// Returns the Russian translation for `text`, or `None` so callers fall back to English. +/// Looks up a Russian interface label or diagnostic template by its English catalog key. +/// Returns `None` for unknown keys so the shared lookup can apply its English fallback. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Applies to" => "Применяется к", + "Formula" => "Формула", + "Maximum" => "Максимальное значение", + "Minimum" => "Минимальное значение", + "and" => "и", + "Agent Control (MCP)…" => "Управление агентами (MCP)…", + "Cells…" => "Ячейки…", + "Collapse Ribbon" => "Свернуть ленту", + "Command Palette…" => "Палитра команд…", + "Conditional Formatting…" => "Условное форматирование…", + "Contributors…" => "Участники…", + "Display Theme" => "Тема оформления", + "Error Checking…" => "Проверка ошибок…", + "Evaluate Formula…" => "Вычислить формулу…", + "Fill Down" => "Заполнить вниз", + "Fill Right" => "Заполнить вправо", + "Function…" => "Функция…", + "Help" => "Справка", + "Hide GridCraft" => "Скрыть GridCraft", + "Hide Others" => "Скрыть остальные", + "Name…" => "Имя…", + "New from Sample…" => "Создать из образца…", + "Next Sheet" => "Следующий лист", + "Picture…" => "Изображение…", + "Previous Sheet" => "Предыдущий лист", + "Properties…" => "Свойства…", + "Quit GridCraft" => "Выйти из GridCraft", + "Record Actions" => "Запись действий", + "Remove Duplicates…" => "Удалить дубликаты…", + "Rename Sheet…" => "Переименовать лист…", + "Save as Web Page…" => "Сохранить как веб-страницу…", + "Services" => "Службы", + "Show All" => "Показать все", + "Sort…" => "Сортировка…", + "Sparklines…" => "Спарклайны…", + "Spelling…" => "Орфография…", + "Subtotal…" => "Промежуточные итоги…", + "Text to Columns…" => "Текст по столбцам…", + "Window" => "Окно", + "menu|Tools" => "Инструменты", + "v{from} to {to}" => "С версии {from} до {to}", + "{app} {version} is available with the latest features and bug fixes." => "Доступен {app} {version} с новыми возможностями и исправлениями.", + "What's new" => "Что нового", + "Later" => "Позже", + "Update" => "Обновление", + "Update and Restart" => "Обновить и перезапустить", + "by {developer}" => "от {developer}", + "Downloading and installing update…" => "Загрузка и установка обновления…", + "The update is installed. Close {app} to finish; it restarts by itself." => { + "Обновление установлено. Закройте {app}, чтобы завершить установку. Программа перезапустится автоматически." + } + "Save or close your open work first; the update restarts the app." => { + "Сохраните или закройте открытые книги. Обновление перезапустит программу." + } + "Cannot auto-update this installation type. Please download manually." => { + "Этот тип установки нельзя обновить автоматически. Скачайте обновление вручную." + } + "Couldn't start the update ({error})" => "Не удалось запустить обновление ({error})", + "a linked (not embedded) picture was skipped" => "Связанное (не встроенное) изображение пропущено.", + "missing picture {target}" => "Изображение {target} отсутствует.", + "chart {target} has no supported plot and was skipped" => "У диаграммы {target} нет поддерживаемого типа построения; она пропущена.", + "a histogram, waterfall, treemap… chart without its chart part was skipped" => { + "Гистограмма, каскадная диаграмма, древовидная карта… без своей части диаграммы пропущена." + } + "an embedded object (diagram, OLE…) was skipped" => "Встроенный объект (схема, OLE…) пропущен.", + "grouped shapes are not supported and were skipped" => "Группировка фигур не поддерживается; фигуры пропущены.", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported." => { + "Импорт XLSB только с данными: формулы заменяются сохранёнными результатами и не пересчитываются. Форматирование, диаграммы, изображения, макросы и другие функции не импортируются; даты, денежные значения и проценты могут отображаться как числа. Сохраните новый файл .xlsx; сохранение в XLSB не поддерживается." + } + "XLSB module sheets were skipped." => "Листы модулей XLSB пропущены.", + "XLSB non-worksheet sheets were skipped." => "Листы XLSB, не являющиеся рабочими листами, пропущены.", + "Unsupported XLSB future-record and alternate-content blocks were skipped." => { + "Неподдерживаемые будущие записи и блоки альтернативного содержимого XLSB пропущены." + } + "Invalid XLSB merged ranges were skipped." => "Недопустимые объединённые диапазоны XLSB пропущены.", + "{count} items in this file were handled differently. First: {warning}" => "Элементов файла, обработанных иначе: {count}. Первый: {warning}", + "Paste Special|Add" => "Сложить", + "Text to Columns|Comma" => "Запятая", "Diagram" => "Схема", "Decorative Text" => "Декоративный текст", "Paste" => "Вставить", @@ -227,9 +306,6 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Page Break\nPreview" => "Предварительный просмотр\nразрывов страниц", "Page\nLayout" => "Разметка\nстраницы", "Formula Bar" => "Строка формул", - "Name Box" => "Поле имени", - "Cell Editor" => "Редактор ячейки", - "Font Size" => "Размер шрифта", "Gridlines" => "Сетка", "Headings" => "Заголовки", "Zoom" => "Масштаб", @@ -317,10 +393,11 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Financial" => "Финансовые", "Recently Used" => "Последние", "Logical" => "Логические", - "Date & Time" => "Дата и время", - "Lookup & Reference" => "Поиск и ссылки", "Math & Trig" => "Математические и тригонометрические", "More Functions" => "Другие функции", + "Page order" => "Порядок страниц", + "Down, then over" => "Вниз, затем вправо", + "Over, then down" => "Вправо, затем вниз", "Page Layout|Orientation" => "Ориентация", "Display theme" => "Тема оформления", "Animations" => "Анимация", @@ -332,7 +409,6 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Dark" => "Тёмная", "Sheet Options|View" => "На экране", "Print" => "Печать", - "Print What" => "Что печатать", // Page Layout view and the Header & Footer tab. "Click to add data" => "Щелкните, чтобы добавить данные", "Add header" => "Добавить верхний колонтитул", @@ -428,6 +504,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Print Entire Workbook" => "Напечатать всю книгу", "Fit Sheet on One Page" => "Вписать лист на одну страницу", "Page Setup…" => "Параметры страницы…", + "Page {page}" => "Страница {page}", "Page {page} of {pages}" => "Страница {page} из {pages}", "Nothing to print." => "Нечего печатать.", "Previous page" => "Предыдущая страница", @@ -456,26 +533,602 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Save .xlsx workbooks automatically after every change" => "Автоматически сохранять книги .xlsx после каждого изменения", "Workbook calculation" => "Вычисления в книге", "Enable iterative calculation" => "Включить итеративные вычисления", - "Maximum Iterations:" => "Предельное число итераций:", - "Maximum Change:" => "Максимальное изменение:", - "Maximum Iterations must be a whole number from 1 to 32767." => "Предельное число итераций должно быть целым числом от 1 до 32767.", - "Maximum Change must be a number of 0 or more." => "Максимальное изменение должно быть числом не меньше 0.", "Calculation settings are saved with the workbook." => "Параметры вычислений сохраняются вместе с книгой.", + " (password)" => " (пароль)", + " (password, unlocked)" => " (пароль, разблокировано)", + "$ English (United States)" => "$ английский (США)", + "'{file}' is protected." => "Файл «{file}» защищён.", + "(No suggestions)" => "(Нет вариантов)", + "(unnamed)" => "(без имени)", + "+ Add Level" => "+ Добавить уровень", + "100% Stacked Bar" => "Нормированная линейчатая", + "100% Stacked Column" => "Нормированная гистограмма", + "A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft." => { + "Электронные таблицы с открытым исходным кодом, написанные с нуля на Rust. Часть ArtCraft." + } + "A to Z" => "От А до Я", + "About" => "О программе", + "Accessibility" => "Доступность", + "Action" => "Действие", + "Action Journal" => "Журнал действий", + "Add" => "Добавить", + "Add Chart Element" => "Добавить элемент диаграммы", + "Add subtotal to (columns, e.g. C,D):" => "Добавить итоги по (столбцы, например C,D):", + "Add to Dictionary" => "Добавить в словарь", + "Add-in and Automation" => "Надстройки и автоматизация", + "Agent Control" => "Управление агентами", + "Aggregate duplicates using" => "Объединять повторы с помощью", + "Align Left" => "Выровнять по левому краю", + "Align Right" => "Выровнять по правому краю", + "Alignment" => "Выравнивание", + "All" => "Все", + "All Charts" => "Все диаграммы", + "All done. We made {count} replacements." => "Готово. Выполнено замен: {count}.", + "All except borders" => "Всё, кроме границ", + "Allow" => "Разрешить", + "Allow all users of this sheet to:" => "Разрешить всем пользователям этого листа:", + "Alpha:" => "Альфа:", + "Analysis Tools" => "Инструменты анализа", + "Anova: Single Factor" => "Дисперсионный анализ: один фактор", + "Any value" => "Любое значение", + "Area" => "С областями", + "At each change in (column letter):" => "При каждом изменении в (буква столбца):", + "Automation in this workbook. GridCraft runs its own scripts; a file's VBA project is preserved but not executed." => { + "Автоматизация в этой книге. GridCraft выполняет собственные сценарии; проект VBA из файла сохраняется, но не выполняется." + } + "Average" => "Среднее", + "Background Color:" => "Цвет фона:", + "Before sheet (position, 0 = first):" => "Перед листом (позиция, 0 = первый):", + "Bin Range (blank for automatic bins):" => "Диапазон интервалов (пусто — автоматически):", + "Blanks" => "Пустые ячейки", + "(Blanks)" => "(Пустые)", + "Border" => "Граница", + "Bottom" => "Нижняя", + "Bottom Align" => "Выровнять по нижнему краю", + "Bottom margin (in):" => "Нижнее поле (дюймы):", + "By Changing Variable Cells:" => "Изменять ячейки переменных:", + "By changing cell:" => "Изменять ячейку:", + "Calculate Now (F9)" => "Пересчитать сейчас (F9)", + "Calculate Sheet (⇧F9)" => "Пересчитать лист (⇧F9)", + "Calculation Options" => "Параметры вычислений", + "Cancel" => "Отмена", + "Category:" => "Категория:", + "Cell Color" => "Цвет ячейки", + "Cell Styles" => "Стили ячеек", + "Cell Values" => "Значения ячеек", + "Center Across Selection" => "По центру выделения", + "Change" => "Заменить", + "Change All" => "Заменить все", + "Change Chart Type" => "Изменить тип диаграммы", + "Chart" => "Диаграмма", + "Chart Title" => "Название диаграммы", + "Chart data range:" => "Диапазон данных для диаграммы:", + "Check Accessibility" => "Проверить доступность", + "Choose a PNG or JPEG no larger than 16 MB." => "Выберите файл PNG или JPEG размером не более 16 МБ.", + "Clear Filter" => "Очистить фильтр", + "Clustered Bar" => "Линейчатая с группировкой", + "Clustered Column" => "Гистограмма с группировкой", + "Color:" => "Цвет:", + "Column Width" => "Ширина столбца", + "Column chart" => "Гистограмма", + "Column or Bar" => "Гистограмма или линейчатая", + "Column width (characters):" => "Ширина столбца (символы):", + "Column widths" => "Ширины столбцов", + "Columns" => "Столбцы", + "Columns (blank = all, e.g. A,C):" => "Столбцы (пусто = все, например A,C):", + "Combo" => "Комбинированная", + "Comma" => "Запятая", + "Comment:" => "Комментарий:", + "Comments and notes (C)" => "Комментарии и заметки (C)", + "Comments pane" => "Область комментариев", + "Compatibility" => "Совместимость", + "Conditional Formatting Rules Manager" => "Диспетчер правил условного форматирования", + "Conditional formats" => "Условные форматы", + "Confidence Level (%):" => "Уровень доверия (%):", + "Confidence Level for Mean (%), blank for none:" => "Уровень доверия для среднего (%), пусто — нет:", + "Confidence interval" => "Доверительный интервал", + "Confidence level (%):" => "Уровень доверия (%):", + "Constant is Zero" => "Константа равна нулю", + "Contributors" => "Участники", + "Convert Text to Columns" => "Преобразовать текст в столбцы", + "Convert the last ink stroke to a shape" => "Преобразовать последний рукописный штрих в фигуру", + "Convert to Range" => "Преобразовать в диапазон", + "Correlation" => "Корреляция", + "Count" => "Количество", + "CountA" => "Количество значений", + "Covariance" => "Ковариация", + "Create Forecast Worksheet" => "Создать лист прогноза", + "Create Sparklines" => "Создать спарклайны", + "Create a copy" => "Создать копию", + "Cube" => "Куб", + "Cumulative Percentage" => "Накопленный процент", + "Current region" => "Текущая область", + "Custom (%):" => "Свой (%):", + "Custom Sort" => "Настраиваемая сортировка", + "Damping factor:" => "Коэффициент затухания:", + "Data Range:" => "Диапазон данных:", + "Data validation" => "Проверка данных", + "Database" => "Базы данных", + "Date & Time" => "Дата и время", + "Date unit" => "Единица даты", + "Day" => "День", + "Decimal" => "Десятичное число", + "Define Name…" => "Задать имя…", + "Delete Comment" => "Удалить комментарий", + "Delete Sheet" => "Удалить лист", + "Delete chart" => "Удалить диаграмму", + "Delete rows" => "Удалять строки", + "Delete…" => "Удалить…", + "Description (optional):" => "Описание (необязательно):", + "Descriptive Statistics" => "Описательная статистика", + "Destination:" => "Место назначения:", + "Diagonal ↗" => "Диагональ ↗", + "Diagonal ↘" => "Диагональ ↘", + "Dismiss" => "Закрыть", + "Display:" => "Отображать:", + "Distributed" => "Распределённый", + "Divide" => "Разделить", + "Do you want to save the changes you made to {title}?" => "Сохранить изменения в «{title}»?", + "Don't Save" => "Не сохранять", + "Double" => "Двойное", + "Double Accounting" => "Двойное бухгалтерское", + "Doughnut" => "Кольцевая", + "Down" => "Вниз", + "Edit Name" => "Изменить имя", + "Edit chart title" => "Изменить название диаграммы", + "Edit…" => "Изменить…", + "Engineering" => "Инженерные", + "Entire column" => "Весь столбец", + "Entire row" => "Вся строка", + "Erase ink strokes" => "Стереть рукописные штрихи", + "Error message:" => "Сообщение об ошибке:", + "Error style" => "Тип сообщения", + "Errors" => "Ошибки", + "Every command run in this session (replayable)" => "Все команды, выполненные в этом сеансе (можно повторить)", + "Expand formula bar" => "Развернуть строку формул", + "Exponential Smoothing" => "Экспоненциальное сглаживание", + "F-Test Two-Sample for Variances" => "F-тест для дисперсий двух выборок", + "Fill missing points using" => "Заполнить отсутствующие точки с помощью", + "Filter (⌘⇧F)" => "Фильтр (⌘⇧F)", + "Filter by Selected Cell's Value" => "Фильтр по значению выделенной ячейки", + "Find" => "Найти", + "Find & Select" => "Найти и выделить", + "Find All" => "Найти все", + "Find Next" => "Найти следующее", + "Find and Replace" => "Найти и заменить", + "Find what:" => "Что искать:", + "Fits inside the selected cell and moves with its content." => "Помещается в выделенную ячейку и перемещается вместе с её содержимым.", + "Flash Fill (⌘E)" => "Мгновенное заполнение (⌘E)", + "Font" => "Шрифт", + "Footer (in):" => "Нижний колонтитул (дюймы):", + "Footer:" => "Нижний колонтитул:", + "Forecast Sheet" => "Лист прогноза", + "Forecast end (date or number; blank: a third of the history):" => "Завершение прогноза (дата или число; пусто — треть истории):", + "Format Cells" => "Формат ячеек", + "Format Cells|Fill" => "Заливка", + "Format Chart pane" => "Область «Формат диаграммы»", + "Format as Table" => "Форматировать как таблицу", + "Format cells" => "Форматировать ячейки", + "Format cells that are (value):" => "Форматировать ячейки, которые (значение):", + "Format cells that contain a date occurring:" => "Форматировать ячейки, содержащие дату:", + "Format cells that contain the text:" => "Форматировать ячейки, содержащие текст:", + "Format columns" => "Форматировать столбцы", + "Format rows" => "Форматировать строки", + "Format values where this formula is true:" => "Форматировать значения, для которых эта формула истинна:", + "Formats (T)" => "Форматы (T)", + "Formula Builder" => "Построитель формул", + "Formula:" => "Формула:", + "Formulas (F)" => "Формулы (F)", + "Formulas and number formats" => "Формулы и форматы чисел", + "Funnel" => "Воронка", + "GRG Nonlinear" => "Нелинейный метод ОПГ", + "GRG Nonlinear: a local optimum of a smooth model, from the current values." => { + "Нелинейный метод ОПГ: локальный оптимум гладкой модели, начиная с текущих значений." + } + "Go To" => "Перейти", + "Go To Special" => "Переход к особым ячейкам", + "Goal Seek" => "Подбор параметра", + "Goal Seeking found a solution: {value}" => "Подбор параметра нашёл решение: {value}", + "Gradebook" => "Журнал оценок", + "Green Fill with Dark Green Text" => "Зелёная заливка и тёмно-зелёный текст", + "GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:" => { + "GridCraft полностью управляется агентами. Каждый пункт меню, кнопка и жест — это команда:" + } + "Grouped By:" => "Группировать по:", + "Growth" => "Рост", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "Верхний колонтитул (&L слева, &C по центру, &R справа; &P страница, &N страниц, &D дата, &A лист):" + } + "Header (in):" => "Верхний колонтитул (дюймы):", + "Hidden" => "Скрытая", + "Hidden: {sheets}" => "Скрытые: {sheets}", + "Hide" => "Скрыть", + "Hide Sheet" => "Скрыть лист", + "Hierarchy & more" => "Иерархия и другие", + "Highlighter" => "Маркер", + "Histogram" => "Гистограмма распределения", + "Horizontal (Category) Axis Labels:" => "Подписи горизонтальной оси (категории):", + "Horizontal axis title:" => "Название горизонтальной оси:", + "Household Budget" => "Семейный бюджет", + "How agents drive GridCraft (MCP / control channel)" => "Как агенты управляют GridCraft (MCP / канал управления)", + "Hypothesized Mean Difference:" => "Предполагаемая разность средних:", + "Ignore Once" => "Пропустить один раз", + "Ignore blank" => "Игнорировать пустые ячейки", + "Import a text or CSV file" => "Импорт текстового файла или CSV", + "In the last 7 days" => "За последние 7 дней", + "In-cell dropdown" => "Раскрывающийся список в ячейке", + "Include forecast statistics" => "Включить статистику прогноза", + "Indent" => "Отступ", + "Information" => "Сведения", + "Input Range:" => "Входной диапазон:", + "Input X Range:" => "Входной диапазон X:", + "Input Y Range:" => "Входной диапазон Y:", + "Input message:" => "Сообщение для ввода:", + "Insert Calculated Field" => "Вставить вычисляемое поле", + "Insert Chart" => "Вставить диаграмму", + "Insert Function" => "Вставить функцию", + "Insert Function (⇧F3)" => "Вставить функцию (⇧F3)", + "Insert Hyperlink" => "Вставить гиперссылку", + "Insert Link (⌘K)" => "Вставить ссылку (⌘K)", "Insert Sheet" => "Вставить лист", + "Insert Slicer" => "Вставить срез", + "Insert a picture" => "Вставить рисунок", + "Insert a slicer to filter a table" => "Вставить срез для фильтрации таблицы", + "Insert an icon" => "Вставить значок", + "Insert rows" => "Вставлять строки", + "Insert…" => "Вставить…", + "Interpolation" => "Интерполяция", + "Interval:" => "Интервал:", + "Join the ArtCraft Discord" => "Присоединиться к Discord ArtCraft", + "Justify" => "По ширине", + "Keep" => "Оставить", + "Keep Solver Solution" => "Оставить найденное решение", + "Kth Largest (blank for none):" => "K-й наибольший (пусто — нет):", + "Kth Smallest (blank for none):" => "K-й наименьший (пусто — нет):", + "Labels in first row" => "Метки в первой строке", + "Last cell" => "Последняя ячейка", + "Last month" => "В прошлом месяце", + "Last week" => "На прошлой неделе", + "Left margin (in):" => "Левое поле (дюймы):", + "Legend Entries (Series)" => "Элементы легенды (ряды)", + "Light Red Fill" => "Светло-красная заливка", + "Light Red Fill with Dark Red Text" => "Светло-красная заливка и тёмно-красный текст", + "Line" => "График", + "Line chart" => "График", + "Line or Area" => "График или диаграмма с областями", + "Line with Markers" => "График с маркерами", + "Linear" => "Линейная", + "Link to (web address, e-mail or Sheet!A1):" => "Ссылка на (веб-адрес, электронная почта или Лист!A1):", + "Link…" => "Ссылка…", + "List" => "Список", + "Location Range:" => "Диапазон расположения:", + "Locked" => "Заблокированная", + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet)." => { + "Защита ячеек и скрытие формул действуют только после защиты листа (Рецензирование › Защитить лист)." + } + "Lookup & Reference" => "Поиск и ссылки", + "Macros and scripts in this workbook (Alt+F8)" => "Макросы и сценарии этой книги (Alt+F8)", + "Make Unconstrained Variables Non-Negative" => "Сделать переменные без ограничений неотрицательными", + "Markers" => "Маркеры", + "Match case" => "Учитывать регистр", + "Match entire cell contents" => "Совпадение со всем содержимым ячейки", + "Max" => "Максимум", + "Maximum:" => "Максимум:", + "Median" => "Медиана", + "Middle Align" => "Выровнять по середине", + "Min" => "Минимум", + "Minimum / Source / Formula:" => "Минимум / источник / формула:", + "Models" => "Модели", + "Modify" => "Изменить", + "Month" => "Месяц", + "More commands" => "Другие команды", + "Move or Copy" => "Переместить или скопировать", + "Move or Copy Sheet…" => "Переместить или скопировать лист…", + "Moving Average" => "Скользящее среднее", + "Multiply" => "Умножить", + "My data has headers" => "Мои данные содержат заголовки", + "My list has headers" => "Мои данные содержат заголовки", + "Name" => "Имя", + "Name Manager" => "Диспетчер имён", + "Name:" => "Имя:", + "New Comment" => "Новый комментарий", + "New Name" => "Новое имя", + "New Worksheet Ply:" => "Новый лист:", + "New title (Modify):" => "Новое название (изменить):", + "New…" => "Создать…", + "Next month" => "В следующем месяце", + "Next sheet" => "Следующий лист", + "Next week" => "На следующей неделе", + "No names defined" => "Имена не определены", + "No picture selected" => "Рисунок не выбран", + "No ranges yet." => "Диапазонов пока нет.", + "None" => "Нет", + "Normal Probability" => "Нормальная вероятность", + "Not in Dictionary ({cell}):" => "Нет в словаре ({cell}):", + "Note:" => "Заметка:", + "Numbers" => "Числа", + "OK" => "ОК", + "Open…" => "Открыть…", + "Operation" => "Операция", + "Orientation (degrees)" => "Ориентация (градусы)", + "Other:" => "Другой:", + "Outline" => "Контур", + "Output Range:" => "Выходной диапазон:", + "Output options" => "Параметры вывода", + "Page Breaks" => "Разрывы страниц", + "Page Setup" => "Параметры страницы", + "Paper Size" => "Размер бумаги", + "Pareto (sorted histogram)" => "Парето (отсортированная гистограмма)", + "Password" => "Пароль", + "Password (optional):" => "Пароль (необязательно):", + "Password:" => "Пароль:", + "Paste (⌘V)" => "Вставить (⌘V)", + "Paste Special" => "Специальная вставка", + "Pick From Drop-down List…" => "Выбрать из раскрывающегося списка…", + "Pick From List" => "Выбрать из списка", + "Picture file path (PNG or JPEG):" => "Путь к файлу рисунка (PNG или JPEG):", + "Pie" => "Круговая", + "Pie or Doughnut" => "Круговая или кольцевая", + "Place Picture in Cell" => "Поместить рисунок в ячейку", + "Place Picture over Cells" => "Поместить рисунок поверх ячеек", + "Previous sheet" => "Предыдущий лист", + "Print Area" => "Область печати", + "Print Titles" => "Печатать заголовки", + "Product" => "Произведение", + "Protect Sheet" => "Защитить лист", + "Protect Structure and Windows" => "Защитить структуру и окна", + "Protect Workbook structure" => "Защитить структуру книги", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Защитить книгу: структуру (листы нельзя добавлять, перемещать, переименовывать, скрывать и удалять)." + } + "Protection" => "Защита", + "Quarterly Sales Dashboard" => "Сводка продаж по кварталам", + "Radar" => "Лепестковая", + "Range password:" => "Пароль диапазона:", + "Ranges that stay editable when the sheet is protected:" => "Диапазоны, которые можно изменять на защищённом листе:", + "Rank and Percentile" => "Ранг и персентиль", + "Recommended Charts" => "Рекомендуемые диаграммы", + "Red Border" => "Красная граница", + "Red Text" => "Красный текст", + "Redo (⌘Y)" => "Повторить (⌘Y)", + "Reference:" => "Ссылка:", + "Refers To" => "Ссылается на", + "Refers to cells:" => "Ссылается на ячейки:", + "Refers to:" => "Ссылается на:", + "Regression" => "Регрессия", + "Remove" => "Удалить", + "Remove Duplicates" => "Удалить дубликаты", + "Remove the password (Modify)" => "Снять пароль (изменить)", + "Rename Sheet" => "Переименовать лист", + "Replace" => "Заменить", + "Replace All" => "Заменить все", + "Replace with:" => "Заменить на:", + "Residuals" => "Остатки", + "Restore Original Values" => "Восстановить исходные значения", + "Return to the original worksheet to insert this picture, or cancel and choose another cell." => { + "Вернитесь на исходный лист, чтобы вставить рисунок, или отмените и выберите другую ячейку." + } + "Right margin (in):" => "Правое поле (дюймы):", + "Row Height" => "Высота строки", + "Row height (pixels):" => "Высота строки (пиксели):", + "Rows" => "Строки", + "Sample" => "Выборка", + "Save (⌘S)" => "Сохранить (⌘S)", + "Save Changes?" => "Сохранить изменения?", + "Save a Copy" => "Сохранить копию", + "Save a copy as .{format}" => "Сохранить копию как .{format}", + "Scatter" => "Точечная", + "Scatter or Bubble" => "Точечная или пузырьковая", + "Scatter with Lines" => "Точечная с прямыми отрезками", + "Scope" => "Область", + "Scope (Workbook or sheet name):" => "Область (книга или имя листа):", + "ScreenTip:" => "Подсказка:", + "Search Commands" => "Поиск команд", + "Search and run any command" => "Найти и выполнить любую команду", + "Search commands (⌘⇧Space)" => "Поиск команд (⌘⇧Пробел)", + "Search:" => "Поиск:", + "Seasonality (auto, 0 for none, or a season length):" => "Сезонность (авто, 0 — нет, или длина сезона):", + "Select" => "Выделить", + "Select Data" => "Выбрать данные", + "Select Data Source" => "Выбрать источник данных", + "Select a Solving Method:" => "Выберите метод решения:", + "Select a chart first." => "Сначала выделите диаграмму.", + "Select and move ink and shapes" => "Выделять и перемещать рукописные штрихи и фигуры", + "Semicolon" => "Точка с запятой", + "Series" => "Ряд", + "Series in" => "Ряды в", + "Series{n}" => "Ряд{n}", + "Series…" => "Ряд…", + "Set Objective:" => "Задать цель:", + "Set cell:" => "Ячейка:", + "Share: export or save a copy" => "Поделиться: экспорт или сохранение копии", + "Sheets: {sheets}" => "Листы: {sheets}", + "Shift cells down" => "Сдвинуть ячейки вниз", + "Shift cells left" => "Сдвинуть ячейки влево", + "Shift cells right" => "Сдвинуть ячейки вправо", + "Shift cells up" => "Сдвинуть ячейки вверх", + "Show Formulas (⌃`)" => "Показать формулы (⌃`)", + "Show password" => "Показать пароль", + "Shrink to fit" => "Сжать по размеру", + "Simplex LP: for linear models; integer and binary constraints by branch and bound." => { + "Симплекс-метод: для линейных моделей; целочисленные и двоичные ограничения — методом ветвей и границ." + } + "Single" => "Одинарное", + "Single Accounting" => "Одинарное бухгалтерское", + "Skip blanks" => "Пропускать пустые ячейки", + "Slicer" => "Срез", + "Solve" => "Решить", + "Solver Parameters" => "Параметры поиска решения", + "Solver Results" => "Результаты поиска решения", + "Sort & Filter" => "Сортировка и фильтр", + "Sort by" => "Сортировать по", + "Space" => "Пробел", + "Special…" => "Выделить…", + "Spelling (F7)" => "Орфография (F7)", + "Stacked Area" => "С областями с накоплением", + "Stacked Bar" => "Линейчатая с накоплением", + "Stacked Column" => "Гистограмма с накоплением", + "Stacked Line" => "График с накоплением", + "Standard Errors" => "Стандартные ошибки", + "Standard Width" => "Стандартная ширина", + "Standard column width (pixels):" => "Стандартная ширина столбца (пиксели):", + "Standardized Residuals" => "Стандартизированные остатки", + "Start a conversation:" => "Начать разговор:", + "Start a new workbook" => "Создать новую книгу", + "Statistic" => "Статистика", + "Statistical" => "Статистические", + "Step value:" => "Шаг:", + "Stop value:" => "Конечное значение:", + "Subject to the Constraints:" => "С учётом ограничений:", + "Subscript" => "Подстрочный", + "Subtract" => "Вычесть", + "Suggestions:" => "Варианты:", + "Sum" => "Сумма", + "Summary statistics" => "Итоговая статистика", + "Superscript" => "Надстрочный", + "Switch Row/Column" => "Поменять строки и столбцы", + "Tab" => "Табуляция", + "Table (⌘T)" => "Таблица (⌘T)", + "Table Styles" => "Стили таблиц", + "Text length" => "Длина текста", + "Text to Columns" => "Текст по столбцам", + "The output range already holds data. Replace it with the report?" => "Выходной диапазон уже содержит данные. Заменить их отчётом?", + "The spelling check is complete for the entire sheet." => "Проверка орфографии на всём листе завершена.", + "Then by" => "Затем по", + "There are no conditional formatting rules on this sheet." => "На этом листе нет правил условного форматирования.", + "This month" => "В текущем месяце", + "This week" => "На текущей неделе", + "This workbook" => "Эта книга", + "This workbook has no scripts or macros." => "В этой книге нет сценариев и макросов.", + "Timeline range (blank: first column of the selection):" => "Диапазон временной шкалы (пусто — первый столбец выделения):", + "Title:" => "Заголовок:", + "To value:" => "Значение:", + "To:" => "До:", + "Today" => "Сегодня", + "Tomorrow" => "Завтра", + "Top" => "Верхняя", + "Top Align" => "Выровнять по верхнему краю", + "Top margin (in):" => "Верхнее поле (дюймы):", + "Transpose (E)" => "Транспонировать (E)", + "Treat consecutive delimiters as one" => "Считать последовательные разделители одним", + "Type" => "Тип", + "Type (custom format code):" => "Тип (код пользовательского формата):", + "Type a command, e.g. freeze, chart, bold…" => "Введите команду, например закрепить, диаграмма, полужирный…", + "Undo (⌘Z)" => "Отменить (⌘Z)", + "Undo list" => "Список отмены", + "Unhide" => "Показать", + "Unhide Sheet…" => "Показать лист…", + "Unhide sheet:" => "Показать лист:", + "Unlock with password" => "Разблокировать паролем", + "Unprotect Sheet" => "Снять защиту листа", + "Unprotect Workbook" => "Снять защиту книги", + "Up" => "Вверх", + "Use AutoFilter" => "Использовать автофильтр", + "Use function" => "Функция", + "Validation" => "Проверка данных", + "Value" => "Значение", + "Value Of:" => "Значение:", + "Values (V)" => "Значения (V)", + "Values and number formats" => "Значения и форматы чисел", + "Values range (blank: second column of the selection):" => "Диапазон значений (пусто — второй столбец выделения):", + "Variable 1 Range:" => "Диапазон переменной 1:", + "Variable 2 Range:" => "Диапазон переменной 2:", + "Version {version}" => "Версия {version}", + "Vertical" => "По вертикали", + "Vertical axis title:" => "Название вертикальной оси:", + "Visible cells only" => "Только видимые ячейки", + "Warning" => "Предупреждение", + "Waterfall" => "Каскадная", + "Web" => "Веб", + "Weekday" => "Рабочий день", + "What-If Analysis" => "Анализ «что если»", + "Whole number" => "Целое число", + "Within workbook" => "В книге", + "Workbook" => "Книга", + "Workbook Statistics" => "Статистика книги", + "Wrap text" => "Переносить текст", + "Year" => "Год", + "Yellow Fill with Dark Yellow Text" => "Жёлтая заливка и тёмно-жёлтый текст", + "Z to A" => "От Я до А", + "Zeros" => "Нули", + "Zoom In" => "Увеличить", + "Zoom Out" => "Уменьшить", + "Zoom to 100%" => "Масштаб 100%", + "Zoom to Selection" => "Масштаб по выделенному", + "Zoom…" => "Масштаб…", + "and:" => "и:", + "applies to" => "применяется к", + "between" => "между", + "dashed" => "штриховая", + "dotted" => "точечная", + "double" => "двойная", + "e.g. lookup, average, date" => "например: поиск, среднее, дата", + "equal to" => "равно", + "greater than" => "больше", + "greater than or equal to" => "больше или равно", + "less than" => "меньше", + "less than or equal to" => "меньше или равно", + "medium" => "средняя", + "none" => "нет", + "not between" => "не между", + "not equal to" => "не равно", + "t-Test: Paired Two Sample for Means" => "t-тест: парные выборки для средних", + "t-Test: Two-Sample Assuming Equal Variances" => "t-тест: две выборки с равными дисперсиями", + "t-Test: Two-Sample Assuming Unequal Variances" => "t-тест: две выборки с неравными дисперсиями", + "thick" => "толстая", + "thin" => "тонкая", + "this workbook" => "эта книга", + "with" => "с", + "{count} cell(s) found" => "Найдено ячеек: {count}", + "{count} engine commands are available. See docs/mcp.md and docs/control-protocol.md." => { + "Доступно команд движка: {count}. См. docs/mcp.md и docs/control-protocol.md." + } + "£ English (United Kingdom)" => "£ английский (Великобритания)", + "¥ Japanese" => "¥ японский", + "— 1 step" => "— 1 шаг", + "— VBA project (preserved, not run)" => "— проект VBA (сохраняется, не выполняется)", + "— {steps} steps" => "— шагов: {steps}", + "€ Euro" => "€ евро", + "Tab|Insert" => "Вставка", + "AutoSave" => "Автосохранение", + "AutoSave: save after every change (workbooks saved to a file)" => { + "Автосохранение: сохранять после каждого изменения (для книг, сохранённых в файл)" + } + // PivotTable field list. + "PivotTable Fields" => "Поля сводной таблицы", + "Choose fields to add to report:" => "Выберите поля для отчёта:", + "Use a field's menu to move it between areas:" => "Чтобы переместить поле в другую область, откройте его меню:", + "Filters" => "Фильтры", + "Values" => "Значения", + "Move to Row Labels" => "Переместить в названия строк", + "Move to Column Labels" => "Переместить в названия столбцов", + "Move to Report Filter" => "Переместить в фильтр отчёта", + "Move to Values" => "Переместить в значения", + "Summarize by Sum" => "Итоги по сумме", + "Summarize by Count" => "Итоги по количеству", + "Summarize by Average" => "Итоги по среднему", + "Summarize by Max" => "Итоги по максимуму", + "Summarize by Min" => "Итоги по минимуму", + "Show as No Calculation" => "Показать без вычислений", + "Show as % of Grand Total" => "Показать как % от общего итога", + "Show as Running Total" => "Показать как нарастающий итог", + "Show as Rank" => "Показать как ранг", + "Group by Years" => "Группировать по годам", + "Group by Quarters" => "Группировать по кварталам", + "Group by Months" => "Группировать по месяцам", + "Remove Field" => "Удалить поле", + "Refresh" => "Обновить", + "Calculated Field…" => "Вычисляемое поле…", + "Report Layout" => "Макет отчёта", + "Compact" => "Сжатый", + "Tabular" => "Табличный", "Rename" => "Переименовать", "Move or Copy…" => "Переместить или скопировать…", "Duplicate" => "Дублировать", "Tab Color" => "Цвет вкладки", "No Color" => "Без цвета", - "Hide" => "Скрыть", "Unhide…" => "Показать…", "Select All Sheets" => "Выделить все листы", - "AutoSave" => "Автосохранение", - "AutoSave: save after every change (workbooks saved to a file)" => { - "Автосохранение: сохранять после каждого изменения (книги, сохранённые в файл)" - } - "Previous sheet" => "Предыдущий лист", - "Next sheet" => "Следующий лист", "All sheets" => "Все листы", "New sheet (⇧F11)" => "Новый лист (⇧F11)", "Text Box" => "Надпись", @@ -489,6 +1142,405 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "Остановить", "New Macro" => "Новый макрос", "Show" => "Показать", + "Name Box" => "Поле имени", + "Cell Editor" => "Редактор ячейки", + "Font Size" => "Размер шрифта", + "Print What" => "Что печатать", + // Page Layout view and the Header & Footer tab. + "Maximum Iterations:" => "Предельное число итераций:", + "Maximum Change:" => "Максимальное изменение:", + "Maximum Iterations must be a whole number from 1 to 32767." => "Предельное число итераций должно быть целым числом от 1 до 32767.", + "Maximum Change must be a number of 0 or more." => "Максимальное изменение должно быть числом не меньше 0.", + "100% Stacked Area" => "Областная с накоплением 100%", + "20% - Accent1" => "20% — Акцент 1", + "20% - Accent2" => "20% — Акцент 2", + "20% - Accent3" => "20% — Акцент 3", + "20% - Accent4" => "20% — Акцент 4", + "20% - Accent5" => "20% — Акцент 5", + "20% - Accent6" => "20% — Акцент 6", + "3 Arrows" => "3 стрелки", + "3 Symbols" => "3 символа", + "3 Traffic Lights" => "3 светофора", + "4 Ratings" => "4 оценки", + "40% - Accent1" => "40% — Акцент 1", + "40% - Accent2" => "40% — Акцент 2", + "40% - Accent3" => "40% — Акцент 3", + "40% - Accent4" => "40% — Акцент 4", + "40% - Accent5" => "40% — Акцент 5", + "40% - Accent6" => "40% — Акцент 6", + "5 Arrows" => "5 стрелок", + "5 Quarters" => "5 четвертей", + "60% - Accent1" => "60% — Акцент 1", + "60% - Accent2" => "60% — Акцент 2", + "60% - Accent3" => "60% — Акцент 3", + "60% - Accent4" => "60% — Акцент 4", + "60% - Accent5" => "60% — Акцент 5", + "60% - Accent6" => "60% — Акцент 6", + "A Date Occurring…" => "Дата…", + "Accent1" => "Акцент 1", + "Accent2" => "Акцент 2", + "Accent3" => "Акцент 3", + "Accent4" => "Акцент 4", + "Accent5" => "Акцент 5", + "Accent6" => "Акцент 6", + "All Borders" => "Все границы", + "Apply" => "Применить", + "Arrow" => "Стрелка", + "AutoSum (⌘⇧T)" => "Автосумма (⌘⇧T)", + "Bad" => "Плохо", + "Bar" => "Линейчатая", + "Between…" => "Между…", + "Blue" => "Синий", + "Blue - White - Red" => "Синий — белый — красный", + "Bold (⌘B)" => "Полужирный (⌘B)", + "Bottom Border" => "Нижняя граница", + "Bottom Double Border" => "Двойная нижняя граница", + "Box & Whisker" => "Ящик с усами", + "Bubble" => "Пузырьковая", + "Calculation" => "Вычисления", + "Check Cell" => "Проверить ячейку", + "Clear Rules" => "Удалить правила", + "Column" => "Гистограмма", + "Comma [0]" => "Разделитель разрядов [0]", + "Convert to Number" => "Преобразовать в число", + "Copies" => "Копии", + "Copy (⌘C)" => "Копировать (⌘C)", + "Currency [0]" => "Денежный [0]", + "Cut (⌘X)" => "Вырезать (⌘X)", + "Data and Model" => "Данные и модель", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "Перетащите для заполнения ячеек. Для выделения диапазона начните перетаскивание внутри ячейки." + } + "Duplicate Values…" => "Повторяющиеся значения…", + "End date:" => "Дата окончания:", + "Equal To…" => "Равно…", + "Error checking options" => "Параметры проверки ошибок", + "Explanatory Text" => "Пояснение", + "Export as CSV…" => "Экспортировать в CSV…", + "Export as PDF…" => "Экспортировать в PDF…", + "Export as Web Page (.html)…" => "Экспортировать как веб-страницу (.html)…", + "Finding printers…" => "Поиск принтеров…", + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Начало прогноза (дата или число из истории; пусто: после последней точки):" + } + "Format Chart Area…" => "Формат области диаграммы…", + "Good" => "Хорошо", + "Good, Bad and Neutral" => "Хорошо, плохо и нейтрально", + "Grayscale" => "Оттенки серого", + "Greater Than…" => "Больше…", + "Green" => "Зелёный", + "Green - White - Red" => "Зелёный — белый — красный", + "Green - Yellow - Red" => "Зелёный — жёлтый — красный", + "Heading 1" => "Заголовок 1", + "Heading 2" => "Заголовок 2", + "Heading 3" => "Заголовок 3", + "Heading 4" => "Заголовок 4", + "Hex" => "Шестнадцатеричный код", + "Highlight Cells Rules" => "Правила выделения ячеек", + "Input" => "Ввод", + "Insert Link" => "Вставить ссылку", + "Insert\nSlicer" => "Вставить\nсрез", + "Inside Borders" => "Внутренние границы", + "Italic (⌘I)" => "Курсив (⌘I)", + "Left Border" => "Левая граница", + "Less Than…" => "Меньше…", + "Light Blue" => "Голубой", + "Linked Cell" => "Связанная ячейка", + "Manage Rules…" => "Управление правилами…", + "More Borders…" => "Другие границы…", + "More Colors…" => "Другие цвета…", + "More Functions…" => "Другие функции…", + "Neutral" => "Нейтрально", + "New Rule…" => "Создать правило…", + "New Workbook" => "Новая книга", + "No Border" => "Нет границ", + "No Fill" => "Нет заливки", + "No printers found. Configure a system printer or export a PDF." => { + "Принтеры не найдены. Настройте системный принтер или экспортируйте в PDF." + } + "Note" => "Заметка", + "Number Format" => "Числовой формат", + "Number Stored as Text" => "Число сохранено как текст", + "One-sided" => "Односторонняя", + "Options|Editing" => "Редактирование", + "Orange" => "Оранжевый", + "Output" => "Результат", + "Outside Borders" => "Внешние границы", + "Oval" => "Овал", + "Page Break Preview" => "Страничный режим", + "Paste formulas that refer to the copied cells" => "Вставить формулы со ссылками на скопированные ячейки", + "Pen\nBlack" => "Чёрное\nперо", + "Pen\nBlue" => "Синее\nперо", + "Pen\nRed" => "Красное\nперо", + "Percent" => "Процентный", + "Place in Cell" => "Поместить в ячейку", + "Place over Cells" => "Поместить поверх ячеек", + "Print failed: the printing worker stopped." => "Не удалось напечатать: обработчик печати остановлен.", + "Print failed: {error}" => "Не удалось напечатать: {error}", + "Print job submitted." => "Задание отправлено на печать.", + "Print job submitted: {receipt}" => "Задание отправлено на печать: {receipt}", + "Printer" => "Принтер", + "Printer default" => "По умолчанию для принтера", + "Printer discovery failed." => "Не удалось найти принтеры.", + "Print…" => "Печать…", + "Protect\nSheet" => "Защитить\nлист", + "Purple" => "Фиолетовый", + "Recent Colors" => "Последние цвета", + "Rectangle" => "Прямоугольник", + "Red" => "Красный", + "Red - Yellow - Green" => "Красный — жёлтый — зелёный", + "Redo" => "Повторить", + "Refresh printers" => "Обновить список принтеров", + "Right Border" => "Правая граница", + "Rounded Rectangle" => "Прямоугольник со скруглёнными углами", + "Save As…" => "Сохранить как…", + "Save a Copy as Excel Workbook (.xlsx)…" => "Сохранить копию как книгу Excel (.xlsx)…", + "Search" => "Поиск", + "Search commands" => "Поиск команд", + "Select Data…" => "Выбрать данные…", + "Select a printer" => "Выберите принтер", + "Sort Ascending" => "Сортировать по возрастанию", + "Sort Descending" => "Сортировать по убыванию", + "Source:" => "Источник:", + "Standard Colors" => "Стандартные цвета", + "Stock" => "Биржевая", + "Submitting print job…" => "Отправка задания на печать…", + "Sunburst" => "Солнечные лучи", + "Text that Contains…" => "Текст содержит…", + "Theme Colors" => "Цвета темы", + "Themed Cell Styles" => "Стили ячеек темы", + "Thick Bottom Border" => "Толстая нижняя граница", + "Thick Outside Borders" => "Толстые внешние границы", + "Titles and Headings" => "Названия и заголовки", + "Top Border" => "Верхняя граница", + "Top and Bottom Border" => "Верхняя и нижняя границы", + "Top and Double Bottom Border" => "Верхняя и двойная нижняя границы", + "Top and Thick Bottom Border" => "Верхняя и толстая нижняя границы", + "Top/Bottom Rules" => "Правила отбора первых и последних значений", + "Total" => "Итог", + "Treemap" => "Древовидная", + "Triangle" => "Треугольник", + "Two-sided printing" => "Двусторонняя печать", + "Two-sided: long edge" => "Двусторонняя: по длинному краю", + "Two-sided: short edge" => "Двусторонняя: по короткому краю", + "Type to filter…" => "Введите текст для фильтрации…", + "Underline (⌘U)" => "Подчёркивание (⌘U)", + "Undo" => "Отменить", + "Warning Text" => "Предупреждение", + "Watch\nWindow" => "Контроль\nзначений", + "White - Green" => "Белый — зелёный", + "White - Red" => "Белый — красный", + "Win/Loss" => "Выигрыш/проигрыш", + "Workbook\nStatistics" => "Статистика\nкниги", + "no workbook open" => "Нет открытой книги", + "formula is nested too deeply" => "Слишком глубокая вложенность формулы", + "unknown error literal" => "Неизвестное обозначение ошибки", + "array rows must have the same length" => "Строки массива должны иметь одинаковую длину", + "too many arguments" => "Слишком много аргументов", + "invalid 3-D reference" => "Неверная трёхмерная ссылка", + "unexpected end of formula" => "Неожиданный конец формулы", + "unbalanced [" => "Незакрытая квадратная скобка [", + "expected ! after sheet name" => "После имени листа ожидался символ !", + "No cells found." => "Ячейки не найдены.", + "No chart selected." => "Диаграмма не выделена.", + "unknown command `{command}`" => "Неизвестная команда `{command}`", + "formula is longer than {limit} characters" => "Длина формулы превышает {limit} символов", + "bad number `{number}`" => "Неверное число `{number}`", + "number too large `{number}`" => "Слишком большое число `{number}`", + "unexpected character `{character}`" => "Недопустимый символ `{character}`", + "invalid cell reference `{cell}` for `{key}`" => "Неверная ссылка на ячейку `{cell}` в параметре `{key}`", + "expected `,` or `)`, found {token}" => "Ожидался разделитель аргументов или `)`, получено: {token}", + "expected a reference after the sheet name, found {token}" => "После имени листа ожидалась ссылка, получено: {token}", + "expected a number in array, found {token}" => "В массиве ожидалось число, получено: {token}", + "array constants may only contain constants, found {token}" => "В константе массива допустимы только постоянные значения, получено: {token}", + "expected {expected}, found {actual}" => "Ожидалось: {expected}, получено: {actual}", + "unexpected {token}" => "Неожиданный элемент: {token}", + "{function} has too few arguments. Use {signature}" => "В функции {function} недостаточно аргументов. Синтаксис: {signature}", + "{function} has too many arguments. Use {signature}" => "В функции {function} слишком много аргументов. Синтаксис: {signature}", + "no sheet named `{sheet}`" => "Лист `{sheet}` не найден", + "not a range: `{range}`" => "Неверный диапазон: `{range}`", + "missing `{parameter}`" => "Не указан параметр `{parameter}`", + "`{cell}` for `{key}` names a sheet other than the one this command works on" => { + "Ссылка `{cell}` в параметре `{key}` указывает на другой лист" + } + "There's a problem with this formula:" => "Ошибка в формуле:", + "There's a problem with this formula." => "Ошибка в формуле.", + "no such sheet" => "Такого листа нет", + "no such name to edit" => "Имя для изменения не найдено", + "missing `input` (or `value`)" => "Не указан параметр `input` (или `value`)", + "The name that you entered is not valid." => "Введено недопустимое имя.", + "The name entered already exists. Enter a unique name." => "Такое имя уже существует. Введите уникальное имя.", + "There's no room to the right of the selection for the total." => "Справа от выделенного диапазона нет места для итога.", + "There's no room below the selection for the totals." => "Под выделенным диапазоном нет места для итогов.", + "Count Numbers" => "Количество чисел", + "Nothing to paste." => "Нет данных для вставки.", + "No cells were found." => "Ячейки не найдены.", + "{family} table style {number}" => "Стиль таблицы: {family}, {number}", + "Medium" => "Средняя", + "Or select a category:" => "Или выберите категорию:", + "Most Recently Used" => "Последние использовавшиеся", + "Insert Function…" => "Вставить функцию…", + "Paste Names…" => "Вставить имена…", + "New Window" => "Новое окно", + "Arrange All" => "Упорядочить все", + "Switch Windows" => "Переключить окна", + "Check for\nUpdates…" => "Проверить\nобновления…", + "Check for Updates…" => "Проверить обновления…", + "The reference isn't valid. Select a cell in a range with labeled columns, or pass `source`." => { + "Недопустимая ссылка. Выделите ячейку в диапазоне данных с заголовками столбцов или укажите диапазон в параметре `source`." + } + "Select data for the chart first." => "Сначала выделите данные для диаграммы.", + "Select a cell inside a table first, or pass `table`." => "Выделите ячейку внутри таблицы или укажите таблицу в параметре `table`.", + "no ink stroke to convert" => "Нет рукописного штриха для преобразования", + "A table can't overlap another table." => "Таблица не может перекрывать другую таблицу.", + "The PivotTable field name is not valid. To create a PivotTable, you must use data that is organized as a list with labeled columns." => { + "Недопустимое имя поля сводной таблицы. Для создания сводной таблицы используйте список данных с заголовками столбцов." + } + "No dictionary is available on this system (GridCraft uses the system word list)." => { + "В системе нет доступного словаря (GridCraft использует системный словарь)." + } + "Macro name:" => "Имя макроса:", + "Shortcut key:" => "Сочетание клавиш:", + "Description:" => "Описание:", + "No macros in this workbook" => "В этой книге нет макросов", + "No comments on this sheet yet. Select a cell and choose New Comment." => { + "На этом листе пока нет комментариев. Выделите ячейку и выберите «Создать комментарий»." + } + "Select locked cells" => "Выделение заблокированных ячеек", + "Select unlocked cells" => "Выделение незаблокированных ячеек", + "Insert columns" => "Вставка столбцов", + "Delete columns" => "Удаление столбцов", + "Row" => "Строка", + "New\nWindow" => "Новое\nокно", + "Arrange\nAll" => "Упорядочить\nвсе", + "Switch\nWindows" => "Переключить\nокна", + "Look for a newer GridCraft release" => "Проверить наличие новой версии GridCraft", + "In Cell" => "В ячейке", + "Over Cells" => "Поверх ячеек", + "Book" => "Книга", + "Sheet" => "Лист", + "Run" => "Выполнить", + "Step Into" => "Пошагово", + "Create" => "Создать", + "Options…" => "Параметры…", + "Paste name" => "Вставить имя", + "Paste List" => "Вставить список", + "Resolved" => "Решено", + "Send" => "Отправить", + "Trust Scripts" => "Доверять скриптам", + "Write a new macro with this name" => "Создать макрос с этим именем", + "Open the macro in the step editor" => "Открыть макрос в редакторе шагов", + "Open the macro in the step editor and stop before its first step" => "Открыть макрос в редакторе шагов и остановиться перед первым шагом", + "Stop recording and save the macro" => "Остановить запись и сохранить макрос", + "Let this workbook's scripts run for the rest of this session" => "Разрешить выполнение скриптов этой книги до конца сеанса", + "This workbook also has a VBA project. GridCraft keeps it when you save but does not run it." => { + "В этой книге также есть проект VBA. GridCraft сохраняет его вместе с книгой, но не выполняет." + } + "Add Watch (active cell)" => "Добавить контроль выделенной ячейки", + "Select a chart to format it." => "Выделите диаграмму для форматирования.", + "The chart no longer exists." => "Диаграмма больше не существует.", + "There are no shapes, pictures or charts on this sheet." => "На этом листе нет фигур, изображений или диаграмм.", + "Available for column, bar, line, area and compatible combo charts." => { + "Доступно для гистограмм, линейчатых, графиков, диаграмм с областями и совместимых комбинированных диаграмм." + } + "Data Labels" => "Подписи данных", + "Fill…" => "Заливка…", + "Bring Forward" => "Переместить вперёд", + "Send Backward" => "Переместить назад", + "Macro name: {name}" => "Имя макроса: {name}", + "Slate" => "Сланец", + "Meadow" => "Луг", + "Ember" => "Угли", + "Ocean" => "Океан", + "Orchid" => "Орхидея", + "Graphite" => "Графит", + "Macro" => "Макрос", + "Select Locked Cells" => "Выделение заблокированных ячеек", + "Select Unlocked Cells" => "Выделение незаблокированных ячеек", + "Insert Columns" => "Вставка столбцов", + "Delete Columns" => "Удаление столбцов", + "Generated|Column" => "Столбец", + "Generated|Row" => "Строка", + "Checking for updates…" => "Проверка обновлений…", + "GridCraft {version} is the newest version available." => "Установлена последняя версия GridCraft — {version}.", + "Could not check for updates." => "Не удалось проверить обновления.", + "Check Again" => "Проверить ещё раз", + "column outside the filter range" => "Столбец находится вне диапазона фильтра.", + "Format Chart Area" => "Формат области диаграммы", + "Chart Type" => "Тип диаграммы", + "Elements" => "Элементы", + "Data Table" => "Таблица данных", + "Show Data Table" => "Показать таблицу данных", + "Show Legend Keys" => "Показать ключи легенды", + "Horizontal Borders" => "Горизонтальные границы", + "Vertical Borders" => "Вертикальные границы", + "Arrange Windows" => "Расположение окон", + "Arrange" => "Расположение", + "Tiled" => "Рядом", + "Cascade" => "Каскадом", + "Windows of active workbook" => "Только окна текущей книги", + "Undo {action}" => "Отменить: {action}", + "Can't Undo" => "Нечего отменять", + "Macro: {name}{dirty}" => "Макрос: {name}{dirty}", + "Add Step" => "Добавить шаг", + "Check" => "Проверить", + "Step" => "Шаг", + "Continue" => "Продолжить", + "Run to Here" => "Выполнить до сюда", + "Details" => "Параметры", + "Inputs" => "Входные данные", + "Select a step to see its settings." => "Выберите шаг, чтобы увидеть его параметры.", + "No steps yet. Add Step picks a command, or record one with Automate › Record Macro." => { + "Шагов пока нет. Нажмите «Добавить шаг» для выбора команды или запишите макрос на вкладке «Автоматизация»." + } + "Check shows on the grid what the macro reads and writes. Click a step's gutter to set a breakpoint." => { + "Проверка показывает на листе данные, которые макрос читает и изменяет. Щёлкните поле слева от шага, чтобы задать точку останова." + } + "Icon|check" => "Галочка", + "Icon|close" => "Крестик", + "Icon|plus" => "Плюс", + "Icon|minus" => "Минус", + "Icon|chart" => "Диаграмма", + "Icon|line chart" => "График", + "Icon|pie chart" => "Круговая диаграмма", + "Icon|scatter" => "Точечная диаграмма", + "Icon|table" => "Таблица", + "Icon|sum" => "Сумма", + "Icon|filter" => "Фильтр", + "Icon|lock" => "Замок", + "Icon|comment" => "Комментарий", + "Icon|note" => "Заметка", + "Icon|picture" => "Изображение", + "Icon|book" => "Книга", + "Icon|folder" => "Папка", + "Icon|search" => "Поиск", + "Icon|calculator" => "Калькулятор", + "Icon|link" => "Ссылка", + "Icon|pen" => "Перо", + "Icon|share" => "Поделиться", + "Icon|settings" => "Параметры", + "Icon|home" => "Главная", + "Icon|save" => "Сохранить", + "Icon|theme" => "Тема", + "Icon|shapes" => "Фигуры", + "Icon|text" => "Текст", + "Icon|trace" => "Связи", + "Icon|validation" => "Проверка данных", + "New Formatting Rule" => "Создание правила форматирования", + "Row height (points):" => "Высота строки (пункты):", + "Username" => "Имя пользователя", + "Display name" => "Отображаемое имя", + "Real name" => "Настоящее имя", + "First commit" => "Первый коммит", + "Grab bag" => "Список", + "Model" => "Модель", + "Commits" => "Коммиты", + "% of all commits" => "Доля всех коммитов", + "Lines +/−" => "Строки +/−", + "{contributors} contributors · {commits} commits" => "Участников: {contributors} · Коммитов: {commits}", + "Edited" => "Изменено", + "Scope:" => "Область:", + "Paste Name" => "Вставить имя", "Collapse dialog" => "Свернуть диалоговое окно", "Expand dialog" => "Развернуть диалоговое окно", _ => return None, diff --git a/crates/ui-egui/src/i18n/ru_formats.rs b/crates/ui-egui/src/i18n/ru_formats.rs new file mode 100644 index 0000000000..0089a3fd77 --- /dev/null +++ b/crates/ui-egui/src/i18n/ru_formats.rs @@ -0,0 +1,19 @@ +//! Russian custom-format spellings. Token names follow Microsoft's public format-code guide: +//! https://support.microsoft.com/ru-ru/excel/format-a-date-the-way-you-want-in-excel + +pub(super) const FORMAT: crate::format_locale::FormatLocale = crate::format_locale::FormatLocale { + tokens: &[('d', 'д'), ('m', 'м'), ('y', 'г'), ('h', 'ч'), ('s', 'с')], + colors: &[ + ("Black", "Черный"), + ("Blue", "Синий"), + ("Cyan", "Голубой"), + ("Green", "Зеленый"), + ("Magenta", "Пурпурный"), + ("Red", "Красный"), + ("White", "Белый"), + ("Yellow", "Желтый"), + ], + general: "Общий", + short_date: Some("dd.mm.yyyy"), + time: Some("hh:mm:ss"), +}; diff --git a/crates/ui-egui/src/i18n/ru_functions.rs b/crates/ui-egui/src/i18n/ru_functions.rs new file mode 100644 index 0000000000..62ec7c59b5 --- /dev/null +++ b/crates/ui-egui/src/i18n/ru_functions.rs @@ -0,0 +1,1070 @@ +//! Russian function help: original rows adapted from PR #1850, extended with original +//! translations of the current GridCraft catalog. Formula names and storage remain separate. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "Возвращает 1 для положительного числа, −1 для отрицательного и 0 для нуля."), + ("A random integer between two bounds, inclusive.", "Возвращает случайное целое число между двумя границами включительно."), + ("A random number between 0 and 1, recalculated every time.", "Возвращает случайное число от 0 до 1, обновляемое при каждом пересчёте."), + ("A range or array without its blank outer rows and columns.", "Возвращает диапазон или массив без пустых крайних строк и столбцов."), + ("A reference shifted from a starting point.", "Возвращает ссылку со смещением относительно исходной точки."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Возвращает статистику модели FORECAST.ETS: 1 — альфа, 2 — бета, 3 — гамма, 4 — MASE, 5 — SMAPE, 6 — MAE, 7 — RMSE, 8 — шаг.", + ), + ("A subtotal that can skip hidden rows.", "Вычисляет промежуточный итог с возможностью пропускать скрытые строки."), + ("Absolute value (modulus) of a complex number.", "Возвращает модуль комплексного числа."), + ("Absolute value of a number.", "Возвращает абсолютное значение числа."), + ( + "Accrued interest of a security paying interest at maturity.", + "Возвращает накопленный процентный доход по ценной бумаге с выплатой процентов при погашении.", + ), + ( + "Accrued interest of a security paying periodic interest.", + "Возвращает накопленный купонный доход по ценной бумаге с периодическими выплатами процентов.", + ), + ("Accumulates an array into one value.", "Свёртывает массив в одно значение с помощью накопления."), + ("Adds all the numbers in the arguments.", "Суммирует аргументы."), + ("Adds the cells that meet a condition.", "Суммирует ячейки, удовлетворяющие условию."), + ("Adds the cells that meet every condition.", "Суммирует ячейки, удовлетворяющие всем условиям."), + ("Adds the numbers in a field of the records that meet the criteria.", "Суммирует числа в поле записей, удовлетворяющих условиям."), + ("Adds the squares of the numbers.", "Суммирует квадраты чисел."), + ("Amount received at maturity for a fully invested security.", "Вычисляет сумму, получаемую при погашении полностью оплаченной ценной бумаги."), + ("An aggregate that can skip hidden rows and errors.", "Вычисляет агрегатную функцию с возможностью пропуска скрытых строк и ошибок."), + ("Angle of a complex number in radians.", "Возвращает аргумент комплексного числа в радианах."), + ("Angle of the point (x, y) from the x-axis in radians.", "Возвращает угол между осью X и направлением на точку (x, y) в радианах."), + ("Annual yield of a discounted security.", "Вычисляет годовую доходность дисконтной ценной бумаги."), + ("Annual yield of a security paying interest at maturity.", "Вычисляет годовую доходность ценной бумаги с выплатой процентов при погашении."), + ("Applies a LAMBDA to each column.", "Применяет функцию LAMBDA к каждому столбцу."), + ("Applies a LAMBDA to each row.", "Применяет функцию LAMBDA к каждой строке."), + ("Applies a LAMBDA to each value.", "Применяет функцию LAMBDA к каждому значению."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Выполняет приближённый поиск в отсортированном векторе или первой строке либо столбце массива.", + ), + ("Arccosine in radians.", "Возвращает арккосинус числа в радианах."), + ("Arccotangent in radians (0 to pi).", "Возвращает арккотангенс в радианах от 0 до π."), + ("Arcsine in radians.", "Возвращает арксинус числа в радианах."), + ("Arctangent in radians.", "Возвращает арктангенс числа в радианах."), + ("Arithmetic mean of the numbers.", "Возвращает среднее арифметическое аргументов."), + ("Average absolute deviation from the mean.", "Возвращает среднее абсолютное отклонение значений от среднего."), + ("Average of the cells that meet a condition.", "Вычисляет среднее значение ячеек, удовлетворяющих условию."), + ("Average of the cells that meet every condition.", "Вычисляет среднее значение ячеек, удовлетворяющих всем условиям."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Вычисляет среднее числовых значений поля для записей, удовлетворяющих условиям.", + ), + ("Base-10 logarithm of a complex number.", "Возвращает десятичный логарифм комплексного числа."), + ("Base-10 logarithm.", "Возвращает десятичный логарифм числа."), + ("Base-2 logarithm of a complex number.", "Возвращает двоичный логарифм комплексного числа."), + ("Bessel function of the first kind, J_n(x).", "Возвращает функцию Бесселя первого рода J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Возвращает функцию Бесселя второго рода Y_n(x)."), + ("Beta distribution density or probability.", "Возвращает плотность или вероятность бета-распределения."), + ("Binomial probability.", "Возвращает вероятность биномиального распределения."), + ("Bitwise AND of two non-negative integers.", "Выполняет побитовое И для двух неотрицательных целых чисел."), + ("Bitwise OR of two non-negative integers.", "Выполняет побитовое ИЛИ для двух неотрицательных целых чисел."), + ("Bitwise exclusive OR of two non-negative integers.", "Выполняет побитовое исключающее ИЛИ для двух неотрицательных целых чисел."), + ("Bond-equivalent yield of a Treasury bill.", "Вычисляет эквивалентную облигационную доходность казначейского векселя."), + ("Breaks a row or column into columns of the given length.", "Разбивает строку или столбец на столбцы заданной длины."), + ("Breaks a row or column into rows of the given length.", "Разбивает строку или столбец на строки заданной длины."), + ("Builds a cell address as text from row and column numbers.", "Создаёт текстовый адрес ячейки по номерам строки и столбца."), + ( + "Builds a complex number as text from real and imaginary parts.", + "Создаёт текстовую запись комплексного числа из действительной и мнимой частей.", + ), + ("Builds a date serial number from a year, month and day.", "Создаёт числовое представление даты по году, месяцу и дню."), + ( + "Builds a summary table grouping values by row and column fields.", + "Создаёт сводную таблицу с группировкой значений по полям строк и столбцов.", + ), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "Создаёт время в виде доли суток из часов, минут и секунд."), + ("Builds an array from a LAMBDA.", "Создаёт массив с помощью функции LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Создаёт массив чисел с постоянным шагом."), + ("Builds an array of random numbers in a range.", "Создаёт массив случайных чисел в заданных границах."), + ("Byte version of FIND.", "Возвращает позицию текста, считая байты, как версия FIND."), + ( + "Byte version of LEFT (same as LEFT for single-byte text).", + "Возвращает начало текста с подсчётом длины в байтах; для однобайтового текста работает как ЛЕВСИМВ.", + ), + ("Byte version of LEN (same as LEN for single-byte text).", "Возвращает длину текста в байтах; для однобайтового текста работает как ДЛСТР."), + ( + "Byte version of MID (same as MID for single-byte text).", + "Возвращает часть текста с подсчётом позиций в байтах; для однобайтового текста работает как ПСТР.", + ), + ("Byte version of REPLACE.", "Заменяет часть текста с подсчётом позиций в байтах."), + ( + "Byte version of RIGHT (same as RIGHT for single-byte text).", + "Возвращает конец текста с подсчётом длины в байтах; для однобайтового текста работает как ПРАВСИМВ.", + ), + ("Byte version of SEARCH.", "Выполняет поиск текста с подсчётом позиций в байтах."), + ("Capitalises the first letter of each word and lower-cases the rest.", "Делает первую букву каждого слова прописной, а остальные — строчными."), + ("Chi-squared density or left-tailed probability.", "Возвращает плотность или левостороннюю вероятность распределения хи-квадрат."), + ("Chi-squared test of independence.", "Выполняет проверку независимости по критерию хи-квадрат."), + ("Column number of a reference.", "Возвращает номер столбца ссылки."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Сравнивает выражение со списком значений и возвращает результат для первого совпадения.", + ), + ("Complementary error function, 1 - ERF(x).", "Возвращает дополнительную функцию ошибок: 1 − ERF(x)."), + ("Complex conjugate of a complex number.", "Возвращает комплексно-сопряжённое число."), + ( + "Confidence interval half-width using Student's t distribution.", + "Возвращает половину ширины доверительного интервала на основе распределения Стьюдента.", + ), + ( + "Confidence interval half-width using the normal distribution.", + "Возвращает половину ширины доверительного интервала на основе нормального распределения.", + ), + ("Converts Roman numerals to a number.", "Преобразует римское число в арабское."), + ("Converts a binary number to decimal.", "Преобразует двоичное число в десятичное."), + ("Converts a binary number to hexadecimal.", "Преобразует двоичное число в шестнадцатеричное."), + ("Converts a binary number to octal.", "Преобразует двоичное число в восьмеричное."), + ("Converts a date written as text into a date serial number.", "Преобразует текстовую дату в её числовое представление."), + ("Converts a decimal number to binary.", "Преобразует десятичное число в двоичное."), + ("Converts a decimal number to hexadecimal.", "Преобразует десятичное число в шестнадцатеричное."), + ("Converts a decimal number to octal.", "Преобразует десятичное число в восьмеричное."), + ("Converts a decimal price to fractional notation.", "Преобразует десятичную цену в дробную запись."), + ("Converts a fractional price notation to a decimal number.", "Преобразует дробную запись цены в десятичное число."), + ("Converts a hexadecimal number to binary.", "Преобразует шестнадцатеричное число в двоичное."), + ("Converts a hexadecimal number to decimal.", "Преобразует шестнадцатеричное число в десятичное."), + ("Converts a hexadecimal number to octal.", "Преобразует шестнадцатеричное число в восьмеричное."), + ("Converts a measurement from one unit to another.", "Преобразует величину из одной единицы измерения в другую."), + ("Converts a number to Roman numerals in one of five styles.", "Преобразует число в римскую запись одним из пяти способов."), + ("Converts a time written as text into a fraction of a day.", "Преобразует время, записанное текстом, в долю суток."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Преобразует значение в число: сохраняет числа, заменяет ИСТИНА на 1, остальные значения — на 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Преобразует массив в текстовый список или в строгую запись константы массива.", + ), + ("Converts an octal number to binary.", "Преобразует восьмеричное число в двоичное."), + ("Converts an octal number to decimal.", "Преобразует восьмеричное число в десятичное."), + ("Converts an octal number to hexadecimal.", "Преобразует восьмеричное число в шестнадцатеричное."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Преобразует любое значение в текст; строгий режим добавляет кавычки там, где они нужны.", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Пересчитывает суммы между евро и прежними валютами стран еврозоны по фиксированным курсам.", + ), + ("Converts degrees to radians.", "Преобразует градусы в радианы."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Преобразует полноширинные символы в полуширинные; однобайтовые символы не изменяются.", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Преобразует полуширинные символы в полноширинные; в этой локали текст не изменяется.", + ), + ("Converts radians to degrees.", "Преобразует радианы в градусы."), + ("Converts text that looks like a number, date or time into a number.", "Преобразует текст, представляющий число, дату или время, в число."), + ( + "Converts text to a number using the given decimal and group separators.", + "Преобразует текст в число с заданными десятичным разделителем и разделителем групп разрядов.", + ), + ("Converts text to lower case.", "Преобразует буквы текста в строчные."), + ("Converts text to upper case.", "Преобразует буквы текста в прописные."), + ("Correlation coefficient of two data sets.", "Возвращает коэффициент корреляции двух наборов данных."), + ("Cosecant of a complex number.", "Возвращает косеканс комплексного числа."), + ("Cosecant of an angle in radians.", "Возвращает косеканс угла, заданного в радианах."), + ("Cosine of a complex number.", "Возвращает косинус комплексного числа."), + ("Cosine of an angle in radians.", "Возвращает косинус угла, заданного в радианах."), + ("Cotangent of a complex number.", "Возвращает котангенс комплексного числа."), + ("Cotangent of an angle in radians.", "Возвращает котангенс угла, заданного в радианах."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Вычисляет число дней между датами на основе года из 360 дней по американскому или европейскому методу.", + ), + ("Counts empty cells and empty text in a range.", "Подсчитывает пустые ячейки и пустые текстовые значения в диапазоне."), + ( + "Counts how many values fall into each bin, as a vertical array.", + "Возвращает вертикальный массив количеств значений, попавших в каждый интервал.", + ), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Подсчитывает непустые ячейки поля выбранных записей или сами выбранные записи.", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Подсчитывает числовые ячейки поля выбранных записей или сами выбранные записи.", + ), + ("Counts the cells that meet a condition.", "Подсчитывает ячейки, удовлетворяющие условию."), + ("Counts the cells that meet every condition.", "Подсчитывает ячейки, удовлетворяющие всем условиям."), + ("Counts the characters in a text.", "Возвращает количество символов в тексте."), + ("Counts the columns in an array or range.", "Возвращает количество столбцов массива или диапазона."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Подсчитывает элементы набора куба; без подключения к кубу возвращает #Н/Д."), + ("Counts the non-empty values.", "Подсчитывает непустые значения."), + ("Counts the numbers.", "Подсчитывает числовые значения."), + ("Counts the rows in an array or range.", "Считает строки в массиве или диапазоне."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Возвращает число полных лет, месяцев или дней между датами. Единицы: Y, M, D, MD, YM или YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Считает рабочие дни с понедельника по пятницу между двумя датами, исключая праздники.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Считает рабочие дни между двумя датами с заданными выходными, исключая праздники.", + ), + ("Creates a link; the cell shows the friendly name, or the link itself.", "Создаёт ссылку; в ячейке отображается заданное имя или адрес ссылки."), + ("Creates a reusable custom function.", "Создаёт пользовательскую функцию для повторного использования."), + ("Cumulative beta probability.", "Возвращает интегральную вероятность бета-распределения."), + ("Cumulative lognormal probability.", "Вычисляет накопленную вероятность логнормального распределения."), + ("Cuts off the fractional part of a number at the given digits.", "Отсекает дробную часть числа до заданного числа разрядов."), + ("Days from settlement to the next coupon date.", "Возвращает число дней от даты расчёта до следующей купонной выплаты."), + ("Days from the start of the coupon period to settlement.", "Возвращает число дней от начала купонного периода до даты расчёта."), + ("Days in the coupon period that contains settlement.", "Возвращает число дней в купонном периоде, содержащем дату расчёта."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Вычисляет амортизацию за произвольный интервал методом уменьшающегося остатка с переходом на линейный метод.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Определяет набор элементов куба; без подключения к кубу возвращает #Н/Д."), + ("Determinant of a square matrix.", "Вычисляет определитель квадратной матрицы."), + ("Difference of two complex numbers.", "Возвращает разность двух комплексных чисел."), + ("Discount rate of a security.", "Возвращает ставку дисконтирования ценной бумаги."), + ("Double factorial of a number.", "Возвращает двойной факториал числа."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Вычисляет амортизацию за период методом двойного уменьшения остатка или с другим коэффициентом.", + ), + ( + "Effective annual rate from a nominal rate and compounding periods.", + "Вычисляет эффективную годовую ставку по номинальной ставке и числу периодов начисления.", + ), + ("Equivalent interest rate for the growth of an investment.", "Вычисляет эквивалентную процентную ставку роста инвестиции."), + ( + "Error function integrated from 0 to a limit, or between two limits.", + "Возвращает функцию ошибок для заданного верхнего предела или разность её значений на двух пределах.", + ), + ("Error function integrated from 0 to x.", "Возвращает значение функции ошибок ERF(x)."), + ("Excess kurtosis of a sample.", "Вычисляет эксцесс выборки."), + ( + "Exponential curve coefficients and optional regression statistics.", + "Вычисляет коэффициенты экспоненциальной кривой и, при необходимости, статистику регрессии.", + ), + ("Exponential distribution density or probability.", "Возвращает плотность или вероятность экспоненциального распределения."), + ("Exponential of a complex number.", "Возвращает экспоненту комплексного числа."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Извлекает данные из XML по XPath; функция пока недоступна и возвращает #ЗНАЧ!.", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Извлекает первое совпадение, все совпадения или группы захвата регулярного выражения.", + ), + ("F distribution density or left-tailed probability.", "Возвращает плотность или левостороннюю вероятность F-распределения."), + ("Factorial of a number.", "Возвращает факториал числа."), + ( + "Fetches data from a web service (not available; returns #VALUE!).", + "Получает данные веб-службы; в текущей реализации недоступна и возвращает #ЗНАЧ!.", + ), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Ищет значение в первом столбце таблицы и возвращает значение той же строки из указанного столбца.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Ищет значение в первой строке таблицы и возвращает значение того же столбца из другой строки.", + ), + ("Finds the position of one text in another (case-sensitive).", "Находит позицию одного текста в другом с учётом регистра."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Находит позицию одного текста внутри другого без учёта регистра, с поддержкой подстановочных знаков.", + ), + ("Fisher transformation.", "Выполняет преобразование Фишера."), + ("Fixed-declining-balance depreciation for a period.", "Вычисляет амортизацию за период методом фиксированного уменьшения остатка."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Преобразует массив в один столбец, при необходимости пропуская пустые значения или ошибки.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Преобразует массив в одну строку, при необходимости пропуская пустые значения или ошибки.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Прогнозирует значение с помощью аддитивного экспоненциального сглаживания AAA."), + ("Formats a number as currency text, like DOLLAR.", "Преобразует число в текст в денежном формате, как функция РУБЛЬ."), + ("Formats a number as currency text.", "Преобразует число в текст денежного формата."), + ("Formats a number as text.", "Преобразует число в текст по заданному формату."), + ( + "French degressive depreciation with a life-based coefficient.", + "Вычисляет амортизацию по французской системе уменьшаемого остатка с коэффициентом, зависящим от срока службы.", + ), + ( + "French linear depreciation prorated for the first period.", + "Вычисляет линейную амортизацию по французской системе с пропорциональным первым периодом.", + ), + ( + "Future value of a principal after a series of compound rates.", + "Вычисляет будущую стоимость первоначального капитала после начисления последовательности сложных процентных ставок.", + ), + ( + "Future value of an investment with constant payments and rate.", + "Вычисляет будущую стоимость вложения при постоянных платежах и процентной ставке.", + ), + ("Gamma distribution density or probability.", "Возвращает плотность или вероятность гамма-распределения."), + ("Geometric mean of positive numbers.", "Возвращает среднее геометрическое положительных чисел."), + ("Greatest common divisor of integers.", "Возвращает наибольший общий делитель целых чисел."), + ( + "Groups rows by key fields and aggregates the values of each group.", + "Группирует строки по ключевым полям и агрегирует значения каждой группы.", + ), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Расширяет массив до указанного размера, заполняя новые ячейки заданным значением.", + ), + ( + "Half-width of the confidence interval around a FORECAST.ETS value.", + "Возвращает половину ширины доверительного интервала прогноза FORECAST.ETS.", + ), + ("Harmonic mean of positive numbers.", "Возвращает среднее гармоническое положительных чисел."), + ("Hyperbolic cosecant of a complex number.", "Возвращает гиперболический косеканс комплексного числа."), + ("Hyperbolic cosecant.", "Возвращает гиперболический косеканс."), + ("Hyperbolic cosine of a complex number.", "Возвращает гиперболический косинус комплексного числа."), + ("Hyperbolic cosine.", "Возвращает гиперболический косинус."), + ("Hyperbolic cotangent.", "Возвращает гиперболический котангенс."), + ("Hyperbolic secant of a complex number.", "Возвращает гиперболический секанс комплексного числа."), + ("Hyperbolic secant.", "Возвращает гиперболический секанс."), + ("Hyperbolic sine of a complex number.", "Возвращает гиперболический синус комплексного числа."), + ("Hyperbolic sine.", "Возвращает гиперболический синус."), + ("Hyperbolic tangent.", "Возвращает гиперболический тангенс."), + ("Hypergeometric probability of an exact count.", "Возвращает гипергеометрическую вероятность заданного числа успехов."), + ("Hypergeometric probability.", "Возвращает гипергеометрическую вероятность."), + ("Identity matrix of the given size.", "Создаёт единичную матрицу заданного размера."), + ("Imaginary coefficient of a complex number.", "Возвращает мнимую часть комплексного числа."), + ("Information about a cell.", "Возвращает сведения о ячейке."), + ("Integer part of a division.", "Возвращает целую часть результата деления."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Вычисляет проценты за период по кредиту с равными выплатами основного долга.", + ), + ("Interest part of a given period's payment.", "Возвращает процентную часть платежа за заданный период."), + ("Interest rate of a fully invested security.", "Возвращает процентную ставку для полностью оплаченной ценной бумаги."), + ( + "Interest rate per period of an annuity, found iteratively.", + "Вычисляет процентную ставку за период аннуитета методом последовательных приближений.", + ), + ("Internal rate of return of cash flows on specific dates.", "Вычисляет внутреннюю ставку доходности денежных потоков с заданными датами."), + ("Internal rate of return of periodic cash flows.", "Вычисляет внутреннюю норму доходности периодических денежных потоков."), + ("Inverse hyperbolic cosine.", "Возвращает обратный гиперболический косинус."), + ("Inverse hyperbolic cotangent.", "Возвращает обратный гиперболический котангенс."), + ("Inverse hyperbolic sine.", "Возвращает обратный гиперболический синус."), + ("Inverse hyperbolic tangent.", "Возвращает обратный гиперболический тангенс."), + ("Inverse of a square matrix.", "Вычисляет обратную матрицу для квадратной матрицы."), + ("Inverse of the Fisher transformation.", "Выполняет обратное преобразование Фишера."), + ("Inverse of the cumulative beta distribution.", "Возвращает обратную функцию интегрального бета-распределения."), + ("Inverse of the cumulative lognormal distribution.", "Возвращает обратную функцию накопленного логнормального распределения."), + ("Inverse of the gamma cumulative distribution.", "Возвращает обратную функцию интегрального гамма-распределения."), + ("Inverse of the left-tailed F distribution.", "Возвращает обратную функцию левостороннего F-распределения."), + ("Inverse of the left-tailed chi-squared distribution.", "Возвращает обратную функцию левостороннего распределения хи-квадрат."), + ("Inverse of the normal cumulative distribution.", "Возвращает обратную функцию накопленного нормального распределения."), + ("Inverse of the right-tailed F distribution.", "Возвращает обратную функцию правостороннего F-распределения."), + ("Inverse of the right-tailed chi-squared distribution.", "Возвращает обратную функцию правостороннего распределения хи-квадрат."), + ("Inverse of the standard normal cumulative distribution.", "Возвращает обратную функцию накопленного стандартного нормального распределения."), + ("Joins several text values into one.", "Объединяет несколько текстовых строк в одну."), + ("Joins text from values and every cell of ranges, without a separator.", "Объединяет текст значений и всех ячеек диапазонов без разделителя."), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Объединяет текст из значений и диапазонов с разделителем, при необходимости пропуская пустые элементы.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Оставляет заданные строки или столбцы в начале либо конце массива."), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Оставляет строки или столбцы массива, для которых условие включения равно ИСТИНА.", + ), + ("Largest number (0 when there are none).", "Возвращает наибольшее число из набора или 0, если чисел нет."), + ("Largest number in a field of the matching records.", "Возвращает наибольшее число в поле выбранных записей."), + ("Largest value among cells that meet every condition.", "Возвращает наибольшее значение среди ячеек, удовлетворяющих всем условиям."), + ( + "Largest value counting text as 0 and logicals as 1/0.", + "Возвращает наибольшее значение, считая текст нулём, а логические значения — единицей или нулём.", + ), + ("Least common multiple of integers.", "Возвращает наименьшее общее кратное целых чисел."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Вычисляет коэффициенты линейной регрессии методом наименьших квадратов и, при необходимости, её статистику.", + ), + ("Left-tailed inverse of Student's t distribution.", "Возвращает левостороннюю обратную функцию распределения Стьюдента."), + ("Length of the repeating pattern detected in a time series.", "Возвращает длину повторяющегося периода, обнаруженного во временном ряду."), + ("Logarithm to the given base (10 by default).", "Возвращает логарифм по заданному основанию; по умолчанию основание равно 10."), + ("Lognormal density or probability.", "Вычисляет плотность или накопленную вероятность логнормального распределения."), + ( + "Macaulay duration of a security with periodic interest.", + "Возвращает дюрацию Маколея для ценной бумаги с периодическими процентными выплатами.", + ), + ("Matrix product of two arrays.", "Вычисляет произведение двух матриц."), + ( + "Mean after trimming a fraction of points from both ends.", + "Вычисляет среднее после удаления заданной доли крайних значений с обоих концов набора.", + ), + ("Mean counting text as 0 and logical values as 1 or 0.", "Вычисляет среднее, считая текст нулём, а логические значения — единицей или нулём."), + ("Middle value of the numbers.", "Возвращает медиану набора чисел."), + ("Modified Bessel function of the first kind, I_n(x).", "Возвращает модифицированную функцию Бесселя первого рода I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Возвращает модифицированную функцию Бесселя второго рода K_n(x)."), + ( + "Modified duration of a security with periodic interest.", + "Вычисляет модифицированную дюрацию ценной бумаги с периодическими выплатами процентов.", + ), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Вычисляет модифицированную внутреннюю ставку доходности с разными ставками финансирования и реинвестирования.", + ), + ("Most frequently occurring number.", "Возвращает наиболее часто встречающееся число."), + ("Multiplies all the numbers in the arguments.", "Перемножает все числа в аргументах."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Перемножает соответствующие элементы массивов одинакового размера и суммирует произведения.", + ), + ("Multiplies the numbers in a field of the matching records.", "Перемножает числа в поле выбранных записей."), + ("Names intermediate results.", "Присваивает имена промежуточным результатам вычисления."), + ("Natural log of the gamma function.", "Возвращает натуральный логарифм гамма-функции."), + ("Natural logarithm of a complex number.", "Возвращает натуральный логарифм комплексного числа."), + ("Natural logarithm.", "Возвращает натуральный логарифм числа."), + ("Negative binomial probability.", "Вычисляет вероятность отрицательного биномиального распределения."), + ("Net present value of cash flows on specific dates.", "Вычисляет чистую приведённую стоимость денежных потоков с заданными датами."), + ( + "Net present value of periodic cash flows at a discount rate.", + "Вычисляет чистую приведённую стоимость периодических денежных потоков по ставке дисконтирования.", + ), + ("Next coupon date after settlement.", "Возвращает дату следующей купонной выплаты после даты расчёта."), + ( + "Nominal annual rate from an effective rate and compounding periods.", + "Вычисляет номинальную годовую ставку по эффективной ставке и числу периодов начисления.", + ), + ("Normal distribution density or cumulative probability.", "Вычисляет плотность или накопленную вероятность нормального распределения."), + ("Number of areas in a reference.", "Возвращает количество областей в ссылке."), + ("Number of combinations with repetition.", "Возвращает число сочетаний с повторениями."), + ("Number of combinations without repetition.", "Возвращает число сочетаний без повторений."), + ("Number of coupons payable between settlement and maturity.", "Возвращает число купонных выплат между датами расчёта и погашения."), + ("Number of ordered selections with repetition.", "Вычисляет число упорядоченных выборок с повторениями."), + ("Number of ordered selections without repetition.", "Вычисляет число упорядоченных выборок без повторений."), + ("Number of periods needed to pay off or accumulate an amount.", "Вычисляет число периодов для погашения долга или накопления суммы."), + ("Number of sheets.", "Возвращает количество листов."), + ("One- or two-tailed Student's t probability.", "Вычисляет одностороннюю или двустороннюю вероятность распределения Стьюдента."), + ("One-tailed probability of a z-test.", "Вычисляет одностороннюю вероятность по z-критерию."), + ("Pearson product-moment correlation coefficient.", "Вычисляет коэффициент корреляции Пирсона."), + ("Percent-encodes text for use in a URL.", "Кодирует текст для URL с использованием процентных последовательностей."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Вычисляет периодический платёж по кредиту или аннуитету с постоянными платежами и ставкой.", + ), + ("Periods needed for an investment to grow to a target value.", "Вычисляет число периодов роста инвестиции до заданной суммы."), + ("Picks a value from the list by its position.", "Выбирает значение из списка по его номеру."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Выбирает столбцы массива по номерам; отрицательные номера отсчитываются с конца.", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Выбирает строки массива по номерам; отрицательные номера отсчитываются с конца.", + ), + ("Places arrays side by side.", "Размещает массивы рядом по горизонтали."), + ("Poisson probability.", "Вычисляет вероятность распределения Пуассона."), + ("Population covariance of paired values.", "Возвращает ковариацию генеральной совокупности парных значений."), + ("Population skewness.", "Вычисляет асимметрию генеральной совокупности."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Вычисляет стандартное отклонение генеральной совокупности, считая текст нулём, а логические значения — единицей или нулём.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Вычисляет стандартное отклонение генеральной совокупности для поля выбранных записей.", + ), + ("Population standard deviation.", "Вычисляет стандартное отклонение генеральной совокупности."), + ( + "Population variance counting text as 0 and logicals as 1/0.", + "Вычисляет дисперсию генеральной совокупности, считая текст нулём, а логические значения — единицей или нулём.", + ), + ("Population variance of a field over the matching records.", "Вычисляет дисперсию генеральной совокупности для поля выбранных записей."), + ("Population variance.", "Вычисляет дисперсию генеральной совокупности."), + ("Positive square root.", "Возвращает положительный квадратный корень."), + ("Predicts a value along a linear trend.", "Прогнозирует значение по линейному тренду."), + ("Present value of a series of equal future payments.", "Вычисляет текущую стоимость последовательности равных будущих платежей."), + ("Previous coupon date on or before settlement.", "Возвращает дату купонной выплаты, предшествующей дате расчёта или совпадающей с ней."), + ("Price per 100 face value of a Treasury bill.", "Вычисляет цену казначейского векселя на 100 единиц номинала."), + ("Price per 100 face value of a discounted security.", "Вычисляет цену дисконтной ценной бумаги на 100 единиц номинала."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Вычисляет цену на 100 единиц номинала ценной бумаги с выплатой процентов при погашении.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Вычисляет цену на 100 единиц номинала ценной бумаги с периодической выплатой процентов.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "Вычисляет цену на 100 единиц номинала ценной бумаги с нестандартным первым периодом.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Вычисляет цену на 100 единиц номинала ценной бумаги с нестандартным последним периодом.", + ), + ("Principal part of a given period's payment.", "Вычисляет часть платежа за заданный период, направленную на погашение основного долга."), + ("Probability from Student's t-test.", "Вычисляет вероятность по t-критерию Стьюдента."), + ("Probability of a number of successes falling in a range.", "Возвращает вероятность попадания числа успехов в заданный диапазон."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Возвращает вероятность попадания стандартной нормальной величины между средним и z.", + ), + ("Probability that values fall between two limits.", "Вычисляет вероятность попадания значений между двумя границами."), + ("Product of complex numbers.", "Возвращает произведение комплексных чисел."), + ("Quartile (0–4) of a data set, inclusive method.", "Возвращает квартиль набора данных с номером от 0 до 4 включающим методом."), + ("Quartile (0–4) of a data set.", "Возвращает квартиль набора данных с номером от 0 до 4."), + ("Quartile (1–3) of a data set, exclusive method.", "Возвращает квартиль набора данных с номером от 1 до 3 исключающим методом."), + ("Quotient of two complex numbers.", "Возвращает частное двух комплексных чисел."), + ("Raises a complex number to a power.", "Возводит комплексное число в степень."), + ("Raises a number to a power.", "Возводит число в степень."), + ("Rank of a number within a list.", "Возвращает ранг числа в списке."), + ("Rank of a number within a list; ties get the average rank.", "Возвращает ранг числа в списке; равные числа получают средний ранг."), + ( + "Rank of a number within a list; ties share the top rank.", + "Возвращает ранг числа в списке; равные числа получают наивысший из занимаемых рангов.", + ), + ("Ratio of the factorial of a sum to the product of factorials.", "Вычисляет отношение факториала суммы к произведению факториалов слагаемых."), + ("Reads text in a given base as a number.", "Преобразует текстовую запись числа в заданной системе счисления в число."), + ("Real coefficient of a complex number.", "Возвращает действительную часть комплексного числа."), + ("Relative standing of a value as a fraction of the data set.", "Возвращает относительное положение значения в наборе данных в виде доли."), + ("Relative standing of a value from 0 to 1 inclusive.", "Возвращает относительное положение значения от 0 до 1 включительно."), + ("Relative standing of a value strictly between 0 and 1.", "Возвращает относительное положение значения строго между 0 и 1."), + ("Remainder of a division, with the sign of the divisor.", "Возвращает остаток от деления со знаком делителя."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Удаляет пробелы в начале и конце текста и заменяет повторяющиеся пробелы одним.", + ), + ("Removes non-printable control characters from text.", "Удаляет из текста непечатаемые управляющие символы."), + ("Removes rows or columns from the start (or end) of an array.", "Удаляет строки или столбцы с начала или конца массива."), + ("Repeats a text a given number of times.", "Повторяет текст заданное число раз."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Заменяет все совпадения регулярного выражения или совпадение с заданным номером.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Заменяет вхождения одного текста другим; при необходимости заменяет только вхождение с заданным номером.", + ), + ("Replaces part of a text by position.", "Заменяет часть текста по заданной позиции."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Возвращает 1, если число не меньше порогового значения, иначе 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Возвращает 1, если два числа равны, иначе 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Возвращает код типа значения: 1 — число, 2 — текст, 4 — логическое значение, 16 — ошибка, 64 — массив.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Возвращает заданное значение при ошибке #Н/Д, иначе исходное значение."), + ("Returns a fallback when the value is an error, otherwise the value.", "Возвращает заданное значение при ошибке, иначе исходное значение."), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Возвращает свойство ключевого показателя эффективности куба; без подключения к кубу возвращает #Н/Д.", + ), + ( + "Returns a member or tuple from a cube (no cube connections; #N/A).", + "Возвращает элемент или кортеж куба; без подключения к кубу возвращает #Н/Д.", + ), + ( + "Returns a property of a cube member (no cube connections; #N/A).", + "Возвращает свойство элемента куба; без подключения к кубу возвращает #Н/Д.", + ), + ( + "Returns an aggregated value from a cube (no cube connections; #N/A).", + "Возвращает агрегированное значение из куба; без подключения к кубу возвращает #Н/Д.", + ), + ("Returns characters from the middle of a text.", "Возвращает символы из середины текста."), + ("Returns information about the operating environment.", "Возвращает сведения о рабочей среде."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Возвращает одно значение, если условие истинно, и другое, если ложно.", + ), + ("Returns the #N/A error value.", "Возвращает значение ошибки #Н/Д."), + ("Returns the 1-based position of a value in a row or column.", "Возвращает позицию значения в строке или столбце, считая с единицы."), + ("Returns the ISO 8601 week number of a date.", "Возвращает номер недели даты по ISO 8601."), + ("Returns the Unicode code point of the first character of a text.", "Возвращает код Юникода первого символа текста."), + ("Returns the Windows-1252 code of the first character of a text.", "Возвращает код первого символа текста в Windows-1252."), + ("Returns the character for a Unicode code point.", "Возвращает символ по его коду Юникода."), + ("Returns the character for a code from the Windows-1252 character set.", "Возвращает символ по коду из набора Windows-1252."), + ("Returns the current date and time.", "Возвращает текущие дату и время."), + ("Returns the current date.", "Возвращает текущую дату."), + ("Returns the date a number of months before or after a date.", "Возвращает дату на заданное число месяцев раньше или позже исходной даты."), + ( + "Returns the date a number of working days away with a custom weekend.", + "Возвращает дату за заданное число рабочих дней от исходной даты с заданными выходными.", + ), + ( + "Returns the date a number of working days before or after a date.", + "Возвращает дату за заданное число рабочих дней до или после исходной даты.", + ), + ("Returns the day of the month of a date.", "Возвращает день месяца для даты."), + ("Returns the day of the week of a date as a number.", "Возвращает номер дня недели для заданной даты."), + ("Returns the distinct rows or columns of an array.", "Возвращает уникальные строки или столбцы массива."), + ("Returns the element, row or column of an array at the given position.", "Возвращает элемент, строку или столбец массива в заданной позиции."), + ( + "Returns the field value of the single record that meets the criteria.", + "Возвращает значение поля единственной записи, удовлетворяющей условиям.", + ), + ("Returns the first characters of a text.", "Возвращает первые символы текста."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Вычисляет долю года между двумя датами по заданному способу подсчёта дней.", + ), + ("Returns the hour (0-23) of a time.", "Возвращает час времени от 0 до 23."), + ("Returns the last characters of a text.", "Возвращает последние символы текста."), + ( + "Returns the last day of the month a number of months away.", + "Возвращает последний день месяца, отстоящего от исходной даты на заданное число месяцев.", + ), + ("Returns the logical value FALSE.", "Возвращает логическое значение ЛОЖЬ."), + ("Returns the logical value TRUE.", "Возвращает логическое значение ИСТИНА."), + ("Returns the minute (0-59) of a time.", "Возвращает минуты времени от 0 до 59."), + ("Returns the month (1-12) of a date.", "Возвращает месяц даты от 1 до 12."), + ( + "Returns the nth member of a cube set (no cube connections; #N/A).", + "Возвращает элемент набора куба по номеру; без подключения к кубу возвращает #Н/Д.", + ), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Возвращает номер типа ошибки или #Н/Д, если значение не является ошибкой.", + ), + ("Returns the number of days between two dates.", "Возвращает число дней между двумя датами."), + ( + "Returns the phonetic (furigana) text; here the text itself.", + "Возвращает фонетическую запись текста; в текущей реализации возвращает исходный текст.", + ), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Возвращает позицию значения в строке или столбце с заданными режимами сопоставления и поиска.", + ), + ("Returns the second (0-59) of a time.", "Возвращает секунды времени от 0 до 59."), + ("Returns the text that comes after a delimiter.", "Возвращает текст после разделителя."), + ("Returns the text that comes before a delimiter.", "Возвращает текст перед разделителем."), + ( + "Returns the value if it is text, otherwise empty text.", + "Возвращает текстовое значение без изменений, для остальных значений возвращает пустой текст.", + ), + ("Returns the value paired with the first condition that is TRUE.", "Возвращает значение, соответствующее первому истинному условию."), + ("Returns the week number of a date within its year.", "Возвращает номер недели даты в году."), + ("Returns the year of a date.", "Возвращает год даты."), + ("Reverses a logical value.", "Меняет логическое значение на противоположное."), + ("Right-tailed F probability.", "Возвращает правостороннюю вероятность F-распределения."), + ("Right-tailed Student's t probability.", "Вычисляет правостороннюю вероятность распределения Стьюдента."), + ("Right-tailed chi-squared probability.", "Возвращает правостороннюю вероятность распределения хи-квадрат."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Округляет число и преобразует его в текст с заданным числом десятичных знаков и необязательными разделителями разрядов.", + ), + ("Rounds a number away from zero to a given number of digits.", "Округляет число от нуля до заданного числа разрядов."), + ("Rounds a number down to a multiple of significance.", "Округляет число вниз до кратного заданному значению."), + ("Rounds a number down to the nearest integer or multiple.", "Округляет число вниз до ближайшего целого или кратного."), + ("Rounds a number down to the nearest integer.", "Округляет число вниз до ближайшего целого."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Округляет число до заданного числа разрядов; при равном расстоянии округляет от нуля.", + ), + ("Rounds a number to the nearest multiple.", "Округляет число до ближайшего заданного кратного."), + ("Rounds a number toward negative infinity to a multiple.", "Округляет число к отрицательной бесконечности до заданного кратного."), + ("Rounds a number toward positive infinity to a multiple.", "Округляет число к положительной бесконечности до заданного кратного."), + ("Rounds a number toward zero to a given number of digits.", "Округляет число к нулю до заданного числа разрядов."), + ("Rounds a number up to a multiple of significance.", "Округляет число вверх до кратного заданному значению."), + ("Rounds a number up to the nearest integer or multiple.", "Округляет число вверх до ближайшего целого или кратного."), + ("Rounds away from zero to the nearest even integer.", "Округляет число от нуля до ближайшего чётного целого."), + ("Rounds away from zero to the nearest odd integer.", "Округляет от нуля до ближайшего нечётного целого числа."), + ("Row number of a reference.", "Возвращает номер строки ссылки."), + ("Running accumulation of an array.", "Возвращает промежуточные результаты накопления по массиву."), + ("Sample covariance of paired values.", "Возвращает выборочную ковариацию парных значений."), + ("Sample skewness.", "Вычисляет асимметрию выборки."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Вычисляет стандартное отклонение выборки, считая текст нулём, а логические значения — единицей или нулём.", + ), + ("Sample standard deviation of a field over the matching records.", "Вычисляет выборочное стандартное отклонение поля выбранных записей."), + ("Sample standard deviation.", "Вычисляет стандартное отклонение выборки."), + ( + "Sample variance counting text as 0 and logicals as 1/0.", + "Вычисляет дисперсию выборки, считая текст нулём, а логические значения — единицей или нулём.", + ), + ("Sample variance of a field over the matching records.", "Вычисляет выборочную дисперсию поля выбранных записей."), + ("Sample variance.", "Вычисляет дисперсию выборки."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Ищет значение в строке или столбце и возвращает соответствующий элемент, строку или столбец другого массива.", + ), + ("Secant of a complex number.", "Возвращает секанс комплексного числа."), + ("Secant of an angle in radians.", "Возвращает секанс угла, заданного в радианах."), + ("Sheet number.", "Возвращает номер листа."), + ("Shifts the bits of a number left (right for negative shifts).", "Сдвигает биты числа влево; при отрицательном сдвиге — вправо."), + ("Shifts the bits of a number right (left for negative shifts).", "Сдвигает биты числа вправо; при отрицательном сдвиге — влево."), + ("Sine of a complex number.", "Возвращает синус комплексного числа."), + ("Sine of an angle in radians.", "Возвращает синус угла, заданного в радианах."), + ("Slope of the least-squares regression line.", "Вычисляет наклон линии регрессии методом наименьших квадратов."), + ("Smallest number (0 when there are none).", "Возвращает наименьшее число из набора или 0, если чисел нет."), + ("Smallest number in a field of the matching records.", "Возвращает наименьшее число в поле выбранных записей."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Возвращает наименьшее число успехов, при котором интегральная биномиальная вероятность достигает альфа.", + ), + ("Smallest value among cells that meet every condition.", "Возвращает наименьшее значение среди ячеек, удовлетворяющих всем условиям."), + ( + "Smallest value counting text as 0 and logicals as 1/0.", + "Возвращает наименьшее значение, считая текст нулём, а логические значения — единицей или нулём.", + ), + ("Sorts an array by the values of other arrays of matching size.", "Сортирует массив по значениям других массивов соответствующего размера."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Сортирует строки или столбцы массива по одному или нескольким его столбцам.", + ), + ("Spells out a number in Thai words with Baht.", "Записывает число словами на тайском языке с указанием батов."), + ("Splits text into a grid of columns and rows at the given delimiters.", "Разбивает текст на строки и столбцы по заданным разделителям."), + ("Square of the correlation coefficient.", "Возвращает квадрат коэффициента корреляции."), + ("Square root of a complex number.", "Возвращает квадратный корень комплексного числа."), + ("Square root of the number times pi.", "Возвращает квадратный корень произведения числа и пи."), + ("Stacks arrays on top of each other.", "Объединяет массивы вертикально."), + ("Standard error of predicted y values in a regression.", "Вычисляет стандартную ошибку предсказанных значений y в регрессии."), + ("Standard normal cumulative probability.", "Вычисляет накопленную вероятность стандартного нормального распределения."), + ("Standard normal density or cumulative probability.", "Вычисляет плотность или накопленную вероятность стандартного нормального распределения."), + ("Standard normal density.", "Вычисляет плотность стандартного нормального распределения."), + ("Straight-line depreciation for one period.", "Вычисляет амортизацию за один период линейным методом."), + ("Student's t density or left-tailed probability.", "Вычисляет плотность или левостороннюю вероятность распределения Стьюдента."), + ("Sum of a power series.", "Вычисляет сумму степенного ряда."), + ("Sum of complex numbers.", "Возвращает сумму комплексных чисел."), + ("Sum of squared deviations from the mean.", "Возвращает сумму квадратов отклонений от среднего."), + ("Sum-of-years'-digits depreciation for a period.", "Вычисляет амортизацию за период методом суммы чисел лет."), + ("Sums the differences of squares of matching elements.", "Суммирует разности квадратов соответствующих элементов."), + ("Sums the squared differences of matching elements.", "Суммирует квадраты разностей соответствующих элементов."), + ("Sums the sums of squares of matching elements.", "Суммирует суммы квадратов соответствующих элементов."), + ("Swaps the rows and columns of an array.", "Меняет местами строки и столбцы массива."), + ("TRUE for references.", "Возвращает ИСТИНА, если значение является ссылкой."), + ("TRUE when a LAMBDA argument was left out.", "Возвращает ИСТИНА, если аргумент LAMBDA пропущен."), + ("TRUE when a regular expression matches somewhere in the text.", "Возвращает ИСТИНА, если в тексте есть совпадение с регулярным выражением."), + ("TRUE when an odd number of arguments are TRUE.", "Возвращает ИСТИНА, если нечётное число аргументов имеет значение ИСТИНА."), + ("TRUE when at least one argument is TRUE.", "Возвращает ИСТИНА, если хотя бы один аргумент истинен."), + ("TRUE when every argument is TRUE.", "Возвращает ИСТИНА, если все аргументы истинны."), + ("TRUE when the cell has a formula.", "Возвращает ИСТИНА, если ячейка содержит формулу."), + ("TRUE when the integer part of a number is even.", "Возвращает ИСТИНА, если целая часть числа чётная."), + ("TRUE when the integer part of a number is odd.", "Возвращает ИСТИНА, если целая часть числа нечётная."), + ("TRUE when the value is TRUE or FALSE.", "Возвращает ИСТИНА для логических значений ИСТИНА и ЛОЖЬ."), + ("TRUE when the value is a number.", "Возвращает ИСТИНА, если значение является числом."), + ("TRUE when the value is any error other than #N/A.", "Возвращает ИСТИНА для любой ошибки, кроме #Н/Д."), + ("TRUE when the value is any error.", "Возвращает ИСТИНА для любого значения ошибки."), + ("TRUE when the value is anything other than text.", "Возвращает ИСТИНА для любого нетекстового значения."), + ("TRUE when the value is text.", "Возвращает ИСТИНА, если значение является текстом."), + ("TRUE when the value is the #N/A error.", "Возвращает ИСТИНА для ошибки #Н/Д."), + ("TRUE when the value refers to an empty cell.", "Возвращает ИСТИНА, если значение ссылается на пустую ячейку."), + ("TRUE when two texts are identical, including case.", "Возвращает ИСТИНА, если тексты совпадают с учётом регистра."), + ("Tangent of a complex number.", "Возвращает тангенс комплексного числа."), + ("Tangent of an angle in radians.", "Возвращает тангенс угла, заданного в радианах."), + ("The constant pi to 15 digits.", "Возвращает число пи с точностью до 15 цифр."), + ("The formula of a cell as text.", "Возвращает формулу ячейки как текст."), + ("The gamma function.", "Возвращает гамма-функцию."), + ("The k-th largest number in a data set.", "Возвращает k-е наибольшее число в наборе данных."), + ("The k-th smallest number in a data set.", "Возвращает k-е наименьшее число в наборе данных."), + ("The reference named by a text string.", "Возвращает ссылку, заданную текстовой строкой."), + ("The sum of a subset as a fraction of the sum of all the values.", "Вычисляет долю суммы подмножества в сумме всех значений."), + ("Total interest paid between two periods.", "Возвращает общую сумму процентов, выплаченных между двумя периодами."), + ("Total principal repaid between two periods.", "Возвращает общую сумму погашенного основного долга между двумя периодами."), + ("Two-tailed Student's t probability.", "Вычисляет двустороннюю вероятность распределения Стьюдента."), + ("Two-tailed inverse of Student's t distribution.", "Возвращает двустороннюю обратную функцию распределения Стьюдента."), + ("Two-tailed p-value of an F-test for equality of variances.", "Возвращает двустороннее p-значение F-теста равенства дисперсий."), + ("Values along a fitted exponential growth curve.", "Возвращает значения подобранной кривой экспоненциального роста."), + ("Values along a least-squares linear fit.", "Возвращает значения линейной зависимости, подобранной методом наименьших квадратов."), + ("Vertical array of all the most frequent numbers.", "Возвращает вертикальный массив всех наиболее часто встречающихся чисел."), + ("Weibull density or probability.", "Вычисляет плотность или вероятность распределения Вейбулла."), + ("Writes a number in another base, padded with zeros.", "Записывает число в заданной системе счисления с дополнением нулями."), + ( + "Y-intercept of the least-squares regression line.", + "Возвращает ординату пересечения с осью Y линии регрессии, рассчитанной методом наименьших квадратов.", + ), + ("Yield of a Treasury bill.", "Вычисляет доходность казначейского векселя."), + ("Yield of a security paying periodic interest.", "Вычисляет доходность ценной бумаги с периодической выплатой процентов."), + ("Yield of a security with an odd first period.", "Вычисляет доходность ценной бумаги с нестандартным первым периодом."), + ("Yield of a security with an odd last period.", "Вычисляет доходность ценной бумаги с нестандартным последним периодом."), + ("Z-score of a value.", "Возвращает стандартизованное значение z."), + ("e raised to the given power.", "Возводит число e в заданную степень."), + ("k-th percentile, k from 0 to 1 inclusive.", "Возвращает k-й процентиль для k от 0 до 1 включительно."), + ("k-th percentile, k strictly between 0 and 1.", "Возвращает k-й процентиль для k строго между 0 и 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "тип_ссылки"), + ("actual_range", "фактический_диапазон"), + ("aggregation", "агрегация"), + ("alpha", "альфа"), + ("angle", "угол"), + ("area_num", "номер_области"), + ("argument", "аргумент"), + ("array", "массив"), + ("array_x", "массив_x"), + ("array_y", "массив_y"), + ("average_range", "диапазон_усреднения"), + ("base", "основание"), + ("basis", "базис"), + ("beta", "бета"), + ("bins_array", "массив_интервалов"), + ("bottom", "нижняя_граница"), + ("by_array", "массив_сортировки"), + ("by_col", "по_столбцам"), + ("calc_method", "метод_расчёта"), + ("calculation", "вычисление"), + ("caption", "подпись"), + ("case_sensitivity", "учёт_регистра"), + ("coefficients", "коэффициенты"), + ("col_delimiter", "разделитель_столбцов"), + ("col_fields", "поля_столбцов"), + ("col_index_num", "номер_столбца"), + ("col_num", "номер_столбца"), + ("col_sort_order", "порядок_сортировки_столбцов"), + ("col_total_depth", "глубина_итогов_столбцов"), + ("cols", "столбцы"), + ("column_num", "номер_столбца"), + ("columns", "столбцы"), + ("confidence_level", "уровень_доверия"), + ("connection", "подключение"), + ("const", "константа"), + ("cost", "стоимость"), + ("coupon", "ставка_купона"), + ("criteria", "условие"), + ("criteria_range", "диапазон_условия"), + ("cumulative", "интегральная"), + ("data_all", "все_данные"), + ("data_array", "массив_данных"), + ("data_completion", "заполнение_данных"), + ("data_subset", "подмножество_данных"), + ("database", "база_данных"), + ("date", "дата"), + ("date_purchased", "дата_приобретения"), + ("date_text", "дата_текстом"), + ("dates", "даты"), + ("day", "день"), + ("days", "дни"), + ("decimal_dollar", "десятичная_цена"), + ("decimal_separator", "десятичный_разделитель"), + ("decimals", "число_знаков"), + ("default_or_value", "значение_по_умолчанию"), + ("deg_freedom", "степени_свободы"), + ("delimiter", "разделитель"), + ("denominator", "знаменатель"), + ("dimension", "размерность"), + ("discount", "ставка_дисконтирования"), + ("divisor", "делитель"), + ("effect_rate", "эффективная_ставка"), + ("end_date", "конечная_дата"), + ("end_period", "конечный_период"), + ("error_val", "значение_ошибки"), + ("exactly_once", "ровно_один_раз"), + ("expected_range", "ожидаемый_диапазон"), + ("expression", "выражение"), + ("factor", "коэффициент"), + ("field", "поле"), + ("field_headers", "заголовки_полей"), + ("field_relationship", "связь_полей"), + ("filter_array", "массив_фильтра"), + ("finance_rate", "ставка_финансирования"), + ("find_text", "искомый_текст"), + ("first_coupon", "дата_первой_купонной_выплаты"), + ("first_interest", "дата_первой_выплаты_процентов"), + ("first_period", "дата_конца_первого_периода"), + ("form", "форма"), + ("format", "формат"), + ("format_text", "формат_текста"), + ("fraction", "знаменатель_дроби"), + ("fractional_dollar", "дробная_цена"), + ("frequency", "частота"), + ("friendly_name", "отображаемое_имя"), + ("from_unit", "исходная_единица"), + ("full_precision", "полная_точность"), + ("function", "функция"), + ("function_num", "номер_функции"), + ("fv", "будущая_стоимость"), + ("group_separator", "разделитель_групп"), + ("guess", "предположение"), + ("height", "высота"), + ("holidays", "праздники"), + ("hour", "часы"), + ("i_num", "мнимая_часть"), + ("if_empty", "если_пусто"), + ("if_not_found", "если_не_найдено"), + ("ignore", "пропускать"), + ("ignore_empty", "пропускать_пустые"), + ("include", "включить"), + ("index_num", "номер_индекса"), + ("info_type", "тип_сведений"), + ("initial_value", "начальное_значение"), + ("instance_num", "номер_вхождения"), + ("inumber", "комплексное_число"), + ("investment", "инвестиция"), + ("issue", "дата_выпуска"), + ("k", "k"), + ("known_xs", "известные_x"), + ("known_ys", "известные_y"), + ("kpi_name", "имя_ключевого_показателя"), + ("kpi_property", "свойство_ключевого_показателя"), + ("lambda", "лямбда"), + ("last_interest", "дата_последней_выплаты_процентов"), + ("life", "срок_службы"), + ("link_location", "адрес_ссылки"), + ("logical", "логическое_значение"), + ("logical_test", "лог_выражение"), + ("lookup_array", "просматриваемый_массив"), + ("lookup_value", "искомое_значение"), + ("lookup_vector", "просматриваемый_вектор"), + ("lower_limit", "нижняя_граница"), + ("m", "m"), + ("match_end", "граница_как_разделитель"), + ("match_mode", "режим_сопоставления"), + ("match_type", "тип_сопоставления"), + ("maturity", "дата_погашения"), + ("max", "максимум"), + ("max_range", "диапазон_максимума"), + ("mean", "среднее"), + ("member_expression", "выражение_элемента"), + ("method", "метод"), + ("min", "минимум"), + ("min_length", "минимальная_длина"), + ("min_range", "диапазон_минимума"), + ("minute", "минуты"), + ("mode", "режим"), + ("month", "месяц"), + ("months", "месяцы"), + ("multiple", "кратное"), + ("n", "n"), + ("name", "имя"), + ("new_text", "новый_текст"), + ("new_xs", "новые_x"), + ("no_commas", "без_разделителей"), + ("no_switch", "без_переключения"), + ("nominal_rate", "номинальная_ставка"), + ("nper", "число_периодов"), + ("npery", "периодов_в_году"), + ("num_bytes", "число_байтов"), + ("num_chars", "число_знаков"), + ("num_digits", "число_разрядов"), + ("number", "число"), + ("number_chosen", "число_выбранных"), + ("number_f", "число_неудач"), + ("number_pop", "численность_совокупности"), + ("number_s", "число_успехов"), + ("number_sample", "размер_выборки"), + ("number_times", "число_повторений"), + ("numerator", "числитель"), + ("occurrence", "вхождение"), + ("old_text", "старый_текст"), + ("options", "параметры"), + ("order", "порядок"), + ("pad_with", "заполнитель"), + ("par", "номинал"), + ("parameter", "параметр"), + ("pattern", "шаблон"), + ("per", "период"), + ("percent", "доля"), + ("period", "период"), + ("places", "число_знаков"), + ("pmt", "платёж"), + ("population_s", "число_успехов_в_совокупности"), + ("power", "степень"), + ("pr", "цена"), + ("principal", "начальный_капитал"), + ("prob_range", "диапазон_вероятностей"), + ("probability", "вероятность"), + ("probability_s", "вероятность_успеха"), + ("property", "свойство"), + ("pv", "текущая_стоимость"), + ("quart", "квартиль"), + ("radix", "основание_системы"), + ("range", "диапазон"), + ("range_lookup", "интервальный_просмотр"), + ("rank", "ранг"), + ("rate", "ставка"), + ("real_num", "действительная_часть"), + ("redemption", "сумма_погашения"), + ("ref", "ссылка"), + ("ref_text", "ссылка_текстом"), + ("reference", "ссылка"), + ("reinvest_rate", "ставка_реинвестирования"), + ("relative_to", "относительно"), + ("replacement", "замена"), + ("result", "результат"), + ("result_vector", "вектор_результатов"), + ("return_array", "возвращаемый_массив"), + ("return_mode", "режим_возврата"), + ("return_type", "тип_возврата"), + ("row_delimiter", "разделитель_строк"), + ("row_fields", "поля_строк"), + ("row_index_num", "номер_строки"), + ("row_num", "номер_строки"), + ("row_sort_order", "порядок_сортировки_строк"), + ("row_total_depth", "глубина_итогов_строк"), + ("rows", "строки"), + ("salvage", "остаточная_стоимость"), + ("sample_s", "число_успехов_в_выборке"), + ("scan_by_column", "просмотр_по_столбцам"), + ("schedule", "последовательность_ставок"), + ("search_mode", "режим_поиска"), + ("seasonality", "сезонность"), + ("second", "секунды"), + ("serial_number", "числовая_дата_или_время"), + ("set", "множество"), + ("set_expression", "выражение_множества"), + ("settlement", "дата_расчёта"), + ("sheet_text", "имя_листа"), + ("shift_amount", "величина_сдвига"), + ("sigma", "сигма"), + ("significance", "кратность_или_точность"), + ("size", "размер"), + ("sort_by", "сортировать_по"), + ("sort_index", "индекс_сортировки"), + ("sort_order", "порядок_сортировки"), + ("source", "источник"), + ("standard_dev", "стандартное_отклонение"), + ("start", "начало"), + ("start_date", "начальная_дата"), + ("start_num", "начальная_позиция"), + ("start_period", "начальный_период"), + ("statistic_type", "тип_статистики"), + ("stats", "статистика"), + ("step", "шаг"), + ("suffix", "суффикс"), + ("sum_range", "диапазон_суммирования"), + ("table_array", "таблица"), + ("tails", "число_хвостов"), + ("target", "цель"), + ("target_date", "целевая_дата"), + ("text", "текст"), + ("time_text", "время_текстом"), + ("timeline", "временная_шкала"), + ("to_unit", "конечная_единица"), + ("top", "верхняя_граница"), + ("total_depth", "глубина_итогов"), + ("trials", "испытания"), + ("triangulation_precision", "точность_триангуляции"), + ("trim_cols", "обрезка_столбцов"), + ("trim_rows", "обрезка_строк"), + ("type", "тип"), + ("type_text", "тип_текстом"), + ("unit", "единица"), + ("upper_limit", "верхняя_граница"), + ("url", "адрес"), + ("value", "значение"), + ("value_if_error", "значение_если_ошибка"), + ("value_if_false", "значение_если_ложь"), + ("value_if_na", "значение_если_нд"), + ("value_if_true", "значение_если_истина"), + ("values", "значения"), + ("vector", "вектор"), + ("weekend", "выходные"), + ("whole_number", "целое_число"), + ("width", "ширина"), + ("within_text", "просматриваемый_текст"), + ("wrap_count", "длина_группы"), + ("x", "x"), + ("x_num", "число_x"), + ("x_range", "диапазон_x"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "число_y"), + ("year", "год"), + ("yld", "доходность"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/sr.rs b/crates/ui-egui/src/i18n/sr.rs index a0eac0a4fd..7cde5b5887 100644 --- a/crates/ui-egui/src/i18n/sr.rs +++ b/crates/ui-egui/src/i18n/sr.rs @@ -3,6 +3,65 @@ /// Returns the Serbian translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Series{n}" => "Serija {n}", + "3 Arrows" => "3 strelice", + "3 Symbols" => "3 simbola", + "3 Traffic Lights" => "3 semafora", + "4 Ratings" => "4 ocene", + "5 Arrows" => "5 strelica", + "5 Quarters" => "5 četvrtina", + "Applies to" => "Primenjuje se na", + "Apply" => "Primeni", + "Blanks" => "Prazne ćelije", + "Conditional Formatting Rules Manager" => "Upravljač pravilima uslovnog oblikovanja", + "Errors" => "Greške", + "Format values where this formula is true:" => "Oblikuj vrednosti za koje je ova formula tačna:", + "Formula" => "Formula", + "Green Fill with Dark Green Text" => "Zelena popuna sa tamnozelenim tekstom", + "In the last 7 days" => "U poslednjih 7 dana", + "Last month" => "Prošlog meseca", + "Last week" => "Prošle nedelje", + "Light Red Fill" => "Svetlocrvena popuna", + "Light Red Fill with Dark Red Text" => "Svetlocrvena popuna sa tamnocrvenim tekstom", + "Maximum" => "Maksimum", + "Minimum" => "Minimum", + "New Formatting Rule" => "Novo pravilo oblikovanja", + "New Rule…" => "Novo pravilo…", + "Next month" => "Sledećeg meseca", + "Next week" => "Sledeće nedelje", + "No Border" => "Bez ivice", + "Percent" => "Procenat", + "Red Border" => "Crvena ivica", + "Red Text" => "Crveni tekst", + "This month" => "Ovog meseca", + "This week" => "Ove nedelje", + "Today" => "Danas", + "Tomorrow" => "Sutra", + "Yellow Fill with Dark Yellow Text" => "Žuta popuna sa tamnožutim tekstom", + "and" => "i", + "Formula:" => "Formula:", + "OK" => "U redu", + "There are no conditional formatting rules on this sheet." => "Na ovom listu nema pravila uslovnog oblikovanja.", + "a linked (not embedded) picture was skipped" => "Povezana (neugrađena) slika je preskočena.", + "missing picture {target}" => "Nedostaje slika {target}.", + "chart {target} has no supported plot and was skipped" => "Grafikon {target} nema podržan tip i preskočen je.", + "a histogram, waterfall, treemap… chart without its chart part was skipped" => { + "Histogram, vodopadni ili treemap grafikon… bez svog dela grafikona je preskočen." + } + "an embedded object (diagram, OLE…) was skipped" => "Ugrađeni objekat (dijagram, OLE…) je preskočen.", + "grouped shapes are not supported and were skipped" => "Grupisani oblici nisu podržani i preskočeni su.", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported." => { + "XLSB uvoz samo podataka: formule postaju sačuvani rezultati i neće se ponovo izračunavati. Formatiranje, grafikoni, slike, makroi i druge funkcije nisu uvezeni; datumi, valuta i procenti mogu biti prikazani kao brojevi. Sačuvajte novu .xlsx datoteku; čuvanje u XLSB formatu nije podržano." + } + "XLSB module sheets were skipped." => "XLSB listovi modula su preskočeni.", + "XLSB non-worksheet sheets were skipped." => "XLSB listovi koji nisu radni listovi su preskočeni.", + "Unsupported XLSB future-record and alternate-content blocks were skipped." => { + "Nepodržani budući XLSB zapisi i blokovi alternativnog sadržaja su preskočeni." + } + "Invalid XLSB merged ranges were skipped." => "Nevažeći spojeni opsezi XLSB-a su preskočeni.", + "{count} items in this file were handled differently. First: {warning}" => { + "{count} stavki u ovoj datoteci obrađeno je drugačije. Prvo: {warning}" + } "Diagram" => "Dijagram", "Decorative Text" => "Ukrasni tekst", "Paste" => "Nalepi", @@ -419,6 +478,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Print Entire Workbook" => "Štampaj celu radnu svesku", "Fit Sheet on One Page" => "Uklopi list na jednu stranicu", "Page Setup…" => "Podešavanje stranice…", + "Page {page}" => "Stranica {page}", "Page {page} of {pages}" => "Stranica {page} od {pages}", "Nothing to print." => "Nema ničega za štampu.", "Previous page" => "Prethodna stranica", @@ -448,24 +508,24 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Bottom Margin" => "Donja margina", "Header Margin" => "Margina zaglavlja", "Footer Margin" => "Margina podnožja", - "Insert Sheet" => "Убаци лист", - "Rename" => "Преименуј", - "Move or Copy…" => "Премести или копирај…", - "Duplicate" => "Дупликат", - "Tab Color" => "Боја картице", - "No Color" => "Без боје", - "Hide" => "Сакриј", - "Unhide…" => "Прикажи…", - "Select All Sheets" => "Изабери све листове", - "AutoSave" => "Аутоматско чување", + "Insert Sheet" => "Umetni list", + "Rename" => "Preimenuj", + "Move or Copy…" => "Premesti ili kopiraj…", + "Duplicate" => "Duplikat", + "Tab Color" => "Boja kartice", + "No Color" => "Bez boje", + "Hide" => "Sakrij", + "Unhide…" => "Prikaži…", + "Select All Sheets" => "Izaberi sve listove", + "AutoSave" => "Automatsko čuvanje", "AutoSave: save after every change (workbooks saved to a file)" => { - "Аутоматско чување: сачувај после сваке измене (свеске сачуване у датотеку)" + "Automatsko čuvanje: sačuvaj posle svake izmene (radne sveske sačuvane u datoteku)" } - "Previous sheet" => "Претходни лист", - "Next sheet" => "Следећи лист", - "All sheets" => "Сви листови", - "New sheet (⇧F11)" => "Нови лист (⇧F11)", - "Text Box" => "Текстуално поље", + "Previous sheet" => "Prethodni list", + "Next sheet" => "Sledeći list", + "All sheets" => "Svi listovi", + "New sheet (⇧F11)" => "Novi list (⇧F11)", + "Text Box" => "Tekstualno polje", "Macros" => "Makroi", "Record Macro" => "Snimi makro", "Stop Recording" => "Zaustavi snimanje", @@ -476,6 +536,31 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "Zaustavi", "New Macro" => "Novi makro", "Show" => "Prikaži", + "Generated|Column" => "Kolona", + "Generated|Row" => "Red", + "Book" => "Sveska", + "Sheet" => "List", + "Count Numbers" => "Broj brojeva", + "Type to filter…" => "Unesite tekst za filtriranje…", + "Nothing to paste." => "Nema podataka za lepljenje.", + "No cells were found." => "Nije pronađena nijedna ćelija.", + "Or select a category:" => "Ili izaberite kategoriju:", + "Most Recently Used" => "Nedavno korišćene", + "Insert Function…" => "Umetni funkciju…", + "Paste Names…" => "Nalepi imena…", + "Macro name:" => "Ime makroa:", + "Shortcut key:" => "Prečica na tastaturi:", + "Description:" => "Opis:", + "This workbook has no scripts or macros." => "Ova radna sveska nema skripte ni makroe.", + "Check for Updates…" => "Proveri ažuriranja…", + "Checking for updates…" => "Provera ažuriranja…", + "Could not check for updates." => "Nije moguće proveriti ažuriranja.", + "Check Again" => "Proveri ponovo", + "Insert Function" => "Umetni funkciju", + "Search:" => "Pretraga:", + "e.g. lookup, average, date" => "npr. LOOKUP, AVERAGE, DATE", + "Cancel" => "Otkaži", + "All" => "Sve", "Collapse dialog" => "Skupi dijalog", "Expand dialog" => "Proširi dijalog", _ => return None, diff --git a/crates/ui-egui/src/i18n/sr_functions.rs b/crates/ui-egui/src/i18n/sr_functions.rs new file mode 100644 index 0000000000..53c63b4c56 --- /dev/null +++ b/crates/ui-egui/src/i18n/sr_functions.rs @@ -0,0 +1,936 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 za pozitivno, -1 za negativno i 0 za nulu."), + ("A random integer between two bounds, inclusive.", "Nasumični ceo broj između dve granice, uključujući."), + ("A random number between 0 and 1, recalculated every time.", "Nasumični broj između 0 i 1, koji se ponovo izračunava svaki put."), + ("A range or array without its blank outer rows and columns.", "Opseg ili niz bez praznih spoljnih redova i kolona."), + ("A reference shifted from a starting point.", "Referenca pomerena sa početne tačke."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Statistika modela FORECAST.ETS: 1 alfa, 2 beta, 3 gama, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 veličina koraka.", + ), + ("A subtotal that can skip hidden rows.", "Međuzbir koji može preskočiti skrivene redove."), + ("Absolute value (modulus) of a complex number.", "Apsolutna vrednost (modul) kompleksnog broja."), + ("Absolute value of a number.", "Apsolutna vrednost broja."), + ("Accrued interest of a security paying interest at maturity.", "Obračunata kamata na hartiju od vrednosti koja isplaćuje kamatu po dospeću."), + ("Accrued interest of a security paying periodic interest.", "Obračunata kamata na hartiju od vrednosti koja periodično isplaćuje kamatu."), + ("Accumulates an array into one value.", "Akumulira niz u jednu vrednost."), + ("Adds all the numbers in the arguments.", "Sabira sve brojeve navedene u argumentima."), + ("Adds the cells that meet a condition.", "Vraća zbir numeričkih vrednosti u ćelijama tabele koje zadovoljavaju uslov."), + ("Adds the cells that meet every condition.", "Vraća zbir numeričkih vrednosti u ćelijama tabele koje zadovoljavaju sve uslove."), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Vraća zbir numeričkih vrednosti u polju baze podataka za zapise koji zadovoljavaju kriterijume.", + ), + ("Adds the squares of the numbers.", "Vraća zbir brojeva na kvadrat."), + ( + "Amount received at maturity for a fully invested security.", + "Iznos primljen po dospeću za hartiju od vrednosti u koju je uloženi iznos u celosti investiran.", + ), + ("An aggregate that can skip hidden rows and errors.", "Agregat koji može da preskoči skrivene redove i greške."), + ("Angle of a complex number in radians.", "Ugao kompleksnog broja u radijanima."), + ("Angle of the point (x, y) from the x-axis in radians.", "Ugao tačke (x, y) u odnosu na x-osu u radijanima."), + ("Annual yield of a discounted security.", "Godišnji prinos diskontne hartije od vrednosti."), + ("Annual yield of a security paying interest at maturity.", "Godišnji prinos hartije od vrednosti koja isplaćuje kamatu po dospeću."), + ("Applies a LAMBDA to each column.", "Primenjuje LAMBDA na svaku kolonu."), + ("Applies a LAMBDA to each row.", "Primenjuje LAMBDA na svaki red."), + ("Applies a LAMBDA to each value.", "Primenjuje LAMBDA na svaku vrednost."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Približno traženje u sortiranom vektoru ili prvom redu/koloni niza.", + ), + ("Arccosine in radians.", "Arkus kosinus u radijanima."), + ("Arccotangent in radians (0 to pi).", "Arkus kotangens u radijanima (0 do pi)."), + ("Arcsine in radians.", "Arkus sinus u radijanima."), + ("Arctangent in radians.", "Arkus tangens u radijanima."), + ("Arithmetic mean of the numbers.", "Aritmetička sredina brojeva."), + ("Average absolute deviation from the mean.", "Prosečno apsolutno odstupanje od srednje vrednosti."), + ("Average of the cells that meet a condition.", "Prosek ćelija tabele koje ispunjavaju uslov."), + ("Average of the cells that meet every condition.", "Prosek ćelija tabele koje ispunjavaju svaki uslov."), + ("Averages the numbers in a field of the records that meet the criteria.", "Usrednjuje brojeve u polju zapisa koji ispunjavaju kriterijume."), + ("Base-10 logarithm of a complex number.", "Logaritam sa osnovom 10 kompleksnog broja."), + ("Base-10 logarithm.", "Logaritam sa osnovom 10."), + ("Base-2 logarithm of a complex number.", "Logaritam kompleksnog broja sa osnovom 2."), + ("Bessel function of the first kind, J_n(x).", "Beselova funkcija prve vrste, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Beselova funkcija druge vrste, Y_n(x)."), + ("Beta distribution density or probability.", "Gustina ili verovatnoća beta distribucije."), + ("Binomial probability.", "Binomna verovatnoća."), + ("Bitwise AND of two non-negative integers.", "Pobitni AND od dva nenegativna cela broja."), + ("Bitwise OR of two non-negative integers.", "Pobitni OR od dva nenegativna cela broja."), + ("Bitwise exclusive OR of two non-negative integers.", "Ekskluzivni OR po bitu od dva nenegativna cela broja."), + ("Bond-equivalent yield of a Treasury bill.", "Prinos trezorskog zapisa ekvivalentan prinosu obveznice."), + ("Breaks a row or column into columns of the given length.", "Razbija red ili kolonu na kolone date dužine."), + ("Breaks a row or column into rows of the given length.", "Razbija red ili kolonu na redove date dužine."), + ("Builds a cell address as text from row and column numbers.", "Pravi adresu ćelije kao tekst iz brojeva redova i kolona."), + ("Builds a complex number as text from real and imaginary parts.", "Gradi kompleksan broj kao tekst iz realnih i imaginarnih delova."), + ("Builds a date serial number from a year, month and day.", "Pravi serijski broj datuma od godine, meseca i dana."), + ("Builds a summary table grouping values by row and column fields.", "Pravi zbirnu tabelu grupisajući vrednosti po poljima redova i kolona."), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "Izrađuje vreme (deo dana) od sati, minuta i sekundi."), + ("Builds an array from a LAMBDA.", "Pravi niz iz LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Pravi niz brojeva sa jednakim korakom."), + ("Builds an array of random numbers in a range.", "Pravi niz slučajnih brojeva u opsegu."), + ("Byte version of FIND.", "Bajtova verzija FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Bajtova verzija LEFT (isto kao LEFT za jednobajtni tekst)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Bajtova verzija LEN (isto kao LEN za jednobajtni tekst)."), + ("Byte version of MID (same as MID for single-byte text).", "Bajtova verzija MID (isto kao MID za jednobajtni tekst)."), + ("Byte version of REPLACE.", "Bajtova verzija REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Bajtova verzija RIGHT (isto kao RIGHT za jednobajtni tekst)."), + ("Byte version of SEARCH.", "Bajtova verzija SEARCH."), + ("Capitalises the first letter of each word and lower-cases the rest.", "Prvo slovo svake reči piše velikim slovom, a ostatak malim slovima."), + ("Chi-squared density or left-tailed probability.", "Gustina hi-kvadrat raspodele ili levostrana verovatnoća."), + ("Chi-squared test of independence.", "Hi-kvadrat test nezavisnosti."), + ("Column number of a reference.", "Broj kolone reference."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Upoređuje izraz sa listom vrednosti i vraća rezultat uparen sa prvim podudaranjem.", + ), + ("Complementary error function, 1 - ERF(x).", "Komplementarna funkcija greške, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Kompleksni konjugat kompleksnog broja."), + ("Confidence interval half-width using Student's t distribution.", "Polovina širine intervala poverenja korišćenjem Studentove t raspodele."), + ("Confidence interval half-width using the normal distribution.", "Polovina širine intervala poverenja korišćenjem normalne distribucije."), + ("Converts Roman numerals to a number.", "Pretvara rimske brojeve u broj."), + ("Converts a binary number to decimal.", "Konvertuje binarni broj u decimalni."), + ("Converts a binary number to hexadecimal.", "Konvertuje binarni broj u heksadecimalni."), + ("Converts a binary number to octal.", "Konvertuje binarni broj u oktalni."), + ("Converts a date written as text into a date serial number.", "Konvertuje datum napisan kao tekst u serijski broj datuma."), + ("Converts a decimal number to binary.", "Pretvara decimalni broj u binarni."), + ("Converts a decimal number to hexadecimal.", "Pretvara decimalni broj u heksadecimalni."), + ("Converts a decimal number to octal.", "Pretvara decimalni broj u oktalni."), + ("Converts a decimal price to fractional notation.", "Konvertuje decimalnu cenu u frakcionu notaciju."), + ("Converts a fractional price notation to a decimal number.", "Pretvara cenu zapisanu razlomkom u decimalni broj."), + ("Converts a hexadecimal number to binary.", "Konvertuje heksadecimalni broj u binarni."), + ("Converts a hexadecimal number to decimal.", "Konvertuje heksadecimalni broj u decimalni."), + ("Converts a hexadecimal number to octal.", "Konvertuje heksadecimalni broj u oktalni."), + ("Converts a measurement from one unit to another.", "Konvertuje merenje iz jedne jedinice u drugu."), + ("Converts a number to Roman numerals in one of five styles.", "Konvertuje broj u rimske brojeve u jednom od pet stilova."), + ("Converts a time written as text into a fraction of a day.", "Pretvara vreme napisano kao tekst u delić dana."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Konvertuje vrednost u broj: brojevi ostaju, TRUE je 1, sve ostalo je 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Pretvara niz u tekst, kao listu odvojenu zarezima ili kao strogu konstantu niza.", + ), + ("Converts an octal number to binary.", "Konvertuje oktalni broj u binarni."), + ("Converts an octal number to decimal.", "Konvertuje oktalni broj u decimalni."), + ("Converts an octal number to hexadecimal.", "Konvertuje oktalni broj u heksadecimalni."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Pretvara bilo koju vrednost u tekst, opciono u strogom obliku (pod navodnicima).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Pretvara između evra i nekadašnjih valuta članica evrozone po fiksnim kursevima.", + ), + ("Converts degrees to radians.", "Pretvara stepene u radijane."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Pretvara znakove pune širine u znakove poluširine (bez promene za jednobajtni tekst).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Pretvara znakove poluširine u znakove pune širine (bez promene za ovaj lokalitet).", + ), + ("Converts radians to degrees.", "Pretvara radijane u stepene."), + ("Converts text that looks like a number, date or time into a number.", "Pretvara tekst koji izgleda kao broj, datum ili vreme u broj."), + ( + "Converts text to a number using the given decimal and group separators.", + "Konvertuje tekst u broj koristeći date decimalne i grupne separatore.", + ), + ("Converts text to lower case.", "Pretvara tekst u mala slova."), + ("Converts text to upper case.", "Konvertuje tekst u velika slova."), + ("Correlation coefficient of two data sets.", "Koeficijent korelacije dva skupa podataka."), + ("Cosecant of a complex number.", "Kosekans kompleksnog broja."), + ("Cosecant of an angle in radians.", "Kosekans ugla u radijanima."), + ("Cosine of a complex number.", "Kosinus kompleksnog broja."), + ("Cosine of an angle in radians.", "Kosinus ugla u radijanima."), + ("Cotangent of a complex number.", "Kotangens kompleksnog broja."), + ("Cotangent of an angle in radians.", "Kotangens ugla u radijanima."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Broji dane između dva datuma u godini od 360 dana (US ili evropski metod).", + ), + ("Counts empty cells and empty text in a range.", "Broji prazne ćelije tabele i prazan tekst u opsegu."), + ("Counts how many values fall into each bin, as a vertical array.", "Broji koliko vrednosti pada u svaku korpu, kao vertikalni niz."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Broji ćelije tabele koje nisu prazne u polju podudarnih zapisa (ili odgovarajućih zapisa).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Broji numeričke ćelije tabele u polju odgovarajućih zapisa (ili podudarnih zapisa).", + ), + ("Counts the cells that meet a condition.", "Broji ćelije tabele koje ispunjavaju uslov."), + ("Counts the cells that meet every condition.", "Broji ćelije tabele koje ispunjavaju svaki uslov."), + ("Counts the characters in a text.", "Broji znakove u tekstu."), + ("Counts the columns in an array or range.", "Broji kolone u nizu ili opsegu."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Broji stavke u skupu kocki (bez veza kocke; #N/A)."), + ("Counts the non-empty values.", "Broji vrednosti koje nisu prazne."), + ("Counts the numbers.", "Broji brojeve."), + ("Counts the rows in an array or range.", "Broji redove u nizu ili opsegu."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Broji cele godine, mesece ili dane između dva datuma. jedinica: Y, M, D, MD, YM ili YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Broji radne dane (od ponedeljka do petka) između dva datuma, ne računajući praznike.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Broji radne dane između dva datuma sa prilagođenim vikendom, isključujući praznike.", + ), + ("Creates a link; the cell shows the friendly name, or the link itself.", "Pravi vezu; ćelija prikazuje naziv za prikaz ili samu vezu."), + ("Creates a reusable custom function.", "Kreira prilagođenu funkciju za višekratnu upotrebu."), + ("Cumulative beta probability.", "Kumulativna beta verovatnoća."), + ("Cumulative lognormal probability.", "Kumulativna lognormalna verovatnoća."), + ("Cuts off the fractional part of a number at the given digits.", "Odseca razlomljeni deo broja na zadatom broju cifara."), + ("Days from settlement to the next coupon date.", "Broj dana od poravnanja do sledećeg datuma isplate kupona."), + ("Days from the start of the coupon period to settlement.", "Broj dana od početka kuponskog perioda do poravnanja."), + ("Days in the coupon period that contains settlement.", "Broj dana u kuponskom periodu koji obuhvata datum poravnanja."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Amortizacija po opadajućoj vrednosti tokom zadatog raspona perioda, uz prelazak na linearnu amortizaciju.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Definiše skup članova kocke (bez veza kocke; #N/A)."), + ("Determinant of a square matrix.", "Odrednica kvadratne matrice."), + ("Difference of two complex numbers.", "Razlika dva kompleksna broja."), + ("Discount rate of a security.", "Diskontna stopa hartije od vrednosti."), + ("Double factorial of a number.", "Dvostruki faktorijel broja."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Amortizacija po dvostruko opadajućoj vrednosti (ili uz drugi faktor) za period.", + ), + ("Effective annual rate from a nominal rate and compounding periods.", "Efektivna godišnja stopa iz nominalne stope i perioda kapitalizacije."), + ("Equivalent interest rate for the growth of an investment.", "Ekvivalentna kamatna stopa za rast investicije."), + ("Error function integrated from 0 to a limit, or between two limits.", "Funkcija greške integrisana od 0 do granice, ili između dve granice."), + ("Error function integrated from 0 to x.", "Funkcija greške integrisana od 0 do x."), + ("Excess kurtosis of a sample.", "Eksces (kurtozis umanjen za 3) uzorka."), + ("Exponential curve coefficients and optional regression statistics.", "Koeficijenti eksponencijalne krive i opcione statistike regresije."), + ("Exponential distribution density or probability.", "Eksponencijalna gustina raspodele ili verovatnoća."), + ("Exponential of a complex number.", "Eksponencijalna funkcija kompleksnog broja."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Izdvaja podatke iz XML-a pomoću XPath izraza (nije dostupno; vraća #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Izdvaja prvo podudaranje, sva podudaranja ili grupe za hvatanje regularnog izraza.", + ), + ("F distribution density or left-tailed probability.", "F gustina raspodele ili levostrana verovatnoća."), + ("Factorial of a number.", "Faktorijal broja."), + ("Fetches data from a web service (not available; returns #VALUE!).", "Dohvata podatke sa veb usluge (nije dostupno; vraća #VALUE!)."), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Pronalazi vrednost u prvoj koloni tabele i vraća vrednost u istom redu druge kolone.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Pronalazi vrednost u prvom redu tabele i vraća vrednost u istoj koloni drugog reda.", + ), + ("Finds the position of one text in another (case-sensitive).", "Pronalazi poziciju jednog teksta u drugom (razlikuje velika i mala slova)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Pronalazi poziciju jednog teksta u drugom, zanemarujući velika i mala slova i dozvoljavajući džoker znakove.", + ), + ("Fisher transformation.", "Fišerova transformacija."), + ("Fixed-declining-balance depreciation for a period.", "Amortizacija po opadajućoj vrednosti uz fiksnu stopu za period."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Pretvara niz u jednu kolonu, opciono preskačući praznine ili greške.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Pretvara niz u jedan red, opciono preskačući praznine ili greške.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Predviđa vrednost aditivnim (AAA) eksponencijalnim izglađivanjem."), + ("Formats a number as currency text, like DOLLAR.", "Formatira broj kao tekst valute, na primer DOLLAR."), + ("Formats a number as currency text.", "Formatira broj kao tekst valute."), + ("Formats a number as text.", "Formatira broj kao tekst."), + ( + "French degressive depreciation with a life-based coefficient.", + "Francuska degresivna amortizacija sa koeficijentom zasnovanim na korisnom veku.", + ), + ("French linear depreciation prorated for the first period.", "Francuska linearna amortizacija proporcionalna za prvi period."), + ("Future value of a principal after a series of compound rates.", "Buduća vrednost glavnice nakon primene niza stopa uz složeno ukamaćivanje."), + ("Future value of an investment with constant payments and rate.", "Buduća vrednost investicije sa stalnim isplatama i stopom."), + ("Gamma distribution density or probability.", "Gustina ili verovatnoća gama distribucije."), + ("Geometric mean of positive numbers.", "Geometrijska sredina pozitivnih brojeva."), + ("Greatest common divisor of integers.", "Najveći zajednički delilac celih brojeva."), + ("Groups rows by key fields and aggregates the values of each group.", "Grupiše redove po ključnim poljima i agregira vrednosti svake grupe."), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Proširuje niz do zadate veličine, popunjavajući nove ćelije zadatom vrednošću za popunu.", + ), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "Pola širine intervala poverenja oko vrednosti FORECAST.ETS."), + ("Harmonic mean of positive numbers.", "Harmonična sredina pozitivnih brojeva."), + ("Hyperbolic cosecant of a complex number.", "Hiperbolički kosekans kompleksnog broja."), + ("Hyperbolic cosecant.", "Hiperbolički kosekans."), + ("Hyperbolic cosine of a complex number.", "Hiperbolički kosinus kompleksnog broja."), + ("Hyperbolic cosine.", "Hiperbolički kosinus."), + ("Hyperbolic cotangent.", "Hiperbolički kotangens."), + ("Hyperbolic secant of a complex number.", "Hiperbolički sekans kompleksnog broja."), + ("Hyperbolic secant.", "Hiperbolički sekans."), + ("Hyperbolic sine of a complex number.", "Hiperbolički sinus kompleksnog broja."), + ("Hyperbolic sine.", "Hiperbolički sinus."), + ("Hyperbolic tangent.", "Hiperbolički tangens."), + ("Hypergeometric probability of an exact count.", "Hipergeometrijska verovatnoća tačno zadatog broja uspeha."), + ("Hypergeometric probability.", "Hipergeometrijska verovatnoća."), + ("Identity matrix of the given size.", "Jedinična matrica zadate veličine."), + ("Imaginary coefficient of a complex number.", "Imaginarni koeficijent kompleksnog broja."), + ("Information about a cell.", "Informacije o ćeliji."), + ("Integer part of a division.", "Celobrojni deo deljenja."), + ("Interest paid in a period of a loan with even principal payments.", "Kamata plaćena u periodu zajma sa ravnomernim otplatama glavnice."), + ("Interest part of a given period's payment.", "Kamatni deo uplate za dati period."), + ("Interest rate of a fully invested security.", "Kamatna stopa hartije od vrednosti u koju je uloženi iznos u celosti investiran."), + ("Interest rate per period of an annuity, found iteratively.", "Kamatna stopa po periodu anuiteta, utvrđena iterativno."), + ("Internal rate of return of cash flows on specific dates.", "Interna stopa prinosa novčanih tokova na određene datume."), + ("Internal rate of return of periodic cash flows.", "Interna stopa prinosa periodičnih novčanih tokova."), + ("Inverse hyperbolic cosine.", "Inverzni hiperbolički kosinus."), + ("Inverse hyperbolic cotangent.", "Inverzni hiperbolički kotangens."), + ("Inverse hyperbolic sine.", "Inverzni hiperbolički sinus."), + ("Inverse hyperbolic tangent.", "Inverzni hiperbolički tangens."), + ("Inverse of a square matrix.", "Inverzna matrica kvadratne matrice."), + ("Inverse of the Fisher transformation.", "Inverzna Fišerova transformacija."), + ("Inverse of the cumulative beta distribution.", "Inverzna funkcija kumulativne beta raspodele."), + ("Inverse of the cumulative lognormal distribution.", "Inverzna funkcija kumulativne lognormalne raspodele."), + ("Inverse of the gamma cumulative distribution.", "Inverzna funkcija kumulativne gama raspodele."), + ("Inverse of the left-tailed F distribution.", "Inverzna funkcija levostrane F raspodele."), + ("Inverse of the left-tailed chi-squared distribution.", "Inverzna funkcija levostrane hi-kvadrat raspodele."), + ("Inverse of the normal cumulative distribution.", "Inverzna funkcija kumulativne normalne raspodele."), + ("Inverse of the right-tailed F distribution.", "Inverzna funkcija desnostrane F raspodele."), + ("Inverse of the right-tailed chi-squared distribution.", "Inverzna funkcija desnostrane hi-kvadrat raspodele."), + ("Inverse of the standard normal cumulative distribution.", "Inverzna funkcija kumulativne standardne normalne raspodele."), + ("Joins several text values into one.", "Spaja nekoliko tekstualnih vrednosti u jednu."), + ("Joins text from values and every cell of ranges, without a separator.", "Spaja tekst iz vrednosti i svake ćelije opsega, bez separatora."), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Spaja tekst iz vrednosti i opsega pomoću graničnika, opciono preskačući prazne stavke.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Čuva redove ili kolone od početka (ili kraja) niza."), + ("Keeps the rows or columns of an array whose include flag is TRUE.", "Čuva redove ili kolone niza čija je zastavica uključivanja TRUE."), + ("Largest number (0 when there are none).", "Najveći broj (0 kada ih nema)."), + ("Largest number in a field of the matching records.", "Najveći broj u polju odgovarajućih zapisa."), + ("Largest value among cells that meet every condition.", "Najveća vrednost među ćelijama tabele koje ispunjavaju svaki uslov."), + ("Largest value counting text as 0 and logicals as 1/0.", "Najveća vrednost, pri čemu se tekst računa kao 0, a logičke vrednosti kao 1/0."), + ("Least common multiple of integers.", "Najmanji zajednički višekratnik celih brojeva."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Koeficijenti prave dobijene metodom najmanjih kvadrata i opciona statistika regresije.", + ), + ("Left-tailed inverse of Student's t distribution.", "Levostrana inverzna funkcija Studentove t raspodele."), + ("Length of the repeating pattern detected in a time series.", "Dužina obrasca koji se ponavlja detektovan u vremenskoj seriji."), + ("Logarithm to the given base (10 by default).", "Logaritam na datu bazu (podrazumevano 10)."), + ("Lognormal density or probability.", "Lognormalna gustina ili verovatnoća."), + ("Macaulay duration of a security with periodic interest.", "Makolijeva duracija hartije od vrednosti sa periodičnom isplatom kamate."), + ("Matrix product of two arrays.", "Matrični proizvod dva niza."), + ("Mean after trimming a fraction of points from both ends.", "Srednja vrednost nakon odsecanja dela tačaka sa oba kraja."), + ( + "Mean counting text as 0 and logical values as 1 or 0.", + "Aritmetička sredina, pri čemu se tekst računa kao 0, a logičke vrednosti kao 1 ili 0.", + ), + ("Middle value of the numbers.", "Medijana brojeva."), + ("Modified Bessel function of the first kind, I_n(x).", "Modifikovana Beselova funkcija prve vrste, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Modifikovana Beselova funkcija druge vrste, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Modifikovana duracija hartije od vrednosti sa periodičnom isplatom kamate."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Modifikovana interna stopa prinosa korišćenjem odvojenih stopa zaduživanja i reinvestiranja.", + ), + ("Most frequently occurring number.", "Broj koji se najčešće pojavljuje."), + ("Multiplies all the numbers in the arguments.", "Množi sve brojeve u argumentima."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Množi odgovarajuće elemente nizova jednake veličine i sabira proizvode.", + ), + ("Multiplies the numbers in a field of the matching records.", "Umnožava brojeve u polju odgovarajućih zapisa."), + ("Names intermediate results.", "Imenuje međurezultate."), + ("Natural log of the gamma function.", "Prirodni logaritam gama funkcije."), + ("Natural logarithm of a complex number.", "Prirodni logaritam kompleksnog broja."), + ("Natural logarithm.", "Prirodni logaritam."), + ("Negative binomial probability.", "Verovatnoća negativne binomne raspodele."), + ("Net present value of cash flows on specific dates.", "Neto sadašnja vrednost novčanih tokova na određene datume."), + ("Net present value of periodic cash flows at a discount rate.", "Neto sadašnja vrednost periodičnih novčanih tokova po diskontnoj stopi."), + ("Next coupon date after settlement.", "Sledeći datum isplate kupona nakon poravnanja."), + ("Nominal annual rate from an effective rate and compounding periods.", "Nominalna godišnja stopa iz efektivne stope i perioda kapitalizacije."), + ("Normal distribution density or cumulative probability.", "Normalna gustina raspodele ili kumulativna verovatnoća."), + ("Number of areas in a reference.", "Broj oblasti u referenci."), + ("Number of combinations with repetition.", "Broj kombinacija sa ponavljanjem."), + ("Number of combinations without repetition.", "Broj kombinacija bez ponavljanja."), + ("Number of coupons payable between settlement and maturity.", "Broj kupona za isplatu između poravnanja i dospeća."), + ("Number of ordered selections with repetition.", "Broj uređenih izbora sa ponavljanjem."), + ("Number of ordered selections without repetition.", "Broj uređenih izbora bez ponavljanja."), + ("Number of periods needed to pay off or accumulate an amount.", "Broj perioda potrebnih da se isplati ili akumulira iznos."), + ("Number of sheets.", "Broj listova."), + ("One- or two-tailed Student's t probability.", "Jedno- ili dvostrana Studentova t verovatnoća."), + ("One-tailed probability of a z-test.", "Jednostrana verovatnoća z-testa."), + ("Pearson product-moment correlation coefficient.", "Pirsonov koeficijent korelacije proizvod-moment."), + ("Percent-encodes text for use in a URL.", "Procentualno kodira tekst za upotrebu u URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Periodično plaćanje zajma ili anuiteta sa stalnim isplatama i stopom.", + ), + ("Periods needed for an investment to grow to a target value.", "Periodi potrebni da bi investicija porasla do ciljne vrednosti."), + ("Picks a value from the list by its position.", "Bira vrednost sa liste prema njenoj poziciji."), + ("Picks columns of an array by position (negative counts from the end).", "Bira kolone niza po poziciji (negativne pozicije broje se od kraja)."), + ("Picks rows of an array by position (negative counts from the end).", "Bira redove niza po poziciji (negativne pozicije broje se od kraja)."), + ("Places arrays side by side.", "Postavlja nizove jedan pored drugog."), + ("Poisson probability.", "Poissonova verovatnoća."), + ("Population covariance of paired values.", "Kovarijansa populacije uparenih vrednosti."), + ("Population skewness.", "Koeficijent asimetrije populacije."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Standardna devijacija populacije, pri čemu se tekst računa kao 0, a logičke vrednosti kao 1/0.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Standardna devijacija populacije vrednosti polja u odgovarajućim zapisima.", + ), + ("Population standard deviation.", "Standardna devijacija populacije."), + ( + "Population variance counting text as 0 and logicals as 1/0.", + "Varijansa populacije, pri čemu se tekst računa kao 0, a logičke vrednosti kao 1/0.", + ), + ("Population variance of a field over the matching records.", "Varijansa populacije vrednosti polja u odgovarajućim zapisima."), + ("Population variance.", "Varijansa populacije."), + ("Positive square root.", "Pozitivan kvadratni koren."), + ("Predicts a value along a linear trend.", "Predviđa vrednost duž linearnog trenda."), + ("Present value of a series of equal future payments.", "Sadašnja vrednost serije jednakih budućih plaćanja."), + ("Previous coupon date on or before settlement.", "Prethodni datum isplate kupona na datum poravnanja ili pre njega."), + ("Price per 100 face value of a Treasury bill.", "Cena za 100 nominalne vrednosti trezorskog zapisa."), + ("Price per 100 face value of a discounted security.", "Cena na 100 jedinica nominalne vrednosti diskontne hartije od vrednosti."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Cena na 100 jedinica nominalne vrednosti hartije od vrednosti koja isplaćuje kamatu po dospeću.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Cena na 100 jedinica nominalne vrednosti hartije od vrednosti koja periodično isplaćuje kamatu.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "Cena na 100 jedinica nominalne vrednosti hartije od vrednosti sa prvim kuponskim periodom nestandardne dužine.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Cena na 100 jedinica nominalne vrednosti hartije od vrednosti sa poslednjim kuponskim periodom nestandardne dužine.", + ), + ("Principal part of a given period's payment.", "Deo uplate za dati period kojim se otplaćuje glavnica."), + ("Probability from Student's t-test.", "Verovatnoća iz Studentovog t-testa."), + ("Probability of a number of successes falling in a range.", "Verovatnoća da broj uspeha padne u opseg."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Verovatnoća da standardna normalna vrednost padne između srednje vrednosti i z.", + ), + ("Probability that values fall between two limits.", "Verovatnoća da vrednosti padaju između dve granice."), + ("Product of complex numbers.", "Proizvod kompleksnih brojeva."), + ("Quartile (0–4) of a data set, inclusive method.", "Kvartil (0–4) skupa podataka, inkluzivni metod."), + ("Quartile (0–4) of a data set.", "Kvartil (0–4) skupa podataka."), + ("Quartile (1–3) of a data set, exclusive method.", "Kvartil (1–3) skupa podataka, ekskluzivni metod."), + ("Quotient of two complex numbers.", "Količnik dva kompleksna broja."), + ("Raises a complex number to a power.", "Podiže kompleksni broj na stepen."), + ("Raises a number to a power.", "Podiže broj na stepen."), + ("Rank of a number within a list.", "Rang broja unutar liste."), + ("Rank of a number within a list; ties get the average rank.", "Rang broja unutar liste; jednake vrednosti dobijaju prosečan rang."), + ("Rank of a number within a list; ties share the top rank.", "Rang broja unutar liste; jednake vrednosti dobijaju najbolji zajednički rang."), + ("Ratio of the factorial of a sum to the product of factorials.", "Odnos faktorijala zbira i proizvoda faktorijala."), + ("Reads text in a given base as a number.", "Čita tekst u datoj osnovi kao broj."), + ("Real coefficient of a complex number.", "Realni koeficijent kompleksnog broja."), + ("Relative standing of a value as a fraction of the data set.", "Relativni rang vrednosti izražen kao udeo skupa podataka."), + ("Relative standing of a value from 0 to 1 inclusive.", "Relativni rang vrednosti od 0 do 1, uključujući granice."), + ("Relative standing of a value strictly between 0 and 1.", "Relativni rang vrednosti strogo između 0 i 1."), + ("Remainder of a division, with the sign of the divisor.", "Ostatak od deljenja, sa predznakom delioca."), + ("Removes leading and trailing spaces and collapses runs of spaces to one.", "Uklanja početne i zadnje razmake i skuplja niz razmaka na jedan."), + ("Removes non-printable control characters from text.", "Uklanja kontrolne znakove koji se ne mogu štampati iz teksta."), + ("Removes rows or columns from the start (or end) of an array.", "Uklanja redove ili kolone sa početka (ili kraja) niza."), + ("Repeats a text a given number of times.", "Ponavlja tekst određeni broj puta."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Zamenjuje podudaranja regularnog izraza, sve ili izabranu pojavu.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Zamenjuje pojavljivanje jednog teksta drugim, opciono samo dato pojavljivanje.", + ), + ("Replaces part of a text by position.", "Zamenjuje deo teksta po poziciji."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Vraća 1 kada je broj najmanje korak, inače 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Vraća 1 kada su dva broja jednaka, inače 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Vraća kod za vrstu vrednosti: 1 broj, 2 tekst, 4 logička, 16 greška, 64 niz.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Vraća zamensku vrednost kada je vrednost #N/A, inače samu vrednost."), + ("Returns a fallback when the value is an error, otherwise the value.", "Vraća zamensku vrednost kada je vrednost greška, inače samu vrednost."), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Vraća svojstvo ključnog pokazatelja uspešnosti iz kocke (bez veza sa kockom; #N/A).", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "Vraća člana ili uređenu n-torku iz kocke (bez veza sa kockom; #N/A)."), + ("Returns a property of a cube member (no cube connections; #N/A).", "Vraća svojstvo člana kocke (bez veza kocke; #N/A)."), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "Vraća agregiranu vrednost iz kocke (bez veza kocke; #N/A)."), + ("Returns characters from the middle of a text.", "Vraća znakove iz sredine teksta."), + ("Returns information about the operating environment.", "Vraća informacije o radnom okruženju."), + ("Returns one value when a condition is TRUE and another when it is FALSE.", "Vraća jednu vrednost kada je uslov TRUE i drugu kada je FALSE."), + ("Returns the #N/A error value.", "Vraća vrednost greške #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Vraća poziciju vrednosti u redu ili koloni zasnovanu na 1."), + ("Returns the ISO 8601 week number of a date.", "Vraća broj nedelje prema ISO 8601 za datum."), + ("Returns the Unicode code point of the first character of a text.", "Vraća Unicode kodnu tačku prvog karaktera teksta."), + ("Returns the Windows-1252 code of the first character of a text.", "Vraća Windows-1252 kod prvog znaka teksta."), + ("Returns the character for a Unicode code point.", "Vraća znak za Unicode kodnu tačku."), + ("Returns the character for a code from the Windows-1252 character set.", "Vraća znak za kod iz skupa znakova Windows-1252."), + ("Returns the current date and time.", "Vraća trenutni datum i vreme."), + ("Returns the current date.", "Vraća trenutni datum."), + ("Returns the date a number of months before or after a date.", "Vraća datum zadati broj meseci pre ili posle datuma."), + ("Returns the date a number of working days away with a custom weekend.", "Vraća datum udaljen zadati broj radnih dana, uz prilagođeni vikend."), + ("Returns the date a number of working days before or after a date.", "Vraća datum zadati broj radnih dana pre ili posle datuma."), + ("Returns the day of the month of a date.", "Vraća dan u mesecu za datum."), + ("Returns the day of the week of a date as a number.", "Vraća dan u nedelji datuma kao broj."), + ("Returns the distinct rows or columns of an array.", "Vraća različite redove ili kolone niza."), + ("Returns the element, row or column of an array at the given position.", "Vraća element, red ili kolonu niza na datoj poziciji."), + ("Returns the field value of the single record that meets the criteria.", "Vraća vrednost polja pojedinačnog zapisa koji ispunjava kriterijume."), + ("Returns the first characters of a text.", "Vraća prve znakove teksta."), + ("Returns the fraction of a year between two dates under a day-count basis.", "Vraća deo godine između dva datuma na osnovu brojanja dana."), + ("Returns the hour (0-23) of a time.", "Vraća sat (0-23) vremena."), + ("Returns the last characters of a text.", "Vraća poslednje znakove teksta."), + ("Returns the last day of the month a number of months away.", "Vraća poslednji dan meseca udaljenog za zadati broj meseci."), + ("Returns the logical value FALSE.", "Vraća logičku vrednost FALSE."), + ("Returns the logical value TRUE.", "Vraća logičku vrednost TRUE."), + ("Returns the minute (0-59) of a time.", "Vraća minut (0-59) vremena."), + ("Returns the month (1-12) of a date.", "Vraća mesec (1-12) datuma."), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "Vraća n-ti član skupa kocke (bez veza kocke; #N/A)."), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Vraća broj koji identifikuje vrednost greške, ili #N/A ako nije greška.", + ), + ("Returns the number of days between two dates.", "Vraća broj dana između dva datuma."), + ("Returns the phonetic (furigana) text; here the text itself.", "Vraća fonetski (furigana) tekst; ovde sam tekst."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Vraća poziciju vrednosti u redu ili koloni sa fleksibilnim režimima podudaranja i pretrage.", + ), + ("Returns the second (0-59) of a time.", "Vraća sekundu (0-59) vremena."), + ("Returns the text that comes after a delimiter.", "Vraća tekst koji dolazi posle graničnika."), + ("Returns the text that comes before a delimiter.", "Vraća tekst koji se nalazi ispred graničnika."), + ("Returns the value if it is text, otherwise empty text.", "Vraća vrednost ako je tekst, u suprotnom prazan tekst."), + ("Returns the value paired with the first condition that is TRUE.", "Vraća vrednost uparenu sa prvim uslovom koji je TRUE."), + ("Returns the week number of a date within its year.", "Vraća broj nedelje datuma u njegovoj godini."), + ("Returns the year of a date.", "Vraća godinu datuma."), + ("Reverses a logical value.", "Obrće logičku vrednost."), + ("Right-tailed F probability.", "Desnostrana F verovatnoća."), + ("Right-tailed Student's t probability.", "Desnorepa Studentova t verovatnoća."), + ("Right-tailed chi-squared probability.", "Desnostrana hi-kvadrat verovatnoća."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Zaokružuje broj i formatira ga kao tekst sa fiksnim decimalima i opcionim separatorima hiljada.", + ), + ("Rounds a number away from zero to a given number of digits.", "Zaokružuje broj u smeru od nule na zadati broj cifara."), + ("Rounds a number down to a multiple of significance.", "Zaokružuje broj naniže na višekratnik zadatog koraka zaokruživanja."), + ("Rounds a number down to the nearest integer or multiple.", "Zaokružuje broj naniže na najbliži ceo broj ili višekratnik."), + ("Rounds a number down to the nearest integer.", "Zaokružuje broj naniže na najbliži ceo broj (ka negativnoj beskonačnosti)."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Zaokružuje broj na zadati broj cifara; vrednosti tačno na polovini zaokružuje u smeru od nule.", + ), + ("Rounds a number to the nearest multiple.", "Zaokružuje broj na najbliži višekratnik."), + ("Rounds a number toward negative infinity to a multiple.", "Zaokružuje broj ka negativnoj beskonačnosti na višekratnik."), + ("Rounds a number toward positive infinity to a multiple.", "Zaokružuje broj ka pozitivnoj beskonačnosti na višekratnik."), + ("Rounds a number toward zero to a given number of digits.", "Zaokružuje broj prema nuli na dati broj cifara."), + ("Rounds a number up to a multiple of significance.", "Zaokružuje broj naviše na višekratnik zadatog koraka zaokruživanja."), + ("Rounds a number up to the nearest integer or multiple.", "Zaokružuje broj naviše na najbliži ceo broj ili višekratnik."), + ("Rounds away from zero to the nearest even integer.", "Zaokružuje od nule na najbliži paran ceo broj."), + ("Rounds away from zero to the nearest odd integer.", "Zaokružuje od nule na najbliži neparan ceo broj."), + ("Row number of a reference.", "Broj reda reference."), + ("Running accumulation of an array.", "Uzastopni međurezultati akumulacije elemenata niza."), + ("Sample covariance of paired values.", "Kovarijansa uzorka uparenih vrednosti."), + ("Sample skewness.", "Koeficijent asimetrije uzorka."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Standardna devijacija uzorka, pri čemu se tekst računa kao 0, a logičke vrednosti kao 1/0.", + ), + ("Sample standard deviation of a field over the matching records.", "Standardna devijacija uzorka vrednosti polja u odgovarajućim zapisima."), + ("Sample standard deviation.", "Standardna devijacija uzorka."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Varijansa uzorka, pri čemu se tekst računa kao 0, a logičke vrednosti kao 1/0."), + ("Sample variance of a field over the matching records.", "Varijansa uzorka vrednosti polja u odgovarajućim zapisima."), + ("Sample variance.", "Varijansa uzorka."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Pretražuje red ili kolonu i vraća odgovarajući element, red ili kolonu iz drugog niza.", + ), + ("Secant of a complex number.", "Sekans kompleksnog broja."), + ("Secant of an angle in radians.", "Sekans ugla u radijanima."), + ("Sheet number.", "Broj lista."), + ("Shifts the bits of a number left (right for negative shifts).", "Pomera bitove broja levo (desno za negativne pomake)."), + ("Shifts the bits of a number right (left for negative shifts).", "Pomera bitove broja udesno (levo za negativne pomake)."), + ("Sine of a complex number.", "Sinus kompleksnog broja."), + ("Sine of an angle in radians.", "Sinus ugla u radijanima."), + ("Slope of the least-squares regression line.", "Nagib linije regresije najmanjih kvadrata."), + ("Smallest number (0 when there are none).", "Najmanji broj (0 kada ih nema)."), + ("Smallest number in a field of the matching records.", "Najmanji broj u polju podudarnih zapisa."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Najmanji broj uspeha čija kumulativna binomna verovatnoća dostiže alfa.", + ), + ("Smallest value among cells that meet every condition.", "Najmanja vrednost među ćelijama tabele koje ispunjavaju svaki uslov."), + ("Smallest value counting text as 0 and logicals as 1/0.", "Najmanja vrednost, pri čemu se tekst računa kao 0, a logičke vrednosti kao 1/0."), + ("Sorts an array by the values of other arrays of matching size.", "Sortira niz prema vrednostima drugih nizova odgovarajuće veličine."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Sortira redove (ili kolone) niza po jednoj ili više njegovih kolona.", + ), + ("Spells out a number in Thai words with Baht.", "Navodi broj tajlandskim rečima sa bahtom."), + ("Splits text into a grid of columns and rows at the given delimiters.", "Deli tekst u mrežu kolona i redova na zadatim graničnicima."), + ("Square of the correlation coefficient.", "Kvadrat koeficijenta korelacije."), + ("Square root of a complex number.", "Kvadratni koren kompleksnog broja."), + ("Square root of the number times pi.", "Kvadratni koren broja puta pi."), + ("Stacks arrays on top of each other.", "Slaže nizove jedan na drugi."), + ("Standard error of predicted y values in a regression.", "Standardna greška predviđenih y vrednosti u regresiji."), + ("Standard normal cumulative probability.", "Standardna normalna kumulativna verovatnoća."), + ("Standard normal density or cumulative probability.", "Standardna normalna gustina ili kumulativna verovatnoća."), + ("Standard normal density.", "Standardna normalna gustina."), + ("Straight-line depreciation for one period.", "Pravolinijska amortizacija za jedan period."), + ("Student's t density or left-tailed probability.", "Studentova t gustina ili levostrana verovatnoća."), + ("Sum of a power series.", "Zbir stepenog reda."), + ("Sum of complex numbers.", "Zbir kompleksnih brojeva."), + ("Sum of squared deviations from the mean.", "Zbir kvadrata odstupanja od srednje vrednosti."), + ("Sum-of-years'-digits depreciation for a period.", "Amortizacija za period po metodu zbira rednih brojeva godina korisnog veka."), + ("Sums the differences of squares of matching elements.", "Sabira razlike kvadrata odgovarajućih elemenata."), + ("Sums the squared differences of matching elements.", "Sabira kvadrate razlika odgovarajućih elemenata."), + ("Sums the sums of squares of matching elements.", "Sabira zbirove kvadrata odgovarajućih elemenata."), + ("Swaps the rows and columns of an array.", "Menja redove i kolone niza."), + ("TRUE for references.", "TRUE za reference."), + ("TRUE when a LAMBDA argument was left out.", "TRUE kada je argument LAMBDA izostavljen."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE kada se regularni izraz podudara negde u tekstu."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE kada je neparan broj argumenata TRUE."), + ("TRUE when at least one argument is TRUE.", "TRUE kada je bar jedan argument TRUE."), + ("TRUE when every argument is TRUE.", "TRUE kada je svaki argument TRUE."), + ("TRUE when the cell has a formula.", "TRUE kada ćelija ima formulu."), + ("TRUE when the integer part of a number is even.", "Vraća TRUE ako je celobrojni deo broja paran."), + ("TRUE when the integer part of a number is odd.", "TRUE kada je celobrojni deo broja neparan."), + ("TRUE when the value is TRUE or FALSE.", "Vraća TRUE za logičke vrednosti TRUE i FALSE."), + ("TRUE when the value is a number.", "TRUE kada je vrednost broj."), + ("TRUE when the value is any error other than #N/A.", "Vraća TRUE za svaku grešku osim #N/A."), + ("TRUE when the value is any error.", "Vraća TRUE ako je vrednost greška."), + ("TRUE when the value is anything other than text.", "Vraća TRUE ako vrednost nije tekst."), + ("TRUE when the value is text.", "TRUE kada je vrednost tekst."), + ("TRUE when the value is the #N/A error.", "Vraća TRUE za grešku #N/A."), + ("TRUE when the value refers to an empty cell.", "TRUE kada se vrednost odnosi na praznu ćeliju."), + ("TRUE when two texts are identical, including case.", "TRUE kada su dva teksta identična, uključujući velika i mala slova."), + ("Tangent of a complex number.", "Tangens kompleksnog broja."), + ("Tangent of an angle in radians.", "Tangens ugla u radijanima."), + ("The constant pi to 15 digits.", "Konstanta pi do 15 cifara."), + ("The formula of a cell as text.", "Formula ćelije kao teksta."), + ("The gamma function.", "Funkcija gama."), + ("The k-th largest number in a data set.", "k-ti najveći broj u skupu podataka."), + ("The k-th smallest number in a data set.", "k-ti najmanji broj u skupu podataka."), + ("The reference named by a text string.", "Referenca imenovana tekstualnim nizom."), + ("The sum of a subset as a fraction of the sum of all the values.", "Vraća udeo zbira podskupa u zbiru svih vrednosti."), + ("Total interest paid between two periods.", "Ukupna kamata plaćena između dva perioda."), + ("Total principal repaid between two periods.", "Ukupna glavnica otplaćena između dva perioda."), + ("Two-tailed Student's t probability.", "Dvostrana Studentova t verovatnoća."), + ("Two-tailed inverse of Student's t distribution.", "Dvostrana inverzna funkcija Studentove t-raspodele."), + ("Two-tailed p-value of an F-test for equality of variances.", "Dvostrana p-vrednost F-testa jednakosti varijansi."), + ("Values along a fitted exponential growth curve.", "Vrednosti duž prilagođene krive eksponencijalnog rasta."), + ("Values along a least-squares linear fit.", "Vrednosti na pravoj prilagođenoj metodom najmanjih kvadrata."), + ("Vertical array of all the most frequent numbers.", "Vertikalni niz svih najčešćih brojeva."), + ("Weibull density or probability.", "Vejbulova gustina ili verovatnoća."), + ("Writes a number in another base, padded with zeros.", "Zapisuje broj u drugom brojnom sistemu, uz dopunjavanje nulama."), + ("Y-intercept of the least-squares regression line.", "Odsečak na Y-osi regresione prave dobijene metodom najmanjih kvadrata."), + ("Yield of a Treasury bill.", "Prinos državnih zapisa."), + ("Yield of a security paying periodic interest.", "Prinos hartije od vrednosti koja periodično isplaćuje kamatu."), + ("Yield of a security with an odd first period.", "Prinos hartije od vrednosti sa prvim kuponskim periodom nestandardne dužine."), + ("Yield of a security with an odd last period.", "Prinos hartije od vrednosti sa poslednjim kuponskim periodom nestandardne dužine."), + ("Z-score of a value.", "Z-rezultat vrednosti."), + ("e raised to the given power.", "e podignut na dati stepen."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-ti percentil, k od 0 do 1 uključujući."), + ("k-th percentile, k strictly between 0 and 1.", "k-ti percentil, za k strogo između 0 i 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "tip_reference"), + ("actual_range", "opseg_posmatranih_vrednosti"), + ("aggregation", "agregacija"), + ("alpha", "alfa"), + ("angle", "ugao"), + ("area_num", "broj_oblasti"), + ("argument", "argument"), + ("array", "niz"), + ("array_x", "niz_x_vrednosti"), + ("array_y", "niz_y_vrednosti"), + ("average_range", "opseg_za_prosek"), + ("base", "baza"), + ("basis", "osnova"), + ("beta", "beta"), + ("bins_array", "niz_granica_intervala"), + ("bottom", "donja_granica"), + ("by_array", "sortiraj_niz_ključeva"), + ("by_col", "po_kolonama"), + ("calc_method", "metod_izračunavanja"), + ("calculation", "izračunavanje"), + ("caption", "natpis"), + ("case_sensitivity", "osetljivost_na_velika_i_mala_slova"), + ("coefficients", "koeficijenti"), + ("col_delimiter", "graničnik_kolona"), + ("col_fields", "polja_kolona"), + ("col_index_num", "indeks_kolone"), + ("col_num", "broj_kolone"), + ("col_sort_order", "redosled_sortiranja_kolona"), + ("col_total_depth", "dubina_ukupnih_vrednosti_kolona"), + ("cols", "broj_kolona"), + ("column_num", "broj_kolone"), + ("columns", "broj_kolona"), + ("confidence_level", "nivo_poverenja"), + ("connection", "veza"), + ("const", "konstanta"), + ("cost", "početni_trošak"), + ("coupon", "kuponska_stopa"), + ("criteria", "kriterijumi"), + ("criteria_range", "opseg_kriterijuma"), + ("cumulative", "kumulativna_distribucija"), + ("data_all", "svi_podaci"), + ("data_array", "niz_podataka"), + ("data_completion", "kompletiranje_podataka"), + ("data_subset", "podskup_podataka"), + ("database", "baza_podataka"), + ("date", "datum"), + ("date_purchased", "datum_kupovine"), + ("date_text", "datum_napisan_kao_tekst"), + ("dates", "datumi"), + ("day", "dan"), + ("days", "dana"), + ("decimal_dollar", "decimalna_cena"), + ("decimal_separator", "decimalni_separator"), + ("decimals", "decimalna_mesta"), + ("default_or_value", "podrazumevani_rezultat_ili_vrednost"), + ("deg_freedom", "stepeni_slobode"), + ("delimiter", "graničnik"), + ("denominator", "imenilac"), + ("dimension", "dimenzija"), + ("discount", "diskontna_stopa"), + ("divisor", "delilac"), + ("effect_rate", "efektivna_stopa"), + ("end_date", "datum_završetka"), + ("end_period", "poslednji_period"), + ("error_val", "vrednost_greške"), + ("exactly_once", "tačno_jednom"), + ("expected_range", "očekivani_opseg"), + ("expression", "izraz"), + ("factor", "faktor"), + ("field", "polje_baze_podataka"), + ("field_headers", "zaglavlja_polja"), + ("field_relationship", "odnos_između_polja"), + ("filter_array", "niz_filtera"), + ("finance_rate", "kamatna_stopa_za_finansiranje"), + ("find_text", "traženi_tekst"), + ("first_coupon", "datum_uplate_prvog_kupona"), + ("first_interest", "datum_prve_uplate_kamate"), + ("first_period", "datum_kraja_prvog_perioda"), + ("form", "oblik"), + ("format", "format"), + ("format_text", "format_teksta"), + ("fraction", "razlomak"), + ("fractional_dollar", "cena_zapisana_razlomkom"), + ("frequency", "učestalost_plaćanja_kupona"), + ("friendly_name", "naziv_za_prikaz"), + ("from_unit", "izvorna_merna_jedinica"), + ("full_precision", "puna_preciznost"), + ("function", "funkcija"), + ("function_num", "broj_funkcije"), + ("fv", "buduća_vrednost"), + ("group_separator", "separator_grupe"), + ("guess", "početna_procena"), + ("height", "visina"), + ("holidays", "praznici"), + ("hour", "sat"), + ("i_num", "imaginarni_koeficijent"), + ("if_empty", "ako_je_prazno"), + ("if_not_found", "ako_nije_pronađeno"), + ("ignore", "zanemari"), + ("ignore_empty", "zanemari_prazno"), + ("include", "uključi"), + ("index_num", "broj_indeksa"), + ("info_type", "tip_informacije"), + ("initial_value", "početna_vrednost"), + ("instance_num", "broj_pojavljivanja"), + ("inumber", "kompleksni_broj"), + ("investment", "investicija"), + ("issue", "datum_izdavanja"), + ("k", "k"), + ("known_xs", "poznate_x_vrednosti"), + ("known_ys", "poznate_y_vrednosti"), + ("kpi_name", "naziv_indikatora_ključnog_učinka"), + ("kpi_property", "svojstvo_ključnog_indikatora_učinka"), + ("lambda", "lambda"), + ("last_interest", "poslednji_datum_plaćanja_kamate"), + ("life", "korisni_vek"), + ("link_location", "lokacija_veze"), + ("logical", "logička_vrednost"), + ("logical_test", "logički_uslov"), + ("lookup_array", "niz_pretrage"), + ("lookup_value", "tražena_vrednost"), + ("lookup_vector", "vektor_pretraživanja"), + ("lower_limit", "donja_granica"), + ("m", "m"), + ("match_end", "granica_teksta_kao_graničnik"), + ("match_mode", "režim_poklapanja"), + ("match_type", "metod_podudaranja"), + ("maturity", "datum_dospeća"), + ("max", "maksimalno"), + ("max_range", "opseg_za_maksimum"), + ("mean", "aritmetička_sredina"), + ("member_expression", "izraz_člana_kocke"), + ("method", "metod"), + ("min", "minimum"), + ("min_length", "minimalna_dužina"), + ("min_range", "opseg_za_minimum"), + ("minute", "minut"), + ("mode", "režim_proračuna"), + ("month", "mesec"), + ("months", "meseci"), + ("multiple", "višekratnik"), + ("n", "n"), + ("name", "ime"), + ("new_text", "novi_tekst"), + ("new_xs", "nove_x_vrednosti"), + ("no_commas", "izostaviti_separatore_grupa_cifara"), + ("no_switch", "ne_menjajte_metod_amortizacije"), + ("nominal_rate", "nominalna_stopa"), + ("nper", "broj_perioda"), + ("npery", "periodi_godišnje"), + ("num_bytes", "broj_bajtova"), + ("num_chars", "broj_znakova"), + ("num_digits", "broj_cifara"), + ("number", "broj"), + ("number_chosen", "broj_izabranih_elemenata"), + ("number_f", "broj_neuspeha"), + ("number_pop", "veličina_populacije"), + ("number_s", "broj_uspeha"), + ("number_sample", "veličina_uzorka"), + ("number_times", "broj_ponavljanja"), + ("numerator", "brojilac"), + ("occurrence", "pojava"), + ("old_text", "stari_tekst"), + ("options", "opcije"), + ("order", "redosled"), + ("pad_with", "vrednost_za_popunu"), + ("par", "nominalna_vrednost"), + ("parameter", "parametar"), + ("pattern", "obrazac_regularnog_izraza"), + ("per", "period"), + ("percent", "procenat"), + ("period", "period"), + ("places", "broj_izlaznih_cifara"), + ("pmt", "plaćanje"), + ("population_s", "broj_uspeha_u_populaciji"), + ("power", "stepen"), + ("pr", "cena"), + ("principal", "glavnica"), + ("prob_range", "opseg_verovatnoća"), + ("probability", "verovatnoća"), + ("probability_s", "verovatnoća_uspeha"), + ("property", "ime_svojstva"), + ("pv", "sadašnja_vrednost"), + ("quart", "kvartil"), + ("radix", "osnova_brojnog_sistema"), + ("range", "opseg"), + ("range_lookup", "traženje_opsega"), + ("rank", "rang"), + ("rate", "stopa"), + ("real_num", "realni_koeficijent"), + ("redemption", "otkupna_vrednost"), + ("ref", "referenca"), + ("ref_text", "tekst_reference"), + ("reference", "referenca"), + ("reinvest_rate", "kamatna_stopa_za_reinvestiranje"), + ("relative_to", "u_odnosu_na"), + ("replacement", "zamena"), + ("result", "rezultat"), + ("result_vector", "vektor_rezultata"), + ("return_array", "povratni_niz"), + ("return_mode", "režim_povratka"), + ("return_type", "tip_povratka"), + ("row_delimiter", "graničnik_redova"), + ("row_fields", "polja_redova"), + ("row_index_num", "indeks_reda"), + ("row_num", "broj_reda"), + ("row_sort_order", "redosled_sortiranja_redova"), + ("row_total_depth", "dubina_ukupnih_vrednosti_redova"), + ("rows", "broj_redova"), + ("salvage", "preostala_vrednost"), + ("sample_s", "broj_uspeha_u_uzorku"), + ("scan_by_column", "skeniranje_po_koloni"), + ("schedule", "raspored"), + ("search_mode", "režim_pretrage"), + ("seasonality", "sezonalnost"), + ("second", "sekunda"), + ("serial_number", "serijski_broj"), + ("set", "skup_članova_kocke"), + ("set_expression", "izraz_skupa_članova_kocke"), + ("settlement", "datum_poravnanja"), + ("sheet_text", "tekst_lista"), + ("shift_amount", "broj_pomerenih_bitova"), + ("sigma", "sigma"), + ("significance", "korak_ili_preciznost"), + ("size", "veličina"), + ("sort_by", "sortiraj_po"), + ("sort_index", "indeks_sortiranja"), + ("sort_order", "redosled_sortiranja"), + ("source", "izvor"), + ("standard_dev", "standardna_devijacija"), + ("start", "početna_vrednost"), + ("start_date", "datum_početka"), + ("start_num", "početna_pozicija"), + ("start_period", "početni_period"), + ("statistic_type", "tip_statistike"), + ("stats", "statistika"), + ("step", "korak"), + ("suffix", "sufiks"), + ("sum_range", "opseg_za_sabiranje"), + ("table_array", "niz_tabele"), + ("tails", "broj_distributivnih_repova"), + ("target", "cilj"), + ("target_date", "ciljni_datum"), + ("text", "tekst"), + ("time_text", "vreme_napisano_kao_tekst"), + ("timeline", "vremenska_linija"), + ("to_unit", "ciljna_merna_jedinica"), + ("top", "gornja_granica"), + ("total_depth", "ukupna_dubina"), + ("trials", "broj_pokušaja"), + ("triangulation_precision", "preciznost_triangulacije"), + ("trim_cols", "režim_isecanja_kolone"), + ("trim_rows", "režim_sečenja_redova"), + ("type", "tip"), + ("type_text", "ime_tipa_podataka"), + ("unit", "merna_jedinica"), + ("upper_limit", "gornja_granica"), + ("url", "url"), + ("value", "vrednost"), + ("value_if_error", "rezultat_u_slučaju_greške"), + ("value_if_false", "rezultat_kada_je_uslov_netačan"), + ("value_if_na", "rezultat_za_grešku_nedostupno"), + ("value_if_true", "rezultat_kada_je_uslov_istinit"), + ("values", "ulazne_vrednosti"), + ("vector", "vektor"), + ("weekend", "vikend"), + ("whole_number", "ceo_broj"), + ("width", "širina"), + ("within_text", "tekst_za_pretragu"), + ("wrap_count", "broj_vrednosti_po_redu_ili_koloni"), + ("x", "x"), + ("x_num", "x_koordinata"), + ("x_range", "x_opseg"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "y_koordinata"), + ("year", "godina"), + ("yld", "prinos_ulaganja"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/sv.rs b/crates/ui-egui/src/i18n/sv.rs new file mode 100644 index 0000000000..d8e6f8ab21 --- /dev/null +++ b/crates/ui-egui/src/i18n/sv.rs @@ -0,0 +1,1204 @@ +//! Swedish translations for the interface strings in i18n.rs. Labels follow Microsoft +//! Excel's Swedish wording; anything absent falls back to English. + +/// Translates an English interface label to Swedish using Microsoft Excel terminology. +pub(super) fn translate(text: &str) -> Option<&'static str> { + Some(match text { + " (password)" => " (lösenord)", + " (password, unlocked)" => " (lösenord, upplåst)", + "$ English (United States)" => "$ Engelska (USA)", + "'{file}' is protected." => "'{file}' är skyddad.", + "(No suggestions)" => "(Inga förslag)", + "(none)" => "(ingen)", + "(unnamed)" => "(namnlös)", + "+ Add Level" => "+ Lägg till nivå", + "100%" => "100 %", + "100% Stacked Area" => "100 % staplad yta", + "100% Stacked Bar" => "100 % staplad liggande stapel", + "100% Stacked Column" => "100 % staplad kolumn", + "20% - Accent1" => "20% - Accent1", + "20% - Accent2" => "20% - Accent2", + "20% - Accent3" => "20% - Accent3", + "20% - Accent4" => "20% - Accent4", + "20% - Accent5" => "20% - Accent5", + "20% - Accent6" => "20% - Accent6", + "3 Arrows" => "3 pilar", + "3 Symbols" => "3 symboler", + "3 Traffic Lights" => "3 trafikljus", + "4 Ratings" => "4 omdömen", + "40% - Accent1" => "40% - Accent1", + "40% - Accent2" => "40% - Accent2", + "40% - Accent3" => "40% - Accent3", + "40% - Accent4" => "40% - Accent4", + "40% - Accent5" => "40% - Accent5", + "40% - Accent6" => "40% - Accent6", + "5 Arrows" => "5 pilar", + "5 Quarters" => "5 cirklar", + "60% - Accent1" => "60% - Accent1", + "60% - Accent2" => "60% - Accent2", + "60% - Accent3" => "60% - Accent3", + "60% - Accent4" => "60% - Accent4", + "60% - Accent5" => "60% - Accent5", + "60% - Accent6" => "60% - Accent6", + "A CSV file, web page or PDF is a copy: the workbook keeps its own file." => { + "En CSV-fil, webbsida eller PDF är en kopia: arbetsboken behåller sin egen fil." + } + "A Date Occurring…" => "Ett datum som inträffar…", + "A to Z" => "A till Ö", + "About" => "Om", + "About\nGridCraft" => "Om\nGridCraft", + "About GridCraft" => "Om GridCraft", + "Above Average" => "Över genomsnittet", + "Accent1" => "Accent1", + "Accent2" => "Accent2", + "Accent3" => "Accent3", + "Accent4" => "Accent4", + "Accent5" => "Accent5", + "Accent6" => "Accent6", + "Accessibility" => "Tillgänglighet", + "Account" => "Konto", + "Accounting" => "Redovisning", + "Accounting Number Format" => "Redovisningsformat", + "Action" => "Åtgärd", + "Action\nJournal" => "Åtgärds-\njournal", + "Action Journal" => "Åtgärdsjournal", + "Add" => "Lägg till", + "Add Chart\nElement" => "Lägg till\ndiagramelement", + "Add Chart Element" => "Lägg till diagramelement", + "Add footer" => "Lägg till sidfot", + "Add header" => "Lägg till sidhuvud", + "Add subtotal to (columns, e.g. C,D):" => "Lägg till delsumma för (kolumner, t.ex. C,D):", + "Add to Dictionary" => "Lägg till i ordlistan", + "Add-in and Automation" => "Tillägg och automatisering", + "Agent\nControl" => "Agent-\nkontroll", + "Agent Control" => "Agentkontroll", + "Aggregate duplicates using" => "Sammanställ dubbletter med", + "Align Left" => "Vänsterjustera", + "Align Right" => "Högerjustera", + "Align with Page Margins" => "Justera efter sidmarginaler", + "Alignment" => "Justering", + "All" => "Alla", + "All Borders" => "Alla kantlinjer", + "All Charts" => "Alla diagram", + "All done. We made {count} replacements." => "Klart. Vi har gjort {count} ersättningar.", + "All except borders" => "Allt utom kantlinjer", + "All sheets" => "Alla blad", + "Allow" => "Tillåt", + "Allow Edit\nRanges" => "Tillåt redigering\nav intervall", + "Allow Edit Ranges" => "Tillåt redigering av intervall", + "Allow all users of this sheet to:" => "Tillåt alla användare av kalkylbladet att:", + "Alpha:" => "Alfa:", + "Analysis Tools" => "Analysverktyg", + "Angle Clockwise" => "Medurs vinkel", + "Angle Counterclockwise" => "Moturs vinkel", + "Animations" => "Animeringar", + "Anova: Single Factor" => "ANOVA: Enfaktor", + "Any value" => "Valfritt värde", + "Apply" => "Tillämpa", + "Area" => "Yta", + "Arrow" => "Pil", + "At each change in (column letter):" => "Vid varje ändring i (kolumnbokstav):", + "Author" => "Författare", + "Auto" => "Automatiskt", + "AutoFit Column Width" => "Autopassa kolumnbredd", + "AutoFit Row Height" => "Autopassa radhöjd", + "AutoSave" => "Spara automatiskt", + "AutoSave: save after every change (workbooks saved to a file)" => { + "Spara automatiskt: spara efter varje ändring (arbetsböcker sparade till fil)" + } + "AutoSum" => "Autosumma", + "AutoSum (⌘⇧T)" => "Autosumma (⌘⇧T)", + "Automate" => "Automatisera", + "Automatic" => "Automatiskt", + "Automatic Except for Data Tables" => "Automatiskt förutom datatabeller", + "Average" => "Medel", + "Back" => "Tillbaka", + "Background Color:" => "Bakgrundsfärg:", + "Bad" => "Dålig", + "Bar" => "Liggande stapel", + "Before sheet (position, 0 = first):" => "Före blad (position, 0 = först):", + "Below Average" => "Under genomsnittet", + "Between…" => "Mellan…", + "Bin Range (blank for automatic bins):" => "Klassintervall (tomt för automatiska klasser):", + "Blank workbook" => "Tom arbetsbok", + "Blanks" => "Tomma", + "Blue" => "Blå", + "Blue - White - Red" => "Blå - Vit - Röd", + "Bold" => "Fet", + "Bold (⌘B)" => "Fet (⌘B)", + "Border" => "Kantlinje", + "Borders" => "Kantlinjer", + "Bottom" => "Nederkant", + "Bottom\nAlign" => "Justera\nlängst ned", + "Bottom 10 Items" => "De 10 nedersta", + "Bottom 10%" => "De 10 % nedersta", + "Bottom Align" => "Justera längst ned", + "Bottom Border" => "Nedre kantlinje", + "Bottom Double Border" => "Dubbel nedre kantlinje", + "Bottom Margin" => "Nedre marginal", + "Bottom margin (in):" => "Nedre marginal (tum):", + "Box & Whisker" => "Lådagram", + "Breaks" => "Brytningar", + "Browse…" => "Bläddra…", + "Bubble" => "Bubbeldiagram", + "By Changing Variable Cells:" => "Genom att ändra variabelceller:", + "By changing cell:" => "Genom att ändra cell:", + "CSV (Comma delimited)" => "CSV (kommaavgränsad)", + "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (kommaavgränsad) (*.csv)", + "Calculate" => "Beräkna", + "Calculate Now" => "Beräkna nu", + "Calculate Now (F9)" => "Beräkna nu (F9)", + "Calculate Sheet" => "Beräkna blad", + "Calculate Sheet (⇧F9)" => "Beräkna blad (⇧F9)", + "Calculated Field…" => "Beräknat fält…", + "Calculation" => "Beräkning", + "Calculation\nOptions" => "Beräknings-\nalternativ", + "Calculation Options" => "Beräkningsalternativ", + "Calculation settings are saved with the workbook." => "Beräkningsinställningar sparas med arbetsboken.", + "Cancel" => "Avbryt", + "Category:" => "Kategori:", + "Cell\nStyles" => "Cell-\nformat", + "Cell Color" => "Cellfärg", + "Cell Styles" => "Cellformat", + "Cell Values" => "Cellvärden", + "Center" => "Centrera", + "Center Across Selection" => "Centrera över markering", + "Change" => "Ändra", + "Change\nChart Type" => "Ändra\ndiagramtyp", + "Change All" => "Ändra alla", + "Change Chart Type" => "Ändra diagramtyp", + "Change File Type" => "Ändra filtyp", + "Chart" => "Diagram", + "Diagram" => "Flödesschema", + "Decorative Text" => "Dekorativ text", + "Chart\nTitle" => "Diagram-\nrubrik", + "Chart Design" => "Diagramdesign", + "Chart Title" => "Diagramrubrik", + "Chart data range:" => "Diagrammets dataområde:", + "Check\nAccessibility" => "Kontrollera\ntillgänglighet", + "Check Accessibility" => "Kontrollera tillgänglighet", + "Check Cell" => "Kontrollcell", + "Checkbox" => "Kryssruta", + "Choose a PNG or JPEG no larger than 16 MB." => "Välj en PNG- eller JPEG-fil som är högst 16 MB.", + "Choose fields to add to report:" => "Välj fält som ska läggas till i rapporten:", + "Circle Invalid Data" => "Ringa in ogiltiga data", + "Circular References" => "Cirkelreferenser", + "Clear" => "Rensa", + "Clear All" => "Rensa allt", + "Clear Comments and Notes" => "Rensa kommentarer och anteckningar", + "Clear Contents" => "Rensa innehåll", + "Clear Filter" => "Rensa filter", + "Clear Formats" => "Rensa format", + "Clear Hyperlinks" => "Rensa hyperlänkar", + "Clear Print Area" => "Rensa utskriftsområde", + "Clear Rules" => "Rensa regler", + "Clear Rules from Entire Sheet" => "Rensa regler från hela bladet", + "Clear Rules from Selected Cells" => "Rensa regler från markerade celler", + "Clear Validation" => "Rensa verifiering", + "Click to add data" => "Klicka för att lägga till data", + "Close" => "Stäng", + "Clustered Bar" => "Grupperad liggande stapel", + "Clustered Column" => "Grupperad kolumn", + "Color Scales" => "Färgskalor", + "Color:" => "Färg:", + "Column" => "Kolumn", + "Column Width" => "Kolumnbredd", + "Column Width…" => "Kolumnbredd…", + "Column chart" => "Kolumndiagram", + "Column or Bar" => "Kolumn eller liggande stapel", + "Column width (characters):" => "Kolumnbredd (tecken):", + "Column widths" => "Kolumnbredder", + "Columns" => "Kolumner", + "Columns (blank = all, e.g. A,C):" => "Kolumner (tomt = alla, t.ex. A,C):", + "Combo" => "Kombinationsdiagram", + "Comma" => "Komma", + "Comma Style" => "Tusentalsavgränsare", + "Comma [0]" => "Komma [0]", + "Command\nPalette" => "Kommando-\npalett", + "Comment" => "Kommentar", + "Comment:" => "Kommentar:", + "Comments" => "Kommentarer", + "Comments and notes (C)" => "Kommentarer och anteckningar (C)", + "Comments pane" => "Kommentarsfönster", + "Compact" => "Kompakt", + "Company" => "Företag", + "Compatibility" => "Kompatibilitet", + "Conditional\nFormatting" => "Villkorsstyrd\nformatering", + "Conditional Formatting" => "Villkorsstyrd formatering", + "Conditional Formatting Rules Manager" => "Hanteraren för regler för villkorsstyrd formatering", + "Conditional formats" => "Villkorsstyrda format", + "Confidence Level (%):" => "Konfidensgrad (%):", + "Confidence Level for Mean (%), blank for none:" => "Konfidensgrad för medelvärde (%), tomt för ingen:", + "Confidence interval" => "Konfidensintervall", + "Confidence level (%):" => "Konfidensgrad (%):", + "Constant is Zero" => "Konstanten är noll", + "Constants" => "Konstanter", + "Contributors" => "Medverkande", + "Convert\nto Range" => "Konvertera\ntill intervall", + "Convert Text to Columns" => "Konvertera text till kolumner", + "Convert the last ink stroke to a shape" => "Konvertera det senaste pennstrecket till en form", + "Convert to Comments" => "Konvertera till kommentarer", + "Convert to Number" => "Konvertera till tal", + "Convert to Range" => "Konvertera till intervall", + "Copies" => "Kopior", + "Copy" => "Kopiera", + "Copy (⌘C)" => "Kopiera (⌘C)", + "Correlation" => "Korrelation", + "Count" => "Antal", + "CountA" => "AntalV", + "Covariance" => "Kovarians", + "Create Forecast Worksheet" => "Skapa prognosblad", + "Create PDF" => "Skapa PDF", + "Create Sparklines" => "Skapa minidiagram", + "Create a copy" => "Skapa en kopia", + "Create from Selection" => "Skapa från markering", + "Cube" => "Kub", + "Cumulative Percentage" => "Kumulativ procentsats", + "Currency" => "Valuta", + "Currency [0]" => "Valuta [0]", + "Current\nDate" => "Aktuellt\ndatum", + "Current\nTime" => "Aktuell\ntid", + "Current Date" => "Aktuellt datum", + "Current Time" => "Aktuell tid", + "Current region" => "Aktuell region", + "Custom" => "Anpassat", + "Custom (%):" => "Anpassad (%):", + "Custom Margins…" => "Anpassade marginaler…", + "Custom Sort" => "Anpassad sortering", + "Custom Sort…" => "Anpassad sortering…", + "Cut" => "Klipp ut", + "Cut (⌘X)" => "Klipp ut (⌘X)", + "Damping factor:" => "Dämpningsfaktor:", + "Dark" => "Mörkt", + "Dark Mode" => "Mörkt läge", + "Data" => "Data", + "Data\nAnalysis" => "Data-\nanalys", + "Data\nValidation" => "Data-\nverifiering", + "Data Analysis" => "Dataanalys", + "Data Bars" => "Datastaplar", + "Data Labels: None" => "Dataetiketter: Inga", + "Data Labels: Show" => "Dataetiketter: Visa", + "Data Range:" => "Dataområde:", + "Data Table…" => "Datatabell…", + "Data Validation" => "Dataverifiering", + "Data Validation…" => "Dataverifiering…", + "Data and Model" => "Data och modell", + "Data validation" => "Dataverifiering", + "Database" => "Databas", + "Date" => "Datum", + "Date &\nTime" => "Datum &\ntid", + "Date & Time" => "Datum och tid", + "Date unit" => "Datumenhet", + "Day" => "Dag", + "Decimal" => "Decimal", + "Decrease Decimal" => "Minska decimaler", + "Decrease Font Size" => "Minska teckenstorlek", + "Decrease Indent" => "Minska indrag", + "Default Width…" => "Standardbredd…", + "Define Name" => "Definiera namn", + "Define Name…" => "Definiera namn…", + "Delete" => "Ta bort", + "Delete\nChart" => "Ta bort\ndiagram", + "Delete Cells…" => "Ta bort celler…", + "Delete Comment" => "Ta bort kommentar", + "Delete Sheet" => "Ta bort blad", + "Delete Sheet Columns" => "Ta bort kolumner", + "Delete Sheet Rows" => "Ta bort rader", + "Delete chart" => "Ta bort diagram", + "Delete rows" => "Ta bort rader", + "Delete…" => "Ta bort…", + "Description" => "Beskrivning", + "Description (optional):" => "Beskrivning (valfritt):", + "Descriptive Statistics" => "Beskrivande statistik", + "Destination:" => "Mål:", + "Diagonal ↗" => "Diagonal ↗", + "Diagonal ↘" => "Diagonal ↘", + "Different First Page" => "Annorlunda första sida", + "Different Odd & Even Pages" => "Udda och jämna sidor", + "Dismiss" => "Avfärda", + "Display theme" => "Visningstema", + "Display:" => "Visa:", + "Distributed" => "Fördela", + "Divide" => "Dividera", + "Do you want to save the changes you made to {title}?" => "Vill du spara ändringarna i {title}?", + "Don't Save" => "Spara inte", + "Double" => "Dubbel", + "Double Accounting" => "Dubbel redovisning", + "Double Underline" => "Dubbelt understruken", + "Doughnut" => "Ringdiagram", + "Down" => "Nedåt", + "Download" => "Ladda ned", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "Dra för att fylla celler. Dra inifrån en cell för att markera ett intervall." + } + "Drag to freeze columns" => "Dra för att frysa kolumner", + "Drag to freeze rows" => "Dra för att frysa rader", + "Draw" => "Rita", + "Draw with ink" => "Rita med pennanteckning", + "Duplicate" => "Duplicera", + "Duplicate Values…" => "Dubblettvärden…", + "Edit" => "Redigera", + "Edit Name" => "Redigera namn", + "Edit chart title" => "Redigera diagramrubrik", + "Edit…" => "Redigera…", + "Enable AutoComplete for cell values" => "Aktivera Komplettera automatiskt för cellvärden", + "Enable iterative calculation" => "Aktivera iterativ beräkning", + "End date:" => "Slutdatum:", + "Engineering" => "Teknik", + "Enter" => "Retur", + "Entire column" => "Hela kolumnen", + "Entire row" => "Hela raden", + "Equal To…" => "Lika med…", + "Erase ink strokes" => "Radera pennstreck", + "Eraser" => "Suddgummi", + "Error Checking" => "Felkontroll", + "Error checking options" => "Alternativ för felkontroll", + "Error message:" => "Felmeddelande:", + "Error style" => "Typ av felmeddelande", + "Errors" => "Fel", + "Evaluate Formula" => "Utvärdera formel", + "Every command run in this session (replayable)" => "Varje kommando som körts i denna session (kan spelas upp igen)", + "Excel Workbook (*.xlsx)" => "Excel-arbetsbok (*.xlsx)", + "Expand formula bar" => "Expandera formelfältet", + "Explanatory Text" => "Förklarande text", + "Exponential Smoothing" => "Exponentiell utjämning", + "Export" => "Exportera", + "Export as CSV…" => "Exportera som CSV…", + "Export as PDF…" => "Exportera som PDF…", + "Export as Web Page (.html)…" => "Exportera som webbsida (.html)…", + "F-Test Two-Sample for Variances" => "F-test: två urval för varianser", + "File" => "Arkiv", + "File\nName" => "Fil-\nnamn", + "File\nPath" => "Fil-\nsökväg", + "File Name" => "Filnamn", + "File Path" => "Filsökväg", + "Fill" => "Fyll", + "Fill Color" => "Fyllningsfärg", + "Fill missing points using" => "Fyll i saknade punkter med", + "Filter" => "Filter", + "Filter (⌘⇧F)" => "Filter (⌘⇧F)", + "Filter by Selected Cell's Value" => "Filtrera efter den markerade cellens värde", + "Filters" => "Filter", + "Financial" => "Finans", + "Find" => "Sök", + "Find &\nSelect" => "Sök och\nmarkera", + "Find & Select" => "Sök och markera", + "Find All" => "Sök alla", + "Find Next" => "Sök nästa", + "Find and Replace" => "Sök och ersätt", + "Find what:" => "Sök efter:", + "Finding printers…" => "Söker efter skrivare…", + "Find…" => "Sök…", + "Fit Sheet on One Page" => "Anpassa blad till en sida", + "Fit selection" => "Anpassa markering", + "Fits inside the selected cell and moves with its content." => "Får plats inuti den markerade cellen och flyttas med dess innehåll.", + "Flash\nFill" => "Snabb-\nfyllning", + "Flash Fill" => "Snabbfyllning", + "Flash Fill (⌘E)" => "Snabbfyllning (⌘E)", + "Font" => "Teckensnitt", + "Font Color" => "Teckenfärg", + "Footer" => "Sidfot", + "Footer (in):" => "Sidfot (tum):", + "Footer Margin" => "Sidfotsmarginal", + "Footer:" => "Sidfot:", + "Forecast\nSheet" => "Prognos-\nblad", + "Forecast Sheet" => "Prognosblad", + "Forecast end (date or number; blank: a third of the history):" => "Prognosens slut (datum eller tal; tomt: en tredjedel av historiken):", + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Prognosens början (ett datum eller tal i historiken; tomt: efter sista punkten):" + } + "Format" => "Format", + "Format\nPane" => "Format-\nfönster", + "Format\nas Table" => "Formatera\nsom tabell", + "Format Cell Alignment…" => "Formatera celljustering…", + "Format Cells" => "Formatera celler", + "Format Cells|Fill" => "Fyllning", + "Format Cells…" => "Formatera celler…", + "Format Chart Area…" => "Formatera diagramområde…", + "Format Chart pane" => "Formatera diagramfönster", + "Format Painter (double-click to keep it on)" => "Hämta format (dubbelklicka om du vill använda flera gånger)", + "Format as Table" => "Formatera som tabell", + "Format cells" => "Formatera celler", + "Format cells that are (value):" => "Formatera celler som är (värde):", + "Format cells that contain a date occurring:" => "Formatera celler som innehåller ett datum som inträffar:", + "Format cells that contain the text:" => "Formatera celler som innehåller texten:", + "Format columns" => "Formatera kolumner", + "Format rows" => "Formatera rader", + "Format values where this formula is true:" => "Formatera värden där den här formeln är sann:", + "Formats (T)" => "Format (T)", + "Formula Bar" => "Formelfält", + "Formula Builder" => "Formelverktyg", + "Formula:" => "Formel:", + "Formulas" => "Formler", + "Formulas (F)" => "Formler (F)", + "Formulas and number formats" => "Formler och talformat", + "Fraction" => "Bråk", + "Freeze\nPanes" => "Frys\nfönsterrutor", + "Freeze First Column" => "Frys första kolumnen", + "Freeze Panes" => "Frys fönsterrutor", + "Freeze Top Row" => "Frys översta raden", + "Funnel" => "Trattdiagram", + "GRG Nonlinear" => "GRG Icke-linjär", + "General" => "Allmänt", + "Get Data\n(Text/CSV)" => "Hämta data\n(Text/CSV)", + "Glide the selection outline to the cell you move to instead of jumping there" => { + "Låt markeringsramen glida till cellen du flyttar till istället för att hoppa dit" + } + "Go To" => "Gå till", + "Go To Special" => "Gå till special", + "Go To Special…" => "Gå till special…", + "Go To…" => "Gå till…", + "Go to\nFooter" => "Gå till\nsidfot", + "Go to\nHeader" => "Gå till\nsidhuvud", + "Go to Footer" => "Gå till sidfot", + "Go to Header" => "Gå till sidhuvud", + "Goal Seek" => "Målsökning", + "Goal Seeking found a solution: {value}" => "Målsökningen hittade en lösning: {value}", + "Goal Seek…" => "Målsökning…", + "Good" => "Bra", + "Good, Bad and Neutral" => "Bra, dålig och neutral", + "Gradebook" => "Betygskatalog", + "Grayscale" => "Gråskala", + "Greater Than…" => "Större än…", + "Green" => "Grön", + "Green - White - Red" => "Grön - Vit - Röd", + "Green - Yellow - Red" => "Grön - Gul - Röd", + "Green Fill with Dark Green Text" => "Grön fyllning med mörkgrön text", + "Gridlines" => "Rutnät", + "Gridlines: None" => "Rutnät: Inget", + "Gridlines: Show" => "Rutnät: Visa", + "Group" => "Gruppera", + "Group by Months" => "Gruppera efter månader", + "Group by Quarters" => "Gruppera efter kvartal", + "Group by Years" => "Gruppera efter år", + "Grouped By:" => "Grupperad efter:", + "Growth" => "Tillväxt", + "Header" => "Sidhuvud", + "Header &\nFooter" => "Sidhuvud och\nsidfot", + "Header & Footer" => "Sidhuvud och sidfot", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "Sidhuvud (&L vänster, &C centrerat, &R höger; &P sida, &N sidor, &D datum, &A blad):" + } + "Header (in):" => "Sidhuvud (tum):", + "Header Margin" => "Sidhuvudsmarginal", + "Heading 1" => "Rubrik 1", + "Heading 2" => "Rubrik 2", + "Heading 3" => "Rubrik 3", + "Heading 4" => "Rubrik 4", + "Headings" => "Rubriker", + "Hex" => "Hex", + "Hidden" => "Dold", + "Hidden: {sheets}" => "Dolda: {sheets}", + "Hide" => "Dölj", + "Hide Columns" => "Dölj kolumner", + "Hide Detail" => "Dölj information", + "Hide Rows" => "Dölj rader", + "Hide Sheet" => "Dölj blad", + "Hierarchy & more" => "Hierarki och mer", + "Highlight Cells Rules" => "Markera cellregler", + "Highlighter" => "Överstrykningspenna", + "Histogram" => "Histogram", + "Home" => "Start", + "Horizontal" => "Vågrätt", + "Horizontal (Category) Axis Labels:" => "Vågräta axletiketter (kategori):", + "Horizontal axis title:" => "Vågrät axelrubrik:", + "Household Budget" => "Hushållsbudget", + "How agents drive GridCraft (MCP / control channel)" => "Hur agenter styr GridCraft (MCP / kontrollkanal)", + "Hypothesized Mean Difference:" => "Hypotetisk medelvärdesskillnad:", + "Icon Sets" => "Ikonuppsättningar", + "Icons" => "Ikoner", + "Ignore Once" => "Ignorera en gång", + "Ignore blank" => "Ignorera tomma", + "Import a text or CSV file" => "Importera en text- eller CSV-fil", + "In the last 7 days" => "Under de senaste 7 dagarna", + "In-cell dropdown" => "Nedrullningsbar meny i cellen", + "Include forecast statistics" => "Inkludera prognosstatistik", + "Increase Decimal" => "Öka decimaler", + "Increase Font Size" => "Öka teckenstorlek", + "Increase Indent" => "Öka indrag", + "Indent" => "Indrag", + "Info" => "Information", + "Information" => "Information", + "Ink to\nShape" => "Pennanteckning\ntill form", + "Input" => "Indata", + "Input Range:" => "Indataområde:", + "Input X Range:" => "Indataområde för X:", + "Input Y Range:" => "Indataområde för Y:", + "Input message:" => "Indatameddelande:", + "Insert" => "Infoga", + "Header Menu|Insert" => "Infoga", + "Insert\nFunction" => "Infoga\nfunktion", + "Insert\nSlicer" => "Infoga\nutsnitt", + "Insert Calculated Field" => "Infoga beräknat fält", + "Insert Cells…" => "Infoga celler…", + "Insert Chart" => "Infoga diagram", + "Insert Copied Cells" => "Infoga kopierade celler", + "Insert Copied Cells…" => "Infoga kopierade celler…", + "Insert Cut Cells" => "Infoga utklippta celler", + "Insert Function" => "Infoga funktion", + "Insert Function (⇧F3)" => "Infoga funktion (⇧F3)", + "Insert Hyperlink" => "Infoga hyperlänk", + "Insert Link" => "Infoga länk", + "Insert Link (⌘K)" => "Infoga länk (⌘K)", + "Insert Page Break" => "Infoga sidbrytning", + "Insert Paste" => "Infoga och klistra in", + "Insert Sheet" => "Infoga blad", + "Insert Sheet Columns" => "Infoga kalkylbladskolumner", + "Insert Sheet Rows" => "Infoga kalkylbladsrader", + "Insert Slicer" => "Infoga utsnitt", + "Insert a picture" => "Infoga en bild", + "Insert a slicer to filter a table" => "Infoga ett utsnitt för att filtrera en tabell", + "Insert an icon" => "Infoga en ikon", + "Insert checkboxes in the selected cells" => "Infoga kryssrutor i de markerade cellerna", + "Insert rows" => "Infoga rader", + "Insert…" => "Infoga…", + "Inside Borders" => "Invändiga kantlinjer", + "Interface language" => "Gränssnittsspråk", + "Interface size" => "Gränssnittsstorlek", + "Interpolation" => "Interpolering", + "Interval:" => "Intervall:", + "Italic" => "Kursiv", + "Italic (⌘I)" => "Kursiv (⌘I)", + "Join the ArtCraft Discord" => "Gå med i ArtCrafts Discord", + "Just now" => "Alldeles nyss", + "Justify" => "Justera", + "Keep" => "Behåll", + "Keep Solver Solution" => "Behåll lösning från Problemlösaren", + "Keywords" => "Nyckelord", + "Kth Largest (blank for none):" => "K:te största (tomt för inget):", + "Kth Smallest (blank for none):" => "K:te minsta (tomt för inget):", + "Labels in first row" => "Etiketter i första raden", + "Landscape" => "Liggande", + "Last cell" => "Sista cellen", + "Last month" => "Förra månaden", + "Last week" => "Förra veckan", + "Left" => "Vänster", + "Left Border" => "Vänster kantlinje", + "Left Margin" => "Vänster marginal", + "Left margin (in):" => "Vänster marginal (tum):", + "Legend Entries (Series)" => "Förklaringsposter (serier)", + "Legend: Bottom" => "Förklaring: Nederkant", + "Legend: None" => "Förklaring: Ingen", + "Legend: Right" => "Förklaring: Höger", + "Legend: Top" => "Förklaring: Överkant", + "Less Than…" => "Mindre än…", + "Licence" => "Licens", + "Light" => "Ljust", + "Light Blue" => "Ljusblå", + "Light Red Fill" => "Ljusröd fyllning", + "Light Red Fill with Dark Red Text" => "Ljusröd fyllning med mörkröd text", + "Line" => "Linje", + "Line chart" => "Linjediagram", + "Line or Area" => "Linje eller yta", + "Line with Markers" => "Linje med brytpunkter", + "Linear" => "Linjär", + "Link" => "Länk", + "Link to (web address, e-mail or Sheet!A1):" => "Länk till (webbadress, e-post eller Blad!A1):", + "Linked Cell" => "Länkad cell", + "Link…" => "Länk…", + "List" => "Lista", + "Location" => "Plats", + "Location Range:" => "Platsintervall:", + "Lock Cell" => "Lås cell", + "Lock the sheet structure so sheets can't be added, moved, renamed or deleted." => { + "Lås bladstrukturen så att blad inte kan läggas till, flyttas, byta namn eller tas bort." + } + "Locked" => "Låst", + "Logical" => "Logiska", + "Long Date" => "Långt datum", + "Lookup &\nReference" => "Slå upp och\nreferens", + "Lookup & Reference" => "Slå upp och referens", + "Macros" => "Makron", + "Macros and scripts in this workbook (Alt+F8)" => "Makron och skript i den här arbetsboken (Alt+F8)", + "Magnification" => "Förstoring", + "Make Unconstrained Variables Non-Negative" => "Gör obegränsade variabler icke-negativa", + "Manage Rules…" => "Hantera regler…", + "Manual" => "Manuellt", + "Margins" => "Marginaler", + "Markers" => "Brytpunkter", + "Match case" => "Matcha gemener/VERSALER", + "Match entire cell contents" => "Matcha hela cellinnehållet", + "Math &\nTrig" => "Matematik &\ntrig", + "Math & Trig" => "Matematik & trig", + "Max" => "Max", + "Maximum Change must be a number of 0 or more." => "Maximal ändring måste vara ett tal som är 0 eller större.", + "Maximum Change:" => "Maximal ändring:", + "Maximum Iterations must be a whole number from 1 to 32767." => "Maximalt antal iterationer måste vara ett heltal från 1 till 32767.", + "Maximum Iterations:" => "Maximalt antal iterationer:", + "Maximum:" => "Maximum:", + "Median" => "Median", + "Merge & Center" => "Sammanfoga och centrera", + "Merge Across" => "Sammanfoga över", + "Merge Cells" => "Sammanfoga celler", + "Middle\nAlign" => "Centrera\nlodrätt", + "Middle Align" => "Centrera lodrätt", + "Min" => "Min", + "Minimum / Source / Formula:" => "Minimum / Källa / Formel:", + "Models" => "Modeller", + "Modified" => "Ändrad", + "Modify" => "Ändra", + "Month" => "Månad", + "More\nFunctions" => "Fler\nfunktioner", + "More Accounting Formats…" => "Fler redovisningsformat…", + "More Borders…" => "Fler kantlinjer…", + "More Colors…" => "Fler färger…", + "More Functions…" => "Fler funktioner…", + "More Number Formats…" => "Fler talformat…", + "More commands" => "Fler kommandon", + "More workbooks" => "Fler arbetsböcker", + "Move or Copy" => "Flytta eller kopiera", + "Move or Copy Sheet…" => "Flytta eller kopiera kalkylblad…", + "Move or Copy…" => "Flytta eller kopiera…", + "Move to Column Labels" => "Flytta till kolumnetiketter", + "Move to Report Filter" => "Flytta till rapportfilter", + "Move to Row Labels" => "Flytta till radetiketter", + "Move to Values" => "Flytta till värden", + "Moving Average" => "Glidande medelvärde", + "Multiply" => "Multiplicera", + "My data has headers" => "Mina data har rubriker", + "My list has headers" => "Min lista har rubriker", + "Name" => "Namn", + "Name\nManager" => "Namn-\nhanteraren", + "Name Manager" => "Namnhanteraren", + "Name:" => "Namn:", + "Narrow" => "Smala", + "Neutral" => "Neutral", + "New" => "Nytt", + "New\nComment" => "Ny\nkommentar", + "New Comment" => "Ny kommentar", + "New Name" => "Nytt namn", + "New Note" => "Ny anteckning", + "New Rule…" => "Ny regel…", + "New Workbook" => "Ny arbetsbok", + "New Worksheet Ply:" => "Nytt kalkylbladsnamn:", + "New sheet (⇧F11)" => "Nytt blad (⇧F11)", + "New title (Modify):" => "Ny rubrik (Ändra):", + "New…" => "Nytt…", + "Next" => "Nästa", + "Next Comment" => "Nästa kommentar", + "Next month" => "Nästa månad", + "Next page" => "Nästa sida", + "Next sheet" => "Nästa blad", + "Next week" => "Nästa vecka", + "No Border" => "Ingen kantlinje", + "No Color" => "Ingen färg", + "No Fill" => "Ingen fyllning", + "No names defined" => "Inga namn har definierats", + "No picture selected" => "Ingen bild har markerats", + "No printers found. Configure a system printer or export a PDF." => { + "Inga skrivare hittades. Konfigurera en systemskrivare eller exportera en PDF." + } + "No ranges yet." => "Inga intervall ännu.", + "No recent workbooks yet." => "Inga tidigare arbetsböcker ännu.", + "No workbook is open." => "Ingen arbetsbok är öppen.", + "None" => "Ingen", + "Normal" => "Normal", + "Normal Probability" => "Normal sannolikhet", + "Not available" => "Inte tillgänglig", + "Not in Dictionary ({cell}):" => "Finns inte i ordlistan ({cell}):", + "Not saved yet" => "Inte sparad ännu", + "Note" => "Anteckning", + "Note:" => "Anteckning:", + "Notes" => "Anteckningar", + "Nothing to print." => "Inget att skriva ut.", + "Number" => "Tal", + "Number\nof Pages" => "Antal\nsidor", + "Number Format" => "Talformat", + "Number Stored as Text" => "Talet lagras som text", + "Number of Pages" => "Antal sidor", + "Numbers" => "Tal", + "OK" => "OK", + "One-sided" => "Enkelsidig", + "Open" => "Öppna", + "Open…" => "Öppna…", + "Operation" => "Åtgärd", + "Options" => "Alternativ", + "Options|Editing" => "Redigering", + "Options|General" => "Allmänt", + "Options|Save" => "Spara", + "Orange" => "Orange", + "Orientation" => "Riktning", + "Orientation (degrees)" => "Riktning (grader)", + "Other:" => "Annat:", + "Outline" => "Kontur", + "Output" => "Utdata", + "Output Range:" => "Utdataområde:", + "Output options" => "Utdataalternativ", + "Outside Borders" => "Yttre kantlinjer", + "Oval" => "Oval", + "PDF (*.pdf)" => "PDF (*.pdf)", + "Page\nLayout" => "Sid-\nlayout", + "Page\nNumber" => "Sid-\nnummer", + "Page Break\nPreview" => "Förhandsgranska\nsidbrytningar", + "Page Break Preview" => "Förhandsgranska sidbrytningar", + "Page Breaks" => "Sidbrytningar", + "Page Layout" => "Sidlayout", + "Page Layout|Orientation" => "Orientering", + "Page Number" => "Sidnummer", + "Page Setup" => "Utskriftsformat", + "Page Setup…" => "Utskriftsformat…", + "Page {page} of {pages}" => "Sida {page} av {pages}", + "Paper Size" => "Pappersstorlek", + "Pareto (sorted histogram)" => "Pareto (sorterat histogram)", + "Password" => "Lösenord", + "Password (optional):" => "Lösenord (valfritt):", + "Password:" => "Lösenord:", + "Paste" => "Klistra in", + "Paste (⌘V)" => "Klistra in (⌘V)", + "Paste Formatting" => "Klistra in formatering", + "Paste Formulas" => "Klistra in formler", + "Paste Link" => "Klistra in länk", + "Paste Special" => "Klistra in special", + "Paste Special…" => "Klistra in special…", + "Paste Values" => "Klistra in värden", + "Paste formulas that refer to the copied cells" => "Klistra in formler som refererar till de kopierade cellerna", + "Pen\nBlack" => "Svart\npenna", + "Pen\nBlue" => "Blå\npenna", + "Pen\nRed" => "Röd\npenna", + "Percent" => "Procent", + "Percent Style" => "Procentformat", + "Percentage" => "Procent", + "Pick From Drop-down List…" => "Välj från listrutan…", + "Pick From List" => "Välj från listan", + "Picture file path (PNG or JPEG):" => "Sökväg till bildfil (PNG eller JPEG):", + "Pictures" => "Bilder", + "Pie" => "Cirkel", + "Pie or Doughnut" => "Cirkel eller krans", + "PivotTable" => "Pivottabell", + "PivotTable Fields" => "Pivottabellfält", + "Place Picture in Cell" => "Placera bild i cellen", + "Place Picture over Cells" => "Placera bild över celler", + "Place in Cell" => "Placera i cell", + "Place over Cells" => "Placera över celler", + "Platform" => "Plattform", + "Point" => "Punkt", + "Portrait" => "Stående", + "Previous" => "Föregående", + "Previous Comment" => "Föregående kommentar", + "Previous page" => "Föregående sida", + "Previous sheet" => "Föregående blad", + "Print" => "Skriv ut", + "Print\nArea" => "Utskrifts-\nområde", + "Print\nTitles" => "Skriv ut\nrubriker", + "Print Active Sheets" => "Skriv ut aktiva blad", + "Print Area" => "Utskriftsområde", + "Print Entire Workbook" => "Skriv ut hela arbetsboken", + "Print Titles" => "Skriv ut rubriker", + "Print failed: the printing worker stopped." => "Utskriften misslyckades: utskriftsprocessen stoppades.", + "Print failed: {error}" => "Utskriften misslyckades: {error}", + "Print job submitted." => "Utskriftsjobbet har skickats.", + "Print job submitted: {receipt}" => "Utskriftsjobbet har skickats: {receipt}", + "Printer" => "Skrivare", + "Printer default" => "Skrivarens standardinställning", + "Printer discovery failed." => "Det gick inte att söka efter skrivare.", + "Print…" => "Skriv ut…", + "Product" => "Produkt", + "Product Information" => "Produktinformation", + "Properties" => "Egenskaper", + "Protect\nSheet" => "Skydda\nblad", + "Protect\nWorkbook" => "Skydda\narbetsbok", + "Protect Sheet" => "Skydda blad", + "Protect Sheet…" => "Skydda blad…", + "Protect Structure and Windows" => "Skydda struktur och fönster", + "Protect Workbook" => "Skydda arbetsbok", + "Protect Workbook structure" => "Skydda arbetsbokens struktur", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Skydda arbetsbok för: Struktur (blad kan inte läggas till, flyttas, byta namn, döljas eller tas bort)." + } + "Protection" => "Skydd", + "Purple" => "Lila", + "Quarterly Sales Dashboard" => "Kvartalsvis försäljningsöversikt", + "Radar" => "Radardiagram", + "Range password:" => "Lösenord för intervall:", + "Ranges that stay editable when the sheet is protected:" => "Intervall som förblir redigerbara när bladet är skyddat:", + "Rank and Percentile" => "Rangordning och percentil", + "Ready" => "Klar", + "Reapply" => "Tillämpa igen", + "Recent" => "Senaste", + "Recent Colors" => "Senaste färgerna", + "Recommended\nCharts" => "Rekommenderade\ndiagram", + "Recommended Charts" => "Rekommenderade diagram", + "Rectangle" => "Rektangel", + "Red" => "Röd", + "Red - Yellow - Green" => "Röd - Gul - Grön", + "Red Border" => "Röd kantlinje", + "Red Text" => "Röd text", + "Redo" => "Gör om", + "Redo (⌘Y)" => "Gör om (⌘Y)", + "Reference:" => "Referens:", + "Refers To" => "Refererar till", + "Refers to cells:" => "Refererar till celler:", + "Refers to:" => "Refererar till:", + "Refresh" => "Uppdatera", + "Refresh printers" => "Uppdatera skrivare", + "Regression" => "Regression", + "Remove" => "Ta bort", + "Remove\nDuplicates" => "Ta bort\ndubbletter", + "Remove Arrows" => "Ta bort pilar", + "Remove Duplicates" => "Ta bort dubbletter", + "Remove Field" => "Ta bort fält", + "Remove Page Break" => "Ta bort sidbrytning", + "Remove the password (Modify)" => "Ta bort lösenordet (Ändra)", + "Rename" => "Byt namn", + "Rename Sheet" => "Byt namn på kalkylblad", + "Replace" => "Ersätt", + "Replace All" => "Ersätt alla", + "Replace with:" => "Ersätt med:", + "Replace…" => "Ersätt…", + "Report Layout" => "Rapportlayout", + "Reset All Page Breaks" => "Återställ alla sidbrytningar", + "Residuals" => "Residualer", + "Restore Original Values" => "Återställ ursprungliga värden", + "Review" => "Granska", + "Right" => "Höger", + "Right Border" => "Höger kantlinje", + "Right Margin" => "Höger marginal", + "Right margin (in):" => "Höger marginal (tum):", + "Rotate Text Down" => "Rotera text nedåt", + "Rotate Text Up" => "Rotera text uppåt", + "Rounded Rectangle" => "Avrundad rektangel", + "Row Height" => "Radhöjd", + "Row Height…" => "Radhöjd…", + "Row height (pixels):" => "Radhöjd (bildpunkter):", + "Rows" => "Rader", + "Ruler" => "Linjal", + "Sample" => "Prov", + "Save" => "Spara", + "Save (⌘S)" => "Spara (⌘S)", + "Save .xlsx workbooks automatically after every change" => "Spara .xlsx-arbetsböcker automatiskt efter varje ändring", + "Save As" => "Spara som", + "Save As…" => "Spara som…", + "Save Changes?" => "Spara ändringar?", + "Save a Copy" => "Spara en kopia", + "Save a Copy as Excel Workbook (.xlsx)…" => "Spara en kopia som Excel-arbetsbok (.xlsx)…", + "Save a copy as .{format}" => "Spara en kopia som .{format}", + "Save as type" => "Filformat", + "Save the active sheet as comma-separated text." => "Spara det aktiva bladet som kommaavgränsad text.", + "Save the sheet as a PDF document that keeps its page layout." => "Spara bladet som ett PDF-dokument med bibehållen sidlayout.", + "Save the workbook as a web page." => "Spara arbetsboken som en webbsida.", + "Save the workbook under another name or in another folder." => "Spara arbetsboken under ett annat namn eller i en annan mapp.", + "Scale with Document" => "Skala med dokument", + "Scatter" => "Punktdiagram (XY)", + "Scatter or Bubble" => "Punkt eller bubbla", + "Scatter with Lines" => "Punktdiagram med linjer", + "Scenario Manager…" => "Scenariohanteraren…", + "Scientific" => "Grundpotensform", + "Scope" => "Omfång", + "Scope (Workbook or sheet name):" => "Omfång (Arbetsbok eller bladnamn):", + "ScreenTip:" => "Skärmtips:", + "Search" => "Sök", + "Search Commands" => "Sök kommandon", + "Search and run any command" => "Sök och kör valfritt kommando", + "Search commands" => "Sök kommandon", + "Search commands (⌘⇧Space)" => "Sök kommandon (⌘⇧Blanksteg)", + "Search:" => "Sök:", + "Seasonality (auto, 0 for none, or a season length):" => "Säsongsvariation (auto, 0 för ingen, eller säsongslängd):", + "Select" => "Markera", + "Select\nData" => "Markera\ndata", + "Select\nObjects" => "Markera\nobjekt", + "Select All Sheets" => "Markera alla blad", + "Select Data" => "Markera data", + "Select Data Source" => "Välj datakälla", + "Select Data…" => "Markera data…", + "Select a Solving Method:" => "Välj lösningsmetod:", + "Select a chart first." => "Markera ett diagram först.", + "Select a printer" => "Välj en skrivare", + "Select and move ink and shapes" => "Markera och flytta pennanteckningar och former", + "Select destination and press Enter or choose Paste" => "Markera målet och tryck på Retur eller välj Klistra in", + "Semicolon" => "Semikolon", + "Series" => "Serie", + "Series in" => "Serier i", + "Series{n}" => "Serie{n}", + "Series…" => "Serie…", + "Set Objective:" => "Ange målcelle:", + "Set Print Area" => "Ange utskriftsområde", + "Set cell:" => "Målcell:", + "Shapes" => "Former", + "Share" => "Dela", + "Share: export or save a copy" => "Dela: exportera eller spara en kopia", + "Sheet\nName" => "Blad-\nnamn", + "Sheet\nRight-to-Left" => "Blad från\nhöger till vänster", + "Sheet Name" => "Bladnamn", + "Sheet Options|View" => "Visa", + "Sheet Right-to-Left" => "Blad från höger till vänster", + "Sheet structure is locked: sheets can't be added, moved, renamed or deleted." => { + "Bladstrukturen är låst: blad kan inte läggas till, flyttas, byta namn eller tas bort." + } + "Sheets" => "Blad", + "Sheets: {sheets}" => "Blad: {sheets}", + "Shift cells down" => "Flytta celler nedåt", + "Shift cells left" => "Flytta celler åt vänster", + "Shift cells right" => "Flytta celler åt höger", + "Shift cells up" => "Flytta celler uppåt", + "Short Date" => "Kort datum", + "Show\nComments" => "Visa\nkommentarer", + "Show All Notes" => "Visa alla anteckningar", + "Show Detail" => "Visa information", + "Show Formulas" => "Visa formler", + "Show Formulas (⌃`)" => "Visa formler (⌃`)", + "Show as % of Grand Total" => "Visa som % av totalsumma", + "Show as No Calculation" => "Visa som ingen beräkning", + "Show as Rank" => "Visa som rangordning", + "Show as Running Total" => "Visa som löpande summa", + "Show formula bar" => "Visa formelfältet", + "Show password" => "Visa lösenord", + "Show/Hide Note" => "Visa/dölj anteckning", + "Shrink to fit" => "Förminska så att texten ryms", + "Single" => "Enkel", + "Single Accounting" => "Enkel redovisning", + "Size" => "Storlek", + "Skip blanks" => "Hoppa över tomma", + "Slicer" => "Utsnitt", + "Solve" => "Lös", + "Solver" => "Problemlösaren", + "Solver Parameters" => "Parametrar för Problemlösaren", + "Solver Results" => "Resultat från Problemlösaren", + "Sort" => "Sortera", + "Sort &\nFilter" => "Sortera och\nfiltrera", + "Sort & Filter" => "Sortera och filtrera", + "Sort A to Z" => "Sortera från A till Ö", + "Sort Ascending" => "Sortera stigande", + "Sort Descending" => "Sortera fallande", + "Sort Z to A" => "Sortera från Ö till A", + "Sort by" => "Sortera efter", + "Source:" => "Källa:", + "Space" => "Mellanslag", + "Sparklines" => "Minidiagram", + "Special" => "Special", + "Special…" => "Special…", + "Spelling" => "Stavning", + "Spelling (F7)" => "Stavning (F7)", + "Stacked Area" => "Staplad yta", + "Stacked Bar" => "Staplad liggande stapel", + "Stacked Column" => "Staplad kolumn", + "Stacked Line" => "Staplad linje", + "Standard Colors" => "Standardfärger", + "Standard Errors" => "Standardfel", + "Standard Width" => "Standardbredd", + "Standard column width (pixels):" => "Standardkolumnbredd (bildpunkter):", + "Standardized Residuals" => "Standardiserade residualer", + "Start a conversation:" => "Starta en konversation:", + "Start a new workbook" => "Starta en ny arbetsbok", + "Statistic" => "Statistik", + "Statistical" => "Statistiska", + "Step value:" => "Stegvärde:", + "Stock" => "Kursdiagram", + "Stop" => "Stopp", + "Stop value:" => "Stoppvärde:", + "Strikethrough" => "Genomstruken", + "Subject" => "Ämne", + "Subject to the Constraints:" => "Begränsningar:", + "Submitting print job…" => "Skickar utskriftsjobb…", + "Subscript" => "Nedsänkt", + "Subtotal" => "Delsumma", + "Subtract" => "Subtrahera", + "Suggestions:" => "Förslag:", + "Sum" => "Summa", + "Summarize by Average" => "Sammanfatta med Medel", + "Summarize by Count" => "Sammanfatta med Antal", + "Summarize by Max" => "Sammanfatta med Max", + "Summarize by Min" => "Sammanfatta med Min", + "Summarize by Sum" => "Sammanfatta med Summa", + "Summary statistics" => "Sammanfattande statistik", + "Sunburst" => "Solfjädersdiagram", + "Superscript" => "Upphöjd", + "Switch\nRow/Column" => "Växla\nrad/kolumn", + "Switch Row/Column" => "Växla rad/kolumn", + "Symbol" => "Symbol", + "System" => "System", + "Tab" => "Tabb", + "Tab Color" => "Flikfärg", + "Table" => "Tabell", + "Table\nStyles" => "Tabell-\nformat", + "Table (⌘T)" => "Tabell (⌘T)", + "Table Design" => "Tabelldesign", + "Table Styles" => "Tabellformat", + "Tabular" => "Tabellformat", + "Tab|Insert" => "Infoga", + "Text" => "Text", + "Text\nBox" => "Text-\nruta", + "Text Box" => "Textruta", + "Text length" => "Textlängd", + "Text that Contains…" => "Text som innehåller…", + "Text to\nColumns" => "Text till\nkolumner", + "Text to Columns" => "Text till kolumner", + "The output range already holds data. Replace it with the report?" => { + "Utdataintervallet innehåller redan data. Vill du ersätta det med rapporten?" + } + "The spelling check is complete for the entire sheet." => "Stavningskontrollen för hela bladet är slutförd.", + "Theme Colors" => "Temafärger", + "Themed Cell Styles" => "Temabaserade cellformat", + "Themes" => "Teman", + "Then by" => "Sedan efter", + "There are no conditional formatting rules on this sheet." => "Det finns inga regler för villkorsstyrd formatering på det här bladet.", + "Thick Bottom Border" => "Tjock nedre kantlinje", + "Thick Outside Borders" => "Tjock kantlinje runt om", + "This month" => "Den här månaden", + "This week" => "Den här veckan", + "This workbook" => "Den här arbetsboken", + "This workbook has no scripts or macros." => "Den här arbetsboken har inga skript eller makron.", + "Threaded Comments" => "Trådade kommentarer", + "Time" => "Tid", + "Timeline range (blank: first column of the selection):" => "Tidslinjeintervall (tomt: markeringens första kolumn):", + "Title" => "Rubrik", + "Title:" => "Rubrik:", + "Titles and Headings" => "Rubriker och titlar", + "To value:" => "Till värde:", + "To:" => "Till:", + "Today" => "Idag", + "Tomorrow" => "Imorgon", + "Top" => "Överkant", + "Top\nAlign" => "Justera\nlängst upp", + "Top 10 Items" => "De 10 översta", + "Top 10%" => "De 10 % översta", + "Top Align" => "Justera längst upp", + "Top Border" => "Övre kantlinje", + "Top Margin" => "Övre marginal", + "Top and Bottom Border" => "Övre och nedre kantlinje", + "Top and Double Bottom Border" => "Övre och dubbel nedre kantlinje", + "Top and Thick Bottom Border" => "Övre och tjock nedre kantlinje", + "Top margin (in):" => "Övre marginal (tum):", + "Top/Bottom Rules" => "Över-/underregler", + "Total" => "Summa", + "Trace Dependents" => "Spåra underordnade", + "Trace Precedents" => "Spåra överordnade", + "Transpose" => "Transponera", + "Transpose (E)" => "Transponera (E)", + "Treat consecutive delimiters as one" => "Behandla på varandra följande avgränsare som en", + "Treemap" => "Trädkarta", + "Triangle" => "Triangel", + "Two-sided printing" => "Dubbelsidig utskrift", + "Two-sided: long edge" => "Dubbelsidig: vänd längs långsidan", + "Two-sided: short edge" => "Dubbelsidig: vänd längs kortsidan", + "Type" => "Typ", + "Type (custom format code):" => "Typ (anpassad formatkod):", + "Type a command, e.g. freeze, chart, bold…" => "Skriv ett kommando, t.ex. frys, diagram, fet…", + "Type to filter…" => "Skriv för att filtrera…", + "Underline" => "Understruken", + "Underline (⌘U)" => "Understruken (⌘U)", + "Undo" => "Ångra", + "Undo (⌘Z)" => "Ångra (⌘Z)", + "Undo list" => "Ångralista", + "Unfreeze Panes" => "Lås upp fönsterrutor", + "Ungroup" => "Dela upp grupp", + "Unhide" => "Ta fram", + "Unhide Columns" => "Ta fram kolumner", + "Unhide Rows" => "Ta fram rader", + "Unhide Sheet…" => "Ta fram blad…", + "Unhide sheet:" => "Ta fram blad:", + "Unhide…" => "Ta fram…", + "Unlock with password" => "Lås upp med lösenord", + "Unmerge Cells" => "Dela celler", + "Unprotect\nSheet" => "Avskydda\nblad", + "Unprotect Sheet" => "Avskydda blad", + "Unprotect Sheet…" => "Avskydda blad…", + "Unprotect Workbook" => "Avskydda arbetsbok", + "Up" => "Uppåt", + "Use AutoFilter" => "Använd autofilter", + "Use a field's menu to move it between areas:" => "Använd ett fälts meny för att flytta det mellan områden:", + "Use function" => "Använd funktion", + "Use in Formula" => "Använd i formel", + "Validation" => "Verifiering", + "Value" => "Värde", + "Value Of:" => "Värde av:", + "Values" => "Värden", + "Values (V)" => "Värden (V)", + "Values and number formats" => "Värden och talformat", + "Values range (blank: second column of the selection):" => "Värdeintervall (tomt: markeringens andra kolumn):", + "Variable 1 Range:" => "Intervall för variabel 1:", + "Variable 2 Range:" => "Intervall för variabel 2:", + "Version" => "Version", + "Version {version}" => "Version {version}", + "Version, contributors and the AI models that helped" => "Version, medverkande och AI-modellerna som hjälpte till", + "Vertical" => "Lodrätt", + "Vertical Text" => "Lodrät text", + "Vertical axis title:" => "Lodrät axelrubrik:", + "View" => "Visa", + "Visible cells only" => "Endast synliga celler", + "Warning" => "Varning", + "Warning Text" => "Varningstext", + "Watch\nWindow" => "Bevaknings-\nfönster", + "Watch Window" => "Bevakningsfönster", + "Waterfall" => "Vattenfallsdiagram", + "Web" => "Webb", + "Web Page (*.html)" => "Webbsida (*.html)", + "Web Page (.html)" => "Webbsida (.html)", + "Weekday" => "Veckodag", + "What-If\nAnalysis" => "Konsekvens-\nanalys", + "What-If Analysis" => "Konsekvensanalys", + "White - Green" => "Vit - Grön", + "White - Red" => "Vit - Röd", + "Whole number" => "Heltal", + "Wide" => "Breda", + "Win/Loss" => "Vinst/förlust", + "Within workbook" => "Inom arbetsboken", + "Workbook" => "Arbetsbok", + "Workbook\nStatistics" => "Arbetsboks-\nstatistik", + "Workbook Statistics" => "Arbetsboksstatistik", + "Workbook calculation" => "Arbetsboksberäkning", + "Wrap Text" => "Radbryt text", + "Wrap text" => "Radbryt text", + "Year" => "År", + "Yellow Fill with Dark Yellow Text" => "Gul fyllning med mörkgul text", + "Yesterday" => "Igår", + "Z to A" => "Ö till A", + "Zeros" => "Nollor", + "Zoom" => "Zooma", + "Zoom In" => "Zooma in", + "Zoom Out" => "Zooma ut", + "Zoom to\nSelection" => "Zooma till\nmarkering", + "Zoom to 100%" => "Zooma till 100 %", + "Zoom to Selection" => "Zooma till markering", + "Zoom…" => "Zooma…", + "and:" => "och:", + "applies to" => "gäller för", + "between" => "mellan", + "dashed" => "streckad", + "dotted" => "punktad", + "double" => "dubbel", + "e.g. lookup, average, date" => "t.ex. LOOKUP, AVERAGE, DATE", + "equal to" => "lika med", + "greater than" => "större än", + "greater than or equal to" => "större än eller lika med", + "less than" => "mindre än", + "less than or equal to" => "mindre än eller lika med", + "medium" => "mellan", + "none" => "inget", + "not between" => "inte mellan", + "not equal to" => "inte lika med", + "t-Test: Paired Two Sample for Means" => "t-test: parade två urval för medelvärden", + "t-Test: Two-Sample Assuming Equal Variances" => "t-test: två urval med lika varians", + "t-Test: Two-Sample Assuming Unequal Variances" => "t-test: två urval med olika varians", + "thick" => "tjock", + "thin" => "tunn", + "this workbook" => "den här arbetsboken", + "with" => "med", + "{count} cell(s) found" => "{count} cell(er) hittades", + "{n} days ago" => "för {n} dagar sedan", + "{n} h ago" => "för {n} tim sedan", + "{n} min ago" => "för {n} min sedan", + "{n} months ago" => "för {n} månader sedan", + "{n} weeks ago" => "för {n} veckor sedan", + "{n} years ago" => "för {n} år sedan", + "£ English (United Kingdom)" => "£ Engelska (Storbritannien)", + "¥ Japanese" => "¥ Japanska", + "— 1 step" => "— 1 steg", + "— VBA project (preserved, not run)" => "— VBA-projekt (bevarat, körs ej)", + "— {steps} steps" => "— {steps} steg", + "€ Euro" => "€ Euro", + "Book" => "Bok", + "Sheet" => "Blad", + "Generated|Column" => "Kolumn", + "Generated|Row" => "Rad", + "Page {page}" => "Sida {page}", + "Paste Special|Add" => "Addera", + "Text to Columns|Comma" => "Komma", + "Name Box" => "Namnruta", + "Cell Editor" => "Cellredigerare", + "Font Size" => "Teckenstorlek", + "Page order" => "Sidordning", + "Down, then over" => "Nedåt, sedan åt höger", + "Over, then down" => "Åt höger, sedan nedåt", + _ => return None, + }) +} diff --git a/crates/ui-egui/src/i18n/tr.rs b/crates/ui-egui/src/i18n/tr.rs index ed3d0bf01e..fefd0ea1b0 100644 --- a/crates/ui-egui/src/i18n/tr.rs +++ b/crates/ui-egui/src/i18n/tr.rs @@ -4,6 +4,1295 @@ /// Returns the Turkish translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "(Select All)" => "(Tümünü Seç)", + "(Select All Search Results)" => "(Tüm Arama Sonuçlarını Seç)", + "Status|Count" => "Sayı", + "Numerical Count" => "Sayısal Sayı", + "Minimum" => "En Küçük", + "Maximum" => "En Büyük", + "Status|Sum" => "Toplam", + "Page order" => "Sayfa sırası", + "Down, then over" => "Önce aşağı, sonra sağa", + "Over, then down" => "Önce sağa, sonra aşağı", + "Paste Special|Add" => "Topla", + "Text to Columns|Comma" => "Virgül", + " (password)" => " (parola)", + " (password, unlocked)" => " (parola, kilidi açık)", + "$ English (United States)" => "$ İngilizce (ABD)", + "'{file}' is protected." => "'{file}' korumalı.", + "(No suggestions)" => "(Öneri yok)", + "(unnamed)" => "(adsız)", + "+ Add Level" => "+ Düzey Ekle", + "100% Stacked Area" => "%100 Yığılmış Alan", + "100% Stacked Bar" => "%100 Yığılmış Çubuk", + "100% Stacked Column" => "%100 Yığılmış Sütun", + "20% - Accent1" => "%20 - Vurgu1", + "20% - Accent2" => "%20 - Vurgu2", + "20% - Accent3" => "%20 - Vurgu3", + "20% - Accent4" => "%20 - Vurgu4", + "20% - Accent5" => "%20 - Vurgu5", + "20% - Accent6" => "%20 - Vurgu6", + "3 Arrows" => "3 Ok", + "3 Symbols" => "3 Simge", + "3 Traffic Lights" => "3 Trafik Işığı", + "4 Ratings" => "4 Derecelendirme", + "40% - Accent1" => "%40 - Vurgu1", + "40% - Accent2" => "%40 - Vurgu2", + "40% - Accent3" => "%40 - Vurgu3", + "40% - Accent4" => "%40 - Vurgu4", + "40% - Accent5" => "%40 - Vurgu5", + "40% - Accent6" => "%40 - Vurgu6", + "5 Arrows" => "5 Ok", + "5 Quarters" => "5 Çeyrek", + "60% - Accent1" => "%60 - Vurgu1", + "60% - Accent2" => "%60 - Vurgu2", + "60% - Accent3" => "%60 - Vurgu3", + "60% - Accent4" => "%60 - Vurgu4", + "60% - Accent5" => "%60 - Vurgu5", + "60% - Accent6" => "%60 - Vurgu6", + "A Date Occurring…" => "Tarih…", + "A to Z" => "A'dan Z'ye", + "About" => "Hakkında", + "About GridCraft" => "GridCraft Hakkında", + "Accent1" => "Vurgu1", + "Accent2" => "Vurgu2", + "Accent3" => "Vurgu3", + "Accent4" => "Vurgu4", + "Accent5" => "Vurgu5", + "Accent6" => "Vurgu6", + "Accessibility" => "Erişilebilirlik", + "Account" => "Hesap", + "Action" => "Eylem", + "Action Journal" => "İşlem Günlüğü", + "Add" => "Ekle", + "Add Chart Element" => "Grafik Öğesi Ekle", + "Add subtotal to (columns, e.g. C,D):" => "Alt toplam eklenecek sütunlar (ör. C,D):", + "Add to Dictionary" => "Sözlüğe Ekle", + "Add-in and Automation" => "Eklenti ve Otomasyon", + "Agent Control" => "Ajan Kontrolü", + "Aggregate duplicates using" => "Yinelenenleri birleştirme yöntemi", + "Align Left" => "Sola Hizala", + "Align Right" => "Sağa Hizala", + "Alignment" => "Hizalama", + "All Borders" => "Tüm Kenarlıklar", + "All Charts" => "Tüm Grafikler", + "All done. We made {count} replacements." => "Tamamlandı. {count} değiştirme yapıldı.", + "All except borders" => "Kenarlıklar dışında tümü", + "All sheets" => "Tüm sayfalar", + "Allow" => "İzin ver", + "Allow all users of this sheet to:" => "Bu sayfanın tüm kullanıcılarına izin ver:", + "Alpha:" => "Alfa:", + "Analysis Tools" => "Analiz Araçları", + "Anova: Single Factor" => "Anova: Tek Etken", + "Any value" => "Herhangi bir değer", + "Apply" => "Uygula", + "Area" => "Alan", + "Arrow" => "Ok", + "At each change in (column letter):" => "Her değişiklikte (sütun harfi):", + "AutoSave" => "Otomatik Kaydet", + "AutoSave: save after every change (workbooks saved to a file)" => { + "Otomatik Kaydet: her değişiklikten sonra kaydet (dosyaya kaydedilmiş çalışma kitaplarında)" + } + "AutoSum (⌘⇧T)" => "Otomatik Toplam (⌘⇧T)", + "Average" => "Ortalama", + "Background Color:" => "Arka Plan Rengi:", + "Bad" => "Kötü", + "Bar" => "Çubuk", + "Before sheet (position, 0 = first):" => "Önüne konacak sayfa (sıra, 0 = ilk):", + "Between…" => "Arasında…", + "Bin Range (blank for automatic bins):" => "Kutu Aralığı (otomatik kutular için boş):", + "Blanks" => "Boşluklar", + "Blue" => "Mavi", + "Blue - White - Red" => "Mavi - Beyaz - Kırmızı", + "Bold (⌘B)" => "Kalın (⌘B)", + "Border" => "Kenarlık", + "Bottom" => "Alt", + "Bottom Align" => "Alta Hizala", + "Bottom Border" => "Alt Kenarlık", + "Bottom Double Border" => "Alt Çift Kenarlık", + "Bottom margin (in):" => "Alt kenar boşluğu (inç):", + "Box & Whisker" => "Kutu ve Çizgi", + "Bubble" => "Kabarcık", + "By Changing Variable Cells:" => "Değişken Hücreleri Değiştirerek:", + "By changing cell:" => "Değiştirilecek hücre:", + "Calculate Now (F9)" => "Şimdi Hesapla (F9)", + "Calculate Sheet (⇧F9)" => "Sayfayı Hesapla (⇧F9)", + "Calculated Field…" => "Hesaplanmış Alan…", + "Calculation" => "Hesaplama", + "Calculation Options" => "Hesaplama Seçenekleri", + "Category:" => "Kategori:", + "Cell Color" => "Hücre Rengi", + "Cell Styles" => "Hücre Stilleri", + "Cell Values" => "Hücre Değerleri", + "Center Across Selection" => "Seçim Boyunca Ortala", + "Change" => "Değiştir", + "Change All" => "Tümünü Değiştir", + "Change Chart Type" => "Grafik Türünü Değiştir", + "Chart" => "Grafik", + "Chart Title" => "Grafik Başlığı", + "Chart data range:" => "Grafik veri aralığı:", + "Check Accessibility" => "Erişilebilirliği Denetle", + "Check Cell" => "Hücreyi Denetle", + "Choose a PNG or JPEG no larger than 16 MB." => "16 MB'tan büyük olmayan bir PNG ya da JPEG seçin.", + "Choose fields to add to report:" => "Rapora eklenecek alanları seçin:", + "Clear Filter" => "Filtreyi Temizle", + "Clear Rules" => "Kuralları Temizle", + "Clustered Bar" => "Kümelenmiş Çubuk", + "Clustered Column" => "Kümelenmiş Sütun", + "Color:" => "Renk:", + "Column" => "Sütun", + "Column Width" => "Sütun Genişliği", + "Column chart" => "Sütun grafik", + "Column or Bar" => "Sütun veya Çubuk", + "Column width (characters):" => "Sütun genişliği (karakter):", + "Column widths" => "Sütun genişlikleri", + "Columns" => "Sütunlar", + "Columns (blank = all, e.g. A,C):" => "Sütunlar (boş = tümü, ör. A,C):", + "Combo" => "Birleşik", + "Comma" => "Virgül", + "Comma [0]" => "Virgül [0]", + "Comment:" => "Açıklama:", + "Comments and notes (C)" => "Açıklamalar ve notlar (C)", + "Comments pane" => "Açıklamalar bölmesi", + "Compact" => "Sıkıştırılmış", + "Compatibility" => "Uyumluluk", + "Conditional Formatting Rules Manager" => "Koşullu Biçimlendirme Kuralları Yöneticisi", + "Conditional formats" => "Koşullu biçimler", + "Confidence Level (%):" => "Güven Düzeyi (%):", + "Confidence Level for Mean (%), blank for none:" => "Ortalama için Güven Düzeyi (%), istenmiyorsa boş:", + "Confidence interval" => "Güven aralığı", + "Confidence level (%):" => "Güven düzeyi (%):", + "Constant is Zero" => "Sabit Sıfır", + "Contributors" => "Katkıda Bulunanlar", + "Convert Text to Columns" => "Metni Sütunlara Dönüştür", + "Convert the last ink stroke to a shape" => "Son mürekkep çizgisini şekle dönüştür", + "Convert to Number" => "Sayıya Dönüştür", + "Convert to Range" => "Aralığa Dönüştür", + "Copies" => "Kopya", + "Copy (⌘C)" => "Kopyala (⌘C)", + "Correlation" => "Korelasyon", + "Count" => "Say", + "CountA" => "Değer Say", + "Covariance" => "Kovaryans", + "Create Forecast Worksheet" => "Tahmin Çalışma Sayfası Oluştur", + "Create Sparklines" => "Mini Grafik Oluştur", + "Create a copy" => "Kopya oluştur", + "Cube" => "Küp", + "Cumulative Percentage" => "Birikimli Yüzde", + "Currency [0]" => "Para Birimi [0]", + "Current region" => "Geçerli bölge", + "Custom (%):" => "Özel (%):", + "Custom Sort" => "Özel Sıralama", + "Cut (⌘X)" => "Kes (⌘X)", + "Damping factor:" => "Sönüm faktörü:", + "Data Range:" => "Veri Aralığı:", + "Data and Model" => "Veri ve Model", + "Data validation" => "Veri doğrulama", + "Database" => "Veritabanı", + "Date unit" => "Tarih birimi", + "Day" => "Gün", + "Decimal" => "Ondalık", + "Define Name…" => "Ad Tanımla…", + "Delete Comment" => "Açıklamayı Sil", + "Delete Sheet" => "Sayfayı Sil", + "Delete chart" => "Grafiği sil", + "Delete rows" => "Satırları sil", + "Delete…" => "Sil…", + "Description (optional):" => "Açıklama (isteğe bağlı):", + "Descriptive Statistics" => "Tanımlayıcı İstatistik", + "Destination:" => "Hedef:", + "Diagonal ↗" => "Çapraz ↗", + "Diagonal ↘" => "Çapraz ↘", + "Dismiss" => "Kapat", + "Display:" => "Görüntülenecek metin:", + "Distributed" => "Dağıtılmış", + "Divide" => "Böl", + "Do you want to save the changes you made to {title}?" => "{title} dosyasında yaptığınız değişiklikleri kaydetmek istiyor musunuz?", + "Don't Save" => "Kaydetme", + "Double" => "Çift", + "Double Accounting" => "Çift Muhasebe", + "Doughnut" => "Halka", + "Down" => "Aşağı", + "Drag to fill cells. Drag from inside a cell to select a range." => { + "Hücreleri doldurmak için sürükleyin. Aralık seçmek için hücrenin içinden sürükleyin." + } + "Duplicate" => "Çoğalt", + "Duplicate Values…" => "Yinelenen Değerler…", + "Edit Name" => "Adı Düzenle", + "Edit chart title" => "Grafik başlığını düzenle", + "Edit…" => "Düzenle…", + "End date:" => "Bitiş tarihi:", + "Engineering" => "Mühendislik", + "Entire column" => "Tüm sütun", + "Entire row" => "Tüm satır", + "Equal To…" => "Eşittir…", + "Erase ink strokes" => "Mürekkep çizgilerini sil", + "Error checking options" => "Hata denetimi seçenekleri", + "Error message:" => "Hata iletisi:", + "Error style" => "Hata stili", + "Errors" => "Hatalar", + "Every command run in this session (replayable)" => "Bu oturumda çalıştırılan tüm komutlar (yeniden oynatılabilir)", + "Expand formula bar" => "Formül çubuğunu genişlet", + "Explanatory Text" => "Açıklayıcı Metin", + "Exponential Smoothing" => "Üstel Düzeltme", + "Export as CSV…" => "CSV Olarak Dışarı Aktar…", + "Export as PDF…" => "PDF Olarak Dışarı Aktar…", + "Export as Web Page (.html)…" => "Web Sayfası Olarak Dışarı Aktar (.html)…", + "F-Test Two-Sample for Variances" => "F-Testi Varyanslar için İki Örnek", + "Fill missing points using" => "Eksik noktaları doldurma yöntemi", + "Filter (⌘⇧F)" => "Filtre (⌘⇧F)", + "Filter by Selected Cell's Value" => "Seçili Hücrenin Değerine Göre Filtrele", + "Filters" => "Filtreler", + "Find" => "Bul", + "Find & Select" => "Bul ve Seç", + "Find All" => "Tümünü Bul", + "Find Next" => "Sonrakini Bul", + "Find and Replace" => "Bul ve Değiştir", + "Find what:" => "Aranan:", + "Finding printers…" => "Yazıcılar aranıyor…", + "Fit selection" => "Seçime sığdır", + "Fits inside the selected cell and moves with its content." => "Seçili hücrenin içine sığar ve içeriğiyle birlikte taşınır.", + "Flash Fill (⌘E)" => "Hızlı Doldurma (⌘E)", + "Font" => "Yazı Tipi", + "Footer (in):" => "Altbilgi (inç):", + "Footer:" => "Altbilgi:", + "Forecast Sheet" => "Tahmin Sayfası", + "Forecast end (date or number; blank: a third of the history):" => "Tahmin sonu (tarih ya da sayı; boş: geçmişin üçte biri):", + "Forecast start (a date or number in the history; blank: after the last point):" => { + "Tahmin başlangıcı (geçmişteki bir tarih ya da sayı; boş: son noktadan sonra):" + } + "Format Cells" => "Hücreleri Biçimlendir", + "Format Cells|Fill" => "Dolgu", + "Format Chart Area…" => "Grafik Alanını Biçimlendir…", + "Format Chart pane" => "Grafiği Biçimlendir bölmesi", + "Format as Table" => "Tablo Olarak Biçimlendir", + "Format cells" => "Hücreleri biçimlendir", + "Format cells that are (value):" => "Şu değerdeki hücreleri biçimlendir:", + "Format cells that contain a date occurring:" => "Şu tarihi içeren hücreleri biçimlendir:", + "Format cells that contain the text:" => "Şu metni içeren hücreleri biçimlendir:", + "Format columns" => "Sütunları biçimlendir", + "Format rows" => "Satırları biçimlendir", + "Format values where this formula is true:" => "Bu formülün doğru olduğu değerleri biçimlendir:", + "Formats (T)" => "Biçimler (T)", + "Formula Builder" => "Formül Oluşturucu", + "Formula:" => "Formül:", + "Formulas (F)" => "Formüller (F)", + "Formulas and number formats" => "Formüller ve sayı biçimleri", + "Funnel" => "Huni", + "GRG Nonlinear" => "GRG Doğrusal Olmayan", + "Go To" => "Git", + "Go To Special" => "Özel Git", + "Goal Seek" => "Hedef Ara", + "Goal Seeking found a solution: {value}" => "Hedef Arama bir çözüm buldu: {value}", + "Good" => "İyi", + "Good, Bad and Neutral" => "İyi, Kötü ve Nötr", + "Gradebook" => "Not Defteri", + "Grayscale" => "Gri Tonlamalı", + "Greater Than…" => "Büyüktür…", + "Green" => "Yeşil", + "Green - White - Red" => "Yeşil - Beyaz - Kırmızı", + "Green - Yellow - Red" => "Yeşil - Sarı - Kırmızı", + "Green Fill with Dark Green Text" => "Yeşil Dolgu ile Koyu Yeşil Metin", + "Group by Months" => "Aylara Göre Gruplandır", + "Group by Quarters" => "Çeyreklere Göre Gruplandır", + "Group by Years" => "Yıllara Göre Gruplandır", + "Grouped By:" => "Gruplama:", + "Growth" => "Büyüme", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "Üstbilgi (&L sol, &C orta, &R sağ; &P sayfa, &N sayfa sayısı, &D tarih, &A sayfa adı):" + } + "Header (in):" => "Üstbilgi (inç):", + "Heading 1" => "Başlık 1", + "Heading 2" => "Başlık 2", + "Heading 3" => "Başlık 3", + "Heading 4" => "Başlık 4", + "Hex" => "Onaltılık", + "Hidden" => "Gizli", + "Hidden: {sheets}" => "Gizli: {sheets}", + "Hide" => "Gizle", + "Hide Sheet" => "Sayfayı Gizle", + "Hierarchy & more" => "Hiyerarşi ve diğerleri", + "Highlight Cells Rules" => "Hücre Kurallarını Vurgula", + "Highlighter" => "Vurgulayıcı", + "Histogram" => "Histogram", + "Horizontal (Category) Axis Labels:" => "Yatay (Kategori) Eksen Etiketleri:", + "Horizontal axis title:" => "Yatay eksen başlığı:", + "Household Budget" => "Ev Bütçesi", + "How agents drive GridCraft (MCP / control channel)" => "Ajanlar GridCraft'ı nasıl yönetir (MCP / kontrol kanalı)", + "Hypothesized Mean Difference:" => "Varsayılan Ortalama Farkı:", + "Ignore Once" => "Bir Kez Yoksay", + "Ignore blank" => "Boşluğu yoksay", + "Import a text or CSV file" => "Metin ya da CSV dosyası içeri aktar", + "In the last 7 days" => "Son 7 günde", + "In-cell dropdown" => "Hücre içi açılır liste", + "Include forecast statistics" => "Tahmin istatistiklerini ekle", + "Indent" => "Girinti", + "Information" => "Bilgi", + "Input" => "Giriş", + "Input Range:" => "Giriş Aralığı:", + "Input X Range:" => "Giriş X Aralığı:", + "Input Y Range:" => "Giriş Y Aralığı:", + "Input message:" => "Giriş iletisi:", + "Insert\nSlicer" => "Dilimleyici\nEkle", + "Insert Calculated Field" => "Hesaplanmış Alan Ekle", + "Insert Chart" => "Grafik Ekle", + "Insert Function (⇧F3)" => "İşlev Ekle (⇧F3)", + "Insert Hyperlink" => "Köprü Ekle", + "Insert Link" => "Köprü Ekle", + "Insert Link (⌘K)" => "Köprü Ekle (⌘K)", + "Insert Sheet" => "Sayfa Ekle", + "Insert Slicer" => "Dilimleyici Ekle", + "Insert a picture" => "Resim ekle", + "Insert a slicer to filter a table" => "Tabloyu filtrelemek için dilimleyici ekle", + "Insert an icon" => "Simge ekle", + "Insert rows" => "Satır ekle", + "Insert…" => "Ekle…", + "Inside Borders" => "İç Kenarlıklar", + "Interpolation" => "Ara değer bulma", + "Interval:" => "Aralık:", + "Italic (⌘I)" => "İtalik (⌘I)", + "Join the ArtCraft Discord" => "ArtCraft Discord'una katılın", + "Justify" => "İki Yana Yasla", + "Keep" => "Koru", + "Keep Solver Solution" => "Çözücü Çözümünü Koru", + "Kth Largest (blank for none):" => "K. En Büyük (istenmiyorsa boş):", + "Kth Smallest (blank for none):" => "K. En Küçük (istenmiyorsa boş):", + "Labels in first row" => "Etiketler ilk satırda", + "Last cell" => "Son hücre", + "Last month" => "Geçen ay", + "Last week" => "Geçen hafta", + "Left Border" => "Sol Kenarlık", + "Left margin (in):" => "Sol kenar boşluğu (inç):", + "Legend Entries (Series)" => "Gösterge Girişleri (Seriler)", + "Less Than…" => "Küçüktür…", + "Licence" => "Lisans", + "Light Blue" => "Açık Mavi", + "Light Red Fill" => "Açık Kırmızı Dolgu", + "Light Red Fill with Dark Red Text" => "Açık Kırmızı Dolgu ile Koyu Kırmızı Metin", + "Line" => "Çizgi", + "Line chart" => "Çizgi grafik", + "Line or Area" => "Çizgi veya Alan", + "Line with Markers" => "İşaretçili Çizgi", + "Linear" => "Doğrusal", + "Link to (web address, e-mail or Sheet!A1):" => "Bağlantı hedefi (web adresi, e-posta ya da Sayfa!A1):", + "Linked Cell" => "Bağlı Hücre", + "Link…" => "Köprü…", + "List" => "Liste", + "Location Range:" => "Konum Aralığı:", + "Locked" => "Kilitli", + "Macros and scripts in this workbook (Alt+F8)" => "Bu çalışma kitabındaki makrolar ve betikler (Alt+F8)", + "Magnification" => "Büyütme", + "Make Unconstrained Variables Non-Negative" => "Kısıtlanmamış Değişkenleri Negatif Olmayan Yap", + "Manage Rules…" => "Kuralları Yönet…", + "Markers" => "İşaretçiler", + "Match case" => "Büyük/küçük harf eşleştir", + "Match entire cell contents" => "Tüm hücre içeriğini eşleştir", + "Max" => "Maks", + "Maximum Change must be a number of 0 or more." => "En Fazla Değişiklik 0 ya da daha büyük bir sayı olmalıdır.", + "Maximum Change:" => "En Fazla Değişiklik:", + "Maximum Iterations must be a whole number from 1 to 32767." => "En Fazla Yineleme 1 ile 32767 arasında bir tam sayı olmalıdır.", + "Maximum Iterations:" => "En Fazla Yineleme:", + "Maximum:" => "En fazla:", + "Median" => "Ortanca", + "Middle Align" => "Ortaya Hizala", + "Min" => "Min", + "Minimum / Source / Formula:" => "En az / Kaynak / Formül:", + "Models" => "Modeller", + "Modify" => "Değiştir", + "Month" => "Ay", + "More Borders…" => "Diğer Kenarlıklar…", + "More Colors…" => "Diğer Renkler…", + "More Functions…" => "Diğer İşlevler…", + "More commands" => "Diğer komutlar", + "Move or Copy" => "Taşı veya Kopyala", + "Move or Copy Sheet…" => "Sayfayı Taşı veya Kopyala…", + "Move or Copy…" => "Taşı veya Kopyala…", + "Move to Column Labels" => "Sütun Etiketlerine Taşı", + "Move to Report Filter" => "Rapor Filtresine Taşı", + "Move to Row Labels" => "Satır Etiketlerine Taşı", + "Move to Values" => "Değerlere Taşı", + "Moving Average" => "Hareketli Ortalama", + "Multiply" => "Çarp", + "My data has headers" => "Verilerimde başlık var", + "My list has headers" => "Listemde başlık var", + "Name" => "Ad", + "Name Manager" => "Ad Yöneticisi", + "Name:" => "Ad:", + "Neutral" => "Nötr", + "New Comment" => "Yeni Açıklama", + "New Name" => "Yeni Ad", + "New Rule…" => "Yeni Kural…", + "New Workbook" => "Yeni Çalışma Kitabı", + "New Worksheet Ply:" => "Yeni Çalışma Sayfası:", + "New sheet (⇧F11)" => "Yeni sayfa (⇧F11)", + "New title (Modify):" => "Yeni başlık (Değiştir):", + "New…" => "Yeni…", + "Next month" => "Gelecek ay", + "Next sheet" => "Sonraki sayfa", + "Next week" => "Gelecek hafta", + "No Border" => "Kenarlık Yok", + "No Color" => "Renk Yok", + "No Fill" => "Dolgu Yok", + "No names defined" => "Tanımlı ad yok", + "No picture selected" => "Resim seçilmedi", + "No printers found. Configure a system printer or export a PDF." => { + "Yazıcı bulunamadı. Bir sistem yazıcısı tanımlayın ya da PDF olarak dışarı aktarın." + } + "No ranges yet." => "Henüz aralık yok.", + "None" => "Yok", + "Normal Probability" => "Normal Olasılık", + "Not in Dictionary ({cell}):" => "Sözlükte Yok ({cell}):", + "Note" => "Not", + "Note:" => "Not:", + "Number Format" => "Sayı Biçimi", + "Number Stored as Text" => "Metin Olarak Depolanmış Sayı", + "Numbers" => "Sayılar", + "OK" => "Tamam", + "One-sided" => "Tek taraflı", + "Open…" => "Aç…", + "Operation" => "İşlem", + "Options|Editing" => "Düzenleme", + "Orange" => "Turuncu", + "Orientation (degrees)" => "Yönlendirme (derece)", + "Other:" => "Diğer:", + "Outline" => "Anahat", + "Output" => "Çıkış", + "Output Range:" => "Çıkış Aralığı:", + "Output options" => "Çıkış seçenekleri", + "Outside Borders" => "Dış Kenarlıklar", + "Oval" => "Oval", + "Page Break Preview" => "Sayfa Sonu Önizleme", + "Page Breaks" => "Sayfa Sonları", + "Page Setup" => "Sayfa Yapısı", + "Paper Size" => "Kâğıt Boyutu", + "Pareto (sorted histogram)" => "Pareto (sıralanmış histogram)", + "Password" => "Parola", + "Password (optional):" => "Parola (isteğe bağlı):", + "Password:" => "Parola:", + "Paste (⌘V)" => "Yapıştır (⌘V)", + "Paste Special" => "Özel Yapıştır", + "Paste formulas that refer to the copied cells" => "Kopyalanan hücrelere başvuran formüller yapıştır", + "Pen\nBlack" => "Kalem\nSiyah", + "Pen\nBlue" => "Kalem\nMavi", + "Pen\nRed" => "Kalem\nKırmızı", + "Percent" => "Yüzde", + "Pick From Drop-down List…" => "Açılan Listeden Seç…", + "Pick From List" => "Listeden Seç", + "Picture file path (PNG or JPEG):" => "Resim dosyasının yolu (PNG ya da JPEG):", + "Pie" => "Pasta", + "Pie or Doughnut" => "Pasta veya Halka", + "PivotTable Fields" => "Özet Tablo Alanları", + "Place Picture in Cell" => "Resmi Hücreye Yerleştir", + "Place Picture over Cells" => "Resmi Hücrelerin Üzerine Yerleştir", + "Place in Cell" => "Hücreye Yerleştir", + "Place over Cells" => "Hücrelerin Üzerine Yerleştir", + "Platform" => "Platform", + "Previous sheet" => "Önceki sayfa", + "Print Area" => "Yazdırma Alanı", + "Print Titles" => "Başlıkları Yazdır", + "Print failed: the printing worker stopped." => "Yazdırılamadı: yazdırma işlemi durdu.", + "Print failed: {error}" => "Yazdırılamadı: {error}", + "Print job submitted." => "Yazdırma işi gönderildi.", + "Print job submitted: {receipt}" => "Yazdırma işi gönderildi: {receipt}", + "Printer" => "Yazıcı", + "Printer default" => "Yazıcı varsayılanı", + "Printer discovery failed." => "Yazıcılar bulunamadı.", + "Print…" => "Yazdır…", + "Product" => "Çarpım", + "Product Information" => "Ürün Bilgileri", + "Protect\nSheet" => "Sayfayı\nKoru", + "Protect Sheet" => "Sayfayı Koru", + "Protect Structure and Windows" => "Yapıyı ve Pencereleri Koru", + "Protect Workbook structure" => "Çalışma kitabı yapısını koru", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "Çalışma kitabını koru: Yapı (sayfalar eklenemez, taşınamaz, yeniden adlandırılamaz, gizlenemez veya silinemez)." + } + "Protection" => "Koruma", + "Purple" => "Mor", + "Quarterly Sales Dashboard" => "Üç Aylık Satış Panosu", + "Radar" => "Radar", + "Range password:" => "Aralık parolası:", + "Ranges that stay editable when the sheet is protected:" => "Sayfa korunduğunda düzenlenebilir kalan aralıklar:", + "Rank and Percentile" => "Derece ve Yüzdebirlik", + "Recent Colors" => "Son Kullanılan Renkler", + "Recommended Charts" => "Önerilen Grafikler", + "Rectangle" => "Dikdörtgen", + "Red" => "Kırmızı", + "Red - Yellow - Green" => "Kırmızı - Sarı - Yeşil", + "Red Border" => "Kırmızı Kenarlık", + "Red Text" => "Kırmızı Metin", + "Redo" => "Yinele", + "Redo (⌘Y)" => "Yinele (⌘Y)", + "Reference:" => "Başvuru:", + "Refers To" => "Başvuru Yeri", + "Refers to cells:" => "Başvurduğu hücreler:", + "Refers to:" => "Başvuru yeri:", + "Refresh" => "Yenile", + "Refresh printers" => "Yazıcıları yenile", + "Regression" => "Regresyon", + "Remove" => "Kaldır", + "Remove Duplicates" => "Yinelenenleri Kaldır", + "Remove Field" => "Alanı Kaldır", + "Remove the password (Modify)" => "Parolayı kaldır (Değiştir)", + "Rename" => "Yeniden Adlandır", + "Rename Sheet" => "Sayfayı Yeniden Adlandır", + "Replace" => "Değiştir", + "Replace All" => "Tümünü Değiştir", + "Replace with:" => "Yeni değer:", + "Report Layout" => "Rapor Düzeni", + "Residuals" => "Artıklar", + "Restore Original Values" => "Özgün Değerleri Geri Yükle", + "Right Border" => "Sağ Kenarlık", + "Right margin (in):" => "Sağ kenar boşluğu (inç):", + "Rounded Rectangle" => "Yuvarlatılmış Dikdörtgen", + "Row Height" => "Satır Yüksekliği", + "Row height (pixels):" => "Satır yüksekliği (piksel):", + "Rows" => "Satırlar", + "Sample" => "Örnek", + "Save (⌘S)" => "Kaydet (⌘S)", + "Save As…" => "Farklı Kaydet…", + "Save Changes?" => "Değişiklikler Kaydedilsin mi?", + "Save a Copy" => "Kopya Kaydet", + "Save a Copy as Excel Workbook (.xlsx)…" => "Kopyayı Excel Çalışma Kitabı Olarak Kaydet (.xlsx)…", + "Save a copy as .{format}" => "Kopyayı .{format} olarak kaydet", + "Scatter" => "Dağılım", + "Scatter or Bubble" => "Dağılım veya Kabarcık", + "Scatter with Lines" => "Çizgili Dağılım", + "Scope" => "Kapsam", + "Scope (Workbook or sheet name):" => "Kapsam (Çalışma kitabı ya da sayfa adı):", + "ScreenTip:" => "Ekran İpucu:", + "Search" => "Ara", + "Search Commands" => "Komut Ara", + "Search and run any command" => "Herhangi bir komutu arayıp çalıştırın", + "Search commands" => "Komut ara", + "Search commands (⌘⇧Space)" => "Komut ara (⌘⇧Space)", + "Seasonality (auto, 0 for none, or a season length):" => "Mevsimsellik (otomatik, yoksa 0 ya da dönem uzunluğu):", + "Select" => "Seç", + "Select All Sheets" => "Tüm Sayfaları Seç", + "Select Data" => "Veri Seç", + "Select Data Source" => "Veri Kaynağını Seç", + "Select Data…" => "Veri Seç…", + "Select a Solving Method:" => "Bir Çözüm Yöntemi Seçin:", + "Select a chart first." => "Önce bir grafik seçin.", + "Select a printer" => "Yazıcı seçin", + "Select and move ink and shapes" => "Mürekkep ve şekilleri seçip taşıyın", + "Semicolon" => "Noktalı virgül", + "Series" => "Seri", + "Series in" => "Seriler", + "Series{n}" => "Seri{n}", + "Series…" => "Seri…", + "Set Objective:" => "Hedefi Belirle:", + "Set cell:" => "Hedef hücre:", + "Share: export or save a copy" => "Paylaş: dışarı aktarın ya da kopya kaydedin", + "Sheets: {sheets}" => "Sayfalar: {sheets}", + "Shift cells down" => "Hücreleri aşağı kaydır", + "Shift cells left" => "Hücreleri sola kaydır", + "Shift cells right" => "Hücreleri sağa kaydır", + "Shift cells up" => "Hücreleri yukarı kaydır", + "Show Formulas (⌃`)" => "Formülleri Göster (⌃`)", + "Show as % of Grand Total" => "Genel Toplamın %'si Olarak Göster", + "Show as No Calculation" => "Hesaplama Yapmadan Göster", + "Show as Rank" => "Derece Olarak Göster", + "Show as Running Total" => "Değişen Toplam Olarak Göster", + "Show password" => "Parolayı göster", + "Shrink to fit" => "Uyacak şekilde daralt", + "Single" => "Tek", + "Single Accounting" => "Tek Muhasebe", + "Skip blanks" => "Boşlukları atla", + "Slicer" => "Dilimleyici", + "Solve" => "Çöz", + "Solver Parameters" => "Çözücü Parametreleri", + "Solver Results" => "Çözücü Sonuçları", + "Sort & Filter" => "Sırala ve Filtre Uygula", + "Sort Ascending" => "Artan Sırala", + "Sort Descending" => "Azalan Sırala", + "Sort by" => "Sıralama ölçütü", + "Source:" => "Kaynak:", + "Space" => "Boşluk", + "Special…" => "Özel…", + "Spelling (F7)" => "Yazım Denetimi (F7)", + "Stacked Area" => "Yığılmış Alan", + "Stacked Bar" => "Yığılmış Çubuk", + "Stacked Column" => "Yığılmış Sütun", + "Stacked Line" => "Yığılmış Çizgi", + "Standard Colors" => "Standart Renkler", + "Standard Errors" => "Standart Hatalar", + "Standard Width" => "Standart Genişlik", + "Standard column width (pixels):" => "Standart sütun genişliği (piksel):", + "Standardized Residuals" => "Standartlaştırılmış Artıklar", + "Start a conversation:" => "Sohbet başlatın:", + "Start a new workbook" => "Yeni çalışma kitabı başlat", + "Statistic" => "İstatistik", + "Statistical" => "İstatistiksel", + "Step value:" => "Adım değeri:", + "Stock" => "Hisse Senedi", + "Stop value:" => "Son değer:", + "Subject to the Constraints:" => "Kısıtlamalara Bağlı:", + "Submitting print job…" => "Yazdırma işi gönderiliyor…", + "Subscript" => "Alt Simge", + "Subtract" => "Çıkar", + "Suggestions:" => "Öneriler:", + "Sum" => "Topla", + "Summarize by Average" => "Ortalamaya Göre Özetle", + "Summarize by Count" => "Saymaya Göre Özetle", + "Summarize by Max" => "En Büyüğe Göre Özetle", + "Summarize by Min" => "En Küçüğe Göre Özetle", + "Summarize by Sum" => "Toplama Göre Özetle", + "Summary statistics" => "Özet istatistikler", + "Sunburst" => "Güneş Patlaması", + "Superscript" => "Üst Simge", + "Switch Row/Column" => "Satır/Sütun Değiştir", + "Tab" => "Sekme", + "Tab Color" => "Sekme Rengi", + "Table (⌘T)" => "Tablo (⌘T)", + "Table Styles" => "Tablo Stilleri", + "Tabular" => "Tablo", + "Tab|Insert" => "Ekle", + "Text length" => "Metin uzunluğu", + "Text that Contains…" => "İçeren Metin…", + "Text to Columns" => "Metni Sütunlara Dönüştür", + "The output range already holds data. Replace it with the report?" => "Çıkış aralığında zaten veri var. Raporla değiştirilsin mi?", + "The spelling check is complete for the entire sheet." => "Tüm sayfa için yazım denetimi tamamlandı.", + "Theme Colors" => "Tema Renkleri", + "Themed Cell Styles" => "Temalı Hücre Stilleri", + "Then by" => "Sonra", + "There are no conditional formatting rules on this sheet." => "Bu sayfada koşullu biçimlendirme kuralı yok.", + "Thick Bottom Border" => "Kalın Alt Kenarlık", + "Thick Outside Borders" => "Kalın Dış Kenarlıklar", + "This month" => "Bu ay", + "This week" => "Bu hafta", + "This workbook" => "Bu çalışma kitabı", + "Timeline range (blank: first column of the selection):" => "Zaman çizelgesi aralığı (boş: seçimin ilk sütunu):", + "Title:" => "Başlık:", + "Titles and Headings" => "Başlıklar ve Üst Başlıklar", + "To value:" => "Hedef değer:", + "To:" => "Bitiş:", + "Today" => "Bugün", + "Tomorrow" => "Yarın", + "Top" => "Üst", + "Top Align" => "Üste Hizala", + "Top Border" => "Üst Kenarlık", + "Top and Bottom Border" => "Üst ve Alt Kenarlık", + "Top and Double Bottom Border" => "Üst ve Çift Alt Kenarlık", + "Top and Thick Bottom Border" => "Üst ve Kalın Alt Kenarlık", + "Top margin (in):" => "Üst kenar boşluğu (inç):", + "Top/Bottom Rules" => "Üst/Alt Kuralları", + "Total" => "Toplam", + "Transpose (E)" => "Devrik Dönüştür (E)", + "Treat consecutive delimiters as one" => "Ardışık sınırlayıcıları tek say", + "Treemap" => "Ağaç Haritası", + "Triangle" => "Üçgen", + "Two-sided printing" => "Çift taraflı yazdırma", + "Two-sided: long edge" => "Çift taraflı: uzun kenar", + "Two-sided: short edge" => "Çift taraflı: kısa kenar", + "Type" => "Tür", + "Type (custom format code):" => "Tür (özel biçim kodu):", + "Type a command, e.g. freeze, chart, bold…" => "Bir komut yazın; ör. dondur, grafik, kalın…", + "Underline (⌘U)" => "Altı Çizili (⌘U)", + "Undo" => "Geri Al", + "Undo (⌘Z)" => "Geri Al (⌘Z)", + "Undo list" => "Geri alma listesi", + "Unhide" => "Göster", + "Unhide Sheet…" => "Sayfayı Göster…", + "Unhide sheet:" => "Gösterilecek sayfa:", + "Unhide…" => "Göster…", + "Unlock with password" => "Parolayla kilidi aç", + "Unprotect Sheet" => "Sayfa Korumasını Kaldır", + "Unprotect Sheet…" => "Sayfa Korumasını Kaldır…", + "Unprotect Workbook" => "Çalışma Kitabı Korumasını Kaldır", + "Up" => "Yukarı", + "Use AutoFilter" => "Otomatik Filtre kullan", + "Use a field's menu to move it between areas:" => "Alanı alanlar arasında taşımak için menüsünü kullanın:", + "Use function" => "Kullanılacak işlev", + "Validation" => "Doğrulama", + "Value" => "Değer", + "Value Of:" => "Değer:", + "Values" => "Değerler", + "Values (V)" => "Değerler (V)", + "Values and number formats" => "Değerler ve sayı biçimleri", + "Values range (blank: second column of the selection):" => "Değer aralığı (boş: seçimin ikinci sütunu):", + "Variable 1 Range:" => "Değişken 1 Aralığı:", + "Variable 2 Range:" => "Değişken 2 Aralığı:", + "Version" => "Sürüm", + "Version {version}" => "Sürüm {version}", + "Version, contributors and the AI models that helped" => "Sürüm, katkıda bulunanlar ve yardımcı olan yapay zekâ modelleri", + "Vertical" => "Dikey", + "Vertical axis title:" => "Dikey eksen başlığı:", + "Visible cells only" => "Yalnızca görünür hücreler", + "Warning" => "Uyarı", + "Warning Text" => "Uyarı Metni", + "Watch\nWindow" => "Gözcü\nPenceresi", + "Waterfall" => "Şelale", + "Web" => "Web", + "Weekday" => "Hafta içi", + "What-If Analysis" => "Durum Çözümlemesi", + "White - Green" => "Beyaz - Yeşil", + "White - Red" => "Beyaz - Kırmızı", + "Whole number" => "Tam sayı", + "Win/Loss" => "Kazanç/Kayıp", + "Within workbook" => "Çalışma kitabında", + "Workbook" => "Çalışma Kitabı", + "Workbook\nStatistics" => "Çalışma Kitabı\nİstatistikleri", + "Workbook Statistics" => "Çalışma Kitabı İstatistikleri", + "Wrap text" => "Metni kaydır", + "Year" => "Yıl", + "Yellow Fill with Dark Yellow Text" => "Sarı Dolgu ile Koyu Sarı Metin", + "Z to A" => "Z'den A'ya", + "Zeros" => "Sıfırlar", + "Zoom In" => "Yakınlaştır", + "Zoom Out" => "Uzaklaştır", + "Zoom to 100%" => "%100'e Yakınlaştır", + "Zoom to Selection" => "Seçimi Yakınlaştır", + "Zoom…" => "Yakınlaştır…", + "and:" => "ve:", + "applies to" => "uygulandığı yer", + "between" => "arasında", + "dashed" => "kesik çizgili", + "dotted" => "noktalı", + "double" => "çift", + "equal to" => "eşittir", + "greater than" => "büyüktür", + "greater than or equal to" => "büyük veya eşittir", + "less than" => "küçüktür", + "less than or equal to" => "küçük veya eşittir", + "medium" => "orta", + "none" => "yok", + "not between" => "arasında değil", + "not equal to" => "eşit değildir", + "t-Test: Paired Two Sample for Means" => "t-Testi: Ortalamalar için Eşleştirilmiş İki Örnek", + "t-Test: Two-Sample Assuming Equal Variances" => "t-Testi: Eşit Varyanslar Varsayılan İki Örnek", + "t-Test: Two-Sample Assuming Unequal Variances" => "t-Testi: Eşit Olmayan Varyanslar Varsayılan İki Örnek", + "thick" => "kalın", + "thin" => "ince", + "this workbook" => "bu çalışma kitabı", + "with" => "biçim", + "{count} cell(s) found" => "{count} hücre bulundu", + "£ English (United Kingdom)" => "£ İngilizce (Birleşik Krallık)", + "¥ Japanese" => "¥ Japonca", + "— 1 step" => "— 1 adım", + "— VBA project (preserved, not run)" => "— VBA projesi (korunur, çalıştırılmaz)", + "— {steps} steps" => "— {steps} adım", + "€ Euro" => "€ Euro", + "Advanced" => "Gelişmiş", + "Advanced Filter" => "Gelişmiş Filtre", + "Settings" => "Ayarlar", + "Outline Settings" => "Anahat Ayarları", + "New\nWindow" => "Yeni\nPencere", + "New Window" => "Yeni Pencere", + "Arrange\nAll" => "Tümünü\nYerleştir", + "Arrange All" => "Tümünü Yerleştir", + "Switch\nWindows" => "Pencerelerde\nGeçiş Yap", + "Switch Windows" => "Pencerelerde Geçiş Yap", + "A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft." => { + "Temiz oda yöntemiyle geliştirilmiş, açık kaynaklı, Rust ile yazılmış bir hesap tablosu. ArtCraft'ın bir parçası." + } + "Add Watch (active cell)" => "Gözcü Ekle (etkin hücre)", + "Automation in this workbook. GridCraft runs its own scripts; a file's VBA project is preserved but not executed." => { + "Bu çalışma kitabındaki otomasyon. GridCraft kendi betiklerini çalıştırır; dosyadaki VBA projesi korunur ancak çalıştırılmaz." + } + "Bring Forward" => "Öne Getir", + "Can't Undo" => "Geri Alınamaz", + "Fill…" => "Dolgu…", + "GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:" => { + "GridCraft tamamen ajanlarla yönetilebilir. Her menü öğesi, düğme ve hareket bir komuttur:" + } + "Let this workbook's scripts run for the rest of this session" => "Bu çalışma kitabının betiklerinin bu oturum boyunca çalışmasına izin ver", + "Preview" => "Önizleme", + "Reply…" => "Yanıtla…", + "Reports:" => "Raporlar:", + "Send" => "Gönder", + "Send Backward" => "Geriye Gönder", + "The chart no longer exists." => "Grafik artık yok.", + "Trust Scripts" => "Betiklere Güven", + "'This workbook' is protected." => "'Bu çalışma kitabı' korumalı.", + "A table can't overlap another table." => "Bir tablo başka bir tabloyla çakışamaz.", + "A workbook must contain at least one visible worksheet." => "Çalışma kitabında en az bir görünür çalışma sayfası olmalıdır.", + "Actions" => "Eylemler", + "Activate Sheet" => "Sayfayı Etkinleştir", + "Active Field" => "Etkin Alan", + "Add Field" => "Alan Ekle", + "Add Scenario" => "Senaryo Ekle", + "Add-ins" => "Eklentiler", + "Advanced…" => "Gelişmiş…", + "Align" => "Hizala", + "All Scripts" => "Tüm Betikler", + "Allow Edit Ranges…" => "Aralıkları Düzenlemeye İzin Ver…", + "Analysis" => "Analiz", + "Anova needs at least two groups, each with at least one number." => "Anova için her birinde en az bir sayı olan en az iki grup gerekir.", + "Arrange" => "Yerleştir", + "Arrange Windows" => "Pencereleri Yerleştir", + "Auto Fill Options" => "Otomatik Doldurma Seçenekleri", + "AutoFill" => "Otomatik Doldur", + "Background" => "Arka Plan", + "Banded Columns" => "Şeritli Sütunlar", + "Banded Rows" => "Şeritli Satırlar", + "Calculated Field" => "Hesaplanmış Alan", + "Calculations" => "Hesaplamalar", + "Cancel Copy" => "Kopyalamayı İptal Et", + "Cascade" => "Basamakla", + "Cell Controls" => "Hücre Denetimleri", + "Cells" => "Hücreler", + "Change Chart Type…" => "Grafik Türünü Değiştir…", + "Change Colors" => "Renkleri Değiştir", + "Change Data Source" => "Veri Kaynağını Değiştir", + "Chart Layouts" => "Grafik Düzenleri", + "Chart Properties" => "Grafik Özellikleri", + "Chart Recommendations" => "Grafik Önerileri", + "Chart Styles" => "Grafik Stilleri", + "Chart Type" => "Grafik Türü", + "Charts" => "Grafikler", + "Check Value Against Validation" => "Değeri Doğrulamaya Göre Denetle", + "Check for\nUpdates…" => "Güncelleştirmeleri\nDenetle…", + "Clear Slicer Filter" => "Dilimleyici Filtresini Temizle", + "Clipboard" => "Pano", + "Close Window" => "Pencereyi Kapat", + "Colors" => "Renkler", + "Colors & Layout" => "Renkler ve Düzen", + "Column width must be between 0 and 1800 pixels." => "Sütun genişliği 0 ile 1800 piksel arasında olmalıdır.", + "Column width must be between 0 and 255 characters." => "Sütun genişliği 0 ile 255 karakter arasında olmalıdır.", + "Consolidate…" => "Birleştir…", + "Constraint Cell Reference" => "Kısıtlama Hücre Başvurusu", + "Constraint Operator" => "Kısıtlama İşleci", + "Constraint Value" => "Kısıtlama Değeri", + "Constraint cells must be on the objective cell's sheet." => "Kısıtlama hücreleri hedef hücrenin sayfasında olmalıdır.", + "Convert" => "Dönüştür", + "Copy matching rows elsewhere" => "Eşleşen satırları başka bir yere kopyala", + "Copy to:" => "Kopyalanacak yer:", + "Could not check for updates: {error}" => "Güncelleştirmeler denetlenemedi: {error}", + "Criteria range (optional):" => "Ölçüt aralığı (isteğe bağlı):", + "Current Selection" => "Geçerli Seçim", + "Custom Views…" => "Özel Görünümler…", + "Customize Status Bar" => "Durum Çubuğunu Özelleştir", + "Data Analysis…" => "Veri Analizi…", + "Data Labels" => "Veri Etiketleri", + "Data Tools" => "Veri Araçları", + "Defined Names" => "Tanımlı Adlar", + "Delete Chart" => "Grafiği Sil", + "Delete Name" => "Adı Sil", + "Delete Object" => "Nesneyi Sil", + "Delete PivotTable" => "Özet Tabloyu Sil", + "Delete Scenario" => "Senaryoyu Sil", + "Delete Script" => "Betiği Sil", + "Delete Slicer" => "Dilimleyiciyi Sil", + "Delete columns" => "Sütun sil", + "Draw Border" => "Kenarlık Çiz", + "Each input range needs at least two numbers." => "Her giriş aralığında en az iki sayı olmalıdır.", + "Edit Cell" => "Hücreyi Düzenle", + "Edit Text Box" => "Metin Kutusunu Düzenle", + "Editing" => "Düzenleme", + "Effects" => "Efektler", + "Elements" => "Öğeler", + "Encode Workbook" => "Çalışma Kitabını Kodla", + "Enter Cell" => "Hücreye Gir", + "Evaluate" => "Değerlendir", + "Excel 97-2003 (.xls) is supported for import only. Save as .xlsx or another supported export format." => { + "Excel 97-2003 (.xls) yalnızca içeri aktarma için desteklenir. .xlsx ya da desteklenen başka bir dışarı aktarma biçiminde kaydedin." + } + "Expand/Collapse Field" => "Alanı Genişlet/Daralt", + "Export as CSV" => "CSV Olarak Dışarı Aktar", + "Export as PDF" => "PDF Olarak Dışarı Aktar", + "Field List" => "Alan Listesi", + "Fill Down" => "Aşağı Doldur", + "Fill Left" => "Sola Doldur", + "Fill Range With Input" => "Aralığı Girişle Doldur", + "Fill Right" => "Sağa Doldur", + "Fill Up" => "Yukarı Doldur", + "Filter Column" => "Sütunu Filtrele", + "Filter Items" => "Öğeleri Filtrele", + "First Column" => "İlk Sütun", + "Fonts" => "Yazı Tipleri", + "Forecast" => "Tahmin", + "Format Painter" => "Biçim Boyacısı", + "Format Selection" => "Seçimi Biçimlendir", + "Formula Auditing" => "Formül Denetleme", + "From Table/Range" => "Tablodan/Aralıktan", + "From Text/CSV" => "Metinden/CSV'den", + "Function Library" => "İşlev Kitaplığı", + "Get & Transform Data" => "Veri Al ve Dönüştür", + "Get Cell" => "Hücreyi Al", + "Get Data" => "Veri Al", + "Grab bag" => "Karışık", + "Grand Totals" => "Genel Toplamlar", + "GridCraft {version} is up to date." => "GridCraft {version} güncel.", + "Group Field" => "Alanı Gruplandır", + "Header Row" => "Üst Bilgi Satırı", + "Hide & Unhide" => "Gizle ve Göster", + "Illustrations" => "Çizimler", + "Ink Stroke" => "Mürekkep Çizgisi", + "Ink to Shape" => "Mürekkebi Şekle Dönüştür", + "Input Y range and input X range must have the same number of rows." => "Giriş Y aralığı ile giriş X aralığının satır sayısı aynı olmalıdır.", + "Input Y range must be a single column." => "Giriş Y aralığı tek bir sütun olmalıdır.", + "Input range contains non-numeric data." => "Giriş aralığında sayısal olmayan veri var.", + "Input range must be a single row or column." => "Giriş aralığı tek bir satır ya da sütun olmalıdır.", + "Input ranges must have the same number of values." => "Giriş aralıklarındaki değer sayısı aynı olmalıdır.", + "Insert Cut Cells works on whole rows or columns; cut whole rows or columns, or use Paste." => { + "Kesilen Hücreleri Ekle tüm satır ya da sütunlarla çalışır; tüm satırları ya da sütunları kesin veya Yapıştır'ı kullanın." + } + "Insert columns" => "Sütun ekle", + "Inspect Workbook" => "Çalışma Kitabını İncele", + "Integer and binary constraints must be on variable cells." => "Tamsayı ve ikili kısıtlamalar değişken hücrelerde olmalıdır.", + "Lasso Select" => "Kement Seçimi", + "Last Column" => "Son Sütun", + "Layout" => "Düzen", + "Legend" => "Gösterge", + "Links" => "Bağlantılar", + "List Commands" => "Komutları Listele", + "List Functions" => "İşlevleri Listele", + "List range:" => "Liste aralığı:", + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet)." => { + "Hücreleri kilitlemek ya da formülleri gizlemek, çalışma sayfasını korumadıkça etkili olmaz (Gözden Geçir › Sayfayı Koru)." + } + "Look for a newer GridCraft release" => "Daha yeni bir GridCraft sürümü ara", + "Macros preserved (not executed)" => "Makrolar korundu (çalıştırılmadı)", + "More Table Styles" => "Diğer Tablo Stilleri", + "Move Chart…" => "Grafiği Taşı…", + "Move Columns" => "Sütunları Taşı", + "Move Field" => "Alanı Taşı", + "Move Object" => "Nesneyi Taşı", + "Move Selection" => "Seçimi Taşı", + "Multi-cell array formulas aren't allowed in tables." => "Tablolarda çok hücreli dizi formüllerine izin verilmez.", + "New Cell Style…" => "Yeni Hücre Stili…", + "New Script" => "Yeni Betik", + "New range for the table:" => "Tablonun yeni aralığı:", + "Next Cell in Selection" => "Seçimdeki Sonraki Hücre", + "Next Sheet" => "Sonraki Sayfa", + "No comments on this sheet yet. Select a cell and choose New Comment." => { + "Bu sayfada henüz açıklama yok. Bir hücre seçip Yeni Açıklama'yı seçin." + } + "No dependent cells." => "Etkilenen hücre yok.", + "No dictionary is available on this system (GridCraft uses the system word list)." => { + "Bu sistemde sözlük yok (GridCraft sistemin sözcük listesini kullanır)." + } + "No precedent cells." => "Etkileyen hücre yok.", + "No sheets are hidden." => "Gizli sayfa yok.", + "Nothing to import." => "İçeri aktarılacak bir şey yok.", + "ODS is supported for data import only. Save as .xlsx or another supported export format." => { + "ODS yalnızca veri içeri aktarma için desteklenir. .xlsx ya da desteklenen başka bir dışarı aktarma biçiminde kaydedin." + } + "Object Properties" => "Nesne Özellikleri", + "Open Hyperlink" => "Köprüyü Aç", + "Paste List" => "Listeyi Yapıştır", + "Paste Name" => "Ad Yapıştır", + "Paste name" => "Ad yapıştır", + "Pen" => "Kalem", + "Picture" => "Resim", + "PivotChart" => "Özet Grafik", + "PivotTable Analyze" => "Özet Tablo Analizi", + "PivotTable Design" => "Özet Tablo Tasarımı", + "PivotTable Layout" => "Özet Tablo Düzeni", + "PivotTable Options" => "Özet Tablo Seçenekleri", + "PivotTable Styles" => "Özet Tablo Stilleri", + "PivotTables" => "Özet Tablolar", + "Previous Sheet" => "Önceki Sayfa", + "Print Gridlines" => "Kılavuz Çizgilerini Yazdır", + "Print Headings" => "Başlıkları Yazdır", + "Print Preview" => "Baskı Önizleme", + "Printing is unavailable here; export a PDF instead." => "Burada yazdırma kullanılamıyor; bunun yerine PDF olarak dışarı aktarın.", + "Proofing" => "Yazım Denetleme", + "Protect" => "Koru", + "Queries & Connections" => "Sorgular ve Bağlantılar", + "Quick Layout" => "Hızlı Düzen", + "Range:" => "Aralık:", + "Ranges that stay editable when the sheet is protected:\nNo ranges yet." => { + "Sayfa korunduğunda düzenlenebilir kalan aralıklar:\nHenüz aralık yok." + } + "Read Range" => "Aralığı Oku", + "Recently Used" => "Son Kullanılanlar", + "Recommended PivotTables" => "Önerilen Özet Tablolar", + "Record Actions" => "Eylemleri Kaydet", + "Reference isn't valid." => "Başvuru geçerli değil.", + "Refresh All" => "Tümünü Yenile", + "Remove level" => "Düzeyi kaldır", + "Reply" => "Yanıtla", + "Resize\nTable" => "Tabloyu\nYeniden Boyutlandır", + "Resize Table" => "Tabloyu Yeniden Boyutlandır", + "Resolve Thread" => "Konuyu Çözümle", + "Resolved" => "Çözümlendi", + "Rotate" => "Döndür", + "Row height (points):" => "Satır yüksekliği (punto):", + "Row height must be between 0 and 409.5 points." => "Satır yüksekliği 0 ile 409,5 punto arasında olmalıdır.", + "Row height must be between 0 and 546 pixels (409.5 points)." => "Satır yüksekliği 0 ile 546 piksel (409,5 punto) arasında olmalıdır.", + "Run Script" => "Betiği Çalıştır", + "Save as Web Page" => "Web Sayfası Olarak Kaydet", + "Scale to Fit" => "Sığdırmak için Ölçeklendir", + "Scenario Summary" => "Senaryo Özeti", + "Scripting Tools" => "Betik Araçları", + "Scroll ribbon left" => "Şeridi sola kaydır", + "Scroll ribbon right" => "Şeridi sağa kaydır", + "Select All" => "Tümünü Seç", + "Select Current Region" => "Geçerli Bölgeyi Seç", + "Select Dependents" => "Etkilenenleri Seç", + "Select Entire Column" => "Tüm Sütunu Seç", + "Select Entire Row" => "Tüm Satırı Seç", + "Select Precedents" => "Etkileyenleri Seç", + "Select a cell inside a table first, or pass `table`." => "Önce bir tablonun içinde bir hücre seçin ya da `table` değerini verin.", + "Select a chart to format it." => "Biçimlendirmek için bir grafik seçin.", + "Select a timeline column and a values column for the forecast." => "Tahmin için bir zaman çizelgesi sütunu ve bir değerler sütunu seçin.", + "Select data for the chart first." => "Önce grafik için veri seçin.", + "Select locked cells" => "Kilitli hücreleri seç", + "Select unlocked cells" => "Kilitli olmayan hücreleri seç", + "Selection Pane" => "Seçim Bölmesi", + "Selection Statistics" => "Seçim İstatistikleri", + "Set Values" => "Değerleri Ayarla", + "Shape Fill" => "Şekil Dolgusu", + "Shape Outline" => "Şekil Ana Hattı", + "Shape Styles" => "Şekil Stilleri", + "Sheet Options" => "Sayfa Seçenekleri", + "Show Comments" => "Açıklamaları Göster", + "Show Details" => "Ayrıntıları Göster", + "Show Objects" => "Nesneleri Göster", + "Show Outline Levels" => "Anahat Düzeylerini Göster", + "Show Outline Symbols" => "Anahat Simgelerini Göster", + "Show Scenario" => "Senaryoyu Göster", + "Show Zeros" => "Sıfırları Göster", + "Show matching rows in place" => "Eşleşen satırları yerinde göster", + "Shrink to Fit" => "Uyacak Şekilde Daralt", + "Solver Reports" => "Çözücü Raporları", + "Solver…" => "Çözücü…", + "Sort Field" => "Alanı Sırala", + "Sort On" => "Sıralama Ölçütü", + "Sort…" => "Sırala…", + "Split" => "Böl", + "Split tabs" => "Sekmeleri böl", + "Stop Action" => "Eylemi Durdur", + "Styles" => "Stiller", + "Subtotals" => "Alt Toplamlar", + "Summarize with PivotTable" => "Özet Tablo ile Özetle", + "Summary columns to right of detail" => "Ayrıntının sağındaki özet sütunları", + "Summary rows below detail" => "Ayrıntının altındaki özet satırları", + "Switch Window" => "Pencere Değiştir", + "Symbols" => "Simgeler", + "Table Name" => "Tablo Adı", + "Table Name:" => "Tablo Adı:", + "Table Style Options" => "Tablo Stili Seçenekleri", + "Tables" => "Tablolar", + "The Evolutionary method needs a lower and an upper bound on every variable cell (constraints such as \"A1:A3 <= 10\"), or requireBounds: false." => { + "Evrimsel yöntem her değişken hücre için bir alt ve bir üst sınır ister (\"A1:A3 <= 10\" gibi kısıtlamalar) ya da requireBounds: false." + } + "The Limits report doesn't apply to models with integer or binary constraints." => { + "Sınırlar raporu tamsayı ya da ikili kısıtlamalı modellere uygulanmaz." + } + "The Limits report is available for Simplex LP and GRG Nonlinear." => { + "Sınırlar raporu Simplex LP ve GRG Doğrusal Olmayan için kullanılabilir." + } + "The PivotTable field name is not valid. To create a PivotTable, you must use data that is organized as a list with labeled columns." => { + "Özet Tablo alan adı geçerli değil. Özet Tablo oluşturmak için etiketli sütunları olan bir liste biçiminde düzenlenmiş veri kullanmalısınız." + } + "The PivotTable report is out of date. Refresh it first." => "Özet Tablo raporu güncel değil. Önce yenileyin.", + "The PivotTable report is too large." => "Özet Tablo raporu çok büyük.", + "The PivotTable report will not fit on the sheet." => "Özet Tablo raporu sayfaya sığmayacak.", + "The X variables are collinear; the regression can't be computed." => "X değişkenleri doğrusal bağımlı; regresyon hesaplanamıyor.", + "The bin range holds no numbers." => "Kutu aralığında sayı yok.", + "The cell has no formula." => "Hücrede formül yok.", + "The cell or chart you're trying to change is on a protected sheet." => "Değiştirmeye çalıştığınız hücre ya da grafik korumalı bir sayfada.", + "The cell you are trying to change is on a protected sheet that does not allow selecting it." => { + "Değiştirmeye çalıştığınız hücre, seçilmesine izin vermeyen korumalı bir sayfada." + } + "The cell you're trying to change is on a protected sheet." => "Değiştirmeye çalıştığınız hücre korumalı bir sayfada.", + "The consolidated data doesn't fit below and right of the destination." => "Birleştirilen veriler hedefin altına ve sağına sığmıyor.", + "The constraint's two sides must be the same size (or the right side one cell)." => { + "Kısıtlamanın iki tarafı aynı boyutta (ya da sağ taraf tek hücre) olmalıdır." + } + "The copied cells don't fit on the sheet at this position." => "Kopyalanan hücreler bu konumda sayfaya sığmıyor.", + "The copied sheet no longer exists." => "Kopyalanan sayfa artık yok.", + "The copy area is the whole sheet; there is no room to insert it." => "Kopyalama alanı sayfanın tamamı; eklemek için yer yok.", + "The cut area doesn't fit at this position; nothing was moved." => "Kesilen alan bu konuma sığmıyor; hiçbir şey taşınmadı.", + "The cut rows or columns can't be inserted inside themselves." => "Kesilen satırlar ya da sütunlar kendi içlerine eklenemez.", + "The damping factor must be between 0 and 1." => "Sönüm faktörü 0 ile 1 arasında olmalıdır.", + "The extract range can't overlap the list range." => "Ayıklama aralığı liste aralığıyla çakışamaz.", + "The file is empty." => "Dosya boş.", + "The fill is too large." => "Doldurma çok büyük.", + "The forecast end must be after the last point of the timeline." => "Tahmin sonu zaman çizelgesinin son noktasından sonra olmalıdır.", + "The forecast start needs at least two values before it to fit the forecast." => { + "Tahmini uydurmak için tahmin başlangıcından önce en az iki değer olmalıdır." + } + "The formula has an unterminated field name." => "Formülde kapatılmamış bir alan adı var.", + "The formula has an unterminated text value." => "Formülde kapatılmamış bir metin değeri var.", + "The formula is empty." => "Formül boş.", + "The formula is too long." => "Formül çok uzun.", + "The headers must remain in the same row, and the resulting table range must overlap the original table range." => { + "Üst bilgiler aynı satırda kalmalı ve oluşan tablo aralığı özgün tablo aralığıyla çakışmalıdır." + } + "The input range holds no numbers." => "Giriş aralığında sayı yok.", + "The interval must be a whole number from 1 to the number of data points." => { + "Aralık 1 ile veri noktası sayısı arasında bir tam sayı olmalıdır." + } + "The name entered already exists. Enter a unique name." => "Girilen ad zaten var. Benzersiz bir ad girin.", + "The name that you entered is not valid." => "Girdiğiniz ad geçerli değil.", + "The number must be between 1 and 409." => "Sayı 1 ile 409 arasında olmalıdır.", + "The objective cell must contain a formula." => "Hedef hücre bir formül içermelidir.", + "The objective must be a single cell." => "Hedef tek bir hücre olmalıdır.", + "The password you supplied is not correct." => "Girdiğiniz parola doğru değil.", + "The report doesn't fit on the sheet below and right of the output cell." => "Rapor, çıkış hücresinin altında ve sağında sayfaya sığmıyor.", + "The sheet is protected with a password. Unprotect it first (Review › Unprotect Sheet)." => { + "Sayfa parolayla korunuyor. Önce korumayı kaldırın (Gözden Geçir › Sayfa Korumasını Kaldır)." + } + "The timeline needs at least two points a constant step apart." => "Zaman çizelgesinde aralarında sabit adım olan en az iki nokta olmalıdır.", + "The variable cells must be a reference like B2:B4." => "Değişken hücreler B2:B4 gibi bir başvuru olmalıdır.", + "The variable cells must be on the objective cell's sheet." => "Değişken hücreler hedef hücrenin sayfasında olmalıdır.", + "The weekday series runs past the supported date range." => "Hafta içi serisi desteklenen tarih aralığını aşıyor.", + "The workbook is protected and cannot be changed." => "Çalışma kitabı korumalı ve değiştirilemez.", + "There are no comments in this workbook." => "Bu çalışma kitabında açıklama yok.", + "There are no scenarios on this sheet." => "Bu sayfada senaryo yok.", + "There are no shapes, pictures or charts on this sheet." => "Bu sayfada şekil, resim ya da grafik yok.", + "There are no values to forecast." => "Tahmin edilecek değer yok.", + "There isn't room on the sheet for the list of names." => "Sayfada ad listesi için yer yok.", + "There's a problem with this formula." => "Bu formülde bir sorun var.", + "There's no comment in this cell." => "Bu hücrede açıklama yok.", + "There's no hyperlink in this cell." => "Bu hücrede köprü yok.", + "There's no room below the selection for the totals." => "Seçimin altında toplamlar için yer yok.", + "There's no room below the table for the total row." => "Tablonun altında toplam satırı için yer yok.", + "There's no room to the right of the selection for the total." => "Seçimin sağında toplam için yer yok.", + "Thesaurus" => "Eş Anlamlılar", + "This action won't work on multiple selections." => "Bu eylem birden çok seçimde çalışmaz.", + "This operation isn't allowed: it would shift cells in a table on your worksheet." => { + "Bu işleme izin verilmiyor: çalışma sayfanızdaki bir tablonun hücrelerini kaydırır." + } + "This sheet has no saved Solver model." => "Bu sayfada kayıtlı Çözücü modeli yok.", + "This workbook asks to open the address below. Links can lead to harmful sites or start other programs: open it only if you trust the workbook.\n\n" => { + "Bu çalışma kitabı aşağıdaki adresi açmak istiyor. Bağlantılar zararlı sitelere götürebilir ya da başka programları başlatabilir: yalnızca çalışma kitabına güveniyorsanız açın.\n\n" + } + "This workbook has no names to paste." => "Bu çalışma kitabında yapıştırılacak ad yok.", + "Tiled" => "Döşenmiş", + "To do this, all the merged cells need to be the same size." => "Bunu yapmak için tüm birleştirilmiş hücrelerin aynı boyutta olması gerekir.", + "To prevent possible loss of data, Excel cannot shift nonblank cells off of the worksheet." => { + "Olası veri kaybını önlemek için boş olmayan hücreler çalışma sayfasının dışına kaydırılamaz." + } + "To prevent possible loss of data, cells can't be pushed off the end of the worksheet." => { + "Olası veri kaybını önlemek için hücreler çalışma sayfasının sonundan dışarı itilemez." + } + "To prevent possible loss of data, columns cannot be shifted off of the worksheet." => { + "Olası veri kaybını önlemek için sütunlar çalışma sayfasının dışına kaydırılamaz." + } + "Toggle Checkbox" => "Onay Kutusunu Değiştir", + "Toggle Slicer Value" => "Dilimleyici Değerini Değiştir", + "Too few observations for this many X variables." => "Bu kadar X değişkeni için gözlem sayısı çok az.", + "Too many report sheets." => "Çok fazla rapor sayfası var.", + "Tools" => "Araçlar", + "Total Row" => "Toplam Satırı", + "Totals Function" => "Toplam İşlevi", + "Undo History" => "Geri Alma Geçmişi", + "Unique rows only" => "Yalnızca benzersiz satırlar", + "Unprotect the sheet to change its edit ranges." => "Düzenleme aralıklarını değiştirmek için sayfanın korumasını kaldırın.", + "Value Field Settings" => "Değer Alanı Ayarları", + "Variable cells must hold constants, not formulas." => "Değişken hücreler formül değil sabit değer içermelidir.", + "We looked at all the data next to your selection and didn't see a pattern for filling in values for you." => { + "Seçiminizin yanındaki tüm verilere baktık ve değerleri sizin için dolduracak bir desen bulamadık." + } + "Window" => "Pencere", + "Windows" => "Pencereler", + "Windows of active workbook" => "Etkin çalışma kitabının pencereleri", + "Workbook Views" => "Çalışma Kitabı Görünümleri", + "XLSB is supported for data import only. Save as .xlsx or another supported export format." => { + "XLSB yalnızca veri içeri aktarma için desteklenir. .xlsx ya da desteklenen başka bir dışarı aktarma biçiminde kaydedin." + } + "Username" => "Kullanıcı adı", + "Display name" => "Görünen ad", + "Real name" => "Gerçek ad", + "Evolutionary" => "Evrimsel", + "Simplex LP" => "Simplex LP", + "Reopen" => "Yeniden Aç", + "Resolve" => "Çözümle", + "Medium" => "Orta", + "AutoSum|SUM" => "TOPLA", + "AutoSum|AVERAGE" => "ORTALAMA", + "AutoSum|COUNT" => "BAĞ_DEĞ_SAY", + "AutoSum|MAX" => "MAK", + "AutoSum|MIN" => "MİN", + "Answer" => "Yanıt", + "Limits" => "Sınırlar", + "Solver|To:" => "Hedef:", + "Border preview" => "Kenarlık önizlemesi", + "Cell" => "Hücre", + "Formula" => "Formül", + "Format Chart Area" => "Grafik Alanını Biçimlendir", + "Selection" => "Seçim", + "Series {n}" => "Seri {n}", + "Layout {n}" => "Düzen {n}", + "Width " => "Genişlik ", + "Height " => "Yükseklik ", + "colorful" => "renkli", + "monochrome" => "tek renkli", + "accent1" => "Vurgu 1", + "accent2" => "Vurgu 2", + "accent3" => "Vurgu 3", + "accent4" => "Vurgu 4", + "accent5" => "Vurgu 5", + "accent6" => "Vurgu 6", + "Return to the original worksheet to insert this picture, or cancel and choose another cell." => { + "Bu resmi eklemek için özgün çalışma sayfasına dönün veya iptal edip başka bir hücre seçin." + } + "Scripts in this workbook came from a file and are disabled." => { + "Bu çalışma kitabındaki betikler bir dosyadan geldi ve devre dışı bırakıldı." + } + "{count} engine commands are available. See docs/mcp.md and docs/control-protocol.md." => { + "{count} motor komutu kullanılabilir. docs/mcp.md ve docs/control-protocol.md belgelerine bakın." + } + "{number}. {kind} applies to {ranges}" => "{number}. {kind} şu aralıklara uygulanır: {ranges}", + "— {steps} step" => "— {steps} adım", + "Cell Value" => "Hücre Değeri", + "Contains Text" => "Metin İçerir", + "Does Not Contain Text" => "Metin İçermez", + "Begins With" => "İle Başlar", + "Ends With" => "İle Biter", + "No Blanks" => "Boş Olmayanlar", + "No Errors" => "Hata Olmayanlar", + "Duplicate Values" => "Yinelenen Değerler", + "Unique Values" => "Benzersiz Değerler", + "Above/Below Average" => "Ortalamanın Üstünde/Altında", + "A Date Occurring" => "Gerçekleşen Bir Tarih", + "Picture in cell" => "Hücrede resim", + "Picture: {alt}" => "Resim: {alt}", + "Undo {label}" => "Geri Al: {label}", + "Border presets" => "Kenarlık ön ayarları", + "Code Editor" => "Kod Düzenleyicisi", + "Name (A–Z)" => "Ada göre (A–Z)", + "Merged PRs" => "Birleştirilen PR'ler", + "PRs" => "PR'ler", + "Commits" => "Commit'ler", + "Lines added" => "Eklenen satırlar", + "+LOC" => "+Satır", + "Lines deleted" => "Silinen satırlar", + "−LOC" => "−Satır", + "Line delta" => "Satır farkı", + "ΔLOC" => "ΔSatır", + "Binary assets added" => "Eklenen ikili varlıklar", + "+Bin" => "+İkili", + "Binary assets removed" => "Kaldırılan ikili varlıklar", + "−Bin" => "−İkili", + "First commit" => "İlk commit", + "First" => "İlk", + "Last commit" => "Son commit", + "Last" => "Son", + "Reverse the order" => "Sıralamayı ters çevir", + "{contributors} contributors · {commits} commits" => "{contributors} katkıcı · {commits} commit", + "No contributor data was built into this copy." => "Bu kopyaya katkıcı verileri dahil edilmemiş.", + "No model credits were built into this copy." => "Bu kopyaya model katkı bilgileri dahil edilmemiş.", + "Model" => "Model", + "% of all commits" => "Tüm commit'lerin yüzdesi", + "Lines +/−" => "Satır +/−", + "@{login}: {prs} PRs, {commits} commits, +{added} / −{deleted} lines (Δ {delta}), +{binary_added} / −{binary_deleted} binary assets, {first} – {last}" => { + "@{login}: {prs} PR, {commits} commit, +{added} / −{deleted} satır (Δ {delta}), +{binary_added} / −{binary_deleted} ikili varlık, {first} – {last}" + } + "¥ Chinese (PRC)" => "¥ Çince (ÇHC)", + "₹ English (India)" => "₹ İngilizce (Hindistan)", + "CHF German (Switzerland)" => "CHF Almanca (İsviçre)", + "Rp Indonesian" => "Rp Endonezce", + "₩ Korean" => "₩ Korece", + "R$ Portuguese (Brazil)" => "R$ Portekizce (Brezilya)", + "₽ Russian" => "₽ Rusça", + "Simplex LP: for linear models; integer and binary constraints by branch and bound." => { + "Simplex LP: doğrusal modeller için; tam sayı ve ikili kısıtlar dallanma ve sınırlandırma yöntemiyle çözülür." + } + "Evolutionary: a genetic search for models that aren't smooth; every variable cell needs bounds." => { + "Evrimsel: düzgün olmayan modeller için genetik arama; her değişken hücresi için sınır gerekir." + } + "GRG Nonlinear: a local optimum of a smooth model, from the current values." => { + "GRG Doğrusal Olmayan: geçerli değerlerden başlayarak düzgün bir modelin yerel en iyi çözümünü bulur." + } + "Circular References: {cell}" => "Döngüsel Başvurular: {cell}", + "Formula Bar|Enter" => "Girişi Onayla", + "Page {page}" => "Sayfa {page}", "Diagram" => "Diyagram", "Decorative Text" => "Dekoratif Metin", "Paste" => "Yapıştır", @@ -446,6 +1735,31 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "Durdur", "New Macro" => "Yeni Makro", "Show" => "Göster", + "Generated|Column" => "Sütun", + "Generated|Row" => "Satır", + "Book" => "Kitap", + "Sheet" => "Sayfa", + "Count Numbers" => "Sayıları say", + "Type to filter…" => "Filtrelemek için yazın…", + "Nothing to paste." => "Yapıştırılacak veri yok.", + "No cells were found." => "Hiçbir hücre bulunamadı.", + "Or select a category:" => "Veya kategori seçin:", + "Most Recently Used" => "En son kullanılanlar", + "Insert Function…" => "İşlev ekle…", + "Paste Names…" => "Adları yapıştır…", + "Macro name:" => "Makro adı:", + "Shortcut key:" => "Kısayol tuşu:", + "Description:" => "Açıklama:", + "This workbook has no scripts or macros." => "Bu çalışma kitabında betik veya makro yok.", + "Check for Updates…" => "Güncellemeleri denetle…", + "Checking for updates…" => "Güncellemeler denetleniyor…", + "Could not check for updates." => "Güncellemeler denetlenemedi.", + "Check Again" => "Yeniden denetle", + "Insert Function" => "İşlev ekle", + "Search:" => "Ara:", + "e.g. lookup, average, date" => "ör. arama, ortalama, tarih", + "Cancel" => "İptal", + "All" => "Tümü", "Collapse dialog" => "İletişim kutusunu daralt", "Expand dialog" => "İletişim kutusunu genişlet", _ => return None, diff --git a/crates/ui-egui/src/i18n/tr_functions.rs b/crates/ui-egui/src/i18n/tr_functions.rs new file mode 100644 index 0000000000..18248f6ba3 --- /dev/null +++ b/crates/ui-egui/src/i18n/tr_functions.rs @@ -0,0 +1,969 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "Pozitif için 1, negatif için -1 ve sıfır için 0."), + ("A random integer between two bounds, inclusive.", "İki sınır arasında rastgele bir tam sayı (bunlar dahil)."), + ("A random number between 0 and 1, recalculated every time.", "Her seferinde yeniden hesaplanan, 0 ile 1 arasında rastgele bir sayı."), + ("A range or array without its blank outer rows and columns.", "Boş dış satırları ve sütunları olmayan bir aralık veya dizi."), + ("A reference shifted from a starting point.", "Bir başlangıç noktasından kaydırılmış bir başvuru."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "FORECAST.ETS modelinin istatistiği: 1 alfa, 2 beta, 3 gama, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 adım boyutu.", + ), + ("A subtotal that can skip hidden rows.", "Gizli satırları atlayabilen bir alt toplam."), + ("Absolute value (modulus) of a complex number.", "Karmaşık bir sayının mutlak değeri (modülü)."), + ("Absolute value of a number.", "Bir sayının mutlak değeri."), + ("Accrued interest of a security paying interest at maturity.", "Vadesinde faiz ödeyen bir menkul kıymetin tahakkuk eden faizi."), + ("Accrued interest of a security paying periodic interest.", "Periyodik faiz ödeyen bir menkul kıymetin tahakkuk eden faizi."), + ("Accumulates an array into one value.", "Bir diziyi birikimli işlemle tek bir değere indirger."), + ("Adds all the numbers in the arguments.", "Bağımsız değişkenlerdeki tüm sayıları toplar."), + ("Adds the cells that meet a condition.", "Elektronik tablo hücrelerinde bir koşulu karşılayan sayısal değerlerin toplamını döndürür."), + ("Adds the cells that meet every condition.", "Elektronik tablo hücrelerindeki tüm koşulları karşılayan sayısal değerlerin toplamını döndürür."), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Ölçütü karşılayan kayıtlar için veritabanı alanındaki sayısal değerlerin toplamını döndürür.", + ), + ("Adds the squares of the numbers.", "Sayıların karelerini toplar."), + ("Amount received at maturity for a fully invested security.", "Tamamen ödenmiş bir menkul kıymetin vadesinde alınan tutar."), + ("An aggregate that can skip hidden rows and errors.", "Gizli satırları ve hataları atlayabilen bir toplulaştırma."), + ("Angle of a complex number in radians.", "Karmaşık sayının radyan cinsinden açısı."), + ("Angle of the point (x, y) from the x-axis in radians.", "(x, y) noktasının x ekseninden radyan cinsinden açısı."), + ("Annual yield of a discounted security.", "İskontolu menkul kıymetin yıllık getirisi."), + ("Annual yield of a security paying interest at maturity.", "Vadesinde faiz ödeyen bir menkul kıymetin yıllık getirisi."), + ("Applies a LAMBDA to each column.", "Her sütuna bir LAMBDA uygular."), + ("Applies a LAMBDA to each row.", "Her satıra bir LAMBDA uygular."), + ("Applies a LAMBDA to each value.", "Her değere bir LAMBDA uygular."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Sıralanmış bir vektörde veya bir dizinin ilk satırında/sütununda yaklaşık arama.", + ), + ("Arccosine in radians.", "Radyan cinsinden Arkosinüs."), + ("Arccotangent in radians (0 to pi).", "Radyan cinsinden arkkotanjant (0'dan pi'ye)."), + ("Arcsine in radians.", "Radyan cinsinden arksinüs."), + ("Arctangent in radians.", "Radyan cinsinden arktanjant."), + ("Arithmetic mean of the numbers.", "Sayıların aritmetik ortalaması."), + ("Average absolute deviation from the mean.", "Ortalamadan ortalama mutlak sapma."), + ("Average of the cells that meet a condition.", "Bir koşulu karşılayan elektronik tablo hücrelerinin ortalaması."), + ("Average of the cells that meet every condition.", "Her koşulu karşılayan elektronik tablo hücrelerinin ortalaması."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Ölçütü karşılayan kayıtların bir alanındaki sayıların ortalamasını alır.", + ), + ("Base-10 logarithm of a complex number.", "Karmaşık bir sayının 10 tabanındaki logaritması."), + ("Base-10 logarithm.", "Taban-10 logaritması."), + ("Base-2 logarithm of a complex number.", "Karmaşık bir sayının 2 tabanlı logaritması."), + ("Bessel function of the first kind, J_n(x).", "Birinci türden Bessel fonksiyonu, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "İkinci türden Bessel fonksiyonu, Y_n(x)."), + ("Beta distribution density or probability.", "Beta dağılımı yoğunluğu veya olasılığı."), + ("Binomial probability.", "Binom olasılığı."), + ("Bitwise AND of two non-negative integers.", "Negatif olmayan iki tam sayının bit bazında AND'i."), + ("Bitwise OR of two non-negative integers.", "Negatif olmayan iki tam sayının bit bazında OR'i."), + ("Bitwise exclusive OR of two non-negative integers.", "Negatif olmayan iki tam sayının bit düzeyinde dışlayan VEYA (XOR) işlemi."), + ("Bond-equivalent yield of a Treasury bill.", "Hazine bonosunun tahvil eşdeğeri getirisi."), + ("Breaks a row or column into columns of the given length.", "Bir satırı veya sütunu belirli uzunluktaki sütunlara böler."), + ("Breaks a row or column into rows of the given length.", "Bir satırı veya sütunu belirli uzunluktaki satırlara böler."), + ("Builds a cell address as text from row and column numbers.", "Satır ve sütun numaralarından metin olarak bir hücre adresi oluşturur."), + ("Builds a complex number as text from real and imaginary parts.", "Gerçek ve sanal parçalardan metin olarak karmaşık bir sayı oluşturur."), + ("Builds a date serial number from a year, month and day.", "Yıl, ay ve günden bir tarih seri numarası oluşturur."), + ( + "Builds a summary table grouping values by row and column fields.", + "Değerleri satır ve sütun alanlarına göre gruplandıran bir özet tablo oluşturur.", + ), + ( + "Builds a time (a fraction of a day) from hours, minutes and seconds.", + "Saatlerden, dakikalardan ve saniyelerden bir zaman (günün bir kısmı) oluşturur.", + ), + ("Builds an array from a LAMBDA.", "LAMBDA'den bir dizi oluşturur."), + ("Builds an array of evenly stepped numbers.", "Eşit adımlı sayılardan oluşan bir dizi oluşturur."), + ("Builds an array of random numbers in a range.", "Bir aralıktaki rastgele sayılardan oluşan bir dizi oluşturur."), + ("Byte version of FIND.", "FIND'in bayt sürümü."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "LEFT'in bayt sürümü (tek baytlık metin için LEFT ile aynı)."), + ("Byte version of LEN (same as LEN for single-byte text).", "LEN'in bayt sürümü (tek baytlık metin için LEN ile aynı)."), + ("Byte version of MID (same as MID for single-byte text).", "MID'in bayt sürümü (tek baytlık metin için MID ile aynı)."), + ("Byte version of REPLACE.", "REPLACE'in bayt sürümü."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "RIGHT'in bayt sürümü (tek baytlık metin için RIGHT ile aynı)."), + ("Byte version of SEARCH.", "SEARCH'in bayt sürümü."), + ("Capitalises the first letter of each word and lower-cases the rest.", "Her kelimenin ilk harfini büyük, geri kalanını küçük harfe dönüştürür."), + ("Chi-squared density or left-tailed probability.", "Ki-kare yoğunluğu veya sol kuyruklu olasılık."), + ("Chi-squared test of independence.", "Ki-kare bağımsızlık testi."), + ("Column number of a reference.", "Bir başvurunun sütun numarası."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Bir ifadeyi değerler listesiyle karşılaştırır ve ilk eşleşmeyle eşleştirilmiş sonucu döndürür.", + ), + ("Complementary error function, 1 - ERF(x).", "Tamamlayıcı hata fonksiyonu, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Karmaşık bir sayının karmaşık eşleniği."), + ("Confidence interval half-width using Student's t distribution.", "Student t dağılımını kullanan güven aralığının yarı genişliği."), + ("Confidence interval half-width using the normal distribution.", "Normal dağılım kullanılarak güven aralığı yarı genişlik."), + ("Converts Roman numerals to a number.", "Romen rakamlarını sayıya dönüştürür."), + ("Converts a binary number to decimal.", "İkili sayıyı ondalık sayıya dönüştürür."), + ("Converts a binary number to hexadecimal.", "İkili sayıyı onaltılı sayıya dönüştürür."), + ("Converts a binary number to octal.", "İkili bir sayıyı sekizli sayıya dönüştürür."), + ("Converts a date written as text into a date serial number.", "Metin olarak yazılan tarihi, tarih seri numarasına dönüştürür."), + ("Converts a decimal number to binary.", "Ondalık sayıyı ikili sayıya dönüştürür."), + ("Converts a decimal number to hexadecimal.", "Ondalık sayıyı onaltılık sayıya dönüştürür."), + ("Converts a decimal number to octal.", "Ondalık sayıyı sekizliğe dönüştürür."), + ("Converts a decimal price to fractional notation.", "Ondalık fiyatı kesirli gösterime dönüştürür."), + ("Converts a fractional price notation to a decimal number.", "Kesirli fiyat gösterimini ondalık sayıya dönüştürür."), + ("Converts a hexadecimal number to binary.", "Onaltılık sayıyı ikili sayıya dönüştürür."), + ("Converts a hexadecimal number to decimal.", "Onaltılık sayıyı ondalık sayıya dönüştürür."), + ("Converts a hexadecimal number to octal.", "Onaltılı sayıyı sekizli sayıya dönüştürür."), + ("Converts a measurement from one unit to another.", "Bir ölçümü bir birimden diğerine dönüştürür."), + ("Converts a number to Roman numerals in one of five styles.", "Bir sayıyı beş stilden birinde Romen rakamlarına dönüştürür."), + ("Converts a time written as text into a fraction of a day.", "Metin olarak yazılan zamanı günün kesrine dönüştürür."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Bir değeri sayıya dönüştürür: sayılar kalır, TRUE 1'dir, diğer her şey 0'dır.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Bir diziyi virgül listesi veya katı dizi sabiti olarak metne dönüştürür.", + ), + ("Converts an octal number to binary.", "Sekizli bir sayıyı ikili sayıya dönüştürür."), + ("Converts an octal number to decimal.", "Sekizli bir sayıyı ondalık sayıya dönüştürür."), + ("Converts an octal number to hexadecimal.", "Sekizlik bir sayıyı onaltılık sayıya dönüştürür."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Herhangi bir değeri, isteğe bağlı olarak katı (tırnak içine alınmış) biçimde metne dönüştürür.", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Avro ile eski avro üyesi para birimleri arasında sabit kurlarla dönüştürme yapar.", + ), + ("Converts degrees to radians.", "Dereceyi radyana dönüştürür."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Tam genişlikteki karakterleri yarı genişliğe dönüştürür (tek baytlık metinde değişiklik yoktur).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Yarı genişlikteki karakterleri tam genişliğe dönüştürür (bu yerel ayarda değişiklik yoktur).", + ), + ("Converts radians to degrees.", "Radyanı dereceye dönüştürür."), + ("Converts text that looks like a number, date or time into a number.", "Sayıya, tarihe veya saate benzeyen metni sayıya dönüştürür."), + ( + "Converts text to a number using the given decimal and group separators.", + "Verilen ondalık ve grup ayırıcıları kullanarak metni sayıya dönüştürür.", + ), + ("Converts text to lower case.", "Metni küçük harfe dönüştürür."), + ("Converts text to upper case.", "Metni büyük harfe dönüştürür."), + ("Correlation coefficient of two data sets.", "İki veri kümesinin korelasyon katsayısı."), + ("Cosecant of a complex number.", "Karmaşık bir sayının kosekantı."), + ("Cosecant of an angle in radians.", "Radyan cinsinden bir açının kosekantı."), + ("Cosine of a complex number.", "Karmaşık bir sayının kosinüsü."), + ("Cosine of an angle in radians.", "Radyan cinsinden bir açının kosinüsü."), + ("Cotangent of a complex number.", "Karmaşık bir sayının kotanjantı."), + ("Cotangent of an angle in radians.", "Bir açının radyan cinsinden kotanjantı."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "360 günlük bir yılda iki tarih arasındaki günleri sayar (US veya Avrupa yöntemi).", + ), + ("Counts empty cells and empty text in a range.", "Bir aralıktaki boş elektronik tablo hücrelerini ve boş metni sayar."), + ("Counts how many values fall into each bin, as a vertical array.", "Her sınıfa kaç değerin düştüğünü dikey bir dizi olarak verir."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Eşleşen kayıtların bir alanındaki boş olmayan hücreleri (veya eşleşen kayıtları) sayar.", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Eşleşen kayıtların bir alanındaki sayısal hücreleri (veya eşleşen kayıtları) sayar.", + ), + ("Counts the cells that meet a condition.", "Bir koşulu karşılayan elektronik tablo hücrelerini sayar."), + ("Counts the cells that meet every condition.", "Her koşulu karşılayan elektronik tablo hücrelerini sayar."), + ("Counts the characters in a text.", "Metindeki karakterleri sayar."), + ("Counts the columns in an array or range.", "Bir dizi veya aralıktaki sütunları sayar."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Bir küp kümesindeki öğeleri sayar (küp bağlantısı yok; #N/A)."), + ("Counts the non-empty values.", "Boş olmayan değerleri sayar."), + ("Counts the numbers.", "Sayıları sayar."), + ("Counts the rows in an array or range.", "Bir dizi veya aralıktaki satırları sayar."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "İki tarih arasındaki tam yılları, ayları veya günleri sayar. birim: Y, M, D, MD, YM veya YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Tatiller hariç, iki tarih arasındaki çalışma günlerini (Pazartesiden Cumaya) sayar.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Tatiller hariç, özel bir hafta sonu ile iki tarih arasındaki iş günlerini sayar.", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "Bir bağlantı oluşturur; hücre, kolay adı veya bağlantının kendisini gösterir.", + ), + ("Creates a reusable custom function.", "Yeniden kullanılabilir bir özel işlev oluşturur."), + ("Cumulative beta probability.", "Kümülatif beta olasılığı."), + ("Cumulative lognormal probability.", "Kümülatif lognormal olasılık."), + ("Cuts off the fractional part of a number at the given digits.", "Bir sayının kesirli kısmını verilen basamaklardan keser."), + ("Days from settlement to the next coupon date.", "Takas tarihinden sonraki kupon ödeme tarihine kadar geçen gün sayısı."), + ("Days from the start of the coupon period to settlement.", "Kupon döneminin başlangıcından takas tarihine kadar geçen gün sayısı."), + ("Days in the coupon period that contains settlement.", "Takas tarihini içeren kupon dönemindeki gün sayısı."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Herhangi bir dönem aralığında, doğrusal yönteme geçiş yaparak hesaplanan azalan bakiyeler amortismanı.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Bir dizi küp üyesini tanımlar (küp bağlantısı yok; #N/A)."), + ("Determinant of a square matrix.", "Bir kare matrisin determinantı."), + ("Difference of two complex numbers.", "İki karmaşık sayının farkı."), + ("Discount rate of a security.", "Bir tahvilin iskonto oranı."), + ("Double factorial of a number.", "Bir sayının çift faktöriyeli."), + ("Double-declining-balance (or other factor) depreciation for a period.", "Bir dönem için çift azalan bakiye (veya başka faktör) amortismanı."), + ("Effective annual rate from a nominal rate and compounding periods.", "Nominal oran ve bileşik dönemlere göre etkin yıllık oran."), + ("Equivalent interest rate for the growth of an investment.", "Bir yatırımın büyümesine eşdeğer faiz oranı."), + ( + "Error function integrated from 0 to a limit, or between two limits.", + "0'dan bir sınıra veya iki sınır arasında integral alınarak hesaplanan hata fonksiyonu.", + ), + ("Error function integrated from 0 to x.", "0'dan x'e integral alınarak hesaplanan hata fonksiyonu."), + ("Excess kurtosis of a sample.", "Bir örneklemin aşırı basıklığı."), + ("Exponential curve coefficients and optional regression statistics.", "Üstel eğri katsayıları ve isteğe bağlı regresyon istatistikleri."), + ("Exponential distribution density or probability.", "Üstel dağılım yoğunluğu veya olasılığı."), + ("Exponential of a complex number.", "Karmaşık bir sayının üsteli."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Bir XPath ile XML'den verileri çıkarır (kullanılamaz; #VALUE!'i döndürür).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "İlk eşleşmeyi, tüm eşleşmeleri veya normal ifadenin yakalama gruplarını çıkarır.", + ), + ("F distribution density or left-tailed probability.", "F dağılımı yoğunluğu veya sol kuyruklu olasılığı."), + ("Factorial of a number.", "Bir sayının faktöriyeli."), + ( + "Fetches data from a web service (not available; returns #VALUE!).", + "Bir web hizmetinden veri getirir (kullanılamaz; #VALUE! değerini döndürür).", + ), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Bir tablonun ilk sütununda bir değer bulur ve başka bir sütunun aynı satırındaki değeri döndürür.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Tablonun ilk satırındaki değeri bulur ve başka bir satırın aynı sütunundaki değeri döndürür.", + ), + ("Finds the position of one text in another (case-sensitive).", "Bir metnin diğerindeki konumunu bulur (büyük/küçük harfe duyarlı)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Büyük/küçük harf göz ardı edilerek ve joker karakterlere izin verilerek bir metnin diğerindeki konumunu bulur.", + ), + ("Fisher transformation.", "Fisher dönüşümü."), + ("Fixed-declining-balance depreciation for a period.", "Bir dönem için sabit azalan bakiye amortismanı."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "İsteğe bağlı olarak boşlukları veya hataları atlayarak diziyi tek bir sütun halinde düzleştirir.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "İsteğe bağlı olarak boşlukları veya hataları atlayarak diziyi tek bir satıra düzleştirir.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Toplamsal (AAA) üstel düzeltme yoluyla bir değer tahmin eder."), + ("Formats a number as currency text, like DOLLAR.", "Bir sayıyı DOLLAR gibi para birimi metni olarak biçimlendirir."), + ("Formats a number as currency text.", "Sayıyı para birimi metni olarak biçimlendirir."), + ("Formats a number as text.", "Sayıyı metin olarak biçimlendirir."), + ( + "French degressive depreciation with a life-based coefficient.", + "Kullanım ömrüne dayalı katsayıyla hesaplanan Fransız azalan bakiyeler amortismanı.", + ), + ("French linear depreciation prorated for the first period.", "İlk dönem için süreyle orantılı hesaplanan Fransız doğrusal amortismanı."), + ("Future value of a principal after a series of compound rates.", "Bir dizi bileşik oran sonrasında bir anaparanın gelecekteki değeri."), + ("Future value of an investment with constant payments and rate.", "Sabit ödemeli ve oranlı bir yatırımın gelecekteki değeri."), + ("Gamma distribution density or probability.", "Gama dağılım yoğunluğu veya olasılığı."), + ("Geometric mean of positive numbers.", "Pozitif sayıların geometrik ortalaması."), + ("Greatest common divisor of integers.", "Tam sayıların en büyük ortak böleni."), + ( + "Groups rows by key fields and aggregates the values of each group.", + "Satırları anahtar alanlara göre gruplandırır ve her grubun değerlerini toplulaştırır.", + ), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Yeni hücreleri bir dolgu değeriyle doldurarak bir diziyi verilen boyuta genişletir.", + ), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "FORECAST.ETS değeri etrafındaki güven aralığının yarı genişliği."), + ("Harmonic mean of positive numbers.", "Pozitif sayıların harmonik ortalaması."), + ("Hyperbolic cosecant of a complex number.", "Karmaşık bir sayının hiperbolik kosekantı."), + ("Hyperbolic cosecant.", "Hiperbolik kosekant."), + ("Hyperbolic cosine of a complex number.", "Karmaşık bir sayının hiperbolik kosinüsü."), + ("Hyperbolic cosine.", "Hiperbolik kosinüs."), + ("Hyperbolic cotangent.", "Hiperbolik kotanjant."), + ("Hyperbolic secant of a complex number.", "Karmaşık bir sayının hiperbolik sekantı."), + ("Hyperbolic secant.", "Hiperbolik sekant."), + ("Hyperbolic sine of a complex number.", "Karmaşık bir sayının hiperbolik sinüsü."), + ("Hyperbolic sine.", "Hiperbolik sinüs."), + ("Hyperbolic tangent.", "Hiperbolik tanjant."), + ("Hypergeometric probability of an exact count.", "Kesin bir sayımın hipergeometrik olasılığı."), + ("Hypergeometric probability.", "Hipergeometrik olasılık."), + ("Identity matrix of the given size.", "Verilen boyutta birim matris."), + ("Imaginary coefficient of a complex number.", "Karmaşık bir sayının sanal katsayısı."), + ("Information about a cell.", "Bir hücre hakkında bilgi."), + ("Integer part of a division.", "Bir bölümün tamsayı kısmı."), + ("Interest paid in a period of a loan with even principal payments.", "Anapara ödemelerinin eşit olduğu bir kredi döneminde ödenen faiz."), + ("Interest part of a given period's payment.", "Belirli bir döneme ait ödemenin faiz kısmı."), + ("Interest rate of a fully invested security.", "Tamamen ödenmiş bir menkul kıymetin faiz oranı."), + ("Interest rate per period of an annuity, found iteratively.", "Bir anüitenin yinelemeli olarak bulunan dönem başına faiz oranı."), + ("Internal rate of return of cash flows on specific dates.", "Belirli tarihlerdeki nakit akışlarının iç getiri oranı."), + ("Internal rate of return of periodic cash flows.", "Periyodik nakit akışlarının iç getiri oranı."), + ("Inverse hyperbolic cosine.", "Ters hiperbolik kosinüs."), + ("Inverse hyperbolic cotangent.", "Ters hiperbolik kotanjant."), + ("Inverse hyperbolic sine.", "Ters hiperbolik sinüs."), + ("Inverse hyperbolic tangent.", "Ters hiperbolik tanjant."), + ("Inverse of a square matrix.", "Bir kare matrisin tersi."), + ("Inverse of the Fisher transformation.", "Fisher dönüşümünün tersi."), + ("Inverse of the cumulative beta distribution.", "Kümülatif beta dağılımının tersi."), + ("Inverse of the cumulative lognormal distribution.", "Kümülatif lognormal dağılımın tersi."), + ("Inverse of the gamma cumulative distribution.", "Gama kümülatif dağılımının tersi."), + ("Inverse of the left-tailed F distribution.", "Sol kuyruklu F dağılımının tersi."), + ("Inverse of the left-tailed chi-squared distribution.", "Sol kuyruklu ki-kare dağılımının tersi."), + ("Inverse of the normal cumulative distribution.", "Normal kümülatif dağılımın tersi."), + ("Inverse of the right-tailed F distribution.", "Sağ kuyruklu F dağılımının tersi."), + ("Inverse of the right-tailed chi-squared distribution.", "Sağ kuyruklu ki-kare dağılımının tersi."), + ("Inverse of the standard normal cumulative distribution.", "Standart normal kümülatif dağılımın tersi."), + ("Joins several text values into one.", "Birkaç metin değerini tek bir değerde birleştirir."), + ( + "Joins text from values and every cell of ranges, without a separator.", + "Değerlerdeki metni ve aralıkların her hücresini ayırıcı olmadan birleştirir.", + ), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Değerlerden ve aralıklardan gelen metni bir sınırlayıcıyla birleştirir, isteğe bağlı olarak boş öğeleri atlar.", + ), + ( + "Keeps rows or columns from the start (or end) of an array.", + "Bir dizinin başlangıcından (veya sonundan) itibaren satırları veya sütunları korur.", + ), + ( + "Keeps the rows or columns of an array whose include flag is TRUE.", + "Dahil etme bayrağı TRUE olan bir dizinin satırlarını veya sütunlarını tutar.", + ), + ("Largest number (0 when there are none).", "En büyük sayı (hiçbir şey olmadığında 0)."), + ("Largest number in a field of the matching records.", "Eşleşen kayıtların alanındaki en büyük sayı."), + ("Largest value among cells that meet every condition.", "Elektronik tablo hücreleri arasında her koşulu karşılayan en büyük değer."), + ("Largest value counting text as 0 and logicals as 1/0.", "Metni 0 ve mantıksalları 1/0 olarak sayan en büyük değer."), + ("Least common multiple of integers.", "Tam sayıların en küçük ortak katı."), + ( + "Least-squares line coefficients and optional regression statistics.", + "En küçük kareler çizgisi katsayıları ve isteğe bağlı regresyon istatistikleri.", + ), + ("Left-tailed inverse of Student's t distribution.", "Student t dağılımının sol kuyruklu tersi."), + ("Length of the repeating pattern detected in a time series.", "Bir zaman serisinde tespit edilen yinelenen modelin uzunluğu."), + ("Logarithm to the given base (10 by default).", "Verilen tabana göre logaritma (varsayılan olarak 10)."), + ("Lognormal density or probability.", "Lognormal yoğunluk veya olasılık."), + ("Macaulay duration of a security with periodic interest.", "Dönemsel faiz ödemeli bir menkul kıymetin Macaulay durasyonu."), + ("Matrix product of two arrays.", "İki dizinin matris çarpımı."), + ("Mean after trimming a fraction of points from both ends.", "Her iki uçtan belirli bir oranda veri çıkarıldıktan sonra hesaplanan ortalama."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Metni 0, mantıksal değerleri 1 veya 0 olarak kabul eden ortalama."), + ("Middle value of the numbers.", "Sayıların ortanca değeri (medyan)."), + ("Modified Bessel function of the first kind, I_n(x).", "Birinci türden değiştirilmiş Bessel işlevi, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "İkinci türden değiştirilmiş Bessel fonksiyonu, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Dönemsel faiz ödemeli bir menkul kıymetin düzeltilmiş durasyonu."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Ayrı borçlanma ve yeniden yatırım oranları kullanılarak değiştirilmiş iç getiri oranı.", + ), + ("Most frequently occurring number.", "En sık karşılaşılan sayı."), + ("Multiplies all the numbers in the arguments.", "Bağımsız değişkenlerdeki tüm sayıları çarpar."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Eşit boyutlu dizilerin eşleşen öğelerini çarpar ve çarpımları toplar.", + ), + ("Multiplies the numbers in a field of the matching records.", "Eşleşen kayıtların olduğu alandaki sayıları çarpar."), + ("Names intermediate results.", "Ara sonuçları adlandırır."), + ("Natural log of the gamma function.", "Gama fonksiyonunun doğal logu."), + ("Natural logarithm of a complex number.", "Karmaşık bir sayının doğal logaritması."), + ("Natural logarithm.", "Doğal logaritma."), + ("Negative binomial probability.", "Negatif binom olasılığı."), + ("Net present value of cash flows on specific dates.", "Belirli tarihlerdeki nakit akışlarının net bugünkü değeri."), + ("Net present value of periodic cash flows at a discount rate.", "Periyodik nakit akışlarının iskonto oranı üzerinden net bugünkü değeri."), + ("Next coupon date after settlement.", "Takas tarihinden sonraki ilk kupon ödeme tarihi."), + ("Nominal annual rate from an effective rate and compounding periods.", "Etkin oran ve bileşik dönemlerden elde edilen nominal yıllık oran."), + ("Normal distribution density or cumulative probability.", "Normal dağılım yoğunluğu veya kümülatif olasılık."), + ("Number of areas in a reference.", "Referanstaki alanların sayısı."), + ("Number of combinations with repetition.", "Tekrarlı kombinasyon sayısı."), + ("Number of combinations without repetition.", "Tekrarsız kombinasyon sayısı."), + ("Number of coupons payable between settlement and maturity.", "Takas tarihi ile vade arasında ödenecek kupon sayısı."), + ("Number of ordered selections with repetition.", "Tekrarlı sıralı seçimlerin sayısı."), + ("Number of ordered selections without repetition.", "Tekrarsız sıralı seçimlerin sayısı."), + ("Number of periods needed to pay off or accumulate an amount.", "Bir tutarı ödemek veya biriktirmek için gereken dönem sayısı."), + ("Number of sheets.", "Sayfa sayısı."), + ("One- or two-tailed Student's t probability.", "Tek veya iki kuyruklu Student t olasılığı."), + ("One-tailed probability of a z-test.", "Z testinin tek kuyruklu olasılığı."), + ("Pearson product-moment correlation coefficient.", "Pearson momentler çarpımı korelasyon katsayısı."), + ("Percent-encodes text for use in a URL.", "URL'de kullanılmak üzere metni yüzde olarak kodlar."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Sabit ödemeli ve sabit faiz oranlı bir kredinin veya anüitenin dönemsel ödemesi.", + ), + ("Periods needed for an investment to grow to a target value.", "Bir yatırımın hedef değere ulaşması için gereken dönem sayısı."), + ("Picks a value from the list by its position.", "Listeden konumuna göre bir değer seçer."), + ( + "Picks columns of an array by position (negative counts from the end).", + "Bir dizinin sütunlarını konuma göre seçer (sondan itibaren negatif sayılar).", + ), + ( + "Picks rows of an array by position (negative counts from the end).", + "Bir dizinin satırlarını konuma göre seçer (sondan itibaren negatif sayılar).", + ), + ("Places arrays side by side.", "Dizileri yan yana yerleştirir."), + ("Poisson probability.", "Poisson olasılığı."), + ("Population covariance of paired values.", "Eşleştirilmiş değerlerin popülasyon kovaryansı."), + ("Population skewness.", "Anakütle çarpıklığı."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Metni 0 ve mantıksalları 1/0 olarak sayan popülasyon standart sapması.", + ), + ("Population standard deviation of a field over the matching records.", "Eşleşen kayıtlar üzerinden bir alanın popülasyon standart sapması."), + ("Population standard deviation.", "Anakütle standart sapması."), + ("Population variance counting text as 0 and logicals as 1/0.", "Metni 0 ve mantıksalları 1/0 olarak sayan popülasyon varyansı."), + ("Population variance of a field over the matching records.", "Eşleşen kayıtlar üzerinden bir alanın anakütle varyansı."), + ("Population variance.", "Anakütle varyansı."), + ("Positive square root.", "Pozitif karekök."), + ("Predicts a value along a linear trend.", "Doğrusal bir eğilim boyunca bir değer tahmin eder."), + ("Present value of a series of equal future payments.", "Gelecekteki eşit ödemeler serisinin bugünkü değeri."), + ("Previous coupon date on or before settlement.", "Takas tarihinde veya öncesindeki son kupon ödeme tarihi."), + ("Price per 100 face value of a Treasury bill.", "Hazine bonosunun 100 nominal değeri başına fiyat."), + ("Price per 100 face value of a discounted security.", "İskontolu menkul kıymetin 100 nominal değeri başına fiyat."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Vadesinde faiz ödenen bir menkul kıymetin 100 nominal değeri başına fiyat.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Periyodik faiz ödeyen bir menkul kıymetin 100 nominal değeri başına fiyat.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "İlk faiz dönemi düzensiz olan bir menkul kıymetin 100 nominal değeri başına fiyatı.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Son faiz dönemi düzensiz olan bir menkul kıymetin 100 nominal değeri başına fiyatı.", + ), + ("Principal part of a given period's payment.", "Belirli bir döneme ait ödemenin anapara kısmı."), + ("Probability from Student's t-test.", "Student t testinden elde edilen olasılık."), + ("Probability of a number of successes falling in a range.", "Başarı sayısının bir aralıkta olma olasılığı."), + ("Probability that a standard normal value falls between the mean and z.", "Standart normal bir değerin ortalama ile z arasında olma olasılığı."), + ("Probability that values fall between two limits.", "Değerlerin iki sınır arasında olma olasılığı."), + ("Product of complex numbers.", "Karmaşık sayıların çarpımı."), + ("Quartile (0–4) of a data set, inclusive method.", "Bir veri kümesinin çeyrekliği (0–4), uçları dahil eden yöntem."), + ("Quartile (0–4) of a data set.", "Bir veri kümesinin çeyrekliği (0–4)."), + ("Quartile (1–3) of a data set, exclusive method.", "Bir veri kümesinin çeyrekliği (1–3), uçları hariç tutan yöntem."), + ("Quotient of two complex numbers.", "İki karmaşık sayının bölümü."), + ("Raises a complex number to a power.", "Karmaşık bir sayıyı bir kuvvete yükseltir."), + ("Raises a number to a power.", "Bir sayıyı bir kuvvete yükseltir."), + ("Rank of a number within a list.", "Listedeki bir sayının sıralaması."), + ("Rank of a number within a list; ties get the average rank.", "Bir sayının listedeki sırası; eşit değerler ortalama sırayı alır."), + ("Rank of a number within a list; ties share the top rank.", "Bir sayının listedeki sırası; eşit değerler aralarındaki en üst sırayı paylaşır."), + ("Ratio of the factorial of a sum to the product of factorials.", "Bir toplamın faktöriyelinin faktöriyellerin çarpımına oranı."), + ("Reads text in a given base as a number.", "Belirli bir tabandaki metni sayı olarak okur."), + ("Real coefficient of a complex number.", "Karmaşık bir sayının gerçek katsayısı."), + ("Relative standing of a value as a fraction of the data set.", "Bir değerin veri kümesinin kesri olarak göreceli durumu."), + ("Relative standing of a value from 0 to 1 inclusive.", "Bir değerin, 0 ve 1 dahil olmak üzere bu aralıktaki göreli sırası."), + ("Relative standing of a value strictly between 0 and 1.", "Kesinlikle 0 ile 1 arasında bir değerin göreceli durumu."), + ("Remainder of a division, with the sign of the divisor.", "Bölenin işaretiyle birlikte bir bölmenin kalanı."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Baştaki ve sondaki boşlukları kaldırır ve art arda gelen boşlukları tek boşluğa indirger.", + ), + ("Removes non-printable control characters from text.", "Yazdırılamayan kontrol karakterlerini metinden kaldırır."), + ("Removes rows or columns from the start (or end) of an array.", "Bir dizinin başlangıcından (veya sonundan) satırları veya sütunları kaldırır."), + ("Repeats a text a given number of times.", "Bir metni belirli sayıda tekrarlar."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Normal bir ifadenin, tümünün veya seçilen bir durumun eşleşmelerini değiştirir.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Bir metnin geçtiği yerleri başka bir metinle, isteğe bağlı olarak yalnızca belirli bir oluşumla değiştirir.", + ), + ("Replaces part of a text by position.", "Metnin bir kısmını konuma göre değiştirir."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Bir sayı en az adım olduğunda 1'i, aksi takdirde 0'ı döndürür."), + ("Returns 1 when two numbers are equal, otherwise 0.", "İki sayı eşit olduğunda 1'i, aksi halde 0'ı döndürür."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Değer türü için bir kod döndürür: 1 sayı, 2 metin, 4 mantıksal, 16 hata, 64 dizi.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Değer #N/A olduğunda bir geri dönüş döndürür, aksi takdirde değer."), + ("Returns a fallback when the value is an error, otherwise the value.", "Değer bir hata olduğunda bir geri dönüş, aksi takdirde değer döndürür."), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Bir küpten temel performans göstergesi özelliğini döndürür (küp bağlantısı yok; #N/A).", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "Bir küpten bir üyeyi veya demetini döndürür (küp bağlantısı yok; #N/A)."), + ("Returns a property of a cube member (no cube connections; #N/A).", "Bir küp üyesinin özelliğini döndürür (küp bağlantısı yok; #N/A)."), + ( + "Returns an aggregated value from a cube (no cube connections; #N/A).", + "Bir küpten toplulaştırılmış bir değer döndürür (küp bağlantısı yok; #N/A).", + ), + ("Returns characters from the middle of a text.", "Metnin ortasındaki karakterleri döndürür."), + ("Returns information about the operating environment.", "Çalışma ortamıyla ilgili bilgileri döndürür."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Bir koşul TRUE olduğunda bir değeri, FALSE olduğunda ise başka bir değeri döndürür.", + ), + ("Returns the #N/A error value.", "#N/A hata değerini döndürür."), + ("Returns the 1-based position of a value in a row or column.", "Bir satır veya sütundaki değerin 1 tabanlı konumunu döndürür."), + ("Returns the ISO 8601 week number of a date.", "Bir tarihin ISO 8601 hafta numarasını döndürür."), + ("Returns the Unicode code point of the first character of a text.", "Bir metnin ilk karakterinin Unicode kod noktasını döndürür."), + ("Returns the Windows-1252 code of the first character of a text.", "Bir metnin ilk karakterinin Windows-1252 kodunu döndürür."), + ("Returns the character for a Unicode code point.", "Unicode kod noktasının karakterini döndürür."), + ("Returns the character for a code from the Windows-1252 character set.", "Windows-1252 karakter kümesinden bir kodun karakterini döndürür."), + ("Returns the current date and time.", "Geçerli tarih ve saati döndürür."), + ("Returns the current date.", "Geçerli tarihi döndürür."), + ("Returns the date a number of months before or after a date.", "Bir tarihten birkaç ay önceki veya sonraki tarihi döndürür."), + ("Returns the date a number of working days away with a custom weekend.", "Özel bir hafta sonu ile birkaç iş günü uzaktaki tarihi döndürür."), + ("Returns the date a number of working days before or after a date.", "Bir tarihten birkaç iş günü önceki veya sonraki tarihi döndürür."), + ("Returns the day of the month of a date.", "Bir tarihin ayın gününü döndürür."), + ("Returns the day of the week of a date as a number.", "Bir tarihin haftanın gününü sayı olarak döndürür."), + ("Returns the distinct rows or columns of an array.", "Bir dizinin farklı satırlarını veya sütunlarını döndürür."), + ( + "Returns the element, row or column of an array at the given position.", + "Verilen konumdaki bir dizinin öğesini, satırını veya sütununu döndürür.", + ), + ("Returns the field value of the single record that meets the criteria.", "Ölçütü karşılayan tek kaydın alan değerini döndürür."), + ("Returns the first characters of a text.", "Metnin ilk karakterlerini döndürür."), + ( + "Returns the fraction of a year between two dates under a day-count basis.", + "Gün sayımı esasına göre bir yılın iki tarih arasındaki kesirini döndürür.", + ), + ("Returns the hour (0-23) of a time.", "Bir zamanın saatini (0-23) döndürür."), + ("Returns the last characters of a text.", "Metnin son karakterlerini döndürür."), + ("Returns the last day of the month a number of months away.", "Birkaç ay uzaktaki ayın son gününü döndürür."), + ("Returns the logical value FALSE.", "FALSE mantıksal değerini döndürür."), + ("Returns the logical value TRUE.", "TRUE mantıksal değerini döndürür."), + ("Returns the minute (0-59) of a time.", "Bir zamanın dakikasını (0-59) döndürür."), + ("Returns the month (1-12) of a date.", "Bir tarihin ayını (1-12) döndürür."), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "Bir küp kümesinin n'inci üyesini döndürür (küp bağlantısı yok; #N/A)."), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Bir hata değerini tanımlayan sayıyı veya hata değilse #N/A'i döndürür.", + ), + ("Returns the number of days between two dates.", "İki tarih arasındaki gün sayısını döndürür."), + ("Returns the phonetic (furigana) text; here the text itself.", "Fonetik (furigana) metni döndürür; işte metnin kendisi."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Esnek eşleştirme ve arama modlarıyla bir satır veya sütundaki değerin konumunu döndürür.", + ), + ("Returns the second (0-59) of a time.", "Bir zamanın saniyesini (0-59) döndürür."), + ("Returns the text that comes after a delimiter.", "Sınırlayıcıdan sonra gelen metni döndürür."), + ("Returns the text that comes before a delimiter.", "Sınırlayıcıdan önce gelen metni döndürür."), + ("Returns the value if it is text, otherwise empty text.", "Metin ise değeri döndürür, aksi takdirde boş metindir."), + ("Returns the value paired with the first condition that is TRUE.", "TRUE olan ilk koşulla eşleştirilmiş değeri döndürür."), + ("Returns the week number of a date within its year.", "Bir tarihin yıl içindeki hafta numarasını döndürür."), + ("Returns the year of a date.", "Tarihin yılını döndürür."), + ("Reverses a logical value.", "Mantıksal bir değeri tersine çevirir."), + ("Right-tailed F probability.", "Sağ kuyruklu F olasılığı."), + ("Right-tailed Student's t probability.", "Sağ kuyruklu Student t olasılığı."), + ("Right-tailed chi-squared probability.", "Sağ kuyruklu ki-kare olasılığı."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Bir sayıyı yuvarlar ve sabit ondalık sayılar ve isteğe bağlı binlik ayırıcılarla metin olarak biçimlendirir.", + ), + ("Rounds a number away from zero to a given number of digits.", "Sayıyı sıfırdan uzaklaşarak belirtilen basamak sayısına yuvarlar."), + ("Rounds a number down to a multiple of significance.", "Sayıyı aşağı yönde belirtilen adımın bir katına yuvarlar."), + ("Rounds a number down to the nearest integer or multiple.", "Sayıyı aşağı yönde en yakın tam sayıya veya kata yuvarlar."), + ("Rounds a number down to the nearest integer.", "Sayıyı negatif sonsuza doğru en yakın tam sayıya yuvarlar."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Sayıyı belirtilen basamak sayısına yuvarlar; tam ortadaki değerleri sıfırdan uzağa yuvarlar.", + ), + ("Rounds a number to the nearest multiple.", "Sayıyı en yakın kata yuvarlar."), + ("Rounds a number toward negative infinity to a multiple.", "Bir sayıyı negatif sonsuza doğru bir kata yuvarlar."), + ("Rounds a number toward positive infinity to a multiple.", "Sayıyı pozitif sonsuza doğru bir kata yuvarlar."), + ("Rounds a number toward zero to a given number of digits.", "Sayıyı sıfıra doğru belirli sayıda basamağa yuvarlar."), + ("Rounds a number up to a multiple of significance.", "Sayıyı yukarı yönde belirtilen adımın bir katına yuvarlar."), + ("Rounds a number up to the nearest integer or multiple.", "Sayıyı yukarı yönde en yakın tam sayıya veya kata yuvarlar."), + ("Rounds away from zero to the nearest even integer.", "Sıfırdan uzaklaşarak en yakın çift tam sayıya yuvarlar."), + ("Rounds away from zero to the nearest odd integer.", "Sıfırdan uzaklaşarak en yakın tek tam sayıya yuvarlar."), + ("Row number of a reference.", "Bir referansın satır numarası."), + ("Running accumulation of an array.", "Bir dizinin her adımda elde edilen birikimli sonuçları."), + ("Sample covariance of paired values.", "Eşleştirilmiş değerlerin örneklem kovaryansı."), + ("Sample skewness.", "Örneklem çarpıklığı."), + ("Sample standard deviation counting text as 0 and logicals as 1/0.", "Metni 0 ve mantıksal değerleri 1/0 kabul eden örneklem standart sapması."), + ("Sample standard deviation of a field over the matching records.", "Eşleşen kayıtlar üzerinden bir alanın örneklem standart sapması."), + ("Sample standard deviation.", "Örneklem standart sapması."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Metni 0 ve mantıksal değerleri 1/0 kabul eden örneklem varyansı."), + ("Sample variance of a field over the matching records.", "Eşleşen kayıtlar üzerinden bir alanın örneklem varyansı."), + ("Sample variance.", "Örneklem varyansı."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Bir satırda veya sütunda arar ve başka bir dizideki eşleşen öğeyi, satırı veya sütunu döndürür.", + ), + ("Secant of a complex number.", "Karmaşık bir sayının sekantı."), + ("Secant of an angle in radians.", "Radyan cinsinden bir açının sekantı."), + ("Sheet number.", "Sayfa numarası."), + ("Shifts the bits of a number left (right for negative shifts).", "Bir sayının bitlerini sola kaydırır (negatif kaydırmalar için sağa)."), + ("Shifts the bits of a number right (left for negative shifts).", "Bir sayının bitlerini sağa kaydırır (negatif kaydırmalar için sola)."), + ("Sine of a complex number.", "Karmaşık bir sayının sinüsü."), + ("Sine of an angle in radians.", "Radyan cinsinden bir açının sinüsü."), + ("Slope of the least-squares regression line.", "En küçük kareler regresyon çizgisinin eğimi."), + ("Smallest number (0 when there are none).", "En küçük sayı (hiçbir şey olmadığında 0)."), + ("Smallest number in a field of the matching records.", "Eşleşen kayıtların alanındaki en küçük sayı."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Kümülatif binom olasılığı alfaya ulaşan en küçük başarı sayısı.", + ), + ("Smallest value among cells that meet every condition.", "Elektronik tablo hücreleri arasında her koşulu karşılayan en küçük değer."), + ("Smallest value counting text as 0 and logicals as 1/0.", "Metni 0 ve mantıksalları 1/0 olarak sayan en küçük değer."), + ("Sorts an array by the values of other arrays of matching size.", "Bir diziyi, eşleşen boyuttaki diğer dizilerin değerlerine göre sıralar."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Bir dizinin satırlarını (veya sütunlarını), bir veya daha fazla sütununa göre sıralar.", + ), + ("Spells out a number in Thai words with Baht.", "Tay dilindeki bir sayıyı Baht ile birlikte söyler."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Metni, verilen sınırlayıcılarda sütun ve satırlardan oluşan bir ızgaraya böler.", + ), + ("Square of the correlation coefficient.", "Korelasyon katsayısının karesi."), + ("Square root of a complex number.", "Karmaşık bir sayının karekökü."), + ("Square root of the number times pi.", "Sayının pi ile çarpımının karekökü."), + ("Stacks arrays on top of each other.", "Dizileri üst üste yığar."), + ("Standard error of predicted y values in a regression.", "Bir regresyonda tahmin edilen y değerlerinin standart hatası."), + ("Standard normal cumulative probability.", "Standart normal kümülatif olasılık."), + ("Standard normal density or cumulative probability.", "Standart normal yoğunluk veya kümülatif olasılık."), + ("Standard normal density.", "Standart normal yoğunluk."), + ("Straight-line depreciation for one period.", "Bir dönem için doğrusal amortisman."), + ("Student's t density or left-tailed probability.", "Student t yoğunluğu veya sol kuyruklu olasılığı."), + ("Sum of a power series.", "Bir kuvvet serisinin toplamı."), + ("Sum of complex numbers.", "Karmaşık sayıların toplamı."), + ("Sum of squared deviations from the mean.", "Ortalamadan sapmaların karelerinin toplamı."), + ("Sum-of-years'-digits depreciation for a period.", "Bir dönem için yıl sayıları toplamı yöntemiyle hesaplanan amortisman."), + ("Sums the differences of squares of matching elements.", "Eşleşen öğelerin karelerinin farklarını toplar."), + ("Sums the squared differences of matching elements.", "Eşleşen öğeler arasındaki farkların karelerini toplar."), + ("Sums the sums of squares of matching elements.", "Eşleşen öğelerin karelerinin toplamını toplar."), + ("Swaps the rows and columns of an array.", "Bir dizinin satırlarını ve sütunlarını değiştirir."), + ("TRUE for references.", "Referanslar için TRUE."), + ("TRUE when a LAMBDA argument was left out.", "TRUE, bir LAMBDA bağımsız değişkeni dışarıda bırakıldığında."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE normal bir ifade metnin herhangi bir yerinde eşleştiğinde."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE, tek sayıda bağımsız değişken TRUE olduğunda."), + ("TRUE when at least one argument is TRUE.", "TRUE, en az bir bağımsız değişken TRUE olduğunda."), + ("TRUE when every argument is TRUE.", "TRUE, her bağımsız değişken TRUE olduğunda."), + ("TRUE when the cell has a formula.", "TRUE hücrenin bir formülü olduğunda."), + ("TRUE when the integer part of a number is even.", "TRUE bir sayının tamsayı kısmı çift olduğunda."), + ("TRUE when the integer part of a number is odd.", "TRUE bir sayının tamsayı kısmı tek olduğunda."), + ("TRUE when the value is TRUE or FALSE.", "TRUE, değer TRUE veya FALSE olduğunda."), + ("TRUE when the value is a number.", "TRUE değer bir sayı olduğunda."), + ("TRUE when the value is any error other than #N/A.", "TRUE, değer #N/A. dışında herhangi bir hata olduğunda"), + ("TRUE when the value is any error.", "Değer herhangi bir hata olduğunda TRUE."), + ("TRUE when the value is anything other than text.", "TRUE değer metinden başka bir şey olduğunda."), + ("TRUE when the value is text.", "Değer metin olduğunda TRUE."), + ("TRUE when the value is the #N/A error.", "Değer #N/A hatası olduğunda TRUE."), + ("TRUE when the value refers to an empty cell.", "TRUE değer boş bir hücreye işaret ettiğinde."), + ("TRUE when two texts are identical, including case.", "TRUE büyük/küçük harf de dahil olmak üzere iki metin aynı olduğunda."), + ("Tangent of a complex number.", "Karmaşık bir sayının tanjantı."), + ("Tangent of an angle in radians.", "Bir açının radyan cinsinden tanjantı."), + ("The constant pi to 15 digits.", "15 haneli sabit pi."), + ("The formula of a cell as text.", "Metin olarak hücre formülü."), + ("The gamma function.", "Gama işlevi."), + ("The k-th largest number in a data set.", "Bir veri kümesindeki k'inci en büyük sayı."), + ("The k-th smallest number in a data set.", "Bir veri kümesindeki k'inci en küçük sayı."), + ("The reference named by a text string.", "Bir metin dizesi tarafından adlandırılan referans."), + ("The sum of a subset as a fraction of the sum of all the values.", "Tüm değerlerin toplamının kesri olarak bir alt kümenin toplamı."), + ("Total interest paid between two periods.", "İki dönem arasında ödenen toplam faiz."), + ("Total principal repaid between two periods.", "İki dönem arasında geri ödenen toplam anapara."), + ("Two-tailed Student's t probability.", "İki kuyruklu Student t olasılığı."), + ("Two-tailed inverse of Student's t distribution.", "Student t dağılımının iki kuyruklu tersi."), + ("Two-tailed p-value of an F-test for equality of variances.", "Varyansların eşitliğine ilişkin F testinin iki yönlü p değeri."), + ("Values along a fitted exponential growth curve.", "Verilere uydurulmuş bir üstel büyüme eğrisi üzerindeki değerler."), + ("Values along a least-squares linear fit.", "En küçük kareler doğrusal uyumu boyunca değerler."), + ("Vertical array of all the most frequent numbers.", "En sık görülen tüm sayılardan oluşan dikey dizi."), + ("Weibull density or probability.", "Weibull yoğunluğu veya olasılığı."), + ("Writes a number in another base, padded with zeros.", "Sıfırlarla doldurulmuş başka bir tabana bir sayı yazar."), + ("Y-intercept of the least-squares regression line.", "En küçük kareler regresyon çizgisinin Y kesme noktası."), + ("Yield of a Treasury bill.", "Hazine bonosu getirisi."), + ("Yield of a security paying periodic interest.", "Periyodik faiz ödeyen bir menkul kıymetin getirisi."), + ("Yield of a security with an odd first period.", "Düzensiz ilk faiz dönemine sahip bir menkul kıymetin getirisi."), + ("Yield of a security with an odd last period.", "Düzensiz son faiz dönemine sahip bir menkul kıymetin getirisi."), + ("Z-score of a value.", "Bir değerin Z puanı."), + ("e raised to the given power.", "e verilen güce yükseltildi."), + ("k-th percentile, k from 0 to 1 inclusive.", "k, 0 ve 1 dahil bu aralıkta olmak üzere k yüzdelik dilim değeri."), + ("k-th percentile, k strictly between 0 and 1.", "k'inci yüzdelik dilim, k kesinlikle 0 ile 1 arasındadır."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "referans_türü"), + ("actual_range", "gerçek_aralık"), + ("aggregation", "toplulaştırma_yöntemi"), + ("alpha", "alfa"), + ("angle", "açı"), + ("area_num", "alan_numarası"), + ("argument", "bağımsız_değişken"), + ("array", "dizi"), + ("array_x", "x_değerleri_dizisi"), + ("array_y", "y_değerleri_dizisi"), + ("average_range", "ortalama_aralık"), + ("base", "taban"), + ("basis", "gün_sayım_esası"), + ("beta", "beta"), + ("bins_array", "sınıf_sınırları_dizisi"), + ("bottom", "alt_sınır"), + ("by_array", "sıralama_anahtarı_dizisi"), + ("by_col", "sütuna_göre"), + ("calc_method", "hesaplama_yöntemi"), + ("calculation", "hesaplama"), + ("caption", "başlık"), + ("case_sensitivity", "büyükküçük_harf_duyarlılığı"), + ("coefficients", "katsayıları"), + ("col_delimiter", "sütun_sınırlayıcı"), + ("col_fields", "sütun_alanları"), + ("col_index_num", "sütun_dizini"), + ("col_num", "sütun_numarası"), + ("col_sort_order", "sütun_sıralama_düzeni"), + ("col_total_depth", "sütun_toplam_derinliği"), + ("cols", "sütun_sayısı"), + ("column_num", "sütun_numarası"), + ("columns", "sütun_sayısı"), + ("confidence_level", "güven_düzeyi"), + ("connection", "veri_bağlantısı"), + ("const", "sabit"), + ("cost", "başlangıç_maliyeti"), + ("coupon", "kupon_faiz_oranı"), + ("criteria", "kriterler"), + ("criteria_range", "ölçüt_aralığı"), + ("cumulative", "kümülatif"), + ("data_all", "veriler_tümü"), + ("data_array", "veri_dizisi"), + ("data_completion", "veri_tamamlama"), + ("data_subset", "veri_alt_kümesi"), + ("database", "veritabanı"), + ("date", "tarih"), + ("date_purchased", "satın_alma_tarihi"), + ("date_text", "metin_olarak_yazılan_tarih"), + ("dates", "tarihler"), + ("day", "gün"), + ("days", "gün"), + ("decimal_dollar", "ondalık_fiyat"), + ("decimal_separator", "ondalık_ayırıcı"), + ("decimals", "ondalık_basamaklar"), + ("default_or_value", "varsayılan_veya_değer"), + ("deg_freedom", "serbestlik_derecesi"), + ("delimiter", "sınırlayıcı"), + ("denominator", "payda"), + ("dimension", "boyut"), + ("discount", "iskonto_oranı"), + ("divisor", "bölen"), + ("effect_rate", "etkin_faiz_oranı"), + ("end_date", "bitiş_tarihi"), + ("end_period", "bitiş_dönemi"), + ("error_val", "hata_değeri"), + ("exactly_once", "tam_olarak_bir_kez"), + ("expected_range", "beklenen_aralık"), + ("expression", "ifadesi"), + ("factor", "faktörü"), + ("field", "veritabanı_alanı"), + ("field_headers", "alan_başlıkları"), + ("field_relationship", "alanlar_arasındaki_ilişki"), + ("filter_array", "filtre_dizisi"), + ("finance_rate", "finansman_faiz_oranı"), + ("find_text", "aranan_metin"), + ("first_coupon", "ilk_kupon_ödeme_tarihi"), + ("first_interest", "ilk_faiz_ödeme_tarihi"), + ("first_period", "ilk_dönem_bitiş_tarihi"), + ("form", "formu"), + ("format", "biçimi"), + ("format_text", "biçim_metni"), + ("fraction", "kesir"), + ("fractional_dollar", "kesirli_fiyat"), + ("frequency", "kupon_ödeme_sıklığı"), + ("friendly_name", "görünen_ad"), + ("from_unit", "kaynak_ölçüm_birimi"), + ("full_precision", "tam_hassasiyet"), + ("function", "işlevi"), + ("function_num", "fonksiyon_numarası"), + ("fv", "gelecekteki_değer"), + ("group_separator", "grup_ayırıcı"), + ("guess", "tahmin"), + ("height", "yükseklik"), + ("holidays", "tatiller"), + ("hour", "saat"), + ("i_num", "sanal_katsayı"), + ("if_empty", "boşsa"), + ("if_not_found", "bulunamazsa"), + ("ignore", "yoksay"), + ("ignore_empty", "boş_olanı_yoksay"), + ("include", "dahil_et"), + ("index_num", "dizin_numarası"), + ("info_type", "bilgi_türü"), + ("initial_value", "başlangıç_değeri"), + ("instance_num", "oluşum_numarası"), + ("inumber", "karmaşık_sayı"), + ("investment", "yatırım"), + ("issue", "ihraç_tarihi"), + ("k", "k"), + ("known_xs", "bilinen_x_değerleri"), + ("known_ys", "bilinen_y_değerleri"), + ("kpi_name", "temel_performans_göstergesi_adı"), + ("kpi_property", "temel_performans_göstergesi_özelliği"), + ("lambda", "lambda"), + ("last_interest", "son_faiz_ödeme_tarihi"), + ("life", "kullanım_ömrü"), + ("link_location", "bağlantı_konumu"), + ("logical", "mantıksal_değer"), + ("logical_test", "mantıksal_sınama"), + ("lookup_array", "arama_dizisi"), + ("lookup_value", "aranan_değer"), + ("lookup_vector", "arama_vektörü"), + ("lower_limit", "alt_sınır"), + ("m", "m"), + ("match_end", "metin_sınırını_ayırıcı_say"), + ("match_mode", "eşleşme_modu"), + ("match_type", "eşleştirme_yöntemi"), + ("maturity", "vade_tarihi"), + ("max", "maksimum"), + ("max_range", "maksimum_değer_aralığı"), + ("mean", "aritmetik_ortalama"), + ("member_expression", "küp_üyesi_ifadesi"), + ("method", "yöntemi"), + ("min", "minimum"), + ("min_length", "minimum_uzunluk"), + ("min_range", "minimum_değer_aralığı"), + ("minute", "dakika"), + ("mode", "hesaplama_modu"), + ("month", "ay"), + ("months", "ay"), + ("multiple", "kat"), + ("n", "n"), + ("name", "ad"), + ("new_text", "yeni_metin"), + ("new_xs", "yeni_x_değerleri"), + ("no_commas", "rakam_grubu_ayırıcılarını_atla"), + ("no_switch", "amortisman_yöntemini_değiştirmeyin"), + ("nominal_rate", "nominal_faiz_oranı"), + ("nper", "dönem_sayısı"), + ("npery", "yıllık_bileşik_dönem_sayısı"), + ("num_bytes", "bayt_sayısı"), + ("num_chars", "karakter_sayısı"), + ("num_digits", "basamak_sayısı"), + ("number", "sayı"), + ("number_chosen", "seçilen_öğe_sayısı"), + ("number_f", "başarısızlık_sayısı"), + ("number_pop", "anakütle_büyüklüğü"), + ("number_s", "başarı_sayısı"), + ("number_sample", "örneklem_büyüklüğü"), + ("number_times", "tekrarlama_sayısı"), + ("numerator", "pay"), + ("occurrence", "oluşumu"), + ("old_text", "eski_metin"), + ("options", "seçenekleri"), + ("order", "sıralama_düzeni"), + ("pad_with", "dolgu_değeri"), + ("par", "nominal_değer"), + ("parameter", "parametresi"), + ("pattern", "düzenli_ifade_modeli"), + ("per", "dönem"), + ("percent", "yüzde"), + ("period", "dönem"), + ("places", "çıkış_rakamlarının_sayısı"), + ("pmt", "ödeme"), + ("population_s", "anakütledeki_başarı_sayısı"), + ("power", "üs"), + ("pr", "fiyat"), + ("principal", "anapara"), + ("prob_range", "olasılık_aralığı"), + ("probability", "olasılık"), + ("probability_s", "başarı_olasılığı"), + ("property", "özellik_adı"), + ("pv", "şimdiki_değer"), + ("quart", "çeyreklik"), + ("radix", "radix"), + ("range", "aralığı"), + ("range_lookup", "aralık_araması"), + ("rank", "sıralama"), + ("rate", "oran"), + ("real_num", "gerçek_katsayı"), + ("redemption", "itfa_değeri"), + ("ref", "referans"), + ("ref_text", "referans_metni"), + ("reference", "başvuru"), + ("reinvest_rate", "yeniden_yatırım_faiz_oranı"), + ("relative_to", "göreceli_olarak"), + ("replacement", "değiştirme"), + ("result", "sonuç"), + ("result_vector", "sonuç_vektörü"), + ("return_array", "dönüş_dizisi"), + ("return_mode", "dönüş_modu"), + ("return_type", "dönüş_türü"), + ("row_delimiter", "satır_sınırlayıcı"), + ("row_fields", "satır_alanları"), + ("row_index_num", "satır_dizini"), + ("row_num", "satır_numarası"), + ("row_sort_order", "satır_sıralama_düzeni"), + ("row_total_depth", "satır_toplam_derinliği"), + ("rows", "satır_sayısı"), + ("salvage", "artık_değer"), + ("sample_s", "örneklemdeki_başarı_sayısı"), + ("scan_by_column", "sütuna_göre_tara"), + ("schedule", "oranlar_dizisi"), + ("search_mode", "arama_modu"), + ("seasonality", "mevsimsellik"), + ("second", "saniye"), + ("serial_number", "seri_numarası"), + ("set", "küp_üyeleri_kümesi"), + ("set_expression", "küp_üye_kümesi_ifadesi"), + ("settlement", "takas_tarihi"), + ("sheet_text", "sayfa_metni"), + ("shift_amount", "kaydırma_miktarı"), + ("sigma", "sigma"), + ("significance", "yuvarlama_katı_veya_hassasiyet"), + ("size", "boyut"), + ("sort_by", "sıralama_ölçütü"), + ("sort_index", "sıralama_dizini"), + ("sort_order", "sıralama_düzeni"), + ("source", "kaynak"), + ("standard_dev", "standart_sapma"), + ("start", "başlangıç_değeri"), + ("start_date", "başlangıç_tarihi"), + ("start_num", "başlangıç_konumu"), + ("start_period", "başlangıç_dönemi"), + ("statistic_type", "istatistik_türü"), + ("stats", "istatistikler"), + ("step", "adım"), + ("suffix", "sonek"), + ("sum_range", "toplam_aralığı"), + ("table_array", "tablo_dizisi"), + ("tails", "dağılım_kuyruğu_sayısı"), + ("target", "hedef"), + ("target_date", "hedef_tarih"), + ("text", "metin"), + ("time_text", "metin_olarak_yazılan_zaman"), + ("timeline", "zaman_çizelgesi"), + ("to_unit", "hedef_ölçüm_birimi"), + ("top", "üst_sınır"), + ("total_depth", "toplam_derinlik"), + ("trials", "denemeler"), + ("triangulation_precision", "üçgenleme_hassasiyeti"), + ("trim_cols", "sütun_kırpma_modu"), + ("trim_rows", "satır_kırpma_modu"), + ("type", "tür"), + ("type_text", "veri_türü_adı"), + ("unit", "birim"), + ("upper_limit", "üst_sınır"), + ("url", "URLsi"), + ("value", "değeri"), + ("value_if_error", "hata_durumunda_sonuç"), + ("value_if_false", "koşul_yanlış_olduğunda_sonuç"), + ("value_if_na", "mevcut_değil_hatası_sonucu"), + ("value_if_true", "Koşul_doğru_olduğunda_sonuç"), + ("values", "giriş_değerleri"), + ("vector", "vektör"), + ("weekend", "hafta_sonu"), + ("whole_number", "tam_sayı"), + ("width", "genişlik"), + ("within_text", "aranacak_metin"), + ("wrap_count", "satır_veya_sütun_başına_değer_sayısı"), + ("x", "x"), + ("x_num", "x_koordinatı"), + ("x_range", "x_aralığı"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "y_koordinatı"), + ("year", "yıl"), + ("yld", "getiri_oranı"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/uk.rs b/crates/ui-egui/src/i18n/uk.rs index 7059a0ff44..ef6b1d976b 100644 --- a/crates/ui-egui/src/i18n/uk.rs +++ b/crates/ui-egui/src/i18n/uk.rs @@ -3,6 +3,9 @@ /// Returns the Ukrainian translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Borders|None" => "Без меж", + "Report Layout|Outline" => "Структурна форма", + "Page {page}" => "Сторінка {page}", "Diagram" => "Схема", "Decorative Text" => "Декоративний текст", "Paste" => "Вставити", @@ -223,7 +226,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Page\nLayout" => "Розмітка\nсторінки", "Formula Bar" => "Рядок формул", "Name Box" => "Поле імені", - "Cell Editor" => "Редактор клітинки", + "Cell Editor" => "Редактор комірки", "Font Size" => "Розмір шрифту", "Gridlines" => "Сітка", "Headings" => "Заголовки", @@ -430,117 +433,118 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "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." => "Спочатку виділіть діаграму.", + "Cancel" => "Скасувати", + "Don't Save" => "Не зберігати", + "Open…" => "Відкрити…", + "Show password" => "Показати пароль", + "Start a new workbook" => "Створити книгу", + "Household Budget" => "Сімейний бюджет", + "Quarterly Sales Dashboard" => "Зведення квартальних продажів", + "Gradebook" => "Журнал оцінок", + "this workbook" => "цю книгу", + "This workbook" => "Ця книга", + "Do you want to save the changes you made to {title}?" => "Зберегти зміни в книзі {title}?", + "Save a copy as .{format}" => "Зберегти копію у форматі .{format}", + "Select a chart first." => "Спочатку виберіть діаграму.", "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", - "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", + "Select Data" => "Вибрати дані", + "Row Height" => "Висота рядка", + "Column Width" => "Ширина стовпця", + "Standard Width" => "Стандартна ширина", + "Rename Sheet" => "Перейменувати аркуш", + "Move or Copy" => "Перемістити або скопіювати", + "Protect Sheet" => "Захистити аркуш", + "Protect Structure and Windows" => "Захистити структуру та вікна", + "Unprotect Workbook" => "Зняти захист книги", + "Unprotect Sheet" => "Зняти захист аркуша", + "Password" => "Пароль", + "Unhide" => "Показати", + "Paste Special" => "Спеціальне вставлення", + "Series" => "Прогресія", + "New Comment" => "Новий коментар", + "Insert Hyperlink" => "Вставити гіперпосилання", + "Create Sparklines" => "Створити мінідіаграми", + "Page Setup" => "Параметри сторінки", + "Convert Text to Columns" => "Розділити текст на стовпці", + "Remove Duplicates" => "Видалити дублікати", + "Goal Seek" => "Підбір параметра", + "Create Forecast Worksheet" => "Створити аркуш прогнозу", + "Solver Parameters" => "Параметри пошуку розв’язання", + "Solver Results" => "Результати пошуку розв’язання", + "Edit Name" => "Змінити ім’я", + "New Name" => "Нове ім’я", + "Format Cells" => "Формат клітинок", + "Find and Replace" => "Знайти й замінити", + "Go To" => "Перейти", + "Insert Calculated Field" => "Вставити обчислюване поле", + "Go To Special" => "Виділити групу клітинок", + "Name Manager" => "Диспетчер імен", + "Conditional Formatting Rules Manager" => "Диспетчер правил умовного форматування", + "Search Commands" => "Пошук команд", + "Agent Control" => "Керування агентами", + "About GridCraft" => "Про GridCraft", "Insert Chart" => "Вставити діаграму", - "Select Data Source" => "Select Data Source", - "Action Journal" => "Action Journal", - "Macros" => "Macros", - "Workbook Statistics" => "Workbook Statistics", - "Accessibility" => "Accessibility", + "Select Data Source" => "Вибрати джерело даних", + "Action Journal" => "Журнал дій", + "Macros" => "Макроси", + "Workbook Statistics" => "Статистика книги", + "Accessibility" => "Доступність", "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)", + "Place Picture in Cell" => "Розмістити зображення в клітинці", + "Place Picture over Cells" => "Розмістити зображення поверх клітинок", + "Pick From List" => "Вибрати зі списку", + "Save a Copy" => "Зберегти копію", + "Save Changes?" => "Зберегти зміни?", + "Shift cells right" => "Зсунути комірки праворуч", + "Shift cells down" => "Зсунути комірки вниз", + "Shift cells left" => "Зсунути комірки ліворуч", + "Shift cells up" => "Зсунути комірки вгору", + "Entire row" => "Увесь рядок", + "Entire column" => "Увесь стовпець", + "Row height (pixels):" => "Висота рядка (пікселі):", + "Column width (characters):" => "Ширина стовпця (символи):", + "Standard column width (pixels):" => "Стандартна ширина стовпця (пікселі):", + "Name:" => "Ім’я:", + "Before sheet (position, 0 = first):" => "Перед аркушем (позиція, 0 = перший):", + "Create a copy" => "Створити копію", + "Sheets: {sheets}" => "Аркуші: {sheets}", + "Password (optional):" => "Пароль (необов’язково):", + "Password:" => "Пароль:", + "Allow all users of this sheet to:" => "Дозволити всім користувачам цього аркуша:", + "Format cells" => "Форматувати комірки", + "Format columns" => "Форматувати стовпці", + "Format rows" => "Форматувати рядки", + "Insert rows" => "Вставляти рядки", + "Delete rows" => "Видаляти рядки", + "Use AutoFilter" => "Використовувати автофільтр", + " (password, unlocked)" => " (пароль, розблоковано)", + " (password)" => " (пароль)", + "No ranges yet." => "Діапазонів ще немає.", + "Ranges that stay editable when the sheet is protected:" => "Діапазони, які можна редагувати після захисту аркуша:", + "Action" => "Дія", + "Modify" => "Змінити", + "Unlock with password" => "Розблокувати паролем", + "Title:" => "Назва:", + "Refers to cells:" => "Посилання на комірки:", + "Range password:" => "Пароль діапазону:", + "New title (Modify):" => "Нова назва (Змінити):", + "Remove the password (Modify)" => "Видалити пароль (Змінити)", + "'{file}' is protected." => "Файл '{file}' захищено.", + "Unhide sheet:" => "Показати аркуш:", + "Hidden: {sheets}" => "Приховані: {sheets}", + "All" => "Усі", + "Formulas (F)" => "Формули (F)", + "Values (V)" => "Значення (V)", + "Formats (T)" => "Формати (T)", + "Comments and notes (C)" => "Коментарі та примітки (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", + "Add" => "Додати", + "Paste Special|Add" => "Додати", "Subtract" => "Subtract", "Multiply" => "Multiply", "Divide" => "Divide", @@ -580,6 +584,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Tab" => "Tab", "Semicolon" => "Semicolon", "Comma" => "Comma", + "Text to Columns|Comma" => "Кома", "Space" => "Space", "Other:" => "Other:", "Treat consecutive delimiters as one" => "Treat consecutive delimiters as one", @@ -682,7 +687,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "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.", + "This workbook has no scripts or macros." => "У цій книзі немає сценаріїв або макросів.", "(unnamed)" => "(unnamed)", "— VBA project (preserved, not run)" => "— VBA project (preserved, not run)", "— 1 step" => "— 1 step", @@ -692,7 +697,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Border" => "Border", "Format Cells|Fill" => "Fill", "Protection" => "Protection", - "Category:" => "Category:", + "Category:" => "Категорія:", "Sample" => "Sample", "Type (custom format code):" => "Type (custom format code):", "Vertical" => "Vertical", @@ -707,7 +712,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Shrink to fit" => "Shrink to fit", "Bold" => "Bold", "Italic" => "Italic", - "None" => "None", + "None" => "Немає", "Single" => "Single", "Double" => "Double", "Single Accounting" => "Single Accounting", @@ -728,18 +733,18 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Background Color:" => "Background Color:", "Locked" => "Locked", "Hidden" => "Hidden", - "Search:" => "Search:", - "e.g. lookup, average, date" => "e.g. lookup, average, date", + "Search:" => "Пошук:", + "e.g. lookup, average, date" => "наприклад: пошук, середнє, дата", "Date & Time" => "Дата і час", "Lookup & Reference" => "Пошук і посилання", "Math & Trig" => "Математичні і тригонометричні", - "Statistical" => "Statistical", - "Engineering" => "Engineering", - "Database" => "Database", - "Compatibility" => "Compatibility", - "Web" => "Web", - "Cube" => "Cube", - "Add-in and Automation" => "Add-in and Automation", + "Statistical" => "Статистичні", + "Engineering" => "Інженерні", + "Database" => "База даних", + "Compatibility" => "Сумісність", + "Web" => "Веб", + "Cube" => "Куб", + "Add-in and Automation" => "Надбудови й автоматизація", "Find" => "Find", "Replace" => "Replace", "Find what:" => "Find what:", @@ -795,7 +800,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Combo" => "Combo", "Chart data range:" => "Діапазон даних діаграми:", "Legend Entries (Series)" => "Legend Entries (Series)", - "Series{n}" => "Series{n}", + "Series{n}" => "Ряд {n}", "Keep" => "Keep", "Remove" => "Remove", "Horizontal (Category) Axis Labels:" => "Horizontal (Category) Axis Labels:", @@ -907,8 +912,8 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "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 Function" => "Вставити функцію", + "Insert Function (⇧F3)" => "Вставити функцію (⇧F3)", "Insert Link" => "Insert Link", "Insert Sheet" => "Insert Sheet", "Insert Slicer" => "Insert Slicer", @@ -963,7 +968,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "£ English (United Kingdom)" => "£ English (United Kingdom)", "¥ Japanese" => "¥ Japanese", "€ Euro" => "€ Euro", - "Tab|Insert" => "Insert", + "Tab|Insert" => "Вставлення", "AutoSave" => "AutoSave", "Insert\nSlicer" => "Insert\nSlicer", "Pen\nBlack" => "Pen\nBlack", @@ -972,7 +977,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Protect\nSheet" => "Protect\nSheet", "Watch\nWindow" => "Watch\nWindow", "Workbook\nStatistics" => "Workbook\nStatistics", - "Options|Editing" => "Editing", + "Options|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:", @@ -1008,6 +1013,25 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Recording" => "Запис", "New Macro" => "Новий макрос", "Show" => "Показати", + "Generated|Column" => "Стовпець", + "Generated|Row" => "Рядок", + "Book" => "Книга", + "Sheet" => "Аркуш", + "Count Numbers" => "Кількість чисел", + "Type to filter…" => "Введіть текст для фільтрування…", + "Nothing to paste." => "Немає даних для вставлення.", + "No cells were found." => "Клітинок не знайдено.", + "Or select a category:" => "Або виберіть категорію:", + "Most Recently Used" => "Нещодавно використані", + "Insert Function…" => "Вставити функцію…", + "Paste Names…" => "Вставити імена…", + "Macro name:" => "Ім’я макросу:", + "Shortcut key:" => "Сполучення клавіш:", + "Description:" => "Опис:", + "Check for Updates…" => "Перевірити оновлення…", + "Checking for updates…" => "Перевірка оновлень…", + "Could not check for updates." => "Не вдалося перевірити оновлення.", + "Check Again" => "Перевірити ще раз", "Collapse dialog" => "Згорнути діалогове вікно", "Expand dialog" => "Розгорнути діалогове вікно", _ => return None, diff --git a/crates/ui-egui/src/i18n/uk_functions.rs b/crates/ui-egui/src/i18n/uk_functions.rs new file mode 100644 index 0000000000..a3036e783c --- /dev/null +++ b/crates/ui-egui/src/i18n/uk_functions.rs @@ -0,0 +1,945 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 для додатного числа, -1 для від’ємного та 0 для нуля."), + ("A random integer between two bounds, inclusive.", "Випадкове ціле число між двома межами включно."), + ("A random number between 0 and 1, recalculated every time.", "Випадкове число від 0 до 1, щоразу перераховується."), + ("A range or array without its blank outer rows and columns.", "Діапазон або масив без порожніх зовнішніх рядків і стовпців."), + ("A reference shifted from a starting point.", "Посилання, зміщене від початкової точки."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Статистика моделі FORECAST.ETS: 1 альфа, 2 бета, 3 гамма, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 розмір кроку.", + ), + ("A subtotal that can skip hidden rows.", "Проміжний підсумок, який може пропускати приховані рядки."), + ("Absolute value (modulus) of a complex number.", "Абсолютне значення (модуль) комплексного числа."), + ("Absolute value of a number.", "Абсолютне значення числа."), + ("Accrued interest of a security paying interest at maturity.", "Нараховані відсотки за цінним папером із виплатою відсотків під час погашення."), + ("Accrued interest of a security paying periodic interest.", "Нараховані відсотки за цінним папером із періодичною виплатою відсотків."), + ("Accumulates an array into one value.", "Акумулює масив в одне значення."), + ("Adds all the numbers in the arguments.", "Додає всі числа, указані в аргументах."), + ("Adds the cells that meet a condition.", "Повертає суму числових значень у комірках електронної таблиці, які задовольняють умову."), + ("Adds the cells that meet every condition.", "Повертає суму числових значень у комірках електронної таблиці, які задовольняють усі умови."), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Повертає суму числових значень у полі бази даних для записів, які задовольняють критерії.", + ), + ("Adds the squares of the numbers.", "Повертає суму квадратів чисел."), + ("Amount received at maturity for a fully invested security.", "Сума, отримана під час погашення повністю оплаченого цінного паперу."), + ("An aggregate that can skip hidden rows and errors.", "Агрегат, який може пропускати приховані рядки та помилки."), + ("Angle of a complex number in radians.", "Кут комплексного числа в радіанах."), + ("Angle of the point (x, y) from the x-axis in radians.", "Кут точки (x, y) до осі x у радіанах."), + ("Annual yield of a discounted security.", "Річна дохідність дисконтного цінного паперу."), + ("Annual yield of a security paying interest at maturity.", "Річна дохідність цінного паперу з виплатою відсотків під час погашення."), + ("Applies a LAMBDA to each column.", "Застосовує LAMBDA до кожного стовпця."), + ("Applies a LAMBDA to each row.", "Застосовує LAMBDA до кожного рядка."), + ("Applies a LAMBDA to each value.", "Застосовує LAMBDA до кожного значення."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Приблизний пошук у відсортованому векторі або першому рядку/стовпці масиву.", + ), + ("Arccosine in radians.", "Аркосинус у радіанах."), + ("Arccotangent in radians (0 to pi).", "Аркотангенс у радіанах (від 0 до пі)."), + ("Arcsine in radians.", "Арксинус у радіанах."), + ("Arctangent in radians.", "Арктангенс у радіанах."), + ("Arithmetic mean of the numbers.", "Середнє арифметичне чисел."), + ("Average absolute deviation from the mean.", "Середнє абсолютне відхилення від середнього."), + ("Average of the cells that meet a condition.", "Середнє значення клітинок електронної таблиці, які відповідають умові."), + ("Average of the cells that meet every condition.", "Середнє значення клітинок електронної таблиці, які відповідають усім умовам."), + ("Averages the numbers in a field of the records that meet the criteria.", "Усереднює числа в полі записів, які відповідають критеріям."), + ("Base-10 logarithm of a complex number.", "Логарифм комплексного числа за основою 10."), + ("Base-10 logarithm.", "Логарифм за основою 10."), + ("Base-2 logarithm of a complex number.", "Логарифм комплексного числа за основою 2."), + ("Bessel function of the first kind, J_n(x).", "Функція Бесселя першого роду, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Функція Бесселя другого роду, Y_n(x)."), + ("Beta distribution density or probability.", "Щільність або ймовірність бета-розподілу."), + ("Binomial probability.", "Біноміальна ймовірність."), + ("Bitwise AND of two non-negative integers.", "Побітове AND двох невід’ємних цілих чисел."), + ("Bitwise OR of two non-negative integers.", "Побітове OR двох невід’ємних цілих чисел."), + ("Bitwise exclusive OR of two non-negative integers.", "Порозрядний ексклюзивний OR двох невід’ємних цілих чисел."), + ("Bond-equivalent yield of a Treasury bill.", "Дохідність казначейського векселя, еквівалентна облігаціям."), + ("Breaks a row or column into columns of the given length.", "Розбиває рядок або стовпець на стовпці заданої довжини."), + ("Breaks a row or column into rows of the given length.", "Розбиває рядок або стовпець на рядки заданої довжини."), + ("Builds a cell address as text from row and column numbers.", "Будує адресу комірки як текст із номерів рядків і стовпців."), + ("Builds a complex number as text from real and imaginary parts.", "Будує комплексне число як текст із дійсної та уявної частин."), + ("Builds a date serial number from a year, month and day.", "Будує порядковий номер дати з року, місяця та дня."), + ("Builds a summary table grouping values by row and column fields.", "Будує зведену таблицю, групуючи значення за полями рядків і стовпців."), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "Будує час (частку доби) з годин, хвилин і секунд."), + ("Builds an array from a LAMBDA.", "Будує масив із LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Будує масив чисел із рівномірним кроком."), + ("Builds an array of random numbers in a range.", "Будує масив випадкових чисел у діапазоні."), + ("Byte version of FIND.", "Байтова версія FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Байтова версія LEFT (те саме, що LEFT для однобайтового тексту)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Байтова версія LEN (те саме, що LEN для однобайтового тексту)."), + ("Byte version of MID (same as MID for single-byte text).", "Байтова версія MID (те саме, що MID для однобайтового тексту)."), + ("Byte version of REPLACE.", "Байтова версія REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Байтова версія RIGHT (те саме, що RIGHT для однобайтового тексту)."), + ("Byte version of SEARCH.", "Байтова версія SEARCH."), + ("Capitalises the first letter of each word and lower-cases the rest.", "Першу літеру кожного слова робить великою, а решту — малими."), + ("Chi-squared density or left-tailed probability.", "Щільність хі-квадрат або лівостороння ймовірність."), + ("Chi-squared test of independence.", "Тест хі-квадрат незалежності."), + ("Column number of a reference.", "Номер стовпця посилання."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "Порівнює вираз зі списком значень і повертає результат у поєднанні з першим збігом.", + ), + ("Complementary error function, 1 - ERF(x).", "Додаткова функція помилки, 1 – ERF(x)."), + ("Complex conjugate of a complex number.", "Комплексне спряження комплексного числа."), + ("Confidence interval half-width using Student's t distribution.", "Напівширина довірчого інтервалу з використанням t-розподілу Стьюдента."), + ("Confidence interval half-width using the normal distribution.", "Напівширина довірчого інтервалу з використанням нормального розподілу."), + ("Converts Roman numerals to a number.", "Перетворює римські цифри на число."), + ("Converts a binary number to decimal.", "Перетворює двійкове число в десяткове."), + ("Converts a binary number to hexadecimal.", "Перетворює двійкове число на шістнадцяткове."), + ("Converts a binary number to octal.", "Перетворює двійкове число у вісімкове."), + ("Converts a date written as text into a date serial number.", "Перетворює дату, написану як текст, на порядковий номер дати."), + ("Converts a decimal number to binary.", "Перетворює десяткове число на двійкове."), + ("Converts a decimal number to hexadecimal.", "Перетворює десяткове число на шістнадцяткове."), + ("Converts a decimal number to octal.", "Перетворює десяткове число на вісімкове."), + ("Converts a decimal price to fractional notation.", "Перетворює десяткову ціну на дробову систему."), + ("Converts a fractional price notation to a decimal number.", "Перетворює дробове позначення ціни на десяткове число."), + ("Converts a hexadecimal number to binary.", "Перетворює шістнадцяткове число на двійкове."), + ("Converts a hexadecimal number to decimal.", "Перетворює шістнадцяткове число на десяткове."), + ("Converts a hexadecimal number to octal.", "Перетворює шістнадцяткове число на вісімкове."), + ("Converts a measurement from one unit to another.", "Перетворює вимірювання з однієї одиниці в іншу."), + ("Converts a number to Roman numerals in one of five styles.", "Перетворює число на римські цифри в одному з п’яти стилів."), + ("Converts a time written as text into a fraction of a day.", "Перетворює час, записаний у вигляді тексту, на частку доби."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Перетворює значення на число: числа залишаються, TRUE дорівнює 1, усе інше дорівнює 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Перетворює масив на текст, або як список із комою, або як сувору константу масиву.", + ), + ("Converts an octal number to binary.", "Перетворює вісімкове число на двійкове."), + ("Converts an octal number to decimal.", "Перетворює вісімкове число на десяткове."), + ("Converts an octal number to hexadecimal.", "Перетворює вісімкове число на шістнадцяткове."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Перетворює будь-яке значення на текст, необов’язково у строгій формі (в лапках).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Конвертує між євро та колишніми національними валютами країн єврозони за фіксованими курсами.", + ), + ("Converts degrees to radians.", "Перетворює градуси на радіани."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Перетворює символи повної ширини на символи половинної ширини (без змін для однобайтового тексту).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Перетворює символи половинної ширини на повну ширину (без змін у цій локалі).", + ), + ("Converts radians to degrees.", "Перетворює радіани на градуси."), + ("Converts text that looks like a number, date or time into a number.", "Перетворює текст, схожий на число, дату або час, на число."), + ( + "Converts text to a number using the given decimal and group separators.", + "Перетворює текст на число за допомогою вказаних десяткових роздільників і роздільників груп.", + ), + ("Converts text to lower case.", "Перетворює текст у нижній регістр."), + ("Converts text to upper case.", "Перетворює текст у верхній регістр."), + ("Correlation coefficient of two data sets.", "Коефіцієнт кореляції двох наборів даних."), + ("Cosecant of a complex number.", "Косеканс комплексного числа."), + ("Cosecant of an angle in radians.", "Косеканс кута в радіанах."), + ("Cosine of a complex number.", "Косинус комплексного числа."), + ("Cosine of an angle in radians.", "Косинус кута в радіанах."), + ("Cotangent of a complex number.", "Котангенс комплексного числа."), + ("Cotangent of an angle in radians.", "Котангенс кута в радіанах."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Рахує дні між двома датами 360-денного року (US або європейський метод).", + ), + ("Counts empty cells and empty text in a range.", "Підраховує порожні комірки електронної таблиці та порожній текст у діапазоні."), + ("Counts how many values fall into each bin, as a vertical array.", "Повертає вертикальний масив кількостей значень у кожному інтервалі."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Підраховує непорожні комірки електронної таблиці в полі відповідних записів (або відповідних записів).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Підраховує числові комірки електронної таблиці в полі відповідних записів (або відповідних записів).", + ), + ("Counts the cells that meet a condition.", "Підраховує комірки електронної таблиці, які відповідають умові."), + ("Counts the cells that meet every condition.", "Підраховує комірки електронної таблиці, які відповідають кожній умові."), + ("Counts the characters in a text.", "Підраховує символи в тексті."), + ("Counts the columns in an array or range.", "Підраховує стовпці в масиві чи діапазоні."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Підраховує елементи в наборі кубів (без з’єднань кубів; #N/A)."), + ("Counts the non-empty values.", "Підраховує непорожні значення."), + ("Counts the numbers.", "Рахує числа."), + ("Counts the rows in an array or range.", "Підраховує рядки в масиві чи діапазоні."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Рахує цілі роки, місяці або дні між двома датами. одиниці: Y, M, D, MD, YM або YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Рахує робочі дні (з понеділка по п'ятницю) між двома датами, за винятком святкових днів.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Рахує робочі дні між двома датами з індивідуальними вихідними, за винятком свят.", + ), + ( + "Creates a link; the cell shows the friendly name, or the link itself.", + "Створює посилання; комірка показує зрозуміле ім’я або саме посилання.", + ), + ("Creates a reusable custom function.", "Створює багаторазову спеціальну функцію."), + ("Cumulative beta probability.", "Кумулятивна ймовірність бета-розподілу."), + ("Cumulative lognormal probability.", "Кумулятивна ймовірність логнормального розподілу."), + ("Cuts off the fractional part of a number at the given digits.", "Відсікає цифри числа після заданого розряду."), + ("Days from settlement to the next coupon date.", "Днів від розрахунку до наступної дати сплати відсотків."), + ("Days from the start of the coupon period to settlement.", "Днів від початку періоду сплати відсотків до розрахунку."), + ("Days in the coupon period that contains settlement.", "Дні в періоді сплати відсотків, який містить розрахунок."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Амортизація за зниженим залишком протягом будь-якого проміжку періодів із переходом до прямолінійного.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Визначає набір елементів куба (без з’єднань куба; #N/A)."), + ("Determinant of a square matrix.", "Визначник квадратної матриці."), + ("Difference of two complex numbers.", "Різниця двох комплексних чисел."), + ("Discount rate of a security.", "Ставка дисконту цінного паперу."), + ("Double factorial of a number.", "Подвійний факторіал числа."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Амортизація за період методом подвійного зменшення залишку (або з іншим коефіцієнтом).", + ), + ("Effective annual rate from a nominal rate and compounding periods.", "Ефективна річна ставка від номінальної ставки та періодів нарахування."), + ("Equivalent interest rate for the growth of an investment.", "Еквівалентна процентна ставка для зростання інвестицій."), + ( + "Error function integrated from 0 to a limit, or between two limits.", + "Функція помилки, інтегрована від 0 до обмеження або між двома обмеженнями.", + ), + ("Error function integrated from 0 to x.", "Функція помилок, інтегрована від 0 до x."), + ("Excess kurtosis of a sample.", "Ексцес вибірки."), + ( + "Exponential curve coefficients and optional regression statistics.", + "Коефіцієнти експоненціальної кривої та необов’язкова статистика регресії.", + ), + ("Exponential distribution density or probability.", "Експоненціальна щільність розподілу або ймовірність."), + ("Exponential of a complex number.", "Експонента комплексного числа."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Витягує дані з XML за допомогою XPath (недоступно; повертає #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Витягує перший збіг, усі збіги або групи захоплення регулярного виразу.", + ), + ("F distribution density or left-tailed probability.", "F-щільність розподілу або лівостороння ймовірність."), + ("Factorial of a number.", "Факторіал числа."), + ("Fetches data from a web service (not available; returns #VALUE!).", "Отримує дані з веб-служби (недоступно; повертає #VALUE!)."), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Знаходить значення в першому стовпці таблиці та повертає значення в тому самому рядку іншого стовпця.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Знаходить значення в першому рядку таблиці та повертає значення в тому самому стовпці іншого рядка.", + ), + ("Finds the position of one text in another (case-sensitive).", "Знаходить позицію одного тексту в іншому (з урахуванням регістру)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Знаходить позицію одного тексту в іншому, ігноруючи регістр і дозволяючи символи підстановки.", + ), + ("Fisher transformation.", "Трансформація Фішера."), + ("Fixed-declining-balance depreciation for a period.", "Амортизація з фіксованим зменшенням залишку за період."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Зводить масив в один стовпець із можливістю пропускати порожні значення або помилки.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Зводить масив в один рядок із можливістю пропускати порожні значення або помилки.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Прогнозує значення шляхом адитивного (AAA) експоненційного згладжування."), + ("Formats a number as currency text, like DOLLAR.", "Форматує число як текст валюти, наприклад DOLLAR."), + ("Formats a number as currency text.", "Форматує число як текст валюти."), + ("Formats a number as text.", "Форматує число як текст."), + ("French degressive depreciation with a life-based coefficient.", "Французька дегресивна амортизація з коефіцієнтом на основі терміну служби."), + ("French linear depreciation prorated for the first period.", "Французька лінійна амортизація, пропорційна для першого періоду."), + ("Future value of a principal after a series of compound rates.", "Майбутня вартість основної суми після серії складних ставок."), + ("Future value of an investment with constant payments and rate.", "Майбутня вартість інвестиції з постійними платежами та ставкою."), + ("Gamma distribution density or probability.", "Щільність або ймовірність гамма-розподілу."), + ("Geometric mean of positive numbers.", "Середнє геометричне додатних чисел."), + ("Greatest common divisor of integers.", "Найбільший спільний дільник цілих чисел."), + ("Groups rows by key fields and aggregates the values of each group.", "Групує рядки за ключовими полями та об’єднує значення кожної групи."), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Збільшує масив до вказаного розміру, заповнюючи нові комірки заданим значенням.", + ), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "Напівширина довірчого інтервалу навколо значення FORECAST.ETS."), + ("Harmonic mean of positive numbers.", "Середнє гармонічне додатних чисел."), + ("Hyperbolic cosecant of a complex number.", "Гіперболічний косеканс комплексного числа."), + ("Hyperbolic cosecant.", "Гіперболічний косеканс."), + ("Hyperbolic cosine of a complex number.", "Гіперболічний косинус комплексного числа."), + ("Hyperbolic cosine.", "Гіперболічний косинус."), + ("Hyperbolic cotangent.", "Гіперболічний котангенс."), + ("Hyperbolic secant of a complex number.", "Гіперболічний секанс комплексного числа."), + ("Hyperbolic secant.", "Гіперболічний секанс."), + ("Hyperbolic sine of a complex number.", "Гіперболічний синус комплексного числа."), + ("Hyperbolic sine.", "Гіперболічний синус."), + ("Hyperbolic tangent.", "Гіперболічний тангенс."), + ("Hypergeometric probability of an exact count.", "Гіпергеометрична ймовірність точного підрахунку."), + ("Hypergeometric probability.", "Гіпергеометрична ймовірність."), + ("Identity matrix of the given size.", "Одинична матриця заданого розміру."), + ("Imaginary coefficient of a complex number.", "Уявний коефіцієнт комплексного числа."), + ("Information about a cell.", "Інформація про комірку."), + ("Integer part of a division.", "Ціла частина ділення."), + ( + "Interest paid in a period of a loan with even principal payments.", + "Відсотки, сплачені за період позики з рівномірними виплатами основної суми.", + ), + ("Interest part of a given period's payment.", "Відсоткова частина платежу за певний період."), + ("Interest rate of a fully invested security.", "Відсоткова ставка повністю оплаченого цінного паперу."), + ("Interest rate per period of an annuity, found iteratively.", "Процентна ставка за період ануїтету, знайдена ітераційно."), + ("Internal rate of return of cash flows on specific dates.", "Внутрішня норма прибутковості грошових потоків на певні дати."), + ("Internal rate of return of periodic cash flows.", "Внутрішня норма прибутку періодичних грошових потоків."), + ("Inverse hyperbolic cosine.", "Гіперболічний обернений косинус."), + ("Inverse hyperbolic cotangent.", "Обернений гіперболічний котангенс."), + ("Inverse hyperbolic sine.", "Гіперболічний обернений синус."), + ("Inverse hyperbolic tangent.", "Обернений гіперболічний тангенс."), + ("Inverse of a square matrix.", "Обернена квадратна матриця."), + ("Inverse of the Fisher transformation.", "Перетворення, обернене до перетворення Фішера."), + ("Inverse of the cumulative beta distribution.", "Обернений кумулятивний бета-розподіл."), + ("Inverse of the cumulative lognormal distribution.", "Обернений інтегральний логнормальний розподіл."), + ("Inverse of the gamma cumulative distribution.", "Обернений гамма-кумулятивний розподіл."), + ("Inverse of the left-tailed F distribution.", "Інверсія лівостороннього F-розподілу."), + ("Inverse of the left-tailed chi-squared distribution.", "Обернений лівосторонній розподіл хі-квадрат."), + ("Inverse of the normal cumulative distribution.", "Обернений до нормального інтегрального розподілу."), + ("Inverse of the right-tailed F distribution.", "Обернений до правобічного F-розподілу."), + ("Inverse of the right-tailed chi-squared distribution.", "Обернене до правобічного розподілу хі-квадрат."), + ("Inverse of the standard normal cumulative distribution.", "Обернений до стандартного нормального інтегрального розподілу."), + ("Joins several text values into one.", "Об’єднує кілька текстових значень в одне."), + ( + "Joins text from values and every cell of ranges, without a separator.", + "Об’єднує текст зі значень і кожної комірки діапазонів без розділювача.", + ), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Об’єднує текст зі значень і діапазонів за допомогою роздільника, за бажанням пропускаючи порожні елементи.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Зберігає рядки або стовпці від початку (або кінця) масиву."), + ("Keeps the rows or columns of an array whose include flag is TRUE.", "Зберігає рядки або стовпці масиву, прапорець включення якого TRUE."), + ("Largest number (0 when there are none).", "Найбільше число (0, якщо їх немає)."), + ("Largest number in a field of the matching records.", "Найбільше число в полі відповідних записів."), + ("Largest value among cells that meet every condition.", "Найбільше значення серед клітинок електронної таблиці, які відповідають усім умовам."), + ("Largest value counting text as 0 and logicals as 1/0.", "Найбільше значення, що враховує текст як 0 і логічні значення як 1/0."), + ("Least common multiple of integers.", "Найменше спільне кратне цілих чисел."), + ( + "Least-squares line coefficients and optional regression statistics.", + "Лінійні коефіцієнти найменших квадратів і необов’язкова статистика регресії.", + ), + ("Left-tailed inverse of Student's t distribution.", "Лівосторонній обернений t-розподіл Стьюдента."), + ("Length of the repeating pattern detected in a time series.", "Довжина повторюваного шаблону, виявленого в часовому ряді."), + ("Logarithm to the given base (10 by default).", "Логарифм за заданою основою (10 за умовчанням)."), + ("Lognormal density or probability.", "Логнормальна щільність або ймовірність."), + ("Macaulay duration of a security with periodic interest.", "Дюрація Маколея цінного паперу з періодичною виплатою відсотків."), + ("Matrix product of two arrays.", "Матричний добуток двох масивів."), + ("Mean after trimming a fraction of points from both ends.", "Середнє значення після обрізання частки точок з обох кінців."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Середнє значення з урахуванням тексту як 0 і логічних значень як 1 або 0."), + ("Middle value of the numbers.", "Медіана чисел."), + ("Modified Bessel function of the first kind, I_n(x).", "Модифікована функція Бесселя першого роду, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Модифікована функція Бесселя другого роду, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Модифікована дюрація цінного паперу з періодичною виплатою відсотків."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Змінена внутрішня норма прибутку з використанням окремих ставок запозичення та реінвестування.", + ), + ("Most frequently occurring number.", "Число, яке трапляється найчастіше."), + ("Multiplies all the numbers in the arguments.", "Перемножує всі числа в аргументах."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Перемножує відповідні елементи масивів однакового розміру та додає добутки.", + ), + ("Multiplies the numbers in a field of the matching records.", "Перемножує числа в полі відповідних записів."), + ("Names intermediate results.", "Надає імена проміжним результатам."), + ("Natural log of the gamma function.", "Натуральний логарифм гамма-функції."), + ("Natural logarithm of a complex number.", "Натуральний логарифм комплексного числа."), + ("Natural logarithm.", "Натуральний логарифм."), + ("Negative binomial probability.", "Ймовірність від’ємного біноміального розподілу."), + ("Net present value of cash flows on specific dates.", "Чиста поточна вартість грошових потоків на певні дати."), + ("Net present value of periodic cash flows at a discount rate.", "Чиста поточна вартість періодичних грошових потоків за ставкою дисконту."), + ("Next coupon date after settlement.", "Наступна дата сплати відсотків після розрахунку."), + ("Nominal annual rate from an effective rate and compounding periods.", "Номінальна річна ставка з ефективної ставки та періодів нарахування."), + ("Normal distribution density or cumulative probability.", "Нормальна щільність розподілу або кумулятивна ймовірність."), + ("Number of areas in a reference.", "Кількість областей у посиланні."), + ("Number of combinations with repetition.", "Кількість комбінацій з повторенням."), + ("Number of combinations without repetition.", "Кількість комбінацій без повторення."), + ( + "Number of coupons payable between settlement and maturity.", + "Кількість процентних платежів, що підлягають виплаті між розрахунком і погашенням.", + ), + ("Number of ordered selections with repetition.", "Кількість упорядкованих вибірок із повторенням."), + ("Number of ordered selections without repetition.", "Кількість упорядкованих вибірок без повторення."), + ("Number of periods needed to pay off or accumulate an amount.", "Кількість періодів, необхідних для погашення або накопичення суми."), + ("Number of sheets.", "Кількість арк."), + ("One- or two-tailed Student's t probability.", "Одно- чи двобічна ймовірність t Стьюдента."), + ("One-tailed probability of a z-test.", "Однобічна ймовірність z-тесту."), + ("Pearson product-moment correlation coefficient.", "Коефіцієнт кореляції продукт-момент Пірсона."), + ("Percent-encodes text for use in a URL.", "Відсоткове кодування тексту для використання в URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Періодична оплата кредиту або ануїтету з постійними виплатами та ставкою.", + ), + ("Periods needed for an investment to grow to a target value.", "Періоди, необхідні для зростання інвестиції до цільового значення."), + ("Picks a value from the list by its position.", "Вибирає значення зі списку за його позицією."), + ("Picks columns of an array by position (negative counts from the end).", "Вибирає стовпці масиву за позицією (від’ємні відліки з кінця)."), + ("Picks rows of an array by position (negative counts from the end).", "Вибирає рядки масиву за позицією (від’ємні відліки з кінця)."), + ("Places arrays side by side.", "Розміщує масиви поруч."), + ("Poisson probability.", "Імовірність Пуассона."), + ("Population covariance of paired values.", "Коваріація сукупності парних значень."), + ("Population skewness.", "Асиметрія генеральної сукупності."), + ( + "Population standard deviation counting text as 0 and logicals as 1/0.", + "Стандартне відхилення генеральної сукупності з підрахунком тексту як 0 і логічних значень як 1/0.", + ), + ( + "Population standard deviation of a field over the matching records.", + "Стандартне відхилення генеральної сукупності значень поля для відповідних записів.", + ), + ("Population standard deviation.", "Стандартне відхилення генеральної сукупності."), + ( + "Population variance counting text as 0 and logicals as 1/0.", + "Дисперсія генеральної сукупності з підрахунком тексту як 0 і логічних значень як 1/0.", + ), + ("Population variance of a field over the matching records.", "Дисперсія генеральної сукупності значень поля для відповідних записів."), + ("Population variance.", "Дисперсія генеральної сукупності."), + ("Positive square root.", "Додатний квадратний корінь."), + ("Predicts a value along a linear trend.", "Прогнозує значення вздовж лінійного тренду."), + ("Present value of a series of equal future payments.", "Поточна вартість серії рівних майбутніх платежів."), + ("Previous coupon date on or before settlement.", "Попередня дата сплати відсотків на або до розрахунку."), + ("Price per 100 face value of a Treasury bill.", "Ціна за 100 номінальної вартості казначейського векселя."), + ("Price per 100 face value of a discounted security.", "Ціна дисконтного цінного паперу за 100 одиниць номінальної вартості."), + ( + "Price per 100 face value of a security paying interest at maturity.", + "Ціна цінного паперу з виплатою відсотків під час погашення за 100 одиниць номінальної вартості.", + ), + ( + "Price per 100 face value of a security paying periodic interest.", + "Ціна цінного паперу з періодичною виплатою відсотків за 100 одиниць номінальної вартості.", + ), + ( + "Price per 100 face value of a security with an odd first period.", + "Ціна цінного паперу з нестандартним першим купонним періодом за 100 одиниць номінальної вартості.", + ), + ( + "Price per 100 face value of a security with an odd last period.", + "Ціна цінного паперу з нестандартним останнім купонним періодом за 100 одиниць номінальної вартості.", + ), + ("Principal part of a given period's payment.", "Частина платежу за певний період, що погашає основну суму боргу."), + ("Probability from Student's t-test.", "Імовірність за t-критерієм Стьюдента."), + ("Probability of a number of successes falling in a range.", "Ймовірність того, що кількість успіхів потрапляє в заданий діапазон."), + ( + "Probability that a standard normal value falls between the mean and z.", + "Імовірність того, що стандартне нормальне значення знаходиться між середнім значенням і z.", + ), + ("Probability that values fall between two limits.", "Імовірність того, що значення знаходяться між двома межами."), + ("Product of complex numbers.", "Добуток комплексних чисел."), + ("Quartile (0–4) of a data set, inclusive method.", "Квартиль (0–4) набору даних, включний метод."), + ("Quartile (0–4) of a data set.", "Квартиль (0–4) набору даних."), + ("Quartile (1–3) of a data set, exclusive method.", "Квартиль (1–3) набору даних, ексклюзивний метод."), + ("Quotient of two complex numbers.", "Частка двох комплексних чисел."), + ("Raises a complex number to a power.", "Підносить комплексне число до степеня."), + ("Raises a number to a power.", "Підводить число до степеня."), + ("Rank of a number within a list.", "Ранг числа в списку."), + ("Rank of a number within a list; ties get the average rank.", "Ранг числа в списку; однакові значення отримують середній ранг."), + ("Rank of a number within a list; ties share the top rank.", "Ранг числа в списку; однакові значення отримують найвищий із належних їм рангів."), + ("Ratio of the factorial of a sum to the product of factorials.", "Відношення факторіала суми до добутку факторіалів."), + ("Reads text in a given base as a number.", "Читає текст у заданій базі як число."), + ("Real coefficient of a complex number.", "Дійсний коефіцієнт комплексного числа."), + ("Relative standing of a value as a fraction of the data set.", "Відносне положення значення як частки набору даних."), + ("Relative standing of a value from 0 to 1 inclusive.", "Відносне положення значення від 0 до 1 включно."), + ("Relative standing of a value strictly between 0 and 1.", "Відносне положення значення строго між 0 і 1."), + ("Remainder of a division, with the sign of the divisor.", "Остача від ділення зі знаком дільника."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Видаляє пробіли на початку та в кінці та згортає ряди пробілів до одного.", + ), + ("Removes non-printable control characters from text.", "Видаляє з тексту контрольні символи, які не друкуються."), + ("Removes rows or columns from the start (or end) of an array.", "Видаляє рядки або стовпці з початку (або кінця) масиву."), + ("Repeats a text a given number of times.", "Повторює текст задану кількість разів."), + ("Replaces matches of a regular expression, all of them or a chosen occurrence.", "Замінює всі збіги регулярного виразу або вибраний збіг."), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Замінює входження одного тексту іншим, необов’язково лише певним входженням.", + ), + ("Replaces part of a text by position.", "Замінює частину тексту за заданою позицією."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Повертає 1, якщо число не менше за поріг, інакше 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Повертає 1, якщо два числа рівні, інакше 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Повертає код типу значення: 1 число, 2 текст, 4 логічне, 16 помилка, 64 масив.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Повертає резервний варіант, якщо значення #N/A, інакше значення."), + ("Returns a fallback when the value is an error, otherwise the value.", "Повертає резервний варіант, якщо значення є помилкою, інакше значення."), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Повертає властивість ключового індикатора ефективності з куба (без з’єднань куба; #N/A).", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "Повертає елемент або кортеж із куба (без з’єднань куба; #N/A)."), + ("Returns a property of a cube member (no cube connections; #N/A).", "Повертає властивість елемента куба (без з’єднань куба; #N/A)."), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "Повертає агреговане значення з куба (без з’єднань куба; #N/A)."), + ("Returns characters from the middle of a text.", "Повертає символи з середини тексту."), + ("Returns information about the operating environment.", "Повертає інформацію про робоче середовище."), + ("Returns one value when a condition is TRUE and another when it is FALSE.", "Повертає одне значення, якщо умова TRUE, а інше – FALSE."), + ("Returns the #N/A error value.", "Повертає значення помилки #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Повертає позицію значення в рядку чи стовпці від 1."), + ("Returns the ISO 8601 week number of a date.", "Повертає ISO 8601 номер тижня дати."), + ("Returns the Unicode code point of the first character of a text.", "Повертає код Unicode першого символу тексту."), + ("Returns the Windows-1252 code of the first character of a text.", "Повертає код Windows-1252 першого символу тексту."), + ("Returns the character for a Unicode code point.", "Повертає символ для кодової точки Unicode."), + ("Returns the character for a code from the Windows-1252 character set.", "Повертає символ для коду з набору символів Windows-1252."), + ("Returns the current date and time.", "Повертає поточну дату й час."), + ("Returns the current date.", "Повертає поточну дату."), + ("Returns the date a number of months before or after a date.", "Повертає дату за кілька місяців до або після дати."), + ("Returns the date a number of working days away with a custom weekend.", "Повертає дату за кілька робочих днів із спеціальними вихідними."), + ("Returns the date a number of working days before or after a date.", "Повертає дату за кілька робочих днів до або після дати."), + ("Returns the day of the month of a date.", "Повертає день місяця дати."), + ("Returns the day of the week of a date as a number.", "Повертає день тижня дати як число."), + ("Returns the distinct rows or columns of an array.", "Повертає унікальні рядки або стовпці масиву."), + ("Returns the element, row or column of an array at the given position.", "Повертає елемент, рядок або стовпець масиву в заданій позиції."), + ("Returns the field value of the single record that meets the criteria.", "Повертає значення поля одного запису, який відповідає критеріям."), + ("Returns the first characters of a text.", "Повертає перші символи тексту."), + ("Returns the fraction of a year between two dates under a day-count basis.", "Повертає частку року між двома датами за рахунком днів."), + ("Returns the hour (0-23) of a time.", "Повертає годину (0-23) часу."), + ("Returns the last characters of a text.", "Повертає останні символи тексту."), + ("Returns the last day of the month a number of months away.", "Повертає останній день місяця через кілька місяців."), + ("Returns the logical value FALSE.", "Повертає логічне значення FALSE."), + ("Returns the logical value TRUE.", "Повертає логічне значення TRUE."), + ("Returns the minute (0-59) of a time.", "Повертає хвилини (0-59) часу."), + ("Returns the month (1-12) of a date.", "Повертає місяць (1-12) дати."), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "Повертає n-й член набору кубів (без з’єднань кубів; #N/A)."), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Повертає число, що визначає значення помилки, або #N/A, якщо це не помилка.", + ), + ("Returns the number of days between two dates.", "Повертає кількість днів між двома датами."), + ("Returns the phonetic (furigana) text; here the text itself.", "Повертає фонетичний текст (фурігана); у цій реалізації — сам текст."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Повертає позицію значення в рядку чи стовпці з гнучким режимом відповідності та пошуку.", + ), + ("Returns the second (0-59) of a time.", "Повертає секунду (0-59) часу."), + ("Returns the text that comes after a delimiter.", "Повертає текст, який стоїть після розділювача."), + ("Returns the text that comes before a delimiter.", "Повертає текст перед роздільником."), + ("Returns the value if it is text, otherwise empty text.", "Повертає значення, якщо це текст, інакше – порожній текст."), + ("Returns the value paired with the first condition that is TRUE.", "Повертає значення в парі з першою умовою TRUE."), + ("Returns the week number of a date within its year.", "Повертає номер тижня дати в межах року."), + ("Returns the year of a date.", "Повертає рік дати."), + ("Reverses a logical value.", "Інвертує логічне значення."), + ("Right-tailed F probability.", "Правостороння ймовірність F."), + ("Right-tailed Student's t probability.", "Правостороння ймовірність t Стьюдента."), + ("Right-tailed chi-squared probability.", "Правостороння ймовірність хі-квадрат."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Округлює число та форматує його як текст із фіксованими десятковими знаками та необов’язковими роздільниками тисяч.", + ), + ("Rounds a number away from zero to a given number of digits.", "Округлює число від нуля до вказаної кількості цифр."), + ("Rounds a number down to a multiple of significance.", "Округлює число вниз до кратного заданої величини."), + ("Rounds a number down to the nearest integer or multiple.", "Округлює число вниз до найближчого цілого або кратного."), + ("Rounds a number down to the nearest integer.", "Округлює число вниз до найближчого цілого."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Округлює число до заданої кількості розрядів; точні половинні значення округлює від нуля.", + ), + ("Rounds a number to the nearest multiple.", "Округлює число до найближчого кратного."), + ("Rounds a number toward negative infinity to a multiple.", "Округлює число до від’ємної нескінченності до кратного."), + ("Rounds a number toward positive infinity to a multiple.", "Округлює число в напрямку додатної нескінченності до кратного."), + ("Rounds a number toward zero to a given number of digits.", "Округлює число до нуля до заданої кількості цифр."), + ("Rounds a number up to a multiple of significance.", "Округлює число вгору до кратного заданої величини."), + ("Rounds a number up to the nearest integer or multiple.", "Округлює число вгору до найближчого цілого або кратного."), + ("Rounds away from zero to the nearest even integer.", "Округлює від нуля до найближчого парного цілого числа."), + ("Rounds away from zero to the nearest odd integer.", "Округлює від нуля до найближчого непарного цілого числа."), + ("Row number of a reference.", "Номер рядка посилання."), + ("Running accumulation of an array.", "Накопичувальні підсумки масиву."), + ("Sample covariance of paired values.", "Вибіркова коваріація парних значень."), + ("Sample skewness.", "Асиметрія вибірки."), + ( + "Sample standard deviation counting text as 0 and logicals as 1/0.", + "Вибіркове стандартне відхилення з урахуванням тексту як 0 і логічних значень як 1/0.", + ), + ("Sample standard deviation of a field over the matching records.", "Вибіркове стандартне відхилення значень поля для відповідних записів."), + ("Sample standard deviation.", "Вибіркове стандартне відхилення."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Вибіркова дисперсія з урахуванням тексту як 0 і логічних значень як 1/0."), + ("Sample variance of a field over the matching records.", "Дисперсія вибірки поля щодо відповідних записів."), + ("Sample variance.", "Дисперсія вибірки."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Шукає в рядку або стовпці та повертає відповідний елемент, рядок або стовпець іншого масиву.", + ), + ("Secant of a complex number.", "Секанс комплексного числа."), + ("Secant of an angle in radians.", "Секанс кута в радіанах."), + ("Sheet number.", "Номер аркуша."), + ("Shifts the bits of a number left (right for negative shifts).", "Зсуває біти числа вліво (вправо для негативних зсувів)."), + ("Shifts the bits of a number right (left for negative shifts).", "Зсуває біти числа вправо (вліво для негативних зсувів)."), + ("Sine of a complex number.", "Синус комплексного числа."), + ("Sine of an angle in radians.", "Синус кута в радіанах."), + ("Slope of the least-squares regression line.", "Нахил лінії регресії за методом найменших квадратів."), + ("Smallest number (0 when there are none).", "Найменше число (0, якщо їх немає)."), + ("Smallest number in a field of the matching records.", "Найменше число в полі відповідних записів."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Найменша кількість успіхів, для якої кумулятивна біноміальна ймовірність досягає альфи.", + ), + ("Smallest value among cells that meet every condition.", "Найменше значення серед клітинок електронної таблиці, які відповідають усім умовам."), + ("Smallest value counting text as 0 and logicals as 1/0.", "Найменше значення, що враховує текст як 0 і логічні значення як 1/0."), + ("Sorts an array by the values of other arrays of matching size.", "Сортує масив за значеннями інших масивів відповідного розміру."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Сортує рядки (або стовпці) масиву за одним або декількома його стовпцями.", + ), + ("Spells out a number in Thai words with Baht.", "Написує число тайськими словами з батом."), + ("Splits text into a grid of columns and rows at the given delimiters.", "Розділяє текст на сітку стовпців і рядків із заданими роздільниками."), + ("Square of the correlation coefficient.", "Квадрат коефіцієнта кореляції."), + ("Square root of a complex number.", "Квадратний корінь із комплексного числа."), + ("Square root of the number times pi.", "Квадратний корінь із числа, помноженого на пі."), + ("Stacks arrays on top of each other.", "Складає масиви один на одного."), + ("Standard error of predicted y values in a regression.", "Стандартна помилка прогнозованих значень y у регресії."), + ("Standard normal cumulative probability.", "Стандартна нормальна кумулятивна ймовірність."), + ("Standard normal density or cumulative probability.", "Стандартна нормальна щільність або кумулятивна ймовірність."), + ("Standard normal density.", "Стандартна нормальна щільність."), + ("Straight-line depreciation for one period.", "Прямолінійна амортизація за один період."), + ("Student's t density or left-tailed probability.", "Щільність t Стьюдента або лівостороння ймовірність."), + ("Sum of a power series.", "Сума степеневого ряду."), + ("Sum of complex numbers.", "Сума комплексних чисел."), + ("Sum of squared deviations from the mean.", "Сума квадратів відхилень від середнього."), + ("Sum-of-years'-digits depreciation for a period.", "Амортизація за період методом суми чисел років."), + ("Sums the differences of squares of matching elements.", "Сумує різниці квадратів відповідних елементів."), + ("Sums the squared differences of matching elements.", "Сумує квадрати різниць відповідних елементів."), + ("Sums the sums of squares of matching elements.", "Сумує суми квадратів відповідних елементів."), + ("Swaps the rows and columns of an array.", "Міняє місцями рядки та стовпці масиву."), + ("TRUE for references.", "TRUE для посилань."), + ("TRUE when a LAMBDA argument was left out.", "TRUE, коли аргумент LAMBDA був пропущений."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE, коли регулярний вираз відповідає десь у тексті."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE, коли непарна кількість аргументів є TRUE."), + ("TRUE when at least one argument is TRUE.", "TRUE, якщо принаймні один аргумент TRUE."), + ("TRUE when every argument is TRUE.", "TRUE, коли кожен аргумент є TRUE."), + ("TRUE when the cell has a formula.", "TRUE, коли комірка містить формулу."), + ("TRUE when the integer part of a number is even.", "TRUE, коли ціла частина числа парна."), + ("TRUE when the integer part of a number is odd.", "TRUE, коли ціла частина числа є непарною."), + ("TRUE when the value is TRUE or FALSE.", "TRUE, коли значення TRUE або FALSE."), + ("TRUE when the value is a number.", "TRUE, коли значення є числом."), + ("TRUE when the value is any error other than #N/A.", "TRUE, коли значення є будь-якою помилкою, крім #N/A."), + ("TRUE when the value is any error.", "TRUE, коли значення є будь-якою помилкою."), + ("TRUE when the value is anything other than text.", "TRUE, якщо значення не є текстом."), + ("TRUE when the value is text.", "TRUE, якщо значенням є текст."), + ("TRUE when the value is the #N/A error.", "TRUE, якщо значенням є помилка #N/A."), + ("TRUE when the value refers to an empty cell.", "TRUE, коли значення стосується порожньої комірки."), + ("TRUE when two texts are identical, including case.", "TRUE, коли два тексти ідентичні, включаючи регістр."), + ("Tangent of a complex number.", "Тангенс комплексного числа."), + ("Tangent of an angle in radians.", "Тангенс кута в радіанах."), + ("The constant pi to 15 digits.", "Константа pi до 15 цифр."), + ("The formula of a cell as text.", "Формула комірки як текст."), + ("The gamma function.", "Гамма-функція."), + ("The k-th largest number in a data set.", "k-е найбільше число в наборі даних."), + ("The k-th smallest number in a data set.", "k-е найменше число в наборі даних."), + ("The reference named by a text string.", "Посилання, назване текстовим рядком."), + ("The sum of a subset as a fraction of the sum of all the values.", "Сума підмножини як частка суми всіх значень."), + ("Total interest paid between two periods.", "Загальна сума відсотків, сплачених між двома періодами."), + ("Total principal repaid between two periods.", "Загальна сума основної суми, погашена між двома періодами."), + ("Two-tailed Student's t probability.", "Двостороння ймовірність t Стьюдента."), + ("Two-tailed inverse of Student's t distribution.", "Двосторонній обернений t-розподіл Стьюдента."), + ("Two-tailed p-value of an F-test for equality of variances.", "Двобічне p-значення F-тесту рівності дисперсій."), + ("Values along a fitted exponential growth curve.", "Значення вздовж підігнаної кривої експоненціального зростання."), + ("Values along a least-squares linear fit.", "Значення вздовж лінійної відповідності методом найменших квадратів."), + ("Vertical array of all the most frequent numbers.", "Вертикальний масив усіх найчастіших чисел."), + ("Weibull density or probability.", "Щільність або ймовірність Вейбулла."), + ("Writes a number in another base, padded with zeros.", "Записує число з іншою основою, доповнене нулями."), + ("Y-intercept of the least-squares regression line.", "Y-перетин лінії регресії методом найменших квадратів."), + ("Yield of a Treasury bill.", "Дохідність казначейського векселя."), + ("Yield of a security paying periodic interest.", "Дохідність цінного паперу з періодичною виплатою відсотків."), + ("Yield of a security with an odd first period.", "Дохідність цінного паперу з нестандартним першим купонним періодом."), + ("Yield of a security with an odd last period.", "Дохідність цінного паперу з нестандартним останнім купонним періодом."), + ("Z-score of a value.", "Z-оцінка значення."), + ("e raised to the given power.", "e піднесено до заданого степеня."), + ("k-th percentile, k from 0 to 1 inclusive.", "k-й процентиль, k від 0 до 1 включно."), + ("k-th percentile, k strictly between 0 and 1.", "k-й процентиль, k строго між 0 і 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "тип_посилання"), + ("actual_range", "фактичний_діапазон"), + ("aggregation", "агрегація"), + ("alpha", "альфа"), + ("angle", "кут"), + ("area_num", "номер_області"), + ("argument", "аргумент"), + ("array", "масив"), + ("array_x", "масив_значень_x"), + ("array_y", "масив_значень_y"), + ("average_range", "діапазон_усереднення"), + ("base", "основа"), + ("basis", "базис_обчислення_днів"), + ("beta", "бета"), + ("bins_array", "масив_меж_інтервалів"), + ("bottom", "нижня_межа"), + ("by_array", "масив_ключів_сортування"), + ("by_col", "за_стовпцями"), + ("calc_method", "спосіб_розрахунку"), + ("calculation", "розрахунок"), + ("caption", "підпис"), + ("case_sensitivity", "чутливість_до_регістру"), + ("coefficients", "коефіцієнти"), + ("col_delimiter", "роздільник_стовпців"), + ("col_fields", "поля_стовпців"), + ("col_index_num", "індекс_стовпця"), + ("col_num", "номер_стовпця"), + ("col_sort_order", "порядок_сортування_стовпців"), + ("col_total_depth", "загальна_глибина_стовпця"), + ("cols", "кількість_стовпців"), + ("column_num", "номер_стовпця"), + ("columns", "кількість_стовпців"), + ("confidence_level", "рівень_достовірності"), + ("connection", "зєднання_даних"), + ("const", "константа"), + ("cost", "початкова_вартість"), + ("coupon", "купонна_ставка"), + ("criteria", "критерії"), + ("criteria_range", "діапазон_критеріїв"), + ("cumulative", "кумулятивний_розподіл"), + ("data_all", "всі_дані"), + ("data_array", "масив_даних"), + ("data_completion", "заповнення_пропущених_даних"), + ("data_subset", "підмножина_даних"), + ("database", "база_даних"), + ("date", "дата"), + ("date_purchased", "дата_покупки"), + ("date_text", "дата_як_текст"), + ("dates", "дати"), + ("day", "день"), + ("days", "днів"), + ("decimal_dollar", "десяткова_ціна"), + ("decimal_separator", "десятковий_роздільник"), + ("decimals", "знаки_після_коми"), + ("default_or_value", "за_замовчуванням_або_значення"), + ("deg_freedom", "ступені_свободи"), + ("delimiter", "роздільник"), + ("denominator", "знаменник"), + ("dimension", "розмір"), + ("discount", "ставка_дисконту"), + ("divisor", "дільник"), + ("effect_rate", "ефективна_ставка"), + ("end_date", "кінцева_дата"), + ("end_period", "останній_період"), + ("error_val", "значення_помилки"), + ("exactly_once", "рівно_один_раз"), + ("expected_range", "очікуваний_діапазон"), + ("expression", "вираз"), + ("factor", "коефіцієнт"), + ("field", "поле_бази_даних"), + ("field_headers", "заголовки_полів"), + ("field_relationship", "звязок_між_полями"), + ("filter_array", "масив_фільтрів"), + ("finance_rate", "процентна_ставка_фінансування"), + ("find_text", "знайти_текст"), + ("first_coupon", "Дата_виплати_першого_купону"), + ("first_interest", "дата_першої_сплати_відсотків"), + ("first_period", "дата_кінця_першого_періоду"), + ("form", "форма"), + ("format", "формат"), + ("format_text", "текст_у_форматі"), + ("fraction", "частка"), + ("fractional_dollar", "дробова_ціна"), + ("frequency", "частота_виплати_купона"), + ("friendly_name", "дружнє_імя"), + ("from_unit", "одиниця_вимірювання_джерела"), + ("full_precision", "повна_точність"), + ("function", "функція"), + ("function_num", "номер_функції"), + ("fv", "майбутня_вартість"), + ("group_separator", "роздільник_груп"), + ("guess", "початкове_наближення"), + ("height", "висота"), + ("holidays", "свята"), + ("hour", "година"), + ("i_num", "уявний_коефіцієнт"), + ("if_empty", "якщо_порожній"), + ("if_not_found", "якщо_не_знайдено"), + ("ignore", "ігнорувати"), + ("ignore_empty", "ігнорувати_пусто"), + ("include", "включити"), + ("index_num", "індексний_номер"), + ("info_type", "тип_інформації"), + ("initial_value", "початкове_значення"), + ("instance_num", "номер_входження"), + ("inumber", "комплексне_число"), + ("investment", "інвестиції"), + ("issue", "дата_випуску"), + ("k", "k"), + ("known_xs", "відомі_значення_x"), + ("known_ys", "відомі_значення_y"), + ("kpi_name", "назва_ключового_показника_ефективності"), + ("kpi_property", "властивість_ключового_показника_ефективності"), + ("lambda", "лямбда"), + ("last_interest", "дата_останньої_виплати_відсотків"), + ("life", "строк_корисного_використання"), + ("link_location", "розташування_посилання"), + ("logical", "логічне_значення"), + ("logical_test", "логічна_умова"), + ("lookup_array", "масив_пошуку"), + ("lookup_value", "шукане_значення"), + ("lookup_vector", "пошуковий_вектор"), + ("lower_limit", "нижня_межа"), + ("m", "m"), + ("match_end", "кінець_тексту_як_роздільник"), + ("match_mode", "режим_зіставлення"), + ("match_type", "метод_відповідності"), + ("maturity", "термін_погашення"), + ("max", "максимум"), + ("max_range", "діапазон_для_максимуму"), + ("mean", "середнє_арифметичне"), + ("member_expression", "вираз_член_куба"), + ("method", "спосіб"), + ("min", "мінімум"), + ("min_length", "мін_довжина"), + ("min_range", "діапазон_для_мінімуму"), + ("minute", "хвилина"), + ("mode", "режим_розрахунку"), + ("month", "місяць"), + ("months", "місяців"), + ("multiple", "кратне"), + ("n", "n"), + ("name", "імя"), + ("new_text", "новий_текст"), + ("new_xs", "нові_значення_x"), + ("no_commas", "опускати_роздільники_груп_цифр"), + ("no_switch", "не_змінювати_метод_амортизації"), + ("nominal_rate", "номінальна_ставка"), + ("nper", "кількість_періодів"), + ("npery", "періодів_на_рік"), + ("num_bytes", "кількість_байтів"), + ("num_chars", "кількість_символів"), + ("num_digits", "кількість_цифр"), + ("number", "число"), + ("number_chosen", "кількість_вибраних_елементів"), + ("number_f", "кількість_невдач"), + ("number_pop", "розмір_генеральної_сукупності"), + ("number_s", "кількість_успіхів"), + ("number_sample", "розмір_вибірки"), + ("number_times", "кількість_повторів"), + ("numerator", "чисельник"), + ("occurrence", "номер_входження"), + ("old_text", "старий_текст"), + ("options", "параметри"), + ("order", "порядок"), + ("pad_with", "значення_заповнення"), + ("par", "номінал"), + ("parameter", "параметр"), + ("pattern", "шаблон_регулярного_виразу"), + ("per", "період"), + ("percent", "відсотків"), + ("period", "період"), + ("places", "кількість_вихідних_цифр"), + ("pmt", "оплата"), + ("population_s", "кількість_успіхів_у_сукупності"), + ("power", "степінь"), + ("pr", "ціна"), + ("principal", "основна_сума"), + ("prob_range", "діапазон_ймовірностей"), + ("probability", "ймовірність"), + ("probability_s", "ймовірність_успіху"), + ("property", "назва_властивості"), + ("pv", "поточна_вартість"), + ("quart", "номер_квартиля"), + ("radix", "основа_системи_числення"), + ("range", "діапазон"), + ("range_lookup", "пошук_діапазону"), + ("rank", "ранг"), + ("rate", "ставка"), + ("real_num", "дійсний_коефіцієнт"), + ("redemption", "викуп"), + ("ref", "посилання"), + ("ref_text", "посилальний_текст"), + ("reference", "посилання"), + ("reinvest_rate", "процентна_ставка_реінвестування"), + ("relative_to", "відносно"), + ("replacement", "заміна"), + ("result", "результат"), + ("result_vector", "вектор_результату"), + ("return_array", "масив_результатів"), + ("return_mode", "режим_повернення"), + ("return_type", "тип_повернення"), + ("row_delimiter", "роздільник_рядків"), + ("row_fields", "поля_рядків"), + ("row_index_num", "індекс_рядка"), + ("row_num", "номер_рядка"), + ("row_sort_order", "порядок_сортування_рядків"), + ("row_total_depth", "загальна_глибина_рядка"), + ("rows", "кількість_рядків"), + ("salvage", "залишкова_вартість"), + ("sample_s", "кількість_успіхів_у_вибірці"), + ("scan_by_column", "сканування_за_колонками"), + ("schedule", "графік"), + ("search_mode", "режим_пошуку"), + ("seasonality", "сезонність"), + ("second", "секунда"), + ("serial_number", "серійний_номер"), + ("set", "набір_елементів_куба"), + ("set_expression", "вираз_набору_елементів_куба"), + ("settlement", "дата_розрахунку"), + ("sheet_text", "текст_аркуша"), + ("shift_amount", "величина_зсуву"), + ("sigma", "сигма"), + ("significance", "кратність_або_точність"), + ("size", "розмір"), + ("sort_by", "сортувати_за"), + ("sort_index", "індекс_сортування"), + ("sort_order", "порядок_сортування"), + ("source", "джерело"), + ("standard_dev", "стандартне_відхилення"), + ("start", "початкове_значення"), + ("start_date", "дата_початку"), + ("start_num", "вихідне_положення"), + ("start_period", "початковий_період"), + ("statistic_type", "тип_статистики"), + ("stats", "статистика"), + ("step", "крок"), + ("suffix", "суфікс"), + ("sum_range", "діапазон_суми"), + ("table_array", "табличний_масив"), + ("tails", "кількість_хвостів_розподілу"), + ("target", "ціль"), + ("target_date", "прогнозована_дата"), + ("text", "текст"), + ("time_text", "час_написаний_як_текст"), + ("timeline", "хронологія"), + ("to_unit", "одиниця_вимірювання_цілі"), + ("top", "верхня_межа"), + ("total_depth", "загальна_глибина"), + ("trials", "випробування"), + ("triangulation_precision", "точність_тріангуляції"), + ("trim_cols", "режим_обрізки_стовпців"), + ("trim_rows", "режим_обрізки_рядків"), + ("type", "тип"), + ("type_text", "назва_типу_даних"), + ("unit", "одиниця_вимірювання"), + ("upper_limit", "верхня_межа"), + ("url", "url"), + ("value", "значення"), + ("value_if_error", "результат_у_разі_помилки"), + ("value_if_false", "результат_коли_умова_хибна"), + ("value_if_na", "результат_для_помилки_недоступності"), + ("value_if_true", "результат_коли_умова_виконується"), + ("values", "вхідні_значення"), + ("vector", "вектор"), + ("weekend", "вихідні"), + ("whole_number", "ціле_число"), + ("width", "ширина"), + ("within_text", "текст_для_пошуку"), + ("wrap_count", "кількість_значень_на_рядок_або_стовпець"), + ("x", "x"), + ("x_num", "координата_x"), + ("x_range", "діапазон_x"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "координата_y"), + ("year", "рік"), + ("yld", "прибутковість_інвестицій"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/vi.rs b/crates/ui-egui/src/i18n/vi.rs index 260f9572df..fda1036078 100644 --- a/crates/ui-egui/src/i18n/vi.rs +++ b/crates/ui-egui/src/i18n/vi.rs @@ -4,6 +4,8 @@ /// Returns the Vietnamese translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Series{n}" => "Chuỗi {n}", + "Page {page}" => "Trang {page}", "Diagram" => "Sơ đồ", "Decorative Text" => "Chữ trang trí", "Paste" => "Dán", @@ -446,6 +448,38 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "Dừng", "New Macro" => "Macro Mới", "Show" => "Hiện", + "Generated|Column" => "Cột", + "Generated|Row" => "Hàng", + "Book" => "Sổ", + "Sheet" => "Trang", + "Count Numbers" => "Đếm số", + "Type to filter…" => "Nhập để lọc…", + "Nothing to paste." => "Không có dữ liệu để dán.", + "No cells were found." => "Không tìm thấy ô nào.", + "Or select a category:" => "Hoặc chọn danh mục:", + "Most Recently Used" => "Đã dùng gần đây", + "Insert Function…" => "Chèn hàm…", + "Paste Names…" => "Dán tên…", + "Macro name:" => "Tên macro:", + "Shortcut key:" => "Phím tắt:", + "Description:" => "Mô tả:", + "This workbook has no scripts or macros." => "Sổ làm việc này không có tập lệnh hoặc macro.", + "Check for Updates…" => "Kiểm tra bản cập nhật…", + "Checking for updates…" => "Đang kiểm tra bản cập nhật…", + "Could not check for updates." => "Không thể kiểm tra bản cập nhật.", + "Check Again" => "Kiểm tra lại", + "Insert Function" => "Chèn hàm", + "Search:" => "Tìm kiếm:", + "e.g. lookup, average, date" => "ví dụ: tra cứu, trung bình, ngày", + "Cancel" => "Hủy", + "All" => "Tất cả", + "Statistical" => "Thống kê", + "Database" => "Cơ sở dữ liệu", + "Information" => "Thông tin", + "Engineering" => "Kỹ thuật", + "Cube" => "Khối", + "Compatibility" => "Tương thích", + "Add-in and Automation" => "Phần bổ trợ và Tự động hóa", "Collapse dialog" => "Thu gọn hộp thoại", "Expand dialog" => "Mở rộng hộp thoại", _ => return None, diff --git a/crates/ui-egui/src/i18n/vi_functions.rs b/crates/ui-egui/src/i18n/vi_functions.rs new file mode 100644 index 0000000000..15b995d664 --- /dev/null +++ b/crates/ui-egui/src/i18n/vi_functions.rs @@ -0,0 +1,933 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 là dương, -1 là âm và 0 là 0."), + ("A random integer between two bounds, inclusive.", "Một số nguyên ngẫu nhiên giữa hai giới hạn, bao gồm cả hai giới hạn."), + ("A random number between 0 and 1, recalculated every time.", "Một số ngẫu nhiên trong khoảng từ 0 đến 1, được tính lại mỗi lần."), + ("A range or array without its blank outer rows and columns.", "Một dải ô hoặc mảng không có hàng và cột trống bên ngoài."), + ("A reference shifted from a starting point.", "Một tham chiếu đã được chuyển từ điểm bắt đầu."), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "Thống kê của mô hình FORECAST.ETS: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 độ lớn bước.", + ), + ("A subtotal that can skip hidden rows.", "Một tổng phụ có thể bỏ qua các hàng bị ẩn."), + ("Absolute value (modulus) of a complex number.", "Giá trị tuyệt đối (mô đun) của số phức."), + ("Absolute value of a number.", "Giá trị tuyệt đối của một số."), + ("Accrued interest of a security paying interest at maturity.", "Lãi dồn tích của chứng khoán trả lãi khi đáo hạn."), + ("Accrued interest of a security paying periodic interest.", "Lãi dồn tích của chứng khoán trả lãi định kỳ."), + ("Accumulates an array into one value.", "Tích lũy một mảng thành một giá trị."), + ("Adds all the numbers in the arguments.", "Cộng tất cả các số trong các đối số."), + ("Adds the cells that meet a condition.", "Trả về tổng các giá trị số trong các ô của bảng tính thỏa mãn một điều kiện."), + ("Adds the cells that meet every condition.", "Trả về tổng giá trị số trong các ô bảng tính thỏa mãn mọi điều kiện."), + ( + "Adds the numbers in a field of the records that meet the criteria.", + "Trả về tổng giá trị số trong trường cơ sở dữ liệu cho các bản ghi thỏa mãn tiêu chí.", + ), + ("Adds the squares of the numbers.", "Trả về tổng của các số bình phương."), + ("Amount received at maturity for a fully invested security.", "Số tiền nhận được khi đáo hạn đối với một chứng khoán được thanh toán đầy đủ."), + ("An aggregate that can skip hidden rows and errors.", "Giá trị tổng hợp có thể bỏ qua các hàng bị ẩn và các lỗi."), + ("Angle of a complex number in radians.", "Góc của số phức tính bằng radian."), + ("Angle of the point (x, y) from the x-axis in radians.", "Góc của điểm (x, y) so với trục x tính bằng radian."), + ("Annual yield of a discounted security.", "Lợi suất hàng năm của chứng khoán chiết khấu."), + ("Annual yield of a security paying interest at maturity.", "Lợi suất hàng năm của chứng khoán trả lãi khi đáo hạn."), + ("Applies a LAMBDA to each column.", "Áp dụng LAMBDA cho mỗi cột."), + ("Applies a LAMBDA to each row.", "Áp dụng LAMBDA cho mỗi hàng."), + ("Applies a LAMBDA to each value.", "Áp dụng LAMBDA cho mỗi giá trị."), + ( + "Approximate lookup in a sorted vector or the first row/column of an array.", + "Tra cứu gần đúng trong một vectơ được sắp xếp hoặc hàng/cột đầu tiên của một mảng.", + ), + ("Arccosine in radians.", "Arccosine tính bằng radian."), + ("Arccotangent in radians (0 to pi).", "Arccotang tính bằng radian (0 đến pi)."), + ("Arcsine in radians.", "Arcsine tính bằng radian."), + ("Arctangent in radians.", "Arctangent tính bằng radian."), + ("Arithmetic mean of the numbers.", "Trung bình số học của các số."), + ("Average absolute deviation from the mean.", "Độ lệch tuyệt đối trung bình so với giá trị trung bình."), + ("Average of the cells that meet a condition.", "Trung bình của các ô bảng tính đáp ứng một điều kiện."), + ("Average of the cells that meet every condition.", "Trung bình của các ô bảng tính đáp ứng mọi điều kiện."), + ( + "Averages the numbers in a field of the records that meet the criteria.", + "Tính trung bình các số trong một trường của bản ghi đáp ứng tiêu chí.", + ), + ("Base-10 logarithm of a complex number.", "Logarit cơ số 10 của một số phức."), + ("Base-10 logarithm.", "Logarit cơ số 10."), + ("Base-2 logarithm of a complex number.", "Logarit cơ số 2 của một số phức."), + ("Bessel function of the first kind, J_n(x).", "Hàm Bessel loại thứ nhất, J_n(x)."), + ("Bessel function of the second kind, Y_n(x).", "Hàm Bessel loại thứ hai, Y_n(x)."), + ("Beta distribution density or probability.", "Mật độ hoặc xác suất phân phối Beta."), + ("Binomial probability.", "Xác suất nhị thức."), + ("Bitwise AND of two non-negative integers.", "Bitwise AND của hai số nguyên không âm."), + ("Bitwise OR of two non-negative integers.", "Bitwise OR của hai số nguyên không âm."), + ("Bitwise exclusive OR of two non-negative integers.", "Phép OR loại trừ theo bit của hai số nguyên không âm."), + ("Bond-equivalent yield of a Treasury bill.", "Lợi tức tương đương trái phiếu của tín phiếu Kho bạc."), + ("Breaks a row or column into columns of the given length.", "Chia một hàng hoặc cột thành các cột có độ dài cho trước."), + ("Breaks a row or column into rows of the given length.", "Chia một hàng hoặc cột thành các hàng có độ dài cho trước."), + ("Builds a cell address as text from row and column numbers.", "Tạo địa chỉ ô dưới dạng văn bản từ số hàng và số cột."), + ("Builds a complex number as text from real and imaginary parts.", "Xây dựng số phức dưới dạng văn bản từ phần thực và phần ảo."), + ("Builds a date serial number from a year, month and day.", "Xây dựng số sê-ri ngày từ năm, tháng và ngày."), + ("Builds a summary table grouping values by row and column fields.", "Xây dựng bảng tóm tắt nhóm các giá trị theo trường hàng và cột."), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "Xây dựng thời gian (một phần của ngày) từ giờ, phút và giây."), + ("Builds an array from a LAMBDA.", "Xây dựng một mảng từ LAMBDA."), + ("Builds an array of evenly stepped numbers.", "Tạo một mảng các số cách đều nhau."), + ("Builds an array of random numbers in a range.", "Xây dựng một mảng các số ngẫu nhiên trong một phạm vi."), + ("Byte version of FIND.", "Phiên bản byte của FIND."), + ("Byte version of LEFT (same as LEFT for single-byte text).", "Phiên bản byte của LEFT (giống như LEFT cho văn bản một byte)."), + ("Byte version of LEN (same as LEN for single-byte text).", "Phiên bản byte của LEN (giống như LEN cho văn bản một byte)."), + ("Byte version of MID (same as MID for single-byte text).", "Phiên bản byte của MID (giống như MID đối với văn bản một byte)."), + ("Byte version of REPLACE.", "Phiên bản byte của REPLACE."), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "Phiên bản byte của RIGHT (giống như RIGHT cho văn bản một byte)."), + ("Byte version of SEARCH.", "Phiên bản byte của SEARCH."), + ("Capitalises the first letter of each word and lower-cases the rest.", "Viết hoa chữ cái đầu tiên của mỗi từ và viết thường các chữ còn lại."), + ("Chi-squared density or left-tailed probability.", "Mật độ chi bình phương hoặc xác suất bên trái."), + ("Chi-squared test of independence.", "Kiểm tra tính độc lập Chi bình phương."), + ("Column number of a reference.", "Số cột của một tham chiếu."), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "So sánh một biểu thức với một danh sách các giá trị và trả về kết quả được ghép nối với kết quả khớp đầu tiên.", + ), + ("Complementary error function, 1 - ERF(x).", "Hàm sai số bù, 1 - ERF(x)."), + ("Complex conjugate of a complex number.", "Số phức liên hợp của một số phức."), + ("Confidence interval half-width using Student's t distribution.", "Nửa độ rộng khoảng tin cậy sử dụng phân phối t Student."), + ("Confidence interval half-width using the normal distribution.", "Khoảng tin cậy nửa độ rộng sử dụng phân phối chuẩn."), + ("Converts Roman numerals to a number.", "Chuyển đổi số La Mã thành số."), + ("Converts a binary number to decimal.", "Chuyển đổi số nhị phân thành số thập phân."), + ("Converts a binary number to hexadecimal.", "Chuyển đổi số nhị phân thành số thập lục phân."), + ("Converts a binary number to octal.", "Chuyển đổi số nhị phân thành số bát phân."), + ("Converts a date written as text into a date serial number.", "Chuyển đổi ngày được viết dưới dạng văn bản thành số sê-ri ngày."), + ("Converts a decimal number to binary.", "Chuyển đổi số thập phân thành nhị phân."), + ("Converts a decimal number to hexadecimal.", "Chuyển đổi số thập phân thành thập lục phân."), + ("Converts a decimal number to octal.", "Chuyển đổi số thập phân thành số bát phân."), + ("Converts a decimal price to fractional notation.", "Chuyển đổi giá thập phân thành ký hiệu phân số."), + ("Converts a fractional price notation to a decimal number.", "Chuyển đổi ký hiệu giá phân số thành số thập phân."), + ("Converts a hexadecimal number to binary.", "Chuyển đổi số thập lục phân thành nhị phân."), + ("Converts a hexadecimal number to decimal.", "Chuyển đổi số thập lục phân thành số thập phân."), + ("Converts a hexadecimal number to octal.", "Chuyển đổi số thập lục phân thành bát phân."), + ("Converts a measurement from one unit to another.", "Chuyển đổi số đo từ đơn vị này sang đơn vị khác."), + ("Converts a number to Roman numerals in one of five styles.", "Chuyển đổi một số thành chữ số La Mã theo một trong năm kiểu."), + ("Converts a time written as text into a fraction of a day.", "Chuyển đổi thời gian được viết dưới dạng văn bản thành một phần của ngày."), + ( + "Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", + "Chuyển đổi một giá trị thành số: số vẫn giữ nguyên, TRUE là 1, mọi thứ khác đều bằng 0.", + ), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "Chuyển đổi một mảng thành văn bản, dưới dạng danh sách dấu phẩy hoặc dưới dạng hằng số mảng nghiêm ngặt.", + ), + ("Converts an octal number to binary.", "Chuyển đổi số bát phân thành nhị phân."), + ("Converts an octal number to decimal.", "Chuyển đổi số bát phân thành số thập phân."), + ("Converts an octal number to hexadecimal.", "Chuyển đổi số bát phân thành số thập lục phân."), + ( + "Converts any value to text, optionally in strict (quoted) form.", + "Chuyển đổi bất kỳ giá trị nào thành văn bản, tùy chọn ở dạng nghiêm ngặt (trích dẫn).", + ), + ( + "Converts between the euro and the former euro member currencies at the fixed rates.", + "Chuyển đổi giữa đồng euro và các đồng tiền cũ của các nước thành viên khu vực euro theo tỷ giá cố định.", + ), + ("Converts degrees to radians.", "Chuyển đổi độ sang radian."), + ( + "Converts full-width characters to half-width (no change for single-byte text).", + "Chuyển đổi các ký tự có độ rộng đầy đủ thành một nửa độ rộng (không thay đổi đối với văn bản một byte).", + ), + ( + "Converts half-width characters to full-width (no change in this locale).", + "Chuyển đổi các ký tự nửa độ rộng thành toàn bộ chiều rộng (không thay đổi trong ngôn ngữ này).", + ), + ("Converts radians to degrees.", "Chuyển đổi radian sang độ."), + ("Converts text that looks like a number, date or time into a number.", "Chuyển đổi văn bản trông giống số, ngày hoặc giờ thành số."), + ( + "Converts text to a number using the given decimal and group separators.", + "Chuyển đổi văn bản thành số bằng cách sử dụng dấu phân cách thập phân và nhóm đã cho.", + ), + ("Converts text to lower case.", "Chuyển đổi văn bản thành chữ thường."), + ("Converts text to upper case.", "Chuyển đổi văn bản thành chữ hoa."), + ("Correlation coefficient of two data sets.", "Hệ số tương quan của hai bộ dữ liệu."), + ("Cosecant of a complex number.", "Cosec của một số phức."), + ("Cosecant of an angle in radians.", "Cosec của một góc tính bằng radian."), + ("Cosine of a complex number.", "Cosine của một số phức."), + ("Cosine of an angle in radians.", "Cosine của một góc tính bằng radian."), + ("Cotangent of a complex number.", "Cotang của một số phức."), + ("Cotangent of an angle in radians.", "Cotang của một góc tính bằng radian."), + ( + "Counts days between two dates on a 360-day year (US or European method).", + "Đếm số ngày giữa hai ngày trong một năm 360 ngày (US hoặc phương pháp Châu Âu).", + ), + ("Counts empty cells and empty text in a range.", "Đếm các ô bảng tính trống và văn bản trống trong một phạm vi."), + ("Counts how many values fall into each bin, as a vertical array.", "Đếm số giá trị thuộc từng nhóm, trả về dưới dạng mảng dọc."), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "Đếm các ô bảng tính không trống trong trường có bản ghi trùng khớp (hoặc bản ghi trùng khớp).", + ), + ( + "Counts numeric cells in a field of the matching records (or the matching records).", + "Đếm các ô bảng tính số trong một trường của các bản ghi trùng khớp (hoặc các bản ghi trùng khớp).", + ), + ("Counts the cells that meet a condition.", "Đếm các ô trong bảng tính đáp ứng một điều kiện."), + ("Counts the cells that meet every condition.", "Đếm các ô trong bảng tính đáp ứng mọi điều kiện."), + ("Counts the characters in a text.", "Đếm các ký tự trong văn bản."), + ("Counts the columns in an array or range.", "Đếm các cột trong một mảng hoặc dải ô."), + ("Counts the items in a cube set (no cube connections; #N/A).", "Đếm các mục trong một bộ khối (không có kết nối khối; #N/A)."), + ("Counts the non-empty values.", "Đếm các giá trị không trống."), + ("Counts the numbers.", "Đếm số."), + ("Counts the rows in an array or range.", "Đếm các hàng trong một mảng hoặc dải ô."), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "Đếm cả năm, tháng hoặc ngày giữa hai ngày. đơn vị: Y, M, D, MD, YM hoặc YD.", + ), + ( + "Counts working days (Monday to Friday) between two dates, excluding holidays.", + "Đếm số ngày làm việc (Thứ Hai đến Thứ Sáu) giữa hai ngày, không bao gồm ngày lễ.", + ), + ( + "Counts working days between two dates with a custom weekend, excluding holidays.", + "Đếm số ngày làm việc giữa hai ngày với ngày cuối tuần tùy chỉnh, không bao gồm ngày lễ.", + ), + ("Creates a link; the cell shows the friendly name, or the link itself.", "Tạo một liên kết; ô hiển thị tên thân thiện hoặc chính liên kết đó."), + ("Creates a reusable custom function.", "Tạo một hàm tùy chỉnh có thể tái sử dụng."), + ("Cumulative beta probability.", "Xác suất beta tích lũy."), + ("Cumulative lognormal probability.", "Xác suất tích lũy của phân phối logarit chuẩn."), + ("Cuts off the fractional part of a number at the given digits.", "Cắt bỏ phần phân số của một số ở các chữ số đã cho."), + ("Days from settlement to the next coupon date.", "Số ngày kể từ ngày thanh toán đến ngày thanh toán lãi tiếp theo."), + ("Days from the start of the coupon period to settlement.", "Số ngày kể từ khi bắt đầu kỳ trả lãi đến khi thanh toán."), + ("Days in the coupon period that contains settlement.", "Số ngày trong kỳ thanh toán lãi có chứa quyết toán."), + ( + "Declining-balance depreciation over any span of periods, switching to straight line.", + "Khấu hao theo số dư giảm dần trong bất kỳ khoảng thời gian nào, chuyển sang đường thẳng.", + ), + ("Defines a set of cube members (no cube connections; #N/A).", "Xác định một tập hợp các thành viên khối (không có kết nối khối; #N/A)."), + ("Determinant of a square matrix.", "Định thức của ma trận vuông."), + ("Difference of two complex numbers.", "Hiệu của hai số phức."), + ("Discount rate of a security.", "Lãi suất chiết khấu của chứng khoán."), + ("Double factorial of a number.", "Giai thừa kép của một số."), + ( + "Double-declining-balance (or other factor) depreciation for a period.", + "Khấu hao số dư giảm dần kép (hoặc yếu tố khác) trong một khoảng thời gian.", + ), + ("Effective annual rate from a nominal rate and compounding periods.", "Lãi suất hiệu dụng hàng năm từ lãi suất danh nghĩa và số kỳ ghép lãi."), + ("Equivalent interest rate for the growth of an investment.", "Lãi suất tương đương cho sự tăng trưởng của một khoản đầu tư."), + ( + "Error function integrated from 0 to a limit, or between two limits.", + "Hàm sai số được lấy tích phân từ 0 đến một giới hạn hoặc giữa hai giới hạn.", + ), + ("Error function integrated from 0 to x.", "Hàm sai số được lấy tích phân từ 0 đến x."), + ("Excess kurtosis of a sample.", "Độ nhọn quá mức của mẫu."), + ("Exponential curve coefficients and optional regression statistics.", "Hệ số đường cong hàm mũ và thống kê hồi quy tùy chọn."), + ("Exponential distribution density or probability.", "Mật độ hoặc xác suất của phân phối mũ."), + ("Exponential of a complex number.", "Hàm mũ của một số phức."), + ( + "Extracts data from XML with an XPath (not available; returns #VALUE!).", + "Trích xuất dữ liệu từ XML bằng XPath (không có sẵn; trả về #VALUE!).", + ), + ( + "Extracts the first match, all matches or the capture groups of a regular expression.", + "Trích xuất kết quả khớp đầu tiên, tất cả các kết quả khớp hoặc nhóm chụp của một biểu thức chính quy.", + ), + ("F distribution density or left-tailed probability.", "Mật độ phân bố F hoặc xác suất bên trái."), + ("Factorial of a number.", "Giai thừa của một số."), + ("Fetches data from a web service (not available; returns #VALUE!).", "Tìm nạp dữ liệu từ một dịch vụ web (không khả dụng; trả về #VALUE!)."), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "Tìm một giá trị trong cột đầu tiên của bảng và trả về giá trị trong cùng hàng của cột khác.", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "Tìm một giá trị ở hàng đầu tiên của bảng và trả về giá trị trong cùng cột của một hàng khác.", + ), + ("Finds the position of one text in another (case-sensitive).", "Tìm vị trí của văn bản này trong văn bản khác (phân biệt chữ hoa chữ thường)."), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "Tìm vị trí của văn bản này trong văn bản khác, bỏ qua chữ hoa chữ thường và cho phép ký tự đại diện.", + ), + ("Fisher transformation.", "Phép biến đổi Fisher."), + ("Fixed-declining-balance depreciation for a period.", "Khấu hao cố định theo số dư giảm dần trong một kỳ."), + ( + "Flattens an array into a single column, optionally skipping blanks or errors.", + "Làm phẳng một mảng thành một cột duy nhất, tùy ý bỏ qua các khoảng trống hoặc lỗi.", + ), + ( + "Flattens an array into a single row, optionally skipping blanks or errors.", + "Làm phẳng một mảng thành một hàng, tùy ý bỏ qua các khoảng trống hoặc lỗi.", + ), + ("Forecasts a value by additive (AAA) exponential smoothing.", "Dự báo giá trị bằng cách làm mịn hàm mũ phụ gia (AAA)."), + ("Formats a number as currency text, like DOLLAR.", "Định dạng một số dưới dạng văn bản tiền tệ, như DOLLAR."), + ("Formats a number as currency text.", "Định dạng một số dưới dạng văn bản tiền tệ."), + ("Formats a number as text.", "Định dạng một số dưới dạng văn bản."), + ( + "French degressive depreciation with a life-based coefficient.", + "Khấu hao giảm dần theo phương pháp Pháp với hệ số dựa trên thời gian sử dụng hữu ích.", + ), + ("French linear depreciation prorated for the first period.", "Khấu hao tuyến tính của Pháp được tính theo tỷ lệ cho kỳ đầu tiên."), + ("Future value of a principal after a series of compound rates.", "Giá trị tương lai của tiền gốc sau một loạt lãi suất gộp."), + ( + "Future value of an investment with constant payments and rate.", + "Giá trị tương lai của khoản đầu tư với mức thanh toán và lãi suất không đổi.", + ), + ("Gamma distribution density or probability.", "Mật độ hoặc xác suất phân bố Gamma."), + ("Geometric mean of positive numbers.", "Giá trị trung bình hình học của số dương."), + ("Greatest common divisor of integers.", "Ước chung lớn nhất của số nguyên."), + ("Groups rows by key fields and aggregates the values of each group.", "Nhóm các hàng theo trường chính và tổng hợp các giá trị của từng nhóm."), + ( + "Grows an array to the given size, filling new cells with a pad value.", + "Phát triển một mảng theo kích thước nhất định, điền vào các ô bảng tính mới bằng một giá trị pad.", + ), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "Một nửa độ rộng của khoảng tin cậy xung quanh giá trị FORECAST.ETS."), + ("Harmonic mean of positive numbers.", "Trung bình điều hòa của các số dương."), + ("Hyperbolic cosecant of a complex number.", "cosec hyperbol của một số phức."), + ("Hyperbolic cosecant.", "cosec hyperbol."), + ("Hyperbolic cosine of a complex number.", "Cosin hyperbol của một số phức."), + ("Hyperbolic cosine.", "cosin hyperbol."), + ("Hyperbolic cotangent.", "cotang hyperbol."), + ("Hyperbolic secant of a complex number.", "Sec hyperbol của một số phức."), + ("Hyperbolic secant.", "Sec hyperbol."), + ("Hyperbolic sine of a complex number.", "Sin hyperbol của một số phức."), + ("Hyperbolic sine.", "Sin hyperbol."), + ("Hyperbolic tangent.", "Tang hyperbol."), + ("Hypergeometric probability of an exact count.", "Xác suất siêu bội của một số đếm chính xác."), + ("Hypergeometric probability.", "Xác suất siêu bội."), + ("Identity matrix of the given size.", "Ma trận đơn vị có kích thước cho trước."), + ("Imaginary coefficient of a complex number.", "Hệ số ảo của số phức."), + ("Information about a cell.", "Thông tin về một ô."), + ("Integer part of a division.", "Phần nguyên của phép chia."), + ("Interest paid in a period of a loan with even principal payments.", "Tiền lãi trả trong kỳ vay, gốc trả đều."), + ("Interest part of a given period's payment.", "Phần tiền lãi trong khoản thanh toán của một kỳ nhất định."), + ("Interest rate of a fully invested security.", "Lãi suất chứng khoán được thanh toán đầy đủ."), + ("Interest rate per period of an annuity, found iteratively.", "Lãi suất mỗi kỳ của một niên kim, được tìm thấy lặp đi lặp lại."), + ("Internal rate of return of cash flows on specific dates.", "Tỷ suất hoàn vốn nội bộ của dòng tiền vào những ngày cụ thể."), + ("Internal rate of return of periodic cash flows.", "Tỷ suất hoàn vốn nội bộ của dòng tiền định kỳ."), + ("Inverse hyperbolic cosine.", "cosin hyperbol nghịch đảo."), + ("Inverse hyperbolic cotangent.", "cotang hyperbol nghịch đảo."), + ("Inverse hyperbolic sine.", "Sin hyperbol nghịch đảo."), + ("Inverse hyperbolic tangent.", "Tang hyperbol nghịch đảo."), + ("Inverse of a square matrix.", "Nghịch đảo của ma trận vuông."), + ("Inverse of the Fisher transformation.", "Nghịch đảo của phép biến đổi Fisher."), + ("Inverse of the cumulative beta distribution.", "Nghịch đảo của phân phối beta tích lũy."), + ("Inverse of the cumulative lognormal distribution.", "Nghịch đảo của phân phối logarit chuẩn tích lũy."), + ("Inverse of the gamma cumulative distribution.", "Nghịch đảo của phân phối tích lũy gamma."), + ("Inverse of the left-tailed F distribution.", "Nghịch đảo của phân phối F bên trái."), + ("Inverse of the left-tailed chi-squared distribution.", "Nghịch đảo của phân phối chi bình phương bên trái."), + ("Inverse of the normal cumulative distribution.", "Nghịch đảo của phân phối tích lũy chuẩn."), + ("Inverse of the right-tailed F distribution.", "Nghịch đảo của phân phối F bên phải."), + ("Inverse of the right-tailed chi-squared distribution.", "Nghịch đảo của phân phối chi bình phương bên phải."), + ("Inverse of the standard normal cumulative distribution.", "Nghịch đảo của phân phối chuẩn tắc tích lũy."), + ("Joins several text values into one.", "Nối nhiều giá trị văn bản thành một."), + ( + "Joins text from values and every cell of ranges, without a separator.", + "Nối văn bản từ các giá trị và mọi ô của phạm vi mà không có dấu phân cách.", + ), + ( + "Joins text from values and ranges with a delimiter, optionally skipping empty items.", + "Nối văn bản từ các giá trị và phạm vi bằng dấu phân cách, tùy ý bỏ qua các mục trống.", + ), + ("Keeps rows or columns from the start (or end) of an array.", "Giữ các hàng hoặc cột từ đầu (hoặc cuối) của một mảng."), + ("Keeps the rows or columns of an array whose include flag is TRUE.", "Giữ các hàng hoặc cột của một mảng có cờ bao gồm TRUE."), + ("Largest number (0 when there are none).", "Số lớn nhất (0 khi không có số nào)."), + ("Largest number in a field of the matching records.", "Số lớn nhất trong một trường của bản ghi trùng khớp."), + ("Largest value among cells that meet every condition.", "Giá trị lớn nhất trong số các ô bảng tính đáp ứng mọi điều kiện."), + ("Largest value counting text as 0 and logicals as 1/0.", "Giá trị lớn nhất, tính văn bản là 0 và giá trị logic là 1/0."), + ("Least common multiple of integers.", "Bội chung nhỏ nhất của các số nguyên."), + ("Least-squares line coefficients and optional regression statistics.", "Hệ số đường bình phương nhỏ nhất và thống kê hồi quy tùy chọn."), + ("Left-tailed inverse of Student's t distribution.", "Nghịch đảo đuôi trái của phân phối t Student."), + ("Length of the repeating pattern detected in a time series.", "Độ dài của mẫu lặp lại được phát hiện trong chuỗi thời gian."), + ("Logarithm to the given base (10 by default).", "Logarit cơ số đã cho (mặc định là 10)."), + ("Lognormal density or probability.", "Mật độ hoặc xác suất của phân phối logarit chuẩn."), + ("Macaulay duration of a security with periodic interest.", "Thời lượng Macaulay của chứng khoán trả lãi định kỳ."), + ("Matrix product of two arrays.", "Tích ma trận của hai mảng."), + ("Mean after trimming a fraction of points from both ends.", "Giá trị trung bình sau khi loại bỏ một tỷ lệ điểm dữ liệu ở cả hai đầu."), + ("Mean counting text as 0 and logical values as 1 or 0.", "Giá trị trung bình, tính văn bản là 0 và giá trị logic là 1 hoặc 0."), + ("Middle value of the numbers.", "Trung vị của các số."), + ("Modified Bessel function of the first kind, I_n(x).", "Hàm Bessel sửa đổi loại thứ nhất, I_n(x)."), + ("Modified Bessel function of the second kind, K_n(x).", "Hàm Bessel sửa đổi loại thứ hai, K_n(x)."), + ("Modified duration of a security with periodic interest.", "Thời lượng điều chỉnh của chứng khoán trả lãi định kỳ."), + ( + "Modified internal rate of return using separate borrow and reinvest rates.", + "Tỷ suất hoàn vốn nội bộ được điều chỉnh bằng cách sử dụng tỷ lệ vay và tái đầu tư riêng biệt.", + ), + ("Most frequently occurring number.", "Con số xuất hiện thường xuyên nhất."), + ("Multiplies all the numbers in the arguments.", "Nhân tất cả các số trong các đối số."), + ( + "Multiplies matching elements of equally sized arrays and adds the products.", + "Nhân các phần tử tương ứng của các mảng có cùng kích thước rồi cộng các tích.", + ), + ("Multiplies the numbers in a field of the matching records.", "Nhân các số trong một trường của các bản ghi trùng khớp."), + ("Names intermediate results.", "Đặt tên cho các kết quả trung gian."), + ("Natural log of the gamma function.", "Logarit tự nhiên của hàm gamma."), + ("Natural logarithm of a complex number.", "Logarit tự nhiên của số phức."), + ("Natural logarithm.", "Logarit tự nhiên."), + ("Negative binomial probability.", "Xác suất nhị thức âm."), + ("Net present value of cash flows on specific dates.", "Giá trị hiện tại ròng của dòng tiền vào những ngày cụ thể."), + ("Net present value of periodic cash flows at a discount rate.", "Giá trị hiện tại ròng của dòng tiền định kỳ theo tỷ lệ chiết khấu."), + ("Next coupon date after settlement.", "Ngày trả lãi tiếp theo sau ngày thanh toán giao dịch."), + ("Nominal annual rate from an effective rate and compounding periods.", "Lãi suất danh nghĩa hàng năm từ lãi suất hiệu dụng và số kỳ ghép lãi."), + ("Normal distribution density or cumulative probability.", "Mật độ hoặc xác suất tích lũy của phân phối chuẩn."), + ("Number of areas in a reference.", "Số vùng trong một tham chiếu."), + ("Number of combinations with repetition.", "Số lượng kết hợp có lặp lại."), + ("Number of combinations without repetition.", "Số lượng kết hợp không lặp lại."), + ("Number of coupons payable between settlement and maturity.", "Số lần thanh toán lãi đến hạn từ lúc quyết toán đến khi đáo hạn."), + ("Number of ordered selections with repetition.", "Số lượng lựa chọn được sắp xếp lặp lại."), + ("Number of ordered selections without repetition.", "Số lượng lựa chọn được sắp xếp không lặp lại."), + ("Number of periods needed to pay off or accumulate an amount.", "Số kỳ cần thiết để thanh toán hoặc tích lũy một khoản tiền."), + ("Number of sheets.", "Số trang tính."), + ("One- or two-tailed Student's t probability.", "Xác suất t Student một hoặc hai đuôi."), + ("One-tailed probability of a z-test.", "Xác suất một đầu của phép thử z."), + ("Pearson product-moment correlation coefficient.", "Hệ số tương quan tích mômen Pearson."), + ("Percent-encodes text for use in a URL.", "Văn bản mã hóa phần trăm để sử dụng trong URL."), + ( + "Periodic payment for a loan or annuity with constant payments and rate.", + "Thanh toán định kỳ cho khoản vay hoặc niên kim với mức thanh toán và lãi suất cố định.", + ), + ("Periods needed for an investment to grow to a target value.", "Khoảng thời gian cần thiết để khoản đầu tư phát triển đến giá trị mục tiêu."), + ("Picks a value from the list by its position.", "Chọn một giá trị từ danh sách theo vị trí của nó."), + ("Picks columns of an array by position (negative counts from the end).", "Chọn các cột của một mảng theo vị trí (số âm tính từ cuối)."), + ("Picks rows of an array by position (negative counts from the end).", "Chọn các hàng của mảng theo vị trí (số âm tính từ cuối)."), + ("Places arrays side by side.", "Đặt các mảng cạnh nhau."), + ("Poisson probability.", "Xác suất Poisson."), + ("Population covariance of paired values.", "Hiệp phương sai tổng thể của các giá trị được ghép nối."), + ("Population skewness.", "Độ bất đối xứng của tổng thể."), + ("Population standard deviation counting text as 0 and logicals as 1/0.", "Độ lệch chuẩn tổng thể, tính văn bản là 0 và giá trị logic là 1/0."), + ("Population standard deviation of a field over the matching records.", "Độ lệch chuẩn tổng thể của một trường so với các bản ghi trùng khớp."), + ("Population standard deviation.", "Độ lệch chuẩn tổng thể."), + ("Population variance counting text as 0 and logicals as 1/0.", "Phương sai tổng thể, tính văn bản là 0 và giá trị logic là 1/0."), + ("Population variance of a field over the matching records.", "Phương sai tổng thể của một trường trên các bản ghi trùng khớp."), + ("Population variance.", "Phương sai tổng thể."), + ("Positive square root.", "Căn bậc hai dương."), + ("Predicts a value along a linear trend.", "Dự đoán một giá trị theo xu hướng tuyến tính."), + ("Present value of a series of equal future payments.", "Giá trị hiện tại của một chuỗi các khoản thanh toán bằng nhau trong tương lai."), + ("Previous coupon date on or before settlement.", "Ngày thanh toán lãi trước đó vào hoặc trước ngày thanh toán."), + ("Price per 100 face value of a Treasury bill.", "Giá trên mệnh giá 100 của tín phiếu kho bạc."), + ("Price per 100 face value of a discounted security.", "Giá 100 mệnh giá của chứng khoán chiết khấu."), + ("Price per 100 face value of a security paying interest at maturity.", "Giá 100 mệnh giá của một chứng khoán trả lãi khi đáo hạn."), + ("Price per 100 face value of a security paying periodic interest.", "Giá 100 mệnh giá của chứng khoán trả lãi định kỳ."), + ("Price per 100 face value of a security with an odd first period.", "Giá mệnh giá 100 của chứng khoán có kỳ tính lãi đầu tiên không đều."), + ("Price per 100 face value of a security with an odd last period.", "Giá mệnh giá 100 của chứng khoán có kỳ tính lãi cuối cùng không đều."), + ("Principal part of a given period's payment.", "Phần gốc của khoản thanh toán trong một khoảng thời gian nhất định."), + ("Probability from Student's t-test.", "Xác suất từ kiểm định t Student."), + ("Probability of a number of successes falling in a range.", "Xác suất của một số thành công nằm trong một phạm vi."), + ("Probability that a standard normal value falls between the mean and z.", "Xác suất một giá trị chuẩn tắc nằm giữa giá trị trung bình và z."), + ("Probability that values fall between two limits.", "Xác suất để các giá trị nằm giữa hai giới hạn."), + ("Product of complex numbers.", "Tích của số phức."), + ("Quartile (0–4) of a data set, inclusive method.", "Tứ phân vị (0–4) của một tập dữ liệu, phương pháp bao gồm hai đầu mút."), + ("Quartile (0–4) of a data set.", "Tứ phân vị (0–4) của một tập dữ liệu."), + ("Quartile (1–3) of a data set, exclusive method.", "Tứ phân vị (1–3) của một tập dữ liệu, phương pháp loại trừ hai đầu mút."), + ("Quotient of two complex numbers.", "Thương của hai số phức."), + ("Raises a complex number to a power.", "Nâng số phức lên lũy thừa."), + ("Raises a number to a power.", "Nâng một số lên lũy thừa."), + ("Rank of a number within a list.", "Thứ hạng của một số trong danh sách."), + ( + "Rank of a number within a list; ties get the average rank.", + "Thứ hạng của một số trong danh sách; các giá trị bằng nhau nhận thứ hạng trung bình.", + ), + ( + "Rank of a number within a list; ties share the top rank.", + "Thứ hạng của một số trong danh sách; các giá trị bằng nhau cùng nhận thứ hạng cao nhất trong nhóm đó.", + ), + ("Ratio of the factorial of a sum to the product of factorials.", "Tỷ lệ giai thừa của một tổng với tích của các giai thừa."), + ("Reads text in a given base as a number.", "Đọc văn bản trong một cơ số nhất định dưới dạng số."), + ("Real coefficient of a complex number.", "Hệ số thực của số phức."), + ("Relative standing of a value as a fraction of the data set.", "Vị trí tương đối của một giá trị dưới dạng một phần của tập dữ liệu."), + ("Relative standing of a value from 0 to 1 inclusive.", "Vị trí tương đối của một giá trị từ 0 đến 1, bao gồm cả hai đầu mút."), + ("Relative standing of a value strictly between 0 and 1.", "Vị trí tương đối của một giá trị lớn hơn 0 và nhỏ hơn 1."), + ("Remainder of a division, with the sign of the divisor.", "Số dư của phép chia, mang dấu của số chia."), + ( + "Removes leading and trailing spaces and collapses runs of spaces to one.", + "Loại bỏ các khoảng trắng ở đầu và cuối và thu gọn các khoảng trắng thành một.", + ), + ("Removes non-printable control characters from text.", "Loại bỏ các ký tự điều khiển không in được khỏi văn bản."), + ("Removes rows or columns from the start (or end) of an array.", "Xóa các hàng hoặc cột khỏi đầu (hoặc cuối) của một mảng."), + ("Repeats a text a given number of times.", "Lặp lại một văn bản với số lần nhất định."), + ( + "Replaces matches of a regular expression, all of them or a chosen occurrence.", + "Thay thế các kết quả khớp của một biểu thức chính quy, tất cả chúng hoặc một lần xuất hiện đã chọn.", + ), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "Thay thế lần xuất hiện của văn bản này bằng văn bản khác, tùy chọn chỉ một lần xuất hiện nhất định.", + ), + ("Replaces part of a text by position.", "Thay thế một phần văn bản theo vị trí."), + ("Returns 1 when a number is at least the step, otherwise 0.", "Trả về 1 khi một số lớn hơn hoặc bằng ngưỡng cho trước, nếu không thì trả về 0."), + ("Returns 1 when two numbers are equal, otherwise 0.", "Trả về 1 khi hai số bằng nhau, nếu không thì trả về 0."), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "Trả về mã cho loại giá trị: 1 số, 2 văn bản, 4 logic, 16 lỗi, 64 mảng.", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "Trả về giá trị dự phòng khi giá trị là #N/A, nếu không thì giá trị."), + ( + "Returns a fallback when the value is an error, otherwise the value.", + "Trả về giá trị dự phòng khi giá trị bị lỗi, nếu không thì trả về giá trị.", + ), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "Trả về thuộc tính chỉ báo hiệu suất chính từ một khối (không có kết nối khối; #N/A).", + ), + ( + "Returns a member or tuple from a cube (no cube connections; #N/A).", + "Trả về một thành viên hoặc bộ dữ liệu từ một khối (không có kết nối khối; #N/A).", + ), + ("Returns a property of a cube member (no cube connections; #N/A).", "Trả về thuộc tính của thành viên khối (không có kết nối khối; #N/A)."), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "Trả về giá trị tổng hợp từ một khối (không có kết nối khối; #N/A)."), + ("Returns characters from the middle of a text.", "Trả về các ký tự ở giữa văn bản."), + ("Returns information about the operating environment.", "Trả về thông tin về môi trường hoạt động."), + ( + "Returns one value when a condition is TRUE and another when it is FALSE.", + "Trả về một giá trị khi điều kiện là TRUE và giá trị khác khi điều kiện là FALSE.", + ), + ("Returns the #N/A error value.", "Trả về giá trị lỗi #N/A."), + ("Returns the 1-based position of a value in a row or column.", "Trả về vị trí dựa trên 1 của một giá trị trong một hàng hoặc cột."), + ("Returns the ISO 8601 week number of a date.", "Trả về số tuần ISO 8601 của một ngày."), + ("Returns the Unicode code point of the first character of a text.", "Trả về điểm mã Unicode của ký tự đầu tiên của văn bản."), + ("Returns the Windows-1252 code of the first character of a text.", "Trả về mã Windows-1252 của ký tự đầu tiên của văn bản."), + ("Returns the character for a Unicode code point.", "Trả về ký tự cho điểm mã Unicode."), + ("Returns the character for a code from the Windows-1252 character set.", "Trả về ký tự cho mã từ bộ ký tự Windows-1252."), + ("Returns the current date and time.", "Trả về ngày và giờ hiện tại."), + ("Returns the current date.", "Trả về ngày hiện tại."), + ("Returns the date a number of months before or after a date.", "Trả về ngày trước hoặc sau một ngày một số tháng."), + ("Returns the date a number of working days away with a custom weekend.", "Trả về ngày cách một số ngày làm việc với ngày cuối tuần tùy chỉnh."), + ("Returns the date a number of working days before or after a date.", "Trả về ngày một số ngày làm việc trước hoặc sau một ngày."), + ("Returns the day of the month of a date.", "Trả về ngày trong tháng của một ngày."), + ("Returns the day of the week of a date as a number.", "Trả về ngày trong tuần của một ngày dưới dạng số."), + ("Returns the distinct rows or columns of an array.", "Trả về các hàng hoặc cột riêng biệt của một mảng."), + ("Returns the element, row or column of an array at the given position.", "Trả về phần tử, hàng hoặc cột của một mảng tại vị trí đã cho."), + ("Returns the field value of the single record that meets the criteria.", "Trả về giá trị trường của một bản ghi đáp ứng tiêu chí."), + ("Returns the first characters of a text.", "Trả về các ký tự đầu của văn bản."), + ("Returns the fraction of a year between two dates under a day-count basis.", "Trả về phân số của một năm giữa hai ngày theo cơ sở đếm ngày."), + ("Returns the hour (0-23) of a time.", "Trả về giờ (0-23) của một thời điểm."), + ("Returns the last characters of a text.", "Trả về các ký tự cuối của văn bản."), + ("Returns the last day of the month a number of months away.", "Trả về ngày cuối cùng của tháng cách một số tháng."), + ("Returns the logical value FALSE.", "Trả về giá trị logic FALSE."), + ("Returns the logical value TRUE.", "Trả về giá trị logic TRUE."), + ("Returns the minute (0-59) of a time.", "Trả về phút (0-59) của một thời điểm."), + ("Returns the month (1-12) of a date.", "Trả về tháng (1-12) của một ngày."), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "Trả về phần tử thứ n của tập hợp khối (không có kết nối khối; #N/A)."), + ( + "Returns the number identifying an error value, or #N/A if it is not an error.", + "Trả về số xác định giá trị lỗi hoặc #N/A nếu đó không phải là lỗi.", + ), + ("Returns the number of days between two dates.", "Trả về số ngày giữa hai ngày."), + ("Returns the phonetic (furigana) text; here the text itself.", "Trả về văn bản phiên âm (furigana); đây chính là văn bản."), + ( + "Returns the position of a value in a row or column with flexible match and search modes.", + "Trả về vị trí của một giá trị trong một hàng hoặc cột với chế độ tìm kiếm và khớp linh hoạt.", + ), + ("Returns the second (0-59) of a time.", "Trả về giây (0-59) của một thời điểm."), + ("Returns the text that comes after a delimiter.", "Trả về văn bản sau dấu phân cách."), + ("Returns the text that comes before a delimiter.", "Trả về văn bản đứng trước dấu phân cách."), + ("Returns the value if it is text, otherwise empty text.", "Trả về giá trị nếu đó là văn bản, nếu không thì là văn bản trống."), + ("Returns the value paired with the first condition that is TRUE.", "Trả về giá trị được ghép nối với điều kiện đầu tiên là TRUE."), + ("Returns the week number of a date within its year.", "Trả về số tuần của một ngày trong năm của nó."), + ("Returns the year of a date.", "Trả về năm của một ngày."), + ("Reverses a logical value.", "Đảo ngược một giá trị logic."), + ("Right-tailed F probability.", "Xác suất F đuôi phải."), + ("Right-tailed Student's t probability.", "Xác suất t Student đuôi phải."), + ("Right-tailed chi-squared probability.", "Xác suất chi bình phương đuôi phải."), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "Làm tròn một số và định dạng nó dưới dạng văn bản với số thập phân cố định và dấu phân cách hàng nghìn tùy chọn.", + ), + ("Rounds a number away from zero to a given number of digits.", "Làm tròn số theo hướng ra xa số không đến số chữ số được chỉ định."), + ("Rounds a number down to a multiple of significance.", "Làm tròn một số xuống bội số của giá trị làm tròn cho trước."), + ("Rounds a number down to the nearest integer or multiple.", "Làm tròn một số xuống số nguyên hoặc bội số gần nhất."), + ("Rounds a number down to the nearest integer.", "Làm tròn một số xuống số nguyên gần nhất."), + ( + "Rounds a number to a given number of digits, halves away from zero.", + "Làm tròn số đến số chữ số được chỉ định; các giá trị đúng ở giữa được làm tròn theo hướng ra xa số không.", + ), + ("Rounds a number to the nearest multiple.", "Làm tròn một số đến bội số gần nhất."), + ("Rounds a number toward negative infinity to a multiple.", "Làm tròn một số về phía âm vô cực thành bội số."), + ("Rounds a number toward positive infinity to a multiple.", "Làm tròn một số tới vô cực dương thành bội số."), + ("Rounds a number toward zero to a given number of digits.", "Làm tròn số theo hướng về số không đến số chữ số được chỉ định."), + ("Rounds a number up to a multiple of significance.", "Làm tròn một số lên bội số của giá trị làm tròn cho trước."), + ("Rounds a number up to the nearest integer or multiple.", "Làm tròn một số lên số nguyên hoặc bội số gần nhất."), + ("Rounds away from zero to the nearest even integer.", "Làm tròn theo hướng ra xa số không đến số nguyên chẵn gần nhất."), + ("Rounds away from zero to the nearest odd integer.", "Làm tròn theo hướng ra xa số không đến số nguyên lẻ gần nhất."), + ("Row number of a reference.", "Số hàng của một tham chiếu."), + ("Running accumulation of an array.", "Các giá trị tích lũy lần lượt của một mảng."), + ("Sample covariance of paired values.", "Hiệp phương sai mẫu của các giá trị được ghép nối."), + ("Sample skewness.", "Độ bất đối xứng của mẫu."), + ("Sample standard deviation counting text as 0 and logicals as 1/0.", "Độ lệch chuẩn mẫu, tính văn bản là 0 và giá trị logic là 1/0."), + ("Sample standard deviation of a field over the matching records.", "Độ lệch chuẩn mẫu của một trường trên các bản ghi trùng khớp."), + ("Sample standard deviation.", "Độ lệch chuẩn mẫu."), + ("Sample variance counting text as 0 and logicals as 1/0.", "Phương sai mẫu, tính văn bản là 0 và giá trị logic là 1/0."), + ("Sample variance of a field over the matching records.", "Phương sai mẫu của một trường trên các bản ghi trùng khớp."), + ("Sample variance.", "Phương sai mẫu."), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "Tìm trong một hàng hoặc cột và trả về phần tử, hàng hoặc cột tương ứng từ một mảng khác.", + ), + ("Secant of a complex number.", "Sec của số phức."), + ("Secant of an angle in radians.", "Sec của một góc tính bằng radian."), + ("Sheet number.", "Số thứ tự trang tính."), + ("Shifts the bits of a number left (right for negative shifts).", "Dịch chuyển các bit của một số sang trái (phải đối với các dịch chuyển âm)."), + ("Shifts the bits of a number right (left for negative shifts).", "Dịch các bit của một số sang phải (trái cho các dịch chuyển âm)."), + ("Sine of a complex number.", "Sin của một số phức."), + ("Sine of an angle in radians.", "Sin của một góc tính bằng radian."), + ("Slope of the least-squares regression line.", "Độ dốc của đường hồi quy bình phương nhỏ nhất."), + ("Smallest number (0 when there are none).", "Số nhỏ nhất (0 khi không có số nào)."), + ("Smallest number in a field of the matching records.", "Số nhỏ nhất trong một trường của bản ghi trùng khớp."), + ( + "Smallest success count whose cumulative binomial probability reaches alpha.", + "Số thành công nhỏ nhất có xác suất nhị thức tích lũy đạt alpha.", + ), + ("Smallest value among cells that meet every condition.", "Giá trị nhỏ nhất trong số các ô bảng tính đáp ứng mọi điều kiện."), + ("Smallest value counting text as 0 and logicals as 1/0.", "Giá trị nhỏ nhất, tính văn bản là 0 và giá trị logic là 1/0."), + ("Sorts an array by the values of other arrays of matching size.", "Sắp xếp một mảng theo giá trị của các mảng khác có kích thước phù hợp."), + ( + "Sorts the rows (or columns) of an array by one or more of its columns.", + "Sắp xếp các hàng (hoặc cột) của một mảng theo một hoặc nhiều cột của nó.", + ), + ("Spells out a number in Thai words with Baht.", "Đánh vần một số bằng từ tiếng Thái bằng Baht."), + ( + "Splits text into a grid of columns and rows at the given delimiters.", + "Chia văn bản thành một lưới các cột và hàng tại các dấu phân cách nhất định.", + ), + ("Square of the correlation coefficient.", "Bình phương hệ số tương quan."), + ("Square root of a complex number.", "Căn bậc hai của một số phức."), + ("Square root of the number times pi.", "Căn bậc hai của tích giữa số đã cho và pi."), + ("Stacks arrays on top of each other.", "Xếp chồng các mảng lên nhau."), + ("Standard error of predicted y values in a regression.", "Sai số chuẩn của các giá trị y dự đoán trong hồi quy."), + ("Standard normal cumulative probability.", "Xác suất tích lũy của phân phối chuẩn tắc."), + ("Standard normal density or cumulative probability.", "Mật độ hoặc xác suất tích lũy của phân phối chuẩn tắc."), + ("Standard normal density.", "Mật độ của phân phối chuẩn tắc."), + ("Straight-line depreciation for one period.", "Khấu hao theo đường thẳng trong một kỳ."), + ("Student's t density or left-tailed probability.", "Mật độ hoặc xác suất đuôi trái của phân phối t Student."), + ("Sum of a power series.", "Tổng của một chuỗi lũy thừa."), + ("Sum of complex numbers.", "Tổng các số phức."), + ("Sum of squared deviations from the mean.", "Tổng bình phương độ lệch so với giá trị trung bình."), + ("Sum-of-years'-digits depreciation for a period.", "Khấu hao theo phương pháp tổng các chữ số năm trong một kỳ."), + ("Sums the differences of squares of matching elements.", "Tính tổng các hiệu của bình phương từng cặp phần tử tương ứng."), + ("Sums the squared differences of matching elements.", "Tính tổng bình phương các hiệu của từng cặp phần tử tương ứng."), + ("Sums the sums of squares of matching elements.", "Tính tổng các tổng bình phương của từng cặp phần tử tương ứng."), + ("Swaps the rows and columns of an array.", "Hoán đổi hàng và cột của một mảng."), + ("TRUE for references.", "TRUE khi giá trị là tham chiếu."), + ("TRUE when a LAMBDA argument was left out.", "TRUE khi đối số LAMBDA bị bỏ qua."), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE khi một biểu thức chính quy khớp với một vị trí nào đó trong văn bản."), + ("TRUE when an odd number of arguments are TRUE.", "TRUE khi số đối số có giá trị TRUE là số lẻ."), + ("TRUE when at least one argument is TRUE.", "TRUE khi có ít nhất một đối số là TRUE."), + ("TRUE when every argument is TRUE.", "TRUE khi mọi đối số đều là TRUE."), + ("TRUE when the cell has a formula.", "TRUE khi ô có công thức."), + ("TRUE when the integer part of a number is even.", "TRUE khi phần nguyên của một số là số chẵn."), + ("TRUE when the integer part of a number is odd.", "TRUE khi phần nguyên của một số là số lẻ."), + ("TRUE when the value is TRUE or FALSE.", "TRUE khi giá trị là TRUE hoặc FALSE."), + ("TRUE when the value is a number.", "TRUE khi giá trị là số."), + ("TRUE when the value is any error other than #N/A.", "TRUE khi giá trị có bất kỳ lỗi nào khác ngoài #N/A."), + ("TRUE when the value is any error.", "TRUE khi giá trị có bất kỳ lỗi nào."), + ("TRUE when the value is anything other than text.", "TRUE khi giá trị không phải là văn bản."), + ("TRUE when the value is text.", "TRUE khi giá trị là văn bản."), + ("TRUE when the value is the #N/A error.", "TRUE khi giá trị là lỗi #N/A."), + ("TRUE when the value refers to an empty cell.", "TRUE khi giá trị đề cập đến một ô trống."), + ("TRUE when two texts are identical, including case.", "TRUE khi hai văn bản giống hệt nhau, bao gồm cả chữ hoa và chữ thường."), + ("Tangent of a complex number.", "Tang của một số phức."), + ("Tangent of an angle in radians.", "Tang của một góc tính bằng radian."), + ("The constant pi to 15 digits.", "Hằng số pi có 15 chữ số."), + ("The formula of a cell as text.", "Công thức của một ô dưới dạng văn bản."), + ("The gamma function.", "Hàm gamma."), + ("The k-th largest number in a data set.", "Số lớn thứ k trong tập dữ liệu."), + ("The k-th smallest number in a data set.", "Số nhỏ thứ k trong tập dữ liệu."), + ("The reference named by a text string.", "Tham chiếu được đặt tên theo chuỗi văn bản."), + ("The sum of a subset as a fraction of the sum of all the values.", "Tổng của một tập hợp con là một phần của tổng của tất cả các giá trị."), + ("Total interest paid between two periods.", "Tổng lãi trả giữa 2 kỳ."), + ("Total principal repaid between two periods.", "Tổng số tiền gốc hoàn trả giữa 2 kỳ."), + ("Two-tailed Student's t probability.", "Xác suất t Student hai đuôi."), + ("Two-tailed inverse of Student's t distribution.", "Nghịch đảo hai đuôi của phân phối t Student."), + ("Two-tailed p-value of an F-test for equality of variances.", "Giá trị p hai phía của kiểm định F về sự bằng nhau của các phương sai."), + ("Values along a fitted exponential growth curve.", "Các giá trị dọc theo đường cong tăng trưởng theo cấp số nhân phù hợp."), + ("Values along a least-squares linear fit.", "Các giá trị dọc theo đường khớp tuyến tính bình phương nhỏ nhất."), + ("Vertical array of all the most frequent numbers.", "Mảng dọc chứa tất cả các số thường xuyên nhất."), + ("Weibull density or probability.", "Mật độ hoặc xác suất Weibull."), + ("Writes a number in another base, padded with zeros.", "Viết một số vào một cơ số khác, được đệm bằng các số 0."), + ("Y-intercept of the least-squares regression line.", "Tung độ gốc của đường hồi quy bình phương nhỏ nhất."), + ("Yield of a Treasury bill.", "Lợi suất của tín phiếu kho bạc."), + ("Yield of a security paying periodic interest.", "Lợi suất của chứng khoán trả lãi định kỳ."), + ("Yield of a security with an odd first period.", "Lợi suất của chứng khoán có kỳ tính lãi đầu tiên không đều."), + ("Yield of a security with an odd last period.", "Lợi suất của chứng khoán có kỳ tính lãi cuối cùng không đều."), + ("Z-score of a value.", "Z-score của một giá trị."), + ("e raised to the given power.", "e nâng lên lũy thừa cho trước."), + ("k-th percentile, k from 0 to 1 inclusive.", "phân vị thứ k, bao gồm k từ 0 đến 1."), + ("k-th percentile, k strictly between 0 and 1.", "phân vị thứ k, k nằm trong khoảng từ 0 đến 1."), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "loại_tham_chiếu"), + ("actual_range", "phạm_vi_thực_tế"), + ("aggregation", "tổng_hợp"), + ("alpha", "alpha"), + ("angle", "góc"), + ("area_num", "số_khu_vực"), + ("argument", "đối_số"), + ("array", "mảng"), + ("array_x", "mảng_giá_trị_x"), + ("array_y", "mảng_giá_trị_y"), + ("average_range", "phạm_vi_trung_bình"), + ("base", "cơ_số"), + ("basis", "cơ_sở"), + ("beta", "beta"), + ("bins_array", "mảng_ranh_giới_nhóm"), + ("bottom", "giới_hạn_dưới"), + ("by_array", "sắp_xếp_mảng_khóa"), + ("by_col", "theo_cột"), + ("calc_method", "phương_pháp_tính_toán"), + ("calculation", "tính_toán"), + ("caption", "chú_thích"), + ("case_sensitivity", "phân_biệt_chữ_hoa_chữ_thường"), + ("coefficients", "hệ_số"), + ("col_delimiter", "dấu_phân_cách_cột"), + ("col_fields", "trường_cột"), + ("col_index_num", "chỉ_mục_cột"), + ("col_num", "số_cột"), + ("col_sort_order", "thứ_tự_sắp_xếp_cột"), + ("col_total_depth", "tổng_độ_sâu_cột"), + ("cols", "số_cột"), + ("column_num", "số_cột"), + ("columns", "số_cột"), + ("confidence_level", "mức_độ_tin_cậy"), + ("connection", "kết_nối_dữ_liệu"), + ("const", "không_đổi"), + ("cost", "chi_phí_ban_đầu"), + ("coupon", "lãi_suất_coupon"), + ("criteria", "tiêu_chí"), + ("criteria_range", "phạm_vi_tiêu_chí"), + ("cumulative", "phân_phối_tích_lũy"), + ("data_all", "tất_cả_dữ_liệu"), + ("data_array", "mảng_dữ_liệu"), + ("data_completion", "hoàn_thành_dữ_liệu"), + ("data_subset", "tập_dữ_liệu_con"), + ("database", "cơ_sở_dữ_liệu"), + ("date", "ngày"), + ("date_purchased", "ngày_mua"), + ("date_text", "ngày_được_viết_dưới_dạng_văn_bản"), + ("dates", "ngày"), + ("day", "ngày"), + ("days", "ngày"), + ("decimal_dollar", "giá_thập_phân"), + ("decimal_separator", "dấu_phân_cách_thập_phân"), + ("decimals", "chữ_số_thập_phân"), + ("default_or_value", "mặc_định_hoặc_giá_trị"), + ("deg_freedom", "bậc_tự_do"), + ("delimiter", "dấu_phân_cách"), + ("denominator", "mẫu_số"), + ("dimension", "kích_thước"), + ("discount", "tỷ_lệ_chiết_khấu"), + ("divisor", "số_chia"), + ("effect_rate", "lãi_suất_hiệu_dụng"), + ("end_date", "ngày_kết_thúc"), + ("end_period", "kỳ_kết_thúc"), + ("error_val", "giá_trị_lỗi"), + ("exactly_once", "đúng_một_lần"), + ("expected_range", "phạm_vi_dự_kiến"), + ("expression", "biểu_thức"), + ("factor", "hệ_số"), + ("field", "trường_cơ_sở_dữ_liệu"), + ("field_headers", "tiêu_đề_trường"), + ("field_relationship", "mối_quan_hệ_giữa_các_trường"), + ("filter_array", "mảng_lọc"), + ("finance_rate", "lãi_suất_tài_trợ"), + ("find_text", "tìm_văn_bản"), + ("first_coupon", "ngày_thanh_toán_phiếu_lãi_đầu_tiên"), + ("first_interest", "ngày_trả_lãi_đầu_tiên"), + ("first_period", "ngày_kết_thúc_kỳ_đầu"), + ("form", "mẫu"), + ("format", "định_dạng"), + ("format_text", "định_dạng_văn_bản"), + ("fraction", "phân_số"), + ("fractional_dollar", "giá_dạng_phân_số"), + ("frequency", "tần_suất_trả_lãi"), + ("friendly_name", "tên_thân_thiện"), + ("from_unit", "đơn_vị_đo_nguồn"), + ("full_precision", "chính_xác_tuyệt_đối"), + ("function", "hàm"), + ("function_num", "số_hàm"), + ("fv", "giá_trị_tương_lai"), + ("group_separator", "dấu_tách_nhóm"), + ("guess", "giá_trị_ước_đoán"), + ("height", "chiều_cao"), + ("holidays", "nghỉ_lễ"), + ("hour", "giờ"), + ("i_num", "hệ_số_ảo"), + ("if_empty", "nếu_trống"), + ("if_not_found", "nếu_không_tìm_thấy"), + ("ignore", "bỏ_qua"), + ("ignore_empty", "bỏ_qua_chỗ_trống"), + ("include", "bao_gồm"), + ("index_num", "số_chỉ_mục"), + ("info_type", "loại_thông_tin"), + ("initial_value", "giá_trị_ban_đầu"), + ("instance_num", "số_lần_xuất_hiện"), + ("inumber", "số_phức"), + ("investment", "đầu_tư"), + ("issue", "ngày_phát_hành"), + ("k", "k"), + ("known_xs", "giá_trị_x_đã_biết"), + ("known_ys", "giá_trị_y_đã_biết"), + ("kpi_name", "tên_chỉ_báo_hiệu_suất_chính"), + ("kpi_property", "thuộc_tính_chỉ_báo_hiệu_suất_chính"), + ("lambda", "lambda"), + ("last_interest", "ngày_thanh_toán_lãi_cuối_cùng"), + ("life", "thời_gian_sử_dụng_hữu_ích"), + ("link_location", "vị_trí_liên_kết"), + ("logical", "giá_trị_logic"), + ("logical_test", "điều_kiện_logic"), + ("lookup_array", "mảng_tìm"), + ("lookup_value", "giá_trị_tìm"), + ("lookup_vector", "tra_cứu_vector"), + ("lower_limit", "giới_hạn_dưới"), + ("m", "m"), + ("match_end", "coi_cuối_văn_bản_là_dấu_phân_cách"), + ("match_mode", "chế_độ_khớp"), + ("match_type", "phương_thức_khớp"), + ("maturity", "ngày_đáo_hạn"), + ("max", "tối_đa"), + ("max_range", "phạm_vi_giá_trị_tối_đa"), + ("mean", "trung_bình_số_học"), + ("member_expression", "biểu_thức_thành_viên_khối_lập_phương"), + ("method", "phương_pháp"), + ("min", "tối_thiểu"), + ("min_length", "độ_dài_tối_thiểu"), + ("min_range", "phạm_vi_giá_trị_tối_thiểu"), + ("minute", "phút"), + ("mode", "chế_độ_tính_toán"), + ("month", "tháng"), + ("months", "tháng"), + ("multiple", "bội_số"), + ("n", "n"), + ("name", "tên"), + ("new_text", "văn_bản_mới"), + ("new_xs", "giá_trị_x_mới"), + ("no_commas", "bỏ_qua_dấu_phân_cách_nhóm_chữ_số"), + ("no_switch", "không_chuyển_đổi_phương_pháp_khấu_hao"), + ("nominal_rate", "lãi_suất_danh_nghĩa"), + ("nper", "số_kỳ"), + ("npery", "kỳ_mỗi_năm"), + ("num_bytes", "số_byte"), + ("num_chars", "số_ký_tự"), + ("num_digits", "số_chữ_số"), + ("number", "số"), + ("number_chosen", "số_đã_chọn"), + ("number_f", "số_lần_thất_bại"), + ("number_pop", "kích_thước_tổng_thể"), + ("number_s", "số_lần_thành_công"), + ("number_sample", "cỡ_mẫu"), + ("number_times", "số_lần_lặp_lại"), + ("numerator", "tử_số"), + ("occurrence", "sự_xuất_hiện"), + ("old_text", "văn_bản_cũ"), + ("options", "tùy_chọn"), + ("order", "thứ_tự"), + ("pad_with", "đệm_với"), + ("par", "mệnh_giá"), + ("parameter", "tham_số"), + ("pattern", "mẫu_biểu_thức_chính_quy"), + ("per", "kỳ"), + ("percent", "phần_trăm"), + ("period", "kỳ"), + ("places", "số_chữ_số_đầu_ra"), + ("pmt", "thanh_toán"), + ("population_s", "số_phần_tử_thành_công_trong_tổng_thể"), + ("power", "số_mũ"), + ("pr", "giá"), + ("principal", "vốn_gốc"), + ("prob_range", "phạm_vi_xác_suất"), + ("probability", "xác_suất"), + ("probability_s", "xác_suất_thành_công"), + ("property", "tên_thuộc_tính"), + ("pv", "giá_trị_hiện_tại"), + ("quart", "chỉ_số_tứ_phân_vị"), + ("radix", "cơ_số"), + ("range", "phạm_vi"), + ("range_lookup", "tra_cứu_phạm_vi"), + ("rank", "xếp_hạng"), + ("rate", "tỷ_lệ"), + ("real_num", "hệ_số_thực"), + ("redemption", "giá_trị_hoàn_trả"), + ("ref", "tham_chiếu"), + ("ref_text", "văn_bản_tham_chiếu"), + ("reference", "tham_chiếu"), + ("reinvest_rate", "lãi_suất_tái_đầu_tư"), + ("relative_to", "so_với"), + ("replacement", "thay_thế"), + ("result", "kết_quả"), + ("result_vector", "vectơ_kết_quả"), + ("return_array", "mảng_trả_về"), + ("return_mode", "chế_độ_trả_về"), + ("return_type", "kiểu_trả_về"), + ("row_delimiter", "dấu_phân_cách_hàng"), + ("row_fields", "trường_hàng"), + ("row_index_num", "chỉ_số_hàng"), + ("row_num", "số_hàng"), + ("row_sort_order", "thứ_tự_sắp_xếp_hàng"), + ("row_total_depth", "tổng_chiều_sâu_hàng"), + ("rows", "số_hàng"), + ("salvage", "giá_trị_còn_lại"), + ("sample_s", "số_phần_tử_thành_công_trong_mẫu"), + ("scan_by_column", "quét_theo_cột"), + ("schedule", "lịch_trình"), + ("search_mode", "chế_độ_tìm"), + ("seasonality", "tính_thời_vụ"), + ("second", "giây"), + ("serial_number", "số_sê_ri"), + ("set", "bộ_thành_viên_khối"), + ("set_expression", "biểu_thức_tập_hợp_thành_viên_khối"), + ("settlement", "ngày_thanh_toán"), + ("sheet_text", "tên_trang_tính"), + ("shift_amount", "số_bit_dịch"), + ("sigma", "sigma"), + ("significance", "bội_số_hoặc_độ_chính_xác"), + ("size", "kích_thước"), + ("sort_by", "sắp_xếp_theo"), + ("sort_index", "sắp_xếp_chỉ_mục"), + ("sort_order", "sắp_xếp_thứ_tự"), + ("source", "nguồn"), + ("standard_dev", "độ_lệch_chuẩn"), + ("start", "giá_trị_bắt_đầu"), + ("start_date", "ngày_bắt_đầu"), + ("start_num", "vị_trí_bắt_đầu"), + ("start_period", "giai_đoạn_bắt_đầu"), + ("statistic_type", "loại_thống_kê"), + ("stats", "thống_kê"), + ("step", "bước"), + ("suffix", "hậu_tố"), + ("sum_range", "phạm_vi_tổng"), + ("table_array", "mảng_bảng"), + ("tails", "số_đuôi_phân_phối"), + ("target", "mục_tiêu"), + ("target_date", "ngày_mục_tiêu"), + ("text", "văn_bản"), + ("time_text", "thời_gian_viết_dưới_dạng_văn_bản"), + ("timeline", "dòng_thời_gian"), + ("to_unit", "đơn_vị_đo_mục_tiêu"), + ("top", "giới_hạn_trên"), + ("total_depth", "tổng_độ_sâu"), + ("trials", "thử_nghiệm"), + ("triangulation_precision", "độ_chính_xác_tam_giác"), + ("trim_cols", "chế_độ_cắt_cột"), + ("trim_rows", "chế_độ_cắt_hàng"), + ("type", "kiểu"), + ("type_text", "tên_kiểu_dữ_liệu"), + ("unit", "đơn_vị"), + ("upper_limit", "giới_hạn_trên"), + ("url", "địa_chỉ"), + ("value", "giá_trị"), + ("value_if_error", "kết_quả_trong_trường_hợp_có_lỗi"), + ("value_if_false", "kết_quả_khi_điều_kiện_sai"), + ("value_if_na", "kết_quả_cho_lỗi_không_có_sẵn"), + ("value_if_true", "kết_quả_khi_điều_kiện_đúng"), + ("values", "giá_trị_đầu_vào"), + ("vector", "vectơ"), + ("weekend", "cuối_tuần"), + ("whole_number", "số_nguyên"), + ("width", "chiều_rộng"), + ("within_text", "văn_bản_để_tìm_kiếm"), + ("wrap_count", "số_giá_trị_trên_mỗi_hàng_hoặc_cột"), + ("x", "x"), + ("x_num", "x_tọa_độ"), + ("x_range", "x_phạm_vi"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "y_tọa_độ"), + ("year", "năm"), + ("yld", "lợi_suất"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/zh.rs b/crates/ui-egui/src/i18n/zh.rs index ff671a7c91..148fedb99f 100644 --- a/crates/ui-egui/src/i18n/zh.rs +++ b/crates/ui-egui/src/i18n/zh.rs @@ -3,6 +3,879 @@ /// Returns the Chinese translation for `text`, or `None` so callers fall back to English. pub(super) fn translate(text: &str) -> Option<&'static str> { Some(match text { + "Data Table" => "数据表", + "Show Data Table" => "显示数据表", + "Available for column, bar, line, area and compatible combo charts." => "可用于柱形图、条形图、折线图、面积图和兼容的组合图。", + "Show Legend Keys" => "显示图例标记", + "Horizontal Borders" => "水平边框", + "Vertical Borders" => "垂直边框", + "Elements" => "元素", + "Colors & Layout" => "颜色和布局", + "Format Chart Area" => "设置图表区格式", + "Selection" => "所选内容", + "Legend" => "图例", + "Collapse Ribbon" => "折叠功能区", + "Display Theme" => "显示主题", + "New Window" => "新建窗口", + "A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft." => "洁净室实现的开源 Rust 原生电子表格,属于 ArtCraft。", + "Add Watch (active cell)" => "添加监视(活动单元格)", + "Bring Forward" => "上移一层", + "Can't Undo" => "无法撤销", + "Fill…" => "填充…", + "Hebrew עברית" => "希伯来语 עברית", + "Let this workbook's scripts run for the rest of this session" => "允许此工作簿的脚本在本次会话中运行", + "No contributor data was built into this copy." => "此版本未内置贡献者数据。", + "No model credits were built into this copy." => "此版本未内置模型致谢信息。", + "Reports:" => "报表:", + "Answer" => "答案", + "Sensitivity" => "敏感性", + "Limits" => "极限值", + "Needs an optimal or converged solution: Solver stopped before reaching one." => "需要最优解或收敛解:规划求解在到达之前已停止。", + "Needs Simplex LP or GRG Nonlinear, a Max or Min objective and no integer constraints." => { + "需要 Simplex LP 或 GRG Nonlinear、最大值或最小值目标,并且不含整数约束。" + } + "Reverse the order" => "反转顺序", + "Scripts in this workbook came from a file and are disabled." => "此工作簿中的脚本来自文件,已被禁用。", + "Send Backward" => "下移一层", + "The chart no longer exists." => "该图表已不存在。", + "Trust Scripts" => "信任脚本", + "Banded Columns" => "交替着色列", + "Banded Rows" => "交替着色行", + "Commits" => "提交数", + "Copy Cells" => "复制单元格", + "Data Labels" => "数据标签", + "Fill Days" => "按天填充", + "Fill Formatting Only" => "仅填充格式", + "Fill Months" => "按月填充", + "Fill Series" => "填充序列", + "Fill Weekdays" => "按工作日填充", + "Fill Without Formatting" => "不带格式填充", + "Fill Years" => "按年填充", + "First Column" => "第一列", + "First commit" => "首次提交", + "Header Row" => "标题行", + "Last Column" => "最后一列", + "Last commit" => "最近提交", + "Macros preserved (not executed)" => "宏已保留(未执行)", + "Merged PRs" => "已合并 PR", + "No comments on this sheet yet. Select a cell and choose New Comment." => "此工作表尚无批注。请选择单元格并选择「新建批注」。", + "Resolved" => "已解决", + "Select a chart to format it." => "请先选择图表再进行格式设置。", + "Send" => "发送", + "Show Details" => "显示明细数据", + "Table Name:" => "表格名称:", + "There are no shapes, pictures or charts on this sheet." => "此工作表中没有形状、图片或图表。", + "Total Row" => "汇总行", + "The cell or chart you're trying to change is on a protected sheet." => "要更改的单元格或图表位于受保护的工作表上。", + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet)." => { + "锁定单元格或隐藏公式只有在保护工作表后才生效(审阅 › 保护工作表)。" + } + "Auto Fill Options" => "自动填充选项", + "Constraint Operator" => "约束运算符", + "Paste List" => "粘贴列表", + "Paste name" => "粘贴名称", + "Split tabs" => "拆分标签", + "Copy matching rows elsewhere" => "将匹配行复制到其他位置", + "Copy to:" => "复制到:", + "Criteria range (optional):" => "条件区域(可选):", + "Delete columns" => "删除列", + "Insert columns" => "插入列", + "List range:" => "列表区域:", + "New range for the table:" => "表格的新区域:", + "Range:" => "区域:", + "Row height (points):" => "行高(磅):", + "Select locked cells" => "选定锁定单元格", + "Select unlocked cells" => "选定未锁定的单元格", + "Show matching rows in place" => "在原有位置显示匹配行", + "Summary columns to right of detail" => "明细数据右侧显示汇总列", + "Summary rows below detail" => "明细数据下方显示汇总行", + "Unique rows only" => "仅显示不重复的行", + "(Select All Search Results)" => "(全选搜索结果)", + "(Select All)" => "(全选)", + "Display name" => "显示名称", + "Evolutionary: a genetic search for models that aren't smooth; every variable cell needs bounds." => { + "演化:对非平滑模型进行遗传搜索;每个可变单元格都需要边界。" + } + "GRG Nonlinear: a local optimum of a smooth model, from the current values." => "非线性 GRG:从当前值出发,求解平滑模型的局部最优解。", + "Grab bag" => "杂项列表", + "Real name" => "真实姓名", + "Simplex LP: for linear models; integer and binary constraints by branch and bound." => { + "单纯线性规划:适用于线性模型;整数和二进制约束采用分支定界法。" + } + "Username" => "用户名", + "Preview" => "预览", + "Sort On" => "排序依据", + "Advanced Filter" => "高级筛选", + "Paste Name" => "粘贴名称", + "Cell" => "单元格", + "GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:" => { + "GridCraft 可完全由智能体驱动。每个菜单项、按钮和手势都是一个命令:" + } + "Numerical Count" => "数值计数", + "Page 1" => "第 1 页", + "Page 1 of ?" => "第 1 页,共 ? 页", + "Outline Settings" => "分级显示设置", + "Select an available printer in File > Print before submitting." => "提交前请先在「文件 > 打印」中选择可用的打印机。", + "Settings" => "设置", + "Arrange All" => "全部重排", + "Format Painter" => "格式刷", + "Open Hyperlink" => "打开超链接", + "Run Script" => "运行脚本", + "Switch Windows" => "切换窗口", + "Arrange" => "排列", + "Advanced" => "高级", + "Check for\nUpdates…" => "检查\n更新…", + "Look for a newer GridCraft release" => "查找 GridCraft 的新版本", + "Resize\nTable" => "调整\n表格", + "Resize Table" => "调整表格大小", + "Medium" => "中等", + "of" => "页,共", + "Applies to" => "应用于", + "Formula" => "公式", + "Maximum" => "最大值", + "Minimum" => "最小值", + "New Formatting Rule" => "新建格式规则", + "and" => "到", + "a linked (not embedded) picture was skipped" => "已跳过链接图片(未嵌入)。", + "missing picture {target}" => "缺少图片 {target}。", + "chart {target} has no supported plot and was skipped" => "图表 {target} 不包含受支持的图表类型,已跳过。", + "a histogram, waterfall, treemap… chart without its chart part was skipped" => "没有对应图表部件的直方图、瀑布图、树状图…已跳过。", + "an embedded object (diagram, OLE…) was skipped" => "已跳过嵌入对象(图示、OLE…)。", + "grouped shapes are not supported and were skipped" => "不支持组合形状,已跳过。", + "XLSB data-only import: formulas become their saved results and will not recalculate. Formatting, charts, images, macros and other features are not imported; dates, currency and percentages may display as numbers. Save a new .xlsx file; XLSB saving is not supported." => { + "XLSB 仅导入数据:公式将变为已保存的结果,且不会重新计算。不导入格式、图表、图片、宏及其他功能;日期、货币和百分比可能显示为数字。请另存为新的 .xlsx 文件;不支持保存为 XLSB。" + } + "XLSB module sheets were skipped." => "已跳过 XLSB 模块工作表。", + "XLSB non-worksheet sheets were skipped." => "已跳过 XLSB 非工作表。", + "Unsupported XLSB future-record and alternate-content blocks were skipped." => "已跳过不受支持的 XLSB 未来记录和替代内容块。", + "Invalid XLSB merged ranges were skipped." => "已跳过无效的 XLSB 合并单元格区域。", + "{count} items in this file were handled differently. First: {warning}" => "此文件中的 {count} 个项目已按不同方式处理。首项:{warning}", + "Paste Special|Add" => "加", + "Text to Columns|Comma" => "逗号", + " (password)" => " (密码)", + " (password, unlocked)" => " (密码,已解锁)", + "$ English (United States)" => "$ 英语(美国)", + "'{file}' is protected." => "“{file}”处于受保护状态。", + "(No suggestions)" => "(无建议)", + "(unnamed)" => "(未命名)", + "+ Add Level" => "+ 添加级别", + "100% Stacked Area" => "100% 堆积面积图", + "100% Stacked Bar" => "100% 堆积条形图", + "100% Stacked Column" => "100% 堆积柱形图", + "20% - Accent1" => "20% - 强调文字颜色 1", + "20% - Accent2" => "20% - 强调文字颜色 2", + "20% - Accent3" => "20% - 强调文字颜色 3", + "20% - Accent4" => "20% - 强调文字颜色 4", + "20% - Accent5" => "20% - 强调文字颜色 5", + "20% - Accent6" => "20% - 强调文字颜色 6", + "3 Arrows" => "三向箭头", + "3 Symbols" => "三符号", + "3 Traffic Lights" => "三色交通灯", + "4 Ratings" => "四等级", + "40% - Accent1" => "40% - 强调文字颜色 1", + "40% - Accent2" => "40% - 强调文字颜色 2", + "40% - Accent3" => "40% - 强调文字颜色 3", + "40% - Accent4" => "40% - 强调文字颜色 4", + "40% - Accent5" => "40% - 强调文字颜色 5", + "40% - Accent6" => "40% - 强调文字颜色 6", + "5 Arrows" => "五向箭头", + "5 Quarters" => "五象限", + "60% - Accent1" => "60% - 强调文字颜色 1", + "60% - Accent2" => "60% - 强调文字颜色 2", + "60% - Accent3" => "60% - 强调文字颜色 3", + "60% - Accent4" => "60% - 强调文字颜色 4", + "60% - Accent5" => "60% - 强调文字颜色 5", + "60% - Accent6" => "60% - 强调文字颜色 6", + "A Date Occurring…" => "发生日期…", + "A to Z" => "A 到 Z", + "About" => "关于", + "Accent1" => "强调文字颜色 1", + "Accent2" => "强调文字颜色 2", + "Accent3" => "强调文字颜色 3", + "Accent4" => "强调文字颜色 4", + "Accent5" => "强调文字颜色 5", + "Accent6" => "强调文字颜色 6", + "Accessibility" => "辅助功能", + "Action" => "操作", + "Action Journal" => "操作日志", + "Add" => "添加", + "Add Chart Element" => "添加图表元素", + "Add subtotal to (columns, e.g. C,D):" => "将分类汇总添加到(列,如 C,D):", + "Add to Dictionary" => "添加到词典", + "Add-in and Automation" => "加载项和自动化", + "Agent Control" => "代理控制", + "Aggregate duplicates using" => "聚合重复项使用", + "Align Left" => "左对齐", + "Align Right" => "右对齐", + "Alignment" => "对齐", + "All Borders" => "所有框线", + "All Charts" => "所有图表", + "All done. We made {count} replacements." => "全部完成。共替换了 {count} 处。", + "All except borders" => "除边框外全部", + "Allow" => "允许", + "Allow all users of this sheet to:" => "允许此工作表的所有用户:", + "Alpha:" => "显著性水平 α:", + "Analysis Tools" => "分析工具", + "Anova: Single Factor" => "方差分析:单因素", + "Any value" => "任何值", + "Apply" => "应用", + "Area" => "面积图", + "Arrow" => "箭头", + "At each change in (column letter):" => "在每次更改时(列字母):", + "AutoSum (⌘⇧T)" => "自动求和 (⌘⇧T)", + "Average" => "平均值", + "Background Color:" => "背景色:", + "Bad" => "差", + "Bar" => "条形图", + "Before sheet (position, 0 = first):" => "位于工作表之前(位置,0 = 第一个):", + "Between…" => "介于…", + "Bin Range (blank for automatic bins):" => "接收区域(留空为自动分箱):", + "Blanks" => "空值", + "Blue" => "蓝色", + "Blue - White - Red" => "蓝 - 白 - 红", + "Bold (⌘B)" => "加粗 (⌘B)", + "Border" => "边框", + "Bottom" => "底端", + "Bottom Align" => "底端对齐", + "Bottom Border" => "下框线", + "Bottom Double Border" => "双下框线", + "Bottom margin (in):" => "下边距(英寸):", + "Box & Whisker" => "箱线图", + "Bubble" => "气泡图", + "By Changing Variable Cells:" => "通过更改可变单元格:", + "By changing cell:" => "可变单元格:", + "Calculate Now (F9)" => "立即计算 (F9)", + "Calculate Sheet (⇧F9)" => "计算工作表 (⇧F9)", + "Calculated Field…" => "计算字段…", + "Calculation" => "计算", + "Calculation Options" => "计算选项", + "Category:" => "类别:", + "Cell Color" => "单元格颜色", + "Cell Styles" => "单元格样式", + "Cell Values" => "单元格值", + "Center Across Selection" => "跨列居中", + "Change" => "更改", + "Change All" => "全部更改", + "Change Chart Type" => "更改图表类型", + "Chart" => "图表", + "Chart Title" => "图表标题", + "Chart data range:" => "图表数据区域:", + "Check Accessibility" => "检查辅助功能", + "Check Cell" => "检查单元格", + "Choose a PNG or JPEG no larger than 16 MB." => "选择一张不超过 16 MB 的 PNG 或 JPEG 图片。", + "Choose fields to add to report:" => "选择要添加到报表中的字段:", + "Clear Filter" => "清除筛选", + "Clear Rules" => "清除规则", + "Clustered Bar" => "簇状条形图", + "Clustered Column" => "簇状柱形图", + "Color:" => "颜色:", + "Column" => "列", + "Column Width" => "列宽", + "Column chart" => "柱形图", + "Column or Bar" => "柱形图或条形图", + "Column width (characters):" => "列宽(字符):", + "Column widths" => "列宽", + "Columns" => "列", + "Columns (blank = all, e.g. A,C):" => "列(留空 = 全部,如 A,C):", + "Combo" => "组合图", + "Comma" => "逗号", + "Comma [0]" => "逗号 [0]", + "Comment:" => "批注:", + "Comments and notes (C)" => "批注和注释 (C)", + "Comments pane" => "批注窗格", + "Compact" => "紧凑", + "Compatibility" => "兼容性", + "Conditional Formatting Rules Manager" => "条件格式规则管理器", + "Conditional formats" => "条件格式", + "Confidence Level (%):" => "置信水平(%):", + "Confidence Level for Mean (%), blank for none:" => "平均值的置信水平(%),留空表示无:", + "Confidence interval" => "置信区间", + "Confidence level (%):" => "置信水平(%):", + "Constant is Zero" => "常数为零", + "Contributors" => "贡献者", + "Convert Text to Columns" => "文本转换为列", + "Convert the last ink stroke to a shape" => "将最后一条墨迹转换为形状", + "Convert to Number" => "转换为数字", + "Convert to Range" => "转换为区域", + "Copies" => "份数", + "Copy (⌘C)" => "复制 (⌘C)", + "Correlation" => "相关", + "Count" => "计数", + "CountA" => "COUNTA", + "Covariance" => "协方差", + "Create Forecast Worksheet" => "创建预测工作表", + "Create Sparklines" => "创建迷你图", + "Create a copy" => "建立副本", + "Cube" => "多维数据集", + "Cumulative Percentage" => "累积百分比", + "Currency [0]" => "货币 [0]", + "Current region" => "当前区域", + "Custom (%):" => "自定义(%):", + "Custom Sort" => "自定义排序", + "Cut (⌘X)" => "剪切 (⌘X)", + "Damping factor:" => "阻尼系数:", + "Data Range:" => "数据区域:", + "Data and Model" => "数据和模型", + "Data validation" => "数据验证", + "Database" => "数据库", + "Date unit" => "日期单位", + "Day" => "日", + "Decimal" => "小数", + "Define Name…" => "定义名称…", + "Delete Comment" => "删除批注", + "Delete Sheet" => "删除工作表", + "Delete chart" => "删除图表", + "Delete rows" => "删除行", + "Delete…" => "删除…", + "Description (optional):" => "说明(可选):", + "Descriptive Statistics" => "描述统计", + "Destination:" => "目标区域:", + "Diagonal ↗" => "对角线 ↗", + "Diagonal ↘" => "对角线 ↘", + "Dismiss" => "忽略", + "Display:" => "显示:", + "Distributed" => "分散对齐", + "Divide" => "除", + "Do you want to save the changes you made to {title}?" => "是否保存对“{title}”的更改?", + "Don't Save" => "不保存", + "Double" => "双下划线", + "Double Accounting" => "会计用双下划线", + "Doughnut" => "圆环图", + "Down" => "向下", + "Down, then over" => "先向下,再向右", + "Drag to fill cells. Drag from inside a cell to select a range." => "拖动以填充单元格。从单元格内部拖动可选择区域。", + "Duplicate Values…" => "重复值…", + "Edit Name" => "编辑名称", + "Edit chart title" => "编辑图表标题", + "Edit…" => "编辑…", + "End date:" => "结束日期:", + "Engineering" => "工程", + "Entire column" => "整列", + "Entire row" => "整行", + "Equal To…" => "等于…", + "Erase ink strokes" => "擦除墨迹", + "Error checking options" => "错误检查选项", + "Error message:" => "错误消息:", + "Error style" => "错误样式", + "Errors" => "错误", + "Every command run in this session (replayable)" => "本会话中运行的每条命令(可重放)", + "Expand formula bar" => "展开编辑栏", + "Explanatory Text" => "说明文字", + "Exponential Smoothing" => "指数平滑", + "Export as CSV…" => "导出为 CSV…", + "Export as PDF…" => "导出为 PDF…", + "Export as Web Page (.html)…" => "导出为网页 (.html)…", + "F-Test Two-Sample for Variances" => "F-检验 双样本方差", + "Fill missing points using" => "使用以下方式填充缺失点", + "Filter (⌘⇧F)" => "筛选 (⌘⇧F)", + "Filter by Selected Cell's Value" => "按所选单元格的值筛选", + "Filters" => "筛选", + "Find" => "查找", + "Find & Select" => "查找和选择", + "Find All" => "全部查找", + "Find Next" => "查找下一个", + "Find and Replace" => "查找和替换", + "Find what:" => "查找内容:", + "Finding printers…" => "正在查找打印机…", + "Fits inside the selected cell and moves with its content." => "嵌入所选单元格内并随其内容移动。", + "Flash Fill (⌘E)" => "快速填充 (⌘E)", + "Font" => "字体", + "Footer (in):" => "页脚(英寸):", + "Footer:" => "页脚:", + "Forecast Sheet" => "预测工作表", + "Forecast end (date or number; blank: a third of the history):" => "预测结束(日期或数字;留空:历史的三分之一):", + "Forecast start (a date or number in the history; blank: after the last point):" => "预测开始(历史中的日期或数字;留空:最后一个点之后):", + "Format Cells" => "设置单元格格式", + "Format Cells|Fill" => "填充", + "Format Chart Area…" => "设置图表区格式…", + "Format Chart pane" => "设置图表窗格", + "Format as Table" => "套用表格格式", + "Format cells" => "设置单元格格式", + "Format cells that are (value):" => "对以下内容的单元格设置格式(值):", + "Format cells that contain a date occurring:" => "对包含以下发生日期的单元格设置格式:", + "Format cells that contain the text:" => "对包含以下文本的单元格设置格式:", + "Format columns" => "设置列格式", + "Format rows" => "设置行格式", + "Format values where this formula is true:" => "对满足以下公式的值设置格式:", + "Formats (T)" => "格式 (T)", + "Formula:" => "公式:", + "Formulas (F)" => "公式 (F)", + "Formulas and number formats" => "公式和数字格式", + "Funnel" => "漏斗图", + "GRG Nonlinear" => "GRG 非线性", + "Go To" => "定位", + "Go To Special" => "定位条件", + "Goal Seek" => "单变量求解", + "Goal Seeking found a solution: {value}" => "单变量求解找到一个解:{value}", + "Good" => "好", + "Good, Bad and Neutral" => "好、差和中性", + "Gradebook" => "成绩册", + "Grayscale" => "灰度", + "Greater Than…" => "大于…", + "Green" => "绿色", + "Green - White - Red" => "绿 - 白 - 红", + "Green - Yellow - Red" => "绿 - 黄 - 红", + "Green Fill with Dark Green Text" => "绿填充色深绿色文本", + "Group by Months" => "按月组合", + "Group by Quarters" => "按季度组合", + "Group by Years" => "按年组合", + "Grouped By:" => "分组方式:", + "Growth" => "增长", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "页眉(&L 左侧,&C 中间,&R 右侧;&P 页码,&N 总页数,&D 日期,&A 工作表名):" + } + "Header (in):" => "页眉(英寸):", + "Heading 1" => "标题 1", + "Heading 2" => "标题 2", + "Heading 3" => "标题 3", + "Heading 4" => "标题 4", + "Hex" => "十六进制", + "Hidden" => "隐藏", + "Hidden: {sheets}" => "已隐藏:{sheets}", + "Hide Sheet" => "隐藏工作表", + "Hierarchy & more" => "层次结构等", + "Highlight Cells Rules" => "突出显示单元格规则", + "Highlighter" => "荧光笔", + "Histogram" => "直方图", + "Horizontal (Category) Axis Labels:" => "水平(分类)轴标签:", + "Horizontal axis title:" => "横坐标轴标题:", + "Household Budget" => "家庭预算", + "How agents drive GridCraft (MCP / control channel)" => "代理如何驱动 GridCraft(MCP / 控制通道)", + "Hypothesized Mean Difference:" => "假设平均差:", + "Ignore Once" => "忽略一次", + "Ignore blank" => "忽略空值", + "Import a text or CSV file" => "导入文本或 CSV 文件", + "In the last 7 days" => "最近 7 天内", + "In-cell dropdown" => "提供下拉箭头", + "Include forecast statistics" => "包括预测统计信息", + "Indent" => "缩进", + "Information" => "信息", + "Input" => "输入", + "Input Range:" => "输入区域:", + "Input X Range:" => "X 值输入区域:", + "Input Y Range:" => "Y 值输入区域:", + "Input message:" => "输入信息:", + "Insert\nSlicer" => "插入\n切片器", + "Insert Calculated Field" => "插入计算字段", + "Insert Chart" => "插入图表", + "Insert Function (⇧F3)" => "插入函数 (⇧F3)", + "Insert Hyperlink" => "插入超链接", + "Insert Link" => "插入链接", + "Insert Link (⌘K)" => "插入链接 (⌘K)", + "Insert Slicer" => "插入切片器", + "Insert a picture" => "插入图片", + "Insert a slicer to filter a table" => "插入切片器以筛选表格", + "Insert an icon" => "插入图标", + "Insert rows" => "插入行", + "Insert…" => "插入…", + "Inside Borders" => "内部框线", + "Interpolation" => "插值", + "Interval:" => "间隔:", + "Italic (⌘I)" => "斜体 (⌘I)", + "Join the ArtCraft Discord" => "加入 ArtCraft Discord", + "Justify" => "两端对齐", + "Keep" => "保留", + "Keep Solver Solution" => "保留规划求解的解", + "Kth Largest (blank for none):" => "第 K 大值(留空表示无):", + "Kth Smallest (blank for none):" => "第 K 小值(留空表示无):", + "Labels in first row" => "标志位于第一行", + "Last cell" => "最后一个单元格", + "Last month" => "上月", + "Last week" => "上周", + "Left Border" => "左框线", + "Left margin (in):" => "左边距(英寸):", + "Legend Entries (Series)" => "图例项(系列)", + "Less Than…" => "小于…", + "Light Blue" => "浅蓝", + "Light Red Fill" => "浅红填充色", + "Light Red Fill with Dark Red Text" => "浅红填充色深红色文本", + "Line" => "折线图", + "Shape|Line" => "直线", + "Line chart" => "折线图", + "Line or Area" => "折线图或面积图", + "Line with Markers" => "带数据标记的折线图", + "Linear" => "线性", + "Link to (web address, e-mail or Sheet!A1):" => "链接到(网址、电子邮件或工作表!A1):", + "Linked Cell" => "链接单元格", + "Link…" => "链接…", + "List" => "序列", + "Location Range:" => "位置区域:", + "Locked" => "锁定", + "Macros and scripts in this workbook (Alt+F8)" => "此工作簿中的宏和脚本 (Alt+F8)", + "Make Unconstrained Variables Non-Negative" => "使无约束变量为非负数", + "Manage Rules…" => "管理规则…", + "Markers" => "数据标记", + "Match case" => "区分大小写", + "Match entire cell contents" => "匹配整个单元格内容", + "Max" => "最大值", + "Maximum:" => "最大值:", + "Median" => "中值", + "Middle Align" => "垂直居中", + "Min" => "最小值", + "Minimum / Source / Formula:" => "最小值 / 源 / 公式:", + "Models" => "模型", + "Modify" => "修改", + "Month" => "月", + "More Borders…" => "其他边框…", + "More Colors…" => "其他颜色…", + "More Functions…" => "其他函数…", + "More commands" => "其他命令", + "Move or Copy" => "移动或复制", + "Move or Copy Sheet…" => "移动或复制工作表…", + "Move to Column Labels" => "移动到列标签", + "Move to Report Filter" => "移动到报表筛选", + "Move to Row Labels" => "移动到行标签", + "Move to Values" => "移动到值", + "Moving Average" => "移动平均", + "Multiply" => "乘", + "My data has headers" => "数据包含标题", + "My list has headers" => "列表包含标题", + "Name" => "名称", + "Name Manager" => "名称管理器", + "Name:" => "名称:", + "Neutral" => "中性", + "New Comment" => "新建批注", + "New Name" => "新建名称", + "New Rule…" => "新建规则…", + "New Workbook" => "新建工作簿", + "New Worksheet Ply:" => "新工作表:", + "New title (Modify):" => "新标题(修改):", + "New…" => "新建…", + "Next month" => "下月", + "Next week" => "下周", + "No Border" => "无框线", + "No Fill" => "无填充", + "No names defined" => "尚未定义名称", + "No picture selected" => "未选择图片", + "No printers found. Configure a system printer or export a PDF." => "未找到打印机。请配置系统打印机或导出 PDF。", + "No ranges yet." => "暂无区域。", + "None" => "无", + "Normal Probability" => "正态概率图", + "Not in Dictionary ({cell}):" => "不在词典中({cell}):", + "Note" => "注释", + "Note:" => "注释:", + "Number Format" => "数字格式", + "Number Stored as Text" => "以文本形式存储的数字", + "Numbers" => "数字", + "OK" => "确定", + "One-sided" => "单面", + "Open…" => "打开…", + "Operation" => "运算", + "Options|Editing" => "编辑", + "Orange" => "橙色", + "Orientation (degrees)" => "方向(度)", + "Other:" => "其他:", + "Outline" => "分级显示", + "Data Table|Outline" => "外框线", + "Output" => "输出", + "Output Range:" => "输出区域:", + "Output options" => "输出选项", + "Outside Borders" => "外侧框线", + "Oval" => "椭圆", + "Over, then down" => "先向右,再向下", + "Page Break Preview" => "分页预览", + "Page Breaks" => "分页符", + "Page Setup" => "页面设置", + "Page order" => "页面顺序", + "Paper Size" => "纸张大小", + "Pareto (sorted histogram)" => "排列图(排序直方图)", + "Password" => "密码", + "Password (optional):" => "密码(可选):", + "Password:" => "密码:", + "Paste (⌘V)" => "粘贴 (⌘V)", + "Paste Special" => "选择性粘贴", + "Paste formulas that refer to the copied cells" => "粘贴引用所复制单元格的公式", + "Pen\nBlack" => "笔\n黑色", + "Pen\nBlue" => "笔\n蓝色", + "Pen\nRed" => "笔\n红色", + "Percent" => "百分比", + "Pick From Drop-down List…" => "从下拉列表中选择…", + "Pick From List" => "从列表中选择", + "Picture file path (PNG or JPEG):" => "图片文件路径(PNG 或 JPEG):", + "Pie" => "饼图", + "Pie or Doughnut" => "饼图或圆环图", + "PivotTable Fields" => "数据透视表字段", + "Place Picture in Cell" => "将图片置于单元格中", + "Place Picture over Cells" => "将图片置于单元格上方", + "Place in Cell" => "置于单元格中", + "Place over Cells" => "置于单元格上方", + "Print Area" => "打印区域", + "Print Titles" => "打印标题", + "Print failed: the printing worker stopped." => "打印失败:打印工作进程已停止。", + "Print failed: {error}" => "打印失败:{error}", + "Print job submitted." => "已提交打印任务。", + "Print job submitted: {receipt}" => "已提交打印任务:{receipt}", + "Printer" => "打印机", + "Printer default" => "打印机默认值", + "Printer discovery failed." => "打印机发现失败。", + "Print…" => "打印…", + "Product" => "乘积", + "Protect\nSheet" => "保护\n工作表", + "Protect Sheet" => "保护工作表", + "Protect Structure and Windows" => "保护结构和窗口", + "Protect Workbook structure" => "保护工作簿结构", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "保护工作簿:结构(不能添加、移动、重命名、隐藏或删除工作表)。" + } + "Protection" => "保护", + "Purple" => "紫色", + "Quarterly Sales Dashboard" => "季度销售仪表板", + "Radar" => "雷达图", + "Range password:" => "区域密码:", + "Ranges that stay editable when the sheet is protected:" => "工作表受保护时仍可编辑的区域:", + "Rank and Percentile" => "排位和百分比排位", + "Recent Colors" => "最近使用的颜色", + "Recommended Charts" => "推荐的图表", + "Rectangle" => "矩形", + "Red" => "红色", + "Red - Yellow - Green" => "红 - 黄 - 绿", + "Red Border" => "红色边框", + "Red Text" => "红色文本", + "Redo" => "恢复", + "Redo (⌘Y)" => "恢复 (⌘Y)", + "Reference:" => "引用:", + "Refers To" => "引用位置", + "Refers to cells:" => "引用单元格:", + "Refers to:" => "引用:", + "Refresh" => "刷新", + "Refresh printers" => "刷新打印机", + "Regression" => "回归", + "Remove" => "删除", + "Remove Duplicates" => "删除重复项", + "Remove Field" => "删除字段", + "Remove the password (Modify)" => "移除密码(修改)", + "Rename Sheet" => "重命名工作表", + "Replace" => "替换", + "Replace All" => "全部替换", + "Replace with:" => "替换为:", + "Report Layout" => "报表布局", + "Residuals" => "残差", + "Restore Original Values" => "恢复初始值", + "Right Border" => "右框线", + "Right margin (in):" => "右边距(英寸):", + "Rounded Rectangle" => "圆角矩形", + "Row Height" => "行高", + "Row height (pixels):" => "行高(像素):", + "Rows" => "行", + "Sample" => "示例", + "Save (⌘S)" => "保存 (⌘S)", + "Save As…" => "另存为…", + "Save Changes?" => "保存更改?", + "Save a Copy" => "保存副本", + "Save a Copy as Excel Workbook (.xlsx)…" => "将副本保存为 Excel 工作簿 (.xlsx)…", + "Save a copy as .{format}" => "将副本保存为 .{format}", + "Scatter" => "散点图", + "Scatter or Bubble" => "散点图或气泡图", + "Scatter with Lines" => "带直线的散点图", + "Scope" => "范围", + "Scope (Workbook or sheet name):" => "范围(工作簿或工作表名):", + "ScreenTip:" => "屏幕提示:", + "Search" => "搜索", + "Search Commands" => "搜索命令", + "Search and run any command" => "搜索并运行任意命令", + "Search commands" => "搜索命令", + "Search commands (⌘⇧Space)" => "搜索命令 (⌘⇧Space)", + "Seasonality (auto, 0 for none, or a season length):" => "季节性(自动、0 表示无,或季长):", + "Select" => "选择", + "Select Data" => "选择数据", + "Select Data Source" => "选择数据源", + "Select Data…" => "选择数据…", + "Select a Solving Method:" => "选择求解方法:", + "Select a chart first." => "请先选择一个图表。", + "Select a printer" => "选择打印机", + "Select and move ink and shapes" => "选择并移动墨迹和形状", + "Semicolon" => "分号", + "Series" => "系列", + "Series in" => "系列产生在", + "Series{n}" => "系列{n}", + "Series…" => "系列…", + "Set Objective:" => "设置目标:", + "Set cell:" => "设置单元格:", + "Share: export or save a copy" => "共享:导出或保存副本", + "Sheets: {sheets}" => "工作表:{sheets}", + "Shift cells down" => "下方单元格下移", + "Shift cells left" => "右侧单元格左移", + "Shift cells right" => "右侧单元格右移", + "Shift cells up" => "下方单元格上移", + "Show Formulas (⌃`)" => "显示公式 (⌃`)", + "Show as % of Grand Total" => "显示为总计的百分比", + "Show as No Calculation" => "显示为不计算", + "Show as Rank" => "显示为排位", + "Show as Running Total" => "显示为累计值", + "Show password" => "显示密码", + "Shrink to fit" => "缩小字体填充", + "Single" => "单下划线", + "Single Accounting" => "会计用单下划线", + "Skip blanks" => "跳过空单元格", + "Slicer" => "切片器", + "Solve" => "求解", + "Solver Parameters" => "规划求解参数", + "Solver Results" => "规划求解结果", + "Sort & Filter" => "排序和筛选", + "Sort Ascending" => "升序排序", + "Sort Descending" => "降序排序", + "Sort by" => "排序依据", + "Source:" => "来源:", + "Space" => "空格", + "Special…" => "特殊…", + "Spelling (F7)" => "拼写检查 (F7)", + "Stacked Area" => "堆积面积图", + "Stacked Bar" => "堆积条形图", + "Stacked Column" => "堆积柱形图", + "Stacked Line" => "堆积折线图", + "Standard Colors" => "标准颜色", + "Standard Errors" => "标准误差", + "Standard Width" => "标准列宽", + "Standard column width (pixels):" => "标准列宽(像素):", + "Standardized Residuals" => "标准化残差", + "Start a conversation:" => "开始对话:", + "Start a new workbook" => "新建工作簿", + "Statistic" => "统计", + "Statistical" => "统计", + "Step value:" => "步长值:", + "Stock" => "股价图", + "Stop value:" => "终止值:", + "Subject to the Constraints:" => "遵守约束:", + "Submitting print job…" => "正在提交打印任务…", + "Subscript" => "下标", + "Subtract" => "减", + "Suggestions:" => "建议:", + "Sum" => "求和", + "Summarize by Average" => "按平均值汇总", + "Summarize by Count" => "按计数汇总", + "Summarize by Max" => "按最大值汇总", + "Summarize by Min" => "按最小值汇总", + "Summarize by Sum" => "按求和汇总", + "Summary statistics" => "汇总统计", + "Sunburst" => "旭日图", + "Superscript" => "上标", + "Switch Row/Column" => "切换行/列", + "Tab" => "制表符", + "Table (⌘T)" => "表格 (⌘T)", + "Table Styles" => "表格样式", + "Tabular" => "表格形式", + "Tab|Insert" => "插入", + "Text length" => "文本长度", + "Text that Contains…" => "文本包含…", + "Text to Columns" => "分列", + "The output range already holds data. Replace it with the report?" => "输出区域中已有数据。用报表替换它吗?", + "The spelling check is complete for the entire sheet." => "工作表拼写检查已完成。", + "Theme Colors" => "主题颜色", + "Themed Cell Styles" => "主题单元格样式", + "Then by" => "次要关键字", + "There are no conditional formatting rules on this sheet." => "此工作表上没有条件格式规则。", + "Thick Bottom Border" => "粗底框线", + "Thick Outside Borders" => "粗匣框线", + "This month" => "本月", + "This week" => "本周", + "This workbook" => "此工作簿", + "Timeline range (blank: first column of the selection):" => "时间线区域(留空:选定区域的第一列):", + "Title:" => "标题:", + "Titles and Headings" => "标题和题目", + "To value:" => "目标值:", + "To:" => "到:", + "Today" => "今天", + "Tomorrow" => "明天", + "Top" => "顶端", + "Top Align" => "顶端对齐", + "Top Border" => "上框线", + "Top and Bottom Border" => "上下框线", + "Top and Double Bottom Border" => "上框线和双下框线", + "Top and Thick Bottom Border" => "上框线和粗下框线", + "Top margin (in):" => "上边距(英寸):", + "Top/Bottom Rules" => "最前/最后规则", + "Total" => "总计", + "Transpose (E)" => "转置 (E)", + "Treat consecutive delimiters as one" => "将连续分隔符视为一个", + "Treemap" => "树状图", + "Triangle" => "三角形", + "Two-sided printing" => "双面打印", + "Two-sided: long edge" => "双面:长边", + "Two-sided: short edge" => "双面:短边", + "Type" => "类型", + "Type (custom format code):" => "类型(自定义格式代码):", + "Type a command, e.g. freeze, chart, bold…" => "输入命令,如冻结、图表、加粗…", + "Underline (⌘U)" => "下划线 (⌘U)", + "Undo" => "撤销", + "Undo (⌘Z)" => "撤销 (⌘Z)", + "Undo list" => "撤销列表", + "Unhide" => "取消隐藏", + "Unhide Sheet…" => "取消隐藏工作表…", + "Unhide sheet:" => "取消隐藏工作表:", + "Unlock with password" => "使用密码解锁", + "Unprotect Sheet" => "撤销工作表保护", + "Unprotect Workbook" => "撤销工作簿保护", + "Up" => "向上", + "Use AutoFilter" => "使用自动筛选", + "Use a field's menu to move it between areas:" => "使用字段菜单在区域之间移动它:", + "Use function" => "使用函数", + "Validation" => "验证", + "Value" => "值", + "Value Of:" => "值为:", + "Values" => "数值", + "Values (V)" => "值 (V)", + "Values and number formats" => "值和数字格式", + "Values range (blank: second column of the selection):" => "值区域(留空:选定区域的第二列):", + "Variable 1 Range:" => "变量 1 区域:", + "Variable 2 Range:" => "变量 2 区域:", + "Version {version}" => "版本 {version}", + "Vertical" => "垂直", + "Vertical axis title:" => "纵坐标轴标题:", + "Visible cells only" => "仅可见单元格", + "Warning" => "警告", + "Warning Text" => "警告文本", + "Watch\nWindow" => "监视\n窗口", + "Waterfall" => "瀑布图", + "Web" => "Web", + "Weekday" => "工作日", + "What-If Analysis" => "模拟分析", + "White - Green" => "白 - 绿", + "White - Red" => "白 - 红", + "Whole number" => "整数", + "Win/Loss" => "盈亏", + "Within workbook" => "工作簿内", + "Workbook" => "工作簿", + "Workbook\nStatistics" => "工作簿\n统计信息", + "Workbook Statistics" => "工作簿统计信息", + "Wrap text" => "自动换行", + "Year" => "年", + "Yellow Fill with Dark Yellow Text" => "黄填充色深黄色文本", + "Z to A" => "Z 到 A", + "Zeros" => "零", + "Zoom In" => "放大", + "Zoom Out" => "缩小", + "Zoom to 100%" => "缩放到 100%", + "Zoom to Selection" => "缩放到选定区域", + "Zoom…" => "缩放…", + "and:" => "和:", + "applies to" => "应用于", + "between" => "介于", + "dashed" => "虚线", + "dotted" => "点线", + "double" => "双线", + "equal to" => "等于", + "greater than" => "大于", + "greater than or equal to" => "大于或等于", + "less than" => "小于", + "less than or equal to" => "小于或等于", + "medium" => "中等", + "none" => "无", + "not between" => "不介于", + "not equal to" => "不等于", + "t-Test: Paired Two Sample for Means" => "t-检验:平均值的成对二样本分析", + "t-Test: Two-Sample Assuming Equal Variances" => "t-检验:双样本等方差假设", + "t-Test: Two-Sample Assuming Unequal Variances" => "t-检验:双样本异方差假设", + "thick" => "粗线", + "thin" => "细线", + "this workbook" => "此工作簿", + "with" => "与", + "{count} cell(s) found" => "找到 {count} 个单元格", + "£ English (United Kingdom)" => "£ 英语(英国)", + "¥ Japanese" => "¥ 日语", + "— 1 step" => "— 1 步", + "— VBA project (preserved, not run)" => "— VBA 工程(保留,不运行)", + "— {steps} steps" => "— {steps} 步", + "€ Euro" => "€ 欧元", "Diagram" => "图示", "Decorative Text" => "装饰文字", "Paste" => "粘贴", @@ -29,7 +902,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Wrap Text" => "自动换行", "Merge & Center" => "合并后居中", "Merge Cells" => "合并单元格", - "Merge Across" => "跨行合并", + "Merge Across" => "跨越合并", "Unmerge Cells" => "取消合并单元格", "Fill Color" => "填充颜色", "Font Color" => "字体颜色", @@ -418,6 +1291,7 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Print Entire Workbook" => "打印整个工作簿", "Fit Sheet on One Page" => "将工作表调整为一页", "Page Setup…" => "页面设置…", + "Page {page}" => "第 {page} 页", "Page {page} of {pages}" => "第 {page} 页,共 {pages} 页", "Nothing to print." => "没有可打印的内容。", "Previous page" => "上一页", @@ -439,7 +1313,6 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Show sheet tabs" => "显示工作表标签", "Edit Hyperlink…" => "编辑超链接…", "Edit Hyperlink" => "编辑超链接", - "Open Hyperlink" => "打开超链接", "Remove Hyperlink" => "删除超链接", "Resize formula bar" => "调整编辑栏大小", "Enable AutoComplete for cell values" => "为单元格值启用记忆式键入", @@ -477,6 +1350,31 @@ pub(super) fn translate(text: &str) -> Option<&'static str> { "Stop" => "停止", "New Macro" => "新建宏", "Show" => "显示", + "Generated|Column" => "列", + "Generated|Row" => "行", + "Book" => "工作簿", + "Sheet" => "工作表", + "Count Numbers" => "计数数值", + "Type to filter…" => "键入以筛选…", + "Nothing to paste." => "没有可粘贴的数据。", + "No cells were found." => "未找到单元格。", + "Or select a category:" => "或选择类别:", + "Most Recently Used" => "最近使用的函数", + "Insert Function…" => "插入函数…", + "Paste Names…" => "粘贴名称…", + "Macro name:" => "宏名:", + "Shortcut key:" => "快捷键:", + "Description:" => "说明:", + "This workbook has no scripts or macros." => "此工作簿中没有脚本或宏。", + "Check for Updates…" => "检查更新…", + "Checking for updates…" => "正在检查更新…", + "Could not check for updates." => "无法检查更新。", + "Check Again" => "重新检查", + "Insert Function" => "插入函数", + "Search:" => "搜索:", + "e.g. lookup, average, date" => "例如:查找、平均值、日期", + "Cancel" => "取消", + "All" => "全部", "Collapse dialog" => "折叠对话框", "Expand dialog" => "展开对话框", _ => return None, diff --git a/crates/ui-egui/src/i18n/zh_functions.rs b/crates/ui-egui/src/i18n/zh_functions.rs new file mode 100644 index 0000000000..7369de0a95 --- /dev/null +++ b/crates/ui-egui/src/i18n/zh_functions.rs @@ -0,0 +1,810 @@ +//! Localized worksheet-function help, keyed by the original GridCraft catalog. +//! Machine-assisted drafts and existing rows are reviewed against the English catalog. +//! See docs/localization-parity.md for provenance and review limits. + +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "1 表示正,-1 表示负,0 表示零。"), + ("A random integer between two bounds, inclusive.", "两个边界之间的随机整数(含边界在内)。"), + ("A random number between 0 and 1, recalculated every time.", "0 到 1 之间的随机数,每次都会重新计算。"), + ("A range or array without its blank outer rows and columns.", "没有空白外部行和列的范围或数组。"), + ("A reference shifted from a starting point.", "从起始引用偏移得到的引用。"), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "FORECAST.ETS 模型的统计量:1 alpha、2 beta、3 gamma、4 MASE、5 SMAPE、6 MAE、7 RMSE、8 步长。", + ), + ("A subtotal that can skip hidden rows.", "可以跳过隐藏行的小计。"), + ("Absolute value (modulus) of a complex number.", "复数的绝对值(模)。"), + ("Absolute value of a number.", "数字的绝对值。"), + ("Accrued interest of a security paying interest at maturity.", "到期支付利息的证券的应计利息。"), + ("Accrued interest of a security paying periodic interest.", "定期支付利息的证券的应计利息。"), + ("Accumulates an array into one value.", "将数组累加为一个值。"), + ("Adds all the numbers in the arguments.", "将参数中的所有数值相加。"), + ("Adds the cells that meet a condition.", "返回满足条件的电子表格单元格中的数值总和。"), + ("Adds the cells that meet every condition.", "返回满足所有条件的电子表格单元格中的数值总和。"), + ("Adds the numbers in a field of the records that meet the criteria.", "对于满足条件的记录,返回数据库字段中数值的总和。"), + ("Adds the squares of the numbers.", "返回数字的平方和。"), + ("Amount received at maturity for a fully invested security.", "全额支付的证券到期时收到的金额。"), + ("An aggregate that can skip hidden rows and errors.", "可以跳过隐藏行和错误的聚合。"), + ("Angle of a complex number in radians.", "复数的幅角(以弧度表示)。"), + ("Angle of the point (x, y) from the x-axis in radians.", "点 (x, y) 与 x 轴的角度(以弧度表示)。"), + ("Annual yield of a discounted security.", "贴现证券的年收益率。"), + ("Annual yield of a security paying interest at maturity.", "到期支付利息的证券的年收益率。"), + ("Applies a LAMBDA to each column.", "将 LAMBDA 应用于每列。"), + ("Applies a LAMBDA to each row.", "对每一行应用 LAMBDA。"), + ("Applies a LAMBDA to each value.", "将 LAMBDA 应用于每个值。"), + ("Approximate lookup in a sorted vector or the first row/column of an array.", "在排序向量或数组的第一行/列中进行近似查找。"), + ("Arccosine in radians.", "以弧度表示的反余弦。"), + ("Arccotangent in radians (0 to pi).", "以弧度表示的反余切(0 到 pi)。"), + ("Arcsine in radians.", "以弧度表示的反正弦。"), + ("Arctangent in radians.", "以弧度表示的反正切。"), + ("Arithmetic mean of the numbers.", "数字的算术平均值。"), + ("Average absolute deviation from the mean.", "与平均值的平均绝对偏差。"), + ("Average of the cells that meet a condition.", "满足条件的电子表格单元格的平均值。"), + ("Average of the cells that meet every condition.", "满足每个条件的电子表格单元格的平均值。"), + ("Averages the numbers in a field of the records that meet the criteria.", "对满足条件的记录的字段中的数字进行平均。"), + ("Base-10 logarithm of a complex number.", "复数以 10 为底的对数。"), + ("Base-10 logarithm.", "以 10 为底的对数。"), + ("Base-2 logarithm of a complex number.", "复数的以 2 为底的对数。"), + ("Bessel function of the first kind, J_n(x).", "第一类贝塞尔函数,J_n(x)。"), + ("Bessel function of the second kind, Y_n(x).", "第二类贝塞尔函数,Y_n(x)。"), + ("Beta distribution density or probability.", "Beta 分布密度或概率。"), + ("Binomial probability.", "二项式概率。"), + ("Bitwise AND of two non-negative integers.", "两个非负整数的按位 AND。"), + ("Bitwise OR of two non-negative integers.", "两个非负整数的按位 OR。"), + ("Bitwise exclusive OR of two non-negative integers.", "两个非负整数的按位异或。"), + ("Bond-equivalent yield of a Treasury bill.", "国库券的债券等值收益率。"), + ("Breaks a row or column into columns of the given length.", "将行或列分成给定长度的列。"), + ("Breaks a row or column into rows of the given length.", "将行或列分成给定长度的行。"), + ("Builds a cell address as text from row and column numbers.", "根据行号和列号将单元格地址构建为文本。"), + ("Builds a complex number as text from real and imaginary parts.", "从实部和虚部构建一个复数作为文本。"), + ("Builds a date serial number from a year, month and day.", "根据年、月、日构建日期序列号。"), + ("Builds a summary table grouping values by row and column fields.", "构建按行和列字段对值进行分组的汇总表。"), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "根据小时、分钟和秒构建时间(一天的一小部分)。"), + ("Builds an array from a LAMBDA.", "从 LAMBDA 构建一个数组。"), + ("Builds an array of evenly stepped numbers.", "构建均匀步进数字的数组。"), + ("Builds an array of random numbers in a range.", "构建一个范围内的随机数数组。"), + ("Byte version of FIND.", "FIND 的字节版本。"), + ("Byte version of LEFT (same as LEFT for single-byte text).", "LEFT 的字节版本(与单字节文本的 LEFT 相同)。"), + ("Byte version of LEN (same as LEN for single-byte text).", "LEN 的字节版本(与单字节文本的 LEN 相同)。"), + ("Byte version of MID (same as MID for single-byte text).", "MID 的字节版本(与单字节文本的 MID 相同)。"), + ("Byte version of REPLACE.", "REPLACE 的字节版本。"), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "RIGHT 的字节版本(与单字节文本的 RIGHT 相同)。"), + ("Byte version of SEARCH.", "SEARCH 的字节版本。"), + ("Capitalises the first letter of each word and lower-cases the rest.", "每个单词的第一个字母大写,其余字母小写。"), + ("Chi-squared density or left-tailed probability.", "卡方密度或左尾概率。"), + ("Chi-squared test of independence.", "卡方独立性检验。"), + ("Column number of a reference.", "返回引用的列号。"), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "将表达式与值列表进行比较,并返回与第一个匹配项配对的结果。", + ), + ("Complementary error function, 1 - ERF(x).", "互补误差函数,1 - ERF(x)。"), + ("Complex conjugate of a complex number.", "复数的复共轭。"), + ("Confidence interval half-width using Student's t distribution.", "使用 Student t 分布的置信区间半宽。"), + ("Confidence interval half-width using the normal distribution.", "使用正态分布的置信区间半宽。"), + ("Converts Roman numerals to a number.", "将罗马数字转换为数字。"), + ("Converts a binary number to decimal.", "将二进制数转换为十进制数。"), + ("Converts a binary number to hexadecimal.", "将二进制数转换为十六进制。"), + ("Converts a binary number to octal.", "将二进制数转换为八进制数。"), + ("Converts a date written as text into a date serial number.", "将文本形式的日期转换为日期序列号。"), + ("Converts a decimal number to binary.", "将十进制数转换为二进制数。"), + ("Converts a decimal number to hexadecimal.", "将十进制数转换为十六进制数。"), + ("Converts a decimal number to octal.", "将十进制数转换为八进制数。"), + ("Converts a decimal price to fractional notation.", "将十进制价格转换为分数报价表示法。"), + ("Converts a fractional price notation to a decimal number.", "将分数报价转换为十进制数。"), + ("Converts a hexadecimal number to binary.", "将十六进制数转换为二进制数。"), + ("Converts a hexadecimal number to decimal.", "将十六进制数转换为十进制数。"), + ("Converts a hexadecimal number to octal.", "将十六进制数转换为八进制数。"), + ("Converts a measurement from one unit to another.", "将测量值从一种单位转换为另一种单位。"), + ("Converts a number to Roman numerals in one of five styles.", "将数字转换为五种样式之一的罗马数字。"), + ("Converts a time written as text into a fraction of a day.", "将文本形式的时间转换为一天的一小部分。"), + ("Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", "将值转换为数字:数字保留,TRUE 为 1,其他均为 0。"), + ( + "Converts an array to text, either as a comma list or as a strict array constant.", + "将数组转换为文本,可以是逗号列表,也可以是严格的数组常量。", + ), + ("Converts an octal number to binary.", "将八进制数转换为二进制数。"), + ("Converts an octal number to decimal.", "将八进制数转换为十进制数。"), + ("Converts an octal number to hexadecimal.", "将八进制数转换为十六进制。"), + ("Converts any value to text, optionally in strict (quoted) form.", "将任何值转换为文本,可以选择严格(带引号)的形式。"), + ("Converts between the euro and the former euro member currencies at the fixed rates.", "以固定汇率在欧元和前欧元成员国货币之间进行兑换。"), + ("Converts degrees to radians.", "将角度转换为弧度。"), + ("Converts full-width characters to half-width (no change for single-byte text).", "将全角字符转换为半角字符(单字节文本没有变化)。"), + ("Converts half-width characters to full-width (no change in this locale).", "将半角字符转换为全角字符(此语言环境中没有变化)。"), + ("Converts radians to degrees.", "将弧度转换为度数。"), + ("Converts text that looks like a number, date or time into a number.", "将看起来像数字、日期或时间的文本转换为数字。"), + ("Converts text to a number using the given decimal and group separators.", "使用给定的小数点和组分隔符将文本转换为数字。"), + ("Converts text to lower case.", "将文本转换为小写。"), + ("Converts text to upper case.", "将文本转换为大写。"), + ("Correlation coefficient of two data sets.", "两个数据集的相关系数。"), + ("Cosecant of a complex number.", "复数的余割。"), + ("Cosecant of an angle in radians.", "角度的余割(以弧度为单位)。"), + ("Cosine of a complex number.", "复数的余弦。"), + ("Cosine of an angle in radians.", "以弧度表示的角度的余弦。"), + ("Cotangent of a complex number.", "复数的余切。"), + ("Cotangent of an angle in radians.", "角度的余切值(以弧度表示)。"), + ("Counts days between two dates on a 360-day year (US or European method).", "按一年 360 天计算两个日期之间的天数(美国或欧洲方法)。"), + ("Counts empty cells and empty text in a range.", "计算某个范围内的空电子表格单元格和空文本。"), + ("Counts how many values fall into each bin, as a vertical array.", "计算落入各组区间的值的数量,并返回垂直数组。"), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "计算匹配记录中指定字段的非空单元格数(或匹配记录数)。", + ), + ("Counts numeric cells in a field of the matching records (or the matching records).", "计算匹配记录中指定字段的数值单元格数(或匹配记录数)。"), + ("Counts the cells that meet a condition.", "计算满足条件的电子表格单元格的数量。"), + ("Counts the cells that meet every condition.", "计算满足每个条件的电子表格单元格的数量。"), + ("Counts the characters in a text.", "计算文本中的字符数。"), + ("Counts the columns in an array or range.", "计算数组或范围中的列数。"), + ("Counts the items in a cube set (no cube connections; #N/A).", "计算多维数据集集中的项目数(无多维数据集连接;#N/A)。"), + ("Counts the non-empty values.", "计算非空值。"), + ("Counts the numbers.", "计算数字。"), + ("Counts the rows in an array or range.", "计算数组或范围中的行数。"), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "计算两个日期之间的整年、整月或整日。单位:Y、M、D、MD、YM 或 YD。", + ), + ("Counts working days (Monday to Friday) between two dates, excluding holidays.", "计算两个日期之间的工作日(周一至周五),不包括节假日。"), + ("Counts working days between two dates with a custom weekend, excluding holidays.", "按自定义周末计算两个日期之间的工作日数,不包括节假日。"), + ("Creates a link; the cell shows the friendly name, or the link itself.", "创建链接;单元格显示友好名称或链接本身。"), + ("Creates a reusable custom function.", "创建可重用的自定义函数。"), + ("Cumulative beta probability.", "累积贝塔概率。"), + ("Cumulative lognormal probability.", "累积对数正态概率。"), + ("Cuts off the fractional part of a number at the given digits.", "将数值截断到指定位数。"), + ("Days from settlement to the next coupon date.", "从结算日到下一个付息日的天数。"), + ("Days from the start of the coupon period to settlement.", "从付息期开始到结算的天数。"), + ("Days in the coupon period that contains settlement.", "包含结算的付息期中的天数。"), + ("Declining-balance depreciation over any span of periods, switching to straight line.", "任何时期跨度内的余额递减折旧,切换为直线折旧。"), + ("Defines a set of cube members (no cube connections; #N/A).", "定义一组多维数据集成员(无多维数据集连接;#N/A)。"), + ("Determinant of a square matrix.", "方阵的行列式。"), + ("Difference of two complex numbers.", "两个复数的差。"), + ("Discount rate of a security.", "证券的贴现率。"), + ("Double factorial of a number.", "数字的双阶乘。"), + ("Double-declining-balance (or other factor) depreciation for a period.", "使用双倍余额递减法(或其他系数)计算一期折旧额。"), + ("Effective annual rate from a nominal rate and compounding periods.", "名义利率和复利期的有效年利率。"), + ("Equivalent interest rate for the growth of an investment.", "投资增长的等效利率。"), + ("Error function integrated from 0 to a limit, or between two limits.", "从 0 到指定积分限或两个积分限之间的误差函数积分。"), + ("Error function integrated from 0 to x.", "从0到x积分的误差函数。"), + ("Excess kurtosis of a sample.", "样本的超额峰度。"), + ("Exponential curve coefficients and optional regression statistics.", "指数曲线系数和可选的回归统计。"), + ("Exponential distribution density or probability.", "指数分布密度或概率。"), + ("Exponential of a complex number.", "复数的指数函数值。"), + ("Extracts data from XML with an XPath (not available; returns #VALUE!).", "使用 XPath 从 XML 中提取数据(不可用;返回 #VALUE!)。"), + ("Extracts the first match, all matches or the capture groups of a regular expression.", "提取正则表达式的第一个匹配项、所有匹配项或捕获组。"), + ("F distribution density or left-tailed probability.", "F分布密度或左尾概率。"), + ("Factorial of a number.", "数字的阶乘。"), + ("Fetches data from a web service (not available; returns #VALUE!).", "从 Web 服务获取数据(不可用;返回 #VALUE!)。"), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "在表的第一列中查找值并返回另一列同一行中的值。", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "在表的第一行中查找值并返回另一行同一列中的值。", + ), + ("Finds the position of one text in another (case-sensitive).", "查找一个文本在另一文本中的位置(区分大小写)。"), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "查找一个文本在另一文本中的位置,忽略大小写并允许使用通配符。", + ), + ("Fisher transformation.", "费舍尔变换。"), + ("Fixed-declining-balance depreciation for a period.", "一段时间内的固定余额递减折旧。"), + ("Flattens an array into a single column, optionally skipping blanks or errors.", "将数组展平为单列,可以选择跳过空白或错误。"), + ("Flattens an array into a single row, optionally skipping blanks or errors.", "将数组展平为单行,可以选择跳过空白或错误。"), + ("Forecasts a value by additive (AAA) exponential smoothing.", "通过加法 (AAA) 指数平滑预测值。"), + ("Formats a number as currency text, like DOLLAR.", "将数字格式化为货币文本,如 DOLLAR。"), + ("Formats a number as currency text.", "将数字格式化为货币文本。"), + ("Formats a number as text.", "将数字格式化为文本。"), + ("French degressive depreciation with a life-based coefficient.", "法国递减折旧,基于寿命的系数。"), + ("French linear depreciation prorated for the first period.", "法国线性折旧在第一期按比例分配。"), + ("Future value of a principal after a series of compound rates.", "经过一系列复合利率后本金的未来价值。"), + ("Future value of an investment with constant payments and rate.", "具有固定付款和利率的投资的未来价值。"), + ("Gamma distribution density or probability.", "伽马分布密度或概率。"), + ("Geometric mean of positive numbers.", "正数的几何平均值。"), + ("Greatest common divisor of integers.", "整数的最大公约数。"), + ("Groups rows by key fields and aggregates the values of each group.", "按关键字段对行进行分组并聚合每个组的值。"), + ("Grows an array to the given size, filling new cells with a pad value.", "将数组增长到给定大小,用填充值填充新的电子表格单元格。"), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "FORECAST.ETS 值周围的置信区间的半宽。"), + ("Harmonic mean of positive numbers.", "正数的调和平均值。"), + ("Hyperbolic cosecant of a complex number.", "复数的双曲余割。"), + ("Hyperbolic cosecant.", "双曲余割。"), + ("Hyperbolic cosine of a complex number.", "复数的双曲余弦。"), + ("Hyperbolic cosine.", "双曲余弦。"), + ("Hyperbolic cotangent.", "双曲余切。"), + ("Hyperbolic secant of a complex number.", "复数的双曲正割。"), + ("Hyperbolic secant.", "双曲正割。"), + ("Hyperbolic sine of a complex number.", "复数的双曲正弦。"), + ("Hyperbolic sine.", "双曲正弦。"), + ("Hyperbolic tangent.", "双曲正切。"), + ("Hypergeometric probability of an exact count.", "精确计数的超几何概率。"), + ("Hypergeometric probability.", "超几何概率。"), + ("Identity matrix of the given size.", "给定大小的单位矩阵。"), + ("Imaginary coefficient of a complex number.", "复数的虚部系数。"), + ("Information about a cell.", "有关单元格的信息。"), + ("Integer part of a division.", "除法的整数部分。"), + ("Interest paid in a period of a loan with even principal payments.", "等额本金贷款在指定期间支付的利息。"), + ("Interest part of a given period's payment.", "给定期间付款的利息部分。"), + ("Interest rate of a fully invested security.", "全额支付证券的利率。"), + ("Interest rate per period of an annuity, found iteratively.", "每期年金的利率,通过迭代找到。"), + ("Internal rate of return of cash flows on specific dates.", "特定日期现金流量的内部收益率。"), + ("Internal rate of return of periodic cash flows.", "定期现金流量的内部收益率。"), + ("Inverse hyperbolic cosine.", "反双曲余弦。"), + ("Inverse hyperbolic cotangent.", "反双曲余切。"), + ("Inverse hyperbolic sine.", "反双曲正弦。"), + ("Inverse hyperbolic tangent.", "反双曲正切。"), + ("Inverse of a square matrix.", "方阵的逆矩阵。"), + ("Inverse of the Fisher transformation.", "Fisher 变换的逆变换。"), + ("Inverse of the cumulative beta distribution.", "累积贝塔分布的逆。"), + ("Inverse of the cumulative lognormal distribution.", "累积对数正态分布的逆。"), + ("Inverse of the gamma cumulative distribution.", "伽玛累积分布的逆。"), + ("Inverse of the left-tailed F distribution.", "左尾 F 分布的逆。"), + ("Inverse of the left-tailed chi-squared distribution.", "左尾卡方分布的逆分布。"), + ("Inverse of the normal cumulative distribution.", "正态累积分布的逆分布。"), + ("Inverse of the right-tailed F distribution.", "右尾 F 分布的逆。"), + ("Inverse of the right-tailed chi-squared distribution.", "右尾卡方分布的逆分布。"), + ("Inverse of the standard normal cumulative distribution.", "标准正态累积分布的反函数。"), + ("Joins several text values into one.", "将多个文本值合并为一个。"), + ("Joins text from values and every cell of ranges, without a separator.", "连接值中的文本和范围的每个单元格,不带分隔符。"), + ("Joins text from values and ranges with a delimiter, optionally skipping empty items.", "使用分隔符连接值和范围中的文本,可以选择跳过空项目。"), + ("Keeps rows or columns from the start (or end) of an array.", "保留从数组的开头(或结尾)开始的行或列。"), + ("Keeps the rows or columns of an array whose include flag is TRUE.", "保留包含标志为 TRUE 的数组的行或列。"), + ("Largest number (0 when there are none).", "最大数字(没有时为 0)。"), + ("Largest number in a field of the matching records.", "匹配记录的字段中的最大数字。"), + ("Largest value among cells that meet every condition.", "满足每个条件的电子表格单元格中的最大值。"), + ("Largest value counting text as 0 and logicals as 1/0.", "将文本计数为 0,将逻辑计数为 1/0 的最大值。"), + ("Least common multiple of integers.", "整数的最小公倍数。"), + ("Least-squares line coefficients and optional regression statistics.", "最小二乘线系数和可选的回归统计。"), + ("Left-tailed inverse of Student's t distribution.", "Student t 分布的左尾逆。"), + ("Length of the repeating pattern detected in a time series.", "在时间序列中检测到的重复模式的长度。"), + ("Logarithm to the given base (10 by default).", "给定底数的对数(默认为 10)。"), + ("Lognormal density or probability.", "对数正态密度或概率。"), + ("Macaulay duration of a security with periodic interest.", "定期付息证券的麦考利久期。"), + ("Matrix product of two arrays.", "两个数组的矩阵乘积。"), + ("Mean after trimming a fraction of points from both ends.", "从数据两端剔除指定比例的数据点后计算的平均值。"), + ("Mean counting text as 0 and logical values as 1 or 0.", "将文本视为 0、逻辑值视为 1 或 0 计算的平均值。"), + ("Middle value of the numbers.", "数值的中位数。"), + ("Modified Bessel function of the first kind, I_n(x).", "第一类修正贝塞尔函数 I_n(x)。"), + ("Modified Bessel function of the second kind, K_n(x).", "第二类修正贝塞尔函数 K_n(x)。"), + ("Modified duration of a security with periodic interest.", "定期付息证券的修正久期。"), + ("Modified internal rate of return using separate borrow and reinvest rates.", "使用不同借款利率和再投资利率计算的修正内部收益率。"), + ("Most frequently occurring number.", "最常出现的数字。"), + ("Multiplies all the numbers in the arguments.", "将参数中的所有数字相乘。"), + ("Multiplies matching elements of equally sized arrays and adds the products.", "将相同大小的数组的匹配元素相乘,然后将乘积相加。"), + ("Multiplies the numbers in a field of the matching records.", "将匹配记录的字段中的数字相乘。"), + ("Names intermediate results.", "命名中间结果。"), + ("Natural log of the gamma function.", "伽马函数的自然对数。"), + ("Natural logarithm of a complex number.", "复数的自然对数。"), + ("Natural logarithm.", "自然对数。"), + ("Negative binomial probability.", "负二项式概率。"), + ("Net present value of cash flows on specific dates.", "特定日期的现金流净现值。"), + ("Net present value of periodic cash flows at a discount rate.", "按贴现率计算的定期现金流的净现值。"), + ("Next coupon date after settlement.", "结算后的下一个付息日。"), + ("Nominal annual rate from an effective rate and compounding periods.", "来自有效利率和复利期的名义年利率。"), + ("Normal distribution density or cumulative probability.", "正态分布密度或累积概率。"), + ("Number of areas in a reference.", "引用中的区域数。"), + ("Number of combinations with repetition.", "重复组合的数量。"), + ("Number of combinations without repetition.", "不重复的组合数。"), + ("Number of coupons payable between settlement and maturity.", "结算与到期之间到期的利息支付次数。"), + ("Number of ordered selections with repetition.", "重复的有序选择数。"), + ("Number of ordered selections without repetition.", "无重复的有序选择数。"), + ("Number of periods needed to pay off or accumulate an amount.", "还清或累积金额所需的周期数。"), + ("Number of sheets.", "工作表数量。"), + ("One- or two-tailed Student's t probability.", "一尾或二尾学生 t 概率。"), + ("One-tailed probability of a z-test.", "z 检验的单尾概率。"), + ("Pearson product-moment correlation coefficient.", "皮尔逊积矩相关系数。"), + ("Percent-encodes text for use in a URL.", "对文本进行百分比编码以在 URL 中使用。"), + ("Periodic payment for a loan or annuity with constant payments and rate.", "固定付款额和利率下,贷款或年金的每期付款额。"), + ("Periods needed for an investment to grow to a target value.", "投资增长到目标值所需的期数。"), + ("Picks a value from the list by its position.", "按位置从列表中选取一个值。"), + ("Picks columns of an array by position (negative counts from the end).", "按位置选取数组的列(负数表示从末尾计数)。"), + ("Picks rows of an array by position (negative counts from the end).", "按位置选取数组的行(负数表示从末尾计数)。"), + ("Places arrays side by side.", "并排放置数组。"), + ("Poisson probability.", "泊松概率。"), + ("Population covariance of paired values.", "成对值的总体协方差。"), + ("Population skewness.", "总体偏度。"), + ("Population standard deviation counting text as 0 and logicals as 1/0.", "将文本视为 0、逻辑值视为 1/0 计算的总体标准差。"), + ("Population standard deviation of a field over the matching records.", "匹配记录中字段的总体标准差。"), + ("Population standard deviation.", "总体标准差。"), + ("Population variance counting text as 0 and logicals as 1/0.", "将文本视为 0、逻辑值视为 1/0 计算的总体方差。"), + ("Population variance of a field over the matching records.", "匹配记录中字段的总体方差。"), + ("Population variance.", "总体方差。"), + ("Positive square root.", "正平方根。"), + ("Predicts a value along a linear trend.", "沿线性趋势预测值。"), + ("Present value of a series of equal future payments.", "一系列等额未来付款的现值。"), + ("Previous coupon date on or before settlement.", "结算时或之前的先前利息支付日期。"), + ("Price per 100 face value of a Treasury bill.", "每 100 面值国库券的价格。"), + ("Price per 100 face value of a discounted security.", "每 100 面值贴现证券的价格。"), + ("Price per 100 face value of a security paying interest at maturity.", "每 100 面值到期支付利息的证券的价格。"), + ("Price per 100 face value of a security paying periodic interest.", "定期支付利息的证券每 100 面值的价格。"), + ("Price per 100 face value of a security with an odd first period.", "第一利息期不规则的证券每 100 面值的价格。"), + ("Price per 100 face value of a security with an odd last period.", "最后计息期不规则的证券每 100 面值的价格。"), + ("Principal part of a given period's payment.", "指定期间付款中的本金部分。"), + ("Probability from Student's t-test.", "学生 t 检验的概率。"), + ("Probability of a number of successes falling in a range.", "成功次数落在指定范围内的概率。"), + ("Probability that a standard normal value falls between the mean and z.", "标准正态值落在平均值和 z 之间的概率。"), + ("Probability that values fall between two limits.", "值落在两个界限之间的概率。"), + ("Product of complex numbers.", "复数的乘积。"), + ("Quartile (0–4) of a data set, inclusive method.", "数据集的四分位数 (0–4),包含方法。"), + ("Quartile (0–4) of a data set.", "数据集的四分位数 (0–4)。"), + ("Quartile (1–3) of a data set, exclusive method.", "数据集的四分位数 (1–3),排除方法。"), + ("Quotient of two complex numbers.", "两个复数的商。"), + ("Raises a complex number to a power.", "计算复数的幂。"), + ("Raises a number to a power.", "计算数字的幂。"), + ("Rank of a number within a list.", "列表中数字的排名。"), + ("Rank of a number within a list; ties get the average rank.", "数值在列表中的排名;相同数值取平均排名。"), + ("Rank of a number within a list; ties share the top rank.", "数值在列表中的排名;相同数值取其占据名次中的最高名次。"), + ("Ratio of the factorial of a sum to the product of factorials.", "和的阶乘与阶乘的乘积的比率。"), + ("Reads text in a given base as a number.", "将给定基数中的文本读取为数字。"), + ("Real coefficient of a complex number.", "复数的实部系数。"), + ("Relative standing of a value as a fraction of the data set.", "数值在数据集中的百分比排位。"), + ("Relative standing of a value from 0 to 1 inclusive.", "0 到 1(含)之间的值的相对位置。"), + ("Relative standing of a value strictly between 0 and 1.", "值的相对位置严格介于 0 和 1 之间。"), + ("Remainder of a division, with the sign of the divisor.", "除法的余数,带有除数的符号。"), + ("Removes leading and trailing spaces and collapses runs of spaces to one.", "删除前导空格和尾随空格并将连续空格折叠为一个。"), + ("Removes non-printable control characters from text.", "从文本中删除不可打印的控制字符。"), + ("Removes rows or columns from the start (or end) of an array.", "从数组的开头(或结尾)删除行或列。"), + ("Repeats a text a given number of times.", "重复文本指定次数。"), + ("Replaces matches of a regular expression, all of them or a chosen occurrence.", "替换正则表达式的所有匹配项或选定的匹配项。"), + ( + "Replaces occurrences of one text with another, optionally only a given occurrence.", + "将出现的一个文本替换为另一文本,可以选择仅替换给定的出现文本。", + ), + ("Replaces part of a text by position.", "按位置替换部分文本。"), + ("Returns 1 when a number is at least the step, otherwise 0.", "当数值大于或等于阈值时返回 1,否则返回 0。"), + ("Returns 1 when two numbers are equal, otherwise 0.", "当两个数字相等时返回 1,否则返回 0。"), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "返回值类型的代码:1 数字、2 文本、4 逻辑、16 错误、64 数组。", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "当值为 #N/A 时返回备用值,否则返回原值。"), + ("Returns a fallback when the value is an error, otherwise the value.", "当值为错误时返回备用值,否则返回原值。"), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "从多维数据集返回关键性能指标属性(无多维数据集连接;#N/A)。", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "从多维数据集返回成员或元组(无多维数据集连接;#N/A)。"), + ("Returns a property of a cube member (no cube connections; #N/A).", "返回多维数据集成员的属性(无多维数据集连接;#N/A)。"), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "从多维数据集返回聚合值(无多维数据集连接;#N/A)。"), + ("Returns characters from the middle of a text.", "返回文本中间的字符。"), + ("Returns information about the operating environment.", "返回有关操作环境的信息。"), + ("Returns one value when a condition is TRUE and another when it is FALSE.", "当条件为 TRUE 时返回一个值,当条件为 FALSE 时返回另一个值。"), + ("Returns the #N/A error value.", "返回 #N/A 错误值。"), + ("Returns the 1-based position of a value in a row or column.", "返回行或列中值从 1 开始的位置。"), + ("Returns the ISO 8601 week number of a date.", "返回日期的 ISO 8601 周数。"), + ("Returns the Unicode code point of the first character of a text.", "返回文本第一个字符的 Unicode 代码点。"), + ("Returns the Windows-1252 code of the first character of a text.", "返回文本第一个字符的 Windows-1252 代码。"), + ("Returns the character for a Unicode code point.", "返回 Unicode 代码点的字符。"), + ("Returns the character for a code from the Windows-1252 character set.", "返回 Windows-1252 字符集中的代码字符。"), + ("Returns the current date and time.", "返回当前日期和时间。"), + ("Returns the current date.", "返回当前日期。"), + ("Returns the date a number of months before or after a date.", "返回某个日期之前或之后几个月的日期。"), + ("Returns the date a number of working days away with a custom weekend.", "按自定义周末返回指定工作日数之前或之后的日期。"), + ("Returns the date a number of working days before or after a date.", "返回某个日期之前或之后多个工作日的日期。"), + ("Returns the day of the month of a date.", "返回日期所在月份的第几天。"), + ("Returns the day of the week of a date as a number.", "以数字形式返回日期的星期几。"), + ("Returns the distinct rows or columns of an array.", "返回数组中不重复的行或列。"), + ("Returns the element, row or column of an array at the given position.", "返回数组中给定位置的元素、行或列。"), + ("Returns the field value of the single record that meets the criteria.", "返回满足条件的单条记录的字段值。"), + ("Returns the first characters of a text.", "返回文本开头的指定数量的字符。"), + ("Returns the fraction of a year between two dates under a day-count basis.", "按指定日计数基准返回两个日期之间的天数占一年的比例。"), + ("Returns the hour (0-23) of a time.", "返回时间的小时 (0-23)。"), + ("Returns the last characters of a text.", "返回文本末尾的指定数量的字符。"), + ("Returns the last day of the month a number of months away.", "返回指定月数之前或之后所在月份的最后一天。"), + ("Returns the logical value FALSE.", "返回逻辑值FALSE。"), + ("Returns the logical value TRUE.", "返回逻辑值TRUE。"), + ("Returns the minute (0-59) of a time.", "返回时间的分钟 (0-59)。"), + ("Returns the month (1-12) of a date.", "返回日期的月份 (1-12)。"), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "返回多维数据集集的第 n 个成员(无多维数据集连接;#N/A)。"), + ("Returns the number identifying an error value, or #N/A if it is not an error.", "返回标识错误值的数字,如果不是错误,则返回 #N/A。"), + ("Returns the number of days between two dates.", "返回两个日期之间的天数。"), + ("Returns the phonetic (furigana) text; here the text itself.", "返回语音(振假名)文本;此处返回文本本身。"), + ("Returns the position of a value in a row or column with flexible match and search modes.", "以灵活的匹配和搜索模式返回值在行或列中的位置。"), + ("Returns the second (0-59) of a time.", "返回时间的秒数 (0-59)。"), + ("Returns the text that comes after a delimiter.", "返回分隔符后面的文本。"), + ("Returns the text that comes before a delimiter.", "返回分隔符之前的文本。"), + ("Returns the value if it is text, otherwise empty text.", "如果是文本则返回值,否则返回空文本。"), + ("Returns the value paired with the first condition that is TRUE.", "返回与第一个为 TRUE 的条件配对的值。"), + ("Returns the week number of a date within its year.", "返回日期在其一年中的周数。"), + ("Returns the year of a date.", "返回日期的年份。"), + ("Reverses a logical value.", "反转逻辑值。"), + ("Right-tailed F probability.", "右尾 F 概率。"), + ("Right-tailed Student's t probability.", "右尾学生 t 概率。"), + ("Right-tailed chi-squared probability.", "右尾卡方概率。"), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "对数字进行四舍五入并将其格式化为具有固定小数和可选千位分隔符的文本。", + ), + ("Rounds a number away from zero to a given number of digits.", "将数值沿远离零的方向舍入到指定位数。"), + ("Rounds a number down to a multiple of significance.", "将数值向下舍入到指定基数的倍数。"), + ("Rounds a number down to the nearest integer or multiple.", "将数字向下舍入到最接近的整数或倍数。"), + ("Rounds a number down to the nearest integer.", "将数字向下舍入到最接近的整数。"), + ("Rounds a number to a given number of digits, halves away from zero.", "将数值舍入到指定位数;恰好位于中间的值按远离零的方向舍入。"), + ("Rounds a number to the nearest multiple.", "将数字四舍五入到最接近的倍数。"), + ("Rounds a number toward negative infinity to a multiple.", "将数字朝负无穷方向舍入为倍数。"), + ("Rounds a number toward positive infinity to a multiple.", "将数字向正无穷大舍入为倍数。"), + ("Rounds a number toward zero to a given number of digits.", "将数字向零舍入到给定的位数。"), + ("Rounds a number up to a multiple of significance.", "将数值向上舍入到指定基数的倍数。"), + ("Rounds a number up to the nearest integer or multiple.", "将数字向上舍入到最接近的整数或倍数。"), + ("Rounds away from zero to the nearest even integer.", "沿远离零的方向舍入到最近的偶数。"), + ("Rounds away from zero to the nearest odd integer.", "沿远离零的方向舍入到最近的奇数。"), + ("Row number of a reference.", "引用的行号。"), + ("Running accumulation of an array.", "返回数组逐步累积的结果。"), + ("Sample covariance of paired values.", "成对值的样本协方差。"), + ("Sample skewness.", "样本偏度。"), + ("Sample standard deviation counting text as 0 and logicals as 1/0.", "将文本视为 0、逻辑值视为 1/0 计算的样本标准差。"), + ("Sample standard deviation of a field over the matching records.", "匹配记录中字段的样本标准差。"), + ("Sample standard deviation.", "样本标准差。"), + ("Sample variance counting text as 0 and logicals as 1/0.", "将文本视为 0、逻辑值视为 1/0 计算的样本方差。"), + ("Sample variance of a field over the matching records.", "匹配记录中字段的样本方差。"), + ("Sample variance.", "样本方差。"), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "在行或列中查找,并返回另一个数组中匹配的元素、行或列。", + ), + ("Secant of a complex number.", "复数的正割。"), + ("Secant of an angle in radians.", "以弧度表示的角的正割。"), + ("Sheet number.", "工作表编号。"), + ("Shifts the bits of a number left (right for negative shifts).", "将数字的位左移(负移右移)。"), + ("Shifts the bits of a number right (left for negative shifts).", "将数字的位右移(负移则左移)。"), + ("Sine of a complex number.", "复数的正弦。"), + ("Sine of an angle in radians.", "以弧度表示的角度的正弦值。"), + ("Slope of the least-squares regression line.", "最小二乘回归线的斜率。"), + ("Smallest number (0 when there are none).", "最小的数字(没有时为 0)。"), + ("Smallest number in a field of the matching records.", "匹配记录字段中的最小数字。"), + ("Smallest success count whose cumulative binomial probability reaches alpha.", "累积二项式概率达到 alpha 的最小成功计数。"), + ("Smallest value among cells that meet every condition.", "满足每个条件的电子表格单元格中的最小值。"), + ("Smallest value counting text as 0 and logicals as 1/0.", "将文本计数为 0,将逻辑计数为 1/0 的最小值。"), + ("Sorts an array by the values of other arrays of matching size.", "按大小匹配的其他数组的值对数组进行排序。"), + ("Sorts the rows (or columns) of an array by one or more of its columns.", "按数组的一列或多列对数组的行(或列)进行排序。"), + ("Spells out a number in Thai words with Baht.", "将数值转换为带有泰铢单位的泰语文字。"), + ("Splits text into a grid of columns and rows at the given delimiters.", "在给定的分隔符处将文本分割成列和行的网格。"), + ("Square of the correlation coefficient.", "相关系数的平方。"), + ("Square root of a complex number.", "复数的平方根。"), + ("Square root of the number times pi.", "数值与 pi 的乘积的平方根。"), + ("Stacks arrays on top of each other.", "将数组堆叠在一起。"), + ("Standard error of predicted y values in a regression.", "回归中预测 y 值的标准误差。"), + ("Standard normal cumulative probability.", "标准正态累积概率。"), + ("Standard normal density or cumulative probability.", "标准正态密度或累积概率。"), + ("Standard normal density.", "标准正态密度。"), + ("Straight-line depreciation for one period.", "一期直线折旧。"), + ("Student's t density or left-tailed probability.", "学生的 t 密度或左尾概率。"), + ("Sum of a power series.", "幂级数之和。"), + ("Sum of complex numbers.", "复数之和。"), + ("Sum of squared deviations from the mean.", "与平均值的偏差平方和。"), + ("Sum-of-years'-digits depreciation for a period.", "使用年数总和法计算一期折旧额。"), + ("Sums the differences of squares of matching elements.", "对匹配元素的平方差求和。"), + ("Sums the squared differences of matching elements.", "对匹配元素的差的平方求和。"), + ("Sums the sums of squares of matching elements.", "对匹配元素的平方和求和。"), + ("Swaps the rows and columns of an array.", "交换数组的行和列。"), + ("TRUE for references.", "当值为引用时返回 TRUE。"), + ("TRUE when a LAMBDA argument was left out.", "TRUE 当省略 LAMBDA 参数时。"), + ("TRUE when a regular expression matches somewhere in the text.", "TRUE 当正则表达式与文本中的某处匹配时。"), + ("TRUE when an odd number of arguments are TRUE.", "TRUE 当奇数个参数为 TRUE 时。"), + ("TRUE when at least one argument is TRUE.", "TRUE 当至少一个参数为 TRUE 时。"), + ("TRUE when every argument is TRUE.", "TRUE 当每个参数都是 TRUE 时。"), + ("TRUE when the cell has a formula.", "TRUE 当单元格有公式时。"), + ("TRUE when the integer part of a number is even.", "TRUE 当数字的整数部分为偶数时。"), + ("TRUE when the integer part of a number is odd.", "TRUE 当数字的整数部分为奇数时。"), + ("TRUE when the value is TRUE or FALSE.", "当值为 TRUE 或 FALSE 时,TRUE。"), + ("TRUE when the value is a number.", "TRUE 当值为数字时。"), + ("TRUE when the value is any error other than #N/A.", "当值为 #N/A 以外的任何错误时返回 TRUE。"), + ("TRUE when the value is any error.", "TRUE 当值为任何错误时。"), + ("TRUE when the value is anything other than text.", "TRUE 当值不是文本时。"), + ("TRUE when the value is text.", "TRUE 当值为文本时。"), + ("TRUE when the value is the #N/A error.", "TRUE 当值为 #N/A 错误时。"), + ("TRUE when the value refers to an empty cell.", "TRUE 当值引用空单元格时。"), + ("TRUE when two texts are identical, including case.", "TRUE 当两个文本相同(包括大小写)时。"), + ("Tangent of a complex number.", "复数的正切。"), + ("Tangent of an angle in radians.", "以弧度表示的角的正切值。"), + ("The constant pi to 15 digits.", "15 位常数 pi。"), + ("The formula of a cell as text.", "单元格的公式作为文本。"), + ("The gamma function.", "伽马函数。"), + ("The k-th largest number in a data set.", "数据集中第 k 大的数字。"), + ("The k-th smallest number in a data set.", "数据集中第 k 个最小的数字。"), + ("The reference named by a text string.", "由文本字符串命名的引用。"), + ("The sum of a subset as a fraction of the sum of all the values.", "子集的总和作为所有值总和的一部分。"), + ("Total interest paid between two periods.", "两个期间之间支付的总利息。"), + ("Total principal repaid between two periods.", "两个时期之间偿还的本金总额。"), + ("Two-tailed Student's t probability.", "双尾学生 t 概率。"), + ("Two-tailed inverse of Student's t distribution.", "Student t 分布的双尾逆分布。"), + ("Two-tailed p-value of an F-test for equality of variances.", "检验方差是否相等的 F 检验的双侧 p 值。"), + ("Values along a fitted exponential growth curve.", "沿着拟合指数增长曲线的值。"), + ("Values along a least-squares linear fit.", "沿最小二乘线性拟合的值。"), + ("Vertical array of all the most frequent numbers.", "所有最常见数字的垂直数组。"), + ("Weibull density or probability.", "威布尔密度或概率。"), + ("Writes a number in another base, padded with zeros.", "在另一个基数中写入一个数字,并用零填充。"), + ("Y-intercept of the least-squares regression line.", "最小二乘回归线的 Y 截距。"), + ("Yield of a Treasury bill.", "国库券的收益率。"), + ("Yield of a security paying periodic interest.", "定期支付利息的证券的收益率。"), + ("Yield of a security with an odd first period.", "第一利息期不规则的证券的收益率。"), + ("Yield of a security with an odd last period.", "最后计息期不规则的证券的收益率。"), + ("Z-score of a value.", "值的 Z 分数。"), + ("e raised to the given power.", "e 的给定幂。"), + ("k-th percentile, k from 0 to 1 inclusive.", "第 k 个百分位数,k 从 0 到 1(含)。"), + ("k-th percentile, k strictly between 0 and 1.", "第 k 个百分位数,k 严格介于 0 和 1 之间。"), +]; + +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "引用类型"), + ("actual_range", "实际范围"), + ("aggregation", "聚合"), + ("alpha", "阿尔法"), + ("angle", "角度"), + ("area_num", "区域编号"), + ("argument", "参数"), + ("array", "数组"), + ("array_x", "x 值数组"), + ("array_y", "y 值数组"), + ("average_range", "平均范围"), + ("base", "底数"), + ("basis", "日计数基准"), + ("beta", "贝塔"), + ("bins_array", "分组边界数组"), + ("bottom", "下界"), + ("by_array", "排序键数组"), + ("by_col", "按列"), + ("calc_method", "计算方法"), + ("calculation", "计算"), + ("caption", "标题"), + ("case_sensitivity", "区分大小写"), + ("coefficients", "系数"), + ("col_delimiter", "列分隔符"), + ("col_fields", "列字段"), + ("col_index_num", "列索引"), + ("col_num", "列号"), + ("col_sort_order", "列排序顺序"), + ("col_total_depth", "列汇总深度"), + ("cols", "列数"), + ("column_num", "列号"), + ("columns", "列数"), + ("confidence_level", "置信度"), + ("connection", "数据连接"), + ("const", "常量"), + ("cost", "初始成本"), + ("coupon", "票面年利率"), + ("criteria", "条件"), + ("criteria_range", "条件范围"), + ("cumulative", "累积分布"), + ("data_all", "全部数据"), + ("data_array", "数据数组"), + ("data_completion", "数据补全"), + ("data_subset", "数据子集"), + ("database", "数据库"), + ("date", "日期"), + ("date_purchased", "购买日期"), + ("date_text", "以文本形式写入的日期"), + ("dates", "日期"), + ("day", "日"), + ("days", "天"), + ("decimal_dollar", "十进制价格"), + ("decimal_separator", "小数点分隔符"), + ("decimals", "小数位"), + ("default_or_value", "默认值或值"), + ("deg_freedom", "自由度"), + ("delimiter", "分隔符"), + ("denominator", "分母"), + ("dimension", "矩阵阶数"), + ("discount", "贴现率"), + ("divisor", "除数"), + ("effect_rate", "有效利率"), + ("end_date", "结束日期"), + ("end_period", "结束期序号"), + ("error_val", "错误值"), + ("exactly_once", "恰好一次"), + ("expected_range", "预期范围"), + ("expression", "表达式"), + ("factor", "系数"), + ("field", "数据库字段"), + ("field_headers", "字段标头"), + ("field_relationship", "字段之间的关系"), + ("filter_array", "筛选数组"), + ("finance_rate", "融资利率"), + ("find_text", "查找文本"), + ("first_coupon", "首次付息日"), + ("first_interest", "首次付息日"), + ("first_period", "首期结束日期"), + ("form", "表示形式"), + ("format", "格式"), + ("format_text", "格式文本"), + ("fraction", "报价分母"), + ("fractional_dollar", "分数报价"), + ("frequency", "付息频率"), + ("friendly_name", "显示名称"), + ("from_unit", "源测量单位"), + ("full_precision", "全精度"), + ("function", "函数"), + ("function_num", "函数编号"), + ("fv", "未来值"), + ("group_separator", "组分隔符"), + ("guess", "估计值"), + ("height", "高度"), + ("holidays", "假期"), + ("hour", "小时"), + ("i_num", "虚部系数"), + ("if_empty", "如果为空"), + ("if_not_found", "未找到时"), + ("ignore", "忽略"), + ("ignore_empty", "忽略空"), + ("include", "包括"), + ("index_num", "索引号"), + ("info_type", "信息类型"), + ("initial_value", "初始值"), + ("instance_num", "匹配项序号"), + ("inumber", "复数"), + ("investment", "投资"), + ("issue", "发行日期"), + ("k", "k"), + ("known_xs", "已知 x 值"), + ("known_ys", "已知 y 值"), + ("kpi_name", "关键绩效指标名称"), + ("kpi_property", "关键绩效指标属性"), + ("lambda", "LAMBDA"), + ("last_interest", "最后付息日期"), + ("life", "使用寿命"), + ("link_location", "链接位置"), + ("logical", "逻辑值"), + ("logical_test", "逻辑条件"), + ("lookup_array", "查找数组"), + ("lookup_value", "查找值"), + ("lookup_vector", "查找向量"), + ("lower_limit", "下限"), + ("m", "m"), + ("match_end", "将文本末尾视为分隔符"), + ("match_mode", "匹配模式"), + ("match_type", "匹配方法"), + ("maturity", "到期日"), + ("max", "最大"), + ("max_range", "最大值范围"), + ("mean", "算术平均值"), + ("member_expression", "多维数据集成员表达式"), + ("method", "方法"), + ("min", "最低"), + ("min_length", "最小长度"), + ("min_range", "最小值范围"), + ("minute", "分钟"), + ("mode", "计算模式"), + ("month", "月"), + ("months", "月"), + ("multiple", "倍数"), + ("n", "n"), + ("name", "名称"), + ("new_text", "新文本"), + ("new_xs", "新的x值"), + ("no_commas", "省略数字组分隔符"), + ("no_switch", "不切换折旧方法"), + ("nominal_rate", "名义利率"), + ("nper", "总期数"), + ("npery", "每年复利期数"), + ("num_bytes", "字节数"), + ("num_chars", "字符数"), + ("num_digits", "位数"), + ("number", "数值"), + ("number_chosen", "选取数量"), + ("number_f", "失败次数"), + ("number_pop", "总体大小"), + ("number_s", "成功次数"), + ("number_sample", "样本量"), + ("number_times", "重复计数"), + ("numerator", "分子"), + ("occurrence", "匹配项序号"), + ("old_text", "旧文本"), + ("options", "选项"), + ("order", "排名顺序"), + ("pad_with", "填充值"), + ("par", "面值"), + ("parameter", "参数"), + ("pattern", "正则表达式模式"), + ("per", "期间序号"), + ("percent", "百分比"), + ("period", "期间序号"), + ("places", "输出位数"), + ("pmt", "每期付款额"), + ("population_s", "总体成功次数"), + ("power", "指数"), + ("pr", "价格"), + ("principal", "本金"), + ("prob_range", "概率范围"), + ("probability", "概率"), + ("probability_s", "成功概率"), + ("property", "属性名称"), + ("pv", "现值"), + ("quart", "四分位数编号"), + ("radix", "基数"), + ("range", "范围"), + ("range_lookup", "范围查找"), + ("rank", "排名"), + ("rate", "利率或折旧率"), + ("real_num", "实部系数"), + ("redemption", "赎回值"), + ("ref", "引用"), + ("ref_text", "引用文本"), + ("reference", "引用"), + ("reinvest_rate", "再投资利率"), + ("relative_to", "相对于"), + ("replacement", "替换"), + ("result", "结果"), + ("result_vector", "结果向量"), + ("return_array", "返回数组"), + ("return_mode", "返回方式"), + ("return_type", "返回类型"), + ("row_delimiter", "行分隔符"), + ("row_fields", "行字段"), + ("row_index_num", "行索引"), + ("row_num", "行号"), + ("row_sort_order", "行排序顺序"), + ("row_total_depth", "行汇总深度"), + ("rows", "行数"), + ("salvage", "残值"), + ("sample_s", "样本成功次数"), + ("scan_by_column", "按列扫描"), + ("schedule", "利率序列"), + ("search_mode", "搜索模式"), + ("seasonality", "季节性"), + ("second", "秒"), + ("serial_number", "序列号"), + ("set", "多维数据集成员集"), + ("set_expression", "多维数据集成员集表达式"), + ("settlement", "结算日"), + ("sheet_text", "工作表名称"), + ("shift_amount", "移位位数"), + ("sigma", "总体标准差"), + ("significance", "舍入倍数或精度"), + ("size", "样本量"), + ("sort_by", "排序依据"), + ("sort_index", "排序索引"), + ("sort_order", "排序顺序"), + ("source", "来源"), + ("standard_dev", "标准差"), + ("start", "起始值"), + ("start_date", "开始日期"), + ("start_num", "起始位置"), + ("start_period", "起始期序号"), + ("statistic_type", "统计类型"), + ("stats", "统计"), + ("step", "步长或阈值"), + ("suffix", "后缀"), + ("sum_range", "总和范围"), + ("table_array", "表数组"), + ("tails", "分布尾数"), + ("target", "目标"), + ("target_date", "目标日期"), + ("text", "文字"), + ("time_text", "以文本形式写入的时间"), + ("timeline", "时间线"), + ("to_unit", "目标测量单位"), + ("top", "上限"), + ("total_depth", "汇总深度"), + ("trials", "试验次数"), + ("triangulation_precision", "三角换算精度"), + ("trim_cols", "列修剪模式"), + ("trim_rows", "行修剪模式"), + ("type", "类型"), + ("type_text", "数据类型名称"), + ("unit", "单位"), + ("upper_limit", "上限"), + ("url", "网址"), + ("value", "值"), + ("value_if_error", "出现错误时的结果"), + ("value_if_false", "条件为假时的结果"), + ("value_if_na", "不可用错误的结果"), + ("value_if_true", "条件为真时的结果"), + ("values", "输入值"), + ("vector", "向量"), + ("weekend", "周末"), + ("whole_number", "整数"), + ("width", "宽度"), + ("within_text", "要搜索的文本"), + ("wrap_count", "每行或每列的值数"), + ("x", "x"), + ("x_num", "x 坐标"), + ("x_range", "x范围"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "y 坐标"), + ("year", "年"), + ("yld", "投资收益率"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/i18n/zh_tw.rs b/crates/ui-egui/src/i18n/zh_tw.rs new file mode 100644 index 0000000000..d1d35046f3 --- /dev/null +++ b/crates/ui-egui/src/i18n/zh_tw.rs @@ -0,0 +1,2156 @@ +//! Traditional Chinese translations for the interface strings in i18n.rs. + +/// Returns the Chinese translation for `text`, or `None` so callers fall back to English. +pub(super) fn translate(text: &str) -> Option<&'static str> { + Some(match text { + "Book" => "活頁簿", + "Generated|Column" => "欄", + "Generated|Row" => "列", + "Page {page}" => "第 {page} 頁", + "Paste" => "貼上", + "Paste Values" => "貼上值", + "Paste Formulas" => "貼上公式", + "Paste Formatting" => "貼上格式", + "Transpose" => "轉置", + "Paste Link" => "貼上連結", + "Paste Special…" => "選擇性貼上…", + "Insert Copied Cells" => "插入複製的儲存格", + "Insert Copied Cells…" => "插入複製的儲存格…", + "Insert Cut Cells" => "插入剪下的儲存格", + "Insert Paste" => "插入貼上", + "Cut" => "剪下", + "Copy" => "複製", + "Format Painter (double-click to keep it on)" => "複製格式(按兩下可持續使用)", + "Bold" => "粗體", + "Italic" => "斜體", + "Double Underline" => "雙底線", + "Strikethrough" => "刪除線", + "Underline" => "底線", + "Increase Font Size" => "放大字型", + "Decrease Font Size" => "縮小字型", + "Wrap Text" => "自動換列", + "Merge & Center" => "跨欄置中", + "Merge Cells" => "合併儲存格", + "Merge Across" => "同列合併", + "Unmerge Cells" => "取消合併儲存格", + "Fill Color" => "填滿色彩", + "Font Color" => "字型色彩", + "Borders" => "邊框", + "Top\nAlign" => "靠上對齊", + "Middle\nAlign" => "置中對齊", + "Bottom\nAlign" => "靠下對齊", + "Left" => "靠左對齊", + "Right" => "靠右對齊", + "Center" => "置中", + "Horizontal" => "水平", + "Vertical Text" => "豎排文字", + "Decrease Indent" => "減少縮排", + "Increase Indent" => "增加縮排", + "Orientation" => "方向", + "Angle Counterclockwise" => "逆時針旋轉", + "Angle Clockwise" => "順時針旋轉", + "Rotate Text Up" => "文字向上旋轉", + "Rotate Text Down" => "文字向下旋轉", + "Accounting Number Format" => "會計數字格式", + "Percent Style" => "百分比樣式", + "Comma Style" => "千分位樣式", + "Increase Decimal" => "增加小數位數", + "Decrease Decimal" => "減少小數位數", + "More Accounting Formats…" => "更多會計格式…", + "Conditional\nFormatting" => "條件式\n格式設定", + "Conditional Formatting" => "條件式格式設定", + "Format\nas Table" => "格式化\n為表格", + "Cell\nStyles" => "儲存格\n樣式", + "Format Cells…" => "設定儲存格格式…", + "Format Cell Alignment…" => "設定儲存格對齊方式…", + "Format\nPane" => "格式\n窗格", + "Format" => "格式", + "Insert" => "插入", + "Header Menu|Insert" => "插入", + "Insert Cells…" => "插入儲存格…", + "Delete" => "刪除", + "Delete Cells…" => "刪除儲存格…", + "Insert Sheet Rows" => "插入工作表列", + "Insert Sheet Columns" => "插入工作表欄", + "Delete Sheet Rows" => "刪除工作表列", + "Delete Sheet Columns" => "刪除工作表欄", + "Row Height…" => "列高…", + "AutoFit Row Height" => "自動調整列高", + "Column Width…" => "欄寬…", + "AutoFit Column Width" => "自動調整欄寬", + "Default Width…" => "預設欄寬…", + "Hide Rows" => "隱藏列", + "Unhide Rows" => "取消隱藏列", + "Hide Columns" => "隱藏欄", + "Unhide Columns" => "取消隱藏欄", + "Lock Cell" => "鎖定儲存格", + "Clear" => "清除", + "Clear All" => "全部清除", + "Clear Formats" => "清除格式", + "Clear Contents" => "清除內容", + "Clear Comments and Notes" => "清除註解和備註", + "Clear Hyperlinks" => "清除超連結", + "AutoSum" => "自動加總", + "Flash\nFill" => "快速\n填入", + "Flash Fill" => "快速填入", + "Fill" => "填滿", + "Clear Print Area" => "清除列印範圍", + "Find &\nSelect" => "尋找與\n選取", + "Find…" => "尋找…", + "Replace…" => "取代…", + "Go To…" => "到…", + "Go To Special…" => "特殊目標…", + "PivotTable" => "樞紐分析表", + "Recommended\nCharts" => "推薦\n圖表", + "Table" => "表格", + "Pictures" => "圖片", + "Shapes" => "形狀", + "Icons" => "圖示", + "Text\nBox" => "文字\n方塊", + "Comment" => "註解", + "New\nComment" => "新建\n註解", + "New Note" => "新建備註", + "Show/Hide Note" => "顯示/隱藏備註", + "Header &\nFooter" => "頁首及\n頁尾", + "Text to\nColumns" => "資料剖析", + "Link" => "連結", + "Symbol" => "符號", + "Equation" => "公式", + "Insert New Equation..." => "插入新公式", + "Sparklines" => "走勢圖", + "Checkbox" => "核取方塊", + "Insert checkboxes in the selected cells" => "在所選儲存格中插入核取方塊", + "Header & Footer" => "頁首及頁尾", + "Draw with ink" => "墨跡繪製", + "Eraser" => "橡皮擦", + "Ink to\nShape" => "墨跡轉\n形狀", + "Select\nObjects" => "選擇\n物件", + "Themes" => "主題", + "Margins" => "邊界", + "Left Margin" => "左邊界", + "Right Margin" => "右邊界", + "Top Margin" => "上邊界", + "Bottom Margin" => "下邊界", + "Header Margin" => "頁首邊界", + "Footer Margin" => "頁尾邊界", + "Size" => "紙張大小", + "Print\nArea" => "列印\n範圍", + "Set Print Area" => "設定列印範圍", + "Breaks" => "分頁符號", + "Insert Page Break" => "插入分頁符號", + "Remove Page Break" => "刪除分頁符號", + "Reset All Page Breaks" => "重置所有分頁符號", + "Print\nTitles" => "列印\n標題", + "Sheet\nRight-to-Left" => "從右\n到左", + "Sheet Right-to-Left" => "從右到左", + "Narrow" => "窄", + "Wide" => "寬", + "Normal" => "普通", + "Portrait" => "縱向", + "Landscape" => "橫向", + "Custom Margins…" => "自訂邊界…", + "Insert\nFunction" => "插入\n函數", + "Name\nManager" => "名稱\n管理員", + "Define Name" => "定義名稱", + "Use in Formula" => "在公式中使用", + "Create from Selection" => "根據所選內容建立", + "Trace Precedents" => "追蹤前導參照", + "Trace Dependents" => "追蹤從屬參照", + "Remove Arrows" => "刪除箭頭", + "Show Formulas" => "顯示公式", + "Error Checking" => "錯誤檢查", + "Trace Error" => "追蹤錯誤", + "Circular References" => "迴圈參照", + "Python Mode" => "Python 模式", + "Evaluate Formula" => "評估值公式", + "Watch Window" => "監看視窗", + "Calculation\nOptions" => "計算\n選項", + "Calculate Now" => "立即計算", + "Calculate Sheet" => "計算工作表", + "Automatic" => "自動", + "Automatic Except for Data Tables" => "除資料表以外自動", + "Manual" => "手動", + "Sort &\nFilter" => "排序和\n篩選", + "Sort" => "排序", + "Sort A to Z" => "從 A 到 Z 排序", + "Sort Z to A" => "從 Z 到 A 排序", + "Custom Sort…" => "自訂排序…", + "Filter" => "篩選", + "Reapply" => "重新應用", + "Get Data\n(Text/CSV)" => "獲取資料\n(文字/CSV)", + "Remove\nDuplicates" => "移除\n重複項", + "Data\nValidation" => "資料\n驗證", + "Data Validation" => "資料驗證", + "Data Validation…" => "資料驗證…", + "Circle Invalid Data" => "圈出無效資料", + "Clear Validation" => "清除驗證", + "Group" => "群組", + "Ungroup" => "取消群組", + "Show Detail" => "顯示明細資料", + "Hide Detail" => "隱藏明細資料", + "Subtotal" => "小計", + "Data\nAnalysis" => "資料分析", + "Data Analysis" => "資料分析", + "Solver" => "規劃求解", + "What-If\nAnalysis" => "模擬分析", + "Data Table…" => "資料表…", + "Scenario Manager…" => "劇本管理員…", + "Goal Seek…" => "目標搜尋…", + "Forecast\nSheet" => "預測工作表", + "Spelling" => "拼寫檢查", + "Check\nAccessibility" => "檢查\n輔助功能", + "Threaded Comments" => "執行緒式註解", + "Show\nComments" => "顯示\n註解", + "Previous" => "上一條", + "Next" => "下一條", + "Previous Comment" => "上一條註解", + "Next Comment" => "下一條註解", + "Show All Notes" => "顯示所有備註", + "Convert to Comments" => "轉換為註解", + "Protect\nWorkbook" => "保護\n活頁簿", + "Allow Edit\nRanges" => "允許編輯\n區域", + "Allow Edit Ranges" => "允許編輯區域", + "Unprotect\nSheet" => "復原\n工作表保護", + "Protect Sheet…" => "保護工作表…", + "Unprotect Sheet…" => "取消保護工作表…", + "Comments" => "註解", + "Notes" => "備註", + "Page Break\nPreview" => "分頁\n預覽", + "Page\nLayout" => "整頁\n模式", + "Formula Bar" => "資料編輯列", + "Name Box" => "名稱方塊", + "Cell Editor" => "儲存格編輯器", + "Font Size" => "字型大小", + "Gridlines" => "格線", + "Headings" => "標題", + "Zoom" => "縮放", + "Magnification" => "縮放比例", + "Fit selection" => "恰好容納選定區域", + "100%" => "100%", + "Zoom to\nSelection" => "縮放到\n所選內容", + "Freeze\nPanes" => "凍結\n窗格", + "Freeze Panes" => "凍結窗格", + "Freeze Top Row" => "凍結頂端列", + "Freeze First Column" => "凍結首欄", + "Unfreeze Panes" => "取消凍結窗格", + "Dark Mode" => "深色模式", + "Interface language" => "介面語言", + "Interface size" => "介面大小", + "Auto" => "自動", + "Drag to freeze columns" => "拖曳以凍結欄", + "Drag to freeze rows" => "拖曳以凍結列", + "Command\nPalette" => "命令\n面板", + "Agent\nControl" => "代理程式\n控制", + "Action\nJournal" => "操作\n日誌", + "About\nGridCraft" => "關於\nGridCraft", + "Check for\nUpdates…" => "檢查\n更新…", + "Look for a newer GridCraft release" => "尋找更新的 GridCraft 版本", + "Share" => "分享", + "Add Chart\nElement" => "新增圖表\n元素", + "Change\nChart Type" => "更改\n圖表型別", + "Switch\nRow/Column" => "切換\n列/欄", + "Select\nData" => "選擇\n資料", + "Data Labels: None" => "資料標籤:無", + "Data Labels: Show" => "資料標籤:顯示", + "Legend: None" => "圖例:無", + "Legend: Bottom" => "圖例:底部", + "Legend: Top" => "圖例:頂部", + "Legend: Right" => "圖例:右側", + "Gridlines: None" => "格線:無", + "Gridlines: Show" => "格線:顯示", + "Chart\nTitle" => "圖表\n標題", + "Delete\nChart" => "刪除\n圖表", + "Convert\nto Range" => "轉換\n為區域", + "Table\nStyles" => "表格\n樣式", + "Top 10 Items" => "前 10 項", + "Top 10%" => "前 10%", + "Bottom 10 Items" => "後 10 項", + "Bottom 10%" => "後 10%", + "Above Average" => "高於平均值", + "Below Average" => "低於平均值", + "Clear Rules from Entire Sheet" => "清除整張工作表的規則", + "Clear Rules from Selected Cells" => "清除所選儲存格的規則", + "Constants" => "常量", + "Data Bars" => "資料橫條", + "Color Scales" => "色階", + "Icon Sets" => "圖示集", + "Home" => "常用", + "Draw" => "繪圖", + "Page Layout" => "版面配置", + "Formulas" => "公式", + "Data" => "資料", + "Review" => "校閱", + "View" => "檢視", + "Automate" => "自動化", + "Table Design" => "表格設計", + "Chart Design" => "圖表設計", + "Ready" => "就緒", + "Enter" => "輸入", + "Edit" => "編輯", + "Point" => "指向", + "Calculate" => "計算", + "Select destination and press Enter or choose Paste" => "選擇目標位置並按 Enter,或選擇「貼上」", + "General" => "一般", + "Number" => "數值", + "Currency" => "貨幣", + "Accounting" => "會計專用", + "Date" => "日期", + "Time" => "時間", + "Percentage" => "百分比", + "Fraction" => "分數", + "Scientific" => "科學記號", + "Text" => "文字", + "Special" => "特殊", + "Custom" => "自訂", + "Short Date" => "短日期", + "Long Date" => "長日期", + "More Number Formats…" => "更多數字格式…", + "Financial" => "財務", + "Recently Used" => "最近使用的函數", + "Logical" => "邏輯", + "Date & Time" => "日期和時間", + "Lookup & Reference" => "尋找和引用", + "Math & Trig" => "數學與三角函數", + "More Functions" => "更多函數", + "Page Layout|Orientation" => "紙張方向", + "Display theme" => "顯示主題", + "Animations" => "動畫", + "Glide the selection outline to the cell you move to instead of jumping there" => "選擇框平滑滑動到新的儲存格,而不是直接跳過去", + "System" => "系統", + "Light" => "淺色", + "Dark" => "深色", + "Sheet Options|View" => "螢幕", + "Print" => "列印", + "Print What" => "列印內容", + // Page Layout view and the Header & Footer tab. + "Click to add data" => "按一下可新增資料", + "Add header" => "新增頁首", + "Add footer" => "新增頁尾", + "(none)" => "(無)", + "Header" => "頁首", + "Footer" => "頁尾", + "Page\nNumber" => "頁碼", + "Number\nof Pages" => "頁數", + "Current\nDate" => "當前\n日期", + "Current\nTime" => "當前\n時間", + "File\nPath" => "檔案\n路徑", + "File\nName" => "檔名", + "Sheet\nName" => "工作表名", + "Go to\nHeader" => "轉至\n頁首", + "Go to\nFooter" => "轉至\n頁尾", + "Page Number" => "頁碼", + "Number of Pages" => "頁數", + "Current Date" => "當前日期", + "Current Time" => "當前時間", + "File Path" => "檔案路徑", + "File Name" => "檔名", + "Sheet Name" => "工作表名", + "Go to Header" => "轉至頁首", + "Different First Page" => "首頁不同", + "Different Odd & Even Pages" => "奇偶頁不同", + "Scale with Document" => "隨文件縮放", + "Align with Page Margins" => "與邊界對齊", + "Go to Footer" => "轉至頁尾", + "Ruler" => "標尺", + // File › Backstage view. + "File" => "檔案", + "Back" => "返回", + "New" => "新增", + "Open" => "開啟", + "Info" => "資訊", + "Save" => "儲存", + "Save As" => "另存新檔", + "Export" => "匯出", + " — Edited" => " — 已編輯", + "Can't Undo" => "無法復原", + "Undo" => "復原", + "Redo" => "取消復原", + "Undo list" => "復原列表", + "More commands" => "更多命令", + "Search commands" => "搜尋命令", + "New Workbook" => "新建活頁簿", + "Open…" => "開啟…", + "Save As…" => "另存新檔…", + "Print…" => "列印…", + "Export as PDF…" => "匯出為 PDF…", + "Export as CSV…" => "匯出為 CSV…", + "Export as Web Page (.html)…" => "匯出為網頁 (.html)…", + "Save a Copy as Excel Workbook (.xlsx)…" => "儲存副本為 Excel 活頁簿 (.xlsx)…", + "Share: export or save a copy" => "分享:匯出或儲存副本", + "Close" => "關閉", + "Options" => "選項", + "Account" => "賬戶", + "Product Information" => "產品資訊", + "About GridCraft" => "關於 GridCraft", + "Version" => "版本", + "Platform" => "平臺", + "Licence" => "許可證", + "Version, contributors and the AI models that helped" => "版本、貢獻者以及參與協助的 AI 模型", + "Blank workbook" => "空白活頁簿", + "Recent" => "最近", + "No recent workbooks yet." => "還沒有最近使用的活頁簿。", + "More workbooks" => "更多活頁簿", + "Modified" => "修改時間", + "Not available" => "不可用", + "Just now" => "剛剛", + "Yesterday" => "昨天", + "{n} min ago" => "{n} 分鐘前", + "{n} h ago" => "{n} 小時前", + "{n} days ago" => "{n} 天前", + "{n} weeks ago" => "{n} 周前", + "{n} months ago" => "{n} 個月前", + "{n} years ago" => "{n} 年前", + "Browse…" => "瀏覽…", + "Not saved yet" => "尚未儲存", + "Location" => "位置", + "Sheets" => "工作表", + "Protect Workbook" => "保護活頁簿", + "Sheet structure is locked: sheets can't be added, moved, renamed or deleted." => "工作表結構已鎖定:無法新增、移動、重新命名或刪除工作表。", + "Lock the sheet structure so sheets can't be added, moved, renamed or deleted." => { + "鎖定工作表結構,使工作表無法被新增、移動、重新命名或刪除。" + } + "Properties" => "屬性", + "Title" => "標題", + "Subject" => "主題", + "Author" => "作者", + "Company" => "公司", + "Keywords" => "關鍵詞", + "Description" => "說明", + "No workbook is open." => "沒有開啟的活頁簿。", + "Save as type" => "儲存型別", + "Excel Workbook (*.xlsx)" => "Excel 活頁簿 (*.xlsx)", + "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8(逗號分隔) (*.csv)", + "Web Page (*.html)" => "網頁 (*.html)", + "PDF (*.pdf)" => "PDF 檔案 (*.pdf)", + "Download" => "下載", + "A CSV file, web page or PDF is a copy: the workbook keeps its own file." => "CSV 檔案、網頁或 PDF 只是副本:活頁簿仍保留其原檔案。", + "Save the workbook under another name or in another folder." => "以其他名稱或在其他資料夾中儲存活頁簿。", + "Print Active Sheets" => "列印活動工作表", + "Print Entire Workbook" => "列印整個活頁簿", + "Fit Sheet on One Page" => "將工作表調整為一頁", + "Page Setup…" => "版面設定…", + "Page {page} of {pages}" => "第 {page} 頁,共 {pages} 頁", + "Nothing to print." => "沒有可列印的內容。", + "Previous page" => "上一頁", + "Next page" => "下一頁", + "Create PDF" => "建立 PDF", + "Save the sheet as a PDF document that keeps its page layout." => "將工作表另存新檔保留版面配置的 PDF 文件。", + "Change File Type" => "更改檔案型別", + "CSV (Comma delimited)" => "CSV (逗號分隔)", + "Save the active sheet as comma-separated text." => "將活動工作表另存新檔逗號分隔的文字。", + "Web Page (.html)" => "網頁 (.html)", + "Save the workbook as a web page." => "將活頁簿另存新檔網頁。", + "Options|General" => "一般", + "Options|Save" => "儲存", + "Show formula bar" => "顯示資料編輯列", + "Enable AutoComplete for cell values" => "為儲存格值啟用自動完成", + "Save .xlsx workbooks automatically after every change" => "每次更改後自動儲存 .xlsx 活頁簿", + "Workbook calculation" => "活頁簿計算", + "Enable iterative calculation" => "啟用迭代計算", + "Maximum Iterations:" => "最多迭代次數:", + "Maximum Change:" => "最大誤差:", + "Maximum Iterations must be a whole number from 1 to 32767." => "最多迭代次數必須是 1 到 32767 之間的整數。", + "Maximum Change must be a number of 0 or more." => "最大誤差必須是大於或等於 0 的數字。", + "Calculation settings are saved with the workbook." => "計算設定隨活頁簿一起儲存。", + "Insert Sheet" => "插入工作表", + "Rename" => "重新命名", + "Move or Copy…" => "移動或複製…", + "Duplicate" => "建立副本", + "Tab Color" => "標籤色彩", + "No Color" => "無色彩", + "Hide" => "隱藏", + "Unhide…" => "取消隱藏…", + "Select All Sheets" => "選擇所有工作表", + "AutoSave" => "自動儲存", + "AutoSave: save after every change (workbooks saved to a file)" => "自動儲存:每次更改後儲存(已儲存到檔案的活頁簿)", + "Previous sheet" => "上一個工作表", + "Next sheet" => "下一個工作表", + "All sheets" => "所有工作表", + "New sheet (⇧F11)" => "新建工作表 (⇧F11)", + "Cancel" => "取消", + "OK" => "確定", + " OK " => " 確定 ", + " Close " => " 關閉 ", + " Solve " => " 求解 ", + "Don't Save" => "不儲存", + "Replace" => "取代", + "Replace All" => "全部取代", + "Find All" => "全部尋找", + "Find Next" => "尋找下一個", + "Find what:" => "尋找目標:", + "Replace with:" => "取代成:", + "Reference:" => "參照到:", + "Special…" => "特殊目標…", + "+ Add Level" => "+ 新增條件", + "New…" => "新建…", + "No names defined" => "未定義名稱", + "There are no conditional formatting rules on this sheet." => "此工作表上沒有條件式格式設定規則。", + "Set cell:" => "目標儲存格:", + "To value:" => "目標值:", + "By changing cell:" => "可變儲存格:", + "The output range already holds data. Replace it with the report?" => "輸出區域已包含資料。是否用報告取代?", + "Analysis Tools" => "分析工具", + "Output options" => "輸出選項", + "Set Objective:" => "設定目標:", + "To:" => "到:", + "By Changing Variable Cells:" => "透過更改可變儲存格:", + "Subject to the Constraints:" => "遵守約束:", + "Add" => "新增", + "Paste Special|Add" => "加", + "Select a Solving Method:" => "選擇求解方法:", + "Reports:" => "報告:", + "The spelling check is complete for the entire sheet." => "已完成整個工作表的拼寫檢查。", + "Suggestions:" => "建議:", + "(No suggestions)" => "(無建議)", + "Ignore Once" => "忽略一次", + "Add to Dictionary" => "新增到字典", + "Change" => "更改", + "Change All" => "全部更改", + "Unhide sheet:" => "取消隱藏工作表:", + "Find" => "尋找", + "About" => "關於", + "Contributors" => "貢獻者", + "Models" => "模型", + "Save a copy as" => "另存副本為", + "Do you want to save the changes you made to" => "是否要儲存對", + "the changes you made?|changes" => "所做的更改?", + "GridCraft is fully drivable by agents. Every menu item, button and gesture is a command:" => { + "GridCraft 可完全由代理程式驅動。每個選單項、按鈕和手勢都是一條命令:" + } + "Picture file path (PNG or JPEG):" => "圖片檔案路徑(PNG 或 JPEG):", + "Description (optional):" => "描述(可選):", + "Fits inside the selected cell and moves with its content." => "適應所選儲存格大小並隨其內容移動。", + "Start a new workbook" => "開始新建活頁簿", + "A clean-room, open-source, Rust-native spreadsheet. Part of ArtCraft." => "淨室開發的開源 Rust 原生電子表格。ArtCraft 家族成員。", + "Join the ArtCraft Discord" => "加入 ArtCraft Discord", + "Automation in this workbook. GridCraft runs its own scripts; a file's VBA project is preserved but not executed." => { + "此活頁簿中的自動化。GridCraft 執行自己的指令碼;檔案的 VBA 專案會保留但不會執行。" + } + "Trust Scripts" => "信任指令碼", + "Let this workbook's scripts run for the rest of this session" => "允許此活頁簿的指令碼在本會話內執行", + "Not in Dictionary" => "不在詞典中", + "Selection" => "選擇", + "Format Chart Area" => "設定圖表區格式", + "No comments on this sheet yet. Select a cell and choose New Comment." => "此工作表還沒有註解。請選擇一個儲存格,然後選擇「新建註解」。", + "Resolved" => "已解決", + "Add Watch (active cell)" => "新增監視(活動儲存格)", + "There are no shapes, pictures or charts on this sheet." => "此工作表上沒有形狀、圖片或圖表。", + "Bring Forward" => "上移一層", + "Send Backward" => "下移一層", + "Select a chart to format it." => "選擇一個圖表以設定其格式。", + "The chart no longer exists." => "該圖表已不存在。", + "Horizontal axis title:" => "橫座標軸標題:", + "Vertical axis title:" => "縱座標軸標題:", + "Layout" => "佈局", + "↑ Sort Ascending" => "↑ 遞增", + "↓ Sort Descending" => "↓ 遞減", + "Clear Filter" => "清除篩選", + "Apply" => "應用", + "Width" => "欄寬", + "Height" => "列高", + "pixels" => "畫素", + "More Borders…" => "其他邊框…", + "More Functions…" => "其他函數…", + "Text that Contains…" => "文字包含…", + "A Date Occurring…" => "發生日期…", + "Duplicate Values…" => "重複值…", + "New Rule…" => "新建規則…", + "Manage Rules…" => "管理規則…", + "Table Name:" => "表名稱:", + "Picture in cell" => "儲存格圖片", + "Picture" => "圖片", + "Macros preserved (not executed)" => "巨集已保留(未執行)", + "Sum" => "加總", + "Count" => "計數", + "Average" => "平均值", + "Show" => "顯示", + "Reverse the order" => "反轉順序", + "No contributor data was built into this copy." => "此構建版本未內建貢獻者資料。", + "No model credits were built into this copy." => "此構建版本未內建模型致謝資料。", + "Grab bag" => "彙集", + "contributors" => "位貢獻者", + "commits" => "次提交", + "Username" => "使用者名稱", + "Display name" => "顯示名稱", + "Real name" => "真實姓名", + "Name (A–Z)" => "姓名(A–Z)", + "Merged PRs" => "已合併 PR", + "Commits" => "提交", + "Lines added" => "新增列數", + "Lines deleted" => "刪除列數", + "Line delta" => "列數增減", + "Binary assets added" => "新增二進位資源", + "Binary assets removed" => "移除二進位資源", + "First commit" => "首次提交", + "Last commit" => "最近提交", + "Model" => "模型", + "% of all commits" => "佔全部提交百分比", + "Lines +/−" => "列數 +/−", + "Preview" => "預覽", + "Border preview" => "邊框預覽", + "Theme Colors" => "主題色彩", + "Standard Colors" => "標準色", + "Recent Colors" => "最近使用的色彩", + "More Colors…" => "其他色彩…", + "Hex" => "十六進位", + "Scripts in this workbook came from a file and are disabled." => "此活頁簿中的指令碼來自檔案,已被禁用。", + "steps" => "步", + "Edit…" => "編輯…", + "Restore Original Values" => "還原原始值", + "Answer" => "運算結果報告", + "Limits" => "極限值報告", + "Highlight Cells Rules" => "突出顯示儲存格規則", + "Top/Bottom Rules" => "最前/最後規則", + "Clear Rules" => "清除規則", + "Fill…" => "填滿…", + " (password)" => "(密碼)", + " (password, unlocked)" => "(密碼,已解鎖)", + "$ English (United States)" => "$ 英語(美國)", + "'{file}' is protected." => "「{file}」受保護。", + "(unnamed)" => "(未命名)", + "100% Stacked Bar" => "100% 堆疊橫條圖", + "100% Stacked Column" => "100% 堆疊直條圖", + "A to Z" => "A 到 Z", + "Accessibility" => "輔助功能", + "Action" => "操作", + "Action Journal" => "操作日誌", + "Add Chart Element" => "新增圖表元素", + "Add subtotal to (columns, e.g. C,D):" => "新增小計到(列,如 C,D):", + "Add-in and Automation" => "載入項和自動化", + "Agent Control" => "代理程式控制", + "Aggregate duplicates using" => "重複項彙總方式", + "Align Left" => "靠左對齊", + "Align Right" => "靠右對齊", + "Alignment" => "對齊", + "All" => "全部", + "All Charts" => "所有圖表", + "All done. We made {count} replacements." => "全部完成。共取代了 {count} 處。", + "All except borders" => "除邊框外的所有內容", + "Allow" => "允許", + "Allow all users of this sheet to:" => "允許此工作表的所有使用者進行:", + "Alpha:" => "Alpha(α):", + "Anova: Single Factor" => "方差分析:單因素", + "Any value" => "任何值", + "Area" => "區域圖", + "100% Stacked Area" => "百分比堆積區域圖", + "Sort Ascending" => "遞增", + "Sort Descending" => "遞減", + "Sort On" => "排序依據", + "At each change in (column letter):" => "每組小計位置(列字母):", + "Background Color:" => "背景色彩:", + "Before sheet (position, 0 = first):" => "移至工作表之前(位置,0 表示最前):", + "Bin Range (blank for automatic bins):" => "接收區域(留空則自動分段):", + "Blanks" => "空白", + "Border" => "邊框", + "Bottom" => "底端", + "Bottom Align" => "靠下對齊", + "Bottom margin (in):" => "下邊界(英寸):", + "Calculate Now (F9)" => "重新計算(F9)", + "Calculate Sheet (⇧F9)" => "計算工作表(⇧F9)", + "Calculated Field…" => "計算欄位…", + "Calculation Options" => "計算選項", + "Category:" => "分類:", + "Cell Color" => "儲存格色彩", + "Cell Styles" => "儲存格樣式", + "Cell Values" => "儲存格值", + "Center Across Selection" => "跨欄置中", + "Change Chart Type" => "更改圖表型別", + "Chart" => "圖表", + "Diagram" => "示意圖", + "Decorative Text" => "藝術字", + "Chart Title" => "圖表標題", + "Chart data range:" => "圖表資料區域:", + "Check Accessibility" => "檢查輔助功能", + "Choose a PNG or JPEG no larger than 16 MB." => "請選擇不大於 16 MB 的 PNG 或 JPEG 檔案。", + "Choose fields to add to report:" => "請選擇要新增到報表的欄位:", + "Clustered Bar" => "群組橫條圖", + "Clustered Column" => "群組直條圖", + "Color:" => "色彩:", + "Column Width" => "欄寬", + "Column chart" => "直條圖", + "Column or Bar" => "直條圖或橫條圖", + "Column width (characters):" => "欄寬(字元數):", + "Column widths" => "欄寬", + "Columns" => "欄", + "Columns (blank = all, e.g. A,C):" => "列(留空表示全部,如 A,C):", + "Combo" => "組合圖", + "Comma" => "逗號", + "Text to Columns|Comma" => "逗號", + "Comment:" => "註解:", + "Comments and notes (C)" => "註解與註釋(C)", + "Comments pane" => "註解窗格", + "Compact" => "緊湊", + "Compatibility" => "相容性", + "Conditional Formatting Rules Manager" => "條件式格式設定規則管理器", + "Conditional formats" => "條件式格式設定", + "Confidence Level (%):" => "置信度(%):", + "Confidence Level for Mean (%), blank for none:" => "平均數置信度(%),留空表示無:", + "Confidence interval" => "置信區間", + "Confidence level (%):" => "置信度(%):", + "Constant is Zero" => "常量為零", + "Convert Text to Columns" => "資料剖析", + "Convert the last ink stroke to a shape" => "將最後一個墨跡筆畫轉換為形狀", + "Convert to Number" => "轉換為數字", + "Convert to Range" => "轉換為區域", + "Copies" => "份數", + "Correlation" => "相關係數", + "CountA" => "非空白計數", + "Covariance" => "協方差", + "Create Forecast Worksheet" => "建立預測工作表", + "Create Sparklines" => "建立走勢圖", + "Create a copy" => "建立副本", + "Cube" => "多維資料集", + "Cumulative Percentage" => "累積百分比", + "Current region" => "當前區域", + "Custom (%):" => "自訂(%):", + "Custom Sort" => "自訂排序", + "Damping factor:" => "阻尼係數:", + "Data Range:" => "資料區域:", + "Data validation" => "資料驗證", + "Database" => "資料庫", + "Date unit" => "日期單位", + "Day" => "日", + "Decimal" => "小數", + "Define Name…" => "定義名稱…", + "Delete Comment" => "刪除註解", + "Delete Sheet" => "刪除工作表", + "Delete chart" => "刪除圖表", + "Delete rows" => "刪除列", + "Delete…" => "刪除…", + "Descriptive Statistics" => "描述統計", + "Destination:" => "目標位置:", + "Diagonal ↗" => "對角線 ↗", + "Diagonal ↘" => "對角線 ↘", + "Dismiss" => "消除", + "Display:" => "顯示:", + "Distributed" => "分散對齊", + "Divide" => "除", + "Do you want to save the changes you made to {title}?" => "是否儲存對「{title}」所做的更改?", + "Double" => "雙底線", + "Double Accounting" => "會計用雙底線", + "Doughnut" => "環圈圖", + "Down" => "向下", + "Edit Name" => "編輯名稱", + "Edit chart title" => "編輯圖表標題", + "End date:" => "結束日期:", + "Engineering" => "工程", + "Entire column" => "整欄", + "Entire row" => "整列", + "Erase ink strokes" => "擦除墨跡", + "Error checking options" => "錯誤檢查選項", + "Error message:" => "錯誤資訊:", + "Error style" => "錯誤樣式", + "Errors" => "錯誤值", + "Every command run in this session (replayable)" => "本次會話執行的所有命令(可重放)", + "Expand formula bar" => "展開資料編輯列", + "Exponential Smoothing" => "指數平滑", + "F-Test Two-Sample for Variances" => "F-檢驗:雙樣本方差", + "Fill missing points using" => "填滿缺失點使用", + "Filter by Selected Cell's Value" => "按所選儲存格的值篩選", + "Filters" => "篩選", + "Find & Select" => "尋找與選取", + "Find and Replace" => "尋找與取代", + "Finding printers…" => "正在尋找印表機…", + "Font" => "字型", + "Footer (in):" => "頁尾(英寸):", + "Footer:" => "頁尾:", + "Forecast Sheet" => "預測工作表", + "Forecast end (date or number; blank: a third of the history):" => "預測結束(日期或數字;留空表示歷史長度的三分之一):", + "Forecast start (a date or number in the history; blank: after the last point):" => { + "預測開始(歷史中的日期或數字;留空表示最後一個點之後):" + } + "Format Cells" => "設定儲存格格式", + "Format Cells|Fill" => "填滿", + "Format Chart Area…" => "設定圖表區格式…", + "Format Chart pane" => "設定圖表格式窗格", + "Format as Table" => "格式化為表格", + "Format cells" => "設定儲存格格式", + "Format cells that are (value):" => "為等於以下值的儲存格設定格式:", + "Format cells that contain a date occurring:" => "為發生日期在以下的儲存格設定格式:", + "Format cells that contain the text:" => "為包含以下文字的儲存格設定格式:", + "Format columns" => "設定欄格式", + "Format rows" => "設定列格式", + "Format values where this formula is true:" => "為符合此公式的值設定格式:", + "Formats (T)" => "格式(T)", + "Formula Builder" => "公式生成器", + "Formula:" => "公式:", + "Formulas (F)" => "公式(F)", + "Formulas and number formats" => "公式和數字格式", + "Funnel" => "漏斗圖", + "GRG Nonlinear" => "非線性 GRG", + "Go To" => "到", + "Go To Special" => "特殊目標", + "Goal Seek" => "目標搜尋", + "Goal Seeking found a solution: {value}" => "目標搜尋找到一個解:{value}", + "Gradebook" => "成績單", + "Grayscale" => "灰度", + "Green Fill with Dark Green Text" => "綠色填滿色深綠色文字", + "Group by Months" => "按月組合", + "Group by Quarters" => "按季度組合", + "Group by Years" => "按年組合", + "Grouped By:" => "彙總依據:", + "Growth" => "等比序列", + "Header (&L left, &C center, &R right; &P page, &N pages, &D date, &A sheet):" => { + "頁首(&L 左,&C 中,&R 右;&P 頁碼,&N 總頁數,&D 日期,&A 工作表名):" + } + "Header (in):" => "頁首(英寸):", + "Hidden" => "隱藏", + "Hidden: {sheets}" => "已隱藏:{sheets}", + "Hide Sheet" => "隱藏工作表", + "Hierarchy & more" => "層次結構和更多", + "Highlighter" => "熒光筆", + "Histogram" => "直方圖", + "Horizontal (Category) Axis Labels:" => "水平(分類)軸標籤:", + "Household Budget" => "家庭預算", + "How agents drive GridCraft (MCP / control channel)" => "代理程式如何驅動 GridCraft(MCP / 控制通道)", + "Hypothesized Mean Difference:" => "假設平均差:", + "Ignore blank" => "忽略空白", + "Import a text or CSV file" => "匯入文字或 CSV 檔案", + "In the last 7 days" => "最近 7 天", + "In-cell dropdown" => "提供下拉箭頭", + "Include forecast statistics" => "包含預測統計", + "Indent" => "縮排", + "Information" => "資訊", + "Input Range:" => "輸入區域:", + "Input X Range:" => "X 值輸入區域:", + "Input Y Range:" => "Y 值輸入區域:", + "Input message:" => "輸入資訊:", + "Insert Calculated Field" => "插入計算欄位", + "Insert Chart" => "插入圖表", + "Insert Function" => "插入函數", + "Insert Function (⇧F3)" => "插入函數(⇧F3)", + "Insert Hyperlink" => "插入超連結", + "Insert Link" => "插入連結", + "Insert Slicer" => "插入交叉分析篩選器", + "Insert a picture" => "插入圖片", + "Insert a slicer to filter a table" => "插入交叉分析篩選器以篩選表格", + "Insert an icon" => "插入圖示", + "Insert rows" => "插入列", + "Insert\nSlicer" => "插入交叉\n分析篩選器", + "Insert…" => "插入…", + "Interpolation" => "插值", + "Interval:" => "間隔:", + "Justify" => "左右對齊", + "Keep" => "保留", + "Keep Solver Solution" => "保留規劃求解結果", + "Kth Largest (blank for none):" => "第 K 大值(留空表示無):", + "Kth Smallest (blank for none):" => "第 K 小值(留空表示無):", + "Labels in first row" => "首列包含標題", + "Last cell" => "最後一個儲存格", + "Last month" => "上個月", + "Last week" => "上週", + "Left margin (in):" => "左邊界(英寸):", + "Legend Entries (Series)" => "圖例項(系列)", + "Light Red Fill" => "淺紅填滿色", + "Light Red Fill with Dark Red Text" => "淺紅填滿色深紅色文字", + "Line" => "折線", + "Line chart" => "折線圖", + "Line or Area" => "折線圖或區域圖", + "Line with Markers" => "帶資料標記的折線圖", + "Linear" => "線性", + "Link to (web address, e-mail or Sheet!A1):" => "連結到(網址、電子郵件或 Sheet!A1):", + "Link…" => "連結…", + "List" => "列表", + "Location Range:" => "位置區域:", + "Locked" => "鎖定", + "Macros" => "巨集", + "Macros and scripts in this workbook (Alt+F8)" => "此活頁簿中的巨集和指令碼(Alt+F8)", + "Make Unconstrained Variables Non-Negative" => "使無約束變數為非負數", + "Markers" => "資料標記", + "Match case" => "區分大小寫", + "Match entire cell contents" => "儲存格內容完全匹配", + "Max" => "最大值", + "Maximum:" => "最大值:", + "Median" => "中位數", + "Middle Align" => "置中對齊", + "Min" => "最小值", + "Minimum / Source / Formula:" => "最小值 / 來源 / 公式:", + "Modify" => "修改", + "Month" => "月", + "Move or Copy" => "移動或複製", + "Move or Copy Sheet…" => "移動或複製工作表…", + "Move to Column Labels" => "移動到列標籤", + "Move to Report Filter" => "移動到報表篩選", + "Move to Row Labels" => "移動到行標籤", + "Move to Values" => "移動到值", + "Moving Average" => "移動平均", + "Multiply" => "乘", + "My data has headers" => "資料包含標題", + "My list has headers" => "列表包含標題", + "Name" => "名稱", + "Name Manager" => "名稱管理員", + "Name:" => "名稱:", + "New Comment" => "新建註解", + "New Name" => "新建名稱", + "New Worksheet Ply:" => "新工作表組:", + "New title (Modify):" => "新標題(修改):", + "Next month" => "下個月", + "Next week" => "下週", + "No picture selected" => "未選擇圖片", + "No printers found. Configure a system printer or export a PDF." => "未找到印表機。請配置系統印表機或匯出為 PDF。", + "No ranges yet." => "尚無區域。", + "None" => "無", + "Normal Probability" => "正態機率", + "Not in Dictionary ({cell}):" => "不在字典中({cell}):", + "Note:" => "註釋:", + "GridCraft User" => "GridCraft 使用者", + "Run" => "執行", + "Create" => "新建", + "Write a new macro with this name" => "以該名稱編寫一個新巨集", + "Tokens" => "引用標記", + "= {ref} on the example" => "示例中為 {ref}", + "Steps here run when the If is {cond}. Add Step puts a step in this branch." => { + "當 If 的條件為 {cond} 時執行這裡的步驟。「新增步驟」會在此分支中加入一步。" + } + "Column {n}" => "第 {n} 欄", + "May use files through:" => "可使用的檔案路徑:", + "Breakpoint: the debugger stops before this step" => "斷點:偵錯程式在此步驟之前停止", + "Overwrite them, or move the data out of the way?" => "覆蓋它們,還是把資料移開?", + "Series {n}" => "系列 {n}", + "true" => "真", + "false" => "假", + "Then" => "則", + "Else" => "否則", + "colorful" => "彩色", + "monochrome" => "單色", + "accent1" => "強調色 1", + "accent2" => "強調色 2", + "accent3" => "強調色 3", + "accent4" => "強調色 4", + "accent5" => "強調色 5", + "accent6" => "強調色 6", + "Number Stored as Text" => "以文字形式儲存的數字", + "Numbers" => "數字", + "One-sided" => "單面", + "Operation" => "運算", + "Options|Editing" => "編輯", + "Orientation (degrees)" => "方向(度)", + "Other:" => "其他:", + "Outline" => "分級顯示", + "Output Range:" => "輸出區域:", + "Page Breaks" => "分頁符號", + "Page Setup" => "版面設定", + "Paper Size" => "紙張大小", + "Pareto (sorted histogram)" => "排列圖(排序直方圖)", + "Password" => "密碼", + "Password (optional):" => "密碼(可選):", + "Password:" => "密碼:", + "Paste Special" => "選擇性貼上", + "Paste List" => "貼上清單", + "Paste name" => "貼上名稱", + "Paste formulas that refer to the copied cells" => "貼上引用所複製儲存格的公式", + "Pen\nBlack" => "繪圖筆\n黑色", + "Pen\nBlue" => "繪圖筆\n藍色", + "Pen\nRed" => "繪圖筆\n紅色", + "Pick From Drop-down List…" => "從下拉選單中選擇…", + "Pick From List" => "從列表中選擇", + "Pie" => "圓形圖", + "Pie or Doughnut" => "圓形圖或環圈圖", + "PivotTable Fields" => "樞紐分析表欄位", + "Place Picture in Cell" => "將圖片放入儲存格", + "Place Picture over Cells" => "將圖片放置在儲存格上", + "Print Area" => "列印範圍", + "Print Titles" => "列印標題", + "Print failed: the printing worker stopped." => "列印失敗:列印程序已停止。", + "Print failed: {error}" => "列印失敗:{error}", + "Print job submitted." => "列印任務已提交。", + "Print job submitted: {receipt}" => "列印任務已提交:{receipt}", + "Printer" => "印表機", + "Printer default" => "印表機預設", + "Printer discovery failed." => "尋找印表機失敗。", + "Product" => "乘積", + "Protect Sheet" => "保護工作表", + "Protect Structure and Windows" => "保護結構和視窗", + "Protect Workbook structure" => "保護活頁簿結構", + "Protect workbook for: Structure (sheets can't be added, moved, renamed, hidden or deleted)." => { + "保護活頁簿:結構(不能新增、移動、重新命名、隱藏或刪除工作表)。" + } + "Protect\nSheet" => "保護\n工作表", + "Protection" => "保護", + "Quarterly Sales Dashboard" => "季度銷售儀表板", + "Radar" => "雷達圖", + "Range password:" => "區域密碼:", + "Ranges that stay editable when the sheet is protected:" => "工作表受保護時仍可編輯的區域:", + "Rank and Percentile" => "排位與百分比排位", + "Recommended Charts" => "推薦的圖表", + "Red Border" => "紅色邊框", + "Red Text" => "紅色文字", + "Refers To" => "參照到", + "Refers to cells:" => "引用的儲存格:", + "Refers to:" => "參照到:", + "Refresh" => "重新整理", + "Regression" => "迴歸", + "Remove" => "移除", + "Remove Duplicates" => "移除重複項", + "Remove Field" => "刪除欄位", + "Remove the password (Modify)" => "移除密碼(修改)", + "Rename Sheet" => "重新命名工作表", + "Report Layout" => "報表佈局", + "Residuals" => "殘差", + "Right margin (in):" => "右邊界(英寸):", + "Row Height" => "列高", + "Row height (pixels):" => "列高(像素):", + "Rows" => "列", + "Sample" => "示例", + "Save Changes?" => "儲存更改?", + "Save a Copy" => "儲存副本", + "Save a copy as .{format}" => "另存副本為 .{format}", + "Scatter" => "XY 散佈圖", + "Scatter or Bubble" => "XY 散佈圖或泡泡圖", + "Scatter with Lines" => "帶直線的XY 散佈圖", + "Scope" => "範圍", + "Scope (Workbook or sheet name):" => "範圍(活頁簿或工作表名稱):", + "ScreenTip:" => "螢幕提示:", + "Search Commands" => "搜尋命令", + "Search and run any command" => "搜尋並執行任意命令", + "Search:" => "搜尋:", + "Seasonality (auto, 0 for none, or a season length):" => "季節性(自動,0 表示無,或季節長度):", + "Select" => "選擇", + "Select Data" => "選擇資料", + "Select Data Source" => "選擇資料來源", + "Select Data…" => "選擇資料…", + "Select a chart first." => "請先選擇一個圖表。", + "Select a printer" => "選擇印表機", + "Select and move ink and shapes" => "選擇並移動墨跡和形狀", + "Semicolon" => "分號", + "Series" => "系列", + "Series in" => "系列產生在", + "Series{n}" => "系列{n}", + "Series…" => "系列…", + "Sheets: {sheets}" => "工作表:{sheets}", + "Shift cells down" => "下方儲存格下移", + "Shift cells left" => "右側儲存格左移", + "Shift cells right" => "左側儲存格右移", + "Shift cells up" => "下方儲存格上移", + "Show Formulas (⌃`)" => "顯示公式(⌃`)", + "Show as % of Grand Total" => "顯示為總計的百分比", + "Show as No Calculation" => "顯示為無計算", + "Show as Rank" => "顯示為排名", + "Show as Running Total" => "顯示為滾動彙總", + "Show password" => "顯示密碼", + "Shrink to fit" => "縮小字型填滿", + "Single" => "單底線", + "Single Accounting" => "會計用單底線", + "Skip blanks" => "跳過空儲存格", + "Slicer" => "交叉分析篩選器", + "Solve" => "求解", + "Solver Parameters" => "規劃求解引數", + "Solver Results" => "規劃求解結果", + "Sort & Filter" => "排序和篩選", + "Sort by" => "排序依據", + "Source:" => "來源:", + "Space" => "空格", + "Spelling (F7)" => "拼寫檢查(F7)", + "Stacked Area" => "堆積區域圖", + "Stacked Bar" => "堆疊橫條圖", + "Stacked Column" => "堆疊直條圖", + "Stacked Line" => "堆疊折線圖", + "Standard Errors" => "標準誤差", + "Standard Width" => "標準欄寬", + "Standard column width (pixels):" => "標準欄寬(像素):", + "Standardized Residuals" => "標準化殘差", + "Start a conversation:" => "開始對話:", + "Statistic" => "統計量", + "Statistical" => "統計", + "Step value:" => "步長值:", + "Stop" => "停止", + "Stop value:" => "終止值:", + "Submitting print job…" => "正在提交列印任務…", + "Subscript" => "下標", + "Subtract" => "減", + "Summarize by Average" => "彙總方式:平均值", + "Summarize by Count" => "彙總方式:計數", + "Summarize by Max" => "彙總方式:最大值", + "Summarize by Min" => "彙總方式:最小值", + "Summarize by Sum" => "彙總方式:加總", + "Summary statistics" => "彙總統計", + "Superscript" => "上標", + "Switch Row/Column" => "切換列/欄", + "Tab" => "製表符", + "Table Styles" => "表樣式", + "Tabular" => "表格形式", + "Tab|Insert" => "插入", + "Text Box" => "文字方塊", + "Text length" => "文字長度", + "Text to Columns" => "資料剖析", + "Then by" => "次要依據", + "This month" => "本月", + "This week" => "本週", + "This workbook" => "此活頁簿", + "This workbook has no scripts or macros." => "此活頁簿沒有指令碼或巨集。", + "Timeline range (blank: first column of the selection):" => "時間線區域(留空表示所選區域的第一列):", + "Title:" => "標題:", + "Today" => "今天", + "Tomorrow" => "明天", + "Top" => "頂端", + "Top Align" => "靠上對齊", + "Top margin (in):" => "上邊界(英寸):", + "Transpose (E)" => "轉置(E)", + "Treat consecutive delimiters as one" => "連續分隔符號視為單個處理", + "Two-sided printing" => "雙面列印", + "Two-sided: long edge" => "雙面:長邊翻頁", + "Two-sided: short edge" => "雙面:短邊翻頁", + "Type" => "型別", + "Type (custom format code):" => "型別(自訂格式程式碼):", + "Type a command, e.g. freeze, chart, bold…" => "輸入命令,如 freeze、chart、bold…", + "Unhide" => "取消隱藏", + "Unhide Sheet…" => "取消隱藏工作表…", + "Unlock with password" => "用密碼解鎖", + "Unprotect Sheet" => "取消保護工作表", + "Unprotect Workbook" => "復原活頁簿保護", + "Up" => "向上", + "Use AutoFilter" => "使用自動篩選", + "Use a field's menu to move it between areas:" => "使用欄位選單在各區域之間移動欄位:", + "Use function" => "使用函數", + "Validation" => "資料驗證", + "Value" => "值", + "Value Of:" => "目標值:", + "Values" => "值", + "Values (V)" => "數值(V)", + "Values and number formats" => "值和數字格式", + "Values range (blank: second column of the selection):" => "值區域(留空表示所選區域的第二列):", + "Variable 1 Range:" => "變數 1 的區域:", + "Variable 2 Range:" => "變數 2 的區域:", + "Version {version}" => "版本 {version}", + "Vertical" => "垂直", + "Visible cells only" => "僅可見儲存格", + "Warning" => "警告", + "Watch\nWindow" => "監看\n視窗", + "Waterfall" => "瀑布圖", + "Web" => "Web", + "Weekday" => "工作日", + "What-If Analysis" => "模擬分析", + "Whole number" => "整數", + "Within workbook" => "在活頁簿內", + "Workbook" => "活頁簿", + "Workbook Statistics" => "活頁簿統計", + "Workbook\nStatistics" => "活頁簿\n統計", + "Wrap text" => "自動換列", + "Year" => "年", + "Yellow Fill with Dark Yellow Text" => "黃色填滿色深黃色文字", + "Z to A" => "Z 到 A", + "Zeros" => "零值", + "Zoom In" => "放大", + "Zoom Out" => "縮小", + "Zoom to 100%" => "縮放到 100%", + "Zoom to Selection" => "縮放到選定區域", + "Zoom…" => "縮放…", + "and:" => "和:", + "applies to" => "應用於", + "between" => "介於", + "dashed" => "虛線", + "dotted" => "點線", + "double" => "雙線", + "e.g. lookup, average, date" => "例如:SUM、尋找、日期", + "equal to" => "等於", + "greater than" => "大於", + "greater than or equal to" => "大於或等於", + "less than" => "小於", + "less than or equal to" => "小於或等於", + "medium" => "中", + "none" => "無", + "not between" => "不介於", + "not equal to" => "不等於", + "t-Test: Paired Two Sample for Means" => "t-檢驗:平均值的成對二樣本分析", + "t-Test: Two-Sample Assuming Equal Variances" => "t-檢驗:雙樣本等方差假設", + "t-Test: Two-Sample Assuming Unequal Variances" => "t-檢驗:雙樣本異方差假設", + "thick" => "粗", + "thin" => "細", + "this workbook" => "此活頁簿", + "with" => "與", + "{count} cell(s) found" => "找到 {count} 個儲存格", + "£ English (United Kingdom)" => "£ 英語(英國)", + "¥ Japanese" => "¥ 日語", + "— 1 step" => "— 1 步", + "— VBA project (preserved, not run)" => "— VBA 專案(已保留,不執行)", + "— {steps} steps" => "— {steps} 步", + "€ Euro" => "€ 歐元", + "Refresh printers" => "重新整理印表機", + "Advanced" => "高階", + "Advanced Filter" => "高階篩選", + "All Borders" => "所有框線", + "Allow Edit Ranges…" => "允許編輯區域…", + "Arrow" => "箭頭", + "Between…" => "介於…", + "Bottom Border" => "下框線", + "Bottom Double Border" => "雙底框線", + "Cell" => "儲存格", + "Column" => "柱形", + "Copy Cells" => "複製儲存格", + "Copy to:" => "複製到:", + "Criteria range (optional):" => "條件區域(可選):", + "Data Labels" => "資料標籤", + "Delete columns" => "刪除欄", + "Equal To…" => "等於…", + "Fill Formatting Only" => "只填滿格式", + "Fill Series" => "填滿數列", + "Fill Without Formatting" => "填滿但不填入格式", + "Formula" => "公式", + "Greater Than…" => "大於…", + "Insert columns" => "插入欄", + "Inside Borders" => "內部框線", + "Left Border" => "左框線", + "Less Than…" => "小於…", + "List range:" => "列表區域:", + "New range for the table:" => "表格的新區域:", + "No Border" => "無框線", + "Open Hyperlink" => "開啟超連結", + "Outside Borders" => "外邊框", + "Oval" => "橢圓", + "Place in Cell" => "放置在儲存格中", + "Place over Cells" => "浮於儲存格上方", + "Range:" => "區域:", + "Rectangle" => "矩形", + "Resize Table" => "調整表格大小", + "Resize\nTable" => "調整表格\n大小", + "Right Border" => "右框線", + "Rounded Rectangle" => "圓角矩形", + "Select locked cells" => "選定鎖定儲存格", + "Select unlocked cells" => "選定未鎖定的儲存格", + "Send" => "傳送", + "Thick Bottom Border" => "粗底框線", + "Thick Outside Borders" => "粗外邊框", + "Top Border" => "上框線", + "Top and Bottom Border" => "上下框線", + "Top and Double Bottom Border" => "上框線和雙下框線", + "Top and Thick Bottom Border" => "上框線和粗下框線", + "Triangle" => "三角形", + "Unique rows only" => "僅顯示不重複的記錄", + "Win/Loss" => "盈虧", + "Cells with data" => "包含資料的儲存格", + "Charts" => "圖表", + "Default sheet name" => "預設工作表名稱", + "Expression" => "表示式", + "Insert a chart to format it." => "請先插入圖表。", + "Issue" => "問題", + "Merged cells" => "合併儲存格", + "Message" => "訊息", + "Missing alternative text" => "缺少替代文字", + "Names" => "名稱", + "Object" => "物件", + "Result" => "結果", + "Select data for the chart first." => "請先選擇圖表資料。", + "Severity" => "嚴重程度", + "Sheet" => "工作表", + "Steps" => "步驟", + "Tables" => "表格", + "Copy matching rows elsewhere" => "將篩選結果複製到其他位置", + "Show matching rows in place" => "在原有區域顯示篩選結果", + "Error" => "錯誤", + "No dictionary is available on this system (GridCraft uses the system word list)." => "此係統沒有可用的詞典(GridCraft 使用系統詞表)。", + "This workbook asks to open the address below. Links can lead to harmful sites or start other programs: open it only if you trust the workbook." => { + "此活頁簿請求開啟下面的地址。連結可能會指向有害網站或啟動其他程式:只有信任此活頁簿時才開啟。" + } + "Start date:" => "開始日期:", + "Start time:" => "開始時間:", + "End time:" => "結束時間:", + "Date:" => "日期:", + "Time:" => "時間:", + "Minimum:" => "最小值:", + "Value:" => "值:", + "Most Recently Used" => "最近使用", + "Return to the original worksheet to insert this picture, or cancel and choose another cell." => { + "請回到原來的工作表插入此圖片,或取消並選擇其他儲存格。" + } + "Locking cells or hiding formulas has no effect until you protect the worksheet (Review › Protect Sheet)." => { + "鎖定儲存格或隱藏公式,只有在保護工作表後才會生效(校閱 › 保護工作表)。" + } + "Simplex LP" => "單純形線性規劃", + "Evolutionary" => "演化演算法", + "Simplex LP: for linear models; integer and binary constraints by branch and bound." => { + "單純形線性規劃:適用於線性模型;整數和二進位約束用分支定界法處理。" + } + "Evolutionary: a genetic search for models that aren't smooth; every variable cell needs bounds." => { + "演化演算法:用遺傳搜尋求解不光滑的模型;每個可變儲存格都需要給出上下限。" + } + "GRG Nonlinear: a local optimum of a smooth model, from the current values." => "非線性 GRG:從當前值出發,求光滑模型的區域性最優解。", + "A print job is already being submitted." => "已有列印任務正在提交。", + "Couldn't decode the generated PDF." => "無法解碼生成的 PDF。", + "Printing is unavailable here; export a PDF instead." => "此環境無法列印,請改為匯出 PDF。", + "Select an available printer in File > Print before submitting." => "提交前請先在「檔案 > 列印」中選擇可用的印表機。", + "The print command did not produce a PDF." => "列印命令沒有生成 PDF。", + "This workbook contains VBA macros. GridCraft keeps them when you save as .xlsm, but does not run them." => { + "此活頁簿含有 VBA 巨集。另存新檔 .xlsm 時 GridCraft 會保留這些巨集,但不會執行它們。" + } + "This workbook's VBA macros could not be loaded and were dropped, so they will not be in the saved file. Keep the original file." => { + "此活頁簿的 VBA 巨集無法載入,已被丟棄,因此儲存的檔案中不再包含它們。請保留原始檔案。" + } + "What this means" => "這意味著什麼", + "The cell or chart you're trying to change is on a protected sheet." => "要更改的儲存格或圖表位於受保護的工作表上。", + "The text box's worksheet is no longer active." => "文字方塊所在的工作表已不再處於活動狀態。", + "Reopen" => "重新開啟", + "Resolve" => "標記為已解決", + "Reply…" => "回覆…", + "Chart Type" => "圖表型別", + "Data Table" => "資料表", + "Show Data Table" => "顯示資料表", + "Show Legend Keys" => "顯示圖例項標示", + "Horizontal Borders" => "水平框線", + "Vertical Borders" => "垂直框線", + "Data Table|Outline" => "外框線", + "Available for column, bar, line, area and compatible combo charts." => "僅適用於直條圖、橫條圖、折線圖、區域圖及相容的組合圖。", + "Legend" => "圖例", + "Elements" => "元素", + "Colors & Layout" => "色彩與佈局", + "Stacked" => "堆積", + "Bar" => "條形", + "Colorful" => "彩色", + "Monochrome" => "單色", + "Accent 1" => "著色 1", + "Accent 2" => "著色 2", + "Accent 3" => "著色 3", + "Accent 4" => "著色 4", + "Accent 5" => "著色 5", + "Accent 6" => "著色 6", + "Page Break Preview" => "分頁預覽", + "(Select All)" => "(全選)", + "(Select All Search Results)" => "(選擇所有搜尋結果)", + "Drag to fill cells. Drag from inside a cell to select a range." => "拖動可填滿儲存格。從儲存格內拖動可選擇區域。", + "Search" => "搜尋", + "This sheet" => "此工作表", + "Structure" => "結構", + "Windows" => "視窗", + "Exporting needs a file picker, which this window doesn't have." => "匯出需要使用檔案選擇器,而此視窗沒有。", + "Type to filter…" => "輸入以篩選…", + "Actions" => "操作", + "Activate Sheet" => "啟用工作表", + "Active Field" => "活動欄位", + "Add Field" => "新增欄位", + "Add Scenario" => "新增方案", + "Add-ins" => "載入項", + "Advanced…" => "高階…", + "Align" => "對齊", + "All Scripts" => "所有指令碼", + "Analysis" => "分析", + "Arrange" => "排列", + "Arrange All" => "全部重排", + "AutoFill" => "自動填滿", + "Background" => "背景", + "Banded Columns" => "帶狀欄", + "Banded Rows" => "帶狀列", + "Calculated Field" => "計算欄位", + "Calculation" => "計算", + "Calculations" => "計算方式", + "Cancel Copy" => "取消複製", + "Cell Controls" => "儲存格控制元件", + "Cells" => "儲存格", + "Change Chart Type…" => "更改圖表型別…", + "Change Colors" => "更改色彩", + "Change Data Source" => "更改資料來源", + "Chart Layouts" => "圖表佈局", + "Chart Properties" => "圖表屬性", + "Chart Recommendations" => "圖表推薦", + "Chart Styles" => "圖表樣式", + "Check Value Against Validation" => "按驗證規則檢查值", + "Clear Slicer Filter" => "清除交叉分析篩選器篩選", + "Clipboard" => "剪貼簿", + "Colors" => "色彩", + "Consolidate…" => "合併計算…", + "Convert" => "轉換", + "Current Selection" => "當前選定內容", + "Custom Views…" => "自訂檢視…", + "Data Analysis…" => "資料分析…", + "Data Tools" => "資料工具", + "Defined Names" => "定義的名稱", + "Delete Chart" => "刪除圖表", + "Delete Name" => "刪除名稱", + "Delete Object" => "刪除物件", + "Delete PivotTable" => "刪除樞紐分析表", + "Delete Scenario" => "刪除方案", + "Delete Script" => "刪除指令碼", + "Delete Slicer" => "刪除交叉分析篩選器", + "Draw Border" => "繪製邊框", + "Edit Cell" => "編輯儲存格", + "Edit Text Box" => "編輯文字方塊", + "Editing" => "編輯", + "Effects" => "效果", + "Encode Workbook" => "編碼活頁簿", + "Enter Cell" => "輸入儲存格", + "Evaluate" => "求值", + "Expand/Collapse Field" => "展開/摺疊欄位", + "Export as CSV" => "匯出為 CSV", + "Export as PDF" => "匯出為 PDF", + "Field List" => "欄位列表", + "Fill Down" => "向下填滿", + "Fill Left" => "向左填滿", + "Fill Range With Input" => "用輸入值填滿區域", + "Fill Right" => "向右填滿", + "Fill Up" => "向上填滿", + "Filter Column" => "篩選欄", + "Filter Items" => "篩選專案", + "First Column" => "首欄", + "Fonts" => "字型", + "Forecast" => "預測", + "Format Painter" => "複製格式", + "Format Selection" => "設定所選內容格式", + "Formula Auditing" => "公式稽核", + "From Table/Range" => "來自表格/區域", + "From Text/CSV" => "來自文字/CSV", + "Function Library" => "函數庫", + "Get & Transform Data" => "獲取和轉換資料", + "Get Cell" => "獲取儲存格", + "Get Data" => "獲取資料", + "Grand Totals" => "總計", + "Group Field" => "組合欄位", + "Header Row" => "標題列", + "Hide & Unhide" => "隱藏和取消隱藏", + "Illustrations" => "插圖", + "Ink Stroke" => "筆劃", + "Ink to Shape" => "筆跡轉換為形狀", + "Insert Function…" => "插入函數…", + "Inspect Workbook" => "檢查活頁簿", + "Lasso Select" => "套索選擇", + "Last Column" => "末欄", + "Links" => "連結", + "List Commands" => "列出命令", + "List Functions" => "列出函數", + "Move Chart…" => "移動圖表…", + "Move Columns" => "移動欄", + "Move Field" => "移動欄位", + "Move Object" => "移動物件", + "Move Selection" => "移動選定內容", + "New Cell Style…" => "新建儲存格樣式…", + "New Script" => "新建指令碼", + "New Window" => "新建視窗", + "Next Cell in Selection" => "選定區域內的下一個儲存格", + "Next Sheet" => "下一個工作表", + "Number Format" => "數字格式", + "Object Properties" => "物件屬性", + "Pen" => "畫筆", + "PivotChart" => "樞紐分析圖", + "PivotTable Analyze" => "樞紐分析表分析", + "PivotTable Design" => "樞紐分析表設計", + "PivotTable Layout" => "樞紐分析表佈局", + "PivotTable Styles" => "樞紐分析表樣式", + "PivotTables" => "樞紐分析表", + "Previous Sheet" => "上一個工作表", + "Print Gridlines" => "列印格線", + "Print Headings" => "列印標題", + "Print Preview" => "列印預覽", + "Proofing" => "校對", + "Protect" => "保護", + "Queries & Connections" => "查詢和連線", + "Quick Layout" => "快速佈局", + "Read Range" => "讀取區域", + "Recommended PivotTables" => "推薦的樞紐分析表", + "Record Actions" => "錄製操作", + "Refresh All" => "全部重新整理", + "Reply" => "回覆", + "Resolve Thread" => "解決註解", + "Rotate" => "旋轉", + "Run Script" => "執行指令碼", + "Save as Web Page" => "另存新檔網頁", + "Scale to Fit" => "調整為合適大小", + "Scenario Summary" => "方案摘要", + "Scripting Tools" => "指令碼工具", + "Select All" => "全選", + "Select Current Region" => "選擇當前區域", + "Select Dependents" => "選擇從屬儲存格", + "Select Entire Column" => "選取整欄", + "Select Entire Row" => "選取整列", + "Select Precedents" => "選擇引用儲存格", + "Selection Pane" => "選擇窗格", + "Selection Statistics" => "選定區域統計", + "Set Values" => "設定值", + "Shape Fill" => "圖案填滿", + "Shape Outline" => "形狀輪廓", + "Shape Styles" => "形狀樣式", + "Sheet Options" => "工作表選項", + "Show Comments" => "顯示註解", + "Show Objects" => "顯示物件", + "Show Outline Levels" => "顯示分級顯示級別", + "Show Scenario" => "顯示方案", + "Show Zeros" => "顯示零值", + "Shrink to Fit" => "縮小字型填滿", + "Solver Reports" => "規劃求解報告", + "Solver…" => "規劃求解…", + "Sort Field" => "排序欄位", + "Sort…" => "排序…", + "Split" => "拆分", + "Styles" => "樣式", + "Subtotals" => "小計", + "Summarize with PivotTable" => "用樞紐分析表彙總", + "Switch Window" => "切換視窗", + "Switch Windows" => "切換視窗", + "Switch\nWindows" => "切換\n視窗", + "New\nWindow" => "新建\n視窗", + "Arrange\nAll" => "全部\n重排", + "Arrange Windows" => "重排視窗", + "Symbols" => "符號", + "Table Name" => "表格名稱", + "Table Style Options" => "表格樣式選項", + "Thesaurus" => "同義詞庫", + "Toggle Checkbox" => "切換核取方塊", + "Toggle Slicer Value" => "切換交叉分析篩選器值", + "Tools" => "工具", + "Total Row" => "合計列", + "Totals Function" => "彙總函數", + "Undo History" => "復原歷史記錄", + "Value Field Settings" => "值欄位設定", + "Window" => "視窗", + "Workbook Views" => "活頁簿檢視", + "{count} engine commands are available. See docs/mcp.md and docs/control-protocol.md." => { + "當前可用 {count} 個引擎命令。參見 docs/mcp.md 與 docs/control-protocol.md。" + } + "{n} cell(s) found" => "找到 {n} 個儲存格。", + "No Fill" => "無填滿", + "A table can't overlap another table." => "表格不能與其他表格重疊。", + "A workbook must contain at least one visible worksheet." => "活頁簿必須至少包含一個可見的工作表。", + "Anova needs at least two groups, each with at least one number." => "方差分析至少需要兩組,每組至少有一個數值。", + "Cell must contain a formula." => "儲存格必須包含公式。", + "Cell must contain a value." => "儲存格必須包含值。", + "Column width must be between 0 and 1800 pixels." => "欄寬必須在 0 到 1800 畫素之間。", + "Column width must be between 0 and 255 characters." => "欄寬必須在 0 到 255 個字元之間。", + "Constraint cells must be on the objective cell's sheet." => "約束儲存格必須與目標儲存格位於同一工作表。", + "Each input range needs at least two numbers." => "每個輸入區域至少需要兩個數值。", + "Excel 97-2003 (.xls) is supported for import only. Save as .xlsx or another supported export format." => { + "僅支援匯入 Excel 97-2003 (.xls)。請另存新檔 .xlsx 或其他支援的匯出格式。" + } + "Input Y range and input X range must have the same number of rows." => "輸入 Y 區域與輸入 X 區域的列數必須相同。", + "Input Y range must be a single column." => "輸入 Y 區域必須是單列。", + "Input cell reference is not valid." => "輸入的儲存格引用無效。", + "Input range contains non-numeric data." => "輸入區域包含非數值資料。", + "Input range must be a single row or column." => "輸入區域必須是單行或單列。", + "Input ranges must have the same number of values." => "各輸入區域的數值個數必須相同。", + "Insert Cut Cells works on whole rows or columns; cut whole rows or columns, or use Paste." => { + "「插入剪下儲存格」只適用於整列或整欄;請剪下整列或整欄,或改用「貼上」。" + } + "Integer and binary constraints must be on variable cells." => "整數約束和二進位約束必須作用於可變儲存格。", + "Multi-cell array formulas aren't allowed in tables." => "表格中不允許使用多儲存格陣列公式。", + "No cells were found." => "未找到儲存格。", + "No sheets are hidden." => "沒有隱藏的工作表。", + "Nothing to import." => "沒有可匯入的內容。", + "Nothing to paste." => "沒有可貼上的內容。", + "ODS is supported for data import only. Save as .xlsx or another supported export format." => { + "僅支援將 ODS 用於資料匯入。請另存新檔 .xlsx 或其他支援的匯出格式。" + } + "Pick up a format first." => "請先選取格式。", + "Reference isn't valid." => "引用無效。", + "Row height must be between 0 and 409.5 points." => "列高必須在 0 到 409.5 磅之間。", + "Row height must be between 0 and 546 pixels (409.5 points)." => "列高必須在 0 到 546 畫素(409.5 磅)之間。", + "Select a cell inside a table first, or pass `table`." => "請先選擇表格內的儲存格,或傳入 `table`。", + "Select a timeline column and a values column for the forecast." => "請為預測選擇時間線列和數值列。", + "The Evolutionary method needs a lower and an upper bound on every variable cell (constraints such as \"A1:A3 <= 10\"), or requireBounds: false." => { + "演化演算法要求每個可變儲存格都有上下界(例如約束 \"A1:A3 <= 10\"),或傳入 requireBounds: false。" + } + "The Limits report doesn't apply to models with integer or binary constraints." => "「極限值」報告不適用於含整數或二進位約束的模型。", + "The Limits report is available for Simplex LP and GRG Nonlinear." => "「極限值」報告僅適用於單純線性規劃和 GRG 非線性。", + "The X variables are collinear; the regression can't be computed." => "X 變數之間存在共線性,無法計算迴歸。", + "The bin range holds no numbers." => "直方圖區域中沒有數值。", + "The cell has no formula." => "該儲存格沒有公式。", + "The cell you are trying to change is on a protected sheet that does not allow selecting it." => { + "你要更改的儲存格位於受保護的工作表上,且該工作表不允許選中它。" + } + "The cell you're trying to change is on a protected sheet." => "你要更改的儲存格位於受保護的工作表上。", + "The consolidated data doesn't fit below and right of the destination." => "合併後的資料無法容納在目標位置的右側和下方。", + "The constraint's two sides must be the same size (or the right side one cell)." => "約束兩側的大小必須相同(或右側為一個儲存格)。", + "The copied cells don't fit on the sheet at this position." => "複製的儲存格無法放置在工作表的該位置。", + "The copied sheet no longer exists." => "複製的工作表已不存在。", + "The copy area is the whole sheet; there is no room to insert it." => "複製區域是整個工作表,沒有空間可插入。", + "The cut area doesn't fit at this position; nothing was moved." => "剪下區域無法放置在該位置,未做任何移動。", + "The cut rows or columns can't be inserted inside themselves." => "不能把剪下的列或欄插入到它們自身內部。", + "The damping factor must be between 0 and 1." => "阻尼係數必須在 0 到 1 之間。", + "The extract range can't overlap the list range." => "提取區域不能與列表區域重疊。", + "The file is empty." => "檔案為空。", + "The fill is too large." => "填滿範圍過大。", + "The forecast end must be after the last point of the timeline." => "預測結束時間必須晚於時間線的最後一個點。", + "The forecast start needs at least two values before it to fit the forecast." => "預測起點之前至少需要兩個值才能擬合預測。", + "The headers must remain in the same row, and the resulting table range must overlap the original table range." => { + "標題必須保持在同一行,且結果表格區域必須與原表格區域重疊。" + } + "The input range holds no numbers." => "輸入區域中沒有數值。", + "The interval must be a whole number from 1 to the number of data points." => "間隔必須是 1 到資料點個數之間的整數。", + "The name entered already exists. Enter a unique name." => "輸入的名稱已存在。請輸入唯一的名稱。", + "The name that you entered is not valid." => "輸入的名稱無效。", + "The number must be between 1 and 409." => "數字必須在 1 到 409 之間。", + "The objective cell must contain a formula." => "目標儲存格必須包含公式。", + "The objective must be a single cell." => "目標必須是單個儲存格。", + "The password you supplied is not correct." => "提供的密碼不正確。", + "The report doesn't fit on the sheet below and right of the output cell." => "報告無法容納在輸出儲存格的右側和下方。", + "The sheet is protected with a password. Unprotect it first (Review › Unprotect Sheet)." => { + "該工作表受密碼保護。請先復原保護(校閱 › 取消保護工作表)。" + } + "The timeline needs at least two points a constant step apart." => "時間線至少需要兩個間隔相等的點。", + "The variable cells must be a reference like B2:B4." => "可變儲存格必須是形如 B2:B4 的引用。", + "The variable cells must be on the objective cell's sheet." => "可變儲存格必須與目標儲存格位於同一工作表。", + "The weekday series runs past the supported date range." => "工作日序列超出了支援的日期範圍。", + "The workbook is protected and cannot be changed." => "活頁簿受保護,無法更改。", + "There are no comments in this workbook." => "此活頁簿中沒有註解。", + "There are no scenarios on this sheet." => "此工作表中沒有方案。", + "There are no values to forecast." => "沒有可預測的數值。", + "There's a problem with this formula." => "此公式有問題。", + "There's no comment in this cell." => "此儲存格中沒有註解。", + "There's no hyperlink in this cell." => "此儲存格中沒有超連結。", + "There's no room below the selection for the totals." => "選定區域下方沒有空間放置彙總。", + "There's no room below the table for the total row." => "表格下方沒有空間放置彙總行。", + "This action won't work on multiple selections." => "此操作不能用於多重選定區域。", + "This operation isn't allowed: it would shift cells in a table on your worksheet." => "不允許此操作:它會移動工作表中表格內的儲存格。", + "This sheet has no saved Solver model." => "此工作表沒有儲存的規劃求解模型。", + "To do this, all the merged cells need to be the same size." => "要執行此操作,所有合併儲存格的大小必須相同。", + "To prevent possible loss of data, Excel cannot shift nonblank cells off of the worksheet." => { + "為避免資料丟失,不能將非空白儲存格移出工作表。" + } + "To prevent possible loss of data, cells can't be pushed off the end of the worksheet." => "為避免資料丟失,不能將儲存格推出工作表的末端。", + "To prevent possible loss of data, columns cannot be shifted off of the worksheet." => "為避免資料丟失,不能將列移出工作表。", + "Too few observations for this many X variables." => "相對於這麼多 X 變數,觀測值太少。", + "Too many report sheets." => "報告工作表過多。", + "Unprotect the sheet to change its edit ranges." => "請取消保護工作表後再更改可編輯區域。", + "Variable cells must hold constants, not formulas." => "可變儲存格必須存放常量,不能是公式。", + "We looked at all the data next to your selection and didn't see a pattern for filling in values for you." => { + "我們檢視了選定區域旁邊的所有資料,沒有發現可用於填滿的規律。" + } + "XLSB is supported for data import only. Save as .xlsx or another supported export format." => { + "僅支援將 XLSB 用於資料匯入。請另存新檔 .xlsx 或其他支援的匯出格式。" + } + "You can't change part of an array." => "不能更改陣列的一部分。", + "files larger than 2 GB aren't supported" => "不支援大於 2 GB 的檔案", + "no filter" => "沒有篩選", + "no such sheet" => "沒有該工作表", + "not found" => "未找到", + "Sorting" => "排序操作", + "Filtering" => "篩選操作", + "Text that Contains" => "文字包含", + "A Date Occurring" => "發生日期", + "New Formatting Rule" => "新建格式規則", + "Green - Yellow - Red" => "綠 - 黃 - 紅", + "Red - Yellow - Green" => "紅 - 黃 - 綠", + "Green - White - Red" => "綠 - 白 - 紅", + "Blue - White - Red" => "藍 - 白 - 紅", + "White - Green" => "白 - 綠", + "White - Red" => "白 - 紅", + "3 Arrows" => "三向箭頭", + "3 Traffic Lights" => "三色交通燈", + "3 Symbols" => "三個符號", + "4 Ratings" => "四級評級", + "5 Arrows" => "五向箭頭", + "5 Quarters" => "五象限", + "Blue" => "藍色", + "Green" => "綠色", + "Red" => "紅色", + "Orange" => "橙色", + "Purple" => "紫色", + "Border presets" => "邊框預設", + "Shape|Line" => "直線", + "More Table Styles" => "更多表格樣式", + "Bubble" => "泡泡圖", + "Box & Whisker" => "盒鬚圖", + "Treemap" => "樹狀圖", + "Sunburst" => "旭日圖", + "Stock" => "股票圖", + "Letter" => "信紙", + "Legal" => "法律用紙", + "Tabloid" => "小報", + "Executive" => "行政用紙", + "Japanese Postcard" => "日本明信片", + "Japanese Double Postcard" => "日本雙面明信片", + "Japanese Envelope #3" => "日本信封 #3", + "Japanese Envelope #4" => "日本信封 #4", + "Japanese Envelope Kaku #2" => "日本角形信封 #2", + "Japanese Envelope Kaku #3" => "日本角形信封 #3", + "B4 (ISO)" => "B4(ISO)", + "B5 (ISO)" => "B5(ISO)", + "B6 (ISO)" => "B6(ISO)", + "Good, Bad and Neutral" => "好、差和適中", + "Data and Model" => "資料和模型", + "Titles and Headings" => "標題和表頭", + "Themed Cell Styles" => "主題儲存格樣式", + "Good" => "好", + "Bad" => "差", + "Neutral" => "適中", + "Total" => "總計", + "Note" => "註釋", + "Input" => "輸入", + "Output" => "輸出", + "Check Cell" => "檢查儲存格", + "Explanatory Text" => "說明性文字", + "Linked Cell" => "連結儲存格", + "Warning Text" => "警告文字", + "Heading 1" => "標題 1", + "Heading 2" => "標題 2", + "Heading 3" => "標題 3", + "Heading 4" => "標題 4", + "Comma [0]" => "逗號 [0]", + "Currency [0]" => "貨幣 [0]", + "Medium" => "中等", + "¥ Chinese (PRC)" => "¥ 中文(中國)", + "₹ English (India)" => "₹ 英語(印度)", + "CHF German (Switzerland)" => "CHF 德語(瑞士)", + "Rp Indonesian" => "Rp 印度尼西亞語", + "₩ Korean" => "₩ 韓語", + "R$ Portuguese (Brazil)" => "R$ 葡萄牙語(巴西)", + "₽ Russian" => "₽ 俄語", + "20% - Accent1" => "20% - 著色1", + "40% - Accent1" => "40% - 著色1", + "60% - Accent1" => "60% - 著色1", + "Accent1" => "著色1", + "20% - Accent2" => "20% - 著色2", + "40% - Accent2" => "40% - 著色2", + "60% - Accent2" => "60% - 著色2", + "Accent2" => "著色2", + "20% - Accent3" => "20% - 著色3", + "40% - Accent3" => "40% - 著色3", + "60% - Accent3" => "60% - 著色3", + "Accent3" => "著色3", + "20% - Accent4" => "20% - 著色4", + "40% - Accent4" => "40% - 著色4", + "60% - Accent4" => "60% - 著色4", + "Accent4" => "著色4", + "20% - Accent5" => "20% - 著色5", + "40% - Accent5" => "40% - 著色5", + "60% - Accent5" => "60% - 著色5", + "Accent5" => "著色5", + "20% - Accent6" => "20% - 著色6", + "40% - Accent6" => "40% - 著色6", + "60% - Accent6" => "60% - 著色6", + "Accent6" => "著色6", + "Page 1" => "第 1 頁", + "Page 1 of ?" => "第 1 頁,共 ? 頁", + "{sheet}, Page 1" => "{sheet},第 1 頁", + "{file}, Page 1" => "{file},第 1 頁", + "Light Blue" => "淺藍", + "Hyperlink" => "超連結", + "Percent" => "百分比", + "PRs" => "PR", + "First" => "首個", + "Last" => "最新", + "+LOC" => "+行", + "−LOC" => "−行", + "ΔLOC" => "Δ行", + "+Bin" => "+二進位", + "−Bin" => "−二進位", + "That undo group has already ended." => "該復原組已結束。", + "There isn't room on the sheet for the list of names." => "工作表上沒有足夠的空間容納名稱列表。", + "There's no room to the right of the selection for the total." => "選區右側沒有空間放置總計。", + "This workbook has no names to paste." => "此活頁簿沒有可貼上的名稱。", + "`categories` is not a range" => "`categories` 不是區域", + "`columns` must name at least one column of the range" => "`columns` 必須指定該區域的至少一列", + "`commands` must be an array" => "`commands` 必須是陣列", + "`confidence` is between 0 and 1 (or 0 and 100%)" => "`confidence` 應在 0 到 1 之間(或 0 到 100%)", + "`constraints` must be an array" => "`constraints` 必須是陣列", + "`enableShowDetails` must be true or false" => "`enableShowDetails` 必須是 true 或 false", + "`end` is not on the timeline" => "`end` 不在時間線上", + "`flip` is not supported: shapes have no flip state" => "不支援 `flip`:形狀沒有翻轉狀態", + "`forecastStart` is not on the timeline (it is a point of the history, before its last point)" => { + "`forecastStart` 不在時間線上(它應是歷史資料中的一個點,位於最後一個點之前)" + } + "`id` must be a text box id" => "`id` 必須是文字方塊 id", + "`model` must be data.solver params" => "`model` 必須是 data.solver 引數", + "`name` must be 1 to 255 characters" => "`name` 必須為 1 到 255 個字元", + "`numberFormat` is a format code or null" => "`numberFormat` 是格式程式碼或 null", + "`printArea` must be a range like \"A1:F50\"" => "`printArea` 必須是 \"A1:F50\" 這樣的區域", + "`reports` is empty (answer, limits)" => "`reports` 為空(answer、limits)", + "`reports` must be an array of answer and limits" => "`reports` 必須是 answer 和 limits 組成的陣列", + "`seasonality` is \"auto\", 0 (none) or a season length from 2 to 8,760" => "`seasonality` 是 \"auto\"、0(無)或 2 到 8,760 之間的季節長度", + "`selected` is a list of item labels or null" => "`selected` 是項標籤欄表或 null", + "`text` is longer than 32,767 characters" => "`text` 超過 32,767 個字元", + "`text` must be a string" => "`text` 必須是字串", + "`to` must be a number" => "`to` 必須是數字", + "`trusted` must be true or false" => "`trusted` 必須是 true 或 false", + "a field object needs `field`" => "欄位物件需要 `field`", + "a list validation needs `formula1`" => "列表驗證需要 `formula1`", + "a stroke needs at least two points" => "筆畫至少需要兩個點", + "all cells must be on one sheet" => "所有儲存格必須位於同一工作表", + "all cells of a reference must be on one sheet" => "引用的所有儲存格必須位於同一工作表", + "alpha must be between 0 and 1" => "alpha 必須在 0 到 1 之間", + "cell pictures are limited to 8192 pixels per side and 16 million pixels" => "儲存格圖片每邊不超過 8192 畫素,且總畫素不超過 1600 萬", + "cell pictures must be at most 16 MiB" => "儲存格圖片最大 16 MiB", + "cell pictures support PNG and JPEG" => "儲存格圖片支援 PNG 和 JPEG", + "choose a valid PNG or JPEG picture" => "請選擇有效的 PNG 或 JPEG 圖片", + "choose at least one of summary, confidence, kthLargest or kthSmallest" => { + "請至少選擇 summary、confidence、kthLargest 或 kthSmallest 中的一項" + } + "column outside the filter range" => "列在篩選範圍之外", + "destination columns are outside the worksheet" => "目標列在工作表之外", + "empty input Y range" => "輸入 Y 區域為空", + "empty input range" => "輸入區域為空", + "expected exclusive or inclusive" => "應為 exclusive 或 inclusive", + "give `rowInput`, `columnInput` or both" => "請提供 `rowInput`、`columnInput` 或兩者", + "give at least one source range in `sources`" => "請在 `sources` 中提供至少一個源區域", + "give both `timeline` and `values`, or neither" => "請同時提供 `timeline` 和 `values`,或兩者都不提供", + "goal `value` needs a number in `value`" => "目標為 `value` 時需要在 `value` 中提供數字", + "gone" => "物件已不存在", + "image larger than 64 MB" => "圖片超過 64 MB", + "invalid base64" => "無效的 base64", + "invalid cell address" => "無效的儲存格地址", + "invalid image dimensions" => "無效的圖片尺寸", + "kind must be chart, image or shape" => "kind 必須是 chart、image 或 shape", + "missing `area` (rows|columns|values|filters)" => "缺少 `area`(rows|columns|values|filters)", + "missing `before`" => "缺少 `before`", + "missing `cell`" => "缺少 `cell`", + "missing `cell`: the selection is on the active sheet" => "缺少 `cell`:選區位於當前活動工作表", + "missing `changing`" => "缺少 `changing`", + "missing `column`" => "缺少 `column`", + "missing `field`" => "缺少 `field`", + "missing `format` or `code`" => "缺少 `format` 或 `code`", + "missing `formula`" => "缺少 `formula`", + "missing `height` (pixels) or `points`" => "缺少 `height`(畫素)或 `points`", + "missing `id`" => "缺少 `id`", + "missing `index`" => "缺少 `index`", + "missing `input` (or `value`)" => "缺少 `input`(或 `value`)", + "missing `location`" => "缺少 `location`", + "missing `name`" => "缺少 `name`", + "missing `output` (the output range)" => "缺少 `output`(輸出區域)", + "missing `path`" => "缺少 `path`", + "missing `percent`" => "缺少 `percent`", + "missing `range`" => "缺少 `range`", + "missing `range`, `categories` or `removeSeries`" => "缺少 `range`、`categories` 或 `removeSeries`", + "missing `range`: the selection is on the active sheet" => "缺少 `range`:選區位於當前活動工作表", + "missing `reference`" => "缺少 `reference`", + "missing `reports` (answer, limits)" => "缺少 `reports`(answer、limits)", + "missing `rows` or `cols`: the selection is on the active sheet" => "缺少 `rows` 或 `cols`:選區位於當前活動工作表", + "missing `size`" => "缺少 `size`", + "missing `source`" => "缺少 `source`", + "missing `target`" => "缺少 `target`", + "missing `title`" => "缺少 `title`", + "missing `to`" => "缺少 `to`", + "missing `value`" => "缺少 `value`", + "missing `values` (array of rows)" => "缺少 `values`(列陣列)", + "missing `what`" => "缺少 `what`", + "missing `width`" => "缺少 `width`", + "missing `width` (pixels) or `chars`" => "缺少 `width`(畫素)或 `chars`", + "missing `word`" => "缺少 `word`", + "missing or invalid `color`" => "缺少 `color` 或其無效", + "missing the constraint's right side" => "缺少約束的右側", + "mode must be moveAndSize, moveOnly or absolute" => "mode 必須是 moveAndSize、moveOnly 或 absolute", + "multi-area charts require a text category column followed by equal-height series columns" => { + "多區域圖表要求一個文字分類列,後跟等高的系列列" + } + "multi-area series columns require headers" => "多區域的系列列需要有標題", + "no changing cells" => "沒有可變儲存格", + "no chart on this sheet" => "此工作表上沒有圖表", + "no ink stroke to convert" => "沒有可轉換的墨跡筆畫", + "no slicer" => "沒有交叉分析篩選器", + "no slicer on this sheet" => "此工作表上沒有交叉分析篩選器", + "no such chart" => "沒有這樣的圖表", + "no such name" => "沒有這樣的名稱", + "no such name to edit" => "沒有可編輯的這樣的名稱", + "no such object" => "沒有這樣的物件", + "no such range" => "沒有這樣的區域", + "no such scenario" => "沒有這樣的方案", + "no such script" => "沒有這樣的指令碼", + "no such series" => "沒有這樣的系列", + "no such shape" => "沒有這樣的形狀", + "no such text box" => "沒有這樣的文字方塊", + "no such view" => "沒有這樣的檢視", + "no such window" => "沒有這樣的視窗", + "no suggestion with that index" => "該索引沒有對應的建議", + "no value field at that index" => "該索引處沒有值欄位", + "not a range" => "不是區域", + "pass `field` or `index`" => "請傳入 `field` 或 `index`", + "picture cannot be decoded within the 64 MiB limit" => "在 64 MiB 限制內無法解碼圖片", + "placement must be cell or overCells" => "placement 必須是 cell 或 overCells", + "range larger than 1,000,000 cells; read it in parts" => "區域超過 1,000,000 個儲存格;請分批讀取", + "range too large" => "區域過大", + "range too large for a chart" => "區域過大,無法用於圖表", + "result cells must be on the scenarios' sheet" => "結果儲存格必須位於方案所在的工作表", + "scripts in this workbook came from a file and are disabled; trust the workbook first (Trust Scripts in View › Macros, Alt+F8; `automate.trustScripts`; or `trusted: true`)" => { + "此活頁簿中的指令碼來自檔案,已被禁用;請先信任該活頁簿(檢視 › 巨集,Alt+F8 中的「信任指令碼」;`automate.trustScripts`;或 `trusted: true`)" + } + "select a cell in a table" => "請選擇表格中的儲存格", + "selection too large" => "選區過大", + "selection too large to format cell by cell" => "選區過大,無法逐儲存格設定格式", + "sort key row must be 1 or greater" => "排序鍵的列號必須不小於 1", + "source columns are outside the worksheet" => "源列在工作表之外", + "style name too long" => "樣式名過長", + "the confidence level must be between 0 and 100" => "置信水平必須在 0 到 100 之間", + "the constraint's right side must be a number" => "約束的右側必須是數字", + "the criteria range is too large" => "條件區域過大", + "the extract range exceeds the worksheet" => "提取區域超出了工作表", + "the forecast runs past the last date" => "預測超出了最後一個日期", + "the inserted lines would extend past the end of the worksheet" => "插入的行會超出工作表末尾", + "the list range is too large" => "列表區域過大", + "the move is too close to the worksheet boundary" => "移動位置太靠近工作表邊界", + "the name is too long (255 characters max)" => "名稱過長(最多 255 個字元)", + "the report is too large" => "報表過大", + "the shape is not a text box" => "該形狀不是文字方塊", + "the sources are too large" => "源資料過大", + "the symbol can't contain a quote, a backslash or a control character" => "符號不能包含引號、反斜槓或控制字元", + "the table has no columns" => "該表格沒有列", + "the table needs at least two rows and two columns" => "該表格至少需要兩行兩列", + "the target must contain the source in one of its corners" => "目標區域必須在其某個角落包含源區域", + "the timeline and the values are each one row or one column" => "時間線和數值各自應為一列或一欄", + "the timeline and the values must be on one sheet" => "時間線和數值必須位於同一工作表", + "the timeline and the values need the same number of cells" => "時間線和數值需要相同的儲存格數量", + "too many items" => "項過多", + "too many rows" => "行過多", + "too many scenarios" => "方案過多", + "too many sort levels (64 max)" => "排序級別過多(最多 64 個)", + "too many sources (255 max)" => "源過多(最多 255 個)", + "trendlines need a 2-D column, bar, line, area, scatter or bubble series" => { + "趨勢線需要二維直條圖、橫條圖、折線圖、區域圖、XY 散佈圖或泡泡圖系列" + } + "value is not in the column" => "值不在該列中", + "Customize Status Bar" => "自訂狀態列", + "Outline Settings" => "分級顯示設定", + "Paste Names…" => "貼上名稱…", + "PivotTable Options" => "樞紐分析表選項", + "Show Details" => "顯示詳細資訊", + "Show Outline Symbols" => "顯示分級顯示符號", + "Stop Action" => "停止操作", + "Paste Name" => "貼上名稱", + "Row height (points):" => "列高(點):", + "Settings" => "設定", + "Summary columns to right of detail" => "彙總列位於明細資料右側", + "Summary rows below detail" => "彙總行位於明細資料下方", + "cf|CellIs" => "儲存格值", + "cf|Expression" => "公式", + "cf|ContainsText" => "包含文字", + "cf|NotContainsText" => "不包含文字", + "cf|BeginsWith" => "開頭是", + "cf|EndsWith" => "結尾是", + "cf|Blanks" => "空白", + "cf|NoBlanks" => "非空白白", + "cf|Errors" => "錯誤", + "cf|NoErrors" => "無錯誤", + "cf|Duplicate" => "重複值", + "cf|Unique" => "唯一值", + "cf|Top10" => "前 10 項", + "cf|AboveAverage" => "高於平均值", + "cf|TimePeriod" => "發生日期", + "cf|ColorScale" => "色階", + "cf|DataBar" => "資料橫條", + "cf|IconSet" => "圖示集", + "Record Macro" => "錄製巨集", + "Stop Recording" => "停止錄製", + "Use Relative References" => "使用相對參照", + "Run\nMacro" => "執行巨集", + "Macros…" => "巨集…", + "Recording" => "正在錄製", + "New Macro" => "新增巨集", + "Collapse dialog" => "摺疊對話方塊", + "Expand dialog" => "展開對話方塊", + // Macro commands and the step editor. + "Check Macro" => "檢查巨集", + "Close Window" => "關閉視窗", + "Delete Macro" => "刪除巨集", + "Get Macro" => "取得巨集", + "List Macros" => "列出巨集", + "Rename Macro" => "重新命名巨集", + "Run Macro" => "執行巨集", + "Save Macro" => "儲存巨集", + "Step Into" => "單步進入", + "Stop debugging" => "停止除錯", + "Keep the changes the macro has made so far? They are one undo step either way." => "保留巨集目前已做的修改?兩種情況都算一步復原。", + "Undo Changes" => "復原更改", + "Keep Changes" => "保留更改", + "Description:" => "說明:", + "Runs with:" => "執行方式:", + "Check shows on the grid what the macro reads and writes. Click a step's gutter to set a breakpoint." => { + "檢查會在網格上標出巨集讀取和寫入的儲存格。點選步驟左側的槽位可設定斷點。" + } + "No steps yet. Add Step picks a command, or record one with Automate › Record Macro." => { + "還沒有步驟。「新增步驟」可以挑選命令,或用「自動化 › 錄製巨集」錄一段。" + } + "No command matches." => "沒有匹配的命令。", + "Select a step to see its settings." => "選擇一個步驟以檢視其設定。", + "Change…" => "更改…", + "For each" => "對每個", + "of:" => "的:", + "At most" => "最多", + "Inside, Row (or Column) stands for the current one, e.g. Row.right." => "在迴圈體內,Row(或 Column)代表當前這一行(列),例如 Row.right。", + "If cell" => "如果儲存格", + "Message:" => "訊息:", + "The ranges the macro works on. Each is checked before the macro runs." => "巨集作用的區域。執行前每個區域都會被檢查。", + "No inputs: the macro works on fixed cells only." => "沒有輸入:巨集只作用於固定的儲存格。", + "Shape:" => "形狀:", + "Data rows:" => "資料列:", + "Columns:" => "欄:", + "Each column must hold:" => "每列必須為:", + "Example (what Check, Run and Debug use here):" => "示例(檢查、執行和除錯在此使用):", + "Use current selection as example" => "用當前選定區域作為示例", + "Output anchor (what the Output token stands for):" => "輸出錨點(Output 標記代表的位置):", + "Leave it empty when no step uses Output. A token such as Input.right keeps it beside the data." => { + "沒有步驟使用 Output 時留空。寫成 Input.right 之類的標記可以把它放在資料旁邊。" + } + "When results would land on cells that hold data:" => "當結果會落在已有資料的儲存格上時:", + "Agents and other programs that run the macro get an error instead of the question." => { + "執行該巨集的代理程式和其他程式會收到一個錯誤,而不是這個問題。" + } + "Macro name:" => "巨集名稱:", + "Options…" => "選項…", + "This workbook also has a VBA project. GridCraft keeps it when you save but does not run it." => { + "此活頁簿還包含一個 VBA 專案。儲存時 GridCraft 會保留它,但不會執行。" + } + "Shortcut key:" => "快捷鍵:", + "No macros in this workbook" => "此活頁簿中沒有巨集", + "Split tabs" => "拆分工作表標籤", + // Macro buttons' hints and the window-management words (ribbon, dialogs, backstage). + "Record your actions as a macro" => "把操作錄製成巨集", + "Run a macro on the selection" => "對選定區域執行巨集", + "Write a macro step by step" => "逐步編寫一個巨集", + "Open the macro in the step editor and stop before its first step" => "在步驟編輯器中開啟該巨集,並停在第一步之前", + "Record steps relative to the cells selected when recording starts, so the macro works on other data" => { + "以開始錄製時選定的儲存格為基準記錄相對參照,讓巨集能用於其他資料" + } + "Tiled" => "平鋪", + "Cascade" => "層疊", + "Windows of active workbook" => "當前活頁簿的視窗", + // Sentences the macro UI builds with data (see `Language::tr_fill`). + "step" => "步", + "cell" => "個儲存格", + "cells" => "個儲存格", + "nothing" => "無", + "Saved macro “{name}” ({count})" => "已儲存巨集「{name}」({count})", + " without {key}: another macro took it while recording" => ",但沒有快捷鍵 {key}:錄製期間被另一個巨集佔用了", + "Recording stopped" => "錄製已停止", + "Ran macro “{name}” ({count})" => "已執行巨集「{name}」({count})", + "Macro “{name}” stopped: {message}" => "巨集「{name}」已停止:{message}", + "Recording · {count}" => "正在錄製 · {count}", + "{name} (script, {count})" => "{name} (指令碼,{count})", + "Macro: {name}" => "巨集:{name}", + "This macro is in “{title}”. Switch back to it to edit, check or run the macro." => { + "此巨集位於「{title}」中。請切換回去再編輯、檢查或執行它。" + } + "The macro “{name}” is in “{book}”. Switch back to it to save, check or run the macro." => { + "巨集「{name}」位於「{book}」中。請切換回去再儲存、檢查或執行它。" + } + "Save changes to macro “{name}”?" => "是否儲存對巨集「{name}」的更改?", + "Ran {count}." => "已執行 {count}。", + "Finished: {count} ran, one undo step." => "已完成:執行了 {count},算一步復原。", + "Stopped after {count}; the changes were kept." => "已在 {count} 後停止;更改已保留。", + "Stopped; the changes were undone." => "已停止;更改已復原。", + "Stopped: {message}" => "已停止:{message}", + "The macro failed; nothing was changed." => "巨集執行失敗;沒有做任何更改。", + "Needs approval before it can run: it {what}." => "執行前需要批准:它會 {what}。", + "Check passed: writes {cells}" => "檢查透過:寫入 {cells}", + ", {conflicts} of them hold data (red)" => ",其中 {conflicts} 個已有資料(紅色)", + ", over no data" => ",不覆蓋任何資料", + ". Later steps can't be previewed." => "。後面的步驟無法預覽。", + "Paused before step {step} · {what}" => "已在步驟 {step} 前暫停 · {what}", + " · pass {at} of {of}" => " · 第 {at} 輪,共 {of} 輪", + " · at a breakpoint" => " · 位於斷點", + "Changed so far: {cells}" => "目前更改:{cells}", + "Step {path} · {title}" => "步驟 {path} · {title}", + // Step summaries in the editor's list. + "row" => "列", + "column" => "欄", + "contains" => "包含", + "Set {cell} to {input}" => "將 {cell} 設為 {input}", + "Select {range}" => "選擇 {range}", + "Repeat for each {what} of {over}" => "對 {over} 的每個{what}重複", + "If {cell} is empty" => "如果 {cell} 為空", + "If {cell} isn't empty" => "如果 {cell} 非空白", + "If {cell} {op} {value}" => "如果 {cell} {op} {value}", + "Stop: {message}" => "停止:{message}", + "There is no command “{id}”." => "沒有命令「{id}」。", + "{id} can't run in a macro: {why}." => "{id} 不能在巨集中執行:{why}。", + "{id} {what}: the macro must list it in its permissions." => "{id} {what}:巨集必須在許可權中列出它。", + "Choose the range to repeat over." => "請選擇要重複的區域。", + "Choose the cell to test." => "請選擇要測試的儲存格。", + // Status bar statistics. + "Average: {value}" => "平均值:{value}", + "Count: {value}" => "計數:{value}", + "Numerical Count: {value}" => "數值計數:{value}", + "Minimum: {value}" => "最小值:{value}", + "Maximum: {value}" => "最大值:{value}", + "Sum: {value}" => "加總:{value}", + "Circular References: {range}" => "迴圈參照:{range}", + // Macro dialogs. + "The question was about “{book}”, which is no longer the active workbook, so nothing was done." => { + "此問題針對的活頁簿「{book}」已不是當前活頁簿,因此沒有執行任何操作。" + } + "Debugging “{name}”" => "正在除錯「{name}」", + "Do you want to delete {what} “{name}”?" => "要刪除{what}「{name}」嗎?", + "Macro name: {name}" => "巨集名稱:{name}", + "macro" => "巨集", + "script" => "指令碼", + "Overwrite" => "覆蓋", + "Shift Down" => "下移", + "Shift Right" => "右移", + // Strings merged in from upstream (chart data table, insert function, solver, misc). + "Auto Fill Options" => "自動填滿選項", + "Click to copy" => "點選複製", + "Constraint Operator" => "約束運算子", + "Constraint Cell Reference" => "約束的儲存格引用", + "Constraint Value" => "約束值", + // Composite tooltip labels: the command name with the platform shortcut, as the report + // cross-checks against the catalogs that carry them (ja). + "AutoSum (⌘⇧T)" => "自動加總 (⌘⇧T)", + "Bold (⌘B)" => "粗體 (⌘B)", + "Copy (⌘C)" => "複製 (⌘C)", + "Cut (⌘X)" => "剪下 (⌘X)", + "Filter (⌘⇧F)" => "篩選 (⌘⇧F)", + "Flash Fill (⌘E)" => "快速填入 (⌘E)", + "Insert Link (⌘K)" => "插入連結 (⌘K)", + "Italic (⌘I)" => "斜體 (⌘I)", + "Paste (⌘V)" => "貼上 (⌘V)", + "Redo (⌘Y)" => "取消復原 (⌘Y)", + "Save (⌘S)" => "儲存 (⌘S)", + "Search commands (⌘⇧Space)" => "搜尋命令 (⌘⇧Space)", + "Table (⌘T)" => "表格 (⌘T)", + "Underline (⌘U)" => "底線 (⌘U)", + "Undo (⌘Z)" => "復原 (⌘Z)", + // Page Setup › Sheet: the order the printer lays pages out in. + "Page order" => "頁面順序", + "Down, then over" => "先直後橫", + "Over, then down" => "先橫後直", + // Solver options. + "All Methods" => "所有方法", + "Max Evaluations:" => "最大求值次數:", + "Integer Optimality (%):" => "整數最優性(%):", + "Convergence:" => "收斂度:", + "Mutation Rate:" => "變異率:", + "Population Size:" => "種群大小:", + "Random Seed:" => "隨機種子:", + "Maximum Generations without Improvement:" => "無改善的最大代數:", + "Needs an optimal or converged solution: Solver stopped before reaching one." => "需要最優解或已收斂的解:規劃求解在達到之前已停止。", + "Needs Simplex LP or GRG Nonlinear, a Max or Min objective and no integer constraints." => { + "需要單純形線性規劃或非線性 GRG、Max 或 Min 目標,且沒有整數約束。" + } + "Load/Save" => "載入/儲存", + "Load" => "載入", + "No functions match." => "沒有匹配的函數。", + "Or select a category:" => "或選擇一個類別:", + "Reset All" => "全部重置", + "Sensitivity" => "敏感性報告", + ")" => ")", + "·" => "·", + // Equation editor (upstream Insert › Equation). + "LaTeX:" => "LaTeX:", + "Square root" => "平方根", + "Summation" => "加總", + "Integral" => "積分", + "Limit" => "極限", + "Brackets that grow" => "自適應大小的括號", + "Matrix" => "矩陣", + "Plus or minus" => "正負號", + "Times" => "乘", + "Divided by" => "除", + "Less than or equal to" => "小於等於", + "Greater than or equal to" => "大於等於", + "Not equal to" => "不等於", + "Infinity" => "無窮大", + "Tends to" => "趨於", + "⌘/Ctrl+Enter to {verb}" => "按 ⌘/Ctrl+Enter {verb}", + "apply" => "應用", + "insert" => "插入", + "Quadratic formula" => "二次方程求根公式", + "Pythagoras" => "勾股定理", + "Binomial theorem" => "二項式定理", + "Area of a circle" => "圓的面積", + "Euler's identity" => "尤拉恆等式", + "2×2 matrix" => "2×2 矩陣", + // Solver load-model prompt and macro step editor. + "Don't Replace" => "不取代", + "Model Range:" => "模型區域:", + "{asked} already holds data. Replace it with the model?" => "{asked} 已有資料。要用該模型取代嗎?", + "Relative: a token that follows the input the macro runs on" => "相對參照:一個跟隨巨集執行時所作用輸入的標記", + "Absolute: always these cells" => "絕對參照:始終是這些儲存格", + "Run this step (a disabled step is skipped)" => "執行此步驟(已禁用的步驟會被跳過)", + "Always run on this range" => "始終在此區域上執行", + "Otherwise the macro runs on the selection" => "否則巨集將在選定區域上執行", + "Undo what the macro did before stopping" => "停止前復原巨集所做的更改", + "Open the macro in the step editor" => "在步驟編輯器中開啟該巨集", + "Stop recording and save the macro" => "停止錄製並儲存巨集", + "Search commands, e.g. bold, sort, set…" => "搜尋命令,例如加粗、排序、設定…", + "parameter" => "引數", + "value" => "值", + // Upstream commands. + "Edit Equation" => "編輯公式", + "Load Model" => "載入模型", + "Save Model" => "儲存模型", + "Python Output" => "Python 輸出", + "Set Python Code" => "設定 Python 程式碼", + _ => return None, + }) +} diff --git a/crates/ui-egui/src/i18n/zh_tw_functions.rs b/crates/ui-egui/src/i18n/zh_tw_functions.rs new file mode 100644 index 0000000000..6a187859e9 --- /dev/null +++ b/crates/ui-egui/src/i18n/zh_tw_functions.rs @@ -0,0 +1,805 @@ +//! Traditional Chinese help for the worksheet functions: what each function does and what its +//! arguments are called, so the Insert Function dialog and the formula hints read in Chinese. + +/// Function descriptions, keyed by the English text of the catalog (sorted, for binary search). +pub(super) const DESCRIPTIONS: &[(&str, &str)] = &[ + ("1 for positive, -1 for negative and 0 for zero.", "正數返回 1,負數返回 -1,零返回 0。"), + ("A random integer between two bounds, inclusive.", "返回兩個邊界之間(含邊界)的隨機整數。"), + ("A random number between 0 and 1, recalculated every time.", "返回 0 到 1 之間的隨機數,每次重算都會變化。"), + ("A range or array without its blank outer rows and columns.", "去掉外圍空白列與欄後的區域或陣列。"), + ("A reference shifted from a starting point.", "從起點偏移得到的引用。"), + ( + "A statistic of the FORECAST.ETS model: 1 alpha, 2 beta, 3 gamma, 4 MASE, 5 SMAPE, 6 MAE, 7 RMSE, 8 step size.", + "FORECAST.ETS 模型的統計量:1 為 alpha,2 為 beta,3 為 gamma,4 為 MASE,5 為 SMAPE,6 為 MAE,7 為 RMSE,8 為步長。", + ), + ("A subtotal that can skip hidden rows.", "可忽略隱藏列的小計。"), + ("Absolute value (modulus) of a complex number.", "複數的絕對值(模)。"), + ("Absolute value of a number.", "數字的絕對值。"), + ("Accrued interest of a security paying interest at maturity.", "到期一次付息證券的應計利息。"), + ("Accrued interest of a security paying periodic interest.", "定期付息證券的應計利息。"), + ("Accumulates an array into one value.", "把陣列累加為一個值。"), + ("Adds all the numbers in the arguments.", "對引數中的所有數字加總。"), + ("Adds the cells that meet a condition.", "對滿足條件的儲存格加總。"), + ("Adds the cells that meet every condition.", "對滿足所有條件的儲存格加總。"), + ("Adds the numbers in a field of the records that meet the criteria.", "對滿足條件的記錄中某欄位的數字加總。"), + ("Adds the squares of the numbers.", "對各數字的平方加總。"), + ("Amount received at maturity for a fully invested security.", "全額投資證券到期時收到的金額。"), + ("An aggregate that can skip hidden rows and errors.", "可忽略隱藏列和錯誤值的聚合計算。"), + ("Angle of a complex number in radians.", "複數的輻角(弧度)。"), + ("Angle of the point (x, y) from the x-axis in radians.", "點 (x, y) 與 x 軸的夾角(弧度)。"), + ("Annual yield of a discounted security.", "折價證券的年收益率。"), + ("Annual yield of a security paying interest at maturity.", "到期一次付息證券的年收益率。"), + ("Applies a LAMBDA to each column.", "對每一欄應用 LAMBDA。"), + ("Applies a LAMBDA to each row.", "對每一列應用 LAMBDA。"), + ("Applies a LAMBDA to each value.", "對每個值應用 LAMBDA。"), + ("Approximate lookup in a sorted vector or the first row/column of an array.", "在已排序向量或陣列首列/首欄中近似尋找。"), + ("Arccosine in radians.", "反餘弦值(弧度)。"), + ("Arccotangent in radians (0 to pi).", "反餘切值(弧度,0 到 π)。"), + ("Arcsine in radians.", "反正弦值(弧度)。"), + ("Arctangent in radians.", "反正切值(弧度)。"), + ("Arithmetic mean of the numbers.", "數字的算術平均值。"), + ("Average absolute deviation from the mean.", "相對平均值的平均絕對偏差。"), + ("Average of the cells that meet a condition.", "滿足條件的儲存格的平均值。"), + ("Average of the cells that meet every condition.", "滿足所有條件的儲存格的平均值。"), + ("Averages the numbers in a field of the records that meet the criteria.", "對滿足條件的記錄中某欄位的數字求平均值。"), + ("Base-10 logarithm of a complex number.", "複數的常用對數(以 10 為底)。"), + ("Base-10 logarithm.", "常用對數(以 10 為底)。"), + ("Base-2 logarithm of a complex number.", "複數的以 2 為底的對數。"), + ("Bessel function of the first kind, J_n(x).", "第一類貝塞爾函數 J_n(x)。"), + ("Bessel function of the second kind, Y_n(x).", "第二類貝塞爾函數 Y_n(x)。"), + ("Beta distribution density or probability.", "Beta 分佈的機率密度或累積機率。"), + ("Binomial probability.", "二項分佈機率。"), + ("Bitwise AND of two non-negative integers.", "兩個非負整數的按位與。"), + ("Bitwise OR of two non-negative integers.", "兩個非負整數的按位或。"), + ("Bitwise exclusive OR of two non-negative integers.", "兩個非負整數的按位異或。"), + ("Bond-equivalent yield of a Treasury bill.", "國庫券的債券等價收益率。"), + ("Breaks a row or column into columns of the given length.", "把一列或一欄按指定長度拆成多欄。"), + ("Breaks a row or column into rows of the given length.", "把一列或一欄按指定長度拆成多列。"), + ("Builds a cell address as text from row and column numbers.", "由列號和欄號生成文字形式的儲存格地址。"), + ("Builds a complex number as text from real and imaginary parts.", "由實部和虛部生成文字形式的複數。"), + ("Builds a date serial number from a year, month and day.", "由年、月、日生成日期序號。"), + ("Builds a summary table grouping values by row and column fields.", "按列欄位和欄欄位分組彙總,生成樞紐分析表。"), + ("Builds a time (a fraction of a day) from hours, minutes and seconds.", "由時、分、秒生成時間(一天中的小數)。"), + ("Builds an array from a LAMBDA.", "用 LAMBDA 生成陣列。"), + ("Builds an array of evenly stepped numbers.", "生成等步長的數字陣列。"), + ("Builds an array of random numbers in a range.", "生成指定範圍內的隨機數陣列。"), + ("Byte version of FIND.", "按位元組計算的 FIND。"), + ("Byte version of LEFT (same as LEFT for single-byte text).", "按位元組計算的 LEFT(單位元組文字與 LEFT 相同)。"), + ("Byte version of LEN (same as LEN for single-byte text).", "按位元組計算的 LEN(單位元組文字與 LEN 相同)。"), + ("Byte version of MID (same as MID for single-byte text).", "按位元組計算的 MID(單位元組文字與 MID 相同)。"), + ("Byte version of REPLACE.", "按位元組計算的 REPLACE。"), + ("Byte version of RIGHT (same as RIGHT for single-byte text).", "按位元組計算的 RIGHT(單位元組文字與 RIGHT 相同)。"), + ("Byte version of SEARCH.", "按位元組計算的 SEARCH。"), + ("Capitalises the first letter of each word and lower-cases the rest.", "每個單詞首字母大寫,其餘字母小寫。"), + ("Chi-squared density or left-tailed probability.", "卡方分佈的機率密度或左尾機率。"), + ("Chi-squared test of independence.", "卡方獨立性檢驗。"), + ("Column number of a reference.", "引用的欄號。"), + ( + "Compares an expression with a list of values and returns the result paired with the first match.", + "把表示式與一組值比較,返回第一個匹配項對應的結果。", + ), + ("Complementary error function, 1 - ERF(x).", "補餘誤差函數,1 - ERF(x)。"), + ("Complex conjugate of a complex number.", "複數的共軛複數。"), + ("Confidence interval half-width using Student's t distribution.", "用學生 t 分佈計算的置信區間半寬。"), + ("Confidence interval half-width using the normal distribution.", "用正態分佈計算的置信區間半寬。"), + ("Converts Roman numerals to a number.", "把羅馬數字轉換為數字。"), + ("Converts a binary number to decimal.", "把二進位數轉換為十進位。"), + ("Converts a binary number to hexadecimal.", "把二進位數轉換為十六進位。"), + ("Converts a binary number to octal.", "把二進位數轉換為八進位。"), + ("Converts a date written as text into a date serial number.", "把文字形式的日期轉換為日期序號。"), + ("Converts a decimal number to binary.", "把十進位數轉換為二進位。"), + ("Converts a decimal number to hexadecimal.", "把十進位數轉換為十六進位。"), + ("Converts a decimal number to octal.", "把十進位數轉換為八進位。"), + ("Converts a decimal price to fractional notation.", "把小數價格轉換為分數表示。"), + ("Converts a fractional price notation to a decimal number.", "把分數表示的價格轉換為小數。"), + ("Converts a hexadecimal number to binary.", "把十六進位數轉換為二進位。"), + ("Converts a hexadecimal number to decimal.", "把十六進位數轉換為十進位。"), + ("Converts a hexadecimal number to octal.", "把十六進位數轉換為八進位。"), + ("Converts a measurement from one unit to another.", "把度量值從一種單位換算為另一種單位。"), + ("Converts a number to Roman numerals in one of five styles.", "按五種樣式之一把數字轉換為羅馬數字。"), + ("Converts a time written as text into a fraction of a day.", "把文字形式的時間轉換為一天中的小數。"), + ("Converts a value to a number: numbers stay, TRUE is 1, everything else is 0.", "把值轉換為數字:數字不變,TRUE 為 1,其餘為 0。"), + ("Converts an array to text, either as a comma list or as a strict array constant.", "把陣列轉換為文字:逗號列表或嚴格的陣列常量。"), + ("Converts an octal number to binary.", "把八進位數轉換為二進位。"), + ("Converts an octal number to decimal.", "把八進位數轉換為十進位。"), + ("Converts an octal number to hexadecimal.", "把八進位數轉換為十六進位。"), + ("Converts any value to text, optionally in strict (quoted) form.", "把任意值轉換為文字,可選擇嚴格的(帶引號)形式。"), + ("Converts between the euro and the former euro member currencies at the fixed rates.", "按固定匯率在歐元與原有歐元區貨幣之間換算。"), + ("Converts degrees to radians.", "把角度轉換為弧度。"), + ("Converts full-width characters to half-width (no change for single-byte text).", "把全形字元轉換為半形(單位元組文字不變)。"), + ("Converts half-width characters to full-width (no change in this locale).", "把半形字元轉換為全形(當前語言環境不變)。"), + ("Converts radians to degrees.", "把弧度轉換為角度。"), + ("Converts text that looks like a number, date or time into a number.", "把看起來像數字、日期或時間的文字轉換為數字。"), + ("Converts text to a number using the given decimal and group separators.", "按指定的十進位和千位分隔符把文字轉換為數字。"), + ("Converts text to lower case.", "把文字轉換為小寫。"), + ("Converts text to upper case.", "把文字轉換為大寫。"), + ("Correlation coefficient of two data sets.", "兩組資料的相關係數。"), + ("Cosecant of a complex number.", "複數的餘割。"), + ("Cosecant of an angle in radians.", "角度的餘割(弧度)。"), + ("Cosine of a complex number.", "複數的餘弦。"), + ("Cosine of an angle in radians.", "角度的餘弦(弧度)。"), + ("Cotangent of a complex number.", "複數的餘切。"), + ("Cotangent of an angle in radians.", "角度的餘切(弧度)。"), + ("Counts days between two dates on a 360-day year (US or European method).", "按 360 天年(美國或歐洲方法)計算兩個日期之間的天數。"), + ("Counts empty cells and empty text in a range.", "統計區域中的空儲存格和空文字。"), + ("Counts how many values fall into each bin, as a vertical array.", "按垂直陣列統計落入各區間的數值個數。"), + ( + "Counts non-blank cells in a field of the matching records (or the matching records).", + "統計匹配記錄中某欄位的非空白儲存格數(或匹配記錄數)。", + ), + ("Counts numeric cells in a field of the matching records (or the matching records).", "統計匹配記錄中某欄位的數值儲存格數(或匹配記錄數)。"), + ("Counts the cells that meet a condition.", "統計滿足條件的儲存格數。"), + ("Counts the cells that meet every condition.", "統計滿足所有條件的儲存格數。"), + ("Counts the characters in a text.", "統計文字中的字元數。"), + ("Counts the columns in an array or range.", "統計陣列或區域中的欄數。"), + ("Counts the items in a cube set (no cube connections; #N/A).", "統計多維資料集集合中的項目數(無多維資料集連線時返回 #N/A)。"), + ("Counts the non-empty values.", "統計非空白的個數。"), + ("Counts the numbers.", "統計數字的個數。"), + ("Counts the rows in an array or range.", "統計陣列或區域中的列數。"), + ( + "Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.", + "計算兩個日期之間的整年、整月或整日數。單位:Y、M、D、MD、YM 或 YD。", + ), + ("Counts working days (Monday to Friday) between two dates, excluding holidays.", "計算兩個日期之間的工作日(週一至週五)天數,不含節假日。"), + ("Counts working days between two dates with a custom weekend, excluding holidays.", "按自訂週末計算兩個日期之間的工作日天數,不含節假日。"), + ("Creates a link; the cell shows the friendly name, or the link itself.", "建立超連結;儲存格顯示友好名稱或連結本身。"), + ("Creates a reusable custom function.", "建立可重複使用的自訂函數。"), + ("Cumulative beta probability.", "Beta 分佈的累積機率。"), + ("Cumulative lognormal probability.", "對數正態分佈的累積機率。"), + ("Cuts off the fractional part of a number at the given digits.", "按指定小數位截斷數字的小數部分。"), + ("Days from settlement to the next coupon date.", "從結算日到下一付息日的天數。"), + ("Days from the start of the coupon period to settlement.", "從付息期開始到結算日的天數。"), + ("Days in the coupon period that contains settlement.", "包含結算日的付息期的天數。"), + ("Declining-balance depreciation over any span of periods, switching to straight line.", "任意期間跨度的餘額遞減折舊,可切換為直線折舊。"), + ("Defines a set of cube members (no cube connections; #N/A).", "定義一組多維資料集成員(無多維資料集連線時返回 #N/A)。"), + ("Determinant of a square matrix.", "方陣的行列式。"), + ("Difference of two complex numbers.", "兩個複數的差。"), + ("Discount rate of a security.", "證券的貼現率。"), + ("Double factorial of a number.", "數字的雙階乘。"), + ("Double-declining-balance (or other factor) depreciation for a period.", "某一期間的雙倍餘額遞減(或其他係數)折舊。"), + ("Effective annual rate from a nominal rate and compounding periods.", "由名義利率和複利期數計算實際年利率。"), + ("Equivalent interest rate for the growth of an investment.", "投資增長的等效利率。"), + ("Error function integrated from 0 to a limit, or between two limits.", "從 0 到某一限值或兩個限值之間積分的誤差函數。"), + ("Error function integrated from 0 to x.", "從 0 到 x 積分的誤差函數。"), + ("Excess kurtosis of a sample.", "樣本的超出峰度。"), + ("Exponential curve coefficients and optional regression statistics.", "指數曲線係數及可選的迴歸統計量。"), + ("Exponential distribution density or probability.", "指數分佈的機率密度或累積機率。"), + ("Exponential of a complex number.", "複數的指數。"), + ("Extracts data from XML with an XPath (not available; returns #VALUE!).", "用 XPath 從 XML 提取資料(當前不可用,返回 #VALUE!)。"), + ("Extracts the first match, all matches or the capture groups of a regular expression.", "提取正規表示式的首個匹配、全部匹配或捕獲組。"), + ("F distribution density or left-tailed probability.", "F 分佈的機率密度或左尾機率。"), + ("Factorial of a number.", "數字的階乘。"), + ("Fetches data from a web service (not available; returns #VALUE!).", "從 Web 服務獲取資料(當前不可用,返回 #VALUE!)。"), + ( + "Finds a value in the first column of a table and returns the value in the same row of another column.", + "在表格首欄尋找值,傳回同一列中另一欄的值。", + ), + ( + "Finds a value in the first row of a table and returns the value in the same column of another row.", + "在表格首列尋找值,傳回同一欄中另一列的值。", + ), + ("Finds the position of one text in another (case-sensitive).", "尋找一個文字在另一個文字中的位置(區分大小寫)。"), + ( + "Finds the position of one text in another, ignoring case and allowing wildcards.", + "尋找一個文字在另一個文字中的位置,不區分大小寫並支援萬用字元。", + ), + ("Fisher transformation.", "Fisher 變換。"), + ("Fixed-declining-balance depreciation for a period.", "某一期間的固定餘額遞減折舊。"), + ("Flattens an array into a single column, optionally skipping blanks or errors.", "把陣列展平為單欄,可選擇跳過空白或錯誤值。"), + ("Flattens an array into a single row, optionally skipping blanks or errors.", "把陣列展平為單列,可選擇跳過空白或錯誤值。"), + ("Forecasts a value by additive (AAA) exponential smoothing.", "用加法(AAA)指數平滑預測值。"), + ("Formats a number as currency text, like DOLLAR.", "把數字格式化為貨幣文字,類似 DOLLAR。"), + ("Formats a number as currency text.", "把數字格式化為貨幣文字。"), + ("Formats a number as text.", "把數字格式化為文字。"), + ("French degressive depreciation with a life-based coefficient.", "按使用年限係數的法國遞減折舊。"), + ("French linear depreciation prorated for the first period.", "首期按比例計算的法國直線折舊。"), + ("Future value of a principal after a series of compound rates.", "本金按一系列複利利率計算後的終值。"), + ("Future value of an investment with constant payments and rate.", "固定付款、固定利率下的投資終值。"), + ("Gamma distribution density or probability.", "Gamma 分佈的機率密度或累積機率。"), + ("Geometric mean of positive numbers.", "正數的幾何平均值。"), + ("Greatest common divisor of integers.", "整數的最大公約數。"), + ("Groups rows by key fields and aggregates the values of each group.", "按關鍵欄位對列分組並彙總各組的數值。"), + ("Grows an array to the given size, filling new cells with a pad value.", "把陣列擴展到指定大小,新儲存格用填滿值補齊。"), + ("Half-width of the confidence interval around a FORECAST.ETS value.", "FORECAST.ETS 預測值周圍置信區間的半寬。"), + ("Harmonic mean of positive numbers.", "正數的調和平均值。"), + ("Hyperbolic cosecant of a complex number.", "複數的雙曲餘割。"), + ("Hyperbolic cosecant.", "雙曲餘割。"), + ("Hyperbolic cosine of a complex number.", "複數的雙曲餘弦。"), + ("Hyperbolic cosine.", "雙曲餘弦。"), + ("Hyperbolic cotangent.", "雙曲餘切。"), + ("Hyperbolic secant of a complex number.", "複數的雙曲正割。"), + ("Hyperbolic secant.", "雙曲正割。"), + ("Hyperbolic sine of a complex number.", "複數的雙曲正弦。"), + ("Hyperbolic sine.", "雙曲正弦。"), + ("Hyperbolic tangent.", "雙曲正切。"), + ("Hypergeometric probability of an exact count.", "超幾何分佈的精確計數機率。"), + ("Hypergeometric probability.", "超幾何分佈機率。"), + ("Identity matrix of the given size.", "指定大小的單位矩陣。"), + ("Imaginary coefficient of a complex number.", "複數的虛部係數。"), + ("Information about a cell.", "返回儲存格的相關資訊。"), + ("Integer part of a division.", "除法結果的整數部分。"), + ("Interest paid in a period of a loan with even principal payments.", "等額本金貸款某一期間支付的利息。"), + ("Interest part of a given period's payment.", "指定期間付款中的利息部分。"), + ("Interest rate of a fully invested security.", "全額投資證券的利率。"), + ("Interest rate per period of an annuity, found iteratively.", "迭代計算年金每期的利率。"), + ("Internal rate of return of cash flows on specific dates.", "特定日期現金流量的內部收益率。"), + ("Internal rate of return of periodic cash flows.", "定期現金流量的內部收益率。"), + ("Inverse hyperbolic cosine.", "反雙曲餘弦。"), + ("Inverse hyperbolic cotangent.", "反雙曲餘切。"), + ("Inverse hyperbolic sine.", "反雙曲正弦。"), + ("Inverse hyperbolic tangent.", "反雙曲正切。"), + ("Inverse of a square matrix.", "方陣的逆矩陣。"), + ("Inverse of the Fisher transformation.", "Fisher 變換的逆變換。"), + ("Inverse of the cumulative beta distribution.", "Beta 累積分佈的反函數。"), + ("Inverse of the cumulative lognormal distribution.", "對數正態累積分佈的反函數。"), + ("Inverse of the gamma cumulative distribution.", "Gamma 累積分佈的反函數。"), + ("Inverse of the left-tailed F distribution.", "左尾 F 分佈的反函數。"), + ("Inverse of the left-tailed chi-squared distribution.", "左尾卡方分佈的反函數。"), + ("Inverse of the normal cumulative distribution.", "正態累積分佈的反函數。"), + ("Inverse of the right-tailed F distribution.", "右尾 F 分佈的反函數。"), + ("Inverse of the right-tailed chi-squared distribution.", "右尾卡方分佈的反函數。"), + ("Inverse of the standard normal cumulative distribution.", "標準正態累積分佈的反函數。"), + ("Joins several text values into one.", "把多個文字值合併為一個。"), + ("Joins text from values and every cell of ranges, without a separator.", "把各個值以及區域中每個儲存格的文字無分隔符合並。"), + ("Joins text from values and ranges with a delimiter, optionally skipping empty items.", "用分隔符合並各個值和區域的文字,可選擇跳過空項。"), + ("Keeps rows or columns from the start (or end) of an array.", "保留陣列開頭(或末尾)的若干列或欄。"), + ("Keeps the rows or columns of an array whose include flag is TRUE.", "保留包含標誌為 TRUE 的列或欄。"), + ("Largest number (0 when there are none).", "最大值(沒有數字時為 0)。"), + ("Largest number in a field of the matching records.", "匹配記錄中某欄位的最大值。"), + ("Largest value among cells that meet every condition.", "滿足所有條件的儲存格中的最大值。"), + ("Largest value counting text as 0 and logicals as 1/0.", "把文字計為 0、邏輯值計為 1/0 時的最大值。"), + ("Least common multiple of integers.", "整數的最小公倍數。"), + ("Least-squares line coefficients and optional regression statistics.", "最小二乘直線係數及可選的迴歸統計量。"), + ("Left-tailed inverse of Student's t distribution.", "學生 t 分佈左尾的反函數。"), + ("Length of the repeating pattern detected in a time series.", "時間序列中檢測到的重複模式長度。"), + ("Logarithm to the given base (10 by default).", "以指定底數求對數(預設為 10)。"), + ("Lognormal density or probability.", "對數正態分佈的機率密度或累積機率。"), + ("Macaulay duration of a security with periodic interest.", "定期付息證券的麥考利久期。"), + ("Matrix product of two arrays.", "兩個陣列的矩陣乘積。"), + ("Mean after trimming a fraction of points from both ends.", "從資料兩端合計剔除指定比例的資料後計算的平均值。"), + ("Mean counting text as 0 and logical values as 1 or 0.", "把文字計為 0、邏輯值計為 1 或 0 時的平均值。"), + ("Middle value of the numbers.", "數字的中間值。"), + ("Modified Bessel function of the first kind, I_n(x).", "第一類修正貝塞爾函數 I_n(x)。"), + ("Modified Bessel function of the second kind, K_n(x).", "第二類修正貝塞爾函數 K_n(x)。"), + ("Modified duration of a security with periodic interest.", "定期付息證券的修正久期。"), + ("Modified internal rate of return using separate borrow and reinvest rates.", "使用獨立借款利率和再投資利率的修正內部收益率。"), + ("Most frequently occurring number.", "出現次數最多的數字。"), + ("Multiplies all the numbers in the arguments.", "對引數中的所有數字求積。"), + ("Multiplies matching elements of equally sized arrays and adds the products.", "把等大陣列中對應元素相乘後加總。"), + ("Multiplies the numbers in a field of the matching records.", "對匹配記錄中某欄位的數字求積。"), + ("Names intermediate results.", "為中間結果命名。"), + ("Natural log of the gamma function.", "Gamma 函數的自然對數。"), + ("Natural logarithm of a complex number.", "複數的自然對數。"), + ("Natural logarithm.", "自然對數。"), + ("Negative binomial probability.", "負二項分佈機率。"), + ("Net present value of cash flows on specific dates.", "特定日期現金流量的淨現值。"), + ("Net present value of periodic cash flows at a discount rate.", "按貼現率計算的定期現金流量淨現值。"), + ("Next coupon date after settlement.", "結算日之後的下一付息日。"), + ("Nominal annual rate from an effective rate and compounding periods.", "由實際利率和複利期數計算名義年利率。"), + ("Normal distribution density or cumulative probability.", "正態分佈的機率密度或累積機率。"), + ("Number of areas in a reference.", "引用中的區域個數。"), + ("Number of combinations with repetition.", "可重複的組合數。"), + ("Number of combinations without repetition.", "不重複的組合數。"), + ("Number of coupons payable between settlement and maturity.", "結算日與到期日之間的付息次數。"), + ("Number of ordered selections with repetition.", "可重複的排列數。"), + ("Number of ordered selections without repetition.", "不重複的排列數。"), + ("Number of periods needed to pay off or accumulate an amount.", "清償或累積一定金額所需的期數。"), + ("Number of sheets.", "工作表數量。"), + ("One- or two-tailed Student's t probability.", "學生 t 分佈的單尾或雙尾機率。"), + ("One-tailed probability of a z-test.", "z 檢驗的單尾機率。"), + ("Pearson product-moment correlation coefficient.", "皮爾遜積矩相關係數。"), + ("Percent-encodes text for use in a URL.", "對文字做百分號編碼,以便在 URL 中使用。"), + ("Periodic payment for a loan or annuity with constant payments and rate.", "固定付款、固定利率下貸款或年金的每期付款額。"), + ("Periods needed for an investment to grow to a target value.", "投資增長到目標值所需的期數。"), + ("Picks a value from the list by its position.", "按位置從列表中取值。"), + ("Picks columns of an array by position (negative counts from the end).", "按位置選取陣列的欄(負值從末尾計數)。"), + ("Picks rows of an array by position (negative counts from the end).", "按位置選取陣列的列(負值從末尾計數)。"), + ("Places arrays side by side.", "把多個陣列並排拼接。"), + ("Poisson probability.", "泊松分佈機率。"), + ("Population covariance of paired values.", "成對數值的總體協方差。"), + ("Population skewness.", "總體的偏度。"), + ("Population standard deviation counting text as 0 and logicals as 1/0.", "把文字計為 0、邏輯值計為 1/0 時的總體標準偏差。"), + ("Population standard deviation of a field over the matching records.", "匹配記錄中某欄位的總體標準偏差。"), + ("Population standard deviation.", "總體標準偏差。"), + ("Population variance counting text as 0 and logicals as 1/0.", "把文字計為 0、邏輯值計為 1/0 時的總體方差。"), + ("Population variance of a field over the matching records.", "匹配記錄中某欄位的總體方差。"), + ("Population variance.", "總體方差。"), + ("Positive square root.", "非負平方根。"), + ("Predicts a value along a linear trend.", "沿線性趨勢預測值。"), + ("Present value of a series of equal future payments.", "一系列等額未來付款的現值。"), + ("Previous coupon date on or before settlement.", "結算日當日或之前的上一付息日。"), + ("Price per 100 face value of a Treasury bill.", "國庫券每 100 面值的價格。"), + ("Price per 100 face value of a discounted security.", "折價證券每 100 面值的價格。"), + ("Price per 100 face value of a security paying interest at maturity.", "到期一次付息證券每 100 面值的價格。"), + ("Price per 100 face value of a security paying periodic interest.", "定期付息證券每 100 面值的價格。"), + ("Price per 100 face value of a security with an odd first period.", "首個付息期不規則(短期或長期)的證券每 100 面值的價格。"), + ("Price per 100 face value of a security with an odd last period.", "最後付息期不規則(短期或長期)的證券每 100 面值的價格。"), + ("Principal part of a given period's payment.", "指定期間付款中的本金部分。"), + ("Probability from Student's t-test.", "學生 t 檢驗的機率。"), + ("Probability of a number of successes falling in a range.", "成功次數落在某區間內的機率。"), + ("Probability that a standard normal value falls between the mean and z.", "標準正態值落在均值與 z 之間的機率。"), + ("Probability that values fall between two limits.", "數值落在兩個限值之間的機率。"), + ("Product of complex numbers.", "複數的乘積。"), + ("Quartile (0–4) of a data set, inclusive method.", "資料集的四分位數(0–4,包含端點法)。"), + ("Quartile (0–4) of a data set.", "資料集的四分位數(0–4)。"), + ("Quartile (1–3) of a data set, exclusive method.", "資料集的四分位數(1–3,排除端點法)。"), + ("Quotient of two complex numbers.", "兩個複數的商。"), + ("Raises a complex number to a power.", "求複數的乘冪。"), + ("Raises a number to a power.", "求數字的乘冪。"), + ("Rank of a number within a list.", "數字在列表中的排名。"), + ("Rank of a number within a list; ties get the average rank.", "數字在列表中的排名;並列時取平均名次。"), + ("Rank of a number within a list; ties share the top rank.", "數字在列表中的排名;並列時同取最高名次。"), + ("Ratio of the factorial of a sum to the product of factorials.", "和值的階乘與各階乘之積的比值。"), + ("Reads text in a given base as a number.", "把指定進位制的文字按數字讀取。"), + ("Real coefficient of a complex number.", "複數的實部係數。"), + ("Relative standing of a value as a fraction of the data set.", "數值在資料集中的相對位置(以比例表示)。"), + ("Relative standing of a value from 0 to 1 inclusive.", "數值的相對位置(0 到 1,含端點)。"), + ("Relative standing of a value strictly between 0 and 1.", "數值的相對位置(嚴格在 0 與 1 之間)。"), + ("Remainder of a division, with the sign of the divisor.", "除法餘數,符號與除數相同。"), + ("Removes leading and trailing spaces and collapses runs of spaces to one.", "刪除首尾空格,並把連續空格合併為一個。"), + ("Removes non-printable control characters from text.", "刪除文字中不可列印的控制字元。"), + ("Removes rows or columns from the start (or end) of an array.", "從陣列開頭(或末尾)去掉若干列或欄。"), + ("Repeats a text a given number of times.", "把文字重複指定次數。"), + ("Replaces matches of a regular expression, all of them or a chosen occurrence.", "取代正規表示式的匹配項:全部或指定的第幾個。"), + ("Replaces occurrences of one text with another, optionally only a given occurrence.", "把一個文字的若干出現取代為另一個,可只取代指定的一次。"), + ("Replaces part of a text by position.", "按位置取代文字的一部分。"), + ("Returns 1 when a number is at least the step, otherwise 0.", "數字不小於步長時返回 1,否則返回 0。"), + ("Returns 1 when two numbers are equal, otherwise 0.", "兩個數字相等時返回 1,否則返回 0。"), + ( + "Returns a code for the kind of value: 1 number, 2 text, 4 logical, 16 error, 64 array.", + "返回值型別的程式碼:1 數字、2 文字、4 邏輯值、16 錯誤值、64 陣列。", + ), + ("Returns a fallback when the value is #N/A, otherwise the value.", "值為 #N/A 時返回替代值,否則返回該值。"), + ("Returns a fallback when the value is an error, otherwise the value.", "值為錯誤值時返回替代值,否則返回該值。"), + ( + "Returns a key performance indicator property from a cube (no cube connections; #N/A).", + "從多維資料集返回關鍵績效指標屬性(無多維資料集連線時返回 #N/A)。", + ), + ("Returns a member or tuple from a cube (no cube connections; #N/A).", "從多維資料集返回成員或元組(無多維資料集連線時返回 #N/A)。"), + ("Returns a property of a cube member (no cube connections; #N/A).", "返回多維資料集成員的屬性(無多維資料集連線時返回 #N/A)。"), + ("Returns an aggregated value from a cube (no cube connections; #N/A).", "從多維資料集返回彙總值(無多維資料集連線時返回 #N/A)。"), + ("Returns characters from the middle of a text.", "返回文字中間指定數量的字元。"), + ("Returns information about the operating environment.", "返回執行環境的資訊。"), + ("Returns one value when a condition is TRUE and another when it is FALSE.", "條件為 TRUE 時返回一個值,為 FALSE 時返回另一個值。"), + ("Returns the #N/A error value.", "返回 #N/A 錯誤值。"), + ("Returns the 1-based position of a value in a row or column.", "返回值在列或欄中的位置(從 1 開始)。"), + ("Returns the ISO 8601 week number of a date.", "返回日期的 ISO 8601 週數。"), + ("Returns the Unicode code point of the first character of a text.", "返回文字第一個字元的 Unicode 碼位。"), + ("Returns the Windows-1252 code of the first character of a text.", "返回文字第一個字元的 Windows-1252 編碼。"), + ("Returns the character for a Unicode code point.", "返回 Unicode 碼位對應的字元。"), + ("Returns the character for a code from the Windows-1252 character set.", "返回 Windows-1252 字符集中該編碼對應的字元。"), + ("Returns the current date and time.", "返回當前日期和時間。"), + ("Returns the current date.", "返回當前日期。"), + ("Returns the date a number of months before or after a date.", "返回某日期之前或之後若干個月的日期。"), + ("Returns the date a number of working days away with a custom weekend.", "按自訂週末返回相隔若干工作日後的日期。"), + ("Returns the date a number of working days before or after a date.", "返回某日期之前或之後若干工作日的日期。"), + ("Returns the day of the month of a date.", "返回日期是當月的第幾天。"), + ("Returns the day of the week of a date as a number.", "返回日期對應的星期數。"), + ("Returns the distinct rows or columns of an array.", "返回陣列中的不重複列或欄。"), + ("Returns the element, row or column of an array at the given position.", "返回陣列中指定位置的元素、列或欄。"), + ("Returns the field value of the single record that meets the criteria.", "返回滿足條件的唯一記錄的欄位值。"), + ("Returns the first characters of a text.", "返回文字開頭的若干字元。"), + ("Returns the fraction of a year between two dates under a day-count basis.", "按天數計算基準返回兩個日期之間的年數比例。"), + ("Returns the hour (0-23) of a time.", "返回時間的小時數(0-23)。"), + ("Returns the last characters of a text.", "返回文字末尾的若干字元。"), + ("Returns the last day of the month a number of months away.", "返回相隔若干個月後所在月份的最後一天。"), + ("Returns the logical value FALSE.", "返回邏輯值 FALSE。"), + ("Returns the logical value TRUE.", "返回邏輯值 TRUE。"), + ("Returns the minute (0-59) of a time.", "返回時間的分鐘數(0-59)。"), + ("Returns the month (1-12) of a date.", "返回日期的月份(1-12)。"), + ("Returns the nth member of a cube set (no cube connections; #N/A).", "返回多維資料集集合的第 n 個成員(無多維資料集連線時返回 #N/A)。"), + ("Returns the number identifying an error value, or #N/A if it is not an error.", "返回標識錯誤值的編號,若不是錯誤值則返回 #N/A。"), + ("Returns the number of days between two dates.", "返回兩個日期之間的天數。"), + ("Returns the phonetic (furigana) text; here the text itself.", "返回注音(假名)文字;此處返回文字本身。"), + ("Returns the position of a value in a row or column with flexible match and search modes.", "用靈活的匹配與搜尋方式返回值在列或欄中的位置。"), + ("Returns the second (0-59) of a time.", "返回時間的秒數(0-59)。"), + ("Returns the text that comes after a delimiter.", "返回分隔符之後的文字。"), + ("Returns the text that comes before a delimiter.", "返回分隔符之前的文字。"), + ("Returns the value if it is text, otherwise empty text.", "值為文字時返回該值,否則返回空文字。"), + ("Returns the value paired with the first condition that is TRUE.", "返回第一個為 TRUE 的條件所對應的值。"), + ("Returns the week number of a date within its year.", "返回日期在當年中的週數。"), + ("Returns the year of a date.", "返回日期的年份。"), + ("Reverses a logical value.", "對邏輯值取反。"), + ("Right-tailed F probability.", "F 分佈的右尾機率。"), + ("Right-tailed Student's t probability.", "學生 t 分佈的右尾機率。"), + ("Right-tailed chi-squared probability.", "卡方分佈的右尾機率。"), + ( + "Rounds a number and formats it as text with fixed decimals and optional thousands separators.", + "將數字捨入至指定的小數位數,並格式化為文字(可選千位分隔符)。", + ), + ("Rounds a number away from zero to a given number of digits.", "把數字遠離零舍入到指定小數位。"), + ("Rounds a number down to a multiple of significance.", "把數字向下舍入到指定基數的倍數。"), + ("Rounds a number down to the nearest integer or multiple.", "把數字向下舍入到最接近的整數或倍數。"), + ("Rounds a number down to the nearest integer.", "把數字向下舍入到最接近的整數。"), + ("Rounds a number to a given number of digits, halves away from zero.", "把數字舍入到指定小數位,半值遠離零。"), + ("Rounds a number to the nearest multiple.", "把數字舍入到最接近的倍數。"), + ("Rounds a number toward negative infinity to a multiple.", "把數字向負無窮方向舍入到某個倍數。"), + ("Rounds a number toward positive infinity to a multiple.", "把數字向正無窮方向舍入到某個倍數。"), + ("Rounds a number toward zero to a given number of digits.", "把數字向零方向舍入到指定小數位。"), + ("Rounds a number up to a multiple of significance.", "把數字向上舍入到指定基數的倍數。"), + ("Rounds a number up to the nearest integer or multiple.", "把數字向上舍入到最接近的整數或倍數。"), + ("Rounds away from zero to the nearest even integer.", "遠離零舍入到最接近的偶數。"), + ("Rounds away from zero to the nearest odd integer.", "遠離零舍入到最接近的奇數。"), + ("Row number of a reference.", "引用的列號。"), + ("Running accumulation of an array.", "對陣列做逐步累加。"), + ("Sample covariance of paired values.", "成對數值的樣本協方差。"), + ("Sample skewness.", "樣本的偏度。"), + ("Sample standard deviation counting text as 0 and logicals as 1/0.", "把文字計為 0、邏輯值計為 1/0 時的樣本標準偏差。"), + ("Sample standard deviation of a field over the matching records.", "匹配記錄中某欄位的樣本標準偏差。"), + ("Sample standard deviation.", "樣本標準偏差。"), + ("Sample variance counting text as 0 and logicals as 1/0.", "把文字計為 0、邏輯值計為 1/0 時的樣本方差。"), + ("Sample variance of a field over the matching records.", "匹配記錄中某欄位的樣本方差。"), + ("Sample variance.", "樣本方差。"), + ( + "Searches a row or column and returns the matching item, row or column from another array.", + "搜尋一列或一欄,並返回另一陣列中匹配的項、列或欄。", + ), + ("Secant of a complex number.", "複數的正割。"), + ("Secant of an angle in radians.", "角度的正割(弧度)。"), + ("Sheet number.", "工作表序號。"), + ("Shifts the bits of a number left (right for negative shifts).", "把數字的二進位位左移(負數為右移)。"), + ("Shifts the bits of a number right (left for negative shifts).", "把數字的二進位位右移(負數為左移)。"), + ("Sine of a complex number.", "複數的正弦。"), + ("Sine of an angle in radians.", "角度的正弦(弧度)。"), + ("Slope of the least-squares regression line.", "最小二乘迴歸直線的斜率。"), + ("Smallest number (0 when there are none).", "最小值(沒有數字時為 0)。"), + ("Smallest number in a field of the matching records.", "匹配記錄中某欄位的最小值。"), + ("Smallest success count whose cumulative binomial probability reaches alpha.", "累積二項機率達到 alpha 的最小成功次數。"), + ("Smallest value among cells that meet every condition.", "滿足所有條件的儲存格中的最小值。"), + ("Smallest value counting text as 0 and logicals as 1/0.", "把文字計為 0、邏輯值計為 1/0 時的最小值。"), + ("Sorts an array by the values of other arrays of matching size.", "按其他同大小陣列的值對陣列排序。"), + ("Sorts the rows (or columns) of an array by one or more of its columns.", "按陣列的一欄或多欄對其列(或欄)排序。"), + ("Spells out a number in Thai words with Baht.", "用泰文和泰銖讀出數字。"), + ("Splits text into a grid of columns and rows at the given delimiters.", "按指定分隔符把文字拆分成由列與欄組成的網格。"), + ("Square of the correlation coefficient.", "相關係數的平方。"), + ("Square root of a complex number.", "複數的平方根。"), + ("Square root of the number times pi.", "數字乘以 π 後的平方根。"), + ("Stacks arrays on top of each other.", "把多個陣列上下堆疊。"), + ("Standard error of predicted y values in a regression.", "迴歸中預測 y 值的標準誤差。"), + ("Standard normal cumulative probability.", "標準正態分佈的累積機率。"), + ("Standard normal density or cumulative probability.", "標準正態分佈的機率密度或累積機率。"), + ("Standard normal density.", "標準正態分佈的機率密度。"), + ("Straight-line depreciation for one period.", "某一期間的直線折舊。"), + ("Student's t density or left-tailed probability.", "學生 t 分佈的機率密度或左尾機率。"), + ("Sum of a power series.", "冪級數之和。"), + ("Sum of complex numbers.", "複數之和。"), + ("Sum of squared deviations from the mean.", "與平均值之差的平方和。"), + ("Sum-of-years'-digits depreciation for a period.", "某一期間的年數總和折舊。"), + ("Sums the differences of squares of matching elements.", "對相應元素的平方之差加總。"), + ("Sums the squared differences of matching elements.", "對相應元素之差的平方加總。"), + ("Sums the sums of squares of matching elements.", "對相應元素的平方和加總。"), + ("Swaps the rows and columns of an array.", "交換陣列的列與欄。"), + ("TRUE for references.", "引用返回 TRUE。"), + ("TRUE when a LAMBDA argument was left out.", "LAMBDA 引數被省略時返回 TRUE。"), + ("TRUE when a regular expression matches somewhere in the text.", "正規表示式在文字中匹配到內容時返回 TRUE。"), + ("TRUE when an odd number of arguments are TRUE.", "為 TRUE 的引數個數為奇數時返回 TRUE。"), + ("TRUE when at least one argument is TRUE.", "至少一個引數為 TRUE 時返回 TRUE。"), + ("TRUE when every argument is TRUE.", "所有引數都為 TRUE 時返回 TRUE。"), + ("TRUE when the cell has a formula.", "儲存格含公式時返回 TRUE。"), + ("TRUE when the integer part of a number is even.", "數字的整數部分為偶數時返回 TRUE。"), + ("TRUE when the integer part of a number is odd.", "數字的整數部分為奇數時返回 TRUE。"), + ("TRUE when the value is TRUE or FALSE.", "值為 TRUE 或 FALSE 時返回 TRUE。"), + ("TRUE when the value is a number.", "值為數字時返回 TRUE。"), + ("TRUE when the value is any error other than #N/A.", "值為除 #N/A 以外的任何錯誤值時返回 TRUE。"), + ("TRUE when the value is any error.", "值為任何錯誤值時返回 TRUE。"), + ("TRUE when the value is anything other than text.", "值不是文字時返回 TRUE。"), + ("TRUE when the value is text.", "值為文字時返回 TRUE。"), + ("TRUE when the value is the #N/A error.", "值為 #N/A 錯誤時返回 TRUE。"), + ("TRUE when the value refers to an empty cell.", "值引用空儲存格時返回 TRUE。"), + ("TRUE when two texts are identical, including case.", "兩個文字完全相同(區分大小寫)時返回 TRUE。"), + ("Tangent of a complex number.", "複數的正切。"), + ("Tangent of an angle in radians.", "角度的正切(弧度)。"), + ("The constant pi to 15 digits.", "常數 π(15 位有效數字)。"), + ("The formula of a cell as text.", "以文字形式返回儲存格的公式。"), + ("The gamma function.", "Gamma 函數。"), + ("The k-th largest number in a data set.", "資料集中第 k 大的數字。"), + ("The k-th smallest number in a data set.", "資料集中第 k 小的數字。"), + ("The reference named by a text string.", "文字字串所指的引用。"), + ("The sum of a subset as a fraction of the sum of all the values.", "子集之和佔全部數值之和的比例。"), + ("Total interest paid between two periods.", "兩個期間之間支付的總利息。"), + ("Total principal repaid between two periods.", "兩個期間之間償還的本金總額。"), + ("Two-tailed Student's t probability.", "學生 t 分佈的雙尾機率。"), + ("Two-tailed inverse of Student's t distribution.", "學生 t 分佈雙尾的反函數。"), + ("Two-tailed p-value of an F-test for equality of variances.", "檢定變異數是否相等之 F 檢定的雙尾 p 值。"), + ("Values along a fitted exponential growth curve.", "擬合指數增長曲線上的各值。"), + ("Values along a least-squares linear fit.", "最小二乘線性擬合上的各值。"), + ("Vertical array of all the most frequent numbers.", "所有出現次數最多的數字組成的垂直陣列。"), + ("Weibull density or probability.", "Weibull 分佈的機率密度或累積機率。"), + ("Writes a number in another base, padded with zeros.", "以另一進位制寫出數字,並用零補齊寬度。"), + ("Y-intercept of the least-squares regression line.", "最小二乘迴歸直線的 y 軸截距。"), + ("Yield of a Treasury bill.", "國庫券的收益率。"), + ("Yield of a security paying periodic interest.", "定期付息證券的收益率。"), + ("Yield of a security with an odd first period.", "首個付息期不規則(短期或長期)的證券的收益率。"), + ("Yield of a security with an odd last period.", "最後付息期不規則(短期或長期)的證券的收益率。"), + ("Z-score of a value.", "數值的 z 分數。"), + ("e raised to the given power.", "e 的指定次冪。"), + ("k-th percentile, k from 0 to 1 inclusive.", "第 k 百分位數,k 取 0 到 1(含端點)。"), + ("k-th percentile, k strictly between 0 and 1.", "第 k 百分位數,k 嚴格在 0 與 1 之間。"), +]; + +/// Argument names without brackets or index (`number`, not `[number2]`), sorted for binary search. +pub(super) const ARGUMENTS: &[(&str, &str)] = &[ + ("A", "A"), + ("B", "B"), + ("a", "a"), + ("abs_num", "引用型別"), + ("actual_range", "實際區域"), + ("aggregation", "聚合方式"), + ("alpha", "α"), + ("angle", "角度"), + ("area_num", "區域編號"), + ("argument", "引數"), + ("array", "陣列"), + ("array_x", "陣列 x"), + ("array_y", "陣列 y"), + ("average_range", "平均區域"), + ("base", "底數"), + ("basis", "日計數基準"), + ("beta", "β"), + ("bins_array", "區間陣列"), + ("bottom", "下限"), + ("by_array", "依據陣列"), + ("by_col", "按欄"), + ("calc_method", "計算方法"), + ("calculation", "計算式"), + ("caption", "顯示文字"), + ("case_sensitivity", "區分大小寫"), + ("coefficients", "係數"), + ("col_delimiter", "欄分隔符號"), + ("col_fields", "欄欄位"), + ("col_index_num", "欄序號"), + ("col_num", "欄號"), + ("col_sort_order", "欄排序方式"), + ("col_total_depth", "欄總計深度"), + ("cols", "欄數"), + ("column_num", "欄號"), + ("columns", "欄"), + ("confidence_level", "置信水平"), + ("connection", "連線"), + ("const", "常量"), + ("cost", "成本"), + ("coupon", "票息率"), + ("criteria", "條件"), + ("criteria_range", "條件區域"), + ("cumulative", "累積"), + ("data_all", "全部資料"), + ("data_array", "資料陣列"), + ("data_completion", "資料補全"), + ("data_subset", "資料子集"), + ("database", "資料庫"), + ("date", "日期"), + ("date_purchased", "購買日期"), + ("date_text", "日期文字"), + ("dates", "日期"), + ("day", "日"), + ("days", "天數"), + ("decimal_dollar", "十進位報價"), + ("decimal_separator", "小數分隔符"), + ("decimals", "小數位數"), + ("default_or_value", "預設值或值"), + ("deg_freedom", "自由度"), + ("delimiter", "分隔符"), + ("denominator", "分母"), + ("dimension", "維度"), + ("discount", "貼現率"), + ("divisor", "除數"), + ("effect_rate", "實際利率"), + ("end_date", "結束日期"), + ("end_period", "結束期"), + ("error_val", "錯誤值"), + ("exactly_once", "僅一次"), + ("expected_range", "期望區域"), + ("expression", "表示式"), + ("factor", "係數"), + ("field", "欄位"), + ("field_headers", "欄位標題"), + ("field_relationship", "欄位關係"), + ("filter_array", "篩選陣列"), + ("finance_rate", "融資利率"), + ("find_text", "尋找文字"), + ("first_coupon", "首次付息日"), + ("first_interest", "首次計息日"), + ("first_period", "首期"), + ("form", "形式"), + ("format", "格式"), + ("format_text", "格式文字"), + ("fraction", "分數"), + ("fractional_dollar", "分數報價"), + ("frequency", "頻率"), + ("friendly_name", "顯示名稱"), + ("from_unit", "源單位"), + ("full_precision", "完全精度"), + ("function", "函數"), + ("function_num", "函數編號"), + ("fv", "終值"), + ("group_separator", "千位分隔符"), + ("guess", "猜測值"), + ("height", "高度"), + ("holidays", "節假日"), + ("hour", "小時"), + ("i_num", "虛數係數"), + ("if_empty", "為空時"), + ("if_not_found", "未找到時"), + ("ignore", "忽略"), + ("ignore_empty", "忽略空白"), + ("include", "包含"), + ("index_num", "索引序號"), + ("info_type", "資訊型別"), + ("initial_value", "初始值"), + ("instance_num", "例項序號"), + ("inumber", "複數"), + ("investment", "投資額"), + ("issue", "發行日"), + ("k", "k"), + ("known_xs", "已知 x"), + ("known_ys", "已知 y"), + ("kpi_name", "KPI 名稱"), + ("kpi_property", "KPI 屬性"), + ("lambda", "LAMBDA"), + ("last_interest", "最後計息日"), + ("life", "使用年限"), + ("link_location", "連結位置"), + ("logical", "邏輯值"), + ("logical_test", "條件"), + ("lookup_array", "尋找陣列"), + ("lookup_value", "尋找值"), + ("lookup_vector", "尋找向量"), + ("lower_limit", "下限"), + ("m", "m"), + ("match_end", "匹配到末尾"), + ("match_mode", "匹配方式"), + ("match_type", "匹配型別"), + ("maturity", "到期日"), + ("max", "最大值"), + ("max_range", "最大區域"), + ("mean", "平均值"), + ("member_expression", "成員表示式"), + ("method", "方法"), + ("min", "最小值"), + ("min_length", "最小長度"), + ("min_range", "最小區域"), + ("minute", "分鐘"), + ("mode", "模式"), + ("month", "月"), + ("months", "月數"), + ("multiple", "倍數"), + ("n", "n"), + ("name", "名稱"), + ("new_text", "新文字"), + ("new_xs", "新 x"), + ("no_commas", "無千位分隔符"), + ("no_switch", "不切換"), + ("nominal_rate", "名義利率"), + ("nper", "總期數"), + ("npery", "每年期數"), + ("num_bytes", "位元組數"), + ("num_chars", "字元數"), + ("num_digits", "位數"), + ("number", "數值"), + ("number_chosen", "所選個數"), + ("number_f", "失敗次數"), + ("number_pop", "總體數值個數"), + ("number_s", "成功次數"), + ("number_sample", "樣本大小"), + ("number_times", "重複次數"), + ("numerator", "分子"), + ("occurrence", "出現序號"), + ("old_text", "原文字"), + ("options", "選項"), + ("order", "序數"), + ("pad_with", "填滿值"), + ("par", "面值"), + ("parameter", "引數"), + ("pattern", "模式"), + ("per", "期數"), + ("percent", "百分比"), + ("period", "期數"), + ("places", "位數"), + ("pmt", "各期付款額"), + ("population_s", "母體成功數"), + ("power", "冪"), + ("pr", "每 100 面額的價格"), + ("principal", "本金"), + ("prob_range", "機率區域"), + ("probability", "機率"), + ("probability_s", "成功機率"), + ("property", "屬性"), + ("pv", "現值"), + ("quart", "四分位點"), + ("radix", "基數"), + ("range", "區域"), + ("range_lookup", "匹配方式"), + ("rank", "排名"), + ("rate", "利率"), + ("real_num", "實部係數"), + ("redemption", "贖回價"), + ("ref", "引用"), + ("ref_text", "引用文字"), + ("reference", "引用"), + ("reinvest_rate", "再投資利率"), + ("relative_to", "相對於"), + ("replacement", "取代文字"), + ("result", "結果"), + ("result_vector", "結果向量"), + ("return_array", "返回陣列"), + ("return_mode", "返回方式"), + ("return_type", "返回型別"), + ("row_delimiter", "列分隔符號"), + ("row_fields", "列欄位"), + ("row_index_num", "列序號"), + ("row_num", "列號"), + ("row_sort_order", "列排序方式"), + ("row_total_depth", "列總計深度"), + ("rows", "列"), + ("salvage", "殘值"), + ("sample_s", "樣本成功數"), + ("scan_by_column", "按欄掃描"), + ("schedule", "利率序列"), + ("search_mode", "搜尋方式"), + ("seasonality", "週期性"), + ("second", "秒"), + ("serial_number", "序號"), + ("set", "集合"), + ("set_expression", "集合表示式"), + ("settlement", "結算日"), + ("sheet_text", "工作表名稱"), + ("shift_amount", "移位量"), + ("sigma", "σ"), + ("significance", "基數"), + ("size", "大小"), + ("sort_by", "排序依據"), + ("sort_index", "排序索引"), + ("sort_order", "排序方式"), + ("source", "來源"), + ("standard_dev", "標準偏差"), + ("start", "起始值"), + ("start_date", "開始日期"), + ("start_num", "起始位置"), + ("start_period", "起始期"), + ("statistic_type", "統計型別"), + ("stats", "統計量"), + ("step", "步長"), + ("suffix", "字尾"), + ("sum_range", "加總區域"), + ("table_array", "資料表"), + ("tails", "尾數"), + ("target", "目標值"), + ("target_date", "目標日期"), + ("text", "文字"), + ("time_text", "時間文字"), + ("timeline", "時間線"), + ("to_unit", "目標單位"), + ("top", "上限"), + ("total_depth", "總計深度"), + ("trials", "試驗次數"), + ("triangulation_precision", "三角精度"), + ("trim_cols", "欄裁剪模式"), + ("trim_rows", "列裁剪模式"), + ("type", "型別"), + ("type_text", "型別文字"), + ("unit", "單位"), + ("upper_limit", "上限"), + ("url", "網址"), + ("value", "值"), + ("value_if_error", "出錯時的值"), + ("value_if_false", "條件為假時的值"), + ("value_if_na", "為 #N/A 時的值"), + ("value_if_true", "條件為真時的值"), + ("values", "值"), + ("vector", "向量"), + ("weekend", "週末"), + ("whole_number", "整數標誌"), + ("width", "寬度"), + ("within_text", "源文字"), + ("wrap_count", "換行計數"), + ("x", "x"), + ("x_num", "x 座標"), + ("x_range", "x 區域"), + ("xml", "XML"), + ("xpath", "XPath"), + ("y", "y"), + ("y_num", "y 座標"), + ("year", "年"), + ("yld", "收益率"), + ("z", "z"), +]; diff --git a/crates/ui-egui/src/lib.rs b/crates/ui-egui/src/lib.rs index ce7ce347b5..8b6e9e04ae 100644 --- a/crates/ui-egui/src/lib.rs +++ b/crates/ui-egui/src/lib.rs @@ -34,6 +34,7 @@ pub mod equation; mod floating_pictures; pub mod fonts; pub mod form_controls; +mod format_locale; pub mod formula_bar; mod formula_locale; pub mod function_library; @@ -332,6 +333,9 @@ pub struct SheetApp { /// Strips the engine's error prefixes for message boxes. pub fn clean_error(e: &str) -> String { + if let Some(rest) = e.strip_prefix("command `").and_then(|s| s.split_once("` is not available right now: ")).map(|(_, message)| message) { + return rest.to_string(); + } if let Some(rest) = e.split_once("`: ").map(|(_, r)| r) { return rest.to_string(); } diff --git a/crates/ui-egui/src/macro_editor.rs b/crates/ui-egui/src/macro_editor.rs index 2dc52edf5a..cbce00cc81 100644 --- a/crates/ui-egui/src/macro_editor.rs +++ b/crates/ui-egui/src/macro_editor.rs @@ -919,7 +919,7 @@ pub fn window(app: &mut SheetApp, ctx: &egui::Context, d: &mut Dialog, open: &mu let fit = (screen.size() - vec2(16.0, 16.0)).max(vec2(240.0, 200.0)); let mut win_open = true; ed.refs.drawn = false; - egui::Window::new(format!("Macro: {}{dirty_mark}", ed.draft.name)) + egui::Window::new(craft_i18n::fmt(app.ui.language.tr("Macro: {name}{dirty}"), &[("name", &ed.draft.name), ("dirty", dirty_mark)])) .id(Id::unique("gridcraft.macro_editor")) .collapsible(false) .resizable(true) @@ -1106,17 +1106,17 @@ fn prompts(app: &mut SheetApp, ctx: &egui::Context, ed: &mut Editor, open: &mut let mut answer: Option> = None; egui::Modal::new(Id::unique("gridcraft.macro_editor.stop")).show(ctx, |ui| { ui.set_width(360.0); - ui.label(egui::RichText::new("Stop debugging").strong()); - ui.label("Keep the changes the macro has made so far? They are one undo step either way."); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Stop debugging")).strong()); + ui.label(crate::i18n::current(ui.ctx()).tr("Keep the changes the macro has made so far? They are one undo step either way.")); ui.add_space(8.0); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Cancel").clicked() || ui.input(|i| i.key_pressed(egui::Key::Escape)) { + if ui.button(crate::i18n::current(ui.ctx()).tr("Cancel")).clicked() || ui.input(|i| i.key_pressed(egui::Key::Escape)) { answer = Some(None); } - if ui.button("Undo Changes").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Undo Changes")).clicked() { answer = Some(Some(false)); } - if ui.button("Keep Changes").clicked() || ui.input(|i| i.key_pressed(egui::Key::Enter)) { + if ui.button(crate::i18n::current(ui.ctx()).tr("Keep Changes")).clicked() || ui.input(|i| i.key_pressed(egui::Key::Enter)) { answer = Some(Some(true)); } }); @@ -1147,13 +1147,13 @@ fn prompts(app: &mut SheetApp, ctx: &egui::Context, ed: &mut Editor, open: &mut ui.label(egui::RichText::new(format!("Save changes to macro “{}”?", ed.draft.name)).strong()); ui.add_space(8.0); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Cancel").clicked() || ui.input(|i| i.key_pressed(egui::Key::Escape)) { + if ui.button(crate::i18n::current(ui.ctx()).tr("Cancel")).clicked() || ui.input(|i| i.key_pressed(egui::Key::Escape)) { answer = Some(None); } - if ui.button("Don't Save").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Don't Save")).clicked() { answer = Some(Some(false)); } - if ui.button("Save").clicked() || ui.input(|i| i.key_pressed(egui::Key::Enter)) { + if ui.button(crate::i18n::current(ui.ctx()).tr("Save")).clicked() || ui.input(|i| i.key_pressed(egui::Key::Enter)) { answer = Some(Some(true)); } }); @@ -1184,15 +1184,16 @@ fn prompts(app: &mut SheetApp, ctx: &egui::Context, ed: &mut Editor, open: &mut } } +/// Draws the macro draft, execution toolbar and step inspector while respecting active debugging and unsaved edits. fn body(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { let t = Tokens::get(ui.ctx()); let debugging = app.session.macro_debug.is_some(); // Name, description, Save; they wrap in a narrow window. ui.horizontal_wrapped(|ui| { - let label = ui.label("Name:"); + let label = ui.label(crate::i18n::current(ui.ctx()).tr("Name:")); let name = ui.add_enabled(!debugging, egui::TextEdit::singleline(&mut ed.draft.name).desired_width(180.0).id_salt("me_name")).labelled_by(label.id); - let label = ui.label("Description:"); + let label = ui.label(crate::i18n::current(ui.ctx()).tr("Description:")); let desc = ui .add_enabled( !debugging, @@ -1202,7 +1203,7 @@ fn body(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { if name.changed() || desc.changed() { ed.dirty = true; } - if ui.add_enabled(ed.dirty && !debugging, egui::Button::new("Save")).clicked() { + if ui.add_enabled(ed.dirty && !debugging, egui::Button::new(crate::i18n::current(ui.ctx()).tr("Save"))).clicked() { save(app, ed); } }); @@ -1308,7 +1309,7 @@ fn status_line(app: &SheetApp, ui: &mut Ui, ed: &Editor, t: &Tokens) { let resolved = cur.get("params").or(cur.get("over")).or(cur.get("cell")).map(|p| p.to_string()); if let Some(p) = resolved { ui.horizontal(|ui| { - ui.label(egui::RichText::new("Runs with:").color(t.text_dim)); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Runs with:")).color(t.text_dim)); ui.add(egui::Label::new(egui::RichText::new(p).monospace().color(t.text)).truncate()); }); } else if let Some(e) = cur["paramsError"].as_str() { @@ -1324,8 +1325,11 @@ fn status_line(app: &SheetApp, ui: &mut Ui, ed: &Editor, t: &Tokens) { ui.add(egui::Label::new(egui::RichText::new(text).color(if bad { t.danger } else { t.text })).wrap()); } else { ui.label( - egui::RichText::new("Check shows on the grid what the macro reads and writes. Click a step's gutter to set a breakpoint.") - .color(t.text_dim), + egui::RichText::new( + crate::i18n::current(ui.ctx()) + .tr("Check shows on the grid what the macro reads and writes. Click a step's gutter to set a breakpoint."), + ) + .color(t.text_dim), ); } if app.grid.macro_overlay.is_some() { @@ -1355,13 +1359,19 @@ struct StepDrag { label: String, } +/// Draws ordered macro steps and their selection, breakpoint and execution-state controls. fn step_list(app: &mut SheetApp, ui: &mut Ui, ed: &mut Editor, debugging: bool) { let t = Tokens::get(ui.ctx()); let mut list = Vec::new(); rows(&ed.draft.steps, "", 0, &mut list); if list.is_empty() { ui.add_space(8.0); - ui.label(egui::RichText::new("No steps yet. Add Step picks a command, or record one with Automate › Record Macro.").color(t.text_dim)); + ui.label( + egui::RichText::new( + crate::i18n::current(ui.ctx()).tr("No steps yet. Add Step picks a command, or record one with Automate › Record Macro."), + ) + .color(t.text_dim), + ); return; } let current = ed.debug.as_ref().and_then(|s| s["current"]["step"].as_str().map(str::to_string)); @@ -1408,7 +1418,7 @@ fn step_list(app: &mut SheetApp, ui: &mut Ui, ed: &mut Editor, debugging: bool) p.add(egui::Shape::convex_polygon(vec![c + vec2(-6.0, -5.0), c + vec2(1.0, 0.0), c + vec2(-6.0, 5.0)], t.accent, Stroke::NONE)); } g.widget_info(|| egui::WidgetInfo::selected(egui::Role::CheckBox, true, st.breakpoint, format!("Breakpoint {}", row.key))); - if g.on_hover_text("Breakpoint: the debugger stops before this step").clicked() + if g.on_hover_text(crate::i18n::current(ui.ctx()).tr("Breakpoint: the debugger stops before this step")).clicked() && let Some(s) = step_mut(&mut ed.draft.steps, &row.key) { s.breakpoint = !s.breakpoint; @@ -1435,7 +1445,7 @@ fn step_list(app: &mut SheetApp, ui: &mut Ui, ed: &mut Editor, debugging: bool) let mut on = st.enabled; let cb = ui.put(Rect::from_center_size(pos2(rect.right() - 12.0, rect.center().y), vec2(18.0, 18.0)), egui::Checkbox::without_text(&mut on)); - if cb.on_hover_text("Run this step (a disabled step is skipped)").changed() + if cb.on_hover_text(crate::i18n::current(ui.ctx()).tr("Run this step (a disabled step is skipped)")).changed() && let Some(s) = step_mut(&mut ed.draft.steps, &row.key) { s.enabled = on; @@ -1577,12 +1587,13 @@ pub fn new_step(item: &str) -> Step { } } +/// Filters available commands and adds or replaces a draft step from the selected command. fn picker(ui: &mut Ui, ed: &mut Editor) { let Some(pk) = ed.picker.as_mut() else { return }; let t = Tokens::get(ui.ctx()); ui.horizontal(|ui| { ui.label(egui::RichText::new(if pk.replace.is_some() { "Change the command" } else { "Add a step" }).strong()); - if ui.small_button("Cancel").clicked() { + if ui.small_button(crate::i18n::current(ui.ctx()).tr("Cancel")).clicked() { pk.search = "\u{1}".into(); } }); @@ -1592,7 +1603,7 @@ fn picker(ui: &mut Ui, ed: &mut Editor) { } let r = ui.add( egui::TextEdit::singleline(&mut pk.search) - .hint_text("Search commands, e.g. bold, sort, set…") + .hint_text(crate::i18n::current(ui.ctx()).tr("Search commands, e.g. bold, sort, set…")) .desired_width(f32::INFINITY) .id_salt("me_pick"), ); @@ -1621,7 +1632,7 @@ fn picker(ui: &mut Ui, ed: &mut Editor) { r.on_hover_text(format!("{id} {menu}")); } if items.is_empty() { - ui.label(egui::RichText::new("No command matches.").color(t.text_dim)); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("No command matches.")).color(t.text_dim)); } }); let Some(item) = chosen.and_then(|i| items.get(i)).map(|x| x.0.clone()) else { return }; @@ -1641,10 +1652,11 @@ fn picker(ui: &mut Ui, ed: &mut Editor) { // ---------------------------------------------------------------- the inspector +/// Draws the selected step inspector and switches between details, inputs and output. fn inspector(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor, debugging: bool) { ui.horizontal_wrapped(|ui| { for (tab, label) in [(Tab::Step, "Details"), (Tab::Inputs, "Inputs"), (Tab::Output, "Output")] { - if ui.selectable_label(ed.tab == tab, label).clicked() { + if ui.selectable_label(ed.tab == tab, app.ui.language.tr(label)).clicked() { ed.tab = tab; } } @@ -1732,7 +1744,11 @@ fn ref_field(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor, ( let env = Env { wb: &wb, active_sheet: wb.active_sheet(), inputs: &inputs, output: None, item: None }; let relative = !current.trim().is_empty() && resolve::is_token(¤t, &env); if path != "@example" { - if ui.selectable_label(relative, "Rel").on_hover_text("Relative: a token that follows the input the macro runs on").clicked() && !relative + if ui + .selectable_label(relative, "Rel") + .on_hover_text(crate::i18n::current(ui.ctx()).tr("Relative: a token that follows the input the macro runs on")) + .clicked() + && !relative { let place = resolve::resolve_ref(¤t, &env).ok(); if let (Some(p), Some((name, input, _))) = (place, inputs.first()) @@ -1744,7 +1760,10 @@ fn ref_field(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor, ( ed.dirty = true; } } - if ui.selectable_label(!relative && !current.trim().is_empty(), "Abs").on_hover_text("Absolute: always these cells").clicked() + if ui + .selectable_label(!relative && !current.trim().is_empty(), "Abs") + .on_hover_text(crate::i18n::current(ui.ctx()).tr("Absolute: always these cells")) + .clicked() && relative && let Ok(p) = resolve::resolve_ref(¤t, &env) { @@ -1753,7 +1772,7 @@ fn ref_field(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor, ( d.values.insert(key.clone(), json!(a)); ed.dirty = true; } - let menu = ui.button("▾").on_hover_text("Tokens"); + let menu = ui.button(crate::i18n::current(ui.ctx()).tr("▾")).on_hover_text(crate::i18n::current(ui.ctx()).tr("Tokens")); egui::Popup::menu(&menu).show(|ui| { ui.set_max_height(300.0); egui::ScrollArea::vertical().show(ui, |ui| { @@ -1786,10 +1805,11 @@ fn ref_field(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor, ( } } +/// Edits the selected draft step according to its command or control-flow kind. fn step_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { let t = Tokens::get(ui.ctx()); let Some(path) = ed.selected.clone() else { - ui.label(egui::RichText::new("Select a step to see its settings.").color(t.text_dim)); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Select a step to see its settings.")).color(t.text_dim)); return; }; let Some(st) = step_at(&ed.draft.steps, &path) else { @@ -1816,7 +1836,7 @@ fn step_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { ui.label(egui::RichText::new(format!("Step {path} · {title}")).strong()); if let StepKind::Command { id, .. } = &st.kind { ui.label(egui::RichText::new(id).monospace().color(t.text_dim)); - if ui.small_button("Change…").clicked() { + if ui.small_button(crate::i18n::current(ui.ctx()).tr("Change…")).clicked() { ed.picker = Some(Picker { replace: Some(path.clone()), ..Default::default() }); } } @@ -1841,19 +1861,19 @@ fn step_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { match st.kind.clone() { StepKind::Command { id, params } => command_fields(app, ui, d, ed, &path, &id, ¶ms, in_repeat), StepKind::Repeat { over, of, max, .. } => { - ui.label("For each"); + ui.label(crate::i18n::current(ui.ctx()).tr("For each")); let mut of2 = of; ui.horizontal(|ui| { ui.radio_value(&mut of2, RepeatOf::Rows, "row"); ui.radio_value(&mut of2, RepeatOf::Columns, "column"); - ui.label("of:"); + ui.label(crate::i18n::current(ui.ctx()).tr("of:")); }); ref_field(app, ui, d, ed, (&path, "over"), &over, in_repeat); let mut max2 = max; ui.horizontal(|ui| { - ui.label("At most"); + ui.label(crate::i18n::current(ui.ctx()).tr("At most")); ui.add(egui::DragValue::new(&mut max2).range(1..=100_000)); - ui.label("times"); + ui.label(crate::i18n::current(ui.ctx()).tr("times")); }); if (of2 != of || max2 != max) && let Some(StepKind::Repeat { of, max, .. }) = step_mut(&mut ed.draft.steps, &path).map(|s| &mut s.kind) @@ -1862,10 +1882,14 @@ fn step_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { *max = max2; ed.dirty = true; } - ui.label(egui::RichText::new("Inside, Row (or Column) stands for the current one, e.g. Row.right.").small().color(t.text_dim)); + ui.label( + egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Inside, Row (or Column) stands for the current one, e.g. Row.right.")) + .small() + .color(t.text_dim), + ); } StepKind::If { cell, op, value, .. } => { - ui.label("If cell"); + ui.label(crate::i18n::current(ui.ctx()).tr("If cell")); ref_field(app, ui, d, ed, (&path, "cell"), &cell, in_repeat); let mut op2 = op; let ops = [ @@ -1893,7 +1917,8 @@ fn step_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { let changed_value = if matches!(op2, CompareOp::Empty | CompareOp::NotEmpty) { false } else { - ui.add(egui::TextEdit::singleline(&mut text).hint_text("value").id_salt(("me_ifv", &path))).changed() + ui.add(egui::TextEdit::singleline(&mut text).hint_text(crate::i18n::current(ui.ctx()).tr("value")).id_salt(("me_ifv", &path))) + .changed() }; if (op2 != op || changed_value) && let Some(StepKind::If { op, value, .. }) = step_mut(&mut ed.draft.steps, &path).map(|s| &mut s.kind) @@ -1907,7 +1932,7 @@ fn step_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { } StepKind::Stop { message, rollback } => { let (mut m, mut rb) = (message.clone(), rollback); - ui.label("Message:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Message:")); let a = ui.add(egui::TextEdit::singleline(&mut m).desired_width(f32::INFINITY).id_salt(("me_stop", &path))).changed(); let b = ui.checkbox(&mut rb, "Undo what the macro did before stopping").changed(); if (a || b) @@ -1920,7 +1945,7 @@ fn step_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { } } ui.add_space(6.0); - ui.label("Note:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Note:")); let mut note = st.note.clone(); if ui.add(egui::TextEdit::multiline(&mut note).desired_rows(2).desired_width(f32::INFINITY).id_salt(("me_note", &path))).changed() && let Some(s) = step_mut(&mut ed.draft.steps, &path) @@ -1946,6 +1971,7 @@ fn scalar(text: &str) -> Json { } #[allow(clippy::too_many_arguments)] +/// Draws editable command parameters, keeping canonical parameter keys and user values intact. fn command_fields(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor, path: &str, id: &str, params: &Json, in_repeat: bool) { let t = Tokens::get(ui.ctx()); let fields: Vec<(String, Json)> = params.as_object().map(|o| o.iter().map(|(k, v)| (k.clone(), v.clone())).collect()).unwrap_or_default(); @@ -2017,10 +2043,20 @@ fn command_fields(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Edit } } ui.horizontal(|ui| { - ui.add(egui::TextEdit::singleline(&mut ed.new_param.0).hint_text("parameter").desired_width(90.0).id_salt("me_np_k")); - ui.add(egui::TextEdit::singleline(&mut ed.new_param.1).hint_text("value").desired_width(140.0).id_salt("me_np_v")); + ui.add( + egui::TextEdit::singleline(&mut ed.new_param.0) + .hint_text(crate::i18n::current(ui.ctx()).tr("parameter")) + .desired_width(90.0) + .id_salt("me_np_k"), + ); + ui.add( + egui::TextEdit::singleline(&mut ed.new_param.1) + .hint_text(crate::i18n::current(ui.ctx()).tr("value")) + .desired_width(140.0) + .id_salt("me_np_v"), + ); let key = ed.new_param.0.trim().to_string(); - if ui.add_enabled(!key.is_empty(), egui::Button::new("Add")).clicked() { + if ui.add_enabled(!key.is_empty(), egui::Button::new(crate::i18n::current(ui.ctx()).tr("Add"))).clicked() { let raw = ed.new_param.1.clone(); let v = serde_json::from_str::(&raw).unwrap_or(Json::String(raw)); if let Some(StepKind::Command { params, .. }) = step_mut(&mut ed.draft.steps, path).map(|s| &mut s.kind) @@ -2040,22 +2076,29 @@ fn command_fields(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Edit } } +/// Edits declared macro inputs and their binding settings in the local draft. fn inputs_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { let t = Tokens::get(ui.ctx()); - ui.label(egui::RichText::new("The ranges the macro works on. Each is checked before the macro runs.").small().color(t.text_dim)); + ui.label( + egui::RichText::new(crate::i18n::current(ui.ctx()).tr("The ranges the macro works on. Each is checked before the macro runs.")) + .small() + .color(t.text_dim), + ); ui.horizontal_wrapped(|ui| { for (k, i) in ed.draft.inputs.iter().enumerate() { if ui.selectable_label(ed.input == k, i.name.as_str()).clicked() { ed.input = k; } } - if ui.small_button("Add").clicked() && ed.draft.inputs.len() < 64 { + if ui.small_button(crate::i18n::current(ui.ctx()).tr("Add")).clicked() && ed.draft.inputs.len() < 64 { let n = (2..).map(|k| format!("Input{k}")).find(|n| !ed.draft.inputs.iter().any(|i| i.name.eq_ignore_ascii_case(n))).unwrap_or_default(); ed.draft.inputs.push(NamedInput { name: n, ..Default::default() }); ed.input = ed.draft.inputs.len() - 1; ed.dirty = true; } - if ui.add_enabled(!ed.draft.inputs.is_empty(), egui::Button::new("Remove").small()).clicked() && ed.input < ed.draft.inputs.len() { + if ui.add_enabled(!ed.draft.inputs.is_empty(), egui::Button::new(crate::i18n::current(ui.ctx()).tr("Remove")).small()).clicked() + && ed.input < ed.draft.inputs.len() + { ed.draft.inputs.remove(ed.input); ed.input = ed.input.saturating_sub(1); ed.dirty = true; @@ -2063,23 +2106,23 @@ fn inputs_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) }); let k = ed.input; let Some(mut i) = ed.draft.inputs.get(k).cloned() else { - ui.label(egui::RichText::new("No inputs: the macro works on fixed cells only.").color(t.text_dim)); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("No inputs: the macro works on fixed cells only.")).color(t.text_dim)); return; }; let before = i.clone(); ui.separator(); egui::Grid::new("me_input").num_columns(2).spacing(vec2(8.0, 4.0)).show(ui, |ui| { - ui.label("Name:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Name:")); ui.add(egui::TextEdit::singleline(&mut i.name).desired_width(140.0).id_salt("me_in_name")); ui.end_row(); - ui.label("Shape:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Shape:")); ui.horizontal(|ui| { ui.radio_value(&mut i.kind, InputKind::Range, "range"); ui.radio_value(&mut i.kind, InputKind::Cell, "single cell"); }); ui.end_row(); if i.kind == InputKind::Range { - ui.label("Data rows:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Data rows:")); ui.horizontal(|ui| { ui.add(egui::DragValue::new(&mut i.rows[0]).range(0..=1_048_576).prefix("at least ")); ui.add( @@ -2090,7 +2133,7 @@ fn inputs_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) ); }); ui.end_row(); - ui.label("Columns:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Columns:")); ui.horizontal(|ui| { ui.add(egui::DragValue::new(&mut i.cols[0]).range(0..=16_384).prefix("at least ")); ui.add( @@ -2112,7 +2155,7 @@ fn inputs_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) // Column types, one per column of the example (or of the list so far). let ncols = if k == 0 { parse_refs(&ed.example).first().map_or(0, |(_, r)| r.width() as usize) } else { 0 }.max(i.col_types.len()).min(16); if i.kind == InputKind::Range && ncols > 0 { - ui.label("Each column must hold:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Each column must hold:")); let headers = if k == 0 { example_headers(app, &ed.example, i.header) } else { vec![] }; egui::Grid::new("me_types").num_columns(2).show(ui, |ui| { for c in 0..ncols { @@ -2146,15 +2189,18 @@ fn inputs_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) } if k == 0 { ui.separator(); - ui.label("Example (what Check, Run and Debug use here):"); + ui.label(crate::i18n::current(ui.ctx()).tr("Example (what Check, Run and Debug use here):")); let example = ed.example.clone(); ref_field(app, ui, d, ed, ("@example", "example"), &example, false); ui.horizontal(|ui| { - if ui.button("Use current selection as example").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Use current selection as example")).clicked() { use_selection_as_example(app, ed); } let mut fixed = ed.draft.inputs.first().is_some_and(|i| i.default_ref.is_some()); - if ui.checkbox(&mut fixed, "Always run on this range").on_hover_text("Otherwise the macro runs on the selection").changed() + if ui + .checkbox(&mut fixed, "Always run on this range") + .on_hover_text(crate::i18n::current(ui.ctx()).tr("Otherwise the macro runs on the selection")) + .changed() && let Some(first) = ed.draft.inputs.first_mut() { first.default_ref = fixed.then(|| ed.example.clone()); @@ -2266,18 +2312,21 @@ pub fn infer_input(sh: &gridcraft_engine::model::Sheet, r: RangeRef) -> (bool, V (header, types) } +/// Displays execution output and diagnostics for the selected macro step. fn output_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) { let t = Tokens::get(ui.ctx()); - ui.label("Output anchor (what the Output token stands for):"); + ui.label(crate::i18n::current(ui.ctx()).tr("Output anchor (what the Output token stands for):")); let anchor = ed.draft.output.anchor.clone().unwrap_or_default(); ref_field(app, ui, d, ed, ("@output", "anchor"), &anchor, false); ui.label( - egui::RichText::new("Leave it empty when no step uses Output. A token such as Input.right keeps it beside the data.") - .small() - .color(t.text_dim), + egui::RichText::new( + crate::i18n::current(ui.ctx()).tr("Leave it empty when no step uses Output. A token such as Input.right keeps it beside the data."), + ) + .small() + .color(t.text_dim), ); ui.add_space(6.0); - ui.label("When results would land on cells that hold data:"); + ui.label(crate::i18n::current(ui.ctx()).tr("When results would land on cells that hold data:")); let mut rule = ed.draft.output.on_conflict; for (r, label) in [ (OnConflict::Ask, "Ask (overwrite, shift down or shift right)"), @@ -2292,7 +2341,11 @@ fn output_tab(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, ed: &mut Editor) ed.draft.output.on_conflict = rule; ed.dirty = true; } - ui.label(egui::RichText::new("Agents and other programs that run the macro get an error instead of the question.").small().color(t.text_dim)); + ui.label( + egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Agents and other programs that run the macro get an error instead of the question.")) + .small() + .color(t.text_dim), + ); if !ed.draft.permissions.is_empty() { ui.add_space(6.0); ui.label(format!("May use files through: {}", ed.draft.permissions.join(", "))); diff --git a/crates/ui-egui/src/macro_ui.rs b/crates/ui-egui/src/macro_ui.rs index 9d1d74f33f..a1b48bc764 100644 --- a/crates/ui-egui/src/macro_ui.rs +++ b/crates/ui-egui/src/macro_ui.rs @@ -209,7 +209,7 @@ pub fn question_box(app: &mut SheetApp, ctx: &egui::Context) { ui.add(egui::Label::new(&q.text).wrap()); ui.add_space(8.0); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Cancel").clicked() || ui.input(|i| i.key_pressed(egui::Key::Escape)) { + if ui.button(crate::i18n::current(ui.ctx()).tr("Cancel")).clicked() || ui.input(|i| i.key_pressed(egui::Key::Escape)) { answer = Some(None); } // Right to left: list the choices reversed, so the first one ends up next to Cancel @@ -257,7 +257,7 @@ pub fn status(app: &mut SheetApp, ui: &mut Ui) { if app.macros.editor.is_none() { let show = ui.add(egui::Button::new(egui::RichText::new(app.ui.language.tr("Show")).font(theme::ui_font(12.0))).min_size(vec2(40.0, 18.0))); - if show.on_hover_text("Open the macro in the step editor").clicked() { + if show.on_hover_text(crate::i18n::current(ui.ctx()).tr("Open the macro in the step editor")).clicked() { app.open_dialog("macroEditor", json!({"macro": name})); } } @@ -269,7 +269,7 @@ pub fn status(app: &mut SheetApp, ui: &mut Ui) { let text = format!("{} · {n} step{}", app.ui.language.tr("Recording"), if n == 1 { "" } else { "s" }); ui.label(egui::RichText::new(text).font(theme::ui_font(12.5)).color(t.text)); let stop = ui.add(egui::Button::new(egui::RichText::new(app.ui.language.tr("Stop")).font(theme::ui_font(12.0))).min_size(vec2(40.0, 18.0))); - if stop.on_hover_text("Stop recording and save the macro").clicked() { + if stop.on_hover_text(crate::i18n::current(ui.ctx()).tr("Stop recording and save the macro")).clicked() { stop_recording(app); } } @@ -397,7 +397,11 @@ pub fn macros_dialog(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, open: &mut if untrusted { ui.horizontal(|ui| { ui.weak("Scripts in this workbook came from a file and are disabled."); - if ui.button("Trust Scripts").on_hover_text("Let this workbook's scripts run for the rest of this session").clicked() { + if ui + .button(crate::i18n::current(ui.ctx()).tr("Trust Scripts")) + .on_hover_text(crate::i18n::current(ui.ctx()).tr("Let this workbook's scripts run for the rest of this session")) + .clicked() + { let _ = app.run("automate.trustScripts", json!({"trusted": true})); d.result = app.session.run("view.macros", json!({})).ok(); } @@ -411,7 +415,7 @@ pub fn macros_dialog(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, open: &mut ui.horizontal_top(|ui| { ui.vertical(|ui| { ui.set_width(330.0); - let label = ui.label("Macro name:"); + let label = ui.label(crate::i18n::current(ui.ctx()).tr("Macro name:")); if ui.add(egui::TextEdit::singleline(&mut name).desired_width(330.0).id_salt("macro_name")).labelled_by(label.id).changed() { kind = Kind::Macro; } @@ -419,7 +423,11 @@ pub fn macros_dialog(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, open: &mut ui.set_min_size(vec2(326.0, 200.0)); egui::ScrollArea::vertical().max_height(200.0).show(ui, |ui| { if list.is_empty() { - ui.label(egui::RichText::new("This workbook has no scripts or macros.").italics().color(t.text_dim)); + ui.label( + egui::RichText::new(crate::i18n::current(ui.ctx()).tr("This workbook has no scripts or macros.")) + .italics() + .color(t.text_dim), + ); } for e in &list { let label = match (e.kind, &e.shortcut) { @@ -447,30 +455,34 @@ pub fn macros_dialog(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, open: &mut let target = name.trim().to_string(); let found = list.iter().find(|e| e.kind == kind && e.name.eq_ignore_ascii_case(&target)).cloned(); let is_macro = found.as_ref().is_some_and(|e| e.kind == Kind::Macro); - if ui.add_enabled(found.is_some(), egui::Button::new("Run").min_size(w)).clicked() + if ui.add_enabled(found.is_some(), egui::Button::new(crate::i18n::current(ui.ctx()).tr("Run")).min_size(w)).clicked() && let Some(e) = &found { *open = false; run_entry(app, e); } if ui - .add_enabled(is_macro, egui::Button::new("Step Into").min_size(w)) - .on_hover_text("Open the macro in the step editor and stop before its first step") + .add_enabled(is_macro, egui::Button::new(crate::i18n::current(ui.ctx()).tr("Step Into")).min_size(w)) + .on_hover_text(crate::i18n::current(ui.ctx()).tr("Open the macro in the step editor and stop before its first step")) .clicked() { *open = false; app.open_dialog("macroEditor", json!({"macro": target, "debug": true})); } - if ui.add_enabled(is_macro, egui::Button::new("Edit").min_size(w)).clicked() { + if ui.add_enabled(is_macro, egui::Button::new(crate::i18n::current(ui.ctx()).tr("Edit")).min_size(w)).clicked() { *open = false; app.open_dialog("macroEditor", json!({"macro": target})); } let free = !target.is_empty() && !list.iter().any(|e| e.kind == Kind::Macro && e.name.eq_ignore_ascii_case(&target)); - if ui.add_enabled(free, egui::Button::new("Create").min_size(w)).on_hover_text("Write a new macro with this name").clicked() { + if ui + .add_enabled(free, egui::Button::new(crate::i18n::current(ui.ctx()).tr("Create")).min_size(w)) + .on_hover_text(crate::i18n::current(ui.ctx()).tr("Write a new macro with this name")) + .clicked() + { *open = false; app.open_dialog("macroEditor", json!({"new": target})); } - if ui.add_enabled(found.is_some(), egui::Button::new("Delete").min_size(w)).clicked() + if ui.add_enabled(found.is_some(), egui::Button::new(crate::i18n::current(ui.ctx()).tr("Delete")).min_size(w)).clicked() && let Some(e) = &found { let (title, command, what) = match e.kind { @@ -486,7 +498,7 @@ pub fn macros_dialog(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, open: &mut choices: vec![("Delete".into(), json!({}))], }); } - if ui.add_enabled(is_macro, egui::Button::new("Options…").min_size(w)).clicked() + if ui.add_enabled(is_macro, egui::Button::new(crate::i18n::current(ui.ctx()).tr("Options…")).min_size(w)).clicked() && let Some(e) = &found { let key = e.shortcut.as_deref().and_then(parse_shortcut).map(String::from).unwrap_or_default(); @@ -495,19 +507,22 @@ pub fn macros_dialog(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, open: &mut d.values.insert("description".into(), json!(e.description)); } ui.add_space(12.0); - if ui.add(egui::Button::new("Cancel").min_size(w)).clicked() { + if ui.add(egui::Button::new(crate::i18n::current(ui.ctx()).tr("Cancel")).min_size(w)).clicked() { *open = false; } }); }); ui.add_space(6.0); - ui.label("Description"); + ui.label(crate::i18n::current(ui.ctx()).tr("Description")); let desc = list.iter().find(|e| e.kind == kind && e.name.eq_ignore_ascii_case(name.trim())).map(|e| e.description.clone()).unwrap_or_default(); ui.label(egui::RichText::new(if desc.is_empty() { " ".to_string() } else { desc }).color(t.text_dim)); if vba { ui.add_space(6.0); ui.label( - egui::RichText::new("This workbook also has a VBA project. GridCraft keeps it when you save but does not run it.").color(t.text_dim), + egui::RichText::new( + crate::i18n::current(ui.ctx()).tr("This workbook also has a VBA project. GridCraft keeps it when you save but does not run it."), + ) + .color(t.text_dim), ); } d.values.insert("name".into(), json!(name)); @@ -527,9 +542,9 @@ fn run_entry(app: &mut SheetApp, e: &Entry) { /// Macro Options: the shortcut letter and the description of the selected macro. fn options(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog) { let name = d.values.get("name").and_then(Json::as_str).unwrap_or("").trim().to_string(); - ui.label(egui::RichText::new(format!("Macro name: {name}")).strong()); + ui.label(egui::RichText::new(craft_i18n::fmt(app.ui.language.tr("Macro name: {name}"), &[("name", &name)])).strong()); ui.add_space(4.0); - ui.label("Shortcut key:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Shortcut key:")); let mut key = d.values.get("shortcut").and_then(Json::as_str).unwrap_or("").to_string(); shortcut_field(ui, &mut key, "macro_shortcut"); let letter = parse_shortcut(&key); @@ -543,16 +558,16 @@ fn options(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog) { ui.label(egui::RichText::new(c).color(Tokens::get(ui.ctx()).danger)); } ui.add_space(4.0); - let label = ui.label("Description:"); + let label = ui.label(crate::i18n::current(ui.ctx()).tr("Description:")); let mut desc = d.values.get("description").and_then(Json::as_str).unwrap_or("").to_string(); ui.add(egui::TextEdit::multiline(&mut desc).desired_rows(3).desired_width(f32::INFINITY).id_salt("macro_description")).labelled_by(label.id); ui.add_space(6.0); let mut done = false; ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Cancel").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Cancel")).clicked() { done = true; } - if ui.add_enabled(conflict.is_none(), egui::Button::new("OK")).clicked() { + if ui.add_enabled(conflict.is_none(), egui::Button::new(crate::i18n::current(ui.ctx()).tr("OK"))).clicked() { done = save_options(app, &name, letter, &desc); } }); @@ -608,7 +623,9 @@ pub fn open_record(app: &mut SheetApp, params: &Json) -> Option { stop_recording(app); return None; } - let suggested = app.session.active().map(|d| gridcraft_engine::macros::next_name(&d.wb)).unwrap_or_else(|| "Macro1".into()); + let prefix = app.ui.language.tr("Macro"); + let suggested = + app.session.active().map(|d| gridcraft_engine::macros::next_name_with_prefix(&d.wb, prefix)).unwrap_or_else(|| format!("{prefix}1")); let name = params["name"].as_str().map(str::to_string).filter(|n| !n.trim().is_empty()).unwrap_or(suggested); Some(Dialog::custom("recordMacro", "Record Macro", json!({"name": name, "shortcut": "", "description": ""}))) } @@ -635,25 +652,25 @@ pub fn record_dialog(app: &mut SheetApp, ui: &mut Ui, d: &mut Dialog, open: &mut let mut name = get(d, "name"); let mut key = get(d, "shortcut"); let mut desc = get(d, "description"); - let label = ui.label("Macro name:"); + let label = ui.label(crate::i18n::current(ui.ctx()).tr("Macro name:")); ui.add(egui::TextEdit::singleline(&mut name).desired_width(f32::INFINITY).id_salt("record_name")).labelled_by(label.id); ui.add_space(4.0); - ui.label("Shortcut key:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Shortcut key:")); shortcut_field(ui, &mut key, "record_shortcut"); ui.add_space(4.0); - let label = ui.label("Description:"); + let label = ui.label(crate::i18n::current(ui.ctx()).tr("Description:")); ui.add(egui::TextEdit::multiline(&mut desc).desired_rows(3).desired_width(f32::INFINITY).id_salt("record_description")).labelled_by(label.id); - ui.checkbox(&mut app.macros.relative, "Use Relative References"); + ui.checkbox(&mut app.macros.relative, crate::i18n::current(ui.ctx()).tr("Use Relative References")); let problem = record_problem(app, &name, &key); if let Some(p) = &problem { ui.label(egui::RichText::new(p).color(Tokens::get(ui.ctx()).danger)); } ui.add_space(6.0); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.button("Cancel").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Cancel")).clicked() { *open = false; } - if ui.add_enabled(problem.is_none(), egui::Button::new("OK")).clicked() { + if ui.add_enabled(problem.is_none(), egui::Button::new(crate::i18n::current(ui.ctx()).tr("OK"))).clicked() { let mut p = json!({"name": name.trim(), "description": desc, "relative": app.macros.relative}); if !key.trim().is_empty() { p["shortcut"] = json!(key.trim()); diff --git a/crates/ui-egui/src/panes.rs b/crates/ui-egui/src/panes.rs index d9207cd073..3e4c4e294b 100644 --- a/crates/ui-egui/src/panes.rs +++ b/crates/ui-egui/src/panes.rs @@ -8,6 +8,7 @@ use gridcraft_engine::model::{ObjKind, ObjRef}; use crate::SheetApp; use crate::theme::{self, Tokens}; +/// Draws the active task pane and routes pane actions through the shared application command boundary. pub fn show(app: &mut SheetApp, ui: &mut Ui) { // The Comments pane is engine state (`review.showComments`, so agents can drive it); the other // panes are UI state. One pane shows at a time: opening another one closes Comments. @@ -31,7 +32,7 @@ pub fn show(app: &mut SheetApp, ui: &mut Ui) { "formatChart" => "Format Chart Area", _ => "", }; - ui.label(egui::RichText::new(title).font(theme::ui_bold(15.0))); + ui.label(egui::RichText::new(app.ui.language.tr(title)).font(theme::ui_bold(15.0))); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { if crate::widgets::icon_button(ui, crate::icons::Icon::Close, t.text_dim, "Close", vec2(22.0, 22.0)).clicked() { if pane == "comments" { @@ -58,7 +59,9 @@ fn comments(app: &mut SheetApp, ui: &mut Ui) { let Some(sh) = d.wb.active() else { return }; let list: Vec<(String, gridcraft_engine::model::Comment)> = sh.comments.iter().map(|(c, m)| (c.a1(), m.clone())).collect(); if list.is_empty() { - ui.label(egui::RichText::new("No comments on this sheet yet. Select a cell and choose New Comment.").italics()); + ui.label( + egui::RichText::new(crate::i18n::current(ui.ctx()).tr("No comments on this sheet yet. Select a cell and choose New Comment.")).italics(), + ); } let t = crate::theme::Tokens::get(ui.ctx()); for (cell, c) in list { @@ -76,7 +79,7 @@ fn comments(app: &mut SheetApp, ui: &mut Ui) { } ui.label(egui::RichText::new(&c.author).color(t.text_dim)); if c.resolved { - ui.label(egui::RichText::new("Resolved").small().color(t.accent)); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Resolved")).small().color(t.accent)); } }); ui.label(&c.text); @@ -89,14 +92,18 @@ fn comments(app: &mut SheetApp, ui: &mut Ui) { // a field sized by a guess wider than the row pushes the resizable pane wider every frame. ui.horizontal(|ui| { ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { - if ui.small_button("Delete").clicked() { + if ui.small_button(crate::i18n::current(ui.ctx()).tr("Delete")).clicked() { app.run_or_alert("review.deleteComment", json!({"cell": cell})); } if ui.small_button(if c.resolved { "Reopen" } else { "Resolve" }).clicked() { app.run_or_alert("review.resolveComment", json!({"cell": cell, "resolved": !c.resolved})); } - let send = ui.small_button("Send").clicked(); - let r = ui.add(egui::TextEdit::singleline(&mut draft).hint_text("Reply…").desired_width(ui.available_width())); + let send = ui.small_button(crate::i18n::current(ui.ctx()).tr("Send")).clicked(); + let r = ui.add( + egui::TextEdit::singleline(&mut draft) + .hint_text(crate::i18n::current(ui.ctx()).tr("Reply…")) + .desired_width(ui.available_width()), + ); if (r.lost_focus() && ui.input(|i| i.key_pressed(egui::Key::Enter)) || send) && !draft.is_empty() { app.run_or_alert("review.replyComment", json!({"cell": cell, "text": draft})); draft.clear(); @@ -111,7 +118,7 @@ fn comments(app: &mut SheetApp, ui: &mut Ui) { /// Adds the active cell, lists watch values and formulas, and removes watched entries. fn watch(app: &mut SheetApp, ui: &mut Ui) { - if ui.button("Add Watch (active cell)").clicked() + if ui.button(crate::i18n::current(ui.ctx()).tr("Add Watch (active cell)")).clicked() && let Some(d) = app.session.active() && let Some(sh) = d.wb.active() { @@ -120,9 +127,9 @@ fn watch(app: &mut SheetApp, ui: &mut Ui) { } let list = app.session.run("formulas.watchWindow", json!({})).unwrap_or(Json::Null); egui::Grid::new("watch_grid").striped(true).num_columns(4).show(ui, |ui| { - ui.strong("Cell"); - ui.strong("Value"); - ui.strong("Formula"); + ui.strong(crate::i18n::current(ui.ctx()).tr("Cell")); + ui.strong(crate::i18n::current(ui.ctx()).tr("Value")); + ui.strong(crate::i18n::current(ui.ctx()).tr("Formula")); ui.label(""); ui.end_row(); for w in list.as_array().cloned().unwrap_or_default() { @@ -143,7 +150,7 @@ fn selection(app: &mut SheetApp, ui: &mut Ui) { let list = app.session.run("arrange.selectionPane", json!({})).unwrap_or(Json::Null); let items = list.as_array().cloned().unwrap_or_default(); if items.is_empty() { - ui.label(egui::RichText::new("There are no shapes, pictures or charts on this sheet.").italics()); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("There are no shapes, pictures or charts on this sheet.")).italics()); } for it in items.iter().rev() { let kind = it["kind"].as_str().unwrap_or("").to_string(); @@ -154,10 +161,10 @@ fn selection(app: &mut SheetApp, ui: &mut Ui) { if ui.selectable_label(sel, it["name"].as_str().unwrap_or("")).clicked() { app.selected_object = obj; } - if ui.small_button("▲").on_hover_text("Bring Forward").clicked() { + if ui.small_button(crate::i18n::current(ui.ctx()).tr("▲")).on_hover_text(crate::i18n::current(ui.ctx()).tr("Bring Forward")).clicked() { app.run_or_alert("arrange.bringForward", json!({"kind": kind, "id": id})); } - if ui.small_button("▼").on_hover_text("Send Backward").clicked() { + if ui.small_button(crate::i18n::current(ui.ctx()).tr("▼")).on_hover_text(crate::i18n::current(ui.ctx()).tr("Send Backward")).clicked() { app.run_or_alert("arrange.sendBackward", json!({"kind": kind, "id": id})); } if crate::widgets::icon_button(ui, crate::icons::Icon::Close, Tokens::get(ui.ctx()).text_dim, "Delete", vec2(18.0, 18.0)).clicked() { @@ -170,22 +177,22 @@ fn selection(app: &mut SheetApp, ui: &mut Ui) { /// Draws the chart format pane: title, type, legend, elements/axis titles, series colors, palettes/layouts and size. fn format_chart(app: &mut SheetApp, ui: &mut Ui) { let Some(id) = app.selected_chart() else { - ui.label(egui::RichText::new("Select a chart to format it.").italics()); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Select a chart to format it.")).italics()); return; }; let Some(chart) = app.session.active().and_then(|d| d.wb.active().and_then(|s| s.charts.iter().find(|c| c.id == id).cloned())) else { - ui.label("The chart no longer exists."); + ui.label(crate::i18n::current(ui.ctx()).tr("The chart no longer exists.")); return; }; let theme = app.session.active().map(|d| d.wb.theme.clone()).unwrap_or_default(); let lang = crate::i18n::current(ui.ctx()); - ui.collapsing("Chart Title", |ui| { + ui.collapsing(lang.tr("Chart Title"), |ui| { let field = egui::Id::unique(("gridcraft.chart_title", id)); if let Some(title) = crate::widgets::committed_text(ui, field, chart.title.as_deref().unwrap_or(""), None) { app.run_or_alert("chart.set", json!({"chart": id, "title": title})); } }); - ui.collapsing("Chart Type", |ui| { + ui.collapsing(crate::i18n::current(ui.ctx()).tr("Chart Type"), |ui| { ui.horizontal_wrapped(|ui| { for (l, k, s) in [ ("Column", "column", ""), @@ -205,7 +212,7 @@ fn format_chart(app: &mut SheetApp, ui: &mut Ui) { ("Radar", "radar", ""), ] { let cur = chart.kind == gridcraft_engine::cmd::insert::chart_kind(k, s); - if ui.selectable_label(cur, l).clicked() { + if ui.selectable_label(cur, app.ui.language.tr(l)).clicked() { app.run_or_alert("chart.set", json!({"chart": id, "type": k, "subtype": s})); } } @@ -225,66 +232,70 @@ fn format_chart(app: &mut SheetApp, ui: &mut Ui) { } } }); - ui.collapsing("Legend", |ui| { + ui.collapsing(crate::i18n::current(ui.ctx()).tr("Legend"), |ui| { ui.horizontal(|ui| { for (l, v) in [("None", "none"), ("Bottom", "bottom"), ("Top", "top"), ("Left", "left"), ("Right", "right")] { let cur = format!("{:?}", chart.legend).eq_ignore_ascii_case(v); - if ui.selectable_label(cur, l).clicked() { + if ui.selectable_label(cur, app.ui.language.tr(l)).clicked() { app.run_or_alert("chart.set", json!({"chart": id, "legend": v})); } } }); }); - ui.collapsing("Elements", |ui| { + ui.collapsing(crate::i18n::current(ui.ctx()).tr("Elements"), |ui| { let mut dl = chart.data_labels; - if ui.checkbox(&mut dl, "Data Labels").changed() { + if ui.checkbox(&mut dl, crate::i18n::current(ui.ctx()).tr("Data Labels")).changed() { app.run_or_alert("chart.set", json!({"chart": id, "dataLabels": dl})); } let mut gl = chart.gridlines; - if ui.checkbox(&mut gl, "Gridlines").changed() { + if ui.checkbox(&mut gl, crate::i18n::current(ui.ctx()).tr("Gridlines")).changed() { app.run_or_alert("chart.set", json!({"chart": id, "gridlines": gl})); } ui.horizontal(|ui| { - ui.label("Horizontal axis title:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Horizontal axis title:")); let field = egui::Id::unique(("gridcraft.chart_x_title", id)); if let Some(xt) = crate::widgets::committed_text(ui, field, chart.x_title.as_deref().unwrap_or(""), None) { app.run_or_alert("chart.set", json!({"chart": id, "xTitle": if xt.is_empty() { Json::Null } else { json!(xt) }})); } }); ui.horizontal(|ui| { - ui.label("Vertical axis title:"); + ui.label(crate::i18n::current(ui.ctx()).tr("Vertical axis title:")); let field = egui::Id::unique(("gridcraft.chart_y_title", id)); if let Some(yt) = crate::widgets::committed_text(ui, field, chart.y_title.as_deref().unwrap_or(""), None) { app.run_or_alert("chart.set", json!({"chart": id, "yTitle": if yt.is_empty() { Json::Null } else { json!(yt) }})); } }); }); - ui.collapsing("Data Table", |ui| { + ui.collapsing(crate::i18n::current(ui.ctx()).tr("Data Table"), |ui| { let supported = chart.supports_data_table(); let mut on = chart.data_table.is_some(); - if ui.add_enabled(supported, egui::Checkbox::new(&mut on, "Show Data Table")).changed() { + if ui.add_enabled(supported, egui::Checkbox::new(&mut on, app.ui.language.tr("Show Data Table"))).changed() { app.run_or_alert("chart.set", json!({"chart": id, "dataTable": on})); } if !supported { - ui.label("Available for column, bar, line, area and compatible combo charts."); + ui.label(crate::i18n::current(ui.ctx()).tr("Available for column, bar, line, area and compatible combo charts.")); } if let Some(table) = &chart.data_table { for (label, key, mut value) in [ ("Show Legend Keys", "dataTableKeys", table.show_keys), ("Horizontal Borders", "dataTableHorizontalBorder", table.horizontal_border), ("Vertical Borders", "dataTableVerticalBorder", table.vertical_border), - ("Outline", "dataTableOutline", table.outline), + ("Data Table|Outline", "dataTableOutline", table.outline), ] { - if ui.checkbox(&mut value, label).changed() { + if ui.checkbox(&mut value, app.ui.language.tr(label)).changed() { app.run_or_alert("chart.set", json!({"chart": id, key: value})); } } } }); - ui.collapsing("Series", |ui| { - let data = app.session.active().map(|d| gridcraft_chart::resolve(&d.wb, d.wb.active_sheet(), &chart)); + ui.collapsing(crate::i18n::current(ui.ctx()).tr("Series"), |ui| { + let data = app.session.active().map(|d| crate::chartview::localized_chart_data(&d.wb, d.wb.active_sheet(), &chart, app.ui.language)); for (i, s) in chart.series.iter().enumerate() { - let name = data.as_ref().and_then(|d| d.series.get(i)).map(|x| x.name.clone()).unwrap_or_else(|| format!("Series {}", i + 1)); + let name = data + .as_ref() + .and_then(|d| d.series.get(i)) + .map(|x| x.name.clone()) + .unwrap_or_else(|| craft_i18n::fmt(app.ui.language.tr("Series{n}"), &[("n", &(i + 1).to_string())])); let col = data.as_ref().and_then(|d| d.series.get(i)).map(|x| Color32::from_rgb(x.color[0], x.color[1], x.color[2])).unwrap_or(Color32::GRAY); ui.horizontal(|ui| { @@ -292,7 +303,7 @@ fn format_chart(app: &mut SheetApp, ui: &mut Ui) { ui.painter().rect_filled(r, 2.0, col); ui.label(&name); ui.label(egui::RichText::new(&s.values).small().color(crate::theme::Tokens::get(ui.ctx()).text_dim)); - ui.menu_button("Fill…", |ui| { + ui.menu_button(crate::i18n::current(ui.ctx()).tr("Fill…"), |ui| { if let Some(c) = crate::widgets::color_palette_fixed(ui, &theme.colors, "Automatic") { app.run_or_alert( "chart.formatSelection", @@ -304,7 +315,7 @@ fn format_chart(app: &mut SheetApp, ui: &mut Ui) { }); } }); - ui.collapsing("Colors & Layout", |ui| { + ui.collapsing(crate::i18n::current(ui.ctx()).tr("Colors & Layout"), |ui| { ui.horizontal_wrapped(|ui| { for p in ["colorful", "monochrome", "accent1", "accent2", "accent3", "accent4", "accent5", "accent6"] { if ui.button(p).clicked() { @@ -320,7 +331,7 @@ fn format_chart(app: &mut SheetApp, ui: &mut Ui) { } }); }); - ui.collapsing("Size", |ui| { + ui.collapsing(crate::i18n::current(ui.ctx()).tr("Size"), |ui| { // Keep the value being typed or dragged between frames; reloading it from the chart every frame threw the edit away. let draft = egui::Id::unique(("gridcraft.chart_size_draft", id)); let current = (chart.anchor.width, chart.anchor.height); diff --git a/crates/ui-egui/src/pivot_pane.rs b/crates/ui-egui/src/pivot_pane.rs index ef753fa993..0168c6a6a5 100644 --- a/crates/ui-egui/src/pivot_pane.rs +++ b/crates/ui-egui/src/pivot_pane.rs @@ -172,8 +172,8 @@ pub fn show(app: &mut SheetApp, ui: &mut Ui) { craft_ui::ComboBox::from_id_salt("pv_layout") .selected_text(lang.tr("Report Layout")) .show_ui(ui, |ui| { - for (l, v) in [("Compact", "compact"), ("Outline", "outline"), ("Tabular", "tabular")] { - if ui.button(lang.tr(l)).clicked() { + for (l, v) in [("Compact", "compact"), ("Report Layout|Outline", "outline"), ("Tabular", "tabular")] { + if ui.button(lang.translation(l).unwrap_or_else(|| lang.tr(l.rsplit_once('|').map_or(l, |(_, plain)| plain)))).clicked() { app.run_or_alert("pivot.layout", json!({"pivot": name, "layout": v})); } } diff --git a/crates/ui-egui/src/ribbon.rs b/crates/ui-egui/src/ribbon.rs index 47f1eabd73..5070793183 100644 --- a/crates/ui-egui/src/ribbon.rs +++ b/crates/ui-egui/src/ribbon.rs @@ -75,7 +75,7 @@ pub fn show(app: &mut SheetApp, ui: &mut Ui) { let active = app.ui.ribbon_tab == tab; let contextual = ctx_tabs.contains(&tab); let font = theme::ui_font(13.5); - let label = app.ui.language.tr(tab); + let label = app.ui.language.tr_tab(tab); let tw = ui.painter().layout_no_wrap(label.to_string(), font.clone(), t.text).size().x; let (r, resp) = ui.allocate_exact_size(vec2(tw + 22.0, 30.0), Sense::click()); if resp.hovered() && !active { diff --git a/crates/ui-egui/src/ribbon/automate.rs b/crates/ui-egui/src/ribbon/automate.rs index f2546658dc..3bc0b552fd 100644 --- a/crates/ui-egui/src/ribbon/automate.rs +++ b/crates/ui-egui/src/ribbon/automate.rs @@ -4,6 +4,7 @@ use crate::theme::Tokens; use crate::widgets::{big_split_button, small_button, small_toggle_button}; use egui::vec2; +/// Draws macro, agent-control and update commands in the Automate ribbon tab. pub(super) fn automate(app: &mut SheetApp, ui: &mut Ui) { // Macros: the Macros dialog; Record Macro (Stop Recording while recording), Use Relative // References; Run Macro, whose main part runs the last macro and whose menu lists them all. @@ -55,7 +56,7 @@ pub(super) fn automate(app: &mut SheetApp, ui: &mut Ui) { ui.separator(); } if macros.is_empty() { - ui.label(egui::RichText::new("No macros in this workbook").italics().color(t.text_dim)); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("No macros in this workbook")).italics().color(t.text_dim)); } for (n, desc, _) in macros.iter().take(30) { let r = ui.add(egui::Button::new(n.as_str()).frame(false).min_size(vec2(200.0, 22.0))); diff --git a/crates/ui-egui/src/ribbon/contextual.rs b/crates/ui-egui/src/ribbon/contextual.rs index 89e3eb39f5..be8cc02a04 100644 --- a/crates/ui-egui/src/ribbon/contextual.rs +++ b/crates/ui-egui/src/ribbon/contextual.rs @@ -12,7 +12,7 @@ pub(super) fn table_design(app: &mut SheetApp, ui: &mut Ui) { return; }; ui.vertical(|ui| { - ui.label(egui::RichText::new("Table Name:").small()); + ui.label(egui::RichText::new(crate::i18n::current(ui.ctx()).tr("Table Name:")).small()); let field = egui::Id::unique(("gridcraft.table_name", &tname)); if let Some(name) = crate::widgets::committed_text(ui, field, &tname, Some(120.0)) && name != tname diff --git a/crates/ui-egui/src/ribbon/controls.rs b/crates/ui-egui/src/ribbon/controls.rs index 5d10e13e0d..56d69642b9 100644 --- a/crates/ui-egui/src/ribbon/controls.rs +++ b/crates/ui-egui/src/ribbon/controls.rs @@ -155,7 +155,8 @@ fn combo_head(ui: &mut Ui, text: Option<(&mut String, egui::Id)>, open_now: bool } let mut lower = String::new(); if let Some((text, text_id)) = text { - let te = ui.add(egui::TextEdit::singleline(text).id(text_id).desired_width(220.0).hint_text("Type to filter…")); + let te = + ui.add(egui::TextEdit::singleline(text).id(text_id).desired_width(220.0).hint_text(crate::i18n::current(ui.ctx()).tr("Type to filter…"))); if open_now && !te.has_focus() { ui.ctx().memory_mut(|m| m.request_focus(text_id)); // Select all once focus lands so typing replaces the filter. diff --git a/crates/ui-egui/src/ribbon/galleries.rs b/crates/ui-egui/src/ribbon/galleries.rs index 6aa5bcd6b7..adf6de71a4 100644 --- a/crates/ui-egui/src/ribbon/galleries.rs +++ b/crates/ui-egui/src/ribbon/galleries.rs @@ -3,10 +3,11 @@ use super::{Align2, Cat, Rect, Sense, SheetApp, Stroke, StrokeKind, Tokens, Ui, /// A gallery of table styles drawn as mini tables. pub(super) fn table_gallery(app: &mut SheetApp, ui: &mut Ui, cmd: &str) { + let lang = app.ui.language; ui.set_width(430.0); let Some(wb) = app.session.active().map(|d| d.wb.clone()) else { return }; for (fam, n) in [("Light", 21u32), ("Medium", 28), ("Dark", 11)] { - ui.label(egui::RichText::new(fam).strong()); + ui.label(egui::RichText::new(lang.tr(fam)).strong()); egui::Grid::new(("tg", fam)).spacing(vec2(4.0, 4.0)).show(ui, |ui| { for i in 1..=n { let name = format!("TableStyle{fam}{i}"); @@ -15,7 +16,10 @@ pub(super) fn table_gallery(app: &mut SheetApp, ui: &mut Ui, cmd: &str) { if resp.hovered() { ui.painter().rect_stroke(r.expand(1.5), 2.0, Stroke::new(2.0, Tokens::get(ui.ctx()).cat(Cat::Orange)), StrokeKind::Outside); } - if resp.on_hover_text(&name).clicked() { + if resp + .on_hover_text(craft_i18n::fmt(lang.tr("{family} table style {number}"), &[("family", lang.tr(fam)), ("number", &i.to_string())])) + .clicked() + { act(app, cmd, json!({"style": name})); ui.close(); } @@ -59,7 +63,9 @@ pub(super) fn paint_table_swatch(ui: &Ui, r: Rect, wb: &gridcraft_engine::model: p.rect_stroke(r, 0.0, Stroke::new(1.0, t.separator), StrokeKind::Inside); } +/// Displays built-in cell-style previews and applies the selected canonical style through its command. pub(super) fn cell_style_gallery(app: &mut SheetApp, ui: &mut Ui) { + let lang = app.ui.language; let t = Tokens::get(ui.ctx()); ui.set_width(520.0); let Some(wb) = app.session.active().map(|d| d.wb.clone()) else { return }; @@ -99,11 +105,11 @@ pub(super) fn cell_style_gallery(app: &mut SheetApp, ui: &mut Ui) { ("Number Format", &["Comma", "Comma [0]", "Currency", "Currency [0]", "Percent"]), ]; for (g, names) in groups { - ui.label(egui::RichText::new(*g).strong()); + ui.label(egui::RichText::new(lang.tr(g)).strong()); egui::Grid::new(("csg", *g)).spacing(vec2(4.0, 4.0)).show(ui, |ui| { for (i, n) in names.iter().enumerate() { let st = gridcraft_engine::cmd::format::builtin_cell_style(n, &wb.theme).unwrap_or_default(); - let (r, resp) = ui.allocate_exact_size(vec2(82.0, 24.0), Sense::click()); + let (r, resp) = ui.allocate_exact_size(vec2(160.0, 26.0), Sense::click()); let fill = st .fill .fg @@ -125,18 +131,19 @@ pub(super) fn cell_style_gallery(app: &mut SheetApp, ui: &mut Ui) { ui.painter().text( r.left_center() + vec2(4.0, 0.0), Align2::LEFT_CENTER, - *n, + lang.tr(n), egui::FontId::new((st.font.size).clamp(10.0, 15.0), fam), col, ); if resp.hovered() { ui.painter().rect_stroke(r.expand(1.5), 2.0, Stroke::new(2.0, Tokens::get(ui.ctx()).cat(Cat::Orange)), StrokeKind::Outside); } + let resp = resp.on_hover_text(lang.tr(n)); if resp.clicked() { act(app, "home.cellStyle", json!({"name": n})); ui.close(); } - if (i + 1) % 6 == 0 { + if (i + 1) % 3 == 0 { ui.end_row(); } } diff --git a/crates/ui-egui/src/ribbon/home.rs b/crates/ui-egui/src/ribbon/home.rs index 7dd55f7067..c5361dd20e 100644 --- a/crates/ui-egui/src/ribbon/home.rs +++ b/crates/ui-egui/src/ribbon/home.rs @@ -189,7 +189,7 @@ pub(super) fn home(app: &mut SheetApp, ui: &mut Ui) { } } ui.separator(); - let more = ui.button("More Borders…"); + let more = ui.button(crate::i18n::current(ui.ctx()).tr("More Borders…")); if let Some(sequence) = keytip_table::item_letter(&prefix, "dialog:formatCells") { keytip(app, ui, sequence, egui::pos2(more.rect.right() - 10.0, more.rect.center().y)); } @@ -371,7 +371,10 @@ pub(super) fn home(app: &mut SheetApp, ui: &mut Ui) { egui::Popup::menu(&ft).show(|ui| table_gallery(app, ui, "home.formatAsTable")); let cs = big_button(ui, Icon::CellStyles, "Cell\nStyles", "Cell Styles", true); anchor_keytip(app, ui, &cs, &["home.newCellStyle"]); - egui::Popup::menu(&cs).show(|ui| cell_style_gallery(app, ui)); + egui::Popup::menu(&cs).show(|ui| { + let height = (ui.ctx().content_rect().height() * 0.65).clamp(80.0, 480.0); + egui::ScrollArea::vertical().max_height(height).show(ui, |ui| cell_style_gallery(app, ui)); + }); sep(ui); // Cells ui.vertical(|ui| { @@ -673,6 +676,7 @@ fn size_combo(app: &mut SheetApp, ui: &mut Ui, st: &Style) { } } +/// Displays translated number-format categories and applies the locale preset as a canonical format code. fn number_combo(app: &mut SheetApp, ui: &mut Ui, st: &Style) { let code = st.num_fmt.as_str().to_string(); let kind = gridcraft_engine::display::number_format(&code).kind(); @@ -686,8 +690,15 @@ fn number_combo(app: &mut SheetApp, ui: &mut Ui, st: &Style) { let items: Vec<(&str, String)> = names .iter() .map(|n| { - let code = gridcraft_engine::cmd::format::format_code_for(n); - let preview = app.session.active().map(|d| gridcraft_engine::display::format(&sample, code, &d.wb).text).unwrap_or_default(); + let code = lang.format_locale().preset(n); + let preview = app + .session + .active() + .map(|d| { + let format = gridcraft_engine::display::number_format(code); + gridcraft_engine::numfmt::format_value_with_region(&sample, &format, d.wb.date_system, d.wb.region).text + }) + .unwrap_or_default(); (*n, format!("{:<12} {preview}", lang.tr(n))) }) .chain(std::iter::once(("__more", format!("{:>12}", lang.tr("More Number Formats…"))))) @@ -695,29 +706,31 @@ fn number_combo(app: &mut SheetApp, ui: &mut Ui, st: &Style) { if let ComboResult::Picked(value) = editable_combo(ui, &resp, "number", ¤t, &items, forced) { match value.as_str() { "__more" => app.open_dialog("formatCells", json!({"tab": "Number"})), - n => act(app, "home.numberFormat", json!({"format": n})), + n => act(app, "home.numberFormat", json!({"code": lang.format_locale().preset(n)})), } } } +/// Builds the conditional-formatting menu and dispatches its selected rule command. fn cf_menu(app: &mut SheetApp, ui: &mut Ui) { - ui.menu_button("Highlight Cells Rules", |ui| { + let lang = app.ui.language; + ui.menu_button(lang.tr("Highlight Cells Rules"), |ui| { for (label, op) in [("Greater Than…", "greater"), ("Less Than…", "less"), ("Between…", "between"), ("Equal To…", "equal")] { - if ui.button(label).clicked() { + if ui.button(lang.tr(label)).clicked() { app.open_dialog("cfQuick", json!({"type": "cellIs", "operator": op, "title": label})); } } - if ui.button("Text that Contains…").clicked() { + if ui.button(lang.tr("Text that Contains…")).clicked() { app.open_dialog("cfQuick", json!({"type": "containsText", "title": "Text that Contains"})); } - if ui.button("A Date Occurring…").clicked() { + if ui.button(lang.tr("A Date Occurring…")).clicked() { app.open_dialog("cfQuick", json!({"type": "timePeriod", "title": "A Date Occurring"})); } - if ui.button("Duplicate Values…").clicked() { + if ui.button(lang.tr("Duplicate Values…")).clicked() { act(app, "home.conditionalFormat", json!({"rule": {"type": "duplicate"}})); } }); - ui.menu_button("Top/Bottom Rules", |ui| { + ui.menu_button(lang.tr("Top/Bottom Rules"), |ui| { menu_items( app, ui, @@ -731,16 +744,16 @@ fn cf_menu(app: &mut SheetApp, ui: &mut Ui) { ], ); }); - ui.menu_button("Data Bars", |ui| { + ui.menu_button(lang.tr("Data Bars"), |ui| { for (label, c) in [("Blue", "#638EC6"), ("Green", "#63BE7B"), ("Red", "#F8696B"), ("Orange", "#FFB628"), ("Light Blue", "#008AEF"), ("Purple", "#D6007B")] { - if ui.button(label).clicked() { + if ui.button(lang.tr(label)).clicked() { act(app, "home.conditionalFormat", json!({"rule": {"type": "dataBar", "color": c}})); } } }); - ui.menu_button("Color Scales", |ui| { + ui.menu_button(lang.tr("Color Scales"), |ui| { for (label, cols) in [ ("Green - Yellow - Red", vec!["#63BE7B", "#FFEB84", "#F8696B"]), ("Red - Yellow - Green", vec!["#F8696B", "#FFEB84", "#63BE7B"]), @@ -749,12 +762,12 @@ fn cf_menu(app: &mut SheetApp, ui: &mut Ui) { ("White - Green", vec!["#FCFCFF", "#63BE7B"]), ("White - Red", vec!["#FCFCFF", "#F8696B"]), ] { - if ui.button(label).clicked() { + if ui.button(lang.tr(label)).clicked() { act(app, "home.conditionalFormat", json!({"rule": {"type": "colorScale", "colors": cols}})); } } }); - ui.menu_button("Icon Sets", |ui| { + ui.menu_button(lang.tr("Icon Sets"), |ui| { for (label, set) in [ ("3 Arrows", "3Arrows"), ("3 Traffic Lights", "3TrafficLights1"), @@ -763,16 +776,16 @@ fn cf_menu(app: &mut SheetApp, ui: &mut Ui) { ("5 Arrows", "5Arrows"), ("5 Quarters", "5Quarters"), ] { - if ui.button(label).clicked() { + if ui.button(lang.tr(label)).clicked() { act(app, "home.conditionalFormat", json!({"rule": {"type": "iconSet", "set": set}})); } } }); ui.separator(); - if ui.button("New Rule…").clicked() { + if ui.button(lang.tr("New Rule…")).clicked() { app.open_dialog("cfQuick", json!({"type": "expression", "title": "New Formatting Rule"})); } - ui.menu_button("Clear Rules", |ui| { + ui.menu_button(lang.tr("Clear Rules"), |ui| { menu_items( app, ui, @@ -782,7 +795,7 @@ fn cf_menu(app: &mut SheetApp, ui: &mut Ui) { ], ); }); - if ui.button("Manage Rules…").clicked() { + if ui.button(lang.tr("Manage Rules…")).clicked() { app.open_dialog("manageRules", json!({})); } } diff --git a/crates/ui-egui/src/ribbon/insert.rs b/crates/ui-egui/src/ribbon/insert.rs index b29257c769..021a4ed7f5 100644 --- a/crates/ui-egui/src/ribbon/insert.rs +++ b/crates/ui-egui/src/ribbon/insert.rs @@ -21,7 +21,7 @@ pub(super) fn insert(app: &mut SheetApp, ui: &mut Ui) { pic.widget_info(|| egui::WidgetInfo::labeled(egui::Role::Button, ui.is_enabled(), "Pictures")); egui::Popup::menu(&pic).show(|ui| { for (label, placement) in [("Place in Cell", "cell"), ("Place over Cells", "overCells")] { - if ui.button(label).clicked() { + if ui.button(app.ui.language.tr(label)).clicked() { app.open_dialog("insertPicture", json!({"placement": placement})); ui.close(); } @@ -39,7 +39,8 @@ pub(super) fn insert(app: &mut SheetApp, ui: &mut Ui) { ("Arrow", "arrow"), ("Text Box", "textBox"), ] { - if ui.button(label).clicked() { + let shown = if kind == "line" { app.ui.language.tr("Shape|Line") } else { app.ui.language.tr(label) }; + if ui.button(shown).clicked() { act(app, "insert.shape", json!({"kind": kind})); } } @@ -55,7 +56,7 @@ pub(super) fn insert(app: &mut SheetApp, ui: &mut Ui) { ui.painter().rect_filled(r, 4.0, Tokens::get(ui.ctx()).hover); } icons::paint(ui.painter(), r.shrink(6.0), *icon, Tokens::get(ui.ctx()).text); - if resp.on_hover_text(*name).clicked() { + if resp.on_hover_text(app.ui.language.tr(&format!("Icon|{name}"))).clicked() { act(app, "insert.icons", json!({"name": name})); ui.close(); } @@ -108,7 +109,7 @@ pub(super) fn insert(app: &mut SheetApp, ui: &mut Ui) { let forced_c = invoke(app, cid); egui::Popup::menu(&r).open_memory(popup_command(forced_c, r.clicked())).show(|ui| { for (label, k, s) in &subs { - if ui.button(*label).clicked() { + if ui.button(app.ui.language.tr(label)).clicked() { act(app, "insert.chart", json!({"type": k, "subtype": s})); } } @@ -144,7 +145,7 @@ pub(super) fn insert(app: &mut SheetApp, ui: &mut Ui) { let forced_c = invoke(app, cid); egui::Popup::menu(&r).open_memory(popup_command(forced_c, r.clicked())).show(|ui| { for (label, k, s) in &subs { - if ui.button(*label).clicked() { + if ui.button(app.ui.language.tr(label)).clicked() { act(app, "insert.chart", json!({"type": k, "subtype": s})); } } @@ -161,7 +162,7 @@ pub(super) fn insert(app: &mut SheetApp, ui: &mut Ui) { anchor_keytip(app, ui, &sp, &["dialog:sparkline"]); egui::Popup::menu(&sp).show(|ui| { for (label, kind) in [("Line", "line"), ("Column", "column"), ("Win/Loss", "winLoss")] { - if ui.button(label).clicked() { + if ui.button(app.ui.language.tr(label)).clicked() { app.open_dialog("sparkline", json!({"type": kind})); } } diff --git a/crates/ui-egui/src/ribbon/page_layout.rs b/crates/ui-egui/src/ribbon/page_layout.rs index c0f5230ef3..2eda6ecd8c 100644 --- a/crates/ui-egui/src/ribbon/page_layout.rs +++ b/crates/ui-egui/src/ribbon/page_layout.rs @@ -1,6 +1,7 @@ use super::controls::{act, anchor_keytip, checkbox_on, control_keytip, invoke, keytip, menu_items, sep}; use super::{Color32, Icon, Sense, SheetApp, Tokens, Ui, big_button, json, keytip_table, vec2}; +/// Draws page-layout controls with translated display labels and canonical command identifiers. pub(super) fn page_layout(app: &mut SheetApp, ui: &mut Ui) { let th = big_button(ui, Icon::Theme, "Themes", "Themes", true); anchor_keytip(app, ui, &th, &["pageLayout.theme"]); @@ -11,7 +12,7 @@ pub(super) fn page_layout(app: &mut SheetApp, ui: &mut Ui) { let (r, _) = ui.allocate_exact_size(vec2(12.0, 12.0), Sense::hover()); ui.painter().rect_filled(r, 1.0, Color32::from_rgb((c >> 16) as u8, (c >> 8) as u8, *c as u8)); } - if ui.button(name).clicked() { + if ui.button(app.ui.language.tr(name)).clicked() { act(app, "pageLayout.theme", json!({"name": name})); } }); diff --git a/crates/ui-egui/src/ribbon/title_bar.rs b/crates/ui-egui/src/ribbon/title_bar.rs index 29bd4f270c..821f6d6304 100644 --- a/crates/ui-egui/src/ribbon/title_bar.rs +++ b/crates/ui-egui/src/ribbon/title_bar.rs @@ -88,10 +88,10 @@ pub fn title_bar(app: &mut SheetApp, ui: &mut Ui) { Vec::new() }; if labels.is_empty() { - ui.label("Can't Undo"); + ui.label(crate::i18n::current(ui.ctx()).tr("Can't Undo")); } for (i, l) in labels.iter().enumerate() { - if ui.button(format!("Undo {l}")).clicked() { + if ui.button(craft_i18n::fmt(app.ui.language.tr("Undo {action}"), &[("action", app.ui.language.tr(l))])).clicked() { app.run_or_alert("edit.undo", json!({"steps": i + 1})); } } @@ -110,11 +110,11 @@ pub fn title_bar(app: &mut SheetApp, ui: &mut Ui) { ("Sort A to Z", "data.sortAscending"), ("Calculate Now", "formulas.calculateNow"), ] { - if ui.button(label).clicked() { + if ui.button(app.ui.language.tr(label)).clicked() { app.run_or_alert(id, json!({})); } } - if ui.button("Print…").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Print…")).clicked() { app.print_now(json!({})); } }); @@ -128,13 +128,13 @@ pub fn title_bar(app: &mut SheetApp, ui: &mut Ui) { } let share = small_button(ui, Icon::Share, "Share", "Share: export or save a copy", true); egui::Popup::menu(&share).show(|ui| { - if ui.button("Export as PDF…").clicked() { + if ui.button(crate::i18n::current(ui.ctx()).tr("Export as PDF…")).clicked() { app.run_or_alert("file.exportPdf", json!({})); } for (label, fmt) in [("Save a Copy as Excel Workbook (.xlsx)…", "xlsx"), ("Export as CSV…", "csv"), ("Export as Web Page (.html)…", "html")] { - if ui.button(label).clicked() { + if ui.button(app.ui.language.tr(label)).clicked() { app.open_dialog("saveCopy", json!({"format": fmt})); } } @@ -147,8 +147,9 @@ pub fn title_bar(app: &mut SheetApp, ui: &mut Ui) { // Quick light/dark switch (#194); right-click offers System as well. The same // choice lives in File › Display theme and the View tab. let lang = app.ui.language; - let theme = icon_button(ui, Icon::Appearance, t.text_dim, "Dark Mode", vec2(28.0, 26.0)); let dark = ui.ctx().theme() == egui::Theme::Dark; + let tip = if dark { "Light" } else { "Dark" }; + let theme = icon_button(ui, Icon::Appearance, t.text_dim, tip, vec2(28.0, 26.0)); theme.widget_info(|| egui::WidgetInfo::selected(egui::Role::CheckBox, true, dark, lang.tr("Dark Mode"))); if theme.clicked() { act(app, "view.darkMode", json!({})); diff --git a/crates/ui-egui/src/tabs.rs b/crates/ui-egui/src/tabs.rs index 462dc2e4c1..0c24c30045 100644 --- a/crates/ui-egui/src/tabs.rs +++ b/crates/ui-egui/src/tabs.rs @@ -407,7 +407,10 @@ pub fn status_bar(app: &mut SheetApp, ui: &mut Ui) { if let Some(d) = app.session.active() { if d.wb.vba_project.is_some() { ui.add_space(12.0); - text(ui, egui::RichText::new("Macros preserved (not executed)").font(theme::ui_font(12.5)).color(t.danger)); + text( + ui, + egui::RichText::new(app.ui.language.tr("Macros preserved (not executed)")).font(theme::ui_font(12.5)).color(t.danger), + ); } if d.wb.calc.mode == gridcraft_engine::model::CalcMode::Manual { ui.add_space(12.0); @@ -514,28 +517,34 @@ pub(crate) fn selection_statistics(app: &SheetApp) -> Vec { let fmt = |v: f64| { let code = d.wb.styles.get(sh.style_id(d.selection.active)).num_fmt.as_str().to_string(); let code = if code == "General" { "#,##0.##########".to_string() } else { code }; - gridcraft_engine::display::format(&gridcraft_engine::core::Value::Number(v), &code, &d.wb).text.trim_end_matches('.').to_string() + let region = d.wb.region; + let format = gridcraft_engine::display::number_format(&code); + gridcraft_engine::numfmt::format_value_with_region(&gridcraft_engine::core::Value::Number(v), &format, d.wb.date_system, region) + .text + .trim_end_matches(region.decimal) + .to_string() }; let mut parts = Vec::new(); + let lang = app.ui.language; if on.average && let Some(a) = st.average { - parts.push(format!("Average: {}", fmt(a))); + parts.push(format!("{}: {}", lang.tr("Average"), fmt(a))); } if on.count && st.count > 0 { - parts.push(format!("Count: {}", st.count)); + parts.push(format!("{}: {}", lang.translation("Status|Count").unwrap_or_else(|| lang.tr("Count")), st.count)); } if on.numerical_count && st.count > 0 { - parts.push(format!("Numerical Count: {}", st.numeric)); + parts.push(format!("{}: {}", lang.tr("Numerical Count"), st.numeric)); } if on.minimum && st.numeric > 0 { - parts.push(format!("Minimum: {}", fmt(st.min))); + parts.push(format!("{}: {}", lang.tr("Minimum"), fmt(st.min))); } if on.maximum && st.numeric > 0 { - parts.push(format!("Maximum: {}", fmt(st.max))); + parts.push(format!("{}: {}", lang.tr("Maximum"), fmt(st.max))); } if on.sum && st.numeric > 0 { - parts.push(format!("Sum: {}", fmt(st.sum))); + parts.push(format!("{}: {}", lang.translation("Status|Sum").unwrap_or_else(|| lang.tr("Sum")), fmt(st.sum))); } parts } @@ -546,13 +555,15 @@ fn status_bar_menu(app: &mut SheetApp, ui: &mut Ui) { let st = app.session.prefs.status_bar; for (key, label, mut on) in [ ("average", "Average", st.average), - ("count", "Count", st.count), + ("count", "Status|Count", st.count), ("numericalCount", "Numerical Count", st.numerical_count), ("minimum", "Minimum", st.minimum), ("maximum", "Maximum", st.maximum), - ("sum", "Sum", st.sum), + ("sum", "Status|Sum", st.sum), ] { - if ui.checkbox(&mut on, app.ui.language.tr(label)).changed() { + let lang = app.ui.language; + let shown = lang.translation(label).unwrap_or_else(|| lang.tr(label.rsplit_once('|').map_or(label, |(_, plain)| plain))); + if ui.checkbox(&mut on, shown).changed() { app.run_or_alert("view.statusBar", json!({ key: on })); } } diff --git a/crates/ui-egui/src/theme/font_fallback.rs b/crates/ui-egui/src/theme/font_fallback.rs index 7d99a7e88b..ee63c87f06 100644 --- a/crates/ui-egui/src/theme/font_fallback.rs +++ b/crates/ui-egui/src/theme/font_fallback.rs @@ -110,18 +110,17 @@ pub(super) fn covers_arabic(bytes: &[u8], index: u32) -> bool { /// Every fallback face we look for, in chain order: `(key, candidate files)`. One file per script /// family is enough — epaint picks the first face with the glyph, and a script's glyphs live in one /// file. Order only matters between faces that both cover a glyph (Japanese vs Chinese kanji), so -/// the interface language reorders the two Han entries and nothing else. +/// the interface language reorders the Han entries, adding a TC face for Traditional Chinese. #[cfg(not(target_arch = "wasm32"))] pub(super) fn fallback_faces(han: HanOrder) -> Vec<(&'static str, Vec<(String, u32)>)> { let ja = ("sys-cjk-han-ja", cjk_han_japanese()); let zh = ("sys-cjk-han-zh", cjk_han_simplified()); - let (first, second) = match han { - HanOrder::Japanese => (ja, zh), - HanOrder::Chinese => (zh, ja), + let mut han_faces = match han { + HanOrder::Japanese => vec![ja, zh], + HanOrder::Chinese => vec![zh, ja], + HanOrder::TraditionalChinese => vec![("sys-cjk-han-tc", cjk_han_traditional()), zh, ja], }; - vec![ - first, - second, + han_faces.extend([ ("sys-cjk-hangul", cjk_hangul()), ("sys-thai", thai()), ("sys-lao", lao()), @@ -129,7 +128,8 @@ pub(super) fn fallback_faces(han: HanOrder) -> Vec<(&'static str, Vec<(String, u ("sys-arabic", arabic()), ("sys-symbols", symbols()), ("sys-symbols-2", symbols_more()), - ] + ]); + han_faces } /// Linux directories that hold CJK fonts across distributions: Debian/Ubuntu (`opentype/noto`, @@ -170,7 +170,7 @@ fn windows_fonts() -> String { std::env::var("WINDIR").map(|w| format!("{w}\\Fonts")).unwrap_or_else(|_| "C:\\Windows\\Fonts".into()) } -/// The Noto Sans CJK faces for one locale (`jp`, `sc`, `kr`): the per-locale OTF, then the +/// The Noto Sans CJK faces for one locale (`jp`, `sc`, `tc`, `kr`): the per-locale OTF, then the /// region-merged TTC at `face`, in every Linux font directory. #[cfg(not(target_arch = "wasm32"))] fn noto_cjk(locale: &str, face: u32) -> Vec<(String, u32)> { @@ -221,6 +221,29 @@ pub(super) fn cjk_han_simplified() -> Vec<(String, u32)> { v } +/// Installed Taiwan-standard faces. Prefer the OFL Noto TC face when installed; no font bytes +/// are bundled. The merged Noto collection's TC face is index 3, not the SC face at index 2. +#[cfg(not(target_arch = "wasm32"))] +pub(super) fn cjk_han_traditional() -> Vec<(String, u32)> { + let win = windows_fonts(); + let mut v = Vec::new(); + if let Ok(local) = std::env::var("LOCALAPPDATA") { + v.push((format!("{local}\\Microsoft\\Windows\\Fonts\\NotoSansCJKtc\\NotoSansCJKtc-Regular.otf"), 0)); + v.push((format!("{local}\\Microsoft\\Windows\\Fonts\\NotoSansCJKtc-Regular.otf"), 0)); + } + v.push((format!("{win}\\NotoSansCJKtc-Regular.otf"), 0)); + v.push(("/Library/Fonts/NotoSansCJKtc-Regular.otf".into(), 0)); + if let Ok(home) = std::env::var("HOME") { + for dir in ["Library/Fonts", ".local/share/fonts", ".fonts"] { + v.push((format!("{home}/{dir}/NotoSansCJKtc-Regular.otf"), 0)); + v.push((format!("{home}/{dir}/NotoSansCJK-Regular.ttc"), 3)); + } + } + v.extend(noto_cjk("tc", 3)); + v.push((format!("{win}\\msjh.ttc"), 0)); // Microsoft JhengHei + v +} + /// Hangul faces (Korean). The Han faces above that come from the region-merged Noto Sans CJK file /// already carry Hangul; [`load_fallback`] then skips this list rather than load the file twice. #[cfg(not(target_arch = "wasm32"))] diff --git a/crates/ui-egui/src/theme/font_setup.rs b/crates/ui-egui/src/theme/font_setup.rs index 31e4c63eb4..ac964c33a1 100644 --- a/crates/ui-egui/src/theme/font_setup.rs +++ b/crates/ui-egui/src/theme/font_setup.rs @@ -450,20 +450,27 @@ pub fn font_definitions() -> FontDefinitions { font_definitions_for_language(crate::i18n::Language::En) } -/// Which Han face leads the fallback chain. Both Han faces cover kana and most kanji, so this only +/// Which Han face leads the fallback chain. The Han faces cover kana and most kanji, so this only /// decides glyph shapes (and which face catches a glyph the other lacks); switching between two /// languages with the same order needs no font rebuild. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum HanOrder { /// Japanese glyph shapes first (the interface is Japanese). Japanese, + /// Taiwan-standard Traditional Chinese glyph shapes first. + TraditionalChinese, /// Simplified Chinese first: the widest Han coverage, for every other interface language. Chinese, } impl HanOrder { + /// Selects the glyph region used to decide whether a language change rebuilds the fonts. pub fn of(language: crate::i18n::Language) -> Self { - if language == crate::i18n::Language::Ja { Self::Japanese } else { Self::Chinese } + match language { + crate::i18n::Language::Ja => Self::Japanese, + crate::i18n::Language::ZhTw => Self::TraditionalChinese, + _ => Self::Chinese, + } } } diff --git a/crates/ui-egui/src/theme/tests.rs b/crates/ui-egui/src/theme/tests.rs index 359336ee8b..873c0d965e 100644 --- a/crates/ui-egui/src/theme/tests.rs +++ b/crates/ui-egui/src/theme/tests.rs @@ -129,6 +129,8 @@ fn language_reorders_only_the_han_faces() { ["sys-cjk-han-zh", "sys-cjk-han-ja", "sys-cjk-hangul", "sys-thai", "sys-lao", "sys-hebrew", "sys-arabic", "sys-symbols", "sys-symbols-2"] ); assert_eq!(HanOrder::of(Language::Ja), HanOrder::Japanese); + assert_eq!(HanOrder::of(Language::ZhTw), HanOrder::TraditionalChinese); + assert_eq!(keys(HanOrder::TraditionalChinese).first(), Some(&"sys-cjk-han-tc")); for l in [Language::En, Language::Zh, Language::Ko, Language::Ru, Language::PtBr, Language::De, Language::Cs, Language::Fr, Language::Tr] { assert_eq!(HanOrder::of(l), HanOrder::Chinese, "{l:?} shares the default order (no font rebuild)"); } diff --git a/crates/ui-egui/src/updates_ui.rs b/crates/ui-egui/src/updates_ui.rs index cded96c852..a11bb22a46 100644 --- a/crates/ui-egui/src/updates_ui.rs +++ b/crates/ui-egui/src/updates_ui.rs @@ -5,7 +5,16 @@ use craft_update::CheckResultResponse; use craft_update::updater::{Action, Status, Updater}; -use crate::SheetApp; +use crate::{SheetApp, i18n::Language}; + +thread_local! { + static UPDATE_LANGUAGE: std::cell::Cell = const { std::cell::Cell::new(Language::En) }; +} + +/// Translates the shared updater UI using the language of the window drawing it. +fn translate_update(text: &str, args: &[(&str, &str)]) -> String { + UPDATE_LANGUAGE.with(|language| craft_update::translate::fill(language.get().tr(text), args)) +} const VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -19,7 +28,7 @@ pub(crate) struct Runtime { impl Default for Runtime { fn default() -> Self { - Self { updater: Updater::new(&crate::UPDATE_APP, VERSION), startup: false, manual: false } + Self { updater: Updater::new(&crate::UPDATE_APP, VERSION).with_translator(translate_update), startup: false, manual: false } } } @@ -57,7 +66,10 @@ fn result_window_shows(status: &Status, prompt_open: bool) -> bool { pub(crate) fn show(app: &mut SheetApp, ctx: &egui::Context) { // The close for a ready update waits until no workbook holds unsaved work. let clean = !app.session.documents().iter().any(|d| d.is_dirty()); - match app.updates_rt.updater.show_if(ctx, clean) { + // The shared dialogs are drawn in the language of the window that opened them. + let previous_language = UPDATE_LANGUAGE.replace(app.ui.language); + let action = app.updates_rt.updater.show_if(ctx, clean); + match action { Action::OpenUrl(url) => { if let Some(open) = &app.services.open_url { open(&url); @@ -69,7 +81,8 @@ pub(crate) fn show(app: &mut SheetApp, ctx: &egui::Context) { } let rt = &mut app.updates_rt; if result_window_shows(rt.updater.status(), rt.updater.prompt_open()) { - match craft_update::CheckResultDialog::new(&crate::UPDATE_APP, VERSION).show(ctx, rt.updater.status()) { + let dialog = craft_update::CheckResultDialog::new(&crate::UPDATE_APP, VERSION).with_translator(translate_update); + match dialog.show(ctx, rt.updater.status()) { CheckResultResponse::Close => rt.updater.dismiss_status(), CheckResultResponse::CheckAgain => rt.updater.check_now(ctx), // The next `show_if` asks the window to close once nothing is unsaved. @@ -77,6 +90,7 @@ pub(crate) fn show(app: &mut SheetApp, ctx: &egui::Context) { CheckResultResponse::None => {} } } + UPDATE_LANGUAGE.set(previous_language); } #[cfg(test)] diff --git a/crates/ui-egui/src/widgets.rs b/crates/ui-egui/src/widgets.rs index 28c02840e0..b74bd5f827 100644 --- a/crates/ui-egui/src/widgets.rs +++ b/crates/ui-egui/src/widgets.rs @@ -463,10 +463,10 @@ fn palette(ui: &mut Ui, theme_colors: &[u32; 12], none_label: &str, more_colors: }); ui.data_mut(|d| d.remove_temp::>(pal_id)); } - if ui.button(none_label).clicked() { + if ui.button(tr(ui, none_label)).clicked() { picked = Some("none".to_string()); } - ui.label(egui::RichText::new("Theme Colors").small()); + ui.label(egui::RichText::new(tr(ui, "Theme Colors")).small()); let order = [0usize, 1, 2, 3, 4, 5, 6, 7, 8, 9]; let tints = [0.0f64, 0.8, 0.6, 0.4, -0.25, -0.5]; egui::Grid::new(ui.scope_id().with("theme_grid")).spacing(vec2(2.0, 2.0)).show(ui, |ui| { @@ -489,7 +489,7 @@ fn palette(ui: &mut Ui, theme_colors: &[u32; 12], none_label: &str, more_colors: ui.end_row(); } }); - ui.label(egui::RichText::new("Standard Colors").small()); + ui.label(egui::RichText::new(tr(ui, "Standard Colors")).small()); ui.horizontal(|ui| { ui.spacing_mut().item_spacing.x = 2.0; for (col, hex) in std_hex.iter().enumerate() { @@ -510,7 +510,7 @@ fn palette(ui: &mut Ui, theme_colors: &[u32; 12], none_label: &str, more_colors: // Recent Colors: the custom colours picked below, newest first. let mut recent: Vec = ui.ctx().data(|d| d.get_temp(recent_colors_id())).unwrap_or_default(); if !recent.is_empty() { - ui.label(egui::RichText::new("Recent Colors").small()); + ui.label(egui::RichText::new(tr(ui, "Recent Colors")).small()); ui.horizontal(|ui| { ui.spacing_mut().item_spacing.x = 2.0; for hex in &recent { @@ -530,7 +530,7 @@ fn palette(ui: &mut Ui, theme_colors: &[u32; 12], none_label: &str, more_colors: if more_colors { ui.separator(); } - if more_colors && ui.button("More Colors…").clicked() { + if more_colors && ui.button(tr(ui, "More Colors…")).clicked() { let start = recent.first().and_then(|h| parse_hex(h)).unwrap_or([0x44, 0x72, 0xC4]); more = Some(MoreColors::new(start)); } @@ -542,7 +542,7 @@ fn palette(ui: &mut Ui, theme_colors: &[u32; 12], none_label: &str, more_colors: m.hex = hex_of(m.hsva.to_srgb()); } ui.horizontal(|ui| { - let label = ui.label("Hex"); + let label = ui.label(tr(ui, "Hex")); let r = ui.add(egui::TextEdit::singleline(&mut m.hex).desired_width(72.0).char_limit(7)).labelled_by(label.id); if r.changed() && let Some(c) = parse_hex(&m.hex) @@ -553,10 +553,10 @@ fn palette(ui: &mut Ui, theme_colors: &[u32; 12], none_label: &str, more_colors: let (sw, _) = ui.allocate_exact_size(vec2(36.0, 18.0), Sense::hover()); ui.painter().rect_filled(sw, 1.0, Color32::from_rgb(c[0], c[1], c[2])); ui.painter().rect_stroke(sw, 1.0, Stroke::new(1.0, Color32::from_gray(160)), StrokeKind::Inside); - ui.label(egui::RichText::new("New").small()); + ui.label(egui::RichText::new(tr(ui, "New")).small()); }); ui.horizontal(|ui| { - if ui.button(" OK ").clicked() { + if ui.button(tr(ui, "OK")).clicked() { // A hex still being typed that is not a colour falls back to the picker's. let c = parse_hex(&m.hex).unwrap_or_else(|| m.hsva.to_srgb()); let hex = hex_of(c); @@ -564,7 +564,7 @@ fn palette(ui: &mut Ui, theme_colors: &[u32; 12], none_label: &str, more_colors: picked = Some(hex); done = true; } - if ui.button("Cancel").clicked() { + if ui.button(tr(ui, "Cancel")).clicked() { done = true; } }); diff --git a/crates/ui-egui/tests/it/formula_locale.rs b/crates/ui-egui/tests/it/formula_locale.rs index 4b8ce04205..1b1c943c78 100644 --- a/crates/ui-egui/tests/it/formula_locale.rs +++ b/crates/ui-egui/tests/it/formula_locale.rs @@ -16,6 +16,179 @@ fn app() -> SheetApp { fn formula(app: &SheetApp) -> String { app.session.active().unwrap().wb.active().unwrap().cell(CellRef::new(0, 0)).unwrap().formula.as_ref().unwrap().text.to_string() } + +/// Unchanged numeric-looking text keeps its type on Ctrl+Enter without a quote in the editor. +#[test] +fn localized_text_fills_without_adding_an_apostrophe() { + for code in ["en", "es", "ru"] { + for text in ["1,5", "12,5%", " -1,5e2 "] { + let mut app = app(); + app.run("app.language.set", json!({"language":code})).unwrap(); + app.run("range.setValues", json!({"range":"A1", "values":[[text]], "parse":false})).unwrap(); + app.run("home.numberFormat", json!({"range":"B1", "format":"@"})).unwrap(); + app.run("selection.set", json!({"range":"A1:B1"})).unwrap(); + // The engine already quotes some spellings (for example signed scientific text). + // Localization must not add another prefix to the existing editor representation. + let doc = app.session.active().unwrap(); + let expected = gridcraft_engine::display::edit_text(&doc.wb, doc.wb.active().unwrap(), CellRef::new(0, 0)); + if matches!(text, "1,5" | "12,5%") { + assert_eq!(expected, text); + } + app.begin_edit(None, false); + assert_eq!(app.editor.as_ref().unwrap().text, expected); + assert!(app.commit_edit(0, 0, false, true)); + let sheet = app.session.active().unwrap().wb.active().unwrap(); + for col in 0..2 { + assert_eq!(sheet.value(CellRef::new(0, col)), Value::text(text), "{code}: {text}"); + } + } + } +} + +/// Ctrl+Shift+Enter preserves stored text without adding a prefix, and still enters array formulas. +#[test] +fn localized_array_commit_preserves_unchanged_text() { + let mut app = app(); + app.run("app.language.set", json!({"language":"ru"})).unwrap(); + app.run("range.setValues", json!({"range":"A1", "values":[["1,5"]], "parse":false})).unwrap(); + app.begin_edit(None, false); + assert_eq!(app.editor.as_ref().unwrap().text, "1,5"); + assert!(app.commit_edit(0, 0, true, false)); + let at = CellRef::new(0, 0); + let sh = app.session.active().unwrap().wb.active().unwrap(); + assert_eq!(sh.value(at), Value::text("1,5")); + assert!(sh.cell(at).unwrap().formula.is_none()); + + app.begin_edit(Some("=СУММ(1,5;2,5)".into()), false); + assert!(app.commit_edit(0, 0, true, false)); + let sh = app.session.active().unwrap().wb.active().unwrap(); + assert_eq!(sh.value(at), Value::Number(4.0)); + assert!(sh.cell(at).unwrap().formula.as_ref().unwrap().array.is_some()); +} + +/// Filling uses the text from the open draft even when a command changes the source cell. +#[test] +fn fill_uses_the_text_captured_when_the_draft_opened() { + let mut app = app(); + app.run("range.setValues", json!({"range":"A1", "values":[["1,5"]], "parse":false})).unwrap(); + app.run("selection.set", json!({"range":"A1:B1"})).unwrap(); + app.begin_edit(None, false); + app.run("cell.set", json!({"cell":"A1", "input":"new text"})).unwrap(); + assert!(app.commit_edit(0, 0, false, true)); + let sheet = app.session.active().unwrap().wb.active().unwrap(); + assert_eq!(sheet.value(CellRef::new(0, 1)), Value::text("1,5")); +} + +/// A decimal rule checks the type that the literal fill actually writes. +#[test] +fn numeric_validation_rejects_an_unchanged_text_fill() { + let mut app = app(); + app.run("range.setValues", json!({"range":"A1", "values":[["123"]], "parse":false})).unwrap(); + app.run("data.validation", json!({"range":"B1", "type":"decimal", "operator":"greater", "formula1":"0"})).unwrap(); + app.run("selection.set", json!({"range":"A1:B1"})).unwrap(); + app.begin_edit(None, false); + assert!(!app.commit_edit(0, 0, false, true)); + let sheet = app.session.active().unwrap().wb.active().unwrap(); + assert_eq!(sheet.value(CellRef::new(0, 1)), Value::Empty); +} + +/// Freshly typed localized numbers still become numbers when filling a selection. +#[test] +fn fresh_localized_numbers_still_fill_as_numbers() { + for code in ["es", "ru"] { + for (input, expected) in [("1,5", 1.5), ("12,5%", 0.125), ("-1,5e2", -150.0)] { + let mut app = app(); + app.run("app.language.set", json!({"language":code})).unwrap(); + app.run("selection.set", json!({"range":"A1:B1"})).unwrap(); + app.begin_edit(Some(input.into()), false); + assert!(app.commit_edit(0, 0, false, true)); + let sheet = app.session.active().unwrap().wb.active().unwrap(); + for col in 0..2 { + assert_eq!(sheet.value(CellRef::new(0, col)), Value::number(expected), "{code}: {input}"); + } + } + } +} + +/// Editing existing text into a different number uses numeric parsing, not the unchanged-text path. +#[test] +fn changed_localized_text_fills_as_a_number() { + for code in ["es", "ru"] { + let mut app = app(); + app.run("app.language.set", json!({"language":code})).unwrap(); + app.run("range.setValues", json!({"range":"A1", "values":[["1,5"]], "parse":false})).unwrap(); + app.run("selection.set", json!({"range":"A1:B1"})).unwrap(); + app.begin_edit(None, false); + app.editor.as_mut().unwrap().text = "2,5".into(); + assert!(app.commit_edit(0, 0, false, true)); + let sheet = app.session.active().unwrap().wb.active().unwrap(); + for col in 0..2 { + assert_eq!(sheet.value(CellRef::new(0, col)), Value::number(2.5), "{code}"); + } + } +} + +#[test] +fn insert_function_keeps_the_open_drafts_language() { + use egui_kittest::kittest::Queryable as _; + let mut application = app(); + application.ui.language = Language::Ru; + application.begin_edit(Some("=1+".into()), false); + application.ui.language = Language::En; + application.open_dialog("insertFunction", json!({})); + let mut h = crate::common::harness_with(crate::common::builder(), application, 3); + h.state_mut().dialog.as_mut().unwrap().search = "СУММ".into(); + h.run_steps(2); + h.get_by_label("СУММ (Math & Trig)").click(); + h.run_steps(2); + h.get_by_label(" OK ").click(); + h.run_steps(2); + let application = h.state_mut(); + let draft = application.editor.as_mut().unwrap(); + assert_eq!(draft.text, "=1+СУММ("); + draft.insert_at_caret("2;3)"); + assert!(application.commit_edit(0, 0, false, false)); + assert_eq!(formula(application), "1+SUM(2,3)"); + assert_eq!(application.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::Number(6.0)); +} + +/// The current function-library dialog searches Russian aliases, their е/ё variants and English names. +#[test] +fn russian_insert_function_search_preserves_locale_matching() { + use egui_kittest::kittest::Queryable as _; + let mut application = app(); + application.ui.language = Language::Ru; + application.open_dialog("insertFunction", json!({})); + let mut h = crate::common::harness_with(crate::common::builder(), application, 3); + let label = format!("СЧЁТ ({})", Language::Ru.tr("Statistical")); + for query in ["счет", "СЧЁТ", "count"] { + h.state_mut().dialog.as_mut().unwrap().search = query.into(); + h.run_steps(2); + assert!(h.query_by_label(&label).is_some(), "{query}"); + assert_eq!(h.state().dialog.as_ref().unwrap().values.get("category"), Some(&json!("All"))); + } +} + +/// Localized error literals do not hide reference spans used by colouring, F4 and point mode. +#[test] +fn localized_errors_preserve_reference_spans_in_the_draft_language() { + use gridcraft_engine::formula::FormulaLocale; + use gridcraft_ui_egui::editor::{formula_refs, formula_refs_in}; + let source = "=ЕСЛИОШИБКА(#ССЫЛКА!;СУММ(A1;B2:C3;1,5;{1\\2;3\\4};'Лист'!A1))"; + let refs = formula_refs_in(source, FormulaLocale::Ru); + assert_eq!(refs.iter().map(|r| r.2.a1()).collect::>(), ["A1", "B2:C3", "A1"]); + assert_eq!(refs.iter().map(|r| &source[r.0..r.1]).collect::>(), ["A1", "B2:C3", "'Лист'!A1"]); + assert_eq!(refs.last().unwrap().3.as_deref(), Some("Лист")); + // Changing the interface does not change an existing draft's captured syntax. + let mut app = app(); + app.run("app.language.set", json!({"language":"ru"})).unwrap(); + app.begin_edit(Some(source.to_string()), false); + app.run("app.language.set", json!({"language":"en"})).unwrap(); + let draft = app.editor.as_ref().unwrap(); + assert_eq!(formula_refs_in(&draft.text, draft.locale), refs); + let english = "=IFERROR(#REF!,A1+B2:C3)"; + assert_eq!(formula_refs(english), formula_refs_in(english, FormulaLocale::En)); +} fn enter(app: &mut SheetApp, text: &str) -> bool { app.begin_edit(Some(text.into()), false); app.commit_edit(0, 0, false, false) @@ -182,17 +355,50 @@ fn canonical_engine_templates_enter_the_selected_formula_language() { } } +/// Localized formula syntax is reversible through the canonical XLSX writer and reader. #[test] -fn portuguese_interface_retains_its_canonical_formula_fallback() { +fn french_german_italian_portuguese_and_turkish_formulas_round_trip_through_xlsx() { + for (language, ui_language, localized) in [ + ("fr", Language::Fr, "=SIERREUR(SOMME(1,5;2,25);#VALEUR!)"), + ("de", Language::De, "=WENNFEHLER(SUMME(1,5;2,25);#WERT!)"), + ("it", Language::It, "=SE.ERRORE(SOMMA(1,5;2,25);#VALORE!)"), + ("pt-BR", Language::PtBr, "=SEERRO(SOMA(1,5;2,25);#VALOR!)"), + ("tr", Language::Tr, "=EĞERHATA(TOPLA(1,5;2,25);#DEĞER!)"), + ] { + let mut app = app(); + app.run("app.language.set", json!({"code":language})).unwrap(); + assert_eq!(app.ui.language, ui_language); + assert!(enter(&mut app, &localized.to_lowercase()), "{language}"); + assert_eq!(formula(&app), "IFERROR(SUM(1.5,2.25),#VALUE!)"); + let saved = app.run("file.save", json!({"format":"xlsx"})).unwrap(); + app.run("file.open", json!({"name":"localized.xlsx","base64":saved["base64"]})).unwrap(); + assert_eq!(formula(&app), "IFERROR(SUM(1.5,2.25),#VALUE!)"); + app.begin_edit(None, false); + assert_eq!(app.editor.as_ref().unwrap().text, localized); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::Number(3.75)); + let restored: UiState = serde_json::from_str(&serde_json::to_string(&app.ui).unwrap()).unwrap(); + assert_eq!(restored.language, ui_language); + } +} + +/// Structured-reference keywords are local in the editor and canonical on disk. +#[test] +fn spanish_structured_references_round_trip_through_xlsx() { let mut app = app(); - app.run("app.language.set", json!({"code":"pt-BR"})).unwrap(); - assert_eq!(app.ui.language, Language::PtBr); - assert!(enter(&mut app, "=SUM(1.5,2.25)")); - app.begin_edit(None, true); - assert_eq!(app.editor.as_ref().unwrap().text, "=SUM(1.5,2.25)"); - assert!(!enter(&mut app, "=SUMA(1;2)")); - let restored: UiState = serde_json::from_str(&serde_json::to_string(&app.ui).unwrap()).unwrap(); - assert_eq!(restored.language, Language::PtBr); + app.run("cell.set", json!({"cell":"D1","input":"Importe"})).unwrap(); + app.run("cell.set", json!({"cell":"D2","input":"7"})).unwrap(); + app.run("insert.table", json!({"range":"D1:D2","header":true,"name":"Ventas"})).unwrap(); + app.run("app.language.set", json!({"code":"es"})).unwrap(); + let localized = "=SUMA(Ventas[[#Datos];[Importe]])"; + let canonical = "SUM(Ventas[[#Data],[Importe]])"; + assert!(enter(&mut app, localized)); + assert_eq!(formula(&app), canonical); + let saved = app.run("file.save", json!({"format":"xlsx"})).unwrap(); + app.run("file.open", json!({"name":"table.xlsx","base64":saved["base64"]})).unwrap(); + assert_eq!(formula(&app), canonical); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::Number(7.0)); + app.begin_edit(None, false); + assert_eq!(app.editor.as_ref().unwrap().text, localized); } #[test] @@ -211,32 +417,234 @@ fn czech_interface_retains_its_canonical_formula_fallback() { } #[test] -fn user_defined_prefix_is_hidden_while_editing_and_kept_on_commit() { - // Excel shows `_xludf.EOMONTH()` as `=EOMONTH()`; the cell still holds the user-defined call - // (#726), and committing the edit unchanged must not turn it into the built-in. +fn ambiguous_user_defined_prefix_is_visible_while_editing() { + // Explicit qualifiers preserve user-defined calls while the draft is edited. let mut app = app(); app.run("cell.set", json!({"cell":"A1","input":"=_xludf.EOMONTH()&_xludf.CONCAT(\"_xludf.x\")"})).unwrap(); app.begin_edit(None, true); - assert_eq!(app.editor.as_ref().unwrap().text, "=EOMONTH()&CONCAT(\"_xludf.x\")"); + assert_eq!(app.editor.as_ref().unwrap().text, "=_xludf.EOMONTH()&_xludf.CONCAT(\"_xludf.x\")"); assert!(app.commit_edit(0, 0, false, false)); assert_eq!(formula(&app), "_xludf.EOMONTH()&_xludf.CONCAT(\"_xludf.x\")"); assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::Error(CellError::Name)); app.run("app.language.set", json!({"language":"es"})).unwrap(); app.begin_edit(None, true); - assert_eq!(app.editor.as_ref().unwrap().text, "=EOMONTH()&CONCAT(\"_xludf.x\")"); + assert_eq!(app.editor.as_ref().unwrap().text, "=_xludf.EOMONTH()&_xludf.CONCAT(\"_xludf.x\")"); assert!(app.commit_edit(0, 0, false, false)); assert_eq!(formula(&app), "_xludf.EOMONTH()&_xludf.CONCAT(\"_xludf.x\")"); } #[test] -fn turkish_interface_retains_its_canonical_formula_fallback() { +fn deleting_either_same_named_call_preserves_the_other() { + for (remaining, expected) in [("=_xludf.SUM(2)", "_xludf.SUM(2)"), ("=SUM(1)", "SUM(1)")] { + let mut app = app(); + app.run("cell.set", json!({"cell":"A1","input":"=SUM(1)+_xludf.SUM(2)"})).unwrap(); + app.begin_edit(None, true); + let draft = app.editor.as_mut().unwrap(); + assert_eq!(draft.text, "=SUM(1)+_xludf.SUM(2)"); + draft.text = remaining.into(); + assert!(app.commit_edit(0, 0, false, false)); + assert_eq!(formula(&app), expected); + } +} + +#[test] +fn editing_an_explicit_udf_does_not_rebind_it_to_a_builtin() { + let mut app = app(); + app.run("cell.set", json!({"cell":"A1","input":"=_xludf.SUM(1,2)"})).unwrap(); + app.begin_edit(None, true); + assert_eq!(app.editor.as_ref().unwrap().text, "=_xludf.SUM(1,2)"); + app.editor.as_mut().unwrap().text = "=_xludf.SUM(2,2)".into(); + assert!(app.commit_edit(0, 0, false, false)); + assert_eq!(formula(&app), "_xludf.SUM(2,2)"); + + app.run("app.language.set", json!({"language":"ru"})).unwrap(); + app.run("cell.set", json!({"cell":"A1","input":"=_xludf.SUM(1,2)"})).unwrap(); + app.begin_edit(None, true); + assert_eq!(app.editor.as_ref().unwrap().text, "=_xludf.SUM(1;2)"); + app.editor.as_mut().unwrap().text = "=_xludf.SUM(2;2)".into(); + assert!(app.commit_edit(0, 0, false, false)); + assert_eq!(formula(&app), "_xludf.SUM(2,2)"); +} + +#[test] +fn turkish_complex_aliases_follow_excel_arithmetic() { + let mut app = app(); + app.ui.language = Language::Tr; + for (input, value) in [("=SANTOPLA(5;2)", "3"), ("=SANÇIKAR(5;2)", "7")] { + assert!(enter(&mut app, input)); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::text(value)); + } +} + +#[test] +fn turkish_interface_localizes_formula_entry_and_display() { let mut app = app(); app.run("app.language.set", json!({"code":"tr-TR"})).unwrap(); assert_eq!(app.ui.language, Language::Tr); - assert!(enter(&mut app, "=SUM(1.5,2.25)")); + assert!(enter(&mut app, "=topla(1,5;2,25)")); + assert_eq!(formula(&app), "SUM(1.5,2.25)"); app.begin_edit(None, true); - assert_eq!(app.editor.as_ref().unwrap().text, "=SUM(1.5,2.25)"); - assert!(!enter(&mut app, "=TOPLA(1;2)")); + assert_eq!(app.editor.as_ref().unwrap().text, "=TOPLA(1,5;2,25)"); let restored: UiState = serde_json::from_str(&serde_json::to_string(&app.ui).unwrap()).unwrap(); assert_eq!(restored.language, Language::Tr); } +/// Checks Russian editor entry and display survive XLSX round trips while engine/API syntax stays canonical. +#[test] +fn russian_entry_roundtrips_through_xlsx_and_keeps_api_canonical() { + let mut app = app(); + app.run("app.language.set", json!({"language":"ru"})).unwrap(); + assert!(enter(&mut app, "=если(истина;сумм(1,5;2,25);0)")); + assert_eq!(formula(&app), "IF(TRUE,SUM(1.5,2.25),0)"); + let saved = app.run("file.save", json!({"format":"xlsx"})).unwrap(); + app.run("file.open", json!({"name":"russian.xlsx","base64":saved["base64"]})).unwrap(); + app.begin_edit(None, false); + assert_eq!(app.editor.as_ref().unwrap().text, "=ЕСЛИ(ИСТИНА;СУММ(1,5;2,25);0)"); + assert!(app.commit_edit(0, 0, false, false)); + assert!(app.run("cell.set", json!({"cell":"A2","input":"=SUM(1,2)"})).is_ok()); + assert!(app.run("cell.set", json!({"cell":"A3","input":"=СУММ(1;2)"})).is_err()); + assert!(enter(&mut app, "=ЕСЛИОШИБКА(#ССЫЛКА!;42)")); + assert_eq!(formula(&app), "IFERROR(#REF!,42)"); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::Number(42.0)); +} + +/// Checks localized Boolean/error values and similar literal text retain their types through editing. +#[test] +fn russian_constants_and_literal_text_do_not_change_type_when_edited() { + let mut app = app(); + app.run("app.language.set", json!({"language":"ru"})).unwrap(); + for (typed, expected) in [("#ССЫЛКА!", Value::Error(CellError::Ref)), ("истина", Value::Bool(true)), ("ложь", Value::Bool(false))] + { + assert!(enter(&mut app, typed)); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), expected); + app.begin_edit(None, false); + assert!(app.commit_edit(0, 0, false, false)); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), expected); + } + for text in ["#ССЫЛКА!", "ИСТИНА", "ЛОЖЬ", "+сумм(1)"] { + app.run("cell.set", json!({"cell":"A1","input":format!("'{text}")})).unwrap(); + app.begin_edit(None, false); + assert!(app.editor.as_ref().unwrap().text.starts_with('\'')); + assert!(app.commit_edit(0, 0, false, false)); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::text(text)); + } +} + +/// Checks Russian autocomplete and argument insertion place the caret at valid Unicode positions. +#[test] +fn russian_autocomplete_and_argument_insertion_use_unicode_caret_positions() { + use gridcraft_engine::formula::FormulaLocale; + use gridcraft_ui_egui::editor::EditState; + let mut editor = EditState::new(0, 0, CellRef::new(0, 0), "=сче".into(), true, false); + editor.locale = FormulaLocale::Ru; + editor.update_autocomplete(&["СЧЁТ".into(), "СЧЁТЕСЛИ".into()]); + assert_eq!(editor.autocomplete, vec!["СЧЁТ", "СЧЁТЕСЛИ"]); + assert!(editor.accept_autocomplete()); + assert_eq!(editor.text, "=СЧЁТ("); + assert_eq!(editor.caret, editor.text.chars().count()); + assert_eq!(editor.current_function(), Some(("СЧЁТ".into(), 0))); + assert!(editor.insert_argument_names(Language::Ru)); + let value = Language::Ru.function_argument("value").unwrap(); + assert_eq!(editor.text, format!("=СЧЁТ({value}1;{value}2;...)")); +} + +/// Checks explicit Text formatting protects localized-looking input in both supported translated syntaxes. +#[test] +fn localized_value_editing_respects_explicit_text_format_in_both_languages() { + for code in ["es", "ru"] { + let mut app = app(); + app.run("app.language.set", json!({"language":code})).unwrap(); + app.run("home.numberFormat", json!({"format":"@"})).unwrap(); + let locale = app.ui.language.formula_locale(); + for text in [locale.function_name("TRUE"), locale.error_name(CellError::Ref)] { + assert!(enter(&mut app, text)); + app.begin_edit(None, false); + assert_eq!(app.editor.as_ref().unwrap().text, text); + app.editor.as_mut().unwrap().text.push('!'); + assert!(app.commit_edit(0, 0, false, false)); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::text(format!("{text}!"))); + } + } +} + +/// Polish input stays canonical in XLSX and displays in Polish after reopening. +#[test] +fn polish_formula_round_trips_through_xlsx() { + let mut app = app(); + app.run("app.language.set", json!({"language":"pl"})).unwrap(); + assert!(enter(&mut app, "=jeżeli.błąd(suma(1,5;2,25);#DZIEL/0!)")); + assert_eq!(formula(&app), "IFERROR(SUM(1.5,2.25),#DIV/0!)"); + let saved = app.run("file.save", json!({"format":"xlsx"})).unwrap(); + app.run("file.open", json!({"name":"polish.xlsx","base64":saved["base64"]})).unwrap(); + assert_eq!(formula(&app), "IFERROR(SUM(1.5,2.25),#DIV/0!)"); + app.begin_edit(None, false); + assert_eq!(app.editor.as_ref().unwrap().text, "=JEŻELI.BŁĄD(SUMA(1,5;2,25);#DZIEL/0!)"); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::Number(3.75)); +} + +#[test] +fn unchanged_array_literal_checks_the_top_left_destination() { + let mut app = app(); + app.run("range.setValues", json!({"range":"B1","values":[["text"]],"parse":false})).unwrap(); + app.run("data.validation", json!({"range":"A1","type":"custom","formula1":"=FALSE"})).unwrap(); + app.run("selection.set", json!({"range":"A1:B1","active":"B1"})).unwrap(); + app.begin_edit(None, false); + assert!(!app.commit_edit(0, 0, true, false)); + assert!(app.editor.is_some()); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::Empty); +} + +#[test] +fn prepending_a_builtin_keeps_the_existing_udf() { + let mut app = app(); + app.run("cell.set", json!({"cell":"A1","input":"=_xludf.SUM(2)"})).unwrap(); + app.begin_edit(None, true); + let draft = app.editor.as_mut().unwrap(); + draft.text = format!("=SUM(1)+{}", draft.text.trim_start_matches('=')); + assert!(app.commit_edit(0, 0, false, false)); + assert_eq!(formula(&app), "SUM(1)+_xludf.SUM(2)"); +} + +/// Literal array validation sees both the new anchor value and cleared neighbours. +#[test] +fn unchanged_literal_array_validation_uses_completed_cells() { + for (rule, accepted) in [("=B1=\"keep\"", false), ("=AND(A1=\"keep\",ISBLANK(B1),C1=\"cleared\")", true)] { + let mut app = app(); + app.run("range.setValues", json!({"range":"A1","values":[["old","keep"]],"parse":false})).unwrap(); + app.run("cell.set", json!({"cell":"C1","input":"=IF(ISBLANK(B1),\"cleared\",B1)"})).unwrap(); + app.run("data.validation", json!({"range":"A1","type":"custom","formula1":rule})).unwrap(); + app.run("selection.set", json!({"range":"A1:B1","active":"B1"})).unwrap(); + app.begin_edit(None, false); + assert_eq!(app.commit_edit(0, 0, true, false), accepted, "{rule}"); + let sh = app.session.active().unwrap().wb.active().unwrap(); + assert_eq!(sh.value(CellRef::new(0, 0)), Value::from(if accepted { "keep" } else { "old" })); + assert_eq!(sh.value(CellRef::new(0, 1)), if accepted { Value::Empty } else { Value::from("keep") }); + assert_eq!(sh.value(CellRef::new(0, 2)), Value::from(if accepted { "cleared" } else { "keep" })); + assert_eq!(app.editor.is_none(), accepted); + } +} + +#[test] +fn whitespace_around_localized_constants_matches_engine_entry() { + let mut app = app(); + app.ui.language = Language::Ru; + for (input, value) in [(" ИСТИНА ", Value::Bool(true)), (" #ССЫЛКА! ", Value::Error(CellError::Ref))] { + assert!(enter(&mut app, input)); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), value); + } +} + +#[test] +fn localized_function_callbacks_work_in_every_formula_language() { + for language in [Language::De, Language::Es, Language::Fr, Language::It, Language::Pl, Language::PtBr, Language::Ru, Language::Tr] { + let mut app = app(); + app.ui.language = language; + app.run("range.setValues", json!({"range":"A1","values":[[1],[4]]})).unwrap(); + app.run("selection.set", json!({"cell":"B1"})).unwrap(); + let locale = language.formula_locale(); + let text = format!("=MAP(A1:A2{}{})", locale.list_separator(), locale.function_name("SQRT")); + assert!(enter(&mut app, &text), "{language:?}"); + let sheet = app.session.active().unwrap().wb.active().unwrap(); + assert_eq!(sheet.value(CellRef::new(0, 1)), Value::Number(1.0), "{language:?}"); + assert_eq!(sheet.value(CellRef::new(1, 1)), Value::Number(2.0), "{language:?}"); + } +} diff --git a/crates/ui-egui/tests/it/formula_point_headers.rs b/crates/ui-egui/tests/it/formula_point_headers.rs index aeef72f7fa..19796c2024 100644 --- a/crates/ui-egui/tests/it/formula_point_headers.rs +++ b/crates/ui-egui/tests/it/formula_point_headers.rs @@ -95,6 +95,23 @@ fn shift_selects_a_contiguous_column_range_while_editing_a_formula() { assert_eq!(gridcraft_ui_egui::editor::formula_refs(text).iter().map(|r| r.2.a1()).collect::>(), ["C:E"]); } +/// A localized draft keeps both its original A1 references and the pointed range visible. +#[test] +fn localized_formula_points_to_and_highlights_a_column_range() { + let mut h = harness(); + h.state_mut().run("app.language.set", json!({"code":"es"})).unwrap(); + h.state_mut().begin_edit(Some("=SUMA(Ventas[[#Datos];[Importe]];A1;1,5;".into()), false); + h.run_steps(2); + let first = header_center(&h, false, 2); + click(&mut h, first); + let second = header_center(&h, false, 4); + click_with_modifiers(&mut h, second, Modifiers::SHIFT); + let draft = h.state().editor.as_ref().unwrap(); + assert_eq!(draft.text, "=SUMA(Ventas[[#Datos];[Importe]];A1;1,5;C:E"); + let refs = gridcraft_ui_egui::editor::formula_refs_in(&draft.text, draft.locale); + assert_eq!(refs.iter().map(|r| &draft.text[r.0..r.1]).collect::>(), ["A1", "C:E"]); +} + #[test] fn command_selects_discontiguous_columns_while_editing_a_formula() { let mut h = harness(); diff --git a/crates/ui-egui/tests/it/generated_names.rs b/crates/ui-egui/tests/it/generated_names.rs new file mode 100644 index 0000000000..86c0db27d0 --- /dev/null +++ b/crates/ui-egui/tests/it/generated_names.rs @@ -0,0 +1,37 @@ +//! Generated-name prefixes taken from every interface catalog must reach the commands that use them: +//! a translation with a character the shared validator rejects would block creating a workbook, a +//! sheet or a table in that language. + +use gridcraft_engine::Session; +use gridcraft_ui_egui::i18n::Language; +use serde_json::json; + +#[test] +fn every_language_generated_prefixes_are_accepted() { + for language in Language::ALL { + let book = language.tr("Book"); + let sheet = language.tr("Sheet"); + let column = language.tr("Generated|Column"); + let mut session = Session::new(); + if let Err(error) = session.execute("file.new", json!({"bookPrefix": book, "sheetPrefix": sheet})) { + panic!("{language:?}: file.new rejected `{book}`/`{sheet}`: {error}"); + } + let sheets: Vec = session.doc().map(|doc| doc.wb.sheets.iter().map(|s| s.name.clone()).collect()).unwrap_or_default(); + assert!(!sheets.is_empty() && sheets.iter().all(|name| name.starts_with(sheet)), "{language:?}: {sheets:?} lacks `{sheet}`"); + if let Err(error) = session.execute("home.insertSheet", json!({"namePrefix": sheet})) { + panic!("{language:?}: home.insertSheet rejected `{sheet}`: {error}"); + } + session.execute("range.setValues", json!({"range": "A1", "values": [[1, 2]]})).unwrap(); + if let Err(error) = session.execute("insert.table", json!({"range": "A1:B1", "header": false, "columnPrefix": column})) { + panic!("{language:?}: insert.table rejected `{column}`: {error}"); + } + let columns: Vec = session + .doc() + .ok() + .and_then(|doc| { + doc.wb.sheets.iter().flat_map(|sheet| sheet.tables.iter()).next().map(|t| t.columns.iter().map(|c| c.name.clone()).collect()) + }) + .unwrap_or_default(); + assert!(!columns.is_empty() && columns.iter().all(|name| name.starts_with(column)), "{language:?}: {columns:?} lacks `{column}`"); + } +} diff --git a/crates/ui-egui/tests/it/interaction.rs b/crates/ui-egui/tests/it/interaction.rs index 16b54eedbb..e0d2484018 100644 --- a/crates/ui-egui/tests/it/interaction.rs +++ b/crates/ui-egui/tests/it/interaction.rs @@ -481,7 +481,7 @@ fn language_switch_renders_the_ribbon_and_persists() { // the documented no-font gap, not a missing-glyph or accessibility opt-out. let languages: Vec = Language::ALL .into_iter() - .filter(|l| gridcraft_ui_egui::theme::craft_fonts_loaded() || !matches!(l, Language::Ja | Language::Ko | Language::Zh)) + .filter(|l| gridcraft_ui_egui::theme::craft_fonts_loaded() || !matches!(l, Language::Ja | Language::Ko | Language::Zh | Language::ZhTw)) .collect(); for language in languages { h.state_mut().run("app.language.set", json!({"language": language.code()})).unwrap(); diff --git a/crates/ui-egui/tests/it/main.rs b/crates/ui-egui/tests/it/main.rs index a6d27142d6..e511eb607f 100644 --- a/crates/ui-egui/tests/it/main.rs +++ b/crates/ui-egui/tests/it/main.rs @@ -53,6 +53,7 @@ mod formula_point_headers; mod formula_popup; mod freeze_handles; mod function_library; +mod generated_names; mod go_to_dialog; mod header_autofit; mod header_column_drag; @@ -95,6 +96,7 @@ mod python_cell_edit; mod python_hidden; mod python_mode; mod ref_edit; +mod reported_localization; mod ribbon_layout; mod right_to_left; mod scroll_position; diff --git a/crates/ui-egui/tests/it/more_colors.rs b/crates/ui-egui/tests/it/more_colors.rs index b4e56301b9..24d2c00943 100644 --- a/crates/ui-egui/tests/it/more_colors.rs +++ b/crates/ui-egui/tests/it/more_colors.rs @@ -36,7 +36,7 @@ fn open_fill_palette(h: &mut Harness) { } fn type_hex(h: &mut Harness, hex: &str) { - h.get_by_label("Hex").click(); + h.get_by_label(h.state().ui.language.tr("Hex")).click(); h.run_steps(2); press(h, Key::A, Modifiers::COMMAND); h.input_mut().events.push(Event::Text(hex.to_string())); @@ -51,7 +51,7 @@ fn more_colors_applies_the_typed_colour_and_remembers_it() { h.get_by_label("More Colors…").click(); h.run_steps(3); type_hex(&mut h, "#12AB34"); - h.get_by_label(" OK ").click(); + h.get_by_role_and_label(egui::accesskit::Role::Button, h.state().ui.language.tr("OK")).click(); h.run_steps(4); assert_eq!(h.state().grid.last_fill, "#12AB34"); assert_eq!(h.state().session.journal.iter().filter(|(id, _)| id == "home.fillColor").count(), 1); @@ -90,7 +90,7 @@ fn the_font_colour_menu_has_them_too_and_shares_the_recent_colours() { h.get_by_label("More Colors…").click(); h.run_steps(3); type_hex(&mut h, "#00FF7F"); - h.get_by_label(" OK ").click(); + h.get_by_role_and_label(egui::accesskit::Role::Button, h.state().ui.language.tr("OK")).click(); h.run_steps(4); for k in [Key::F10, Key::H, Key::F, Key::C] { press(&mut h, k, Modifiers::NONE); @@ -100,3 +100,23 @@ fn the_font_colour_menu_has_them_too_and_shares_the_recent_colours() { h.get_by_label("Recent Colors"); h.get_by_label("More Colors…"); } + +/// Localized palette labels keep the same typed-colour application and recent-colour behavior. +#[test] +fn russian_palette_applies_a_typed_colour() { + let mut h = harness(); + let language = gridcraft_ui_egui::i18n::Language::Ru; + h.state_mut().ui.language = language; + h.run_steps(3); + open_fill_palette(&mut h); + h.get_by_label(language.tr("Theme Colors")); + h.get_by_label(language.tr("Standard Colors")); + h.get_by_label(language.tr("More Colors…")).click(); + h.run_steps(3); + type_hex(&mut h, "#12AB34"); + h.get_by_role_and_label(egui::accesskit::Role::Button, language.tr("OK")).click(); + h.run_steps(4); + assert_eq!(h.state().grid.last_fill, "#12AB34"); + open_fill_palette(&mut h); + h.get_by_label(language.tr("Recent Colors")); +} diff --git a/crates/ui-egui/tests/it/reported_localization.rs b/crates/ui-egui/tests/it/reported_localization.rs new file mode 100644 index 0000000000..08afd0b66d --- /dev/null +++ b/crates/ui-egui/tests/it/reported_localization.rs @@ -0,0 +1,459 @@ +//! Regressions from manual Russian interface review: chrome, generated names and file semantics. +use egui_kittest::kittest::Queryable as _; +use gridcraft_ui_egui::{SheetApp, i18n::Language}; +use serde_json::json; + +fn harness() -> egui_kittest::Harness<'static, SheetApp> { + let mut h = crate::support::blank_harness(4); + h.state_mut().run("app.language.set", json!({"language":"ru"})).unwrap(); + h +} + +fn use_german_region(h: &mut egui_kittest::Harness<'static, SheetApp>) { + let doc = h.state_mut().session.active_mut().unwrap(); + std::sync::Arc::make_mut(&mut doc.wb).region = gridcraft_engine::core::region::lookup("de-DE"); +} + +/// Language-dependent generated names are real document names, unique and stable on a language switch. +#[test] +fn generated_names_are_localized_and_existing_names_stay_unchanged() { + let mut h = harness(); + h.state_mut().run_or_alert("file.new", json!({})); + assert_eq!(h.state().session.active().unwrap().title, "Книга1"); + assert_eq!(h.state().session.active().unwrap().wb.active().unwrap().name, "Лист1"); + h.state_mut().run_or_alert("home.insertSheet", json!({})); + assert_eq!(h.state().session.active().unwrap().wb.active().unwrap().name, "Лист2"); + h.state_mut().run_or_alert("insert.table", json!({"range":"A1:B2","header":false})); + let doc = h.state().session.active().unwrap(); + let table = &doc.wb.active().unwrap().tables[0]; + assert_eq!(table.columns.iter().map(|c| c.name.as_str()).collect::>(), ["Столбец1", "Столбец2"]); + let saved = h.state_mut().run("file.save", json!({"format":"xlsx"})).unwrap(); + h.state_mut().run("file.open", json!({"name":"localized.xlsx", "base64":saved["base64"]})).unwrap(); + assert_eq!(h.state().session.active().unwrap().wb.active().unwrap().name, "Лист2"); + assert_eq!(h.state().session.active().unwrap().wb.active().unwrap().tables[0].columns[0].name, "Столбец1"); + h.state_mut().run("app.language.set", json!({"language":"en"})).unwrap(); + assert_eq!(h.state().session.active().unwrap().wb.active().unwrap().name, "Лист2"); + h.state_mut().run_or_alert("file.new", json!({})); + assert!(h.state().session.active().unwrap().title.starts_with("Book")); +} + +/// Search labels and macro/name-manager controls go through the same catalog as their window titles. +#[test] +fn reported_dialogs_translate_their_contents() { + for (dialog, labels) in [ + ("find", vec!["Find what:", "Match case", "Find All", "Find Next"]), + ("nameManager", vec!["New…", "Name", "Value", "Refers To", "Scope", "Close"]), + ("recordMacro", vec!["Macro name:", "Shortcut key:", "Description:", "Use Relative References"]), + ] { + let mut h = harness(); + h.state_mut().open_dialog(dialog, json!({})); + h.run_steps(4); + for label in labels { + let translated = Language::Ru.tr(label); + assert_ne!(translated, label, "missing catalog row: {label}"); + assert!(h.query_by_label_contains(translated).is_some(), "{dialog}: missing {translated}"); + } + } +} + +/// A real engine error is localized when drawn; API error text is still canonical English. +#[test] +fn empty_clipboard_message_is_translated_at_display_time() { + let mut h = harness(); + let error = h.state_mut().run("edit.paste", json!({})).unwrap_err(); + assert!(error.contains("Nothing to paste.")); + h.state_mut().message = Some(("GridCraft".into(), error)); + h.run_steps(3); + assert!(h.query_by_label_contains(Language::Ru.tr("Nothing to paste.")).is_some()); +} + +/// An unknown function produces a typed NAME error, displayed with Russian error spelling. +#[test] +fn russian_formula_failure_keeps_the_typed_error() { + use gridcraft_engine::core::{CellError, CellRef, Value}; + let mut h = harness(); + h.state_mut().begin_edit(Some("=НЕСУЩЕСТВУЮЩАЯ(1)".into()), false); + assert!(h.state_mut().commit_edit(0, 0, false, false)); + assert_eq!(h.state().session.active().unwrap().wb.active().unwrap().value(CellRef::new(0, 0)), Value::Error(CellError::Name)); + h.state_mut().begin_edit(None, false); + assert!(h.state().editor.as_ref().unwrap().text.contains("НЕСУЩЕСТВУЮЩАЯ")); +} + +/// The function help's search field and cancellation keep their localized accessible controls in every language. +#[test] +fn function_dialog_controls_follow_each_interface_language() { + for language in Language::ALL { + let mut h = harness(); + h.state_mut().ui.language = language; + h.state_mut().open_dialog("insertFunction", json!({"category":"Financial"})); + h.run_steps(4); + h.get_by_role_and_label(egui::accesskit::Role::TextInput, language.tr("Search:")); + h.get_by_role_and_label(egui::accesskit::Role::Button, &format!(" {} ", language.tr("Cancel"))).click(); + h.run_steps(2); + assert!(h.state().dialog.is_none(), "{language:?}: Cancel must close the function dialog"); + } +} + +/// Formula localization must not rewrite upstream Python code or retain it when a literal replaces the cell. +#[test] +fn localized_editor_preserves_python_code_and_literal_fill_replaces_it() { + use gridcraft_engine::core::{CellRef, Value}; + let mut h = harness(); + let code = "x = 1.5\nprint(\"SUM\", x)"; + h.state_mut().run("python.set", json!({"cell":"A1", "code":code})).unwrap(); + h.state_mut().begin_edit(None, true); + let editor = h.state_mut().editor.as_mut().unwrap(); + assert!(editor.python); + assert_eq!(editor.text, code); + let edited = format!("{code}\n# unchanged decimal and comma"); + editor.text = edited.clone(); + assert!(h.state_mut().commit_edit(0, 0, false, false)); + let cell = h.state().session.active().unwrap().wb.active().unwrap().cell(CellRef::new(0, 0)).unwrap(); + assert_eq!(cell.py.as_ref().unwrap().code, edited); + assert!(cell.formula.is_none()); + h.state_mut().run("range.fill", json!({"range":"A1", "input":"1,5", "literal":true})).unwrap(); + let cell = h.state().session.active().unwrap().wb.active().unwrap().cell(CellRef::new(0, 0)).unwrap(); + assert!(cell.py.is_none()); + assert_eq!(cell.value, Value::text("1,5")); +} + +/// Invalid generated sheet names are rejected before a document is created; valid apostrophes remain allowed. +#[test] +fn generated_first_sheet_name_respects_the_sheet_name_contract() { + let mut session = gridcraft_engine::Session::new(); + for prefix in ["'Data", "'", "Bad/Name"] { + assert!(session.execute("file.new", json!({"sheetPrefix":prefix})).is_err()); + assert!(session.documents().is_empty()); + } + session.execute("file.new", json!({"bookPrefix":"'Book", "sheetPrefix":"Data'"})).unwrap(); + let wb = &session.active().unwrap().wb; + let name = &wb.active().unwrap().name; + assert_eq!(name, "Data'1"); + assert!(wb.check_sheet_name(name, Some(0)).is_ok()); +} + +/// Native-language blank filtering matches the visible caption and preserves the engine's blank criterion. +#[test] +fn blank_filter_search_uses_its_localized_label() { + use egui::{Event, Key, Modifiers}; + let mut h = harness(); + h.state_mut().run("range.setValues", json!({"range":"A1", "values":[["Header"],["Apple"],[null],["Banana"]]})).unwrap(); + h.state_mut().run("data.filter", json!({"range":"A1:A4"})).unwrap(); + h.state_mut().run("selection.set", json!({"cell":"A1"})).unwrap(); + for pressed in [true, false] { + h.input_mut().events.push(Event::Key { + key: Key::ArrowDown, + physical_key: Some(Key::ArrowDown), + pressed, + repeat: false, + modifiers: Modifiers::ALT, + }); + } + h.run_steps(4); + let label = Language::Ru.tr("(Blanks)"); + assert_ne!(label, "(Blanks)"); + h.get_by_role_and_label(egui::accesskit::Role::CheckBox, label); + h.input_mut().events.push(Event::Text(label.trim_matches(['(', ')']).into())); + h.run_steps(3); + h.get_by_role_and_label(egui::accesskit::Role::CheckBox, label); + assert!(h.query_by_label("Apple").is_none()); + for pressed in [true, false] { + h.input_mut().events.push(Event::Key { key: Key::Enter, physical_key: Some(Key::Enter), pressed, repeat: false, modifiers: Modifiers::NONE }); + } + h.run_steps(3); + let sh = h.state().session.active().unwrap().wb.active().unwrap(); + assert!(sh.is_row_hidden(1)); + assert!(!sh.is_row_hidden(2)); + assert!(sh.is_row_hidden(3)); +} + +/// Searches typed Russian Boolean/error captions but sends the canonical values to the engine. +#[test] +fn filter_search_localizes_constants_without_translating_text() { + use egui::{Event, Key, Modifiers, accesskit::Role}; + for (caption, visible_row) in [("ИСТИНА", 1), ("#ДЕЛ/0!", 4)] { + let mut h = harness(); + h.state_mut().run("range.setValues", json!({"range":"A1", "values":[["Header"],[true],[false],["FALSE"]], "parse":false})).unwrap(); + h.state_mut().run("cell.set", json!({"cell":"A5", "input":"=1/0"})).unwrap(); + h.state_mut().run("data.filter", json!({"range":"A1:A5"})).unwrap(); + h.state_mut().run("selection.set", json!({"cell":"A1"})).unwrap(); + press(&mut h, Key::ArrowDown, Modifiers::ALT); + h.run_steps(4); + h.get_by_role_and_label(Role::CheckBox, "ЛОЖЬ"); + h.get_by_role_and_label(Role::CheckBox, "FALSE"); + h.get_by_role_and_label(Role::CheckBox, caption); + h.input_mut().events.push(Event::Text(caption.into())); + h.run_steps(3); + h.get_by_role_and_label(Role::CheckBox, caption); + assert!(h.query_by_label("FALSE").is_none()); + press(&mut h, Key::Enter, Modifiers::NONE); + h.run_steps(3); + let sheet = h.state().session.active().unwrap().wb.active().unwrap(); + for row in 1..=4 { + assert_eq!(sheet.is_row_hidden(row), row != visible_row, "{caption}: row {row}"); + } + } +} + +/// Formula view keeps distinct filter choices for formulas with the same Boolean result. +#[test] +fn filter_search_preserves_formula_view_labels() { + use egui::{Event, Key, Modifiers, accesskit::Role}; + let mut h = harness(); + h.state_mut().run("range.setValues", json!({"range":"A1", "values":[["Header"],["=SUM(1)=1"],["=SUM(2)=2"]]})).unwrap(); + h.state_mut().run("formulas.showFormulas", json!({"on":true})).unwrap(); + h.state_mut().run("data.filter", json!({"range":"A1:A3"})).unwrap(); + h.state_mut().run("selection.set", json!({"range":"A1"})).unwrap(); + press(&mut h, Key::ArrowDown, Modifiers::ALT); + h.run_steps(4); + h.get_by_role_and_label(Role::CheckBox, "=СУММ(1)=1"); + h.get_by_role_and_label(Role::CheckBox, "=СУММ(2)=2"); + h.input_mut().events.push(Event::Text("сумм(2)".into())); + h.run_steps(3); + h.get_by_role_and_label(Role::CheckBox, "=СУММ(2)=2"); + press(&mut h, Key::Enter, Modifiers::NONE); + h.run_steps(3); + let sheet = h.state().session.active().unwrap().wb.active().unwrap(); + assert!(sheet.is_row_hidden(1)); + assert!(!sheet.is_row_hidden(2)); +} + +/// Creates, edits and deletes a sheet-scoped name even when the sheet is called Workbook. +#[test] +fn name_manager_distinguishes_a_sheet_named_workbook() { + use egui::{Key, Modifiers, accesskit::Role}; + let mut h = harness(); + h.state_mut().run("sheet.rename", json!({"name":"Workbook"})).unwrap(); + h.state_mut().run("home.insertSheet", json!({"name":"Other"})).unwrap(); + h.state_mut().run("formulas.defineName", json!({"name":"GlobalRate", "refersTo":"=0.2", "scope":"Workbook"})).unwrap(); + h.state_mut().open_dialog("nameManager", json!({})); + h.run_steps(4); + h.get_by_label(Language::Ru.tr("New…")).click(); + h.run_steps(3); + let d = h.state_mut().dialog.as_mut().unwrap(); + d.values.insert("scope".into(), json!({"sheet":"Workbook"})); + d.values.insert("name".into(), json!("LocalRate")); + d.values.insert("refersTo".into(), json!("=0.1")); + h.run_steps(3); + assert_eq!(h.get_by_role_and_label(Role::ComboBox, Language::Ru.tr("Scope:")).value().as_deref(), Some("Workbook (Лист)")); + press(&mut h, Key::Enter, Modifiers::NONE); + h.run_steps(3); + let wb = &h.state().session.active().unwrap().wb; + let local = wb.sheet_index("Workbook").unwrap(); + let other = wb.sheet_index("Other").unwrap(); + assert_eq!(wb.name("LocalRate", local).unwrap().scope, Some(local)); + assert!(wb.name("LocalRate", other).is_none()); + assert_eq!(wb.name("GlobalRate", other).unwrap().scope, None); + + h.get_by_label("LocalRate").click(); + h.run_steps(2); + h.get_by_label(Language::Ru.tr("Edit…")).click(); + h.run_steps(3); + let d = h.state_mut().dialog.as_mut().unwrap(); + assert_eq!(d.values["oldScope"], json!({"sheet":"Workbook"})); + d.values.insert("name".into(), json!("RenamedRate")); + h.run_steps(2); + press(&mut h, Key::Enter, Modifiers::NONE); + h.run_steps(3); + let wb = &h.state().session.active().unwrap().wb; + assert!(wb.name("LocalRate", local).is_none()); + assert_eq!(wb.name("RenamedRate", local).unwrap().scope, Some(local)); + h.get_by_label("RenamedRate").click(); + h.run_steps(2); + h.get_all_by_label(Language::Ru.tr("Delete")).last().unwrap().click(); + h.run_steps(3); + let wb = &h.state().session.active().unwrap().wb; + assert!(wb.name("RenamedRate", local).is_none()); + assert_eq!(wb.name("GlobalRate", other).unwrap().scope, None); +} + +/// The Select Data dialog shares the chart's generated series captions. +#[test] +fn chart_select_data_localizes_generated_series() { + let mut h = harness(); + h.state_mut().run("range.setValues", json!({"range":"A1", "values":[[1,2],[3,4],[5,6]]})).unwrap(); + h.state_mut().run("insert.chart", json!({"range":"A1:B3", "type":"column"})).unwrap(); + let id = h.state().session.active().unwrap().wb.active().unwrap().charts[0].id; + h.state_mut().open_dialog("selectData", json!({"chart":id})); + h.run_steps(3); + assert_eq!(h.state().dialog.as_ref().unwrap().values["names"], json!(["Ряд1", "Ряд2"])); +} + +/// Sends a complete key press to the harness, including any shortcut modifiers. +fn press(h: &mut egui_kittest::Harness<'static, SheetApp>, key: egui::Key, modifiers: egui::Modifiers) { + for pressed in [true, false] { + h.input_mut().events.push(egui::Event::Key { key, physical_key: Some(key), pressed, repeat: false, modifiers }); + } +} + +/// Grid rendering follows the workbook region while interface language changes independently. +#[test] +fn german_number_samples_match_the_grid_and_keep_canonical_output() { + let mut h = harness(); + use_german_region(&mut h); + h.state_mut().run("range.setValues", json!({"range":"A1", "values":[[1234.5],[46096],[1.5]]})).unwrap(); + h.state_mut().run("home.numberFormat", json!({"range":"A1", "code":"0.00"})).unwrap(); + h.state_mut().run("home.numberFormat", json!({"range":"A2", "code":"mmm"})).unwrap(); + h.state_mut().run("selection.set", json!({"range":"A1"})).unwrap(); + for (language, number, month, general) in [("en", "1234,50", "Mär", "1,5"), ("de", "1234,50", "Mär", "1,5"), ("en", "1234,50", "Mär", "1,5")] { + h.state_mut().run("app.language.set", json!({"language":language})).unwrap(); + h.run_steps(3); + let texts: Vec<&str> = h + .output() + .shapes + .iter() + .filter_map(|s| match &s.shape { + egui::Shape::Text(t) => Some(t.galley.job.text.as_str()), + _ => None, + }) + .collect(); + for expected in [number, month, general] { + assert!(texts.contains(&expected), "{language}: the grid did not paint {expected}"); + } + let wb = &h.state().session.active().unwrap().wb; + assert_eq!(gridcraft_engine::display::format(&gridcraft_engine::core::Value::Number(1234.5), "0.00", wb).text, "1234.50"); + h.state_mut().open_dialog("formatCells", json!({})); + h.run_steps(3); + assert!(h.query_by_label(number).is_some(), "{language}: Format Cells sample differs from the grid"); + h.state_mut().dialog = None; + } +} + +/// Programmatic entry does not inherit UI naming defaults; explicit prefixes still take precedence. +#[test] +fn programmatic_generated_names_are_language_independent() { + for language in ["en", "ru", "tr"] { + let mut app = SheetApp::new(gridcraft_engine::Session::new(), Default::default()); + app.run("app.language.set", json!({"language":language})).unwrap(); + app.run("file.new", json!({})).unwrap(); + assert_eq!(app.session.active().unwrap().title, "Book1"); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().name, "Sheet1"); + app.run("home.insertSheet", json!({})).unwrap(); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().name, "Sheet2"); + app.run("insert.table", json!({"range":"A1:B2", "header":false})).unwrap(); + app.run("home.formatAsTable", json!({"range":"D1:E2", "header":false, "style":"TableStyleMedium2"})).unwrap(); + for table in &app.session.active().unwrap().wb.active().unwrap().tables { + assert_eq!(table.columns.iter().map(|c| c.name.as_str()).collect::>(), ["Column1", "Column2"]); + } + app.run_or_alert("file.new", json!({"bookPrefix":"Custom", "sheetPrefix":"Data"})); + assert!(app.message.is_none()); + assert_eq!(app.session.active().unwrap().title, "Custom1"); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().name, "Data1"); + app.run_or_alert("home.insertSheet", json!({"namePrefix":"Tab"})); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().name, "Tab1"); + app.run_or_alert("insert.table", json!({"range":"A1:B2", "header":false, "columnPrefix":"Field"})); + assert!(app.message.is_none()); + assert_eq!(app.session.active().unwrap().wb.active().unwrap().tables[0].columns[0].name, "Field1"); + } +} + +/// Command search follows contextual ribbon-tab names while preserving command-ID lookup. +#[test] +fn command_search_matches_localized_menu_paths() { + let mut h = harness(); + h.state_mut().open_dialog("commandSearch", json!({})); + h.state_mut().dialog.as_mut().unwrap().search = Language::Ru.tr_tab("Insert").into(); + h.run_steps(3); + assert!(h.query_by_label_contains(Language::Ru.tr("Table")).is_some(), "Insert-tab commands must be searchable by Вставка"); + assert!(h.get_all_by_label_contains("Вставка ›").count() > 0, "the displayed path must use the ribbon's noun"); + h.state_mut().dialog.as_mut().unwrap().search = "insert.table".into(); + h.run_steps(3); + assert!(h.query_by_label_contains(Language::Ru.tr("Table")).is_some()); +} + +/// Format Cells samples localize typed constants without translating ordinary cell text. +#[test] +fn format_samples_localize_boolean_and_error_constants() { + for (input, expected) in [("=TRUE()", "ИСТИНА"), ("=FALSE()", "ЛОЖЬ"), ("=1/0", "#ДЕЛ/0!")] { + let mut h = harness(); + h.state_mut().run("cell.set", json!({"cell":"A1", "input":input})).unwrap(); + h.state_mut().open_dialog("formatCells", json!({})); + h.run_steps(3); + assert!(h.query_by_label(expected).is_some(), "{input}: missing sample {expected}"); + } + let mut h = harness(); + h.state_mut().run("range.setValues", json!({"range":"A1", "values":[["TRUE"]], "parse":false})).unwrap(); + h.state_mut().open_dialog("formatCells", json!({})); + h.run_steps(3); + assert!(h.query_by_label("TRUE").is_some()); +} + +/// Localized filter captions retain number formats and canonical filter payloads. +#[test] +fn numeric_filter_search_uses_regional_display_and_canonical_values() { + use egui::{Event, Key, Modifiers, accesskit::Role}; + for (code, value, caption, canonical) in [ + ("General", 1.5, "1,5", "1.5"), + ("0.00", 1.5, "1,50", "1.50"), + ("0.00\" v1.0\"", 1.5, "1,50 v1.0", "1.50 v1.0"), + ("mmm", 46096.0, "Mär", "Mar"), + ] { + let mut h = harness(); + use_german_region(&mut h); + h.state_mut().run("app.language.set", json!({"language":"de"})).unwrap(); + h.state_mut().run("range.setValues", json!({"range":"A1", "values":[["Header"],[value],[2.5]]})).unwrap(); + h.state_mut().run("home.numberFormat", json!({"range":"A2", "code":code})).unwrap(); + h.state_mut().run("data.filter", json!({"range":"A1:A3"})).unwrap(); + let doc = h.state().session.active().unwrap(); + let entries = gridcraft_engine::cmd::data::filter_entries(&doc.wb, doc.wb.active_sheet(), 0); + assert!(entries.iter().any(|entry| entry.label == canonical)); + h.state_mut().run("selection.set", json!({"cell":"A1"})).unwrap(); + press(&mut h, Key::ArrowDown, Modifiers::ALT); + h.run_steps(4); + h.get_by_role_and_label(Role::CheckBox, caption); + h.input_mut().events.push(Event::Text(caption.into())); + h.run_steps(3); + h.get_by_role_and_label(Role::CheckBox, caption); + press(&mut h, Key::Enter, Modifiers::NONE); + h.run_steps(3); + let sheet = h.state().session.active().unwrap().wb.active().unwrap(); + assert!(!sheet.is_row_hidden(1), "{code}: selected numeric value disappeared"); + assert!(sheet.is_row_hidden(2), "{code}: unrelated row remained visible"); + assert_eq!(sheet.value(gridcraft_engine::core::CellRef::new(1, 0)), gridcraft_engine::core::Value::Number(value)); + } +} + +#[test] +fn matching_localized_filter_captions_share_one_selection() { + use egui::{Key, Modifiers, accesskit::Role}; + let mut h = harness(); + use_german_region(&mut h); + h.state_mut().run("range.setValues", json!({"range":"A1","values":[["Header"],[1.5],["1,5"],["other"]],"parse":false})).unwrap(); + h.state_mut().run("data.filter", json!({"range":"A1:A4"})).unwrap(); + h.state_mut().run("selection.set", json!({"cell":"A1"})).unwrap(); + press(&mut h, Key::ArrowDown, Modifiers::ALT); + h.run_steps(4); + assert_eq!(h.get_all_by_label("1,5").count(), 1); + h.get_by_role_and_label(Role::CheckBox, "1,5").click(); + h.run_steps(3); + press(&mut h, Key::Enter, Modifiers::NONE); + h.run_steps(3); + let sheet = h.state().session.active().unwrap().wb.active().unwrap(); + assert!(sheet.is_row_hidden(1)); + assert!(sheet.is_row_hidden(2)); + assert!(!sheet.is_row_hidden(3)); +} + +/// Caption equality and case-insensitive command equality propagate transitively. +#[test] +fn connected_localized_filter_captions_stay_synchronized() { + use egui::{Key, Modifiers, accesskit::Role}; + let mut h = harness(); + h.state_mut().run("range.setValues", json!({"range":"A1","values":[["Header"],[true],["ИСТИНА"],["true"]],"parse":false})).unwrap(); + h.state_mut().run("data.filter", json!({"range":"A1:A4"})).unwrap(); + h.state_mut().run("selection.set", json!({"cell":"A1"})).unwrap(); + press(&mut h, Key::ArrowDown, Modifiers::ALT); + h.run_steps(4); + h.get_by_role_and_label(Role::CheckBox, "ИСТИНА").click(); + h.run_steps(3); + h.get_by_role_and_label(Role::CheckBox, "true").click(); + h.run_steps(3); + h.get_by_role_and_label(Role::CheckBox, "ИСТИНА").click(); + h.run_steps(3); + h.get_by_role_and_label(Role::Button, "Применить").click(); + h.run_steps(3); + let sheet = h.state().session.active().unwrap().wb.active().unwrap(); + for row in 1..=3 { + assert!(sheet.is_row_hidden(row), "row {row}"); + } +} diff --git a/crates/ui-egui/tests/it/status_bar_menu.rs b/crates/ui-egui/tests/it/status_bar_menu.rs index 3d82333d40..2ec43f4a77 100644 --- a/crates/ui-egui/tests/it/status_bar_menu.rs +++ b/crates/ui-egui/tests/it/status_bar_menu.rs @@ -58,3 +58,48 @@ fn right_clicking_the_status_bar_text_opens_the_menu() { assert!(h.query_by_label("Numerical Count").is_some(), "a right-click on {text:?} opens the statistics menu"); } } + +#[test] +fn selection_statistics_use_the_interface_language() { + for (language, labels, menu_labels) in [ + ("en", ["Average: 4", "Count: 3", "Numerical Count: 3", "Minimum: -1", "Maximum: 9", "Sum: 12"], ["Count", "Sum"]), + ("tr", ["Ortalama: 4", "Sayı: 3", "Sayısal Sayı: 3", "En Küçük: -1", "En Büyük: 9", "Toplam: 12"], ["Sayı", "Toplam"]), + ("pt-BR", ["Média: 4", "Contagem: 3", "Numerical Count: 3", "Mínimo: -1", "Máximo: 9", "Soma: 12"], ["Contagem", "Soma"]), + ] { + let mut h = harness(); + h.state_mut().run("app.language.set", json!({"language": language})).unwrap(); + h.state_mut().run("view.statusBar", json!({"numericalCount": true, "minimum": true, "maximum": true})).unwrap(); + h.run_steps(3); + for label in labels { + assert!(h.query_by_label(label).is_some(), "{language}: missing {label}"); + } + right_click(&mut h, pos2(300.0, 787.0)); + for label in menu_labels { + assert!(h.query_by_label(label).is_some(), "{language}: missing menu label {label}"); + } + } +} + +/// Status-bar statistics follow the workbook region, not the interface language. +#[test] +fn selection_statistics_format_values_with_the_workbook_region() { + use gridcraft_ui_egui::i18n::Language; + let mut h = harness(); + let doc = h.state_mut().session.active_mut().unwrap(); + std::sync::Arc::make_mut(&mut doc.wb).region = gridcraft_engine::core::region::lookup("de-DE"); + h.state_mut().run("range.setValues", json!({"range":"A1", "values":[[1000.25],[1001.25]]})).unwrap(); + h.state_mut().run("selection.set", json!({"range":"A1:A2"})).unwrap(); + for (language, code, expected) in [(Language::De, "General", "2.001,5"), (Language::En, "General", "2.001,5"), (Language::De, "0.00", "2001,50")] + { + h.state_mut().run("app.language.set", json!({"language":language.code()})).unwrap(); + h.state_mut().run("home.numberFormat", json!({"range":"A1", "code":code})).unwrap(); + h.run_steps(3); + let label = format!("{}: {expected}", language.tr("Sum")); + assert!(h.query_by_label(&label).is_some(), "missing {label}"); + } + h.state_mut().run("range.setValues", json!({"range":"A1", "values":[[1000],[1001]]})).unwrap(); + h.state_mut().run("home.numberFormat", json!({"range":"A1", "code":"General"})).unwrap(); + h.run_steps(3); + let label = format!("{}: 2.001", Language::De.tr("Sum")); + assert!(h.query_by_label(&label).is_some(), "an integer statistic must not end in a decimal separator"); +} diff --git a/crates/ui-egui/tests/it/translated_form_fields.rs b/crates/ui-egui/tests/it/translated_form_fields.rs index b6464ab306..c82937faa9 100644 --- a/crates/ui-egui/tests/it/translated_form_fields.rs +++ b/crates/ui-egui/tests/it/translated_form_fields.rs @@ -1,6 +1,7 @@ //! Form dialogs draw their field labels and choices in the interface language, as their titles //! and OK/Cancel buttons already were (Page Setup showed "Left margin (in):" in every language). +use egui::accesskit::Role; use egui_kittest::kittest::Queryable as _; use gridcraft_ui_egui::SheetApp; use gridcraft_ui_egui::i18n::Language; @@ -40,3 +41,69 @@ fn notes_with_a_pipe_show_in_full() { assert!(h.query_by_label_contains(url).is_some(), "{language}: the link note lost part of {url}"); } } + +#[test] +fn analysis_overwrite_prompt_is_translated_and_preserves_actions() { + for (language, prompt, replace, cancel) in [ + ("en", "The output range already holds data. Replace it with the report?", "Replace", "Cancel"), + ("tr", "Çıkış aralığında zaten veri var. Raporla değiştirilsin mi?", "Değiştir", "İptal"), + ] { + let mut h = harness(); + h.state_mut().run("app.language.set", json!({"language": language})).unwrap(); + h.state_mut().run("range.setValues", json!({"range": "A1", "values": [[1], [2], [3]]})).unwrap(); + h.state_mut().open_dialog("analysisToolPak", json!({"tool": "descriptive"})); + let d = h.state_mut().dialog.as_mut().unwrap(); + for (key, value) in [("range", json!("A1:A3")), ("outputTo", json!("range")), ("output", json!("C1")), ("askOverwrite", json!(true))] { + d.values.insert(key.into(), value); + } + h.run_steps(3); + assert!(h.query_by_label_contains(prompt).is_some()); + h.get_by_role_and_label(Role::Button, cancel).click(); + h.run_steps(2); + let d = h.state_mut().dialog.as_mut().unwrap(); + assert!(!d.values.contains_key("askOverwrite")); + assert_ne!(d.values.get("overwrite"), Some(&json!(true))); + d.values.insert("askOverwrite".into(), json!(true)); + h.run_steps(2); + h.get_by_role_and_label(Role::Button, replace).click(); + h.run_steps(2); + assert!(h.state().dialog.is_none(), "{language}: Replace still runs the report"); + assert!(h.state().message.is_none()); + } +} + +#[test] +fn select_data_is_translated_without_changing_series_data_or_actions() { + for (language, range, legend, categories, series, remove, keep) in [ + ("en", "Chart data range:", "Legend Entries (Series)", "Horizontal (Category) Axis Labels:", "Series1", "Remove", "Keep"), + ("tr", "Grafik veri aralığı:", "Gösterge Girişleri (Seriler)", "Yatay (Kategori) Eksen Etiketleri:", "Seri1", "Kaldır", "Koru"), + ] { + let mut h = harness(); + h.state_mut().run("app.language.set", json!({"language": language})).unwrap(); + h.state_mut() + .run("range.setValues", json!({"range": "A1", "values": [["Quarter", "North", "South"], ["Q1", 10, 30], ["Q2", 30, 10]]})) + .unwrap(); + h.state_mut().run("selection.set", json!({"range": "A1:C3"})).unwrap(); + let chart = h.state_mut().run("insert.chart", json!({"type": "column"})).unwrap(); + h.state_mut().open_dialog("selectData", json!({"chart": chart["chart"]})); + h.state_mut().dialog.as_mut().unwrap().values.insert("names".into(), json!(["", "Revenue|2026"])); + h.run_steps(3); + for label in [range, legend, categories, series, "Revenue|2026"] { + assert!(h.query_by_label_contains(label).is_some(), "{language}: missing {label}"); + } + h.get_all_by_role_and_label(Role::Button, remove).next().unwrap().click(); + h.run_steps(2); + assert_eq!(h.state().dialog.as_ref().unwrap().values["remove"], json!([0])); + h.get_by_role_and_label(Role::Button, keep).click(); + h.run_steps(2); + assert_eq!(h.state().dialog.as_ref().unwrap().values["remove"], json!([])); + h.get_all_by_role_and_label(Role::Button, remove).next().unwrap().click(); + h.run_steps(2); + let ok = if language == "tr" { " Tamam " } else { " OK " }; + h.get_by_role_and_label(Role::Button, ok).click(); + h.run_steps(2); + assert!(h.state().dialog.is_none()); + assert!(h.state().message.is_none()); + assert_eq!(h.state().session.active().unwrap().wb.active().unwrap().charts[0].series.len(), 1); + } +} diff --git a/crates/ui-egui/tests/page_break_labels.rs b/crates/ui-egui/tests/page_break_labels.rs new file mode 100644 index 0000000000..f18704ad5e --- /dev/null +++ b/crates/ui-egui/tests/page_break_labels.rs @@ -0,0 +1,94 @@ +//! Page Break Preview labels repaint in every interface language with cached pagination. +use egui::vec2; +use gridcraft_engine::Session; +use gridcraft_ui_egui::SheetApp; +use serde_json::json; + +/// Opens a synthetic paginated sheet using the existing Page Break Preview commands. +fn harness() -> egui_kittest::Harness<'static, SheetApp> { + let mut session = Session::new(); + session.new_workbook(); + session.execute("pageLayout.pageSetup", json!({"printArea":"B2:L30","rowBreaks":[12],"colBreaks":["G"]})).unwrap(); + session.execute("view.pageBreakPreview", json!({})).unwrap(); + let mut h = egui_kittest::Harness::builder().with_size(vec2(1400.0, 1100.0)).with_step_dt(1.0 / 60.0).build_ui_state( + |ui, app: &mut SheetApp| { + app.logic(ui.ctx()); + app.ui(ui); + }, + SheetApp::new(session, Default::default()), + ); + h.run_steps(4); + h +} + +/// Page labels repaint in every interface language without changing the cached sheet pagination. +#[test] +fn page_labels_follow_every_interface_language() { + use gridcraft_ui_egui::i18n::Language; + let mut h = harness(); + let translations = [ + (Language::En, "Page 1"), + (Language::Es, "Página 1"), + (Language::Zh, "第 1 页"), + (Language::ZhTw, "第 1 頁"), + (Language::Ja, "1 ページ"), + (Language::Ko, "1 페이지"), + (Language::Ru, "Страница 1"), + (Language::PtBr, "Página 1"), + (Language::De, "Seite 1"), + (Language::Cs, "Stránka 1"), + (Language::Fr, "Page 1"), + (Language::Sr, "Stranica 1"), + (Language::El, "Σελίδα 1"), + (Language::Tr, "Sayfa 1"), + (Language::Pl, "Strona 1"), + (Language::It, "Pagina 1"), + (Language::Uk, "Сторінка 1"), + (Language::Vi, "Trang 1"), + (Language::Nl, "Pagina 1"), + (Language::Ro, "Pagina 1"), + (Language::Da, "Side 1"), + (Language::Sv, "Sida 1"), + (Language::Ka, "გვერდი 1"), + (Language::Lt, "Puslapis 1"), + ]; + assert_eq!(translations.len(), Language::ALL.len()); + for (language, label) in translations { + h.state_mut().ui.language = language; + h.run_steps(4); + assert!( + h.output().shapes.iter().any(|s| matches!(&s.shape,egui::Shape::Text(t) if t.galley.text()==label)), + "{language:?}: {label} must be painted" + ); + } +} + +/// A language command repaints cached page labels on the first frame without a font-order change. +#[test] +fn page_label_repaints_on_language_change_with_cached_pagination() { + let mut h = harness(); + assert!(h.output().shapes.iter().any(|s| matches!(&s.shape, egui::Shape::Text(t) if t.galley.text() == "Page 1"))); + h.state_mut().run("app.language.set", json!({"language":"es"})).unwrap(); + h.run_steps(1); + assert!( + h.output().shapes.iter().any(|s| matches!(&s.shape, egui::Shape::Text(t) if t.galley.text() == "Página 1")), + "the translated label must be painted on the first frame after the language change" + ); +} + +/// Japanese changes the Han font order: repaint cached labels once egui activates the new fonts. +#[test] +fn page_label_repaints_after_japanese_font_change() { + let mut h = harness(); + for (language, label) in [("ja", "1 ページ"), ("en", "Page 1")] { + h.state_mut().run("app.language.set", json!({"language":language})).unwrap(); + h.run_steps(1); + assert!(!h.state().fonts_ready, "font definitions must activate before painting"); + h.run_steps(1); + assert!(h.state().fonts_ready); + assert!( + h.output().shapes.iter().any(|s| matches!(&s.shape, egui::Shape::Text(t) if t.galley.text() == label)), + "{language}: cached page labels must repaint after the font transition" + ); + } +} diff --git a/crates/xlsx/src/drawing.rs b/crates/xlsx/src/drawing.rs index 6ef49f1757..750fc30b0d 100644 --- a/crates/xlsx/src/drawing.rs +++ b/crates/xlsx/src/drawing.rs @@ -195,7 +195,7 @@ pub fn read_drawing(cx: &mut Ctx<'_>, part: &str, sheet: &mut Sheet) -> Result<( } else if uri.contains("chartex") || uri.contains("chartEx") { cx.warn(format!("a histogram, waterfall, treemap… chart without its chart part was skipped ({part}, object {n})")); } else { - cx.warn(format!("an embedded object (SmartArt, OLE…) was skipped ({part}, object {n})")); + cx.warn(format!("an embedded object (diagram, OLE…) was skipped ({part}, object {n})")); } } "sp" | "cxnSp" => { diff --git a/crates/xlsx/src/tests/sheet_names.rs b/crates/xlsx/src/tests/sheet_names.rs index 37a8b90f7c..23602051c3 100644 --- a/crates/xlsx/src/tests/sheet_names.rs +++ b/crates/xlsx/src/tests/sheet_names.rs @@ -22,6 +22,15 @@ fn unrepresentable_sheet_names_are_refused() { assert!(write_xlsx(&book(&["Data", "Other"])).is_ok()); } +#[test] +fn imported_unicode_case_variants_keep_their_exact_sheet_identity() { + let original = book(&["лист1", "ЛИСТ1"]); + let (opened, _) = crate::read_xlsx(&write_xlsx(&original).unwrap()).unwrap(); + assert_eq!(opened.sheet_index("лист1"), Some(0)); + assert_eq!(opened.sheet_index("ЛИСТ1"), Some(1)); + assert_eq!(opened.sheet_index("ЛиСт1"), Some(0)); +} + /// A saved sheet keeps its `sheetId`; a copied or new sheet gets one no other sheet asks for. #[test] fn sheet_ids_survive_a_save() { diff --git a/docs/formula-input.md b/docs/formula-input.md index e07132c8d9..18c4ba43f2 100644 --- a/docs/formula-input.md +++ b/docs/formula-input.md @@ -2,7 +2,11 @@ View → Interface language is the existing, persisted language preference. Choose **Español** for Spanish formula entry and display. On first run the preference follows the system language. -English and the other interface languages currently use the English formula table and separators. +Choose **Русский**, **Polski**, **Français**, **Deutsch**, **Italiano**, **Português (Brasil)**, or **Türkçe** for formula +entry and display in those languages. Other interface languages use the English formula table and +separators. For example, Polish `=SUMA(1,5;2,25)` is stored in XLSX as `SUM(1.5,2.25)`. +French and German use dots between array columns, as in `{1.2;3.4}`. Spanish, Polish, Russian, Italian, +Brazilian Portuguese and Turkish use backslashes between array columns. | Spanish | Canonical English | | --- | --- | @@ -21,9 +25,15 @@ and reference unions, and backslashes between array columns (`{1\2;3\4}`). For e `=SI(VERDADERO;SUMA(1,5;2,25);0)` evaluates to 3.75. English mode retains comma arguments, decimal points and comma array columns; it does not silently translate Spanish aliases. +Spanish structured references also display localized specifiers. For example, the editor +shows `Ventas[[#Datos];[Importe]]` for the stored reference `Ventas[[#Data],[Importe]]`. +Table and column names stay as entered. + The cell editor, formula bar, Show Formulas, autocomplete, the Formula ribbon, Insert Function, and argument hints -use the selected formula language. Common Spanish function help is translated; functions -without a Spanish entry retain their English names/help. General interface labels and errors +use the selected formula language. Spanish help covers the current 515-function catalog; only the 15 +functions the Spanish table renames have a Spanish name, the rest keep their English one, and missing +help falls back to English. +General interface labels and errors fall back to English where Spanish translations are not provided. An edit captures its language when it starts so switching the preference cannot reinterpret unfinished input. @@ -34,5 +44,53 @@ would collide with a name, displayed formulas retain the canonical spelling to p Stored formulas, XLSX import/export, engine commands, control/API calls, CLI evaluation and clipboard exchange retain strict English syntax. This also applies to advanced dialogs such as Name Manager and conditional-format rules. Localization happens at the cell/formula-bar editor -boundary, including filling the selected range with Ctrl+Enter; it does not change the workbook +boundary, including filling the selected range with Ctrl+Enter and preserving unchanged text +on Ctrl+Shift+Enter; it does not change the workbook format or teach the calculation engine ambiguous aliases. + +## Russian + +Russian uses the same decimal comma, semicolon arguments/reference unions and backslash array +columns as Spanish. The 199-name table in `crates/formula/src/input/ru.rs`, adapted from #1850, +includes `СУММ`, `СРЗНАЧ`, `ЕСЛИ`, `ВПР`, `СЧЁТЕСЛИ`, `ПРОСМОТРX` and `ПОИСКПОЗX` (the final +`X` in the last two is Latin). Unlisted functions retain their English names. English function +names are also accepted with Russian separators. Alias lookup ignores case and accepts `е` for +`ё`; that extra equivalence does not apply to workbook names or LET/LAMBDA bindings. + +`=ЕСЛИ(ИСТИНА;СУММ(1,5;2,25);0)` is stored as `IF(TRUE,SUM(1.5,2.25),0)`. +Russian formula literals include `#ДЕЛ/0!`, `#ЗНАЧ!`, `#ССЫЛКА!`, `#ИМЯ?`, `#Н/Д`, +`#ПЕРЕНОС!` and `#ВЫЧИС!`; canonical English errors remain accepted. Error constants and +ИСТИНА/ЛОЖЬ also work as direct cell input. Literal text stays text during an unchanged edit. +The grid, formula bar and editor localize error values; the engine, API and XLSX retain canonical +error values and formula syntax. The internal circular-reference marker remains `#CIRC!`. + +Function descriptions and argument labels for the current 515-function catalog live in +`crates/ui-egui/src/i18n/ru_functions.rs`, keyed by the current English catalog. Signatures are +assembled from the canonical metadata, preserving optional arguments. Missing help falls back +to English. The grid and format previews use the workbook region for numbers and dates. +Localized syntax in advanced dialogs and regional CSV separator policies remain work to do. + +## Adding another language + +Formula syntax is described by `LocaleData` in `crates/formula/src/input.rs`, with each locale's data in `input/.rs`: function aliases, +error spellings, the decimal/list/array-column/array-row separators, optional structured-reference +specifiers, and the alias case-folding +function. Add the locale's data and enum selection there, then connect the interface language +in `Language::formula_locale`. The lexer, parser, printer, completion and value editor consume +the shared methods; they must not gain per-language branches. Alias folding is separate from +`same_name`, which defines workbook and LET/LAMBDA name identity. + +Interface translations remain in `i18n/.rs`. Optional function descriptions and +argument names use the existing English-keyed `_functions.rs` tables. Ribbon tab +names can use `Tab|name`; `Language::tr_tab` falls back to the ordinary label translation. + +Dynamic error matching is shared in `i18n/error_templates.rs`. To translate an existing message +shape, add its template key to the language catalog. A new engine message shape needs one shared +template and a regression test generated through the real command/parser boundary. Placeholders +are substituted once, preserving braces and other text inside user-provided data. Built-in +function names and signatures use that language's existing formula/help tables. Unknown +messages or untranslated templates retain the original text. + +Every new locale should test alias collisions, case rules, defined/LET/LAMBDA names, all four +separators, error literals, Unicode editing, and UI/XLSX round trips. Changes to shared machinery +must keep the existing English and Spanish cases passing too. diff --git a/docs/localization-parity.md b/docs/localization-parity.md index 1de2927ac6..fc25eb6acf 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -1,13 +1,85 @@ # Localization parity -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-10 · **Change:** minor (Ukrainian Chart is Діаграма); previously minor (Diagram and Decorative Text labels, Diagram distinct from Chart); previously minor (CJK fallback baseline alignment); previously minor (Arabic bidi display, editing and cell reading direction; missing translations are listed by `cargo xtask i18n-report` and never fail a check); previously minor (Arabic font fallback; missing translations are listed by `cargo xtask i18n-report` and never fail a check); previously minor (number formats honour the `B1`/`B2` calendar prefixes, checked against Excel; earlier: missing translations are listed by `cargo xtask i18n-report` and never fail a check; Arabic text sorts by its letters, not its vowel marks); previously minor (AutoFit estimates Arabic text width from measured glyph widths); previously minor (missing translations are listed by `cargo xtask i18n-report` and never fail a check; Arabic text sorts by its letters, not its vowel marks) · **Target:** Microsoft Excel (Microsoft 365), Excel for Mac 16.113.4 +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-13 · **Change:** minor (retain localized series names with main's chart cache and refresh cached captions on language switches; validate literal arrays against completed cells and synchronize connected filter choices; earlier: Ukrainian terminology, Diagram and Decorative Text labels, CJK baseline alignment, Arabic bidi and regional formats) · **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, right-to-left sheets and full complex-script support. Part of [target-app-parity.md](target-app-parity.md). **Localization: ~10% ready, 100–165 h** (estimated). -Cell text now uses shared Unicode bidi layout while retaining logical source indexes for editing, copy and XLSX. Format Cells exposes Context, Left to right and Right to left reading direction, independent of sheet geometry. OOXML Context uses the first non-whitespace character. Optional direction preserves absent versus explicit Context in differential styles. The renderer is pinned to a reviewed egui 0.36.2 backport with real-font, editing, accessibility and WASM checks. Physical screen-reader behavior remains unverified. +## Russian update (2026-10-29) + +Russian now extends #676's catalog with the current catalog union and newer main-only keys. +The Insert ribbon tab uses the noun «Вставка» separately from the Insert command «Вставить»; +the Start and Save Changes dialogs look up their visible text at draw time. Missing strings +continue to fall back to English; this is coverage of catalog keys, not every literal in the UI. + +Formula input adapts #1850's 199 aliases to the current parser and help architecture. Unicode +LET/LAMBDA name precedence and iterative handling of long flat expressions are retained. +Russian help for all 515 currently registered functions (479 distinct descriptions and 283 +argument keys) is English-keyed in `i18n/ru_functions.rs`. Original keys are retained, with terminology corrections; +new descriptions translate GridCraft's own catalog. Localized error +literals round-trip at the editor boundary, with canonical storage/API/XLSX syntax. Fixed +messages use `tr_error`; selected dynamic parser/parameter messages preserve captured user data. +The Format Cells editor displays Russian date/time tokens while keeping canonical format +codes in storage. The grid and format previews use the workbook region for number and date rendering. + +## Czech catalog audit (2026-11-05) + +The Czech interface catalog explicitly covers the 2,426 keys in the current audited +inventory, including diagnostic templates, generated names, macro controls, chart and +filter dialogs, printing and update prompts. A regression checks this inventory. +This is catalog coverage; connecting every remaining UI literal is a separate audit. +The 479 function descriptions and 283 argument labels were read against the English +catalog, with corrections to statistical, financial and text-function terminology. +This pass uses direct language review without an external translation service; +native-speaker review remains welcome. Formula aliases and stored XLSX syntax are unchanged. +F.TEST/FTEST help now describes a two-tailed p-value rather than a probability that +variances are equal; its English key and all existing translated help rows change together. + +## Function help coverage + +Twenty languages have descriptions and argument labels for the current +515-function catalog: the English source plus Czech, German, Greek, Spanish, French, Italian, +Japanese, Korean, Dutch, Polish, Brazilian Portuguese, Romanian, Russian, Serbian, Turkish, +Ukrainian, Vietnamese, Simplified Chinese and Traditional Chinese. Danish, Swedish, Georgian +and Lithuanian use English help. Each translated table covers 479 distinct +descriptions and 283 argument keys. Existing Spanish/Russian help and the previously added +translated hints are reviewed alongside the new rows, preserving their keys and correcting mistranslations. Mathematical variables such as `x`, `y` and `n`, and identifiers +such as XML/XPath, intentionally stay recognizable. + +The existing `i18n/_functions.rs` representation is shared by all languages. A single +hint builder combines those labels with canonical metadata and the selected formula syntax; +optional brackets, argument indices and repeated-argument markers keep their structure. +Help strings are not formula aliases: this expansion does not invent function names for +languages without a formula-name table, nor change engine/API/XLSX syntax. Unknown future +catalog strings still fall back to English instead of blocking a new function. + +New non-Russian rows are machine-assisted translation drafts of GridCraft's own English text +(Google Translate), with manual corrections for terminology, rounding direction/ties, +forecast-statistic codes and untranslated rows. A separate agent reviews each translated package +against the English catalog and argument contexts, including existing rows. Existing GridCraft +translations take priority where correct. The Traditional Chinese catalog comes from #3271. +The new rows +need native-speaker review, especially specialized financial/statistical terminology. Automated +coverage and syntax checks establish completeness and structure, not linguistic certification. +Serbian additions use the Latin script of the existing interface catalog. + +Chart rendering supplies translated generated series names through a resolver callback, including +when a name formula or reference evaluates to an empty string. Explicit names remain unchanged; +the default resolver used by files and APIs still generates canonical English names. Blank-filter +search uses the displayed translation while commands retain their canonical blank-value payload. +Generated sheet prefixes follow the existing sheet-name rules, and command metadata documents +the localized book, sheet and table-column prefix parameters. + +## Arabic bidi and cell reading direction (2026-10-27) + +Cell text uses shared Unicode bidi layout while retaining logical source indexes for editing, +copy and XLSX. Format Cells exposes Context, Left to right and Right to left reading direction, +independent of sheet geometry. OOXML Context uses the first non-whitespace character. Optional +direction preserves absent versus explicit Context in differential styles. The renderer is +pinned to a reviewed egui 0.36.2 backport with real-font, editing, accessibility and WASM +checks. Physical screen-reader behavior remains unverified. ## Where we are (measured from source on `main`, after the 2026-10-10 merges) @@ -23,9 +95,9 @@ Cell text now uses shared Unicode bidi layout while retaining logical source ind - **Function help** (the argument hint, autocomplete, Insert Function and the Formulas-tab menus) follows the interface language through per-language tables keyed by the catalog's English text (`i18n/_functions.rs`): descriptions, and argument names from which the - hint is assembled with the formula syntax's function name and separator. Spanish translates - the 10 common functions it had help for (SUM, AVERAGE, IF…); other languages show the English - help. + hint is assembled with the formula syntax's function name and separator. The current 515-function + catalog has help in 20 languages, including English and Traditional Chinese. Of the 24 interface + languages, Danish, Swedish, Georgian and Lithuanian currently use English help. - **A first catalog exists.** `crates/ui-egui/src/i18n.rs` (merged 10-10 in #31, #104, #82; German added 10-11) adds an interface-language preference that defaults to the system language (closes #20) and a View-tab switcher, with English-keyed lookup tables: Simplified Chinese, Korean, @@ -39,17 +111,20 @@ Cell text now uses shared Unicode bidi layout while retaining logical source ind - **About 2,200 user-visible strings** in all (heuristic source scan: ~1,700 UI and command strings plus ~500 function descriptions), so the ribbon-only languages cover **~12%** and Japanese and Portuguese **~43%** (measured count / estimated total). -- **en-US only formulas and formats.** Function names, `,` argument separator, `.` decimal - separator, en-US number and date formats (`crates/numfmt` says "en-US only"). Users ask for - localized function names and `;` separators (#45). German with localized numbers and formulas - is in PR #163 (open). The `B1` (Gregorian) and `B2` (Hijri) calendar prefixes that Arabic - Excel writes at the start of a format section are hidden; under `B2` the year, month number, - day, month names and weekday names (Arabic; `mmm` and `ddd` show the full name) count in the - tabular Hijri calendar (leap years 2, 5, 7, 10, 13, 15, 18, 21, 24, 26 and 29 of each 30-year - cycle). Checked against Excel 16.0 (build 20527, en-US) on every serial from 1 to 2,958,465 - and about 1,700 format/value pairs: a `[$...]` locale or currency tag before `B2` keeps the - date Gregorian; a repeated prefix (`B2B2`) is accepted; any other `B` and digit (`B3`, - `B12`, `B1B2`, `dd B2`, `\B2`), or a prefix before a number format (`B10.00`), is +- **Canonical file/API formulas, localized cell entry.** Files and APIs keep English names, + comma arguments and decimal points. Cell and formula-bar entry support localized aliases and + separators for Spanish, Russian, Polish, French, German, Italian, Brazilian Portuguese and Turkish. + Spanish also localizes structured-reference specifiers. Russian date/time format editing and + German format previews retain canonical storage codes. +- **Calendars in number formats.** The `B1` (Gregorian) and `B2` (Hijri) calendar prefixes that + Arabic Excel writes at the start of a format section are hidden; under `B2` the year, month + number, day and the Arabic month and weekday names (`mmm` and `ddd` show the full name) count + in the tabular Hijri calendar (leap years 2, 5, 7, 10, 13, 15, 18, 21, 24, 26 and 29 of each + 30-year cycle), while month and weekday names of a Gregorian date follow the display + locale's language. Checked against Excel 16.0 (build 20527, en-US) on every serial from 1 to + 2,958,465 and about 1,700 format/value pairs: a `[$...]` locale or currency tag before `B2` + keeps the date Gregorian; a repeated prefix (`B2B2`) is accepted; any other `B` and digit + (`B3`, `B12`, `B1B2`, `dd B2`, `\B2`), or a prefix before a number format (`B10.00`), is rejected (`TEXT` gives `#VALUE!`, a cell shows General); serial 60 shows `#VALUE!` under `B2` for any date or clock part; two-word month names use a no-break space. Differs from Excel: in a `B2` section with a weekday and a month name, Excel prints the weekday for @@ -63,18 +138,17 @@ Cell text now uses shared Unicode bidi layout while retaining logical source ind Noto CJK and WenQuanYi faces can render Chinese without a broad filesystem grant. This does not change the installed-font catalogue or add bundled fonts. System CJK fallback faces and embedded faces tagged with CJK scripts share the Latin baseline in cells, editors and titles - (#1265, #2621); other script, emoji and symbol fallbacks retain their alignment. - Lao falls back to Lao Sangam MN / Lao MN (macOS), - Leelawadee UI / DokChampa (Windows) or Noto Sans Lao / Phetsarath OT (Linux). egui uses harfrust shaping and Unicode bidi layout; script-specific coverage - beyond Arabic still needs verification. **Sheet Right-to-Left** - Leelawadee UI / DokChampa (Windows) or Noto Sans Lao / Phetsarath OT (Linux). Arabic falls back to a system Arabic face, fontconfig's - Arabic choice or craft-fonts' Noto Sans Arabic; fontconfig's choice leads these fallbacks, but a UI font with Arabic of its - own (DejaVu Sans in the Flatpak) still draws interface Arabic (#229). There is no complex-text shaping: Arabic and - Devanagari don't join or reorder, and there is no bidirectional layout. **Sheet Right-to-Left** + (#1265, #2621); other script, emoji and symbol fallbacks retain their alignment. Lao falls back + to Lao Sangam MN / Lao MN (macOS), Leelawadee UI / DokChampa (Windows) or Noto Sans Lao / + Phetsarath OT (Linux). Arabic falls back to a system Arabic face, fontconfig's Arabic choice or + craft-fonts' Noto Sans Arabic; fontconfig's choice leads these fallbacks, but a UI font with + Arabic of its own (DejaVu Sans in the Flatpak) still draws interface Arabic (#229). egui uses + harfrust shaping and Unicode bidi layout, so Arabic joins and runs both ways; coverage of + scripts other than Arabic still needs verification. **Sheet Right-to-Left** (`view.rightToLeft`, Page Layout › Sheet Options, XLSX `rightToLeft`, `.xls` WINDOW2 fRightToLeft) mirrors the grid (#146): column A and the row headers on the right, the vertical scrollbar on the left; hit-testing, - arrow keys, editor, popups and floating objects follow; text follows its cell reading direction inside its box, - and the sheet tabs, horizontal scrollbar and printing/PDF are not mirrored yet. + arrow keys, editor, popups and floating objects follow; text follows its cell reading direction + inside its box, and the sheet tabs, horizontal scrollbar and printing/PDF are not mirrored yet. Text boxes and shapes keep their paragraphs' right-to-left direction (`a:pPr rtl`) through XLSX save, though GridCraft still draws that text left to right. IME input goes through egui/winit and is unverified for Chinese, Japanese and Korean. @@ -88,6 +162,9 @@ Cell text now uses shared Unicode bidi layout while retaining logical source ind UI strings translated are measured counts against the ~2,200 estimate. Estimates to `full` include the rest of the catalog work below (10–20 h, counted once), localized function names, separators, number/date formats, machine translation with agent review, and script work. +The counts were measured on 2026-10-10 and are kept as history; every interface language now has a +catalog (`crates/ui-egui/src/i18n/`), and a string a catalog lacks shows in English +(`cargo xtask i18n-report`). | Language | Code | UI strings translated | Dialogs / tooltips / help | Script support | Native review | Status | Estimate to full | |---|---|---|---|---|---|---|---| @@ -95,22 +172,20 @@ separators, number/date formats, machine translation with agent review, and scri | Simplified Chinese (Mandarin) | zh-Hans | 266 (~12%) | no | CJK system-font fallback (#38); IME unverified; PDF can't export | no | menus only | 8–13 h | | Spanish | es | 0 (0%) | no | Latin: yes | no | none | 6–10 h | | Hindi | hi | 0 (0%) | no | Devanagari: **no shaping** | no | none | 12–18 h | -| Arabic | ar | 0 (0%) | no | shared shaping/bidi; no Arabic UI catalog or mirrored shell; Sheet RTL mirrors the grid (#146) | no | none | 25–35 h | +| Arabic | ar | 0 (0%) | no | shared shaping and bidi layout; no Arabic UI catalog; Sheet Right-to-Left mirrors the grid (#146) | no | none | 25–35 h | | French | fr | 0 (0%) | no | Latin: yes | no | none | 6–10 h | | Portuguese | pt-BR | 943 (~43%) | dialogs and tooltips (dialogs take effect with #669) | Latin: yes | no | menus, File view, dialogs | 2–4 h | | Indonesian | id | 0 (0%) | no | Latin: yes | no | none | 5–8 h | -| Japanese | ja | 268 (~12%) | no | CJK system-font fallback; IME unverified; no furigana display, but phonetic runs (ふりがな) survive an XLSX open + save | no | menus only | 8–12 h | -| Japanese | ja | 943 (~43%) | dialogs and messages | CJK system-font fallback; IME unverified; no furigana display | no | menus, File view, dialogs, messages | 3–5 h | -| Japanese | ja | 268 (~12%) | no | CJK system-font fallback; the theme's East Asian typeface (``) survives open + save (rendering does not use it yet); IME unverified; no furigana display | no | menus only | 8–12 h | +| Japanese | ja | 943 (~43%) | dialogs and messages | CJK system-font fallback; the theme's East Asian typeface (``) survives open + save (rendering does not use it yet); IME unverified; no furigana display, but phonetic runs (ふりがな) survive an XLSX open + save | no | menus, File view, dialogs, messages | 3–5 h | | German | de | 266 (~12%) | no | Latin: yes | no | menus only | 4–8 h | | Italian | it | 971 (~44%) | dialogs, tooltips, pivot pane | Latin: yes | no | menus, File view, dialogs, pivot pane | 3–5 h | | 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 | | Turkish | tr | 382 (~17%) | no | Latin: yes | yes | menus only | 4–8 h | - -Other shipped languages: Russian (ru), German (de), Czech (cs), French (fr) and Turkish (tr), menus only. | 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; Dutch (nl), 518 labels (~24%): ribbon, context menus, File view, dialog titles and the Options page. + +Russian is described in the current update above. Other shipped languages in this historical table +include German (de), Czech (cs), French (fr) and Turkish (tr); the German (de) and Dutch (nl) counts +below predate the current Russian catalog. **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 @@ -122,9 +197,9 @@ language (none so far) and of localized function names. status and error messages, command labels, function descriptions). A string a catalog lacks shows in English and never fails a check: `cargo xtask i18n-report` lists the missing strings per language, and `cargo xtask ci` runs it first. Language switching and the system-language default already exist (#31). -2. Locale-aware formulas: localized function-name tables and separators at the formula-bar - boundary only (files keep en-US invariant names), locale number and date formats, list - separators in CSV. +2. Extend locale-aware formulas through the shared `LocaleData` and per-language modules at the + formula-bar boundary (files keep invariant names). Grid and format previews already use + the workbook region. Regional CSV separator policies and localized advanced-dialog input remain work to do. 3. Text shaping and fallback: a shaping engine for grid, editor and PDF text (Arabic, Devanagari, Thai), system font fallback for CJK, bidirectional runs, right-to-left sheet tabs and printing; embedded subset fonts in PDF. @@ -133,6 +208,23 @@ language (none so far) and of localized function names. | Date | Change | Summary | |---|---|---| +| 2026-11-13 | minor | Merge main's chart cache and WordArt while retaining localized series names; invalidate cached labels on language changes; validate literal-array anchors against the completed range, recalculate dependents of cleared array cells and synchronize filter choices linked by captions or canonical command values; use neutral diagram terminology in localized import warnings | +| 2026-11-10 | minor | Merge current main's CJK fallback baseline alignment updates (#1265, #2621) while retaining localized formula and catalog changes | +| 2026-11-06 | minor | Correct Greek argument and Options labels, Ukrainian contextual/shared labels, and the Danish linked-cell caption; retain the established Danish Paste Link term and context-appropriate permission infinitives | +| 2026-11-06 | minor | Preserve regional output alongside main display-precision helpers; align Czech logical tokens with its formula syntax, correct Chinese help labels and Traditional Chinese terms, and repair the Languages table | +| 2026-11-05 | minor | Complete the Czech 2,427-key interface inventory and review all 762 Czech help rows; correct mathematical and financial terms and synchronize the clarified F-test help key across all 19 translated tables | +| 2026-11-05 | minor | Search translated command paths with contextual ribbon-tab names; localize Boolean/error format samples and numeric filter captions without changing canonical filter values; correct French agreement and replace 100 English fallback entries in the Ukrainian interface | +| 2026-11-05 | minor | Localize the initial desktop workbook after preference loading, enforce Unicode-aware sheet uniqueness, print totals formulas through the shared structured-reference printer and correct Traditional Chinese rate-series help | +| 2026-11-05 | minor | Localize selection statistics, correct Thai date IDs and Traditional Chinese security-price help; keep generated-name defaults local to UI invocation, share prefix validation and document/test name-scope identities without changing legacy deletion semantics | +| 2026-11-05 | minor | Align grid and format previews with the UI number locale while keeping engine output canonical; accept Unicode case variants of General, match observed German Excel March abbreviation, and correct Chinese price/direction and Spanish/Italian gallery labels | +| 2026-11-05 | minor | Fix Polish/Traditional Chinese template lookups, Greek coupon-rate and Chinese analysis/preview terms, native Insert menu context and macOS language declarations; correct localized fractional seconds | +| 2026-11-03 | minor | Keep unchanged text typed on Ctrl+Shift+Enter, distinguish sheet and workbook name scopes, preserve parser tokens, localize typed filter labels and chart data choices, retain 12-hour suggestions, make style previews scrollable and correct help terminology | +| 2026-11-02 | minor | Review translated help by language; correct mathematical/statistical/financial terminology, localize empty resolved chart names and blank-filter search, validate generated sheet prefixes and assert complete hint signatures | +| 2026-11-02 | minor | Complete help for the current 515 functions in all 19 translated interface languages; retain existing wording, separate help from formula syntax and test optional/repeated-argument structure | +| 2026-11-02 | minor | Extend Russian help to 479 distinct descriptions and 283 argument keys; preserve original translations and canonical formula syntax; cover reported XLOOKUP, COLUMN and RADIANS tooltips | +| 2026-11-02 | minor | Ctrl+Enter fills unchanged stored text as a typed literal without adding an apostrophe; fresh localized numeric entry retains normal parsing | +| 2026-10-29 | minor | Russian: refresh #676 catalog, adapt #1850 formula aliases to current help/name handling, localize error literals and selected parameter/parser diagnostics at the UI boundary | +| 2026-11-09 | minor | One row per language and current script status in the Languages table, the 19 translated help tables named consistently, and generated-name prefixes tested against every catalog | | 2026-11-10 | minor | Ukrainian Chart is `Діаграма`, matching [craft-i18n#211](https://github.com/storytold/craft-i18n/pull/211) and distinct from Diagram (`Схема`) | | 2026-11-10 | minor | Diagram and Decorative Text labels in all 18 non-English catalogs; Diagram never repeats the catalog's chart word (German `Schema`, Ukrainian `Схема`, Romanian `Schemă`), see [feature-names.md](feature-names.md) | | 2026-10-31 | minor | System and embedded CJK text fallbacks share the Latin baseline in cells, editors and window titles; other scripts, symbols and emoji keep their alignment | @@ -140,6 +232,8 @@ language (none so far) and of localized function names. | 2026-10-26 | minor | Arabic text renders in cells and the interface: a system Arabic face (Tahoma, Arial or Segoe UI on Windows, Geeza Pro on macOS, Noto Sans or Naskh Arabic on Linux) joins the script fallbacks, fontconfig's Arabic choice, when it has Arabic letters, leads the Arabic fallbacks and draws Arabic wherever the UI or cell font has none, such as the default cell fonts (part of #229; a UI font with Arabic of its own, such as DejaVu Sans in the Flatpak, still draws interface Arabic, left for a follow-up), and craft-fonts' Noto Sans Arabic is a required face allowed on the web. Workbook fonts without Arabic keep every script fallback. Shaping and bidirectional layout remain separate work | | 2026-10-27 | minor | Number formats honour the `B1`/`B2` calendar prefixes: never shown; `B2` renders year, month, day and Arabic month and weekday names in the tabular Hijri calendar (1 Jan 2001 = 6 Shawwal 1421; leap years 2, 5, 7, 10, 13, 15, 18, 21, 24, 26 and 29 of the 30-year cycle, which is what Excel shows). Checked against Excel 16.0 (build 20527, en-US) on every serial and about 1,700 format/value pairs: a locale or currency tag before `B2` keeps the date Gregorian, a misplaced `B` and digit or a prefix before a number format is rejected, serial 60 has no Hijri date, serial 0 shows as serial 1, two-word month names use a no-break space. Not matched: Excel's weekday/month-name mix-ups in one `B2` section and its weekday-only quirks | | 2026-10-27 | minor | AutoFit column width, wrapped-row height and PivotTable column fit estimate Arabic letters at ~0.48 em (measured 0.36–0.53 em shaped, Noto Sans/Naskh Arabic and DejaVu Sans) instead of 1 em, Arabic-Indic digits as wide as ASCII digits, and give vowel marks and direction marks no width; vowelled Arabic no longer fits ~3.5× too wide | +| 2026-10-26 | minor | Shared bidi layout supports Arabic clusters, marks, visual cursor navigation and directional accessibility; cell Context/LTR/RTL is stored separately from sheet RTL and round-trips through XLSX | +| 2026-10-26 | minor | Arabic text renders in cells and the interface: a system Arabic face (Tahoma, Arial or Segoe UI on Windows, Geeza Pro on macOS, Noto Sans or Naskh Arabic on Linux) joins the script fallbacks, fontconfig's Arabic choice, when it has Arabic letters, leads the Arabic fallbacks and draws Arabic wherever the UI or cell font has none, such as the default cell fonts (part of #229; a UI font with Arabic of its own, such as DejaVu Sans in the Flatpak, still draws interface Arabic, left for a follow-up), and craft-fonts' Noto Sans Arabic is a required face allowed on the web. Workbook fonts without Arabic keep every script fallback. Shaping and bidirectional layout remain separate work | | 2026-10-23 | minor | Missing translations are reported, never a failure: `cargo xtask i18n-report` prints, per language, the strings other catalogs translate and it lacks (plus Spanish function help rows keyed by English the function catalog no longer has) and always passes; `cargo xtask ci` runs it first. Coverage and per-language parity tests and tests of one language's exact wording are gone; UI tests take the expected text from the catalog. Duplicate-key, placeholder, context-prefix and line-shape checks stay | | 2026-10-21 | minor | Romanian interface (`ro`, Română): 970 labels covering every key of the other catalogs (`crates/ui-egui/src/i18n/ro.rs`), `ro-*` system locales, the View-tab switcher and `app.language.set`; context keys show no prefix (File › Options test). English formulas and formats; AI-assisted draft pending native-speaker review | | 2026-10-20 | minor | Japanese: furigana (`rPh` phonetic runs and `` in `xl/sharedStrings.xml`) is no longer deleted by an open + save; it is kept on the workbook and written back (a `` without runs is kept too, while duplicate texts with different readings keep only the first, reported on open). Display of the readings is still missing (`crates/xlsx/src/tests/phonetic_tests.rs`) | @@ -147,7 +241,6 @@ language (none so far) and of localized function names. | 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-20 | minor | XLSX: a theme's per-script typefaces (``, Hebr, Jpan…) are kept through open + save, so Arabic Excel's theme fonts for shapes, charts and theme-font cells survive a GridCraft save | | 2026-10-20 | trivial | XLSX: a workbook theme's major/minor East Asian (``) and complex-script (``) typefaces are kept through open + save, so a Japanese workbook keeps its theme's East Asian font; rendering does not resolve them yet (follow-up) | -| 2026-10-19 | minor | Text order (Sort, SORT/SORTBY, `<`/`>`, approximate MATCH/XLOOKUP, `" en cs + da de el es fr it ja + ka ko + lt nl pl pt-BR ro ru sr + sv tr uk vi zh-Hans + zh-Hant CFBundleDisplayName GridCraft diff --git a/xtask/src/stats.rs b/xtask/src/stats.rs index 269649b171..288fb40c14 100644 --- a/xtask/src/stats.rs +++ b/xtask/src/stats.rs @@ -143,7 +143,9 @@ pub fn run(_root: &Path, exact: bool) -> Result<(), String> { #[cfg(test)] mod tests { - use super::{Counts, MAX_SOURCE_BYTES, count_tests, read_source, walk}; + #[cfg(unix)] + use super::{Counts, walk}; + use super::{MAX_SOURCE_BYTES, count_tests, read_source}; /// A new, private directory: `create_dir` fails if the name exists (even as a link), so a /// directory somebody else made in advance is never used. @@ -151,7 +153,10 @@ mod tests { let mut n = 0u32; loop { let dir = std::env::temp_dir().join(format!("xtask-stats-{tag}-{}-{n}", std::process::id())); + #[cfg(unix)] let mut b = std::fs::DirBuilder::new(); + #[cfg(not(unix))] + let b = std::fs::DirBuilder::new(); #[cfg(unix)] std::os::unix::fs::DirBuilderExt::mode(&mut b, 0o700); match b.create(&dir) {