diff --git a/ROADMAP.md b/ROADMAP.md index 0fd8cc2..e61330b 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ # Roadmap -Ribbon feature coverage: **56 of 300 features (18%)** have a command +Ribbon feature coverage: **94 of 316 features (29%)** have a command today ([docs/parity.md](docs/parity.md)). Counting depth (no layouts, 3D, raster or enterprise sharing yet), real parity is lower. diff --git a/crates/engine/src/catalog.rs b/crates/engine/src/catalog.rs index e75dd10..c38e198 100644 --- a/crates/engine/src/catalog.rs +++ b/crates/engine/src/catalog.rs @@ -16,17 +16,17 @@ const fn f(tab: &'static str, group: &'static str, name: &'static str, command: } pub static FEATURES: &[Feature] = &[ - f("Map", "Clipboard", "Paste", None), - f("Map", "Clipboard", "Paste Special", None), - f("Map", "Clipboard", "Cut", None), - f("Map", "Clipboard", "Copy", None), - f("Map", "Clipboard", "Copy Path", None), + f("Map", "Clipboard", "Paste", Some("edit.paste")), + f("Map", "Clipboard", "Paste Special", Some("edit.pasteSpecial")), + f("Map", "Clipboard", "Cut", Some("edit.cut")), + f("Map", "Clipboard", "Copy", Some("edit.copy")), + f("Map", "Clipboard", "Copy Path", Some("layer.copyPath")), f("Map", "Navigate", "Explore", Some("tool.set")), - f("Map", "Navigate", "Topmost Layer", None), - f("Map", "Navigate", "Visible Layers", None), - f("Map", "Navigate", "Selectable Layers", None), - f("Map", "Navigate", "Selected in Contents", None), - f("Map", "Navigate", "No Pop-ups", None), + f("Map", "Navigate", "Topmost Layer", Some("map.popupMode")), + f("Map", "Navigate", "Visible Layers", Some("map.popupMode")), + f("Map", "Navigate", "Selectable Layers", Some("map.popupMode")), + f("Map", "Navigate", "Selected in Contents", Some("map.popupMode")), + f("Map", "Navigate", "No Pop-ups", Some("map.popupMode")), f("Map", "Navigate", "Planar Navigation", None), f("Map", "Navigate", "First-Person Navigation", None), f("Map", "Navigate", "Bookmarks", Some("bookmark.go")), @@ -50,10 +50,10 @@ pub static FEATURES: &[Feature] = &[ f("Map", "Inquiry", "Locate", Some("map.goToXY")), f("Map", "Inquiry", "Infographics", None), f("Map", "Inquiry", "Identify", Some("identify")), - f("Map", "Labeling", "Convert", None), - f("Map", "Labeling", "Lock", None), - f("Map", "Labeling", "Pause", None), - f("Map", "Labeling", "View Unplaced", None), + f("Map", "Labeling", "Convert", Some("labels.convert")), + f("Map", "Labeling", "Lock", Some("labels.lock")), + f("Map", "Labeling", "Pause", Some("labels.pause")), + f("Map", "Labeling", "View Unplaced", Some("labels.viewUnplaced")), f("Map", "Offline", "Download Map", None), f("Map", "Offline", "Sync", None), f("Map", "Offline", "Remove", None), @@ -193,11 +193,11 @@ pub static FEATURES: &[Feature] = &[ f("View", "Navigation", "Navigator", None), f("View", "Navigation", "Camera", None), f("View", "Navigation", "Magnifier", None), - f("Edit", "Clipboard", "Paste", None), - f("Edit", "Clipboard", "Paste Special", None), - f("Edit", "Clipboard", "Cut", None), - f("Edit", "Clipboard", "Copy", None), - f("Edit", "Clipboard", "Copy Path", None), + f("Edit", "Clipboard", "Paste", Some("edit.paste")), + f("Edit", "Clipboard", "Paste Special", Some("edit.pasteSpecial")), + f("Edit", "Clipboard", "Cut", Some("edit.cut")), + f("Edit", "Clipboard", "Copy", Some("edit.copy")), + f("Edit", "Clipboard", "Copy Path", Some("layer.copyPath")), f("Edit", "Manage Edits", "Save", Some("project.save")), f("Edit", "Manage Edits", "Discard", Some("edit.undo")), f("Edit", "Manage Edits", "Topology Options", None), @@ -313,13 +313,13 @@ pub static FEATURES: &[Feature] = &[ f("Raster Layer", "Enhancement", "Gamma", Some("raster.enhance")), f("Raster Layer", "Rotation", "Rotation Type", None), f("Labeling", "Layer", "Label", Some("labels.enable")), - f("Labeling", "Visibility Range", "Maximum Scale", None), - f("Labeling", "Visibility Range", "Minimum Scale", None), - f("Labeling", "Visibility Range", "Clear Limits", None), - f("Labeling", "Visibility Range", "Closest Distance", None), - f("Labeling", "Visibility Range", "Farthest Distance", None), + f("Labeling", "Visibility Range", "Maximum Scale", Some("labels.scaleRange")), + f("Labeling", "Visibility Range", "Minimum Scale", Some("labels.scaleRange")), + f("Labeling", "Visibility Range", "Clear Limits", Some("labels.scaleRange")), + f("Labeling", "Visibility Range", "Closest Distance", Some("labels.distanceRange")), + f("Labeling", "Visibility Range", "Farthest Distance", Some("labels.distanceRange")), f("Labeling", "Text Symbol", "Text Symbol Style", Some("labels.style")), - f("Labeling", "Label Placement", "Label Placement Style", None), + f("Labeling", "Label Placement", "Label Placement Style", Some("labels.placement")), f("Data", "Definition Query", "Layer Definition Query", Some("layer.definitionQuery")), f("Data", "Selection", "All", Some("select.all")), f("Data", "Selection", "Switch", Some("select.switch")), diff --git a/crates/engine/src/cmd/clipboard.rs b/crates/engine/src/cmd/clipboard.rs new file mode 100644 index 0000000..9d6b532 --- /dev/null +++ b/crates/engine/src/cmd/clipboard.rs @@ -0,0 +1,157 @@ +//! Map and Edit › Clipboard: copy, cut and paste features, and copy a layer's data path. +//! +//! Copied features are held by the session (with their schema) and also returned as GeoJSON, which +//! the app puts on the system clipboard; paste takes either. + +use rustgis_data::{Dataset, Feature, FieldType, GeometryType, Value as Attr}; +use serde_json::{Value, json}; + +use super::{need_layer, need_selection, ps}; +use crate::{CmdResult, CommandSpec as C, Session}; + +/// Largest GeoJSON text accepted by paste (64 MiB). +const MAX_TEXT: usize = 64 << 20; + +/// Features on the clipboard, with the schema of the layer they came from. +#[derive(Clone, Debug)] +pub struct Clipboard { + pub data: Dataset, +} + +pub fn commands() -> Vec { + vec![ + C::new("edit.copy", "Copy", "Edit › Clipboard", |s, _| copy(s)).view().key("Mod+C").when(need_selection), + C::new("edit.cut", "Cut", "Edit › Clipboard", cut).key("Mod+X").when(need_selection), + C::new("edit.paste", "Paste", "Edit › Clipboard", paste) + .key("Mod+V") + .when(need_layer) + .params(r#"{"layer"?, "text"?: GeoJSON text (the copied features when omitted)}"#), + C::new("edit.pasteSpecial", "Paste Special", "Edit › Clipboard", paste_special) + .params(r#"{"name"?: string, "text"?: GeoJSON text (the copied features when omitted)}"#), + C::new("layer.copyPath", "Copy Path", "Edit › Clipboard", copy_path).view().when(need_layer).params(r#"{"layer"?}"#), + ] +} + +/// The layer whose selection is copied: the active layer if it has one, else the first layer +/// with selected features. +fn source(s: &Session) -> Option { + let m = s.map(); + s.active_layer + .and_then(|id| m.layer(id)) + .filter(|l| !l.selection.is_empty()) + .or_else(|| m.layers.iter().find(|l| !l.selection.is_empty())) + .map(|l| l.id) +} + +fn copy(s: &mut Session) -> CmdResult { + let id = source(s).ok_or("nothing is selected")?; + let l = s.map().layer(id).ok_or("no such layer")?; + let mut data = Dataset::new(l.name.clone(), l.geometry_type(), l.dataset.fields.clone()); + data.features = l.selection.iter().filter_map(|r| l.dataset.features.get(*r).cloned()).collect(); + let n = data.features.len(); + let text = rustgis_data::io::to_geojson(&data).to_string(); + let layer = l.name.clone(); + s.clipboard = Some(Clipboard { data }); + s.notify(format!("Copied {n} features from {layer}"), false); + Ok(json!({"copied": n, "layer": layer, "text": text})) +} + +fn cut(s: &mut Session, _: &Value) -> CmdResult { + let id = source(s).ok_or("nothing is selected")?; + let out = copy(s)?; + let l = s.map_mut().layer_mut(id).ok_or("no such layer")?; + let mut sel = std::mem::take(&mut l.selection); + sel.sort_unstable(); + sel.dedup(); + for r in sel.into_iter().rev() { + if r < l.dataset.features.len() { + l.dataset.features.remove(r); + } + } + l.touch_geometry(); + Ok(out) +} + +/// The features to paste: GeoJSON text when given, else the clipboard. +fn clip(s: &Session, p: &Value) -> Result { + match ps(p, "text").map(str::trim).filter(|t| !t.is_empty()) { + Some(t) if t.len() > MAX_TEXT => Err("the pasted text is too large".into()), + Some(t) => { + let (ds, _) = + rustgis_data::io::read_geojson(t, "Pasted").map_err(|e| format!("the pasted text isn't GeoJSON features: {e}"))?; + if ds.features.is_empty() { Err("the pasted text has no features".into()) } else { Ok(ds) } + } + None => s.clipboard.as_ref().map(|c| c.data.clone()).ok_or_else(|| "nothing has been copied".to_string()), + } +} + +fn coerce(v: &Attr, ty: FieldType) -> Attr { + match v { + Attr::Null => Attr::Null, + Attr::Text(t) => Attr::parse(t, ty), + other => Attr::parse(&other.to_string(), ty), + } +} + +fn paste(s: &mut Session, p: &Value) -> CmdResult { + let src = clip(s, p)?; + let id = s.layer_id(p)?; + let l = s.map_mut().layer_mut(id).ok_or("no such layer")?; + if l.is_raster() { + return Err("features can't be pasted into a raster layer".into()); + } + let want = l.geometry_type(); + if want != GeometryType::None && src.geometry_type != GeometryType::None && want != src.geometry_type { + return Err(format!( + "{} features can't go in a {} layer; use Paste Special to paste them as a new layer", + src.geometry_type.label(), + want.label() + )); + } + // Fields are matched by name; the rest are left empty. + let map: Vec> = l.dataset.fields.iter().map(|f| src.field_index(&f.name)).collect(); + let mut next = l.dataset.features.iter().map(|f| f.id).max().unwrap_or(0); + let first = l.dataset.features.len(); + for ft in src.features { + if ft.geometry.as_ref().is_some_and(|g| want != GeometryType::None && g.kind() != want) { + continue; + } + next = next.saturating_add(1); + let attrs = l + .dataset + .fields + .iter() + .zip(&map) + .map(|(f, i)| i.and_then(|i| ft.attrs.get(i)).map(|v| coerce(v, f.ty)).unwrap_or(Attr::Null)) + .collect(); + l.dataset.features.push(Feature { id: next, geometry: ft.geometry, attrs }); + } + let n = l.dataset.features.len() - first; + l.touch_geometry(); + l.selection = (first..first + n).collect(); + let name = l.name.clone(); + s.map_mut().layers.iter_mut().filter(|o| o.id != id).for_each(|o| o.selection.clear()); + s.notify(format!("Pasted {n} features into {name}"), false); + Ok(json!({"pasted": n, "layer": id})) +} + +fn paste_special(s: &mut Session, p: &Value) -> CmdResult { + let mut ds = clip(s, p)?; + if let Some(n) = ps(p, "name").map(str::trim).filter(|n| !n.is_empty()) { + ds.name = n.chars().take(200).collect(); + } else { + ds.name = format!("{} (pasted)", ds.name); + } + ds.source = None; + let n = ds.features.len(); + let id = super::layer::add_dataset(s, ds); + Ok(json!({"pasted": n, "layer": id})) +} + +fn copy_path(s: &mut Session, p: &Value) -> CmdResult { + let id = s.layer_id(p)?; + let l = s.map().layer(id).ok_or("no such layer")?; + let path = l.raster.as_ref().and_then(|r| r.path.clone()).or_else(|| l.dataset.source.clone()); + let path = path.ok_or_else(|| format!("{} isn't stored in a file", l.name))?; + Ok(json!({"text": path})) +} diff --git a/crates/engine/src/cmd/labels.rs b/crates/engine/src/cmd/labels.rs new file mode 100644 index 0000000..2b5ae42 --- /dev/null +++ b/crates/engine/src/cmd/labels.rs @@ -0,0 +1,149 @@ +//! Map › Labeling (lock, pause, unplaced labels, convert to annotation) and the Labeling tab's +//! visibility range and placement. + +use rustgis_data::{Dataset, Field, FieldType, Geometry, GeometryType, Value as Attr}; +use rustgis_map::{LabelPlacement, Renderer, Rgba, Symbol}; +use serde_json::{Value, json}; + +use super::layer::with; +use super::{b, f, need_feature_layer, ps}; +use crate::{CmdResult, CommandSpec as C, Session}; + +pub fn commands() -> Vec { + vec![ + C::new("labels.lock", "Lock", "Map › Labeling", |s, p| { + let d = &mut s.map_mut().label_display; + d.locked = b(p, "on").unwrap_or(!d.locked); + Ok(json!({"locked": d.locked})) + }) + .view() + .params(r#"{"on"?: bool}"#), + C::new("labels.pause", "Pause", "Map › Labeling", |s, p| { + let d = &mut s.map_mut().label_display; + d.paused = b(p, "on").unwrap_or(!d.paused); + Ok(json!({"paused": d.paused})) + }) + .view() + .params(r#"{"on"?: bool}"#), + C::new("labels.viewUnplaced", "View Unplaced", "Map › Labeling", |s, p| { + let d = &mut s.map_mut().label_display; + d.show_unplaced = b(p, "on").unwrap_or(!d.show_unplaced); + Ok(json!({"showUnplaced": d.show_unplaced})) + }) + .view() + .params(r#"{"on"?: bool}"#), + C::new("labels.convert", "Convert To Annotation", "Map › Labeling", convert) + .when(need_feature_layer) + .params(r#"{"layer"?, "name"?: string}"#), + C::new("labels.scaleRange", "Label Visibility Range", "Labeling › Visibility Range", scale_range) + .when(need_feature_layer) + .params(r#"{"layer"?, "min"?: scale|null (out beyond), "max"?: scale|null (in beyond), "clear"?: bool}"#), + C::new("labels.distanceRange", "Label Distance Range", "Labeling › Visibility Range", distance_range) + .when(need_feature_layer) + .params(r#"{"layer"?, "closest"?: metres|null, "farthest"?: metres|null, "clear"?: bool}"#), + C::new("labels.placement", "Label Placement", "Labeling › Label Placement", |s, p| { + let code = ps(p, "position").ok_or("position is required")?; + let pos = LabelPlacement::from_code(code).ok_or_else(|| format!("unknown placement '{code}'"))?; + with(s, p, |l| l.labels.placement = pos) + }) + .when(need_feature_layer) + .params( + r#"{"layer"?, "position": "auto"|"center"|"above"|"below"|"left"|"right"|"aboveRight"|"aboveLeft"|"belowRight"|"belowLeft"}"#, + ), + ] +} + +/// A limit parameter: `Some(None)` clears it, `Some(Some(v))` sets it, `None` leaves it. +fn limit(p: &Value, k: &str) -> Result>, String> { + match p.get(k) { + None => Ok(None), + Some(Value::Null) => Ok(Some(None)), + Some(Value::String(t)) if t.trim().is_empty() => Ok(Some(None)), + Some(_) => match f(p, k) { + Some(v) if v > 0.0 => Ok(Some(Some(v.min(1e12)))), + Some(v) if v.abs() < f64::EPSILON => Ok(Some(None)), + _ => Err(format!("{k} must be a positive number")), + }, + } +} + +fn scale_range(s: &mut Session, p: &Value) -> CmdResult { + let clear = b(p, "clear").unwrap_or(false); + let (min, max) = (limit(p, "min")?, limit(p, "max")?); + with(s, p, |l| { + if clear { + l.labels.min_scale = None; + l.labels.max_scale = None; + l.labels.closest = None; + l.labels.farthest = None; + } + if let Some(v) = min { + l.labels.min_scale = v; + } + if let Some(v) = max { + l.labels.max_scale = v; + } + }) +} + +fn distance_range(s: &mut Session, p: &Value) -> CmdResult { + let clear = b(p, "clear").unwrap_or(false); + let (closest, farthest) = (limit(p, "closest")?, limit(p, "farthest")?); + with(s, p, |l| { + if clear { + l.labels.closest = None; + l.labels.farthest = None; + } + if let Some(v) = closest { + l.labels.closest = v; + } + if let Some(v) = farthest { + l.labels.farthest = v; + } + }) +} + +/// Converts a layer's labels into an annotation layer: one point per label, at the label point, +/// carrying the label text and drawn with the same text symbol. The layer's own labels turn off. +fn convert(s: &mut Session, p: &Value) -> CmdResult { + let id = s.layer_id(p)?; + let l = s.map().layer(id).ok_or("no such layer")?; + let fi = l.dataset.field_index(&l.labels.field).ok_or("the layer has no label field")?; + let rows = l.visible_rows(); + let mut ds = Dataset::new( + ps(p, "name").map(str::trim).filter(|n| !n.is_empty()).map(String::from).unwrap_or_else(|| format!("{} Annotation", l.name)), + GeometryType::Point, + vec![Field::new("TEXT", FieldType::Text)], + ); + for (row, ft) in l.dataset.features.iter().enumerate() { + let v = l.dataset.value(row, fi); + if rows.get(row) != Some(&true) || v.is_null() { + continue; + } + if let Some(c) = ft.geometry.as_ref().and_then(Geometry::label_point) { + ds.push(Some(Geometry::Point(c)), vec![Attr::Text(v.to_string())]); + } + } + if ds.features.is_empty() { + return Err("the layer has no labels to convert".into()); + } + let n = ds.features.len(); + let mut labels = l.labels.clone(); + labels.enabled = true; + labels.field = "TEXT".into(); + labels.placement = LabelPlacement::Center; + let (min_scale, max_scale) = (l.min_scale, l.max_scale); + if let Some(src) = s.map_mut().layer_mut(id) { + src.labels.enabled = false; + } + let new_id = super::layer::add_dataset(s, ds); + if let Some(a) = s.map_mut().layer_mut(new_id) { + // The annotation is all text: the points themselves are invisible. + let clear = Rgba::new(0, 0, 0, 0); + a.renderer = Renderer::Single(Symbol { fill: clear, stroke: clear, stroke_width: 0.0, size: 0.0, marker: Default::default() }); + a.labels = labels; + a.min_scale = min_scale; + a.max_scale = max_scale; + } + Ok(json!({"layer": new_id, "annotations": n})) +} diff --git a/crates/engine/src/cmd/layer.rs b/crates/engine/src/cmd/layer.rs index 098e964..1b3f82a 100644 --- a/crates/engine/src/cmd/layer.rs +++ b/crates/engine/src/cmd/layer.rs @@ -221,7 +221,7 @@ fn s_req<'a>(p: &'a Value, k: &str) -> Result<&'a str, String> { } /// Applies `f` to the layer named by `p` (default: active layer). -fn with(s: &mut Session, p: &Value, f: impl FnOnce(&mut rustgis_map::Layer)) -> CmdResult { +pub(crate) fn with(s: &mut Session, p: &Value, f: impl FnOnce(&mut rustgis_map::Layer)) -> CmdResult { let id = s.layer_id(p)?; let l = s.map_mut().layer_mut(id).ok_or("no such layer")?; f(l); diff --git a/crates/engine/src/cmd/mod.rs b/crates/engine/src/cmd/mod.rs index f8b3dff..9eef582 100644 --- a/crates/engine/src/cmd/mod.rs +++ b/crates/engine/src/cmd/mod.rs @@ -1,7 +1,9 @@ //! Every command, grouped by ribbon tab. +pub mod clipboard; pub mod edit; pub mod gp; +pub mod labels; pub mod layer; pub mod navigate; pub mod project; @@ -21,6 +23,8 @@ pub fn all() -> Vec { v.extend(raster::commands()); v.extend(select::commands()); v.extend(edit::commands()); + v.extend(clipboard::commands()); + v.extend(labels::commands()); v.extend(gp::commands()); v.extend(share::commands()); v diff --git a/crates/engine/src/cmd/select.rs b/crates/engine/src/cmd/select.rs index e80e129..80f1e34 100644 --- a/crates/engine/src/cmd/select.rs +++ b/crates/engine/src/cmd/select.rs @@ -1,6 +1,7 @@ //! Map › Selection. use rustgis_geom::{Coord, Extent}; +use rustgis_map::PopupMode; use serde_json::{Value, json}; use super::{f, need_layer, need_layers, need_selection, ps}; @@ -71,7 +72,11 @@ pub fn commands() -> Vec { Ok(json!({"layer": nid})) }) .when(need_selection), - C::new("identify", "Identify", "Map › Inquiry", identify).view().params(r#"{"lon", "lat", "tolerancePx"?}"#), + C::new("identify", "Identify", "Map › Inquiry", identify).view().params( + r#"{"lon", "lat", "tolerancePx"?, "mode"?: "topmost"|"visible"|"selectable"|"selectedInContents"|"none" (the map's pop-up mode when omitted)}"#, + ), + C::new("map.popupMode", "Pop-up Mode", "Map › Navigate", popup_mode) + .params(r#"{"mode": "topmost"|"visible"|"selectable"|"selectedInContents"|"none"}"#), ] } @@ -184,15 +189,57 @@ fn at_point(s: &mut Session, p: &Value) -> CmdResult { } fn identify(s: &mut Session, p: &Value) -> CmdResult { - let Some((id, row)) = hit(s, p)? else { + let mode = match ps(p, "mode") { + Some(m) => PopupMode::from_code(m).ok_or_else(|| format!("unknown pop-up mode '{m}'"))?, + None => s.map().popup_mode, + }; + if mode == PopupMode::None { + return Ok(Value::Null); + } + let lon = f(p, "lon").ok_or("lon is required")?; + let lat = f(p, "lat").ok_or("lat is required")?; + let tol = f(p, "tolerancePx").unwrap_or(4.0).clamp(0.0, 50.0) * s.map().camera.res; + let scale = s.scale(); + let hits = match s.map().to_map(Coord::new(lon, lat)) { + Some(pt) => s.map_mut().hits_at(pt, tol, scale), + None => Vec::new(), + }; + let active = s.active_layer; + let map = s.map(); + let keep = |id: u32| match mode { + PopupMode::Selectable => map.layer(id).is_some_and(|l| l.selectable), + PopupMode::SelectedInContents => Some(id) == active, + _ => true, + }; + let hits: Vec<(u32, usize)> = hits.into_iter().filter(|(id, _)| keep(*id)).collect(); + let take = if mode == PopupMode::Visible { hits.len() } else { 1 }; + let results: Vec = hits.iter().take(take).filter_map(|(id, row)| feature_json(map, *id, *row)).collect(); + let Some(first) = results.first().cloned() else { // No feature: report the pixel of the topmost raster instead. - let (lon, lat) = (f(p, "lon").unwrap_or(f64::NAN), f(p, "lat").unwrap_or(f64::NAN)); + if mode == PopupMode::SelectedInContents && active.and_then(|id| map.layer(id)).is_some_and(|l| !l.is_raster()) { + return Ok(Value::Null); + } return Ok(super::raster::identify(s, lon, lat).unwrap_or(Value::Null)); }; - let l = s.map().layer(id).ok_or("no layer")?; + let mut out = first; + if let Value::Object(o) = &mut out { + o.insert("results".into(), Value::Array(results)); + } + Ok(out) +} + +fn popup_mode(s: &mut Session, p: &Value) -> CmdResult { + let m = ps(p, "mode").ok_or("mode is required")?; + let mode = PopupMode::from_code(m).ok_or_else(|| format!("unknown pop-up mode '{m}'"))?; + s.map_mut().popup_mode = mode; + Ok(json!({"mode": mode.code()})) +} + +fn feature_json(map: &rustgis_map::Map, id: u32, row: usize) -> Option { + let l = map.layer(id)?; let mut attrs = serde_json::Map::new(); for (i, fd) in l.dataset.fields.iter().enumerate() { attrs.insert(fd.name.clone(), json!(l.dataset.value(row, i).to_string())); } - Ok(json!({"layer": l.name, "layerId": id, "row": row, "attributes": attrs})) + Some(json!({"layer": l.name, "layerId": id, "row": row, "attributes": attrs})) } diff --git a/crates/engine/src/lib.rs b/crates/engine/src/lib.rs index 4dd3d75..47aab35 100644 --- a/crates/engine/src/lib.rs +++ b/crates/engine/src/lib.rs @@ -173,6 +173,8 @@ pub struct Session { pub notices: Vec, /// Layer whose attribute table is open. pub table_layer: Option, + /// Copied features (Edit › Clipboard). + pub clipboard: Option, undo: Vec<(Project, &'static str)>, redo: Vec<(Project, &'static str)>, back: Vec, @@ -215,6 +217,7 @@ impl Session { view_size: (1200.0, 720.0), notices: Vec::new(), table_layer: None, + clipboard: None, undo: Vec::new(), redo: Vec::new(), back: Vec::new(), diff --git a/crates/engine/src/tests.rs b/crates/engine/src/tests.rs index d9e23b4..22b7f17 100644 --- a/crates/engine/src/tests.rs +++ b/crates/engine/src/tests.rs @@ -144,7 +144,7 @@ fn catalog_ids_exist() { let (done, total) = crate::catalog::coverage(); assert!(total > 250); // The floor only rises. - assert!(done >= 69, "coverage fell to {done}"); + assert!(done >= 94, "coverage fell to {done}"); } #[test] @@ -446,3 +446,108 @@ fn geolibre_runs_can_finish_asynchronously() { s.run("project.new", &Value::Null).unwrap(); assert!(external_complete(&mut s, run.id, Ok((vec![], vec![]))).unwrap_err().contains("project was closed")); } + +#[test] +fn clipboard_copies_cuts_and_pastes_features() { + let mut s = world(); + assert!(s.run("edit.copy", &Value::Null).is_err(), "nothing selected"); + s.run("select.byAttributes", &json!({"layer": "Cities", "where": "name = 'Paris'"})).unwrap(); + let r = s.run("edit.copy", &Value::Null).unwrap(); + assert_eq!(r["copied"], 1); + let text = r["text"].as_str().unwrap().to_string(); + assert!(text.contains("Paris")); + // Into the same layer, then as a new layer, then from GeoJSON text. + let n = s.map().layer_by_name("Cities").unwrap().dataset.features.len(); + s.run("edit.paste", &json!({"layer": "Cities"})).unwrap(); + assert_eq!(s.map().layer_by_name("Cities").unwrap().dataset.features.len(), n + 1); + assert!(s.run("edit.paste", &json!({"layer": "Countries"})).is_err(), "points don't go in polygons"); + let r = s.run("edit.pasteSpecial", &json!({"name": "Copied"})).unwrap(); + assert_eq!(r["pasted"], 1); + assert_eq!(s.map().layer_by_name("Copied").unwrap().dataset.features.len(), 1); + s.run("edit.pasteSpecial", &json!({"text": text, "name": "FromText"})).unwrap(); + assert!(s.map().layer_by_name("FromText").is_some()); + assert!(s.run("edit.paste", &json!({"layer": "Cities", "text": "not json"})).is_err()); + // Cut removes the features. + s.run("select.byAttributes", &json!({"layer": "Cities", "where": "name = 'Paris'"})).unwrap(); + let cut = s.run("edit.cut", &Value::Null).unwrap(); + assert_eq!(cut["copied"], 2); + assert_eq!(s.map().layer_by_name("Cities").unwrap().dataset.features.len(), n - 1); + s.run("edit.undo", &Value::Null).unwrap(); + assert_eq!(s.map().layer_by_name("Cities").unwrap().dataset.features.len(), n + 1); + // The sample layers live in the project, not in files. + assert!(s.run("layer.copyPath", &json!({"layer": "Cities"})).is_err()); +} + +#[test] +fn popup_modes_choose_what_identify_reports() { + let mut s = world(); + let at = json!({"lon": 2.35, "lat": 48.85, "tolerancePx": 5}); + let top = s.run("identify", &at).unwrap(); + assert_eq!(top["layer"], "Cities"); + s.run("map.popupMode", &json!({"mode": "visible"})).unwrap(); + let all = s.run("identify", &at).unwrap(); + let layers: Vec<&str> = all["results"].as_array().unwrap().iter().map(|r| r["layer"].as_str().unwrap()).collect(); + assert_eq!(layers, ["Cities", "Countries"]); + s.run("map.popupMode", &json!({"mode": "selectedInContents"})).unwrap(); + s.run("layer.select", &json!({"layer": "Countries"})).unwrap(); + assert_eq!(s.run("identify", &at).unwrap()["layer"], "Countries"); + s.run("map.popupMode", &json!({"mode": "none"})).unwrap(); + assert!(s.run("identify", &at).unwrap().is_null()); + assert!(s.run("map.popupMode", &json!({"mode": "bogus"})).is_err()); + // The mode is saved with the project. + let text = serde_json::to_string(&s.project).unwrap(); + assert!(text.contains("\"popup_mode\":\"None\"")); +} + +#[test] +fn label_range_placement_lock_and_convert() { + use crate::render::View; + let mut s = world(); + s.run("labels.enable", &json!({"layer": "Countries", "on": true})).unwrap(); + s.run("map.goToXY", &json!({"lon": 10.0, "lat": 50.0, "scale": 20_000_000})).unwrap(); + let view = |s: &Session| View { width: 800.0, height: 600.0, pixels_per_point: 1.0, camera: s.map().camera, dark: false }; + let count = |s: &mut Session| { + let v = view(s); + crate::render::render(s.map_mut(), &v).unwrap().labels.len() + }; + let placed = count(&mut s); + assert!(placed > 5); + // Out beyond 1:5,000,000: no labels at 1:20,000,000. + s.run("labels.scaleRange", &json!({"layer": "Countries", "min": 5_000_000})).unwrap(); + let n = count(&mut s); + assert!(n < placed, "{n} < {placed}"); + s.run("labels.scaleRange", &json!({"layer": "Countries", "clear": true})).unwrap(); + assert_eq!(count(&mut s), placed); + s.run("labels.distanceRange", &json!({"layer": "Countries", "farthest": 1000})).unwrap(); + assert!(count(&mut s) < placed); + s.run("labels.distanceRange", &json!({"layer": "Countries", "farthest": null})).unwrap(); + assert!(s.run("labels.scaleRange", &json!({"layer": "Countries", "min": -4})).is_err()); + // Pause hides every label; unplaced labels are reported when asked for. + s.run("labels.pause", &json!({"on": true})).unwrap(); + assert_eq!(count(&mut s), 0); + s.run("labels.pause", &json!({"on": false})).unwrap(); + s.run("labels.viewUnplaced", &json!({"on": true})).unwrap(); + let v = view(&s); + let r = crate::render::render(s.map_mut(), &v).unwrap(); + assert!(!r.unplaced.is_empty() && r.unplaced.iter().all(|l| l.color == crate::render::UNPLACED)); + s.run("labels.viewUnplaced", &json!({"on": false})).unwrap(); + // Placement moves labels. + s.run("labels.placement", &json!({"layer": "Cities", "position": "right"})).unwrap(); + assert_eq!(s.map().layer_by_name("Cities").unwrap().labels.placement, crate::map::LabelPlacement::Right); + assert!(s.run("labels.placement", &json!({"position": "sideways"})).is_err()); + // Lock keeps the labelled set as the map moves. + s.run("labels.lock", &json!({"on": true})).unwrap(); + let locked = count(&mut s); + assert!(s.map().label_lock.is_some()); + s.run("map.zoomOut", &Value::Null).unwrap(); + assert!(count(&mut s) <= locked); + s.run("labels.lock", &json!({"on": false})).unwrap(); + count(&mut s); + assert!(s.map().label_lock.is_none()); + // Convert makes an annotation layer and turns the source's labels off. + let r = s.run("labels.convert", &json!({"layer": "Countries"})).unwrap(); + assert!(r["annotations"].as_u64().unwrap() > 100); + let a = s.map().layer_by_name("Countries Annotation").unwrap(); + assert!(a.labels.enabled && a.labels.field == "TEXT"); + assert!(!s.map().layer_by_name("Countries").unwrap().labels.enabled); +} diff --git a/crates/map/src/lib.rs b/crates/map/src/lib.rs index 93c8f63..ca1b7b4 100644 --- a/crates/map/src/lib.rs +++ b/crates/map/src/lib.rs @@ -13,7 +13,7 @@ pub use camera::Camera; pub use color::{Ramp, Rgba}; pub use globe::{Globe, Projection}; pub use raster::{RasterLayer, RasterRenderer, RasterStyle, Resampling, Stretch}; -pub use symbology::{ClassMethod, Labeling, Marker, Renderer, Symbol}; +pub use symbology::{ClassMethod, LabelPlacement, Labeling, Marker, Renderer, Symbol}; use rustgis_data::{Dataset, Geometry, GeometryType}; use rustgis_geom::{Coord, Extent}; @@ -250,10 +250,76 @@ pub struct Map { /// Flat map or 3D globe. #[serde(default)] pub projection: Projection, + /// Which layers a click identifies. + #[serde(default)] + pub popup_mode: PopupMode, + /// Map-wide label display switches. + #[serde(default)] + pub label_display: LabelDisplay, + /// The features labelled when labels were locked, as (layer id, row): only they are labelled + /// while the lock holds, wherever the map moves. Filled by the renderer. + #[serde(skip)] + pub label_lock: Option>, #[serde(default)] next_layer_id: u32, } +/// Which layers a click in the map identifies. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub enum PopupMode { + /// The topmost feature under the pointer. + #[default] + Topmost, + /// Every visible layer's feature under the pointer. + Visible, + /// The topmost feature of a selectable layer. + Selectable, + /// Only the layer selected in the Contents pane. + SelectedInContents, + /// No pop-ups. + None, +} + +impl PopupMode { + pub const ALL: [PopupMode; 5] = + [PopupMode::Topmost, PopupMode::Visible, PopupMode::Selectable, PopupMode::SelectedInContents, PopupMode::None]; + pub fn code(self) -> &'static str { + match self { + PopupMode::Topmost => "topmost", + PopupMode::Visible => "visible", + PopupMode::Selectable => "selectable", + PopupMode::SelectedInContents => "selectedInContents", + PopupMode::None => "none", + } + } + pub fn label(self) -> &'static str { + match self { + PopupMode::Topmost => "Topmost Layer", + PopupMode::Visible => "Visible Layers", + PopupMode::Selectable => "Selectable Layers", + PopupMode::SelectedInContents => "Selected in Contents", + PopupMode::None => "No Pop-ups", + } + } + pub fn from_code(s: &str) -> Option { + PopupMode::ALL.into_iter().find(|m| m.code().eq_ignore_ascii_case(s.trim())) + } +} + +/// Map-wide label switches. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub struct LabelDisplay { + /// No labels are drawn (faster navigation). + #[serde(default)] + pub paused: bool, + /// The labelled features stay fixed as the map moves. + #[serde(default)] + pub locked: bool, + /// Labels that didn't fit are drawn too, in red. + #[serde(default)] + pub show_unplaced: bool, +} + impl Map { pub fn new(name: impl Into) -> Self { Map { @@ -264,6 +330,9 @@ impl Map { bookmarks: Vec::new(), graticule: true, projection: Projection::WebMercator, + popup_mode: PopupMode::Topmost, + label_display: LabelDisplay::default(), + label_lock: None, next_layer_id: 1, } } @@ -445,6 +514,29 @@ impl Map { None } + /// The topmost feature under a point in every visible layer, top layer first. + pub fn hits_at(&mut self, p: Coord, tol: f64, scale: f64) -> Vec<(u32, usize)> { + let (flat, key) = (self.flat(), self.projection.code()); + let mut out = Vec::new(); + for l in &mut self.layers { + if !l.visible || !l.in_scale_range(scale) { + continue; + } + let rows = l.visible_rows(); + let id = l.id; + let proj = l.projected_in(&flat, &key); + if let Some(row) = proj + .iter() + .enumerate() + .rev() + .find_map(|(row, g)| (rows.get(row) == Some(&true) && g.as_ref().is_some_and(|g| g.hit(p, tol))).then_some(row)) + { + out.push((id, row)); + } + } + out + } + /// Rows of each selectable, visible layer inside a rectangle in the camera's coordinates. pub fn hits_in(&mut self, e: &Extent, scale: f64) -> Vec<(u32, Vec)> { let (flat, key) = (self.flat(), self.projection.code()); diff --git a/crates/map/src/symbology.rs b/crates/map/src/symbology.rs index 4f552f7..ecc1c19 100644 --- a/crates/map/src/symbology.rs +++ b/crates/map/src/symbology.rs @@ -414,9 +414,113 @@ pub struct Labeling { pub color: Rgba, pub halo: bool, pub bold: bool, + /// Labels draw only when zoomed in beyond 1:`min_scale`, if set. + #[serde(default)] + pub min_scale: Option, + /// Labels draw only when zoomed out beyond 1:`max_scale`, if set. + #[serde(default)] + pub max_scale: Option, + /// Labels draw only when the viewer is at least this far away (metres), if set. + #[serde(default)] + pub closest: Option, + /// Labels draw only when the viewer is at most this far away (metres), if set. + #[serde(default)] + pub farthest: Option, + /// Where a label sits relative to its feature. + #[serde(default)] + pub placement: LabelPlacement, +} + +/// Where labels sit relative to their feature's label point. +#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)] +pub enum LabelPlacement { + /// Above points, centred on lines and polygons. + #[default] + Auto, + Center, + Above, + Below, + Left, + Right, + AboveRight, + AboveLeft, + BelowRight, + BelowLeft, +} + +impl LabelPlacement { + pub const ALL: [LabelPlacement; 10] = [ + LabelPlacement::Auto, + LabelPlacement::Center, + LabelPlacement::Above, + LabelPlacement::Below, + LabelPlacement::Left, + LabelPlacement::Right, + LabelPlacement::AboveRight, + LabelPlacement::AboveLeft, + LabelPlacement::BelowRight, + LabelPlacement::BelowLeft, + ]; + pub fn code(self) -> &'static str { + match self { + LabelPlacement::Auto => "auto", + LabelPlacement::Center => "center", + LabelPlacement::Above => "above", + LabelPlacement::Below => "below", + LabelPlacement::Left => "left", + LabelPlacement::Right => "right", + LabelPlacement::AboveRight => "aboveRight", + LabelPlacement::AboveLeft => "aboveLeft", + LabelPlacement::BelowRight => "belowRight", + LabelPlacement::BelowLeft => "belowLeft", + } + } + pub fn label(self) -> &'static str { + match self { + LabelPlacement::Auto => "Automatic", + LabelPlacement::Center => "Centered", + LabelPlacement::Above => "Above", + LabelPlacement::Below => "Below", + LabelPlacement::Left => "Left", + LabelPlacement::Right => "Right", + LabelPlacement::AboveRight => "Above Right", + LabelPlacement::AboveLeft => "Above Left", + LabelPlacement::BelowRight => "Below Right", + LabelPlacement::BelowLeft => "Below Left", + } + } + pub fn from_code(s: &str) -> Option { + LabelPlacement::ALL.into_iter().find(|p| p.code().eq_ignore_ascii_case(s.trim())) + } + /// The label centre's offset from the label point, in points, for a label `w` wide and `h` + /// tall next to a marker of size `marker` (0 for lines and polygons). + pub fn offset(self, w: f32, h: f32, marker: f32, is_point: bool) -> (f32, f32) { + let gap = marker / 2.0 + 2.0; + let (dx, dy) = (w / 2.0 + gap, h / 2.0 + gap); + match self { + LabelPlacement::Auto if is_point => (0.0, -(marker / 2.0 + h * 0.6)), + LabelPlacement::Auto | LabelPlacement::Center => (0.0, 0.0), + LabelPlacement::Above => (0.0, -dy), + LabelPlacement::Below => (0.0, dy), + LabelPlacement::Left => (-dx, 0.0), + LabelPlacement::Right => (dx, 0.0), + LabelPlacement::AboveRight => (dx, -dy), + LabelPlacement::AboveLeft => (-dx, -dy), + LabelPlacement::BelowRight => (dx, dy), + LabelPlacement::BelowLeft => (-dx, dy), + } + } } impl Labeling { + /// Whether labels draw at a scale denominator and viewing distance (metres). + pub fn in_range(&self, scale: f64, distance: f64) -> bool { + self.min_scale.is_none_or(|m| scale <= m) + && self.max_scale.is_none_or(|m| scale >= m) + && self.closest.is_none_or(|d| distance >= d) + && self.farthest.is_none_or(|d| distance <= d) + } + /// Off, on the first text field that looks like a name. pub fn default_for(ds: &Dataset) -> Labeling { let field = ds @@ -427,7 +531,19 @@ impl Labeling { .or_else(|| ds.fields.first()) .map(|f| f.name.clone()) .unwrap_or_default(); - Labeling { enabled: false, field, size: 10.0, color: Rgba::rgb(0x2B, 0x2B, 0x2B), halo: true, bold: false } + Labeling { + enabled: false, + field, + size: 10.0, + color: Rgba::rgb(0x2B, 0x2B, 0x2B), + halo: true, + bold: false, + min_scale: None, + max_scale: None, + closest: None, + farthest: None, + placement: LabelPlacement::Auto, + } } } diff --git a/crates/render/src/lib.rs b/crates/render/src/lib.rs index 3a58fa2..4c13fa7 100644 --- a/crates/render/src/lib.rs +++ b/crates/render/src/lib.rs @@ -76,6 +76,17 @@ pub struct PlacedLabel { pub struct Rendered { pub pixmap: Pixmap, pub labels: Vec, + /// Labels that didn't fit, when the map shows unplaced labels (drawn in red). + pub unplaced: Vec, +} + +/// The colour unplaced labels are drawn in. +pub const UNPLACED: Rgba = Rgba::rgb(0xD0, 0x1C, 0x1C); + +/// The distance (metres) a viewer of a flat map at a ground resolution would see it from: the +/// view's height seen through a 60° field of view. +pub fn viewing_distance(ground_res: f64, view_height: f64) -> f64 { + ground_res * view_height * 0.866 } /// The built-in world outline used by every basemap (Natural Earth 1:110m, public domain). @@ -482,7 +493,13 @@ fn render_with(map: &mut Map, view: &View, full_res_rasters: bool) -> Option = Vec::new(); + let mut label_candidates: Vec<(PlacedLabel, f32, (u32, usize))> = Vec::new(); + let display = map.label_display; + if !display.locked { + map.label_lock = None; + } + let lock: Option> = map.label_lock.as_ref().map(|v| v.iter().copied().collect()); + let distance = viewing_distance(map.ground_res_at(&view.camera), view.height); let n_layers = map.layers.len(); for li in (0..n_layers).rev() { let Some(layer) = map.layers.get_mut(li) else { continue }; @@ -536,11 +553,14 @@ fn render_with(map: &mut Map, view: &View, full_res_rasters: bool) -> Option Option { @@ -564,8 +587,8 @@ fn render_with(map: &mut Map, view: &View, full_res_rasters: bool) -> Option Option Option Rgba { if lum < 140.0 { Rgba::new(255, 255, 255, 225) } else { Rgba::new(20, 22, 26, 210) } } -/// Greedy collision-free placement, highest priority first. -fn place_labels(mut cands: Vec<(PlacedLabel, f32)>, w: f32, h: f32) -> Vec { +struct Placement { + labels: Vec, + unplaced: Vec, + /// (layer id, row) of each placed label. + keys: Vec<(u32, usize)>, +} + +/// Greedy collision-free placement, highest priority first. Locked labels are all placed (they +/// were placed without collisions when the lock was taken). +fn place_labels(mut cands: Vec<(PlacedLabel, f32, (u32, usize))>, w: f32, h: f32, locked: bool) -> Placement { cands.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal)); let mut boxes: Vec<[f32; 4]> = Vec::new(); - let mut out = Vec::new(); - for (l, _) in cands.into_iter().take(5000) { + let mut out = Placement { labels: Vec::new(), unplaced: Vec::new(), keys: Vec::new() }; + for (l, _, key) in cands.into_iter().take(5000) { let tw = text::measure(&l.text, l.size, l.bold); let th = l.size * 1.25; let b = [l.x - tw / 2.0 - 2.0, l.y - th / 2.0, l.x + tw / 2.0 + 2.0, l.y + th / 2.0]; - if b[0] < 0.0 || b[1] < 0.0 || b[2] > w || b[3] > h { + let off_screen = b[2] < 0.0 || b[3] < 0.0 || b[0] > w || b[1] > h; + let clipped = b[0] < 0.0 || b[1] < 0.0 || b[2] > w || b[3] > h; + if off_screen || (!locked && clipped) { continue; } - if boxes.iter().any(|o| b[0] < o[2] && o[0] < b[2] && b[1] < o[3] && o[1] < b[3]) { + if !locked && boxes.iter().any(|o| b[0] < o[2] && o[0] < b[2] && b[1] < o[3] && o[1] < b[3]) { + if out.unplaced.len() < 2000 { + out.unplaced.push(PlacedLabel { color: UNPLACED, halo: Some(halo_for(UNPLACED)), ..l }); + } continue; } boxes.push(b); - out.push(l); + out.labels.push(l); + out.keys.push(key); } out } @@ -743,7 +785,7 @@ fn place_labels(mut cands: Vec<(PlacedLabel, f32)>, w: f32, h: f32) -> Vec Result, String> { let mut r = render_with(map, view, true).ok_or("could not allocate the image")?; - for l in &r.labels { + for l in r.unplaced.iter().chain(&r.labels) { text::draw(&mut r.pixmap, l, view.pixels_per_point as f32); } text::scale_bar(&mut r.pixmap, view, map.ground_res_at(&view.camera)); diff --git a/crates/ui-egui/src/chrome.rs b/crates/ui-egui/src/chrome.rs index 12a5889..4cbd407 100644 --- a/crates/ui-egui/src/chrome.rs +++ b/crates/ui-egui/src/chrome.rs @@ -281,6 +281,15 @@ pub fn shortcuts(app: &mut RustGisApp, ctx: &egui::Context) { if i.consume_key(Modifiers::NONE, Key::Home) { run.push(("map.zoomFull", Value::Null)); } + // Clipboard keys arrive as events, not key presses. + for e in &i.events { + match e { + egui::Event::Copy => run.push(("ui.copy", Value::Null)), + egui::Event::Cut => run.push(("ui.cut", Value::Null)), + egui::Event::Paste(text) => run.push(("edit.paste", json!({"text": text}))), + _ => {} + } + } } }); for (id, p) in run { @@ -291,7 +300,11 @@ pub fn shortcuts(app: &mut RustGisApp, ctx: &egui::Context) { continue; } } - if id == "edit.delete" && app.session.map().selection_count() == 0 { + if matches!(id, "edit.delete" | "ui.copy" | "ui.cut") && app.session.map().selection_count() == 0 { + continue; + } + // Pasting text that isn't features (a stray copy from elsewhere) does nothing. + if id == "edit.paste" && !p.get("text").and_then(Value::as_str).is_some_and(|t| t.trim_start().starts_with('{')) { continue; } let _ = app.run(id, p); diff --git a/crates/ui-egui/src/i18n/az.tsv b/crates/ui-egui/src/i18n/az.tsv index d3fd73a..126d232 100644 --- a/crates/ui-egui/src/i18n/az.tsv +++ b/crates/ui-egui/src/i18n/az.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About Haqqında About RustGIS RustGIS haqqında About RustGIS. RustGIS haqqında. +Above Yuxarı +Above Left Yuxarı sol +Above Right Yuxarı sağ Activate Map Xəritəni aktivləşdir Add Əlavə et Add\nData Məlumat\nəlavə et @@ -56,6 +59,9 @@ Band {n} Kanal {n} Bands Kanallar Basemap Əsas xəritə Basemaps Əsas xəritələr +Below Aşağı +Below Left Aşağı sol +Below Right Aşağı sağ Bilinear Bilinear Blank Boş Blue Mavi @@ -85,6 +91,7 @@ Case Field Qrup sahəsi Catalog Kataloq Catalog\nPane Kataloq\npaneli Cell size Xana ölçüsü +Centered Mərkəzdə Change the map's backdrop. Xəritənin fonunu dəyişin. Change the map's coordinate system Xəritənin koordinat sistemini dəyiş Choose a band combination to display the raster layer. Rastr layını göstərmək üçün kanal kombinasiyası seçin. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Düz xəritənin Yeri necə göstər Choose how the layer is drawn. Layın necə çəkiləcəyini seçin. Choose how the raster is drawn. Rastrın necə çəkiləcəyini seçin. Choose the interface language. İnterfeys dilini seçin. +Choose which layers a click identifies. Klikin hansı layları müəyyən etdiyini seçin. Circle Dairə Classes Siniflər Classify Təsnif et Clear Təmizlə Clear\nLimits Hədləri\ntəmizlə Clear History Tarixçəni təmizlə +Clear Limits Hədləri təmizlə Clear Selection Seçimi təmizlə Clear selection Seçimi təmizlə Clear the selection in every layer. Bütün laylarda seçimi təmizləyin. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Təpə əlavə etmək Click to switch between decimal degrees and DMS Onluq dərəcə ilə DMS arasında keçid üçün klikləyin Clip Kəs Clip Features Obyektləri kəs +Clipboard Mübadilə buferi Close Bağla Close (Esc) Bağla (Esc) Close Table Cədvəli bağla Close table Cədvəli bağla +Closest Ən yaxın Collapse or expand the ribbon Lenti yığ və ya aç Collapse the ribbon (Ctrl+F1) Lenti yığ (Ctrl+F1) Color Rəng @@ -133,11 +144,20 @@ Compute a field's values. Sahənin qiymətlərini hesablayın. Contents Məzmun Contrast Kontrast Conversion Çevirmə +Convert Çevir +Convert the selected layer's labels into an annotation layer. Seçilmiş layın etiketlərini annotasiya layına çevirin. +Convert To Annotation Annotasiyaya çevir Coordinate System Koordinat sistemi Coordinate system Koordinat sistemi Coordinate System… Koordinat sistemi… +Copied {path} {path} kopyalandı Copies the (selected) features of a layer to a new layer. Layın (seçilmiş) obyektlərini yeni laya kopyalayır. +Copy Kopyala Copy Coordinates Koordinatları kopyala +Copy Path Yolu kopyala +Copy the selected features (also as GeoJSON text). Seçilmiş obyektləri kopyalayın (həm də GeoJSON mətni kimi). +Copy the selected features and delete them. Seçilmiş obyektləri kopyalayın və silin. +Copy the selected layer's data source path. Seçilmiş layın məlumat mənbəyi yolunu kopyalayın. Couldn't download the font for {language}; pick the language again to retry. {language} üçün şrift endirilə bilmədi; yenidən cəhd etmək üçün dili yenidən seçin. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Sahənin say, cəm, orta, min, maks və standart sapması, istəyə görə qrup sahəsi üzrə. Countries, cities, rivers and lakes Ölkələr, şəhərlər, çaylar və göllər @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Cari layihə +Cut Kəs Dark\nMode Qaranlıq\nrejim Data Məlumat Data Design Məlumat dizaynı @@ -193,6 +214,7 @@ Drag / middle-drag Sürüklə / orta düymə ilə sürüklə Drag a box or click to zoom in Yaxınlaşdırmaq üçün çərçivə çəkin və ya klikləyin Drag a box to zoom into. Yaxınlaşdırmaq üçün çərçivə çəkin. Draw a halo around label text. Etiket mətni ətrafında halo çəkin. +Draw labels at every scale and distance. Etiketləri hər miqyasda və məsafədə çəkin. Draw new features in the selected layer. Double-click to finish lines and polygons. Seçilmiş layda yeni obyektlər çəkin. Xətləri və poliqonları bitirmək üçün iki dəfə klikləyin. Draw the layer at every scale. Layı bütün miqyaslarda çəkin. Drawing Çəkmə @@ -243,6 +265,7 @@ Expression İfadə Extract Çıxarma Extracts the parts of input features that fall inside clip polygons. Giriş obyektlərinin kəsmə poliqonları daxilinə düşən hissələrini çıxarır. Failed Uğursuz oldu +Farthest Ən uzaq Feature Obyekt Feature\nTo Point Obyektdən\nnöqtəyə Feature Layer Obyekt layı @@ -296,6 +319,8 @@ Group Option Qrup seçimi Halo Halo Harbour (qualitative) Liman (keyfiyyət) Help Kömək +Hide labels when the viewer is closer than this. Baxan bundan yaxın olduqda etiketləri gizlədin. +Hide labels when the viewer is farther than this. Baxan bundan uzaq olduqda etiketləri gizlədin. Histogram Equalize Histoqram bərabərləşdirmə History Tarixçə Home Home @@ -321,12 +346,16 @@ Invert color scheme Rəng sxemini tərsinə çevir Invert the selection. Seçimi tərsinə çevirin. IS NULL IS NULL keep current cari saxla +Keep the labelled features fixed as the map moves. Xəritə hərəkət etdikcə etiketlənmiş obyektləri sabit saxlayın. Keyboard Shortcuts Klaviatura qısayolları Keyboard shortcuts. Klaviatura qısayolları. Kilometers Kilometr Label Etiket Label Class Etiket sinfi +Label Distance Range Etiket məsafə diapazonu Label Field Etiket sahəsi +Label Placement Etiket yerləşdirilməsi +Label Visibility Range Etiket görünmə diapazonu Labeling Etiketləmə Lagoon Laquna Lambert Cylindrical Equal Area Lambert bərabər sahəli silindrik @@ -337,6 +366,7 @@ Layer Lay Layer From\nSelection Seçimdən\nlay Layers Laylar Layers and Table Views Laylar və cədvəl görünüşləri +Left Sol LIKE LIKE Limit which features draw with a SQL expression. SQL ifadəsi ilə hansı obyektlərin çəkildiyini məhdudlaşdırın. Line color Xətt rəngi @@ -351,6 +381,7 @@ Locate GeoLibre Runner GeoLibre işlədicisini tap Locate the GeoLibre runner GeoLibre işlədicisini tap Locate… Tap… Location Məkan +Lock Kilidlə Long Long Longitude (X) Uzunluq dairəsi (X) Major Lakes Əsas göllər @@ -406,6 +437,7 @@ Next Növbəti Next Extent Növbəti hüdud No Xeyr No bookmarks yet Hələ əlfəcin yoxdur +No Pop-ups Açılan pəncərə yoxdur No standalone tables Müstəqil cədvəl yoxdur NoData NoData None Heç biri @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Uzunluq/en dairəsinə sürüşdürün. Pan with the mouse, zoom with the wheel and click features to see their attributes. Siçanla sürüşdürün, çarxla miqyası dəyişin və atributlarını görmək üçün obyektlərə klikləyin. Paper Kağız Parent folder Ana qovluq +Paste Yapışdır +Paste copied features into the selected layer, or as a new layer. Kopyalanmış obyektləri seçilmiş laya və ya yeni lay kimi yapışdırın. +Paste Special Xüsusi yapışdır +Paste Special (as a new layer) Xüsusi yapışdır (yeni lay kimi) +Pause Dayandır Percent Clip Faiz kəsimi Pixel Piksel Pixel type Piksel tipi +Placement Yerləşdirmə PNG image PNG təsviri Point Nöqtə Polar, conformal: Antarctica and the Southern Ocean. Qütb, konform: Antarktida və Cənub okeanı. Polar, conformal: the Arctic and the northern lands. Qütb, konform: Arktika və şimal torpaqları. Polygon Poliqon Polyline Polixətt +Pop-up Mode Açılan pəncərə rejimi +Pop-ups Açılan pəncərələr Populated Places Yaşayış məntəqələri Previous Əvvəlki Previous Extent Əvvəlki hüdud @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Parlaqlığı, kontrastı və qammanı sı RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Lent funksiyalarının əhatəsi: {total} funksiyadan {done} ({pct}%). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Lent uyğunluğu: {total} lent funksiyasından {done} RustGIS əmrinə malikdir. +Right Sağ Robinson Robinson Run İşə sal Run Tool Aləti işə sal @@ -545,8 +586,10 @@ Select Rows Sətirləri seç Select rows with a SQL expression. Sətirləri SQL ifadəsi ilə seçin. Select Subset From Current Selection Cari seçimdən alt çoxluq seç Selectable Seçilə bilən +Selectable Layers Seçilə bilən laylar Selected Seçilmiş Selected Features: {n} Seçilmiş obyektlər: {n} +Selected in Contents Məzmunda seçilmiş Selected only Yalnız seçilmişlər Selecting Features Obyektlərin seçilməsi Selection Seçim @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Kataloq panelini göstərin və ya gizlədin. Show or hide the Contents pane. Məzmun panelini göstərin və ya gizlədin. Show or hide the Geoprocessing pane. Geoemal panelini göstərin və ya gizlədin. Show or hide the layer. Layı göstərin və ya gizlədin. +Show the labels that don't fit, in red. Sığmayan etiketləri qırmızı rəngdə göstərin. Show the map as a 3D globe, or as a flat map again. Xəritəni 3D qlobus kimi və ya yenidən düz xəritə kimi göstər. Show the Symbology pane for the selected layer. Seçilmiş lay üçün Simvolika panelini göstərin. Simplify Sadələşdir @@ -586,6 +630,7 @@ Statistics Statistika Statistics Field Statistika sahəsi Status Bar Status paneli Std. Dev. Std. sapma +Stop drawing labels, for faster navigation. Daha sürətli naviqasiya üçün etiketlərin çəkilməsini dayandırın. Stretch Genişləndirmə Stretch\nType Genişləndirmə\ntipi Stretch Type Genişləndirmə tipi @@ -622,6 +667,7 @@ Toolbox Alətlər qutusu Toolboxes Alətlər qutuları Tools Alətlər Tools you run appear here. İşə saldığınız alətlər burada görünür. +Topmost Layer Ən üstdəki lay Total {total} · Segment {segment} Cəmi {total} · Seqment {segment} Transparency Şəffaflıq Triangle Üçbucaq @@ -640,10 +686,12 @@ Valid expression · {n} matching rows İfadə düzgündür · {n} uyğun sətir Vector and raster data Vektor və rastr məlumatı Version {version} Versiya {version} View Görünüş +View Unplaced Yerləşməyənləri göstər View › Windows Görünüş › Pəncərələr Visibility Görünmə Visibility Range Görünmə diapazonu Visible Görünən +Visible Layers Görünən laylar Web Mercator Web Mercator Website Veb sayt Welcome to RustGIS RustGIS-ə xoş gəlmisiniz @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Qlobus WGS 84 / Web Mercator WGS 84 / Web Mercator Where Where Where Clause Where şərti +Where labels sit relative to their features. Etiketlərin obyektlərinə nisbətən harada yerləşdiyi. Windows Pəncərələr Winkel Tripel Winkel Tripel World Dünya diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index 65e6e1a..9bd9188 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About Über About RustGIS Über RustGIS About RustGIS. Über RustGIS. +Above Oben +Above Left Oben links +Above Right Oben rechts Activate Map Karte aktivieren Add Hinzufügen Add\nData Daten\nhinzufügen @@ -56,6 +59,9 @@ Band {n} Kanal {n} Bands Kanäle Basemap Grundkarte Basemaps Grundkarten +Below Unten +Below Left Unten links +Below Right Unten rechts Bilinear Bilinear Blank Leer Blue Blau @@ -85,6 +91,7 @@ Case Field Gruppierungsfeld Catalog Katalog Catalog\nPane Katalog-\nbereich Cell size Zellengröße +Centered Zentriert Change the map's backdrop. Den Kartenhintergrund ändern. Change the map's coordinate system Koordinatensystem der Karte ändern Choose a band combination to display the raster layer. Eine Kanalkombination zur Anzeige des Raster-Layers wählen. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Wählen, wie die flache Karte die Er Choose how the layer is drawn. Festlegen, wie der Layer gezeichnet wird. Choose how the raster is drawn. Festlegen, wie das Raster dargestellt wird. Choose the interface language. Die Sprache der Oberfläche wählen. +Choose which layers a click identifies. Auswählen, welche Layer ein Klick identifiziert. Circle Kreis Classes Klassen Classify Klassifizieren Clear Leeren Clear\nLimits Grenzen\naufheben Clear History Verlauf leeren +Clear Limits Grenzen aufheben Clear Selection Auswahl aufheben Clear selection Auswahl aufheben Clear the selection in every layer. Die Auswahl in allen Layern aufheben. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Klicken, um Stützpunkt Click to switch between decimal degrees and DMS Klicken, um zwischen Dezimalgrad und GMS zu wechseln Clip Zuschneiden Clip Features Objekte zuschneiden +Clipboard Zwischenablage Close Schließen Close (Esc) Schließen (Esc) Close Table Tabelle schließen Close table Tabelle schließen +Closest Nächste Collapse or expand the ribbon Menüband ein- oder ausblenden Collapse the ribbon (Ctrl+F1) Menüband minimieren (Strg+F1) Color Farbe @@ -133,11 +144,20 @@ Compute a field's values. Die Werte eines Feldes berechnen. Contents Inhalt Contrast Kontrast Conversion Konvertierung +Convert Konvertieren +Convert the selected layer's labels into an annotation layer. Die Beschriftungen des ausgewählten Layers in einen Annotation-Layer konvertieren. +Convert To Annotation In Annotation konvertieren Coordinate System Koordinatensystem Coordinate system Koordinatensystem Coordinate System… Koordinatensystem… +Copied {path} {path} kopiert Copies the (selected) features of a layer to a new layer. Kopiert die (ausgewählten) Objekte eines Layers in einen neuen Layer. +Copy Kopieren Copy Coordinates Koordinaten kopieren +Copy Path Pfad kopieren +Copy the selected features (also as GeoJSON text). Die ausgewählten Objekte kopieren (auch als GeoJSON-Text). +Copy the selected features and delete them. Die ausgewählten Objekte kopieren und löschen. +Copy the selected layer's data source path. Den Datenquellenpfad des ausgewählten Layers kopieren. Couldn't download the font for {language}; pick the language again to retry. Die Schriftart für {language} konnte nicht heruntergeladen werden; wählen Sie die Sprache erneut, um es noch einmal zu versuchen. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Anzahl, Summe, Mittelwert, Minimum, Maximum und Standardabweichung eines Feldes, optional je Gruppierungsfeld. Countries, cities, rivers and lakes Länder, Städte, Flüsse und Seen @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Aktuelles Projekt +Cut Ausschneiden Dark\nMode Dunkel-\nmodus Data Daten Data Design Datenentwurf @@ -193,6 +214,7 @@ Drag / middle-drag Ziehen / mittlere Maustaste ziehen Drag a box or click to zoom in Rechteck aufziehen oder klicken zum Vergrößern Drag a box to zoom into. Ein Rechteck aufziehen, um hineinzuzoomen. Draw a halo around label text. Einen Halo um den Beschriftungstext zeichnen. +Draw labels at every scale and distance. Beschriftungen in jedem Maßstab und jeder Entfernung zeichnen. Draw new features in the selected layer. Double-click to finish lines and polygons. Neue Objekte im ausgewählten Layer zeichnen. Doppelklick beendet Linien und Polygone. Draw the layer at every scale. Den Layer in jedem Maßstab zeichnen. Drawing Zeichnen @@ -243,6 +265,7 @@ Expression Ausdruck Extract Extrahieren Extracts the parts of input features that fall inside clip polygons. Extrahiert die Teile der Eingabeobjekte, die innerhalb der Zuschneidepolygone liegen. Failed Fehlgeschlagen +Farthest Weiteste Feature Objekt Feature\nTo Point Objekt\nzu Punkt Feature Layer Objekt-Layer @@ -296,6 +319,8 @@ Group Option Gruppierungsoption Halo Halo Harbour (qualitative) Hafen (qualitativ) Help Hilfe +Hide labels when the viewer is closer than this. Beschriftungen ausblenden, wenn der Betrachter näher ist. +Hide labels when the viewer is farther than this. Beschriftungen ausblenden, wenn der Betrachter weiter entfernt ist. Histogram Equalize Histogrammausgleich History Verlauf Home Home @@ -321,12 +346,16 @@ Invert color scheme Farbschema umkehren Invert the selection. Die Auswahl umkehren. IS NULL IS NULL keep current aktuellen Wert beibehalten +Keep the labelled features fixed as the map moves. Die beschrifteten Objekte beim Verschieben der Karte beibehalten. Keyboard Shortcuts Tastenkürzel Keyboard shortcuts. Tastenkürzel. Kilometers Kilometer Label Beschriftung Label Class Beschriftungsklasse +Label Distance Range Beschriftungs-Entfernungsbereich Label Field Beschriftungsfeld +Label Placement Beschriftungsplatzierung +Label Visibility Range Beschriftungs-Sichtbarkeitsbereich Labeling Beschriftung Lagoon Lagune Lambert Cylindrical Equal Area Lambert flächentreue Zylinderprojektion @@ -337,6 +366,7 @@ Layer Layer Layer From\nSelection Layer aus\nAuswahl Layers Layer Layers and Table Views Layer und Tabellenansichten +Left Links LIKE LIKE Limit which features draw with a SQL expression. Mit einem SQL-Ausdruck einschränken, welche Objekte gezeichnet werden. Line color Linienfarbe @@ -351,6 +381,7 @@ Locate GeoLibre Runner GeoLibre-Runner suchen Locate the GeoLibre runner GeoLibre-Runner suchen Locate… Suchen… Location Lage +Lock Sperren Long Long (Ganzzahl) Longitude (X) Länge (X) Major Lakes Große Seen @@ -406,6 +437,7 @@ Next Weiter Next Extent Nächste Ausdehnung No Nein No bookmarks yet Noch keine Lesezeichen +No Pop-ups Keine Pop-ups No standalone tables Keine eigenständigen Tabellen NoData NoData None Keine @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Zu einer Länge/Breite verschieben. Pan with the mouse, zoom with the wheel and click features to see their attributes. Mit der Maus verschieben, mit dem Mausrad zoomen und Objekte anklicken, um ihre Attribute zu sehen. Paper Papier Parent folder Übergeordneter Ordner +Paste Einfügen +Paste copied features into the selected layer, or as a new layer. Kopierte Objekte in den ausgewählten Layer oder als neuen Layer einfügen. +Paste Special Inhalte einfügen +Paste Special (as a new layer) Inhalte einfügen (als neuer Layer) +Pause Anhalten Percent Clip Prozent-Clip Pixel Pixel Pixel type Pixeltyp +Placement Platzierung PNG image PNG-Bild Point Punkt Polar, conformal: Antarctica and the Southern Ocean. Polar, winkeltreu: die Antarktis und das Südpolarmeer. Polar, conformal: the Arctic and the northern lands. Polar, winkeltreu: die Arktis und die nördlichen Länder. Polygon Polygon Polyline Polylinie +Pop-up Mode Pop-up-Modus +Pop-ups Pop-ups Populated Places Besiedelte Orte Previous Zurück Previous Extent Vorherige Ausdehnung @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Helligkeit, Kontrast und Gamma zurücksetz RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Abdeckung der Menüband-Funktionen: {done} von {total} Funktionen ({pct} %). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Menüband-Parität: {done} von {total} Menüband-Funktionen haben einen RustGIS-Befehl. +Right Rechts Robinson Robinson Run Ausführen Run Tool Werkzeug ausführen @@ -545,8 +586,10 @@ Select Rows Zeilen auswählen Select rows with a SQL expression. Zeilen mit einem SQL-Ausdruck auswählen. Select Subset From Current Selection Teilmenge aus aktueller Auswahl auswählen Selectable Auswählbar +Selectable Layers Auswählbare Layer Selected Ausgewählt Selected Features: {n} Ausgewählte Objekte: {n} +Selected in Contents Im Inhalt ausgewählt Selected only Nur ausgewählte Selecting Features Objekte auswählen Selection Auswahl @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Katalogbereich ein- oder ausblenden. Show or hide the Contents pane. Inhaltsbereich ein- oder ausblenden. Show or hide the Geoprocessing pane. Geoverarbeitungsbereich ein- oder ausblenden. Show or hide the layer. Den Layer ein- oder ausblenden. +Show the labels that don't fit, in red. Nicht platzierbare Beschriftungen rot anzeigen. Show the map as a 3D globe, or as a flat map again. Die Karte als 3D-Globus oder wieder als flache Karte anzeigen. Show the Symbology pane for the selected layer. Den Symbologie-Bereich für den ausgewählten Layer anzeigen. Simplify Vereinfachen @@ -586,6 +630,7 @@ Statistics Statistik Statistics Field Statistikfeld Status Bar Statusleiste Std. Dev. Std.-Abw. +Stop drawing labels, for faster navigation. Beschriftungen nicht zeichnen, für schnellere Navigation. Stretch Streckung Stretch\nType Streckungs-\ntyp Stretch Type Streckungstyp @@ -622,6 +667,7 @@ Toolbox Toolbox Toolboxes Toolboxen Tools Werkzeuge Tools you run appear here. Ausgeführte Werkzeuge erscheinen hier. +Topmost Layer Oberster Layer Total {total} · Segment {segment} Gesamt {total} · Segment {segment} Transparency Transparenz Triangle Dreieck @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Gültiger Ausdruck · {n} passende Zeilen Vector and raster data Vektor- und Rasterdaten Version {version} Version {version} View Ansicht +View Unplaced Nicht platzierte anzeigen View › Windows Ansicht › Fenster Visibility Sichtbarkeit Visibility Range Sichtbarkeitsbereich Visible Sichtbar +Visible Layers Sichtbare Layer Web Mercator Web Mercator Website Website Welcome to RustGIS Willkommen bei RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Globus WGS 84 / Web Mercator WGS 84 / Web Mercator Where Wo Where Clause WHERE-Klausel +Where labels sit relative to their features. Wo Beschriftungen relativ zu ihren Objekten stehen. Windows Fenster Winkel Tripel Winkel-Tripel World Welt diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index de1a425..f3d62a9 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About Acerca de About RustGIS Acerca de RustGIS About RustGIS. Acerca de RustGIS. +Above Arriba +Above Left Arriba a la izquierda +Above Right Arriba a la derecha Activate Map Activar mapa Add Añadir Add\nData Añadir\ndatos @@ -56,6 +59,9 @@ Band {n} Banda {n} Bands Bandas Basemap Mapa base Basemaps Mapas base +Below Abajo +Below Left Abajo a la izquierda +Below Right Abajo a la derecha Bilinear Bilineal Blank En blanco Blue Azul @@ -85,6 +91,7 @@ Case Field Campo de caso Catalog Catálogo Catalog\nPane Panel\nCatálogo Cell size Tamaño de celda +Centered Centrado Change the map's backdrop. Cambiar el fondo del mapa. Change the map's coordinate system Cambiar el sistema de coordenadas del mapa Choose a band combination to display the raster layer. Elegir una combinación de bandas para mostrar la capa ráster. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Elegir cómo el mapa plano represent Choose how the layer is drawn. Elegir cómo se dibuja la capa. Choose how the raster is drawn. Elegir cómo se dibuja el ráster. Choose the interface language. Elegir el idioma de la interfaz. +Choose which layers a click identifies. Elegir qué capas identifica un clic. Circle Círculo Classes Clases Classify Clasificar Clear Borrar Clear\nLimits Borrar\nlímites Clear History Borrar historial +Clear Limits Borrar límites Clear Selection Borrar selección Clear selection Borrar selección Clear the selection in every layer. Borrar la selección en todas las capas. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Haga clic para añadir Click to switch between decimal degrees and DMS Haga clic para alternar entre grados decimales y GMS Clip Recortar Clip Features Recortar entidades +Clipboard Portapapeles Close Cerrar Close (Esc) Cerrar (Esc) Close Table Cerrar tabla Close table Cerrar tabla +Closest Más cercana Collapse or expand the ribbon Contraer o expandir la cinta Collapse the ribbon (Ctrl+F1) Contraer la cinta (Ctrl+F1) Color Color @@ -133,11 +144,20 @@ Compute a field's values. Calcular los valores de un campo. Contents Contenido Contrast Contraste Conversion Conversión +Convert Convertir +Convert the selected layer's labels into an annotation layer. Convertir las etiquetas de la capa seleccionada en una capa de anotación. +Convert To Annotation Convertir a anotación Coordinate System Sistema de coordenadas Coordinate system Sistema de coordenadas Coordinate System… Sistema de coordenadas… +Copied {path} Copiado {path} Copies the (selected) features of a layer to a new layer. Copia las entidades (seleccionadas) de una capa a una capa nueva. +Copy Copiar Copy Coordinates Copiar coordenadas +Copy Path Copiar ruta +Copy the selected features (also as GeoJSON text). Copiar las entidades seleccionadas (también como texto GeoJSON). +Copy the selected features and delete them. Copiar las entidades seleccionadas y eliminarlas. +Copy the selected layer's data source path. Copiar la ruta de la fuente de datos de la capa seleccionada. Couldn't download the font for {language}; pick the language again to retry. No se pudo descargar la fuente para {language}; vuelva a elegir el idioma para reintentarlo. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Recuento, suma, media, mínimo, máximo y desviación estándar de un campo, opcionalmente por campo de caso. Countries, cities, rivers and lakes Países, ciudades, ríos y lagos @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Proyecto actual +Cut Cortar Dark\nMode Modo\noscuro Data Datos Data Design Diseño de datos @@ -193,6 +214,7 @@ Drag / middle-drag Arrastrar / arrastrar con botón central Drag a box or click to zoom in Arrastre un rectángulo o haga clic para acercar Drag a box to zoom into. Arrastre un rectángulo para acercar. Draw a halo around label text. Dibujar un halo alrededor del texto de la etiqueta. +Draw labels at every scale and distance. Dibujar etiquetas a cualquier escala y distancia. Draw new features in the selected layer. Double-click to finish lines and polygons. Dibujar entidades nuevas en la capa seleccionada. Doble clic para terminar líneas y polígonos. Draw the layer at every scale. Dibujar la capa en todas las escalas. Drawing Dibujo @@ -243,6 +265,7 @@ Expression Expresión Extract Extraer Extracts the parts of input features that fall inside clip polygons. Extrae las partes de las entidades de entrada que quedan dentro de los polígonos de recorte. Failed Error +Farthest Más lejana Feature Entidad Feature\nTo Point Entidad\na punto Feature Layer Capa de entidades @@ -296,6 +319,8 @@ Group Option Opción de agrupación Halo Halo Harbour (qualitative) Puerto (cualitativa) Help Ayuda +Hide labels when the viewer is closer than this. Ocultar las etiquetas cuando el observador esté más cerca que esto. +Hide labels when the viewer is farther than this. Ocultar las etiquetas cuando el observador esté más lejos que esto. Histogram Equalize Ecualizar histograma History Historial Home Home @@ -321,12 +346,16 @@ Invert color scheme Invertir esquema de color Invert the selection. Invertir la selección. IS NULL IS NULL keep current mantener actual +Keep the labelled features fixed as the map moves. Mantener fijas las entidades etiquetadas al mover el mapa. Keyboard Shortcuts Atajos de teclado Keyboard shortcuts. Atajos de teclado. Kilometers Kilómetros Label Etiqueta Label Class Clase de etiqueta +Label Distance Range Rango de distancia de etiquetas Label Field Campo de etiqueta +Label Placement Ubicación de etiquetas +Label Visibility Range Rango de visibilidad de etiquetas Labeling Etiquetado Lagoon Laguna Lambert Cylindrical Equal Area Cilíndrica de áreas iguales de Lambert @@ -337,6 +366,7 @@ Layer Capa Layer From\nSelection Capa desde\nselección Layers Capas Layers and Table Views Capas y vistas de tabla +Left Izquierda LIKE LIKE Limit which features draw with a SQL expression. Limitar qué entidades se dibujan con una expresión SQL. Line color Color de línea @@ -351,6 +381,7 @@ Locate GeoLibre Runner Localizar el ejecutor de GeoLibre Locate the GeoLibre runner Localizar el ejecutor de GeoLibre Locate… Localizar… Location Ubicación +Lock Bloquear Long Entero largo Longitude (X) Longitud (X) Major Lakes Lagos principales @@ -406,6 +437,7 @@ Next Siguiente Next Extent Extensión siguiente No No No bookmarks yet Aún no hay marcadores +No Pop-ups Sin ventanas emergentes No standalone tables No hay tablas independientes NoData NoData None Ninguno @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Desplazarse a una longitud/latitud. Pan with the mouse, zoom with the wheel and click features to see their attributes. Desplace el mapa con el ratón, haga zoom con la rueda y haga clic en las entidades para ver sus atributos. Paper Papel Parent folder Carpeta superior +Paste Pegar +Paste copied features into the selected layer, or as a new layer. Pegar las entidades copiadas en la capa seleccionada o como una capa nueva. +Paste Special Pegado especial +Paste Special (as a new layer) Pegado especial (como capa nueva) +Pause Pausar Percent Clip Recorte de porcentaje Pixel Píxel Pixel type Tipo de píxel +Placement Ubicación PNG image Imagen PNG Point Punto Polar, conformal: Antarctica and the Southern Ocean. Polar, conforme: la Antártida y el océano Austral. Polar, conformal: the Arctic and the northern lands. Polar, conforme: el Ártico y las tierras del norte. Polygon Polígono Polyline Polilínea +Pop-up Mode Modo de ventana emergente +Pop-ups Ventanas emergentes Populated Places Lugares poblados Previous Anterior Previous Extent Extensión anterior @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Restablecer brillo, contraste y gamma. RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Cobertura de funciones de la cinta: {done} de {total} funciones ({pct}%). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Paridad de la cinta: {done} de {total} funciones de la cinta tienen un comando de RustGIS. +Right Derecha Robinson Robinson Run Ejecutar Run Tool Ejecutar herramienta @@ -545,8 +586,10 @@ Select Rows Seleccionar filas Select rows with a SQL expression. Seleccionar filas con una expresión SQL. Select Subset From Current Selection Seleccionar subconjunto de la selección actual Selectable Seleccionable +Selectable Layers Capas seleccionables Selected Seleccionado Selected Features: {n} Entidades seleccionadas: {n} +Selected in Contents Seleccionadas en Contenido Selected only Solo seleccionadas Selecting Features Selección de entidades Selection Selección @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Mostrar u ocultar el panel Catálogo. Show or hide the Contents pane. Mostrar u ocultar el panel Contenido. Show or hide the Geoprocessing pane. Mostrar u ocultar el panel Geoprocesamiento. Show or hide the layer. Mostrar u ocultar la capa. +Show the labels that don't fit, in red. Mostrar en rojo las etiquetas que no caben. Show the map as a 3D globe, or as a flat map again. Mostrar el mapa como un globo 3D, o de nuevo como un mapa plano. Show the Symbology pane for the selected layer. Mostrar el panel Simbología de la capa seleccionada. Simplify Simplificar @@ -586,6 +630,7 @@ Statistics Estadísticas Statistics Field Campo de estadísticas Status Bar Barra de estado Std. Dev. Desv. est. +Stop drawing labels, for faster navigation. Dejar de dibujar etiquetas para navegar más rápido. Stretch Estiramiento Stretch\nType Tipo de\nestiramiento Stretch Type Tipo de estiramiento @@ -622,6 +667,7 @@ Toolbox Caja de herramientas Toolboxes Cajas de herramientas Tools Herramientas Tools you run appear here. Las herramientas que ejecute aparecen aquí. +Topmost Layer Capa superior Total {total} · Segment {segment} Total {total} · Segmento {segment} Transparency Transparencia Triangle Triángulo @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Expresión válida · {n} filas coincident Vector and raster data Datos vectoriales y ráster Version {version} Versión {version} View Vista +View Unplaced Ver no ubicadas View › Windows Vista › Ventanas Visibility Visibilidad Visibility Range Rango de visibilidad Visible Visible +Visible Layers Capas visibles Web Mercator Web Mercator Website Sitio web Welcome to RustGIS Bienvenido a RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Globo WGS 84 / Web Mercator WGS 84 / Web Mercator Where Donde Where Clause Cláusula WHERE +Where labels sit relative to their features. Dónde se sitúan las etiquetas respecto a sus entidades. Windows Ventanas Winkel Tripel Winkel Tripel World Mundo diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index 83a303c..2a11ff4 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About À propos About RustGIS À propos de RustGIS About RustGIS. À propos de RustGIS. +Above Au-dessus +Above Left En haut à gauche +Above Right En haut à droite Activate Map Activer la carte Add Ajouter Add\nData Ajouter\ndes données @@ -56,6 +59,9 @@ Band {n} Bande {n} Bands Bandes Basemap Fond de carte Basemaps Fonds de carte +Below En dessous +Below Left En bas à gauche +Below Right En bas à droite Bilinear Bilinéaire Blank Vierge Blue Bleu @@ -85,6 +91,7 @@ Case Field Champ de regroupement Catalog Catalogue Catalog\nPane Volet\nCatalogue Cell size Taille de cellule +Centered Centré Change the map's backdrop. Changer l'arrière-plan de la carte. Change the map's coordinate system Changer le système de coordonnées de la carte Choose a band combination to display the raster layer. Choisir une combinaison de bandes pour afficher la couche raster. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Choisir comment la carte plane repr Choose how the layer is drawn. Choisir comment la couche est dessinée. Choose how the raster is drawn. Choisir le mode d'affichage du raster. Choose the interface language. Choisir la langue de l'interface. +Choose which layers a click identifies. Choisir les couches identifiées par un clic. Circle Cercle Classes Classes Classify Classer Clear Effacer Clear\nLimits Effacer\nles limites Clear History Effacer l'historique +Clear Limits Effacer les limites Clear Selection Effacer la sélection Clear selection Effacer la sélection Clear the selection in every layer. Effacer la sélection dans toutes les couches. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Cliquez pour ajouter de Click to switch between decimal degrees and DMS Cliquez pour basculer entre degrés décimaux et DMS Clip Découper Clip Features Découper des entités +Clipboard Presse-papiers Close Fermer Close (Esc) Fermer (Esc) Close Table Fermer la table Close table Fermer la table +Closest Plus proche Collapse or expand the ribbon Réduire ou développer le ruban Collapse the ribbon (Ctrl+F1) Réduire le ruban (Ctrl+F1) Color Couleur @@ -133,11 +144,20 @@ Compute a field's values. Calculer les valeurs d'un champ. Contents Contenu Contrast Contraste Conversion Conversion +Convert Convertir +Convert the selected layer's labels into an annotation layer. Convertir les étiquettes de la couche sélectionnée en couche d'annotations. +Convert To Annotation Convertir en annotations Coordinate System Système de coordonnées Coordinate system Système de coordonnées Coordinate System… Système de coordonnées… +Copied {path} {path} copié Copies the (selected) features of a layer to a new layer. Copie les entités (sélectionnées) d'une couche dans une nouvelle couche. +Copy Copier Copy Coordinates Copier les coordonnées +Copy Path Copier le chemin +Copy the selected features (also as GeoJSON text). Copier les entités sélectionnées (également en texte GeoJSON). +Copy the selected features and delete them. Copier les entités sélectionnées et les supprimer. +Copy the selected layer's data source path. Copier le chemin de la source de données de la couche sélectionnée. Couldn't download the font for {language}; pick the language again to retry. Impossible de télécharger la police pour {language} ; sélectionnez à nouveau la langue pour réessayer. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Nombre, somme, moyenne, min, max et écart type d'un champ, éventuellement par champ de regroupement. Countries, cities, rivers and lakes Pays, villes, rivières et lacs @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Projet actuel +Cut Couper Dark\nMode Mode\nsombre Data Données Data Design Conception des données @@ -193,6 +214,7 @@ Drag / middle-drag Glisser / glisser avec le bouton du milieu Drag a box or click to zoom in Tracez un rectangle ou cliquez pour zoomer Drag a box to zoom into. Tracez un rectangle pour zoomer dessus. Draw a halo around label text. Dessiner un halo autour du texte d'étiquette. +Draw labels at every scale and distance. Dessiner les étiquettes à toutes les échelles et distances. Draw new features in the selected layer. Double-click to finish lines and polygons. Dessiner de nouvelles entités dans la couche sélectionnée. Double-cliquez pour terminer les lignes et polygones. Draw the layer at every scale. Dessiner la couche à toutes les échelles. Drawing Dessin @@ -243,6 +265,7 @@ Expression Expression Extract Extraire Extracts the parts of input features that fall inside clip polygons. Extrait les parties des entités en entrée situées à l'intérieur des polygones de découpage. Failed Échec +Farthest Plus éloignée Feature Entité Feature\nTo Point Entité\nvers point Feature Layer Couche d'entités @@ -296,6 +319,8 @@ Group Option Option de regroupement Halo Halo Harbour (qualitative) Port (qualitatif) Help Aide +Hide labels when the viewer is closer than this. Masquer les étiquettes quand l'observateur est plus proche que cette valeur. +Hide labels when the viewer is farther than this. Masquer les étiquettes quand l'observateur est plus éloigné que cette valeur. Histogram Equalize Égalisation d'histogramme History Historique Home Home @@ -321,12 +346,16 @@ Invert color scheme Inverser la palette de couleurs Invert the selection. Inverser la sélection. IS NULL IS NULL keep current conserver l'actuel +Keep the labelled features fixed as the map moves. Garder fixes les entités étiquetées lorsque la carte se déplace. Keyboard Shortcuts Raccourcis clavier Keyboard shortcuts. Raccourcis clavier. Kilometers Kilomètres Label Étiquette Label Class Classe d'étiquettes +Label Distance Range Plage de distance des étiquettes Label Field Champ d'étiquette +Label Placement Placement des étiquettes +Label Visibility Range Plage de visibilité des étiquettes Labeling Étiquetage Lagoon Lagon Lambert Cylindrical Equal Area Cylindrique équivalente de Lambert @@ -337,6 +366,7 @@ Layer Couche Layer From\nSelection Couche depuis\nla sélection Layers Couches Layers and Table Views Couches et vues de table +Left Gauche LIKE LIKE Limit which features draw with a SQL expression. Limiter les entités dessinées avec une expression SQL. Line color Couleur de ligne @@ -351,6 +381,7 @@ Locate GeoLibre Runner Localiser l'exécuteur GeoLibre Locate the GeoLibre runner Localiser l'exécuteur GeoLibre Locate… Localiser… Location Localisation +Lock Verrouiller Long Entier long Longitude (X) Longitude (X) Major Lakes Grands lacs @@ -406,6 +437,7 @@ Next Suivant Next Extent Emprise suivante No Non No bookmarks yet Aucun signet pour l'instant +No Pop-ups Aucune fenêtre contextuelle No standalone tables Aucune table autonome NoData NoData None Aucun @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Se déplacer vers une longitude/latitude. Pan with the mouse, zoom with the wheel and click features to see their attributes. Déplacez avec la souris, zoomez avec la molette et cliquez sur des entités pour voir leurs attributs. Paper Papier Parent folder Dossier parent +Paste Coller +Paste copied features into the selected layer, or as a new layer. Coller les entités copiées dans la couche sélectionnée ou comme nouvelle couche. +Paste Special Collage spécial +Paste Special (as a new layer) Collage spécial (comme nouvelle couche) +Pause Suspendre Percent Clip Découpage en pourcentage Pixel Pixel Pixel type Type de pixel +Placement Placement PNG image Image PNG Point Point Polar, conformal: Antarctica and the Southern Ocean. Polaire, conforme : l'Antarctique et l'océan Austral. Polar, conformal: the Arctic and the northern lands. Polaire, conforme : l'Arctique et les terres du nord. Polygon Polygone Polyline Polyligne +Pop-up Mode Mode des fenêtres contextuelles +Pop-ups Fenêtres contextuelles Populated Places Lieux habités Previous Précédent Previous Extent Emprise précédente @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Réinitialiser la luminosité, le contrast RGB RVB Ribbon feature coverage: {done} of {total} features ({pct}%). Couverture des fonctions du ruban : {done} sur {total} fonctions ({pct} %). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Parité du ruban : {done} fonctions du ruban sur {total} ont une commande RustGIS. +Right Droite Robinson Robinson Run Exécuter Run Tool Exécuter l'outil @@ -545,8 +586,10 @@ Select Rows Sélectionner des lignes Select rows with a SQL expression. Sélectionner des lignes avec une expression SQL. Select Subset From Current Selection Sélectionner un sous-ensemble de la sélection courante Selectable Sélectionnable +Selectable Layers Couches sélectionnables Selected Sélectionnées Selected Features: {n} Entités sélectionnées : {n} +Selected in Contents Sélectionnées dans Contenu Selected only Sélection uniquement Selecting Features Sélection d'entités Selection Sélection @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Afficher ou masquer le volet Catalogue. Show or hide the Contents pane. Afficher ou masquer le volet Contenu. Show or hide the Geoprocessing pane. Afficher ou masquer le volet Géotraitement. Show or hide the layer. Afficher ou masquer la couche. +Show the labels that don't fit, in red. Afficher en rouge les étiquettes qui ne tiennent pas. Show the map as a 3D globe, or as a flat map again. Afficher la carte sous forme de globe 3D, ou de nouveau à plat. Show the Symbology pane for the selected layer. Afficher le volet Symbologie de la couche sélectionnée. Simplify Simplifier @@ -586,6 +630,7 @@ Statistics Statistiques Statistics Field Champ statistique Status Bar Barre d'état Std. Dev. Écart type +Stop drawing labels, for faster navigation. Arrêter de dessiner les étiquettes pour une navigation plus rapide. Stretch Étirement Stretch\nType Type\nd'étirement Stretch Type Type d'étirement @@ -622,6 +667,7 @@ Toolbox Boîte à outils Toolboxes Boîtes à outils Tools Outils Tools you run appear here. Les outils exécutés apparaissent ici. +Topmost Layer Couche supérieure Total {total} · Segment {segment} Total {total} · Segment {segment} Transparency Transparence Triangle Triangle @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Expression valide · {n} lignes correspond Vector and raster data Données vecteur et raster Version {version} Version {version} View Affichage +View Unplaced Voir non placées View › Windows Affichage › Fenêtres Visibility Visibilité Visibility Range Plage de visibilité Visible Visible +Visible Layers Couches visibles Web Mercator Web Mercator Website Site web Welcome to RustGIS Bienvenue dans RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Globe WGS 84 / Web Mercator WGS 84 / Web Mercator Where Où Where Clause Clause WHERE +Where labels sit relative to their features. Position des étiquettes par rapport à leurs entités. Windows Fenêtres Winkel Tripel Winkel Tripel World Monde diff --git a/crates/ui-egui/src/i18n/id.tsv b/crates/ui-egui/src/i18n/id.tsv index d386c8a..ac10575 100644 --- a/crates/ui-egui/src/i18n/id.tsv +++ b/crates/ui-egui/src/i18n/id.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About Tentang About RustGIS Tentang RustGIS About RustGIS. Tentang RustGIS. +Above Atas +Above Left Kiri Atas +Above Right Kanan Atas Activate Map Aktifkan Peta Add Tambah Add\nData Tambah\nData @@ -56,6 +59,9 @@ Band {n} Band {n} Bands Band Basemap Peta dasar Basemaps Peta dasar +Below Bawah +Below Left Kiri Bawah +Below Right Kanan Bawah Bilinear Bilinear Blank Kosong Blue Biru @@ -85,6 +91,7 @@ Case Field Kolom Kasus Catalog Katalog Catalog\nPane Panel\nKatalog Cell size Ukuran sel +Centered Tengah Change the map's backdrop. Ubah latar belakang peta. Change the map's coordinate system Ubah sistem koordinat peta Choose a band combination to display the raster layer. Pilih kombinasi band untuk menampilkan layer raster. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Pilih cara peta datar menampilkan Bu Choose how the layer is drawn. Pilih cara layer digambar. Choose how the raster is drawn. Pilih cara raster digambar. Choose the interface language. Pilih bahasa antarmuka. +Choose which layers a click identifies. Pilih layer mana yang diidentifikasi oleh klik. Circle Lingkaran Classes Kelas Classify Klasifikasi Clear Bersihkan Clear\nLimits Hapus\nBatas Clear History Bersihkan Riwayat +Clear Limits Hapus Batas Clear Selection Bersihkan Seleksi Clear selection Bersihkan seleksi Clear the selection in every layer. Bersihkan seleksi di setiap layer. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Klik untuk menambah ver Click to switch between decimal degrees and DMS Klik untuk beralih antara derajat desimal dan DMS Clip Potong (Clip) Clip Features Potong Fitur +Clipboard Papan Klip Close Tutup Close (Esc) Tutup (Esc) Close Table Tutup Tabel Close table Tutup tabel +Closest Terdekat Collapse or expand the ribbon Ciutkan atau perluas ribbon Collapse the ribbon (Ctrl+F1) Ciutkan ribbon (Ctrl+F1) Color Warna @@ -133,11 +144,20 @@ Compute a field's values. Hitung nilai suatu kolom. Contents Konten Contrast Kontras Conversion Konversi +Convert Konversi +Convert the selected layer's labels into an annotation layer. Konversi label layer terpilih menjadi layer anotasi. +Convert To Annotation Konversi ke Anotasi Coordinate System Sistem Koordinat Coordinate system Sistem koordinat Coordinate System… Sistem Koordinat… +Copied {path} {path} disalin Copies the (selected) features of a layer to a new layer. Menyalin fitur (terpilih) dari suatu layer ke layer baru. +Copy Salin Copy Coordinates Salin Koordinat +Copy Path Salin Path +Copy the selected features (also as GeoJSON text). Salin fitur terpilih (juga sebagai teks GeoJSON). +Copy the selected features and delete them. Salin fitur terpilih lalu hapus. +Copy the selected layer's data source path. Salin path sumber data layer terpilih. Couldn't download the font for {language}; pick the language again to retry. Tidak dapat mengunduh font untuk {language}; pilih bahasa lagi untuk mencoba ulang. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Jumlah, total, rata-rata, min, maks, dan simpangan baku suatu kolom, opsional per kolom kasus. Countries, cities, rivers and lakes Negara, kota, sungai, dan danau @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Proyek Saat Ini +Cut Potong Dark\nMode Mode\nGelap Data Data Data Design Desain Data @@ -193,6 +214,7 @@ Drag / middle-drag Seret / seret tombol tengah Drag a box or click to zoom in Seret kotak atau klik untuk memperbesar Drag a box to zoom into. Seret kotak untuk diperbesar. Draw a halo around label text. Gambar halo di sekitar teks label. +Draw labels at every scale and distance. Gambar label di setiap skala dan jarak. Draw new features in the selected layer. Double-click to finish lines and polygons. Gambar fitur baru di layer terpilih. Klik ganda untuk menyelesaikan garis dan poligon. Draw the layer at every scale. Gambar layer pada semua skala. Drawing Penggambaran @@ -243,6 +265,7 @@ Expression Ekspresi Extract Ekstrak Extracts the parts of input features that fall inside clip polygons. Mengekstrak bagian fitur masukan yang berada di dalam poligon pemotong. Failed Gagal +Farthest Terjauh Feature Fitur Feature\nTo Point Fitur\nke Titik Feature Layer Layer Fitur @@ -296,6 +319,8 @@ Group Option Opsi Grup Halo Halo Harbour (qualitative) Pelabuhan (kualitatif) Help Bantuan +Hide labels when the viewer is closer than this. Sembunyikan label saat penampil lebih dekat dari nilai ini. +Hide labels when the viewer is farther than this. Sembunyikan label saat penampil lebih jauh dari nilai ini. Histogram Equalize Ekualisasi Histogram History Riwayat Home Home @@ -321,12 +346,16 @@ Invert color scheme Balik skema warna Invert the selection. Balik seleksi. IS NULL IS NULL keep current biarkan saat ini +Keep the labelled features fixed as the map moves. Pertahankan fitur berlabel tetap saat peta bergerak. Keyboard Shortcuts Pintasan Keyboard Keyboard shortcuts. Pintasan keyboard. Kilometers Kilometer Label Label Label Class Kelas Label +Label Distance Range Rentang Jarak Label Label Field Kolom Label +Label Placement Penempatan Label +Label Visibility Range Rentang Visibilitas Label Labeling Pelabelan Lagoon Laguna Lambert Cylindrical Equal Area Silinder Luas Sama Lambert @@ -337,6 +366,7 @@ Layer Layer Layer From\nSelection Layer dari\nSeleksi Layers Layer Layers and Table Views Layer dan Tampilan Tabel +Left Kiri LIKE LIKE Limit which features draw with a SQL expression. Batasi fitur yang digambar dengan ekspresi SQL. Line color Warna garis @@ -351,6 +381,7 @@ Locate GeoLibre Runner Temukan runner GeoLibre Locate the GeoLibre runner Temukan runner GeoLibre Locate… Temukan… Location Lokasi +Lock Kunci Long Long Longitude (X) Bujur (X) Major Lakes Danau Utama @@ -406,6 +437,7 @@ Next Berikutnya Next Extent Cakupan Berikutnya No Tidak No bookmarks yet Belum ada penanda +No Pop-ups Tanpa Pop-up No standalone tables Tidak ada tabel mandiri NoData NoData None Tidak ada @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Geser ke bujur/lintang. Pan with the mouse, zoom with the wheel and click features to see their attributes. Geser dengan tetikus, zoom dengan roda, dan klik fitur untuk melihat atributnya. Paper Kertas Parent folder Folder induk +Paste Tempel +Paste copied features into the selected layer, or as a new layer. Tempel fitur yang disalin ke layer terpilih, atau sebagai layer baru. +Paste Special Tempel Khusus +Paste Special (as a new layer) Tempel Khusus (sebagai layer baru) +Pause Jeda Percent Clip Potong Persen Pixel Piksel Pixel type Tipe piksel +Placement Penempatan PNG image Gambar PNG Point Titik Polar, conformal: Antarctica and the Southern Ocean. Kutub, konformal: Antarktika dan Samudra Selatan. Polar, conformal: the Arctic and the northern lands. Kutub, konformal: Arktik dan daratan utara. Polygon Poligon Polyline Polyline +Pop-up Mode Mode Pop-up +Pop-ups Pop-up Populated Places Tempat Berpenduduk Previous Sebelumnya Previous Extent Cakupan Sebelumnya @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Atur ulang kecerahan, kontras, dan gamma. RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Cakupan fitur ribbon: {done} dari {total} fitur ({pct}%). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Paritas ribbon: {done} dari {total} fitur ribbon memiliki perintah RustGIS. +Right Kanan Robinson Robinson Run Jalankan Run Tool Jalankan Alat @@ -545,8 +586,10 @@ Select Rows Pilih Baris Select rows with a SQL expression. Pilih baris dengan ekspresi SQL. Select Subset From Current Selection Pilih Subset dari Seleksi Saat Ini Selectable Dapat dipilih +Selectable Layers Layer yang Dapat Dipilih Selected Terpilih Selected Features: {n} Fitur Terpilih: {n} +Selected in Contents Terpilih di Konten Selected only Hanya yang terpilih Selecting Features Memilih Fitur Selection Seleksi @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Tampilkan atau sembunyikan panel Katalog. Show or hide the Contents pane. Tampilkan atau sembunyikan panel Konten. Show or hide the Geoprocessing pane. Tampilkan atau sembunyikan panel Geoprosesing. Show or hide the layer. Tampilkan atau sembunyikan layer. +Show the labels that don't fit, in red. Tampilkan label yang tidak muat dengan warna merah. Show the map as a 3D globe, or as a flat map again. Tampilkan peta sebagai globe 3D, atau kembali sebagai peta datar. Show the Symbology pane for the selected layer. Tampilkan panel Simbologi untuk layer terpilih. Simplify Sederhanakan @@ -586,6 +630,7 @@ Statistics Statistik Statistics Field Kolom Statistik Status Bar Bilah Status Std. Dev. Simp. Baku +Stop drawing labels, for faster navigation. Berhenti menggambar label agar navigasi lebih cepat. Stretch Peregangan Stretch\nType Tipe\nPeregangan Stretch Type Tipe Peregangan @@ -622,6 +667,7 @@ Toolbox Kotak Alat Toolboxes Kotak Alat Tools Alat Tools you run appear here. Alat yang Anda jalankan muncul di sini. +Topmost Layer Layer Teratas Total {total} · Segment {segment} Total {total} · Segmen {segment} Transparency Transparansi Triangle Segitiga @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Ekspresi valid · {n} baris cocok Vector and raster data Data vektor dan raster Version {version} Versi {version} View Tampilan +View Unplaced Lihat Tidak Terpasang View › Windows Tampilan › Jendela Visibility Visibilitas Visibility Range Rentang Visibilitas Visible Terlihat +Visible Layers Layer Terlihat Web Mercator Web Mercator Website Situs web Welcome to RustGIS Selamat datang di RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Globe WGS 84 / Web Mercator WGS 84 / Web Mercator Where Where Where Clause Klausa Where +Where labels sit relative to their features. Posisi label relatif terhadap fiturnya. Windows Jendela Winkel Tripel Winkel Tripel World Dunia diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index 595d888..f8a61ba 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About Informazioni About RustGIS Informazioni su RustGIS About RustGIS. Informazioni su RustGIS. +Above Sopra +Above Left Sopra a sinistra +Above Right Sopra a destra Activate Map Attiva mappa Add Aggiungi Add\nData Aggiungi\ndati @@ -56,6 +59,9 @@ Band {n} Banda {n} Bands Bande Basemap Mappa di base Basemaps Mappe di base +Below Sotto +Below Left Sotto a sinistra +Below Right Sotto a destra Bilinear Bilineare Blank Vuota Blue Blu @@ -85,6 +91,7 @@ Case Field Campo di raggruppamento Catalog Catalogo Catalog\nPane Pannello\nCatalogo Cell size Dimensione cella +Centered Centrato Change the map's backdrop. Cambia lo sfondo della mappa. Change the map's coordinate system Cambia il sistema di coordinate della mappa Choose a band combination to display the raster layer. Scegli una combinazione di bande per visualizzare il layer raster. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Scegli come la mappa piana rappresen Choose how the layer is drawn. Scegli come viene disegnato il layer. Choose how the raster is drawn. Scegli come viene disegnato il raster. Choose the interface language. Scegli la lingua dell'interfaccia. +Choose which layers a click identifies. Scegli quali layer identifica un clic. Circle Cerchio Classes Classi Classify Classifica Clear Cancella Clear\nLimits Cancella\nlimiti Clear History Cancella cronologia +Clear Limits Cancella limiti Clear Selection Cancella selezione Clear selection Cancella selezione Clear the selection in every layer. Cancella la selezione in tutti i layer. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Clic per aggiungere ver Click to switch between decimal degrees and DMS Fai clic per passare da gradi decimali a GMS Clip Ritaglia Clip Features Ritaglia elementi +Clipboard Appunti Close Chiudi Close (Esc) Chiudi (Esc) Close Table Chiudi tabella Close table Chiudi tabella +Closest Più vicina Collapse or expand the ribbon Comprimi o espandi la barra multifunzione Collapse the ribbon (Ctrl+F1) Comprimi la barra multifunzione (Ctrl+F1) Color Colore @@ -133,11 +144,20 @@ Compute a field's values. Calcola i valori di un campo. Contents Contenuti Contrast Contrasto Conversion Conversione +Convert Converti +Convert the selected layer's labels into an annotation layer. Converti le etichette del layer selezionato in un layer di annotazioni. +Convert To Annotation Converti in annotazioni Coordinate System Sistema di coordinate Coordinate system Sistema di coordinate Coordinate System… Sistema di coordinate… +Copied {path} Copiato {path} Copies the (selected) features of a layer to a new layer. Copia gli elementi (selezionati) di un layer in un nuovo layer. +Copy Copia Copy Coordinates Copia coordinate +Copy Path Copia percorso +Copy the selected features (also as GeoJSON text). Copia gli elementi selezionati (anche come testo GeoJSON). +Copy the selected features and delete them. Copia gli elementi selezionati ed eliminali. +Copy the selected layer's data source path. Copia il percorso della sorgente dati del layer selezionato. Couldn't download the font for {language}; pick the language again to retry. Impossibile scaricare il carattere per {language}; seleziona di nuovo la lingua per riprovare. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Conteggio, somma, media, min, max e deviazione standard di un campo, facoltativamente per campo di raggruppamento. Countries, cities, rivers and lakes Paesi, città, fiumi e laghi @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Progetto corrente +Cut Taglia Dark\nMode Modalità\nscura Data Dati Data Design Struttura dati @@ -193,6 +214,7 @@ Drag / middle-drag Trascina / trascina col tasto centrale Drag a box or click to zoom in Trascina un riquadro o fai clic per ingrandire Drag a box to zoom into. Trascina un riquadro da ingrandire. Draw a halo around label text. Disegna un alone attorno al testo dell'etichetta. +Draw labels at every scale and distance. Disegna le etichette a ogni scala e distanza. Draw new features in the selected layer. Double-click to finish lines and polygons. Disegna nuovi elementi nel layer selezionato. Doppio clic per terminare linee e poligoni. Draw the layer at every scale. Disegna il layer a ogni scala. Drawing Disegno @@ -243,6 +265,7 @@ Expression Espressione Extract Estrai Extracts the parts of input features that fall inside clip polygons. Estrae le parti degli elementi di input che ricadono nei poligoni di ritaglio. Failed Non riuscito +Farthest Più lontana Feature Elemento Feature\nTo Point Da elemento\na punto Feature Layer Layer di elementi @@ -296,6 +319,8 @@ Group Option Opzione di raggruppamento Halo Alone Harbour (qualitative) Porto (qualitativa) Help Aiuto +Hide labels when the viewer is closer than this. Nascondi le etichette quando l'osservatore è più vicino di questo valore. +Hide labels when the viewer is farther than this. Nascondi le etichette quando l'osservatore è più lontano di questo valore. Histogram Equalize Equalizzazione istogramma History Cronologia Home Home @@ -321,12 +346,16 @@ Invert color scheme Inverti schema di colori Invert the selection. Inverti la selezione. IS NULL IS NULL keep current mantieni attuale +Keep the labelled features fixed as the map moves. Mantieni fissi gli elementi etichettati quando la mappa si sposta. Keyboard Shortcuts Scorciatoie da tastiera Keyboard shortcuts. Scorciatoie da tastiera. Kilometers Chilometri Label Etichetta Label Class Classe di etichette +Label Distance Range Intervallo di distanza etichette Label Field Campo etichetta +Label Placement Posizionamento etichette +Label Visibility Range Intervallo di visibilità etichette Labeling Etichettatura Lagoon Laguna Lambert Cylindrical Equal Area Cilindrica equivalente di Lambert @@ -337,6 +366,7 @@ Layer Layer Layer From\nSelection Layer da\nselezione Layers Layer Layers and Table Views Layer e viste tabella +Left Sinistra LIKE LIKE Limit which features draw with a SQL expression. Limita gli elementi disegnati con un'espressione SQL. Line color Colore linea @@ -351,6 +381,7 @@ Locate GeoLibre Runner Individua l'esecutore GeoLibre Locate the GeoLibre runner Individua l'esecutore GeoLibre Locate… Individua… Location Posizione +Lock Blocca Long Intero lungo Longitude (X) Longitudine (X) Major Lakes Laghi principali @@ -406,6 +437,7 @@ Next Successivo Next Extent Estensione successiva No No No bookmarks yet Ancora nessun segnalibro +No Pop-ups Nessun popup No standalone tables Nessuna tabella autonoma NoData NoData None Nessuno @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Sposta la vista su una longitudine/latitudine. Pan with the mouse, zoom with the wheel and click features to see their attributes. Sposta la vista con il mouse, ingrandisci con la rotellina e fai clic sugli elementi per vederne gli attributi. Paper Carta Parent folder Cartella superiore +Paste Incolla +Paste copied features into the selected layer, or as a new layer. Incolla gli elementi copiati nel layer selezionato o come nuovo layer. +Paste Special Incolla speciale +Paste Special (as a new layer) Incolla speciale (come nuovo layer) +Pause Pausa Percent Clip Ritaglio percentuale Pixel Pixel Pixel type Tipo di pixel +Placement Posizionamento PNG image Immagine PNG Point Punto Polar, conformal: Antarctica and the Southern Ocean. Polare, conforme: l'Antartide e l'Oceano Australe. Polar, conformal: the Arctic and the northern lands. Polare, conforme: l'Artico e le terre settentrionali. Polygon Poligono Polyline Polilinea +Pop-up Mode Modalità popup +Pop-ups Popup Populated Places Località abitate Previous Precedente Previous Extent Estensione precedente @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Reimposta luminosità, contrasto e gamma. RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Copertura funzioni della barra multifunzione: {done} di {total} funzioni ({pct}%). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Parità della barra multifunzione: {done} di {total} funzioni hanno un comando RustGIS. +Right Destra Robinson Robinson Run Esegui Run Tool Esegui strumento @@ -545,8 +586,10 @@ Select Rows Seleziona righe Select rows with a SQL expression. Seleziona righe con un'espressione SQL. Select Subset From Current Selection Seleziona sottoinsieme dalla selezione corrente Selectable Selezionabile +Selectable Layers Layer selezionabili Selected Selezionati Selected Features: {n} Elementi selezionati: {n} +Selected in Contents Selezionati in Contenuti Selected only Solo selezionati Selecting Features Selezione di elementi Selection Selezione @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Mostra o nascondi il pannello Catalogo. Show or hide the Contents pane. Mostra o nascondi il pannello Contenuti. Show or hide the Geoprocessing pane. Mostra o nascondi il pannello Geoprocessing. Show or hide the layer. Mostra o nascondi il layer. +Show the labels that don't fit, in red. Mostra in rosso le etichette che non trovano posto. Show the map as a 3D globe, or as a flat map again. Mostra la mappa come globo 3D, o di nuovo come mappa piana. Show the Symbology pane for the selected layer. Mostra il pannello Simbologia per il layer selezionato. Simplify Semplifica @@ -586,6 +630,7 @@ Statistics Statistiche Statistics Field Campo statistico Status Bar Barra di stato Std. Dev. Dev. std. +Stop drawing labels, for faster navigation. Smetti di disegnare le etichette per una navigazione più veloce. Stretch Stretch Stretch\nType Tipo di\nstretch Stretch Type Tipo di stretch @@ -622,6 +667,7 @@ Toolbox Casella degli strumenti Toolboxes Caselle degli strumenti Tools Strumenti Tools you run appear here. Gli strumenti eseguiti appaiono qui. +Topmost Layer Layer superiore Total {total} · Segment {segment} Totale {total} · Segmento {segment} Transparency Trasparenza Triangle Triangolo @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Espressione valida · {n} righe corrispond Vector and raster data Dati vettoriali e raster Version {version} Versione {version} View Visualizza +View Unplaced Mostra non posizionate View › Windows Visualizza › Finestre Visibility Visibilità Visibility Range Intervallo di visibilità Visible Visibile +Visible Layers Layer visibili Web Mercator Web Mercator Website Sito web Welcome to RustGIS Benvenuto in RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Globo WGS 84 / Web Mercator WGS 84 / Web Mercator Where Dove Where Clause Clausola where +Where labels sit relative to their features. Dove si trovano le etichette rispetto ai loro elementi. Windows Finestre Winkel Tripel Winkel Tripel World Mondo diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index 7edf8ad..4a7cb77 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About バージョン情報 About RustGIS RustGIS について About RustGIS. RustGIS について。 +Above 上 +Above Left 左上 +Above Right 右上 Activate Map マップをアクティブ化 Add 追加 Add\nData データの\n追加 @@ -56,6 +59,9 @@ Band {n} バンド {n} Bands バンド Basemap ベースマップ Basemaps ベースマップ +Below 下 +Below Left 左下 +Below Right 右下 Bilinear 共一次内挿 Blank 空白 Blue 青 @@ -85,6 +91,7 @@ Case Field ケース フィールド Catalog カタログ Catalog\nPane カタログ\nウィンドウ Cell size セル サイズ +Centered 中央 Change the map's backdrop. マップの背景を変更します。 Change the map's coordinate system マップの座標系を変更 Choose a band combination to display the raster layer. ラスター レイヤーを表示するバンドの組み合わせを選択します。 @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. 平面マップで地球をどのよ Choose how the layer is drawn. レイヤーの描画方法を選択します。 Choose how the raster is drawn. ラスターの描画方法を選択します。 Choose the interface language. インターフェイスの言語を選択します。 +Choose which layers a click identifies. クリックで個別属性を表示するレイヤーを選択します。 Circle 円 Classes クラス Classify 分類 Clear クリア Clear\nLimits 制限の\nクリア Clear History 履歴のクリア +Clear Limits 制限のクリア Clear Selection 選択の解除 Clear selection 選択の解除 Clear the selection in every layer. すべてのレイヤーの選択を解除します。 @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line クリックで頂点 Click to switch between decimal degrees and DMS クリックで十進経緯度と度分秒を切り替え Clip クリップ Clip Features フィーチャのクリップ +Clipboard クリップボード Close 閉じる Close (Esc) 閉じる (Esc) Close Table テーブルを閉じる Close table テーブルを閉じる +Closest 最近距離 Collapse or expand the ribbon リボンの折りたたみ/展開 Collapse the ribbon (Ctrl+F1) リボンを折りたたむ (Ctrl+F1) Color 色 @@ -133,11 +144,20 @@ Compute a field's values. フィールドの値を計算します。 Contents コンテンツ Contrast コントラスト Conversion 変換 +Convert 変換 +Convert the selected layer's labels into an annotation layer. 選択したレイヤーのラベルをアノテーション レイヤーに変換します。 +Convert To Annotation アノテーションに変換 Coordinate System 座標系 Coordinate system 座標系 Coordinate System… 座標系… +Copied {path} {path} をコピーしました Copies the (selected) features of a layer to a new layer. レイヤーの(選択された)フィーチャを新しいレイヤーにコピーします。 +Copy コピー Copy Coordinates 座標のコピー +Copy Path パスのコピー +Copy the selected features (also as GeoJSON text). 選択したフィーチャをコピーします(GeoJSON テキストとしても)。 +Copy the selected features and delete them. 選択したフィーチャをコピーして削除します。 +Copy the selected layer's data source path. 選択したレイヤーのデータ ソース パスをコピーします。 Couldn't download the font for {language}; pick the language again to retry. {language} のフォントをダウンロードできませんでした。もう一度言語を選択して再試行してください。 Count, sum, mean, min, max and standard deviation of a field, optionally per case field. フィールドの個数、合計、平均、最小、最大、標準偏差。必要に応じてケース フィールドごとに集計します。 Countries, cities, rivers and lakes 国、都市、河川、湖沼 @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project 現在のプロジェクト +Cut 切り取り Dark\nMode ダーク\nモード Data データ Data Design データ設計 @@ -193,6 +214,7 @@ Drag / middle-drag ドラッグ / 中ボタン ドラッグ Drag a box or click to zoom in ボックスをドラッグまたはクリックして拡大 Drag a box to zoom into. ボックスをドラッグして拡大します。 Draw a halo around label text. ラベル テキストの周囲にハローを描画します。 +Draw labels at every scale and distance. すべての縮尺と距離でラベルを描画します。 Draw new features in the selected layer. Double-click to finish lines and polygons. 選択したレイヤーに新しいフィーチャを描画します。ラインとポリゴンはダブルクリックで終了します。 Draw the layer at every scale. すべての縮尺でレイヤーを描画します。 Drawing 描画 @@ -243,6 +265,7 @@ Expression 式 Extract 抽出 Extracts the parts of input features that fall inside clip polygons. 入力フィーチャのうち、クリップ ポリゴン内に含まれる部分を抽出します。 Failed 失敗 +Farthest 最遠距離 Feature フィーチャ Feature\nTo Point フィーチャ\n→ポイント Feature Layer フィーチャ レイヤー @@ -296,6 +319,8 @@ Group Option グループ オプション Halo ハロー Harbour (qualitative) 港(定性) Help ヘルプ +Hide labels when the viewer is closer than this. 視点がこれより近いときにラベルを非表示にします。 +Hide labels when the viewer is farther than this. 視点がこれより遠いときにラベルを非表示にします。 Histogram Equalize ヒストグラム均等化 History 履歴 Home ホーム @@ -321,12 +346,16 @@ Invert color scheme 配色を反転 Invert the selection. 選択を反転します。 IS NULL IS NULL keep current 現在のまま +Keep the labelled features fixed as the map moves. マップの移動中もラベル付きフィーチャを固定します。 Keyboard Shortcuts キーボード ショートカット Keyboard shortcuts. キーボード ショートカット。 Kilometers キロメートル Label ラベル Label Class ラベル クラス +Label Distance Range ラベル距離範囲 Label Field ラベル フィールド +Label Placement ラベルの配置 +Label Visibility Range ラベル表示範囲 Labeling ラベリング Lagoon ラグーン Lambert Cylindrical Equal Area ランベルト正積円筒図法 @@ -337,6 +366,7 @@ Layer レイヤー Layer From\nSelection 選択から\nレイヤー作成 Layers レイヤー Layers and Table Views レイヤーとテーブル ビュー +Left 左 LIKE LIKE Limit which features draw with a SQL expression. SQL 式で描画するフィーチャを制限します。 Line color ラインの色 @@ -351,6 +381,7 @@ Locate GeoLibre Runner GeoLibre ランナーの場所を指定 Locate the GeoLibre runner GeoLibre ランナーの場所を指定 Locate… 場所を指定… Location 場所 +Lock ロック Long 長整数 Longitude (X) 経度(X) Major Lakes 主要な湖沼 @@ -406,6 +437,7 @@ Next 次へ Next Extent 次の範囲 No いいえ No bookmarks yet ブックマークはまだありません +No Pop-ups ポップアップなし No standalone tables スタンドアロン テーブルはありません NoData NoData None なし @@ -446,15 +478,23 @@ Pan to a longitude/latitude. 経度/緯度に画面移動します。 Pan with the mouse, zoom with the wheel and click features to see their attributes. マウスで画面移動、ホイールでズームし、フィーチャをクリックすると属性が表示されます。 Paper 紙 Parent folder 親フォルダー +Paste 貼り付け +Paste copied features into the selected layer, or as a new layer. コピーしたフィーチャを選択したレイヤーまたは新しいレイヤーとして貼り付けます。 +Paste Special 形式を選択して貼り付け +Paste Special (as a new layer) 形式を選択して貼り付け(新しいレイヤーとして) +Pause 一時停止 Percent Clip パーセント クリップ Pixel ピクセル Pixel type ピクセル タイプ +Placement 配置 PNG image PNG 画像 Point ポイント Polar, conformal: Antarctica and the Southern Ocean. 極域、正角: 南極大陸と南極海。 Polar, conformal: the Arctic and the northern lands. 極域、正角: 北極圏と北方の陸地。 Polygon ポリゴン Polyline ポリライン +Pop-up Mode ポップアップ モード +Pop-ups ポップアップ Populated Places 人口集中地 Previous 前へ Previous Extent 前の範囲 @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. 明るさ、コントラスト、ガンマ RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). リボン機能のカバー率:{total} 件中 {done} 件の機能({pct}%)。 Ribbon parity: {done} of {total} ribbon features have a RustGIS command. リボンの対応状況:{total} 件のリボン機能のうち {done} 件に RustGIS コマンドがあります。 +Right 右 Robinson ロビンソン図法 Run 実行 Run Tool ツールの実行 @@ -545,8 +586,10 @@ Select Rows 行の選択 Select rows with a SQL expression. SQL 式で行を選択します。 Select Subset From Current Selection 現在の選択から絞り込み Selectable 選択可能 +Selectable Layers 選択可能レイヤー Selected 選択済み Selected Features: {n} 選択フィーチャ:{n} +Selected in Contents コンテンツで選択中 Selected only 選択のみ Selecting Features フィーチャの選択 Selection 選択 @@ -568,6 +611,7 @@ Show or hide the Catalog pane. カタログ ウィンドウの表示/非表示 Show or hide the Contents pane. コンテンツ ウィンドウの表示/非表示を切り替えます。 Show or hide the Geoprocessing pane. ジオプロセシング ウィンドウの表示/非表示を切り替えます。 Show or hide the layer. レイヤーの表示/非表示を切り替えます。 +Show the labels that don't fit, in red. 配置できないラベルを赤で表示します。 Show the map as a 3D globe, or as a flat map again. マップを 3D の地球儀として表示するか、平面のマップに戻します。 Show the Symbology pane for the selected layer. 選択したレイヤーのシンボル ウィンドウを表示します。 Simplify 単純化 @@ -586,6 +630,7 @@ Statistics 統計 Statistics Field 統計フィールド Status Bar ステータス バー Std. Dev. 標準偏差 +Stop drawing labels, for faster navigation. ナビゲーションを速くするためにラベルの描画を停止します。 Stretch ストレッチ Stretch\nType ストレッチ\nタイプ Stretch Type ストレッチ タイプ @@ -622,6 +667,7 @@ Toolbox ツールボックス Toolboxes ツールボックス Tools ツール Tools you run appear here. 実行したツールがここに表示されます。 +Topmost Layer 最上位レイヤー Total {total} · Segment {segment} 合計 {total} · 区間 {segment} Transparency 透過表示 Triangle 三角形 @@ -640,10 +686,12 @@ Valid expression · {n} matching rows 有効な式 · 一致する行 {n} 件 Vector and raster data ベクター データとラスター データ Version {version} バージョン {version} View 表示 +View Unplaced 未配置の表示 View › Windows 表示 › ウィンドウ Visibility 表示設定 Visibility Range 表示縮尺範囲 Visible 表示 +Visible Layers 表示レイヤー Web Mercator Web メルカトル Website ウェブサイト Welcome to RustGIS RustGIS へようこそ @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / 地球儀 WGS 84 / Web Mercator WGS 84 / Web Mercator Where 条件 Where Clause WHERE 句 +Where labels sit relative to their features. フィーチャに対するラベルの位置。 Windows ウィンドウ Winkel Tripel ヴィンケル図法 World 世界 diff --git a/crates/ui-egui/src/i18n/ko.tsv b/crates/ui-egui/src/i18n/ko.tsv index 01148f8..d20ebc9 100644 --- a/crates/ui-egui/src/i18n/ko.tsv +++ b/crates/ui-egui/src/i18n/ko.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About 정보 About RustGIS RustGIS 정보 About RustGIS. RustGIS 정보. +Above 위 +Above Left 왼쪽 위 +Above Right 오른쪽 위 Activate Map 지도 활성화 Add 추가 Add\nData 데이터\n추가 @@ -56,6 +59,9 @@ Band {n} 밴드 {n} Bands 밴드 Basemap 배경지도 Basemaps 배경지도 +Below 아래 +Below Left 왼쪽 아래 +Below Right 오른쪽 아래 Bilinear 쌍선형 Blank 빈 지도 Blue 파랑 @@ -85,6 +91,7 @@ Case Field 케이스 필드 Catalog 카탈로그 Catalog\nPane 카탈로그\n창 Cell size 셀 크기 +Centered 가운데 Change the map's backdrop. 지도의 배경을 변경합니다. Change the map's coordinate system 지도 좌표계 변경 Choose a band combination to display the raster layer. 래스터 레이어를 표시할 밴드 조합을 선택합니다. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. 평면 지도가 지구를 표현하 Choose how the layer is drawn. 레이어를 그리는 방식을 선택합니다. Choose how the raster is drawn. 래스터를 그리는 방법을 선택합니다. Choose the interface language. 인터페이스 언어를 선택합니다. +Choose which layers a click identifies. 클릭으로 식별할 레이어를 선택합니다. Circle 원 Classes 클래스 Classify 분류 Clear 지우기 Clear\nLimits 제한\n지우기 Clear History 기록 지우기 +Clear Limits 제한 지우기 Clear Selection 선택 해제 Clear selection 선택 해제 Clear the selection in every layer. 모든 레이어의 선택을 해제합니다. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line 클릭하여 버텍스 Click to switch between decimal degrees and DMS 클릭하여 십진수 도와 도분초(DMS) 간 전환 Clip 자르기 Clip Features 피처 자르기 +Clipboard 클립보드 Close 닫기 Close (Esc) 닫기 (Esc) Close Table 테이블 닫기 Close table 테이블 닫기 +Closest 가장 가까움 Collapse or expand the ribbon 리본 축소 또는 확장 Collapse the ribbon (Ctrl+F1) 리본 축소 (Ctrl+F1) Color 색상 @@ -133,11 +144,20 @@ Compute a field's values. 필드 값을 계산합니다. Contents 목차 Contrast 대비 Conversion 변환 +Convert 변환 +Convert the selected layer's labels into an annotation layer. 선택한 레이어의 라벨을 주석 레이어로 변환합니다. +Convert To Annotation 주석으로 변환 Coordinate System 좌표계 Coordinate system 좌표계 Coordinate System… 좌표계… +Copied {path} {path} 복사됨 Copies the (selected) features of a layer to a new layer. 레이어의 (선택한) 피처를 새 레이어로 복사합니다. +Copy 복사 Copy Coordinates 좌표 복사 +Copy Path 경로 복사 +Copy the selected features (also as GeoJSON text). 선택한 피처를 복사합니다(GeoJSON 텍스트로도). +Copy the selected features and delete them. 선택한 피처를 복사하고 삭제합니다. +Copy the selected layer's data source path. 선택한 레이어의 데이터 원본 경로를 복사합니다. Couldn't download the font for {language}; pick the language again to retry. {language} 글꼴을 다운로드할 수 없습니다. 다시 시도하려면 언어를 다시 선택하세요. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. 필드의 개수, 합계, 평균, 최소값, 최대값 및 표준 편차를 계산하며, 선택적으로 케이스 필드별로 계산합니다. Countries, cities, rivers and lakes 국가, 도시, 하천 및 호수 @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project 현재 프로젝트 +Cut 잘라내기 Dark\nMode 다크\n모드 Data 데이터 Data Design 데이터 디자인 @@ -193,6 +214,7 @@ Drag / middle-drag 드래그 / 가운데 버튼 드래그 Drag a box or click to zoom in 상자를 드래그하거나 클릭하여 확대 Drag a box to zoom into. 확대할 상자를 드래그합니다. Draw a halo around label text. 라벨 텍스트 주위에 후광을 그립니다. +Draw labels at every scale and distance. 모든 축척과 거리에서 라벨을 그립니다. Draw new features in the selected layer. Double-click to finish lines and polygons. 선택한 레이어에 새 피처를 그립니다. 라인과 폴리곤은 더블클릭하여 완료합니다. Draw the layer at every scale. 모든 축척에서 레이어를 그립니다. Drawing 그리기 @@ -243,6 +265,7 @@ Expression 표현식 Extract 추출 Extracts the parts of input features that fall inside clip polygons. 입력 피처 중 자르기 폴리곤 안에 있는 부분을 추출합니다. Failed 실패 +Farthest 가장 멂 Feature 피처 Feature\nTo Point 피처를\n포인트로 Feature Layer 피처 레이어 @@ -296,6 +319,8 @@ Group Option 그룹 옵션 Halo 후광 Harbour (qualitative) 하버(정성적) Help 도움말 +Hide labels when the viewer is closer than this. 보는 위치가 이보다 가까우면 라벨을 숨깁니다. +Hide labels when the viewer is farther than this. 보는 위치가 이보다 멀면 라벨을 숨깁니다. Histogram Equalize 히스토그램 평활화 History 기록 Home Home @@ -321,12 +346,16 @@ Invert color scheme 색상표 반전 Invert the selection. 선택을 반전합니다. IS NULL IS NULL keep current 현재 값 유지 +Keep the labelled features fixed as the map moves. 지도가 움직여도 라벨이 표시된 피처를 고정합니다. Keyboard Shortcuts 키보드 단축키 Keyboard shortcuts. 키보드 단축키. Kilometers 킬로미터 Label 라벨 Label Class 라벨 클래스 +Label Distance Range 라벨 거리 범위 Label Field 라벨 필드 +Label Placement 라벨 배치 +Label Visibility Range 라벨 가시 범위 Labeling 라벨링 Lagoon 라군 Lambert Cylindrical Equal Area 램버트 원통 정적도법 @@ -337,6 +366,7 @@ Layer 레이어 Layer From\nSelection 선택에서\n레이어 Layers 레이어 Layers and Table Views 레이어 및 테이블 뷰 +Left 왼쪽 LIKE LIKE Limit which features draw with a SQL expression. SQL 표현식으로 그려질 피처를 제한합니다. Line color 선 색상 @@ -351,6 +381,7 @@ Locate GeoLibre Runner GeoLibre 실행기 찾기 Locate the GeoLibre runner GeoLibre 실행기 찾기 Locate… 찾기… Location 위치 +Lock 잠금 Long 정수 Longitude (X) 경도(X) Major Lakes 주요 호수 @@ -406,6 +437,7 @@ Next 다음 Next Extent 다음 범위 No 아니요 No bookmarks yet 아직 북마크가 없습니다 +No Pop-ups 팝업 없음 No standalone tables 독립 테이블 없음 NoData NoData None 없음 @@ -446,15 +478,23 @@ Pan to a longitude/latitude. 경도/위도로 이동합니다. Pan with the mouse, zoom with the wheel and click features to see their attributes. 마우스로 이동하고, 휠로 확대/축소하며, 피처를 클릭하여 속성을 확인합니다. Paper 종이 Parent folder 상위 폴더 +Paste 붙여넣기 +Paste copied features into the selected layer, or as a new layer. 복사한 피처를 선택한 레이어에 붙여넣거나 새 레이어로 붙여넣습니다. +Paste Special 선택하여 붙여넣기 +Paste Special (as a new layer) 선택하여 붙여넣기(새 레이어로) +Pause 일시 중지 Percent Clip 백분율 클립 Pixel 픽셀 Pixel type 픽셀 유형 +Placement 배치 PNG image PNG 이미지 Point 포인트 Polar, conformal: Antarctica and the Southern Ocean. 극지, 정각: 남극 대륙과 남극해. Polar, conformal: the Arctic and the northern lands. 극지, 정각: 북극과 북쪽 육지. Polygon 폴리곤 Polyline 폴리라인 +Pop-up Mode 팝업 모드 +Pop-ups 팝업 Populated Places 인구 밀집 지역 Previous 이전 Previous Extent 이전 범위 @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. 밝기, 대비 및 감마를 재설정합 RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). 리본 기능 지원 범위: {total}개 중 {done}개 기능({pct}%). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. 리본 대응: 리본 기능 {total}개 중 {done}개에 RustGIS 명령이 있습니다. +Right 오른쪽 Robinson 로빈슨 도법 Run 실행 Run Tool 도구 실행 @@ -545,8 +586,10 @@ Select Rows 행 선택 Select rows with a SQL expression. SQL 표현식으로 행을 선택합니다. Select Subset From Current Selection 현재 선택에서 하위 집합 선택 Selectable 선택 가능 +Selectable Layers 선택 가능한 레이어 Selected 선택됨 Selected Features: {n} 선택한 피처: {n} +Selected in Contents 목차에서 선택됨 Selected only 선택한 항목만 Selecting Features 피처 선택 Selection 선택 @@ -568,6 +611,7 @@ Show or hide the Catalog pane. 카탈로그 창을 표시하거나 숨깁니다. Show or hide the Contents pane. 목차 창을 표시하거나 숨깁니다. Show or hide the Geoprocessing pane. 지오프로세싱 창을 표시하거나 숨깁니다. Show or hide the layer. 레이어를 표시하거나 숨깁니다. +Show the labels that don't fit, in red. 맞지 않는 라벨을 빨간색으로 표시합니다. Show the map as a 3D globe, or as a flat map again. 지도를 3D 지구본으로 표시하거나 다시 평면 지도로 표시합니다. Show the Symbology pane for the selected layer. 선택한 레이어의 심볼 창을 표시합니다. Simplify 단순화 @@ -586,6 +630,7 @@ Statistics 통계 Statistics Field 통계 필드 Status Bar 상태 표시줄 Std. Dev. 표준편차 +Stop drawing labels, for faster navigation. 더 빠른 탐색을 위해 라벨 그리기를 중지합니다. Stretch 스트레치 Stretch\nType 스트레치\n유형 Stretch Type 스트레치 유형 @@ -622,6 +667,7 @@ Toolbox 도구 상자 Toolboxes 도구 상자 Tools 도구 Tools you run appear here. 실행한 도구가 여기에 표시됩니다. +Topmost Layer 최상위 레이어 Total {total} · Segment {segment} 전체 {total} · 구간 {segment} Transparency 투명도 Triangle 삼각형 @@ -640,10 +686,12 @@ Valid expression · {n} matching rows 유효한 표현식 · 일치하는 행 {n Vector and raster data 벡터 및 래스터 데이터 Version {version} 버전 {version} View 보기 +View Unplaced 배치 안 된 라벨 보기 View › Windows 보기 › 창 Visibility 가시성 Visibility Range 가시 범위 Visible 표시 +Visible Layers 표시 레이어 Web Mercator 웹 메르카토르 Website 웹사이트 Welcome to RustGIS RustGIS에 오신 것을 환영합니다 @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / 지구본 WGS 84 / Web Mercator WGS 84 / Web Mercator Where 조건 Where Clause WHERE 절 +Where labels sit relative to their features. 피처를 기준으로 라벨이 놓이는 위치입니다. Windows 창 Winkel Tripel 빙켈 트리펠 도법 World 세계 diff --git a/crates/ui-egui/src/i18n/nl.tsv b/crates/ui-egui/src/i18n/nl.tsv index 2d70910..4367003 100644 --- a/crates/ui-egui/src/i18n/nl.tsv +++ b/crates/ui-egui/src/i18n/nl.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About Over About RustGIS Over RustGIS About RustGIS. Over RustGIS. +Above Boven +Above Left Linksboven +Above Right Rechtsboven Activate Map Kaart activeren Add Toevoegen Add\nData Gegevens\ntoevoegen @@ -56,6 +59,9 @@ Band {n} Band {n} Bands Banden Basemap Basiskaart Basemaps Basiskaarten +Below Onder +Below Left Linksonder +Below Right Rechtsonder Bilinear Bilineair Blank Leeg Blue Blauw @@ -85,6 +91,7 @@ Case Field Groeperingsveld Catalog Catalogus Catalog\nPane Catalogus-\nvenster Cell size Celgrootte +Centered Gecentreerd Change the map's backdrop. De achtergrond van de kaart wijzigen. Change the map's coordinate system Het coördinatenstelsel van de kaart wijzigen Choose a band combination to display the raster layer. Kies een bandcombinatie om de rasterlaag weer te geven. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Kiezen hoe de platte kaart de aarde Choose how the layer is drawn. Kiezen hoe de laag wordt getekend. Choose how the raster is drawn. Kies hoe het raster wordt getekend. Choose the interface language. De interfacetaal kiezen. +Choose which layers a click identifies. Kiezen welke lagen een klik identificeert. Circle Cirkel Classes Klassen Classify Classificeren Clear Wissen Clear\nLimits Limieten\nwissen Clear History Geschiedenis wissen +Clear Limits Limieten wissen Clear Selection Selectie wissen Clear selection Selectie wissen Clear the selection in every layer. De selectie in alle lagen wissen. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Klik om hoekpunten toe Click to switch between decimal degrees and DMS Klik om te wisselen tussen decimale graden en GMS Clip Clippen Clip Features Objecten clippen +Clipboard Klembord Close Sluiten Close (Esc) Sluiten (Esc) Close Table Tabel sluiten Close table Tabel sluiten +Closest Dichtstbij Collapse or expand the ribbon Lint samenvouwen of uitvouwen Collapse the ribbon (Ctrl+F1) Lint samenvouwen (Ctrl+F1) Color Kleur @@ -133,11 +144,20 @@ Compute a field's values. De waarden van een veld berekenen. Contents Inhoud Contrast Contrast Conversion Conversie +Convert Converteren +Convert the selected layer's labels into an annotation layer. De labels van de geselecteerde laag converteren naar een annotatielaag. +Convert To Annotation Converteren naar annotatie Coordinate System Coördinatenstelsel Coordinate system Coördinatensysteem Coordinate System… Coördinatenstelsel… +Copied {path} {path} gekopieerd Copies the (selected) features of a layer to a new layer. Kopieert de (geselecteerde) objecten van een laag naar een nieuwe laag. +Copy Kopiëren Copy Coordinates Coördinaten kopiëren +Copy Path Pad kopiëren +Copy the selected features (also as GeoJSON text). De geselecteerde objecten kopiëren (ook als GeoJSON-tekst). +Copy the selected features and delete them. De geselecteerde objecten kopiëren en verwijderen. +Copy the selected layer's data source path. Het gegevensbronpad van de geselecteerde laag kopiëren. Couldn't download the font for {language}; pick the language again to retry. Kan het lettertype voor {language} niet downloaden; kies de taal opnieuw om het nog eens te proberen. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Aantal, som, gemiddelde, min, max en standaardafwijking van een veld, optioneel per groeperingsveld. Countries, cities, rivers and lakes Landen, steden, rivieren en meren @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Huidig project +Cut Knippen Dark\nMode Donkere\nmodus Data Gegevens Data Design Gegevensontwerp @@ -193,6 +214,7 @@ Drag / middle-drag Slepen / slepen met middelste knop Drag a box or click to zoom in Sleep een kader of klik om in te zoomen Drag a box to zoom into. Sleep een kader om op in te zoomen. Draw a halo around label text. Een halo rond de labeltekst tekenen. +Draw labels at every scale and distance. Labels op elke schaal en afstand tekenen. Draw new features in the selected layer. Double-click to finish lines and polygons. Nieuwe objecten tekenen in de geselecteerde laag. Dubbelklik om lijnen en polygonen te voltooien. Draw the layer at every scale. De laag op elke schaal tekenen. Drawing Tekenen @@ -243,6 +265,7 @@ Expression Expressie Extract Extraheren Extracts the parts of input features that fall inside clip polygons. Extraheert de delen van invoerobjecten die binnen de clippolygonen vallen. Failed Mislukt +Farthest Verst Feature Object Feature\nTo Point Object\nnaar punt Feature Layer Objectlaag @@ -296,6 +319,8 @@ Group Option Groeperingsoptie Halo Halo Harbour (qualitative) Haven (kwalitatief) Help Help +Hide labels when the viewer is closer than this. Labels verbergen wanneer de kijker dichterbij is. +Hide labels when the viewer is farther than this. Labels verbergen wanneer de kijker verder weg is. Histogram Equalize Histogram egaliseren History Geschiedenis Home Home @@ -321,12 +346,16 @@ Invert color scheme Kleurenschema omkeren Invert the selection. De selectie omkeren. IS NULL IS NULL keep current huidige behouden +Keep the labelled features fixed as the map moves. De gelabelde objecten vasthouden terwijl de kaart beweegt. Keyboard Shortcuts Sneltoetsen Keyboard shortcuts. Sneltoetsen. Kilometers Kilometer Label Label Label Class Labelklasse +Label Distance Range Labelafstandsbereik Label Field Labelveld +Label Placement Labelplaatsing +Label Visibility Range Labelzichtbaarheidsbereik Labeling Labels Lagoon Lagune Lambert Cylindrical Equal Area Lambert cilindrisch oppervlaktegetrouw @@ -337,6 +366,7 @@ Layer Laag Layer From\nSelection Laag uit\nselectie Layers Lagen Layers and Table Views Lagen en tabelweergaven +Left Links LIKE LIKE Limit which features draw with a SQL expression. Beperken welke objecten worden getekend met een SQL-expressie. Line color Lijnkleur @@ -351,6 +381,7 @@ Locate GeoLibre Runner GeoLibre-runner zoeken Locate the GeoLibre runner GeoLibre-runner zoeken Locate… Zoeken… Location Locatie +Lock Vergrendelen Long Lang geheel getal Longitude (X) Lengtegraad (X) Major Lakes Grote meren @@ -406,6 +437,7 @@ Next Volgende Next Extent Volgend bereik No Nee No bookmarks yet Nog geen bladwijzers +No Pop-ups Geen pop-ups No standalone tables Geen zelfstandige tabellen NoData NoData None Geen @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Pannen naar een lengte-/breedtegraad. Pan with the mouse, zoom with the wheel and click features to see their attributes. Pan met de muis, zoom met het wiel en klik op objecten om hun attributen te zien. Paper Papier Parent folder Bovenliggende map +Paste Plakken +Paste copied features into the selected layer, or as a new layer. Gekopieerde objecten in de geselecteerde laag plakken, of als nieuwe laag. +Paste Special Plakken speciaal +Paste Special (as a new layer) Plakken speciaal (als nieuwe laag) +Pause Pauzeren Percent Clip Percentage afkappen Pixel Pixel Pixel type Pixeltype +Placement Plaatsing PNG image PNG-afbeelding Point Punt Polar, conformal: Antarctica and the Southern Ocean. Polair, hoekgetrouw: Antarctica en de Zuidelijke Oceaan. Polar, conformal: the Arctic and the northern lands. Polair, hoekgetrouw: het Noordpoolgebied en de noordelijke landen. Polygon Polygoon Polyline Polylijn +Pop-up Mode Pop-upmodus +Pop-ups Pop-ups Populated Places Bewoonde plaatsen Previous Vorige Previous Extent Vorig bereik @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Helderheid, contrast en gamma herstellen. RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Dekking lintfuncties: {done} van {total} functies ({pct}%). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Lintpariteit: {done} van {total} lintfuncties hebben een RustGIS-opdracht. +Right Rechts Robinson Robinson Run Uitvoeren Run Tool Gereedschap uitvoeren @@ -545,8 +586,10 @@ Select Rows Rijen selecteren Select rows with a SQL expression. Rijen selecteren met een SQL-expressie. Select Subset From Current Selection Subset selecteren uit huidige selectie Selectable Selecteerbaar +Selectable Layers Selecteerbare lagen Selected Geselecteerd Selected Features: {n} Geselecteerde objecten: {n} +Selected in Contents Geselecteerd in Inhoud Selected only Alleen geselecteerde Selecting Features Objecten selecteren Selection Selectie @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Het catalogusvenster tonen of verbergen. Show or hide the Contents pane. Het venster Inhoud tonen of verbergen. Show or hide the Geoprocessing pane. Het geoverwerkingsvenster tonen of verbergen. Show or hide the layer. De laag tonen of verbergen. +Show the labels that don't fit, in red. De labels die niet passen in rood tonen. Show the map as a 3D globe, or as a flat map again. De kaart als 3D-wereldbol tonen, of weer als platte kaart. Show the Symbology pane for the selected layer. Het symbologievenster voor de geselecteerde laag tonen. Simplify Vereenvoudigen @@ -586,6 +630,7 @@ Statistics Statistieken Statistics Field Statistiekveld Status Bar Statusbalk Std. Dev. Std.afw. +Stop drawing labels, for faster navigation. Stoppen met labels tekenen, voor sneller navigeren. Stretch Stretch Stretch\nType Stretch-\ntype Stretch Type Stretchtype @@ -622,6 +667,7 @@ Toolbox Gereedschapskist Toolboxes Gereedschapskisten Tools Gereedschappen Tools you run appear here. Uitgevoerde gereedschappen verschijnen hier. +Topmost Layer Bovenste laag Total {total} · Segment {segment} Totaal {total} · Segment {segment} Transparency Transparantie Triangle Driehoek @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Geldige expressie · {n} overeenkomende ri Vector and raster data Vector- en rastergegevens Version {version} Versie {version} View Beeld +View Unplaced Niet-geplaatste tonen View › Windows Beeld › Vensters Visibility Zichtbaarheid Visibility Range Zichtbaarheidsbereik Visible Zichtbaar +Visible Layers Zichtbare lagen Web Mercator Web Mercator Website Website Welcome to RustGIS Welkom bij RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Wereldbol WGS 84 / Web Mercator WGS 84 / Web Mercator Where Waar Where Clause Where-clausule +Where labels sit relative to their features. Waar labels staan ten opzichte van hun objecten. Windows Vensters Winkel Tripel Winkel Tripel World Wereld diff --git a/crates/ui-egui/src/i18n/pt.tsv b/crates/ui-egui/src/i18n/pt.tsv index b8e8652..6b4860a 100644 --- a/crates/ui-egui/src/i18n/pt.tsv +++ b/crates/ui-egui/src/i18n/pt.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About Sobre About RustGIS Sobre o RustGIS About RustGIS. Sobre o RustGIS. +Above Acima +Above Left Acima à esquerda +Above Right Acima à direita Activate Map Ativar mapa Add Adicionar Add\nData Adicionar\ndados @@ -56,6 +59,9 @@ Band {n} Banda {n} Bands Bandas Basemap Mapa base Basemaps Mapas base +Below Abaixo +Below Left Abaixo à esquerda +Below Right Abaixo à direita Bilinear Bilinear Blank Em branco Blue Azul @@ -85,6 +91,7 @@ Case Field Campo de caso Catalog Catálogo Catalog\nPane Painel\nCatálogo Cell size Tamanho da célula +Centered Centralizado Change the map's backdrop. Alterar o fundo do mapa. Change the map's coordinate system Alterar o sistema de coordenadas do mapa Choose a band combination to display the raster layer. Escolha uma combinação de bandas para exibir a camada raster. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Escolher como o mapa plano represent Choose how the layer is drawn. Escolher como a camada é desenhada. Choose how the raster is drawn. Escolha como o raster é desenhado. Choose the interface language. Escolher o idioma da interface. +Choose which layers a click identifies. Escolher quais camadas um clique identifica. Circle Círculo Classes Classes Classify Classificar Clear Limpar Clear\nLimits Limpar\nlimites Clear History Limpar histórico +Clear Limits Limpar limites Clear Selection Limpar seleção Clear selection Limpar seleção Clear the selection in every layer. Limpar a seleção em todas as camadas. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Clique para adicionar v Click to switch between decimal degrees and DMS Clique para alternar entre graus decimais e GMS Clip Recortar Clip Features Recortar feições +Clipboard Área de transferência Close Fechar Close (Esc) Fechar (Esc) Close Table Fechar tabela Close table Fechar tabela +Closest Mais próxima Collapse or expand the ribbon Recolher ou expandir a faixa de opções Collapse the ribbon (Ctrl+F1) Recolher a faixa de opções (Ctrl+F1) Color Cor @@ -133,11 +144,20 @@ Compute a field's values. Calcular os valores de um campo. Contents Conteúdo Contrast Contraste Conversion Conversão +Convert Converter +Convert the selected layer's labels into an annotation layer. Converter os rótulos da camada selecionada em uma camada de anotação. +Convert To Annotation Converter em anotação Coordinate System Sistema de coordenadas Coordinate system Sistema de coordenadas Coordinate System… Sistema de coordenadas… +Copied {path} Copiado {path} Copies the (selected) features of a layer to a new layer. Copia as feições (selecionadas) de uma camada para uma nova camada. +Copy Copiar Copy Coordinates Copiar coordenadas +Copy Path Copiar caminho +Copy the selected features (also as GeoJSON text). Copiar as feições selecionadas (também como texto GeoJSON). +Copy the selected features and delete them. Copiar as feições selecionadas e excluí-las. +Copy the selected layer's data source path. Copiar o caminho da fonte de dados da camada selecionada. Couldn't download the font for {language}; pick the language again to retry. Não foi possível baixar a fonte para {language}; escolha o idioma novamente para tentar de novo. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Contagem, soma, média, mínimo, máximo e desvio padrão de um campo, opcionalmente por campo de caso. Countries, cities, rivers and lakes Países, cidades, rios e lagos @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Projeto atual +Cut Recortar Dark\nMode Modo\nescuro Data Dados Data Design Design de dados @@ -193,6 +214,7 @@ Drag / middle-drag Arrastar / arrastar com botão do meio Drag a box or click to zoom in Arraste um retângulo ou clique para aproximar Drag a box to zoom into. Arraste um retângulo para aproximar. Draw a halo around label text. Desenhar um halo ao redor do texto do rótulo. +Draw labels at every scale and distance. Desenhar rótulos em qualquer escala e distância. Draw new features in the selected layer. Double-click to finish lines and polygons. Desenhar novas feições na camada selecionada. Clique duplo para concluir linhas e polígonos. Draw the layer at every scale. Desenhar a camada em todas as escalas. Drawing Desenho @@ -243,6 +265,7 @@ Expression Expressão Extract Extrair Extracts the parts of input features that fall inside clip polygons. Extrai as partes das feições de entrada que ficam dentro dos polígonos de recorte. Failed Falhou +Farthest Mais distante Feature Feição Feature\nTo Point Feição\npara ponto Feature Layer Camada de feições @@ -296,6 +319,8 @@ Group Option Opção de agrupamento Halo Halo Harbour (qualitative) Porto (qualitativa) Help Ajuda +Hide labels when the viewer is closer than this. Ocultar os rótulos quando o observador estiver mais perto que isto. +Hide labels when the viewer is farther than this. Ocultar os rótulos quando o observador estiver mais longe que isto. Histogram Equalize Equalização de histograma History Histórico Home Home @@ -321,12 +346,16 @@ Invert color scheme Inverter esquema de cores Invert the selection. Inverter a seleção. IS NULL IS NULL keep current manter atual +Keep the labelled features fixed as the map moves. Manter fixas as feições rotuladas quando o mapa se move. Keyboard Shortcuts Atalhos de teclado Keyboard shortcuts. Atalhos de teclado. Kilometers Quilômetros Label Rótulo Label Class Classe de rótulo +Label Distance Range Intervalo de distância dos rótulos Label Field Campo de rótulo +Label Placement Posicionamento dos rótulos +Label Visibility Range Intervalo de visibilidade dos rótulos Labeling Rotulagem Lagoon Lagoa Lambert Cylindrical Equal Area Cilíndrica de áreas iguais de Lambert @@ -337,6 +366,7 @@ Layer Camada Layer From\nSelection Camada da\nseleção Layers Camadas Layers and Table Views Camadas e visualizações de tabela +Left Esquerda LIKE LIKE Limit which features draw with a SQL expression. Limitar quais feições são desenhadas com uma expressão SQL. Line color Cor da linha @@ -351,6 +381,7 @@ Locate GeoLibre Runner Localizar o executor do GeoLibre Locate the GeoLibre runner Localizar o executor do GeoLibre Locate… Localizar… Location Localização +Lock Bloquear Long Inteiro longo Longitude (X) Longitude (X) Major Lakes Lagos principais @@ -406,6 +437,7 @@ Next Próximo Next Extent Próxima extensão No Não No bookmarks yet Ainda não há marcadores +No Pop-ups Sem pop-ups No standalone tables Nenhuma tabela independente NoData NoData None Nenhum @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Deslocar para uma longitude/latitude. Pan with the mouse, zoom with the wheel and click features to see their attributes. Desloque o mapa com o mouse, aplique zoom com a roda e clique nas feições para ver seus atributos. Paper Papel Parent folder Pasta superior +Paste Colar +Paste copied features into the selected layer, or as a new layer. Colar as feições copiadas na camada selecionada ou como uma nova camada. +Paste Special Colar especial +Paste Special (as a new layer) Colar especial (como nova camada) +Pause Pausar Percent Clip Recorte percentual Pixel Pixel Pixel type Tipo de pixel +Placement Posicionamento PNG image Imagem PNG Point Ponto Polar, conformal: Antarctica and the Southern Ocean. Polar, conforme: a Antártida e o Oceano Antártico. Polar, conformal: the Arctic and the northern lands. Polar, conforme: o Ártico e as terras do norte. Polygon Polígono Polyline Polilinha +Pop-up Mode Modo de pop-up +Pop-ups Pop-ups Populated Places Locais povoados Previous Anterior Previous Extent Extensão anterior @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Redefinir brilho, contraste e gama. RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Cobertura de recursos da faixa de opções: {done} de {total} recursos ({pct}%). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Paridade da faixa de opções: {done} de {total} recursos da faixa têm um comando do RustGIS. +Right Direita Robinson Robinson Run Executar Run Tool Executar ferramenta @@ -545,8 +586,10 @@ Select Rows Selecionar linhas Select rows with a SQL expression. Selecionar linhas com uma expressão SQL. Select Subset From Current Selection Selecionar subconjunto da seleção atual Selectable Selecionável +Selectable Layers Camadas selecionáveis Selected Selecionado Selected Features: {n} Feições selecionadas: {n} +Selected in Contents Selecionadas em Conteúdo Selected only Somente selecionadas Selecting Features Seleção de feições Selection Seleção @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Mostrar ou ocultar o painel Catálogo. Show or hide the Contents pane. Mostrar ou ocultar o painel Conteúdo. Show or hide the Geoprocessing pane. Mostrar ou ocultar o painel Geoprocessamento. Show or hide the layer. Mostrar ou ocultar a camada. +Show the labels that don't fit, in red. Mostrar em vermelho os rótulos que não cabem. Show the map as a 3D globe, or as a flat map again. Mostrar o mapa como um globo 3D ou novamente como um mapa plano. Show the Symbology pane for the selected layer. Mostrar o painel Simbologia da camada selecionada. Simplify Simplificar @@ -586,6 +630,7 @@ Statistics Estatísticas Statistics Field Campo de estatísticas Status Bar Barra de status Std. Dev. Desv. pad. +Stop drawing labels, for faster navigation. Parar de desenhar rótulos para navegar mais rápido. Stretch Realce Stretch\nType Tipo de\nrealce Stretch Type Tipo de realce @@ -622,6 +667,7 @@ Toolbox Caixa de ferramentas Toolboxes Caixas de ferramentas Tools Ferramentas Tools you run appear here. As ferramentas que você executar aparecem aqui. +Topmost Layer Camada superior Total {total} · Segment {segment} Total {total} · Segmento {segment} Transparency Transparência Triangle Triângulo @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Expressão válida · {n} linhas correspon Vector and raster data Dados vetoriais e raster Version {version} Versão {version} View Exibir +View Unplaced Ver não posicionados View › Windows Exibir › Janelas Visibility Visibilidade Visibility Range Intervalo de visibilidade Visible Visível +Visible Layers Camadas visíveis Web Mercator Web Mercator Website Site Welcome to RustGIS Bem-vindo ao RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Globo WGS 84 / Web Mercator WGS 84 / Web Mercator Where Onde Where Clause Cláusula WHERE +Where labels sit relative to their features. Onde os rótulos ficam em relação às suas feições. Windows Janelas Winkel Tripel Winkel Tripel World Mundo diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index 735d3f6..e0b8968 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About О программе About RustGIS О RustGIS About RustGIS. О RustGIS. +Above Сверху +Above Left Сверху слева +Above Right Сверху справа Activate Map Активировать карту Add Добавить Add\nData Добавить\nданные @@ -56,6 +59,9 @@ Band {n} Канал {n} Bands Каналы Basemap Базовая карта Basemaps Базовые карты +Below Снизу +Below Left Снизу слева +Below Right Снизу справа Bilinear Билинейная Blank Пустая Blue Синий @@ -85,6 +91,7 @@ Case Field Поле группировки Catalog Каталог Catalog\nPane Панель\nкаталога Cell size Размер ячейки +Centered По центру Change the map's backdrop. Изменить фон карты. Change the map's coordinate system Изменить систему координат карты Choose a band combination to display the raster layer. Выберите комбинацию каналов для отображения растрового слоя. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Выбрать, как плоска Choose how the layer is drawn. Выбрать способ отображения слоя. Choose how the raster is drawn. Выберите способ отрисовки растра. Choose the interface language. Выбрать язык интерфейса. +Choose which layers a click identifies. Выбрать, какие слои идентифицируются по щелчку. Circle Круг Classes Классы Classify Классифицировать Clear Очистить Clear\nLimits Сбросить\nограничения Clear History Очистить историю +Clear Limits Сбросить ограничения Clear Selection Очистить выборку Clear selection Очистить выборку Clear the selection in every layer. Очистить выборку во всех слоях. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Щёлкайте, чт Click to switch between decimal degrees and DMS Щёлкните для переключения между десятичными градусами и ГМС Clip Обрезать Clip Features Обрезать объекты +Clipboard Буфер обмена Close Закрыть Close (Esc) Закрыть (Esc) Close Table Закрыть таблицу Close table Закрыть таблицу +Closest Ближайшее Collapse or expand the ribbon Свернуть или развернуть ленту Collapse the ribbon (Ctrl+F1) Свернуть ленту (Ctrl+F1) Color Цвет @@ -133,11 +144,20 @@ Compute a field's values. Вычислить значения поля. Contents Содержание Contrast Контраст Conversion Преобразование +Convert Преобразовать +Convert the selected layer's labels into an annotation layer. Преобразовать подписи выбранного слоя в слой аннотаций. +Convert To Annotation Преобразовать в аннотации Coordinate System Система координат Coordinate system Система координат Coordinate System… Система координат… +Copied {path} Скопировано: {path} Copies the (selected) features of a layer to a new layer. Копирует (выбранные) объекты слоя в новый слой. +Copy Копировать Copy Coordinates Копировать координаты +Copy Path Копировать путь +Copy the selected features (also as GeoJSON text). Копировать выбранные объекты (также как текст GeoJSON). +Copy the selected features and delete them. Копировать выбранные объекты и удалить их. +Copy the selected layer's data source path. Копировать путь к источнику данных выбранного слоя. Couldn't download the font for {language}; pick the language again to retry. Не удалось загрузить шрифт для {language}; выберите язык ещё раз, чтобы повторить попытку. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Количество, сумма, среднее, минимум, максимум и стандартное отклонение поля, при необходимости по полю группировки. Countries, cities, rivers and lakes Страны, города, реки и озёра @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Текущий проект +Cut Вырезать Dark\nMode Тёмная\nтема Data Данные Data Design Структура данных @@ -193,6 +214,7 @@ Drag / middle-drag Перетаскивание / средней кнопкой Drag a box or click to zoom in Растяните рамку или щёлкните для приближения Drag a box to zoom into. Растяните рамку для приближения. Draw a halo around label text. Рисовать ореол вокруг текста подписей. +Draw labels at every scale and distance. Отображать подписи при любом масштабе и расстоянии. Draw new features in the selected layer. Double-click to finish lines and polygons. Рисуйте новые объекты в выбранном слое. Двойной щелчок завершает линии и полигоны. Draw the layer at every scale. Отображать слой в любом масштабе. Drawing Отображение @@ -243,6 +265,7 @@ Expression Выражение Extract Извлечение Extracts the parts of input features that fall inside clip polygons. Извлекает части входных объектов, попадающие внутрь обрезающих полигонов. Failed Ошибка +Farthest Самое дальнее Feature Объект Feature\nTo Point Объект\nв точку Feature Layer Векторный слой @@ -296,6 +319,8 @@ Group Option Способ группировки Halo Ореол Harbour (qualitative) Гавань (качественная) Help Справка +Hide labels when the viewer is closer than this. Скрывать подписи, когда наблюдатель ближе этого расстояния. +Hide labels when the viewer is farther than this. Скрывать подписи, когда наблюдатель дальше этого расстояния. Histogram Equalize Выравнивание гистограммы History История Home Home @@ -321,12 +346,16 @@ Invert color scheme Инвертировать цветовую схему Invert the selection. Инвертировать выборку. IS NULL IS NULL keep current оставить текущее +Keep the labelled features fixed as the map moves. Сохранять подписанные объекты неизменными при перемещении карты. Keyboard Shortcuts Сочетания клавиш Keyboard shortcuts. Сочетания клавиш. Kilometers Километры Label Подпись Label Class Класс подписей +Label Distance Range Диапазон расстояний подписей Label Field Поле подписей +Label Placement Размещение подписей +Label Visibility Range Диапазон видимости подписей Labeling Подписи Lagoon Лагуна Lambert Cylindrical Equal Area Равновеликая цилиндрическая Ламберта @@ -337,6 +366,7 @@ Layer Слой Layer From\nSelection Слой из\nвыборки Layers Слои Layers and Table Views Слои и табличные представления +Left Слева LIKE LIKE Limit which features draw with a SQL expression. Ограничить отображаемые объекты выражением SQL. Line color Цвет линии @@ -351,6 +381,7 @@ Locate GeoLibre Runner Указать модуль запуска GeoLibre Locate the GeoLibre runner Указать модуль запуска GeoLibre Locate… Указать… Location Расположение +Lock Закрепить Long Длинное целое Longitude (X) Долгота (X) Major Lakes Крупные озёра @@ -406,6 +437,7 @@ Next Далее Next Extent Следующий экстент No Нет No bookmarks yet Закладок пока нет +No Pop-ups Без всплывающих окон No standalone tables Нет отдельных таблиц NoData NoData None Нет @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Переместиться к долготе/шир Pan with the mouse, zoom with the wheel and click features to see their attributes. Панорамируйте мышью, масштабируйте колесом и щёлкайте по объектам, чтобы увидеть их атрибуты. Paper Бумага Parent folder Родительская папка +Paste Вставить +Paste copied features into the selected layer, or as a new layer. Вставить скопированные объекты в выбранный слой или как новый слой. +Paste Special Специальная вставка +Paste Special (as a new layer) Специальная вставка (как новый слой) +Pause Приостановить Percent Clip Процентное отсечение Pixel Пиксель Pixel type Тип пикселя +Placement Размещение PNG image Изображение PNG Point Точка Polar, conformal: Antarctica and the Southern Ocean. Полярная, равноугольная: Антарктида и Южный океан. Polar, conformal: the Arctic and the northern lands. Полярная, равноугольная: Арктика и северные земли. Polygon Полигон Polyline Полилиния +Pop-up Mode Режим всплывающих окон +Pop-ups Всплывающие окна Populated Places Населённые пункты Previous Назад Previous Extent Предыдущий экстент @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Сбросить яркость, конт RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Охват функций ленты: {done} из {total} ({pct}%). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Соответствие ленты: команд RustGIS для функций ленты — {done} из {total}. +Right Справа Robinson Робинсон Run Запустить Run Tool Запустить инструмент @@ -545,8 +586,10 @@ Select Rows Выбрать строки Select rows with a SQL expression. Выбрать строки с помощью выражения SQL. Select Subset From Current Selection Выбрать подмножество из текущей выборки Selectable Доступен для выбора +Selectable Layers Слои, доступные для выбора Selected Выбрано Selected Features: {n} Выбрано объектов: {n} +Selected in Contents Выбранные в содержании Selected only Только выбранные Selecting Features Выбор объектов Selection Выборка @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Показать или скрыть панель Show or hide the Contents pane. Показать или скрыть панель «Содержание». Show or hide the Geoprocessing pane. Показать или скрыть панель «Геообработка». Show or hide the layer. Показать или скрыть слой. +Show the labels that don't fit, in red. Показывать неразмещённые подписи красным. Show the map as a 3D globe, or as a flat map again. Показать карту в виде 3D-глобуса или снова в виде плоской карты. Show the Symbology pane for the selected layer. Показать панель «Символы» для выбранного слоя. Simplify Упростить @@ -586,6 +630,7 @@ Statistics Статистика Statistics Field Поле статистики Status Bar Строка состояния Std. Dev. Ст. откл. +Stop drawing labels, for faster navigation. Не отображать подписи для ускорения навигации. Stretch Растяжка Stretch\nType Тип\nрастяжки Stretch Type Тип растяжки @@ -622,6 +667,7 @@ Toolbox Набор инструментов Toolboxes Наборы инструментов Tools Инструменты Tools you run appear here. Здесь появятся запущенные инструменты. +Topmost Layer Верхний слой Total {total} · Segment {segment} Всего {total} · Сегмент {segment} Transparency Прозрачность Triangle Треугольник @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Выражение допустимо · Vector and raster data Векторные и растровые данные Version {version} Версия {version} View Вид +View Unplaced Показать неразмещённые View › Windows Вид › Окна Visibility Видимость Visibility Range Диапазон видимости Visible Видимый +Visible Layers Видимые слои Web Mercator Web Mercator Website Веб-сайт Welcome to RustGIS Добро пожаловать в RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Глобус WGS 84 / Web Mercator WGS 84 / Web Mercator Where Где Where Clause Условие WHERE +Where labels sit relative to their features. Положение подписей относительно их объектов. Windows Окна Winkel Tripel Винкель-Трипель World Мир diff --git a/crates/ui-egui/src/i18n/tr.tsv b/crates/ui-egui/src/i18n/tr.tsv index 4f03c51..e63d10c 100644 --- a/crates/ui-egui/src/i18n/tr.tsv +++ b/crates/ui-egui/src/i18n/tr.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About Hakkında About RustGIS RustGIS Hakkında About RustGIS. RustGIS hakkında. +Above Üst +Above Left Sol Üst +Above Right Sağ Üst Activate Map Haritayı Etkinleştir Add Ekle Add\nData Veri\nEkle @@ -56,6 +59,9 @@ Band {n} Bant {n} Bands Bantlar Basemap Altlık Harita Basemaps Altlık Haritalar +Below Alt +Below Left Sol Alt +Below Right Sağ Alt Bilinear Çift Doğrusal Blank Boş Blue Mavi @@ -85,6 +91,7 @@ Case Field Gruplama Alanı Catalog Katalog Catalog\nPane Katalog\nPaneli Cell size Hücre boyutu +Centered Ortalanmış Change the map's backdrop. Haritanın arka planını değiştir. Change the map's coordinate system Haritanın koordinat sistemini değiştir Choose a band combination to display the raster layer. Raster katmanını görüntülemek için bir bant kombinasyonu seçin. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Düz haritanın Dünya'yı nasıl g Choose how the layer is drawn. Katmanın nasıl çizileceğini seç. Choose how the raster is drawn. Rasterın nasıl çizileceğini seçin. Choose the interface language. Arayüz dilini seç. +Choose which layers a click identifies. Bir tıklamanın hangi katmanları tanımlayacağını seç. Circle Daire Classes Sınıflar Classify Sınıflandır Clear Temizle Clear\nLimits Sınırları\nTemizle Clear History Geçmişi Temizle +Clear Limits Sınırları Temizle Clear Selection Seçimi Temizle Clear selection Seçimi temizle Clear the selection in every layer. Tüm katmanlardaki seçimi temizle. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Köşe eklemek için t Click to switch between decimal degrees and DMS Ondalık derece ile DMS arasında geçiş için tıklayın Clip Kırp Clip Features Detayları Kırp +Clipboard Pano Close Kapat Close (Esc) Kapat (Esc) Close Table Tabloyu Kapat Close table Tabloyu kapat +Closest En Yakın Collapse or expand the ribbon Şeridi daralt veya genişlet Collapse the ribbon (Ctrl+F1) Şeridi daralt (Ctrl+F1) Color Renk @@ -133,11 +144,20 @@ Compute a field's values. Bir alanın değerlerini hesapla. Contents İçindekiler Contrast Kontrast Conversion Dönüştürme +Convert Dönüştür +Convert the selected layer's labels into an annotation layer. Seçili katmanın etiketlerini bir not katmanına dönüştür. +Convert To Annotation Nota Dönüştür Coordinate System Koordinat Sistemi Coordinate system Koordinat sistemi Coordinate System… Koordinat Sistemi… +Copied {path} {path} kopyalandı Copies the (selected) features of a layer to a new layer. Bir katmanın (seçili) detaylarını yeni bir katmana kopyalar. +Copy Kopyala Copy Coordinates Koordinatları Kopyala +Copy Path Yolu Kopyala +Copy the selected features (also as GeoJSON text). Seçili detayları kopyala (GeoJSON metni olarak da). +Copy the selected features and delete them. Seçili detayları kopyala ve sil. +Copy the selected layer's data source path. Seçili katmanın veri kaynağı yolunu kopyala. Couldn't download the font for {language}; pick the language again to retry. {language} için yazı tipi indirilemedi; yeniden denemek için dili tekrar seçin. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Bir alanın sayısı, toplamı, ortalaması, minimumu, maksimumu ve standart sapması; isteğe bağlı olarak gruplama alanına göre. Countries, cities, rivers and lakes Ülkeler, şehirler, nehirler ve göller @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Geçerli Proje +Cut Kes Dark\nMode Koyu\nMod Data Veri Data Design Veri Tasarımı @@ -193,6 +214,7 @@ Drag / middle-drag Sürükleme / orta tuşla sürükleme Drag a box or click to zoom in Yakınlaştırmak için kutu sürükleyin veya tıklayın Drag a box to zoom into. Yakınlaştırılacak kutuyu sürükleyin. Draw a halo around label text. Etiket metninin çevresine hale çiz. +Draw labels at every scale and distance. Etiketleri her ölçekte ve mesafede çiz. Draw new features in the selected layer. Double-click to finish lines and polygons. Seçili katmanda yeni detaylar çizin. Çizgileri ve poligonları bitirmek için çift tıklayın. Draw the layer at every scale. Katmanı her ölçekte çiz. Drawing Çizim @@ -243,6 +265,7 @@ Expression İfade Extract Çıkar Extracts the parts of input features that fall inside clip polygons. Girdi detaylarının kırpma poligonları içine düşen kısımlarını çıkarır. Failed Başarısız +Farthest En Uzak Feature Detay Feature\nTo Point Detaydan\nNoktaya Feature Layer Detay Katmanı @@ -296,6 +319,8 @@ Group Option Gruplama Seçeneği Halo Hale Harbour (qualitative) Liman (nitel) Help Yardım +Hide labels when the viewer is closer than this. Görüntüleyen bundan daha yakındayken etiketleri gizle. +Hide labels when the viewer is farther than this. Görüntüleyen bundan daha uzaktayken etiketleri gizle. Histogram Equalize Histogram Eşitleme History Geçmiş Home Home @@ -321,12 +346,16 @@ Invert color scheme Renk şemasını ters çevir Invert the selection. Seçimi ters çevir. IS NULL IS NULL keep current geçerli olanı koru +Keep the labelled features fixed as the map moves. Harita hareket ederken etiketlenen detayları sabit tut. Keyboard Shortcuts Klavye Kısayolları Keyboard shortcuts. Klavye kısayolları. Kilometers Kilometre Label Etiket Label Class Etiket Sınıfı +Label Distance Range Etiket Mesafe Aralığı Label Field Etiket Alanı +Label Placement Etiket Yerleşimi +Label Visibility Range Etiket Görünürlük Aralığı Labeling Etiketleme Lagoon Lagün Lambert Cylindrical Equal Area Lambert Silindirik Eşalan @@ -337,6 +366,7 @@ Layer Katman Layer From\nSelection Seçimden\nKatman Layers Katmanlar Layers and Table Views Katmanlar ve Tablo Görünümleri +Left Sol LIKE LIKE Limit which features draw with a SQL expression. Hangi detayların çizileceğini bir SQL ifadesiyle sınırla. Line color Çizgi rengi @@ -351,6 +381,7 @@ Locate GeoLibre Runner GeoLibre çalıştırıcısını bul Locate the GeoLibre runner GeoLibre çalıştırıcısını bul Locate… Bul… Location Konum +Lock Kilitle Long Tamsayı (Long) Longitude (X) Boylam (X) Major Lakes Büyük Göller @@ -406,6 +437,7 @@ Next Sonraki Next Extent Sonraki Kapsam No Hayır No bookmarks yet Henüz yer imi yok +No Pop-ups Açılır Pencere Yok No standalone tables Bağımsız tablo yok NoData NoData None Yok @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Bir boylam/enleme kaydır. Pan with the mouse, zoom with the wheel and click features to see their attributes. Fareyle kaydırın, tekerlekle yakınlaştırın ve özniteliklerini görmek için detaylara tıklayın. Paper Kâğıt Parent folder Üst klasör +Paste Yapıştır +Paste copied features into the selected layer, or as a new layer. Kopyalanan detayları seçili katmana veya yeni bir katman olarak yapıştır. +Paste Special Özel Yapıştır +Paste Special (as a new layer) Özel Yapıştır (yeni katman olarak) +Pause Duraklat Percent Clip Yüzde Kırpma Pixel Piksel Pixel type Piksel türü +Placement Yerleşim PNG image PNG görüntüsü Point Nokta Polar, conformal: Antarctica and the Southern Ocean. Kutupsal, konform: Antarktika ve Güney Okyanusu. Polar, conformal: the Arctic and the northern lands. Kutupsal, konform: Arktik ve kuzey toprakları. Polygon Poligon Polyline Çoklu Çizgi +Pop-up Mode Açılır Pencere Modu +Pop-ups Açılır Pencereler Populated Places Yerleşim Yerleri Previous Önceki Previous Extent Önceki Kapsam @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Parlaklık, kontrast ve gamayı sıfırla. RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Şerit özellik kapsamı: {total} özellikten {done} tanesi (%{pct}). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Şerit eşliği: {total} şerit özelliğinden {done} tanesinin RustGIS komutu var. +Right Sağ Robinson Robinson Run Çalıştır Run Tool Aracı Çalıştır @@ -545,8 +586,10 @@ Select Rows Satır Seç Select rows with a SQL expression. Satırları bir SQL ifadesiyle seç. Select Subset From Current Selection Geçerli Seçimden Alt Küme Seç Selectable Seçilebilir +Selectable Layers Seçilebilir Katmanlar Selected Seçili Selected Features: {n} Seçili Detaylar: {n} +Selected in Contents İçindekiler'de Seçili Selected only Yalnızca seçililer Selecting Features Detay Seçimi Selection Seçim @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Katalog panelini göster veya gizle. Show or hide the Contents pane. İçindekiler panelini göster veya gizle. Show or hide the Geoprocessing pane. Coğrafi İşleme panelini göster veya gizle. Show or hide the layer. Katmanı göster veya gizle. +Show the labels that don't fit, in red. Sığmayan etiketleri kırmızıyla göster. Show the map as a 3D globe, or as a flat map again. Haritayı 3B küre olarak veya yeniden düz harita olarak göster. Show the Symbology pane for the selected layer. Seçili katman için Semboloji panelini göster. Simplify Basitleştir @@ -586,6 +630,7 @@ Statistics İstatistikler Statistics Field İstatistik Alanı Status Bar Durum Çubuğu Std. Dev. Std. Sapma +Stop drawing labels, for faster navigation. Daha hızlı gezinme için etiket çizmeyi durdur. Stretch Germe Stretch\nType Germe\nTürü Stretch Type Germe Türü @@ -622,6 +667,7 @@ Toolbox Araç Kutusu Toolboxes Araç Kutuları Tools Araçlar Tools you run appear here. Çalıştırdığınız araçlar burada görünür. +Topmost Layer En Üstteki Katman Total {total} · Segment {segment} Toplam {total} · Bölüm {segment} Transparency Saydamlık Triangle Üçgen @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Geçerli ifade · {n} eşleşen satır Vector and raster data Vektör ve raster verisi Version {version} Sürüm {version} View Görünüm +View Unplaced Yerleşmeyenleri Göster View › Windows Görünüm › Pencereler Visibility Görünürlük Visibility Range Görünürlük Aralığı Visible Görünür +Visible Layers Görünür Katmanlar Web Mercator Web Mercator Website Web sitesi Welcome to RustGIS RustGIS'e hoş geldiniz @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Küre WGS 84 / Web Mercator WGS 84 / Web Mercator Where Koşul Where Clause Where Yan Tümcesi +Where labels sit relative to their features. Etiketlerin detaylarına göre nerede durduğu. Windows Pencereler Winkel Tripel Winkel Tripel World Dünya diff --git a/crates/ui-egui/src/i18n/vi.tsv b/crates/ui-egui/src/i18n/vi.tsv index 8bfcf90..78e8552 100644 --- a/crates/ui-egui/src/i18n/vi.tsv +++ b/crates/ui-egui/src/i18n/vi.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About Giới thiệu About RustGIS Giới thiệu RustGIS About RustGIS. Giới thiệu RustGIS. +Above Trên +Above Left Trên trái +Above Right Trên phải Activate Map Kích hoạt bản đồ Add Thêm Add\nData Thêm\ndữ liệu @@ -56,6 +59,9 @@ Band {n} Kênh {n} Bands Kênh Basemap Bản đồ nền Basemaps Bản đồ nền +Below Dưới +Below Left Dưới trái +Below Right Dưới phải Bilinear Song tuyến Blank Trống Blue Xanh lam @@ -85,6 +91,7 @@ Case Field Trường phân nhóm Catalog Danh mục Catalog\nPane Ngăn\ndanh mục Cell size Kích thước ô +Centered Căn giữa Change the map's backdrop. Thay đổi nền của bản đồ. Change the map's coordinate system Đổi hệ tọa độ của bản đồ Choose a band combination to display the raster layer. Chọn tổ hợp kênh để hiển thị lớp raster. @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. Chọn cách bản đồ phẳng th Choose how the layer is drawn. Chọn cách vẽ lớp. Choose how the raster is drawn. Chọn cách vẽ raster. Choose the interface language. Chọn ngôn ngữ giao diện. +Choose which layers a click identifies. Chọn các lớp mà một cú nhấp sẽ nhận dạng. Circle Hình tròn Classes Lớp phân loại Classify Phân loại Clear Xóa Clear\nLimits Xóa\ngiới hạn Clear History Xóa lịch sử +Clear Limits Xóa giới hạn Clear Selection Xóa vùng chọn Clear selection Xóa vùng chọn Clear the selection in every layer. Xóa vùng chọn trong mọi lớp. @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line Nhấp để thêm đ Click to switch between decimal degrees and DMS Nhấp để chuyển giữa độ thập phân và DMS Clip Cắt Clip Features Cắt đối tượng +Clipboard Bảng nhớ tạm Close Đóng Close (Esc) Đóng (Esc) Close Table Đóng bảng Close table Đóng bảng +Closest Gần nhất Collapse or expand the ribbon Thu gọn hoặc mở rộng ribbon Collapse the ribbon (Ctrl+F1) Thu gọn ribbon (Ctrl+F1) Color Màu @@ -133,11 +144,20 @@ Compute a field's values. Tính giá trị của một trường. Contents Nội dung Contrast Độ tương phản Conversion Chuyển đổi +Convert Chuyển đổi +Convert the selected layer's labels into an annotation layer. Chuyển nhãn của lớp được chọn thành lớp chú thích. +Convert To Annotation Chuyển thành chú thích Coordinate System Hệ tọa độ Coordinate system Hệ tọa độ Coordinate System… Hệ tọa độ… +Copied {path} Đã sao chép {path} Copies the (selected) features of a layer to a new layer. Sao chép các đối tượng (được chọn) của một lớp sang một lớp mới. +Copy Sao chép Copy Coordinates Sao chép tọa độ +Copy Path Sao chép đường dẫn +Copy the selected features (also as GeoJSON text). Sao chép các đối tượng được chọn (cả dưới dạng văn bản GeoJSON). +Copy the selected features and delete them. Sao chép các đối tượng được chọn rồi xóa chúng. +Copy the selected layer's data source path. Sao chép đường dẫn nguồn dữ liệu của lớp được chọn. Couldn't download the font for {language}; pick the language again to retry. Không thể tải phông chữ cho {language}; hãy chọn lại ngôn ngữ để thử lại. Count, sum, mean, min, max and standard deviation of a field, optionally per case field. Số lượng, tổng, trung bình, nhỏ nhất, lớn nhất và độ lệch chuẩn của một trường, có thể theo từng trường phân nhóm. Countries, cities, rivers and lakes Quốc gia, thành phố, sông và hồ @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project Dự án hiện tại +Cut Cắt Dark\nMode Chế độ\ntối Data Dữ liệu Data Design Thiết kế dữ liệu @@ -193,6 +214,7 @@ Drag / middle-drag Kéo / kéo chuột giữa Drag a box or click to zoom in Kéo hộp hoặc nhấp để phóng to Drag a box to zoom into. Kéo một hộp để phóng to vào. Draw a halo around label text. Vẽ quầng sáng quanh văn bản nhãn. +Draw labels at every scale and distance. Vẽ nhãn ở mọi tỷ lệ và khoảng cách. Draw new features in the selected layer. Double-click to finish lines and polygons. Vẽ đối tượng mới trong lớp được chọn. Nhấp đúp để hoàn tất đường và vùng. Draw the layer at every scale. Vẽ lớp ở mọi tỷ lệ. Drawing Vẽ @@ -243,6 +265,7 @@ Expression Biểu thức Extract Trích xuất Extracts the parts of input features that fall inside clip polygons. Trích xuất các phần của đối tượng đầu vào nằm trong các vùng cắt. Failed Thất bại +Farthest Xa nhất Feature Đối tượng Feature\nTo Point Đối tượng\nthành điểm Feature Layer Lớp đối tượng @@ -296,6 +319,8 @@ Group Option Tùy chọn nhóm Halo Quầng sáng Harbour (qualitative) Bến cảng (định tính) Help Trợ giúp +Hide labels when the viewer is closer than this. Ẩn nhãn khi người xem ở gần hơn giá trị này. +Hide labels when the viewer is farther than this. Ẩn nhãn khi người xem ở xa hơn giá trị này. Histogram Equalize Cân bằng histogram History Lịch sử Home Home @@ -321,12 +346,16 @@ Invert color scheme Đảo ngược bảng màu Invert the selection. Đảo ngược vùng chọn. IS NULL IS NULL keep current giữ nguyên +Keep the labelled features fixed as the map moves. Giữ cố định các đối tượng đã gán nhãn khi bản đồ di chuyển. Keyboard Shortcuts Phím tắt Keyboard shortcuts. Phím tắt. Kilometers Kilômét Label Nhãn Label Class Lớp nhãn +Label Distance Range Phạm vi khoảng cách nhãn Label Field Trường nhãn +Label Placement Vị trí đặt nhãn +Label Visibility Range Phạm vi hiển thị nhãn Labeling Gán nhãn Lagoon Đầm phá Lambert Cylindrical Equal Area Phép chiếu trụ đồng diện tích Lambert @@ -337,6 +366,7 @@ Layer Lớp Layer From\nSelection Lớp từ\nvùng chọn Layers Các lớp Layers and Table Views Lớp và khung nhìn bảng +Left Trái LIKE LIKE Limit which features draw with a SQL expression. Giới hạn các đối tượng được vẽ bằng biểu thức SQL. Line color Màu đường @@ -351,6 +381,7 @@ Locate GeoLibre Runner Tìm trình chạy GeoLibre Locate the GeoLibre runner Tìm trình chạy GeoLibre Locate… Tìm… Location Vị trí +Lock Khóa Long Số nguyên dài Longitude (X) Kinh độ (X) Major Lakes Hồ lớn @@ -406,6 +437,7 @@ Next Tiếp Next Extent Phạm vi tiếp theo No Không No bookmarks yet Chưa có dấu trang +No Pop-ups Không có cửa sổ bật lên No standalone tables Không có bảng độc lập NoData NoData None Không có @@ -446,15 +478,23 @@ Pan to a longitude/latitude. Di chuyển tới kinh độ/vĩ độ. Pan with the mouse, zoom with the wheel and click features to see their attributes. Di chuyển bằng chuột, phóng to thu nhỏ bằng con lăn và nhấp vào đối tượng để xem thuộc tính. Paper Giấy Parent folder Thư mục cha +Paste Dán +Paste copied features into the selected layer, or as a new layer. Dán các đối tượng đã sao chép vào lớp được chọn hoặc thành lớp mới. +Paste Special Dán đặc biệt +Paste Special (as a new layer) Dán đặc biệt (thành lớp mới) +Pause Tạm dừng Percent Clip Cắt theo phần trăm Pixel Pixel Pixel type Kiểu pixel +Placement Vị trí đặt PNG image Ảnh PNG Point Điểm Polar, conformal: Antarctica and the Southern Ocean. Vùng cực, đồng góc: châu Nam Cực và Nam Đại Dương. Polar, conformal: the Arctic and the northern lands. Vùng cực, đồng góc: Bắc Cực và các vùng đất phía bắc. Polygon Vùng Polyline Đường gấp khúc +Pop-up Mode Chế độ cửa sổ bật lên +Pop-ups Cửa sổ bật lên Populated Places Khu dân cư Previous Trước Previous Extent Phạm vi trước @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. Đặt lại độ sáng, độ tương ph RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). Độ phủ tính năng ribbon: {done} trên {total} tính năng ({pct}%). Ribbon parity: {done} of {total} ribbon features have a RustGIS command. Tương đương ribbon: {done} trên {total} tính năng ribbon có lệnh RustGIS. +Right Phải Robinson Robinson Run Chạy Run Tool Chạy công cụ @@ -545,8 +586,10 @@ Select Rows Chọn hàng Select rows with a SQL expression. Chọn hàng bằng biểu thức SQL. Select Subset From Current Selection Chọn tập con từ vùng chọn hiện tại Selectable Có thể chọn +Selectable Layers Các lớp có thể chọn Selected Đã chọn Selected Features: {n} Đối tượng được chọn: {n} +Selected in Contents Được chọn trong Nội dung Selected only Chỉ mục đã chọn Selecting Features Chọn đối tượng Selection Vùng chọn @@ -568,6 +611,7 @@ Show or hide the Catalog pane. Hiện hoặc ẩn ngăn Danh mục. Show or hide the Contents pane. Hiện hoặc ẩn ngăn Nội dung. Show or hide the Geoprocessing pane. Hiện hoặc ẩn ngăn Xử lý không gian. Show or hide the layer. Hiện hoặc ẩn lớp. +Show the labels that don't fit, in red. Hiển thị các nhãn không vừa bằng màu đỏ. Show the map as a 3D globe, or as a flat map again. Hiển thị bản đồ dưới dạng quả địa cầu 3D, hoặc trở lại bản đồ phẳng. Show the Symbology pane for the selected layer. Hiện ngăn Ký hiệu cho lớp được chọn. Simplify Đơn giản hóa @@ -586,6 +630,7 @@ Statistics Thống kê Statistics Field Trường thống kê Status Bar Thanh trạng thái Std. Dev. Độ lệch chuẩn +Stop drawing labels, for faster navigation. Ngừng vẽ nhãn để điều hướng nhanh hơn. Stretch Kéo giãn Stretch\nType Kiểu\nkéo giãn Stretch Type Kiểu kéo giãn @@ -622,6 +667,7 @@ Toolbox Hộp công cụ Toolboxes Hộp công cụ Tools Công cụ Tools you run appear here. Các công cụ bạn chạy sẽ xuất hiện ở đây. +Topmost Layer Lớp trên cùng Total {total} · Segment {segment} Tổng {total} · Đoạn {segment} Transparency Độ trong suốt Triangle Tam giác @@ -640,10 +686,12 @@ Valid expression · {n} matching rows Biểu thức hợp lệ · {n} hàng kh Vector and raster data Dữ liệu vector và raster Version {version} Phiên bản {version} View Xem +View Unplaced Xem nhãn chưa đặt View › Windows Xem › Cửa sổ Visibility Khả năng hiển thị Visibility Range Phạm vi hiển thị Visible Hiển thị +Visible Layers Các lớp hiển thị Web Mercator Web Mercator Website Trang web Welcome to RustGIS Chào mừng đến với RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / Quả địa cầu WGS 84 / Web Mercator WGS 84 / Web Mercator Where Điều kiện Where Clause Mệnh đề WHERE +Where labels sit relative to their features. Vị trí của nhãn so với đối tượng của chúng. Windows Cửa sổ Winkel Tripel Winkel Tripel World Thế giới diff --git a/crates/ui-egui/src/i18n/zh.tsv b/crates/ui-egui/src/i18n/zh.tsv index 006dbb5..8e33a5a 100644 --- a/crates/ui-egui/src/i18n/zh.tsv +++ b/crates/ui-egui/src/i18n/zh.tsv @@ -8,6 +8,9 @@ A value, a field, or two of them joined by + − × ÷. Applies to the selected About 关于 About RustGIS 关于 RustGIS About RustGIS. 关于 RustGIS。 +Above 上方 +Above Left 左上方 +Above Right 右上方 Activate Map 激活地图 Add 添加 Add\nData 添加\n数据 @@ -56,6 +59,9 @@ Band {n} 波段 {n} Bands 波段 Basemap 底图 Basemaps 底图 +Below 下方 +Below Left 左下方 +Below Right 右下方 Bilinear 双线性 Blank 空白 Blue 蓝 @@ -85,6 +91,7 @@ Case Field 分组字段 Catalog 目录 Catalog\nPane 目录\n窗格 Cell size 像元大小 +Centered 居中 Change the map's backdrop. 更改地图的背景。 Change the map's coordinate system 更改地图的坐标系 Choose a band combination to display the raster layer. 选择用于显示栅格图层的波段组合。 @@ -94,12 +101,14 @@ Choose how the flat map lays out the Earth. 选择平面地图如何展示地球 Choose how the layer is drawn. 选择图层的绘制方式。 Choose how the raster is drawn. 选择栅格的绘制方式。 Choose the interface language. 选择界面语言。 +Choose which layers a click identifies. 选择单击时识别哪些图层。 Circle 圆形 Classes 分类 Classify 分类 Clear 清除 Clear\nLimits 清除\n限制 Clear History 清除历史记录 +Clear Limits 清除限制 Clear Selection 清除选择 Clear selection 清除选择 Clear the selection in every layer. 清除所有图层中的选择。 @@ -114,10 +123,12 @@ Click to add vertices · double-click to finish the line 单击添加折点 · Click to switch between decimal degrees and DMS 单击在十进制度和度分秒之间切换 Clip 裁剪 Clip Features 裁剪要素 +Clipboard 剪贴板 Close 关闭 Close (Esc) 关闭 (Esc) Close Table 关闭表 Close table 关闭表 +Closest 最近距离 Collapse or expand the ribbon 折叠或展开功能区 Collapse the ribbon (Ctrl+F1) 折叠功能区 (Ctrl+F1) Color 颜色 @@ -133,11 +144,20 @@ Compute a field's values. 计算字段的值。 Contents 内容 Contrast 对比度 Conversion 转换 +Convert 转换 +Convert the selected layer's labels into an annotation layer. 将所选图层的标注转换为注记图层。 +Convert To Annotation 转换为注记 Coordinate System 坐标系 Coordinate system 坐标系 Coordinate System… 坐标系… +Copied {path} 已复制 {path} Copies the (selected) features of a layer to a new layer. 将图层的(所选)要素复制到新图层。 +Copy 复制 Copy Coordinates 复制坐标 +Copy Path 复制路径 +Copy the selected features (also as GeoJSON text). 复制所选要素(同时作为 GeoJSON 文本)。 +Copy the selected features and delete them. 复制所选要素并将其删除。 +Copy the selected layer's data source path. 复制所选图层的数据源路径。 Couldn't download the font for {language}; pick the language again to retry. 无法下载 {language} 的字体;请重新选择该语言以重试。 Count, sum, mean, min, max and standard deviation of a field, optionally per case field. 字段的计数、总和、平均值、最小值、最大值和标准差,可按分组字段分别统计。 Countries, cities, rivers and lakes 国家、城市、河流和湖泊 @@ -158,6 +178,7 @@ Ctrl+N / O / S Ctrl+N / O / S Ctrl+T Ctrl+T Ctrl+Z / Ctrl+Y Ctrl+Z / Ctrl+Y Current Project 当前工程 +Cut 剪切 Dark\nMode 深色\n模式 Data 数据 Data Design 数据设计 @@ -193,6 +214,7 @@ Drag / middle-drag 拖动 / 中键拖动 Drag a box or click to zoom in 拖动矩形框或单击以放大 Drag a box to zoom into. 拖动矩形框进行放大。 Draw a halo around label text. 在标注文本周围绘制晕圈。 +Draw labels at every scale and distance. 在所有比例尺和距离下绘制标注。 Draw new features in the selected layer. Double-click to finish lines and polygons. 在所选图层中绘制新要素。双击完成线和多边形。 Draw the layer at every scale. 在所有比例尺下绘制图层。 Drawing 绘制 @@ -243,6 +265,7 @@ Expression 表达式 Extract 提取 Extracts the parts of input features that fall inside clip polygons. 提取输入要素中落在裁剪多边形内的部分。 Failed 失败 +Farthest 最远距离 Feature 要素 Feature\nTo Point 要素\n转点 Feature Layer 要素图层 @@ -296,6 +319,8 @@ Group Option 分组选项 Halo 晕圈 Harbour (qualitative) 港湾(定性) Help 帮助 +Hide labels when the viewer is closer than this. 当观察者比此距离更近时隐藏标注。 +Hide labels when the viewer is farther than this. 当观察者比此距离更远时隐藏标注。 Histogram Equalize 直方图均衡化 History 历史记录 Home 主页 @@ -321,12 +346,16 @@ Invert color scheme 反转配色方案 Invert the selection. 反转选择。 IS NULL IS NULL keep current 保持当前 +Keep the labelled features fixed as the map moves. 地图移动时保持已标注要素不变。 Keyboard Shortcuts 键盘快捷键 Keyboard shortcuts. 键盘快捷键。 Kilometers 千米 Label 标注 Label Class 标注类 +Label Distance Range 标注距离范围 Label Field 标注字段 +Label Placement 标注放置 +Label Visibility Range 标注可见范围 Labeling 标注 Lagoon 泻湖 Lambert Cylindrical Equal Area 兰伯特等积圆柱投影 @@ -337,6 +366,7 @@ Layer 图层 Layer From\nSelection 从所选内容\n创建图层 Layers 图层 Layers and Table Views 图层和表视图 +Left 左侧 LIKE LIKE Limit which features draw with a SQL expression. 使用 SQL 表达式限制绘制哪些要素。 Line color 线颜色 @@ -351,6 +381,7 @@ Locate GeoLibre Runner 定位 GeoLibre 运行器 Locate the GeoLibre runner 定位 GeoLibre 运行器 Locate… 定位… Location 位置 +Lock 锁定 Long 长整型 Longitude (X) 经度(X) Major Lakes 主要湖泊 @@ -406,6 +437,7 @@ Next 下一个 Next Extent 下一个范围 No 否 No bookmarks yet 暂无书签 +No Pop-ups 无弹出窗口 No standalone tables 无独立表 NoData NoData None 无 @@ -446,15 +478,23 @@ Pan to a longitude/latitude. 平移到某个经度/纬度。 Pan with the mouse, zoom with the wheel and click features to see their attributes. 用鼠标平移,用滚轮缩放,单击要素查看其属性。 Paper 纸张 Parent folder 上级文件夹 +Paste 粘贴 +Paste copied features into the selected layer, or as a new layer. 将复制的要素粘贴到所选图层,或粘贴为新图层。 +Paste Special 选择性粘贴 +Paste Special (as a new layer) 选择性粘贴(作为新图层) +Pause 暂停 Percent Clip 百分比截断 Pixel 像素 Pixel type 像素类型 +Placement 放置 PNG image PNG 图像 Point 点 Polar, conformal: Antarctica and the Southern Ocean. 极地,等角: 南极洲和南大洋。 Polar, conformal: the Arctic and the northern lands. 极地,等角: 北极和北方陆地。 Polygon 多边形 Polyline 折线 +Pop-up Mode 弹出窗口模式 +Pop-ups 弹出窗口 Populated Places 居民点 Previous 上一个 Previous Extent 上一个范围 @@ -501,6 +541,7 @@ Reset brightness, contrast and gamma. 重置亮度、对比度和伽马。 RGB RGB Ribbon feature coverage: {done} of {total} features ({pct}%). 功能区要素覆盖率:{total} 个要素中已完成 {done} 个({pct}%)。 Ribbon parity: {done} of {total} ribbon features have a RustGIS command. 功能区对等:{total} 个功能区功能中有 {done} 个具有 RustGIS 命令。 +Right 右侧 Robinson 罗宾森投影 Run 运行 Run Tool 运行工具 @@ -545,8 +586,10 @@ Select Rows 选择行 Select rows with a SQL expression. 使用 SQL 表达式选择行。 Select Subset From Current Selection 从当前选择中选择子集 Selectable 可选 +Selectable Layers 可选图层 Selected 已选择 Selected Features: {n} 所选要素:{n} +Selected in Contents 在内容中选择的图层 Selected only 仅所选 Selecting Features 选择要素 Selection 选择 @@ -568,6 +611,7 @@ Show or hide the Catalog pane. 显示或隐藏目录窗格。 Show or hide the Contents pane. 显示或隐藏内容窗格。 Show or hide the Geoprocessing pane. 显示或隐藏地理处理窗格。 Show or hide the layer. 显示或隐藏图层。 +Show the labels that don't fit, in red. 以红色显示无法放置的标注。 Show the map as a 3D globe, or as a flat map again. 将地图显示为三维地球仪,或恢复为平面地图。 Show the Symbology pane for the selected layer. 显示所选图层的符号系统窗格。 Simplify 简化 @@ -586,6 +630,7 @@ Statistics 统计 Statistics Field 统计字段 Status Bar 状态栏 Std. Dev. 标准差 +Stop drawing labels, for faster navigation. 停止绘制标注,以加快导航。 Stretch 拉伸 Stretch\nType 拉伸\n类型 Stretch Type 拉伸类型 @@ -622,6 +667,7 @@ Toolbox 工具箱 Toolboxes 工具箱 Tools 工具 Tools you run appear here. 运行的工具会显示在这里。 +Topmost Layer 最顶层图层 Total {total} · Segment {segment} 总计 {total} · 线段 {segment} Transparency 透明度 Triangle 三角形 @@ -640,10 +686,12 @@ Valid expression · {n} matching rows 有效表达式 · {n} 个匹配行 Vector and raster data 矢量和栅格数据 Version {version} 版本 {version} View 视图 +View Unplaced 查看未放置 View › Windows 视图 › 窗口 Visibility 可见性 Visibility Range 可见范围 Visible 可见 +Visible Layers 可见图层 Web Mercator Web 墨卡托 Website 网站 Welcome to RustGIS 欢迎使用 RustGIS @@ -652,6 +700,7 @@ WGS 84 / Globe WGS 84 / 地球仪 WGS 84 / Web Mercator WGS 84 / Web Mercator Where 条件 Where Clause Where 子句 +Where labels sit relative to their features. 标注相对于其要素的位置。 Windows 窗口 Winkel Tripel 温克尔三重投影 World 世界 diff --git a/crates/ui-egui/src/icons.rs b/crates/ui-egui/src/icons.rs index cec7c4b..37ead80 100644 --- a/crates/ui-egui/src/icons.rs +++ b/crates/ui-egui/src/icons.rs @@ -758,6 +758,66 @@ pub fn paint(painter: &Painter, r: Rect, name: &str, ink: Color32, accent: Color ); p.line(&[(4.0, 4.0), (4.0, 20.0), (20.0, 20.0)], 1.2, ink); } + "paste" => { + p.rect(4.0, 4.0, 13.0, 17.0, Some(p.tint(60)), Some((1.3, ink)), 1.5); + p.rect(7.5, 2.5, 6.0, 3.5, Some(accent), Some((1.1, ink)), 1.0); + p.page(11.0, 9.0, 10.0, 13.0); + } + "copy" => { + p.page(3.0, 3.0, 11.0, 14.0); + p.page(9.0, 7.0, 11.0, 14.0); + p.rect(11.5, 12.0, 6.0, 1.2, Some(accent), None, 0.5); + p.rect(11.5, 15.0, 6.0, 1.2, Some(accent), None, 0.5); + } + "cut" => { + p.circle(7.0, 17.0, 3.2, Some(p.tint(60)), Some((1.4, ink))); + p.circle(17.0, 17.0, 3.2, Some(p.tint(60)), Some((1.4, ink))); + p.line(&[(9.0, 14.5), (16.0, 3.0)], 1.6, ink); + p.line(&[(15.0, 14.5), (8.0, 3.0)], 1.6, ink); + } + "copy_path" => { + p.page(3.0, 3.0, 12.0, 15.0); + p.line(&[(6.0, 9.0), (12.0, 9.0)], 1.1, ink); + p.line(&[(6.0, 12.0), (10.0, 12.0)], 1.1, ink); + p.rect(10.0, 14.0, 12.0, 7.0, Some(accent), None, 2.0); + p.text(16.0, 17.5, "C:\\", 5.0, Color32::WHITE); + } + "popup" => { + p.rect(3.0, 3.0, 18.0, 12.0, Some(p.tint(50)), Some((1.3, ink)), 2.0); + p.fill(&[(8.0, 15.0), (13.0, 15.0), (9.0, 20.0)], ink); + p.line(&[(6.0, 7.0), (17.0, 7.0)], 1.1, ink); + p.line(&[(6.0, 10.5), (13.0, 10.5)], 1.1, ink); + } + "label_lock" => { + paint(painter, r, "label", ink, accent); + p.rect(14.0, 14.5, 8.0, 7.0, Some(amber), Some((1.0, ink)), 1.0); + p.arc(18.0, 14.5, 2.6, 180.0, 360.0, 1.3, ink); + } + "label_pause" => { + paint(painter, r, "label", ink, accent); + p.circle(18.0, 18.0, 4.5, Some(amber), None); + p.line(&[(16.8, 16.0), (16.8, 20.0)], 1.4, Color32::WHITE); + p.line(&[(19.2, 16.0), (19.2, 20.0)], 1.4, Color32::WHITE); + } + "label_unplaced" => { + p.fill(&[(2.0, 7.0), (17.0, 7.0), (22.0, 12.0), (17.0, 17.0), (2.0, 17.0)], red.gamma_multiply(0.25)); + p.closed(&[(2.0, 7.0), (17.0, 7.0), (22.0, 12.0), (17.0, 17.0), (2.0, 17.0)], 1.3, red); + p.text(10.0, 12.0, "Abc", 6.8, red); + } + "label_convert" => { + paint(painter, r, "label", ink, accent); + p.line(&[(13.0, 21.0), (21.0, 21.0)], 1.5, green); + p.fill(&[(19.0, 18.5), (23.0, 21.0), (19.0, 23.5)], green); + } + "placement" => { + p.circle(8.0, 15.0, 3.0, Some(accent), Some((1.2, ink))); + p.rect(11.0, 4.0, 11.0, 7.0, Some(p.tint(60)), Some((1.2, ink)), 1.5); + p.line(&[(10.0, 12.5), (12.0, 10.5)], 1.2, ink); + } + "scale_label" => { + paint(painter, r, "scale_range", ink, accent); + p.text(17.0, 6.0, "A", 7.0, ink); + } _ => { p.rect(4.0, 4.0, 16.0, 16.0, Some(p.tint(60)), Some((1.2, ink)), 3.0); } diff --git a/crates/ui-egui/src/lib.rs b/crates/ui-egui/src/lib.rs index f796c79..cddd62a 100644 --- a/crates/ui-egui/src/lib.rs +++ b/crates/ui-egui/src/lib.rs @@ -88,6 +88,8 @@ pub struct UiState { /// Tab rectangles from the last frame (for the contextual group header). pub tab_rects: Vec<(String, egui::Rect)>, pub tab_strip_rect: Option, + /// Text to put on the system clipboard at the end of the frame. + pub copy_out: Option, } impl Default for UiState { @@ -107,6 +109,7 @@ impl Default for UiState { shortcuts: false, tab_rects: Vec::new(), tab_strip_rect: None, + copy_out: None, } } } @@ -368,12 +371,29 @@ impl RustGisApp { let (lon, lat) = (p.get("lon").cloned().unwrap_or(Value::Null), p.get("lat").cloned().unwrap_or(Value::Null)); let v = self.session.run("identify", &json!({"lon": lon, "lat": lat, "tolerancePx": 5}))?; if let (false, Some(lon), Some(lat)) = (v.is_null(), lon.as_f64(), lat.as_f64()) { - self.map.popup = Some(mapview::Popup { info: v, at: rustgis_engine::geom::Coord::new(lon, lat) }); + self.map.popup = Some(mapview::Popup { info: v, at: rustgis_engine::geom::Coord::new(lon, lat), index: 0 }); } else { self.map.popup = None; } } "ui.shortcuts" => self.ui.shortcuts = true, + // Copy, cut and copy path also put their text on the system clipboard. + "ui.copy" | "ui.cut" | "ui.copyPath" => { + let cmd = match id { + "ui.copy" => "edit.copy", + "ui.cut" => "edit.cut", + _ => "layer.copyPath", + }; + let v = self.run(cmd, p.clone())?; + if let Some(t) = v.get("text").and_then(Value::as_str) { + self.ui.copy_out = Some(t.to_string()); + } + if id == "ui.copyPath" { + self.session + .notify(i18n::fmt("Copied {path}", &[("path", v.get("text").and_then(Value::as_str).unwrap_or(""))]), false); + } + return Ok(v); + } "ui.backstage" => self.ui.backstage = p.get("open").and_then(Value::as_bool).unwrap_or(!self.ui.backstage), "ui.tab" => { if let Some(t) = p.get("tab").and_then(Value::as_str) { @@ -601,6 +621,9 @@ impl RustGisApp { chrome::command_search(self, &ctx); chrome::about(self, &ctx); chrome::notices(self, &ctx); + if let Some(text) = self.ui.copy_out.take() { + ctx.copy_text(text); + } let title = format!("{}{} - RustGIS", self.session.project.name, if self.session.dirty { " •" } else { "" }); if title != self.sent_title { ctx.send_viewport_cmd(egui::ViewportCommand::Title(title.clone())); diff --git a/crates/ui-egui/src/mapview.rs b/crates/ui-egui/src/mapview.rs index c17f0ba..8486e3e 100644 --- a/crates/ui-egui/src/mapview.rs +++ b/crates/ui-egui/src/mapview.rs @@ -31,6 +31,8 @@ enum DragKind { pub struct Popup { pub info: Value, pub at: Coord, + /// Which of the identified features is shown (Visible Layers identifies several). + pub index: usize, } pub struct MapView { @@ -143,6 +145,7 @@ pub fn show(app: &mut RustGisApp, ui: &mut Ui) { None => app.map.texture = Some(ui.ctx().load_texture("map", img, egui::TextureOptions::LINEAR)), } app.map.labels = r.labels; + app.map.labels.splice(0..0, r.unplaced); app.map.tex_camera = cam; app.map.key = Some(key); } @@ -400,7 +403,7 @@ fn interact(app: &mut RustGisApp, ui: &mut Ui, resp: &egui::Response, rect: Rect if let (Some(id), Some(row)) = (v["layerId"].as_u64(), v["row"].as_u64()) { let _ = app.session.run("select.rows", &json!({"layer": id, "rows": [row]})); } - Some(Popup { info: v, at: c }) + Some(Popup { info: v, at: c, index: 0 }) } _ => { let _ = app.session.run("select.clear", &Value::Null); @@ -650,7 +653,10 @@ fn popup(app: &mut RustGisApp, ui: &mut Ui, rect: Rect) { if !rect.contains(anchor) { return; } - let info = pp.info.clone(); + let results = pp.info["results"].as_array().map_or(0, Vec::len); + let index = pp.index.min(results.saturating_sub(1)); + let info = if results > 1 { pp.info["results"][index].clone() } else { pp.info.clone() }; + let mut step: Option = None; let layer = info["layer"].as_str().unwrap_or("").to_string(); let attrs = info["attributes"].as_object().cloned().unwrap_or_default(); let title = if info["raster"].as_bool() == Some(true) { @@ -705,6 +711,22 @@ fn popup(app: &mut RustGisApp, ui: &mut Ui, rect: Rect) { if ui.add(egui::Button::new(tl!("×")).frame(false)).clicked() { close = true; } + // Several features identified: step through them. + if results > 1 { + if ui.add_enabled(index + 1 < results, egui::Button::new("›").frame(false)).clicked() { + step = Some(index + 1); + } + let n = (index + 1).to_string(); + let total = results.to_string(); + ui.label( + egui::RichText::new(crate::i18n::fmt("{n} of {total}", &[("n", &n), ("total", &total)])) + .size(11.0) + .color(t.text_dim), + ); + if ui.add_enabled(index > 0, egui::Button::new("‹").frame(false)).clicked() { + step = Some(index.saturating_sub(1)); + } + } }); }); }); @@ -762,6 +784,8 @@ fn popup(app: &mut RustGisApp, ui: &mut Ui, rect: Rect) { } if close { app.map.popup = None; + } else if let (Some(i), Some(pp)) = (step, &mut app.map.popup) { + pp.index = i; } } diff --git a/crates/ui-egui/src/ribbon.rs b/crates/ui-egui/src/ribbon.rs index abad727..86c641a 100644 --- a/crates/ui-egui/src/ribbon.rs +++ b/crates/ui-egui/src/ribbon.rs @@ -203,7 +203,23 @@ fn tool_btn(ui: &mut Ui, app: &mut RustGisApp, icon: &str, label: &str, desc: &s } } +/// The Clipboard group shared by the Map and Edit tabs. +fn clipboard_group(app: &mut RustGisApp, ui: &mut Ui) { + group(ui, "Clipboard", |ui| { + big_menu(ui, app, "paste", "Paste", "Paste copied features into the selected layer, or as a new layer.", |ui, app| { + menu_item(ui, app, "paste", "Paste", "edit.paste", Value::Null); + menu_item(ui, app, "paste", "Paste Special (as a new layer)", "edit.pasteSpecial", Value::Null); + }); + col(ui, |ui| { + small(ui, app, "cut", "Cut", "Copy the selected features and delete them.", "ui.cut", Value::Null, false); + small(ui, app, "copy", "Copy", "Copy the selected features (also as GeoJSON text).", "ui.copy", Value::Null, false); + small(ui, app, "copy_path", "Copy Path", "Copy the selected layer's data source path.", "ui.copyPath", Value::Null, false); + }); + }); +} + fn map_tab(app: &mut RustGisApp, ui: &mut Ui) { + clipboard_group(app, ui); group(ui, "Navigate", |ui| { tool_btn( ui, @@ -240,6 +256,17 @@ fn map_tab(app: &mut RustGisApp, ui: &mut Ui) { small(ui, app, "next_extent", "Next", "Go forward to the next extent.", "map.nextExtent", Value::Null, false); small(ui, app, "goto_xy", "Go To XY", "Pan to a longitude/latitude.", "ui.dialog", json!({"name": "goToXY"}), false); }); + col(ui, |ui| { + let mode = app.session.map().popup_mode; + small_menu(ui, app, "popup", "Pop-ups", "Choose which layers a click identifies.", |ui, app| { + for m in rustgis_engine::map::PopupMode::ALL { + if ui.radio(mode == m, tl!(m.label())).clicked() { + let _ = app.run("map.popupMode", json!({"mode": m.code()})); + ui.close(); + } + } + }); + }); }); group(ui, "Layer", |ui| { big_menu(ui, app, "basemap", "Basemap", "Change the map's backdrop.", basemap_gallery); @@ -324,6 +351,41 @@ fn map_tab(app: &mut RustGisApp, ui: &mut Ui) { on, false, ); + let d = app.session.map().label_display; + col(ui, |ui| { + small( + ui, + app, + "label_lock", + "Lock", + "Keep the labelled features fixed as the map moves.", + "labels.lock", + Value::Null, + d.locked, + ); + small(ui, app, "label_pause", "Pause", "Stop drawing labels, for faster navigation.", "labels.pause", Value::Null, d.paused); + small( + ui, + app, + "label_unplaced", + "View Unplaced", + "Show the labels that don't fit, in red.", + "labels.viewUnplaced", + Value::Null, + d.show_unplaced, + ); + }); + big( + ui, + app, + "label_convert", + "Convert", + "Convert the selected layer's labels into an annotation layer.", + "labels.convert", + Value::Null, + false, + false, + ); }); } @@ -609,6 +671,7 @@ fn view_tab(app: &mut RustGisApp, ui: &mut Ui) { } fn edit_tab(app: &mut RustGisApp, ui: &mut Ui) { + clipboard_group(app, ui); group(ui, "Manage Edits", |ui| { big(ui, app, "save", "Save", "Save the project with your edits.", "ui.save", Value::Null, false, false); col(ui, |ui| { @@ -1113,6 +1176,65 @@ fn labeling_tab(app: &mut RustGisApp, ui: &mut Ui) { let on = layer.labels.enabled; big(ui, app, if on { "label" } else { "label_off" }, "Label", "Turn labels on or off.", "labels.enable", Value::Null, on, false); }); + group(ui, "Visibility Range", |ui| { + ui.vertical(|ui| { + ui.add_space(6.0); + for (label, cur, key) in [("Out Beyond", layer.labels.min_scale, "min"), ("In Beyond", layer.labels.max_scale, "max")] { + ui.horizontal(|ui| { + ui.label(egui::RichText::new(tl!(label)).size(11.5)); + egui::ComboBox::from_id_salt(format!("label_scale_{key}")).selected_text(scale_label(cur)).width(118.0).show_ui( + ui, + |ui| { + let mut choices: Vec> = vec![None]; + choices.extend(SCALES.iter().map(|s| Some(*s))); + for c in choices { + if ui.selectable_label(c == cur, scale_label(c)).clicked() { + let _ = app.run("labels.scaleRange", json!({key: c})); + } + } + }, + ); + }); + } + }); + col(ui, |ui| { + for (label, cur, key, desc) in [ + ("Closest", layer.labels.closest, "closest", "Hide labels when the viewer is closer than this."), + ("Farthest", layer.labels.farthest, "farthest", "Hide labels when the viewer is farther than this."), + ] { + small_menu(ui, app, "eye", label, desc, |ui, app| { + for d in [None, Some(1_000.0), Some(10_000.0), Some(100_000.0), Some(1_000_000.0), Some(10_000_000.0)] { + let text = d.map(rustgis_engine::geom::format_distance).unwrap_or_else(|| tl!("").to_string()); + if ui.radio(cur == d, text).clicked() { + let _ = app.run("labels.distanceRange", json!({key: d})); + ui.close(); + } + } + }); + } + small( + ui, + app, + "scale_label", + "Clear Limits", + "Draw labels at every scale and distance.", + "labels.scaleRange", + json!({"clear": true}), + false, + ); + }); + }); + group(ui, "Label Placement", |ui| { + let cur = layer.labels.placement; + big_menu(ui, app, "placement", "Placement", "Where labels sit relative to their features.", |ui, app| { + for pl in rustgis_engine::map::LabelPlacement::ALL { + if ui.radio(cur == pl, tl!(pl.label())).clicked() { + let _ = app.run("labels.placement", json!({"position": pl.code()})); + ui.close(); + } + } + }); + }); group(ui, "Label Class", |ui| { ui.vertical(|ui| { ui.add_space(8.0); diff --git a/docs/parity.md b/docs/parity.md index 80bfbe1..5fd1830 100644 --- a/docs/parity.md +++ b/docs/parity.md @@ -4,22 +4,22 @@ Generated by `cargo xtask parity` from `crates/engine/src/catalog.rs`. `[x]` = i by the RustGIS command in brackets. ```text -Ribbon feature coverage: 69/316 (21%) +Ribbon feature coverage: 94/316 (29%) Map › Clipboard - [ ] Paste - [ ] Paste Special - [ ] Cut - [ ] Copy - [ ] Copy Path + [x] Paste (edit.paste) + [x] Paste Special (edit.pasteSpecial) + [x] Cut (edit.cut) + [x] Copy (edit.copy) + [x] Copy Path (layer.copyPath) Map › Navigate [x] Explore (tool.set) - [ ] Topmost Layer - [ ] Visible Layers - [ ] Selectable Layers - [ ] Selected in Contents - [ ] No Pop-ups + [x] Topmost Layer (map.popupMode) + [x] Visible Layers (map.popupMode) + [x] Selectable Layers (map.popupMode) + [x] Selected in Contents (map.popupMode) + [x] No Pop-ups (map.popupMode) [ ] Planar Navigation [ ] First-Person Navigation [x] Bookmarks (bookmark.go) @@ -51,10 +51,10 @@ Map › Inquiry [x] Identify (identify) Map › Labeling - [ ] Convert - [ ] Lock - [ ] Pause - [ ] View Unplaced + [x] Convert (labels.convert) + [x] Lock (labels.lock) + [x] Pause (labels.pause) + [x] View Unplaced (labels.viewUnplaced) Map › Offline [ ] Download Map @@ -260,11 +260,11 @@ View › Navigation [ ] Magnifier Edit › Clipboard - [ ] Paste - [ ] Paste Special - [ ] Cut - [ ] Copy - [ ] Copy Path + [x] Paste (edit.paste) + [x] Paste Special (edit.pasteSpecial) + [x] Cut (edit.cut) + [x] Copy (edit.copy) + [x] Copy Path (layer.copyPath) Edit › Manage Edits [x] Save (project.save) @@ -456,17 +456,17 @@ Labeling › Layer [x] Label (labels.enable) Labeling › Visibility Range - [ ] Maximum Scale - [ ] Minimum Scale - [ ] Clear Limits - [ ] Closest Distance - [ ] Farthest Distance + [x] Maximum Scale (labels.scaleRange) + [x] Minimum Scale (labels.scaleRange) + [x] Clear Limits (labels.scaleRange) + [x] Closest Distance (labels.distanceRange) + [x] Farthest Distance (labels.distanceRange) Labeling › Text Symbol [x] Text Symbol Style (labels.style) Labeling › Label Placement - [ ] Label Placement Style + [x] Label Placement Style (labels.placement) Data › Definition Query [x] Layer Definition Query (layer.definitionQuery) diff --git a/docs/user-guide.md b/docs/user-guide.md index 7b62e85..efb6af3 100644 --- a/docs/user-guide.md +++ b/docs/user-guide.md @@ -99,6 +99,31 @@ path and reopen it; rasters added in the browser are stored inside the project. or quantile. - **Proportional Symbols**: point size grows with a numeric field. +## Labeling + +Turn labels on per layer (Map › Labeling › Label, or the Labeling tab), then: + +- **Visibility Range**: draw labels only between two scales (Out Beyond / In Beyond), or between + two viewing distances (Closest / Farthest). Clear Limits removes all four. +- **Placement**: automatic (above points, centred on lines and polygons), centred, or one of + eight positions around the feature. +- **Lock** keeps the labelled features fixed while you pan and zoom; **Pause** stops drawing + labels for faster navigation; **View Unplaced** draws the labels that didn't fit in red. +- **Convert** turns a layer's labels into an annotation layer: one point per label, carrying its + text in a `TEXT` field, which you can then edit, move or delete like any other features. + +## Clipboard and pop-ups + +Copy (++ctrl+c++) and Cut (++ctrl+x++) take the selected features. Paste (++ctrl+v++) adds them to +the layer selected in Contents, matching fields by name; Paste Special adds them as a new layer. +Copied features also go on the system clipboard as GeoJSON, so they can be pasted into another +RustGIS window or a text editor, and GeoJSON copied elsewhere pastes into RustGIS. Copy Path copies +the selected layer's data source path. + +Pop-ups (Map › Navigate) choose what a click with Explore identifies: the topmost feature, every +visible layer's feature (step through them with ‹ ›), only selectable layers, only the layer +selected in Contents, or nothing. + ## Selection and queries Select By Attributes and definition queries use SQL `WHERE` clauses: @@ -191,3 +216,4 @@ in the page, so the page is busy while it computes. | ++home++ | Full extent | | ++esc++ | Back to Explore; cancel a sketch | | ++delete++ | Delete selected features | +| ++ctrl+c++ / ++ctrl+x++ / ++ctrl+v++ | Copy / Cut / Paste features |