use bone_ui::strings::{Locale, StringKey, StringTable};

pub const APP_TITLE: StringKey = StringKey::new("app.title");

pub const RIBBON_LABEL: StringKey = StringKey::new("shell.ribbon");
pub const RIBBON_TAB_FEATURES: StringKey = StringKey::new("shell.ribbon.tab.features");
pub const RIBBON_TAB_SKETCH: StringKey = StringKey::new("shell.ribbon.tab.sketch");
pub const RIBBON_TAB_SURFACES: StringKey = StringKey::new("shell.ribbon.tab.surfaces");
pub const RIBBON_TAB_EVALUATE: StringKey = StringKey::new("shell.ribbon.tab.evaluate");
pub const RIBBON_GROUP_ENTITIES: StringKey = StringKey::new("shell.ribbon.group.entities");
pub const RIBBON_GROUP_RELATIONS: StringKey = StringKey::new("shell.ribbon.group.relations");
pub const RIBBON_GROUP_DIMENSIONS: StringKey = StringKey::new("shell.ribbon.group.dimensions");
pub const CONFIRM_ACCEPT: StringKey = StringKey::new("confirm.accept");
pub const CONFIRM_CANCEL: StringKey = StringKey::new("confirm.cancel");

pub const TOOL_POINT: StringKey = StringKey::new("tool.point");
pub const TOOL_LINE: StringKey = StringKey::new("tool.line");
pub const TOOL_CENTERPOINT_ARC: StringKey = StringKey::new("tool.centerpoint_arc");
pub const TOOL_TANGENT_ARC: StringKey = StringKey::new("tool.tangent_arc");
pub const TOOL_THREE_POINT_ARC: StringKey = StringKey::new("tool.three_point_arc");
pub const TOOL_CIRCLE: StringKey = StringKey::new("tool.circle");
pub const TOOL_PERIMETER_CIRCLE: StringKey = StringKey::new("tool.perimeter_circle");
pub const TOOL_CORNER_RECTANGLE: StringKey = StringKey::new("tool.corner_rectangle");
pub const TOOL_CENTER_RECTANGLE: StringKey = StringKey::new("tool.center_rectangle");
pub const TOOL_THREE_POINT_CORNER_RECTANGLE: StringKey =
    StringKey::new("tool.three_point_corner_rectangle");
pub const TOOL_THREE_POINT_CENTER_RECTANGLE: StringKey =
    StringKey::new("tool.three_point_center_rectangle");
pub const TOOL_PARALLELOGRAM: StringKey = StringKey::new("tool.parallelogram");

pub const TOOL_COINCIDENT: StringKey = StringKey::new("tool.coincident");
pub const TOOL_HORIZONTAL: StringKey = StringKey::new("tool.horizontal");
pub const TOOL_VERTICAL: StringKey = StringKey::new("tool.vertical");
pub const TOOL_PARALLEL: StringKey = StringKey::new("tool.parallel");
pub const TOOL_PERPENDICULAR: StringKey = StringKey::new("tool.perpendicular");
pub const TOOL_TANGENT: StringKey = StringKey::new("tool.tangent");
pub const TOOL_EQUAL: StringKey = StringKey::new("tool.equal");
pub const TOOL_CONCENTRIC: StringKey = StringKey::new("tool.concentric");
pub const TOOL_FIX: StringKey = StringKey::new("tool.fix");
pub const TOOL_MIDPOINT: StringKey = StringKey::new("tool.midpoint");
pub const TOOL_SYMMETRIC: StringKey = StringKey::new("tool.symmetric");

pub const REL_HINT_ONE_LINE: StringKey = StringKey::new("rel.hint.one_line");
pub const REL_HINT_TWO_LINES: StringKey = StringKey::new("rel.hint.two_lines");
pub const REL_HINT_COINCIDENT: StringKey = StringKey::new("rel.hint.coincident");
pub const REL_HINT_TWO_CIRCULAR: StringKey = StringKey::new("rel.hint.two_circular");
pub const REL_HINT_TANGENT: StringKey = StringKey::new("rel.hint.tangent");
pub const REL_HINT_EQUAL: StringKey = StringKey::new("rel.hint.equal");
pub const REL_HINT_MIDPOINT: StringKey = StringKey::new("rel.hint.midpoint");
pub const REL_HINT_ENTITY: StringKey = StringKey::new("rel.hint.entity");
pub const REL_HINT_SYMMETRIC: StringKey = StringKey::new("rel.hint.symmetric");
pub const PROPERTY_ROW_AXIS: StringKey = StringKey::new("property.row.axis");

pub const TOOL_SMART_DIMENSION: StringKey = StringKey::new("tool.smart_dimension");
pub const TOOL_RADIUS: StringKey = StringKey::new("tool.radius");
pub const TOOL_DIAMETER: StringKey = StringKey::new("tool.diameter");

pub const DIM_HINT_GENERIC: StringKey = StringKey::new("dim.hint.generic");
pub const DIM_PLACEHOLDER_LENGTH: StringKey = StringKey::new("dim.placeholder.length");
pub const DIM_PLACEHOLDER_ANGLE: StringKey = StringKey::new("dim.placeholder.angle");
pub const DIM_CONFLICT_TITLE: StringKey = StringKey::new("dim.conflict.title");
pub const DIM_CONFLICT_MESSAGE: StringKey = StringKey::new("dim.conflict.message");
pub const DIM_CONFLICT_MAKE_DRIVEN: StringKey = StringKey::new("dim.conflict.make_driven");
pub const DIM_CONFLICT_CANCEL: StringKey = StringKey::new("dim.conflict.cancel");

pub const FEATURE_TREE_LABEL: StringKey = StringKey::new("shell.feature_tree");
pub const FEATURE_HISTORY: StringKey = StringKey::new("feature.history");
pub const FEATURE_SENSORS: StringKey = StringKey::new("feature.sensors");
pub const FEATURE_ANNOTATIONS: StringKey = StringKey::new("feature.annotations");
pub const FEATURE_SOLID_BODIES: StringKey = StringKey::new("feature.solid_bodies");
pub const FEATURE_MATERIAL: StringKey = StringKey::new("feature.material");
pub const FEATURE_ORIGIN: StringKey = StringKey::new("feature.origin");
pub const FEATURE_PLANE_XY: StringKey = StringKey::new("feature.plane.xy");
pub const FEATURE_PLANE_YZ: StringKey = StringKey::new("feature.plane.yz");
pub const FEATURE_PLANE_ZX: StringKey = StringKey::new("feature.plane.zx");

pub const PROPERTY_PANE_LABEL: StringKey = StringKey::new("shell.property_pane");
pub const LEFT_PANE_LABEL: StringKey = StringKey::new("shell.left_pane");
pub const LEFT_PANE_TAB_CONFIGURATION: StringKey =
    StringKey::new("shell.left_pane.tab.configuration");
pub const LEFT_PANE_TAB_DIMENSION_EXPERT: StringKey =
    StringKey::new("shell.left_pane.tab.dimension_expert");
pub const LEFT_PANE_TAB_DISPLAY: StringKey = StringKey::new("shell.left_pane.tab.display");

pub const DOC_TABS_LABEL: StringKey = StringKey::new("shell.doc_tabs");
pub const DOC_TAB_MODEL: StringKey = StringKey::new("shell.doc_tabs.model");

pub const STATUS_BAR_LABEL: StringKey = StringKey::new("shell.status_bar");
pub const STATUS_READY: StringKey = StringKey::new("status.ready");
pub const STATUS_SKETCH_ACTIVE: StringKey = StringKey::new("status.sketch_active");
pub const STATUS_UNITS_MM: StringKey = StringKey::new("status.units.mm");
pub const STATUS_SKETCH_UNDER_DEFINED: StringKey = StringKey::new("status.sketch.under_defined");
pub const STATUS_SKETCH_FULLY_DEFINED: StringKey = StringKey::new("status.sketch.fully_defined");
pub const STATUS_SKETCH_OVER_DEFINED: StringKey = StringKey::new("status.sketch.over_defined");
pub const STATUS_SKETCH_NO_SOLUTION: StringKey = StringKey::new("status.sketch.no_solution");
pub const STATUS_SKETCH_INVALID: StringKey = StringKey::new("status.sketch.invalid");
pub const STATUS_SKETCH_DANGLING: StringKey = StringKey::new("status.sketch.dangling");
pub const STATUS_PANEL_TITLE: StringKey = StringKey::new("status.panel.title");
pub const STATUS_PANEL_EMPTY: StringKey = StringKey::new("status.panel.empty");
pub const STATUS_PANEL_KIND_POINT: StringKey = StringKey::new("status.panel.kind.point");
pub const STATUS_PANEL_KIND_LINE: StringKey = StringKey::new("status.panel.kind.line");
pub const STATUS_PANEL_KIND_ARC: StringKey = StringKey::new("status.panel.kind.arc");
pub const STATUS_PANEL_KIND_CIRCLE: StringKey = StringKey::new("status.panel.kind.circle");
pub const STATUS_PANEL_KIND_LINEAR: StringKey = StringKey::new("status.panel.kind.linear");
pub const STATUS_PANEL_KIND_ANGULAR: StringKey = StringKey::new("status.panel.kind.angular");
pub const STATUS_PANEL_KIND_RADIUS: StringKey = StringKey::new("status.panel.kind.radius");
pub const STATUS_PANEL_KIND_DIAMETER: StringKey = StringKey::new("status.panel.kind.diameter");
pub const STATUS_PANEL_KIND_UNKNOWN: StringKey = StringKey::new("status.panel.kind.unknown");
pub const STATUS_PANEL_MORE: StringKey = StringKey::new("status.panel.more");
pub const TOOLBAR_OVERFLOW: StringKey = StringKey::new("toolbar.overflow");

pub const MENU_BAR_LABEL: StringKey = StringKey::new("shell.menu_bar");
pub const MENU_FILE: StringKey = StringKey::new("menu.file");
pub const MENU_EDIT: StringKey = StringKey::new("menu.edit");
pub const MENU_VIEW: StringKey = StringKey::new("menu.view");
pub const MENU_INSERT: StringKey = StringKey::new("menu.insert");
pub const MENU_TOOLS: StringKey = StringKey::new("menu.tools");
pub const MENU_SKETCH: StringKey = StringKey::new("menu.sketch");
pub const MENU_SKETCH_EXIT: StringKey = StringKey::new("menu.sketch.exit");
pub const MENU_WINDOW: StringKey = StringKey::new("menu.window");
pub const MENU_HELP: StringKey = StringKey::new("menu.help");
pub const MENU_FILE_NEW: StringKey = StringKey::new("menu.file.new");
pub const MENU_FILE_OPEN: StringKey = StringKey::new("menu.file.open");
pub const MENU_FILE_SAVE: StringKey = StringKey::new("menu.file.save");
pub const MENU_FILE_SAVE_AS: StringKey = StringKey::new("menu.file.save_as");
pub const MENU_FILE_QUIT: StringKey = StringKey::new("menu.file.quit");
pub const FILE_PICKER_TITLE_OPEN: StringKey = StringKey::new("file_picker.title.open");
pub const FILE_PICKER_TITLE_SAVE_AS: StringKey = StringKey::new("file_picker.title.save_as");
pub const FILE_PICKER_OPEN: StringKey = StringKey::new("file_picker.open");
pub const FILE_PICKER_SAVE: StringKey = StringKey::new("file_picker.save");
pub const FILE_PICKER_CANCEL: StringKey = StringKey::new("file_picker.cancel");
pub const FILE_PICKER_LIST: StringKey = StringKey::new("file_picker.list");
pub const FILE_PICKER_FILENAME_PLACEHOLDER: StringKey =
    StringKey::new("file_picker.filename_placeholder");
pub const FILE_PICKER_DIR_EMPTY: StringKey = StringKey::new("file_picker.dir.empty");
pub const FILE_OVERWRITE_TITLE: StringKey = StringKey::new("file.overwrite.title");
pub const FILE_OVERWRITE_MESSAGE: StringKey = StringKey::new("file.overwrite.message");
pub const FILE_OVERWRITE_REPLACE: StringKey = StringKey::new("file.overwrite.replace");
pub const FILE_OVERWRITE_CANCEL: StringKey = StringKey::new("file.overwrite.cancel");
pub const FILE_DISCARD_TITLE: StringKey = StringKey::new("file.discard.title");
pub const FILE_DISCARD_MESSAGE: StringKey = StringKey::new("file.discard.message");
pub const FILE_DISCARD_CONFIRM: StringKey = StringKey::new("file.discard.confirm");
pub const FILE_DISCARD_CANCEL: StringKey = StringKey::new("file.discard.cancel");
pub const DEFAULT_DOCUMENT_NAME: StringKey = StringKey::new("file.default_document_name");
pub const NOTIFY_SAVE_FAILED: StringKey = StringKey::new("notify.save_failed");
pub const NOTIFY_LOAD_FAILED: StringKey = StringKey::new("notify.load_failed");
pub const NOTIFY_SCAN_FAILED: StringKey = StringKey::new("notify.scan_failed");
pub const NOTIFY_SAVED: StringKey = StringKey::new("notify.saved");
pub const NOTIFY_DISMISS: StringKey = StringKey::new("notify.dismiss");
pub const MENU_EDIT_UNDO: StringKey = StringKey::new("menu.edit.undo");
pub const MENU_EDIT_REDO: StringKey = StringKey::new("menu.edit.redo");
pub const MENU_VIEW_ZOOM_FIT: StringKey = StringKey::new("menu.view.zoom_fit");
pub const MENU_PLACEHOLDER_COMING_SOON: StringKey = StringKey::new("menu.placeholder.coming_soon");
pub const MENU_TOOLS_OPTIONS: StringKey = StringKey::new("menu.tools.options");
pub const MENU_TOOLS_KEYBOARD: StringKey = StringKey::new("menu.tools.keyboard");
pub const KEYBOARD_DIALOG_TITLE: StringKey = StringKey::new("keyboard.dialog.title");
pub const SETTINGS_DIALOG_TITLE: StringKey = StringKey::new("settings.dialog.title");
pub const SETTINGS_PICK_APERTURE_LABEL: StringKey = StringKey::new("settings.pick_aperture.label");
pub const SETTINGS_PICK_APERTURE_HINT: StringKey = StringKey::new("settings.pick_aperture.hint");
pub const SETTINGS_RESET: StringKey = StringKey::new("settings.reset");
pub const SETTINGS_CLOSE: StringKey = StringKey::new("settings.close");
pub const HOTKEY_SECTION_HEADING: StringKey = StringKey::new("hotkey.section.heading");
pub const HOTKEY_RECORDING_HINT: StringKey = StringKey::new("hotkey.recording.hint");
pub const HOTKEY_RECORDING_PROMPT: StringKey = StringKey::new("hotkey.recording.prompt");
pub const HOTKEY_UNBOUND_LABEL: StringKey = StringKey::new("hotkey.unbound.label");
pub const HOTKEY_LABEL_SKETCH: StringKey = StringKey::new("hotkey.label.sketch");
pub const HOTKEY_LABEL_ESCAPE: StringKey = StringKey::new("hotkey.label.escape");
pub const HOTKEY_LABEL_SMART_DIMENSION: StringKey = StringKey::new("hotkey.label.smart_dimension");
pub const HOTKEY_LABEL_TRIM: StringKey = StringKey::new("hotkey.label.trim");
pub const HOTKEY_LABEL_EXTEND: StringKey = StringKey::new("hotkey.label.extend");
pub const HOTKEY_LABEL_MIRROR: StringKey = StringKey::new("hotkey.label.mirror");
pub const HOTKEY_LABEL_CONSTRUCTION_TOGGLE: StringKey =
    StringKey::new("hotkey.label.construction_toggle");
pub const HOTKEY_LABEL_UNDO: StringKey = StringKey::new("hotkey.label.undo");
pub const HOTKEY_LABEL_REDO: StringKey = StringKey::new("hotkey.label.redo");
pub const HOTKEY_LABEL_NEW: StringKey = StringKey::new("hotkey.label.new");
pub const HOTKEY_LABEL_OPEN: StringKey = StringKey::new("hotkey.label.open");
pub const HOTKEY_LABEL_SAVE: StringKey = StringKey::new("hotkey.label.save");
pub const HOTKEY_LABEL_SELECT_ALL: StringKey = StringKey::new("hotkey.label.select_all");
pub const HOTKEY_LABEL_DELETE_SELECTION: StringKey =
    StringKey::new("hotkey.label.delete_selection");
pub const HOTKEY_LABEL_ZOOM_FIT: StringKey = StringKey::new("hotkey.label.zoom_fit");
pub const HOTKEY_LABEL_SHORTCUT_BAR: StringKey = StringKey::new("hotkey.label.shortcut_bar");
pub const HOTKEY_LABEL_QUIT: StringKey = StringKey::new("hotkey.label.quit");
pub const NOTIFY_COMING_SOON: StringKey = StringKey::new("notify.coming_soon");
pub const NOTIFY_MIRROR_SELECTION_HINT: StringKey = StringKey::new("notify.mirror.selection_hint");
pub const NOTIFY_HOTKEY_CONFLICT: StringKey = StringKey::new("notify.hotkey.conflict");
pub const SHORTCUT_BAR_TITLE: StringKey = StringKey::new("shortcut_bar.title");

pub const PROPERTY_PANE_NO_SELECTION: StringKey = StringKey::new("property.no_selection");
pub const PROPERTY_ROW_KIND: StringKey = StringKey::new("property.row.kind");
pub const PROPERTY_ROW_X: StringKey = StringKey::new("property.row.x");
pub const PROPERTY_ROW_Y: StringKey = StringKey::new("property.row.y");
pub const PROPERTY_ROW_FROM: StringKey = StringKey::new("property.row.from");
pub const PROPERTY_ROW_TO: StringKey = StringKey::new("property.row.to");
pub const PROPERTY_ROW_CENTER: StringKey = StringKey::new("property.row.center");
pub const PROPERTY_ROW_START: StringKey = StringKey::new("property.row.start");
pub const PROPERTY_ROW_END: StringKey = StringKey::new("property.row.end");
pub const PROPERTY_ROW_RADIUS: StringKey = StringKey::new("property.row.radius");
pub const PROPERTY_ROW_CONSTRUCTION: StringKey = StringKey::new("property.row.construction");
pub const PROPERTY_KIND_POINT: StringKey = StringKey::new("property.kind.point");
pub const PROPERTY_KIND_LINE: StringKey = StringKey::new("property.kind.line");
pub const PROPERTY_KIND_ARC: StringKey = StringKey::new("property.kind.arc");
pub const PROPERTY_KIND_CIRCLE: StringKey = StringKey::new("property.kind.circle");
pub const PROPERTY_VALUE_YES: StringKey = StringKey::new("property.value.yes");
pub const PROPERTY_VALUE_NO: StringKey = StringKey::new("property.value.no");
pub const PROPERTY_ROW_FIRST: StringKey = StringKey::new("property.row.first");
pub const PROPERTY_ROW_SECOND: StringKey = StringKey::new("property.row.second");
pub const PROPERTY_ROW_TARGET: StringKey = StringKey::new("property.row.target");
pub const PROPERTY_ROW_POINT: StringKey = StringKey::new("property.row.point");
pub const PROPERTY_ROW_LINE: StringKey = StringKey::new("property.row.line");
pub const PROPERTY_ROW_DIM_KIND: StringKey = StringKey::new("property.row.dim.kind");
pub const PROPERTY_ROW_DIM_DRIVES: StringKey = StringKey::new("property.row.dim.drives");
pub const PROPERTY_ROW_DIM_LENGTH: StringKey = StringKey::new("property.row.dim.length");
pub const PROPERTY_ROW_DIM_DIAMETER: StringKey = StringKey::new("property.row.dim.diameter");
pub const PROPERTY_ROW_DIM_ANGLE: StringKey = StringKey::new("property.row.dim.angle");
pub const PROPERTY_KIND_DIM_LINEAR: StringKey = StringKey::new("property.kind.dim.linear");
pub const PROPERTY_KIND_DIM_RADIUS: StringKey = StringKey::new("property.kind.dim.radius");
pub const PROPERTY_KIND_DIM_DIAMETER: StringKey = StringKey::new("property.kind.dim.diameter");
pub const PROPERTY_KIND_DIM_ANGULAR: StringKey = StringKey::new("property.kind.dim.angular");
pub const PROPERTY_VALUE_DRIVING: StringKey = StringKey::new("property.value.driving");
pub const PROPERTY_VALUE_DRIVEN: StringKey = StringKey::new("property.value.driven");

#[must_use]
pub fn make_strings(locale: Locale) -> StringTable {
    let mut table = StringTable::for_locale(locale);
    let entries: &[(StringKey, &str)] = match locale {
        Locale::EnUs => EN_US,
        Locale::ArXb => AR_XB,
    };
    entries.iter().for_each(|(key, value)| {
        table.insert(*key, (*value).to_owned());
    });
    table
}

const EN_US: &[(StringKey, &str)] = &[
    (APP_TITLE, "Bone"),
    (RIBBON_LABEL, "Ribbon"),
    (RIBBON_TAB_FEATURES, "Features"),
    (RIBBON_TAB_SKETCH, "Sketch"),
    (RIBBON_TAB_SURFACES, "Surfaces"),
    (RIBBON_TAB_EVALUATE, "Evaluate"),
    (RIBBON_GROUP_ENTITIES, "Entities"),
    (RIBBON_GROUP_RELATIONS, "Relations"),
    (RIBBON_GROUP_DIMENSIONS, "Dimensions"),
    (CONFIRM_ACCEPT, "Accept"),
    (CONFIRM_CANCEL, "Cancel"),
    (TOOL_POINT, "Point"),
    (TOOL_LINE, "Line"),
    (TOOL_CENTERPOINT_ARC, "Centerpoint Arc"),
    (TOOL_TANGENT_ARC, "Tangent Arc"),
    (TOOL_THREE_POINT_ARC, "3 Point Arc"),
    (TOOL_CIRCLE, "Circle"),
    (TOOL_PERIMETER_CIRCLE, "Perimeter Circle"),
    (TOOL_CORNER_RECTANGLE, "Corner Rectangle"),
    (TOOL_CENTER_RECTANGLE, "Center Rectangle"),
    (
        TOOL_THREE_POINT_CORNER_RECTANGLE,
        "3 Point Corner Rectangle",
    ),
    (
        TOOL_THREE_POINT_CENTER_RECTANGLE,
        "3 Point Center Rectangle",
    ),
    (TOOL_PARALLELOGRAM, "Parallelogram"),
    (TOOL_COINCIDENT, "Coincident"),
    (TOOL_HORIZONTAL, "Horizontal"),
    (TOOL_VERTICAL, "Vertical"),
    (TOOL_PARALLEL, "Parallel"),
    (TOOL_PERPENDICULAR, "Perpendicular"),
    (TOOL_TANGENT, "Tangent"),
    (TOOL_EQUAL, "Equal"),
    (TOOL_CONCENTRIC, "Concentric"),
    (TOOL_FIX, "Fix"),
    (TOOL_MIDPOINT, "Midpoint"),
    (TOOL_SYMMETRIC, "Symmetric"),
    (REL_HINT_ONE_LINE, "Select a line"),
    (REL_HINT_TWO_LINES, "Select two lines"),
    (REL_HINT_COINCIDENT, "Select a point and another entity"),
    (REL_HINT_TWO_CIRCULAR, "Select two arcs or circles"),
    (REL_HINT_TANGENT, "Select a line and a curve, or two curves"),
    (REL_HINT_EQUAL, "Select two lines or two curves"),
    (REL_HINT_MIDPOINT, "Select a point and a line"),
    (REL_HINT_ENTITY, "Select an entity"),
    (REL_HINT_SYMMETRIC, "Select two points and a line"),
    (PROPERTY_ROW_AXIS, "Axis"),
    (TOOL_SMART_DIMENSION, "Smart Dimension"),
    (TOOL_RADIUS, "Radius"),
    (TOOL_DIAMETER, "Diameter"),
    (
        DIM_HINT_GENERIC,
        "Select a line, two points, an arc, a circle, or two lines",
    ),
    (DIM_PLACEHOLDER_LENGTH, "value (mm)"),
    (DIM_PLACEHOLDER_ANGLE, "value (deg)"),
    (DIM_CONFLICT_TITLE, "Make Dimension Driven?"),
    (
        DIM_CONFLICT_MESSAGE,
        "Adding this dimension will over-define the sketch.",
    ),
    (DIM_CONFLICT_MAKE_DRIVEN, "Make driven"),
    (DIM_CONFLICT_CANCEL, "Cancel"),
    (FEATURE_TREE_LABEL, "Feature Tree"),
    (FEATURE_HISTORY, "History"),
    (FEATURE_SENSORS, "Sensors"),
    (FEATURE_ANNOTATIONS, "Annotations"),
    (FEATURE_SOLID_BODIES, "Solid Bodies"),
    (FEATURE_MATERIAL, "Material <not specified>"),
    (FEATURE_ORIGIN, "Origin"),
    (FEATURE_PLANE_XY, "Front Plane"),
    (FEATURE_PLANE_YZ, "Right Plane"),
    (FEATURE_PLANE_ZX, "Top Plane"),
    (PROPERTY_PANE_LABEL, "Property Manager"),
    (LEFT_PANE_LABEL, "Left Pane"),
    (LEFT_PANE_TAB_CONFIGURATION, "Configuration Manager"),
    (LEFT_PANE_TAB_DIMENSION_EXPERT, "DimXpert Manager"),
    (LEFT_PANE_TAB_DISPLAY, "Display Manager"),
    (DOC_TABS_LABEL, "Document Tabs"),
    (DOC_TAB_MODEL, "Model"),
    (STATUS_BAR_LABEL, "Status Bar"),
    (STATUS_READY, "Ready"),
    (STATUS_SKETCH_ACTIVE, "Editing"),
    (STATUS_UNITS_MM, "MMGS"),
    (STATUS_SKETCH_UNDER_DEFINED, "Under Defined"),
    (STATUS_SKETCH_FULLY_DEFINED, "Fully Defined"),
    (STATUS_SKETCH_OVER_DEFINED, "Over Defined"),
    (STATUS_SKETCH_NO_SOLUTION, "No Solution Found"),
    (STATUS_SKETCH_INVALID, "Invalid Solution Found"),
    (STATUS_SKETCH_DANGLING, "Dangling"),
    (STATUS_PANEL_TITLE, "Sketch Diagnostics"),
    (STATUS_PANEL_EMPTY, "No conflicting constraints."),
    (STATUS_PANEL_KIND_POINT, "Point"),
    (STATUS_PANEL_KIND_LINE, "Line"),
    (STATUS_PANEL_KIND_ARC, "Arc"),
    (STATUS_PANEL_KIND_CIRCLE, "Circle"),
    (STATUS_PANEL_KIND_LINEAR, "Linear Dimension"),
    (STATUS_PANEL_KIND_ANGULAR, "Angular Dimension"),
    (STATUS_PANEL_KIND_RADIUS, "Radius Dimension"),
    (STATUS_PANEL_KIND_DIAMETER, "Diameter Dimension"),
    (STATUS_PANEL_KIND_UNKNOWN, "Unknown"),
    (STATUS_PANEL_MORE, "+ {n} more"),
    (TOOLBAR_OVERFLOW, "More tools"),
    (MENU_BAR_LABEL, "Menu Bar"),
    (MENU_FILE, "File"),
    (MENU_EDIT, "Edit"),
    (MENU_VIEW, "View"),
    (MENU_INSERT, "Insert"),
    (MENU_TOOLS, "Tools"),
    (MENU_SKETCH, "Sketch"),
    (MENU_SKETCH_EXIT, "Exit Sketch"),
    (MENU_WINDOW, "Window"),
    (MENU_HELP, "Help"),
    (MENU_FILE_NEW, "New"),
    (MENU_FILE_OPEN, "Open..."),
    (MENU_FILE_SAVE, "Save"),
    (MENU_FILE_SAVE_AS, "Save As..."),
    (MENU_FILE_QUIT, "Quit"),
    (FILE_PICKER_TITLE_OPEN, "Open Document"),
    (FILE_PICKER_TITLE_SAVE_AS, "Save Document As"),
    (FILE_PICKER_OPEN, "Open"),
    (FILE_PICKER_SAVE, "Save"),
    (FILE_PICKER_CANCEL, "Cancel"),
    (FILE_PICKER_LIST, "Document folders"),
    (FILE_PICKER_FILENAME_PLACEHOLDER, "Document name"),
    (FILE_PICKER_DIR_EMPTY, "No documents in this folder"),
    (FILE_OVERWRITE_TITLE, "Replace document?"),
    (
        FILE_OVERWRITE_MESSAGE,
        "A document already exists at this location.",
    ),
    (FILE_OVERWRITE_REPLACE, "Replace"),
    (FILE_OVERWRITE_CANCEL, "Cancel"),
    (FILE_DISCARD_TITLE, "Discard unsaved changes?"),
    (
        FILE_DISCARD_MESSAGE,
        "Continuing will permanently lose your unsaved edits.",
    ),
    (FILE_DISCARD_CONFIRM, "Discard"),
    (FILE_DISCARD_CANCEL, "Keep editing"),
    (DEFAULT_DOCUMENT_NAME, "Untitled"),
    (NOTIFY_SAVE_FAILED, "Save failed"),
    (NOTIFY_LOAD_FAILED, "Open failed"),
    (NOTIFY_SCAN_FAILED, "Could not read documents folder"),
    (NOTIFY_SAVED, "Saved"),
    (NOTIFY_DISMISS, "Dismiss"),
    (MENU_EDIT_UNDO, "Undo"),
    (MENU_EDIT_REDO, "Redo"),
    (MENU_VIEW_ZOOM_FIT, "Zoom to Fit"),
    (MENU_PLACEHOLDER_COMING_SOON, "Coming Soon"),
    (MENU_TOOLS_OPTIONS, "Options..."),
    (MENU_TOOLS_KEYBOARD, "Customize Keyboard..."),
    (KEYBOARD_DIALOG_TITLE, "Customize Keyboard"),
    (SETTINGS_DIALOG_TITLE, "Selection options"),
    (SETTINGS_PICK_APERTURE_LABEL, "Pick aperture"),
    (
        SETTINGS_PICK_APERTURE_HINT,
        "How many pixels of slack the picker allows when clicking thin lines.",
    ),
    (SETTINGS_RESET, "Reset"),
    (SETTINGS_CLOSE, "Close"),
    (HOTKEY_SECTION_HEADING, "Keyboard shortcuts"),
    (HOTKEY_RECORDING_HINT, "Click to record, Esc to cancel"),
    (HOTKEY_RECORDING_PROMPT, "Press a key..."),
    (HOTKEY_UNBOUND_LABEL, "Unbound"),
    (HOTKEY_LABEL_SKETCH, "Sketch"),
    (HOTKEY_LABEL_ESCAPE, "Cancel / Exit Sketch"),
    (HOTKEY_LABEL_SMART_DIMENSION, "Smart Dimension"),
    (HOTKEY_LABEL_TRIM, "Trim Entities"),
    (HOTKEY_LABEL_EXTEND, "Extend Entities"),
    (HOTKEY_LABEL_MIRROR, "Mirror Entities"),
    (HOTKEY_LABEL_CONSTRUCTION_TOGGLE, "Toggle Construction"),
    (HOTKEY_LABEL_UNDO, "Undo"),
    (HOTKEY_LABEL_REDO, "Redo"),
    (HOTKEY_LABEL_NEW, "New"),
    (HOTKEY_LABEL_OPEN, "Open"),
    (HOTKEY_LABEL_SAVE, "Save"),
    (HOTKEY_LABEL_SELECT_ALL, "Select All"),
    (HOTKEY_LABEL_DELETE_SELECTION, "Delete"),
    (HOTKEY_LABEL_ZOOM_FIT, "Zoom to Fit"),
    (HOTKEY_LABEL_SHORTCUT_BAR, "Shortcut Bar"),
    (HOTKEY_LABEL_QUIT, "Quit"),
    (NOTIFY_COMING_SOON, "Coming soon"),
    (
        NOTIFY_MIRROR_SELECTION_HINT,
        "Select entities to mirror plus one axis line.",
    ),
    (
        NOTIFY_HOTKEY_CONFLICT,
        "Shortcut already used by another command.",
    ),
    (SHORTCUT_BAR_TITLE, "Shortcut Bar"),
    (PROPERTY_PANE_NO_SELECTION, "Nothing selected"),
    (PROPERTY_ROW_KIND, "Type"),
    (PROPERTY_ROW_X, "X"),
    (PROPERTY_ROW_Y, "Y"),
    (PROPERTY_ROW_FROM, "From"),
    (PROPERTY_ROW_TO, "To"),
    (PROPERTY_ROW_CENTER, "Center"),
    (PROPERTY_ROW_START, "Start"),
    (PROPERTY_ROW_END, "End"),
    (PROPERTY_ROW_RADIUS, "Radius"),
    (PROPERTY_ROW_CONSTRUCTION, "Construction"),
    (PROPERTY_KIND_POINT, "Point"),
    (PROPERTY_KIND_LINE, "Line"),
    (PROPERTY_KIND_ARC, "Arc"),
    (PROPERTY_KIND_CIRCLE, "Circle"),
    (PROPERTY_VALUE_YES, "Yes"),
    (PROPERTY_VALUE_NO, "No"),
    (PROPERTY_ROW_FIRST, "First"),
    (PROPERTY_ROW_SECOND, "Second"),
    (PROPERTY_ROW_TARGET, "Target"),
    (PROPERTY_ROW_POINT, "Point"),
    (PROPERTY_ROW_LINE, "Line"),
    (PROPERTY_ROW_DIM_KIND, "Type"),
    (PROPERTY_ROW_DIM_DRIVES, "Drives"),
    (PROPERTY_ROW_DIM_LENGTH, "Length"),
    (PROPERTY_ROW_DIM_DIAMETER, "Diameter"),
    (PROPERTY_ROW_DIM_ANGLE, "Angle"),
    (PROPERTY_KIND_DIM_LINEAR, "Linear"),
    (PROPERTY_KIND_DIM_RADIUS, "Radius"),
    (PROPERTY_KIND_DIM_DIAMETER, "Diameter"),
    (PROPERTY_KIND_DIM_ANGULAR, "Angular"),
    (PROPERTY_VALUE_DRIVING, "Driving"),
    (PROPERTY_VALUE_DRIVEN, "Driven"),
];

const AR_XB: &[(StringKey, &str)] = &[
    (APP_TITLE, "[!! Bône !!]"),
    (RIBBON_LABEL, "[!! ʁibbon !!]"),
    (RIBBON_TAB_FEATURES, "[!! Featûres !!]"),
    (RIBBON_TAB_SKETCH, "[!! Skêtch !!]"),
    (RIBBON_TAB_SURFACES, "[!! Sûrfaces !!]"),
    (RIBBON_TAB_EVALUATE, "[!! Évaluate !!]"),
    (RIBBON_GROUP_ENTITIES, "[!! Entîtîes !!]"),
    (RIBBON_GROUP_RELATIONS, "[!! Relâtions !!]"),
    (RIBBON_GROUP_DIMENSIONS, "[!! Dîmensions !!]"),
    (CONFIRM_ACCEPT, "[!! Accêpt !!]"),
    (CONFIRM_CANCEL, "[!! Cancêl !!]"),
    (TOOL_POINT, "[!! Pôint !!]"),
    (TOOL_LINE, "[!! Lîne !!]"),
    (TOOL_CENTERPOINT_ARC, "[!! Cêntrepoint Arc !!]"),
    (TOOL_TANGENT_ARC, "[!! Tângent Arc !!]"),
    (TOOL_THREE_POINT_ARC, "[!! 3 Pôint Arc !!]"),
    (TOOL_CIRCLE, "[!! Cîrcle !!]"),
    (TOOL_PERIMETER_CIRCLE, "[!! Perîmeter Cîrcle !!]"),
    (TOOL_CORNER_RECTANGLE, "[!! Côrner Rectàngle !!]"),
    (TOOL_CENTER_RECTANGLE, "[!! Cênter Rectàngle !!]"),
    (
        TOOL_THREE_POINT_CORNER_RECTANGLE,
        "[!! 3 Pôint Côrner Rectàngle !!]",
    ),
    (
        TOOL_THREE_POINT_CENTER_RECTANGLE,
        "[!! 3 Pôint Cênter Rectàngle !!]",
    ),
    (TOOL_PARALLELOGRAM, "[!! Parâllelôgram !!]"),
    (TOOL_COINCIDENT, "[!! Coincîdent !!]"),
    (TOOL_HORIZONTAL, "[!! Horîzontal !!]"),
    (TOOL_VERTICAL, "[!! Vêrtical !!]"),
    (TOOL_PARALLEL, "[!! Parâllel !!]"),
    (TOOL_PERPENDICULAR, "[!! Perpendîcular !!]"),
    (TOOL_TANGENT, "[!! Tângent !!]"),
    (TOOL_EQUAL, "[!! Équal !!]"),
    (TOOL_CONCENTRIC, "[!! Concêntric !!]"),
    (TOOL_FIX, "[!! Fîx !!]"),
    (TOOL_MIDPOINT, "[!! Mîdpoint !!]"),
    (TOOL_SYMMETRIC, "[!! Symmêtric !!]"),
    (REL_HINT_ONE_LINE, "[!! Sêlect a lîne !!]"),
    (REL_HINT_TWO_LINES, "[!! Sêlect twô lînes !!]"),
    (
        REL_HINT_COINCIDENT,
        "[!! Sêlect a pôint ând anôther êntity !!]",
    ),
    (REL_HINT_TWO_CIRCULAR, "[!! Sêlect twô ârcs ôr cîrcles !!]"),
    (
        REL_HINT_TANGENT,
        "[!! Sêlect a lîne ând a cûrve, ôr twô cûrves !!]",
    ),
    (REL_HINT_EQUAL, "[!! Sêlect twô lînes ôr twô cûrves !!]"),
    (REL_HINT_MIDPOINT, "[!! Sêlect a pôint ând a lîne !!]"),
    (REL_HINT_ENTITY, "[!! Sêlect an êntity !!]"),
    (REL_HINT_SYMMETRIC, "[!! Sêlect twô pôints ând a lîne !!]"),
    (PROPERTY_ROW_AXIS, "[!! Âxis !!]"),
    (TOOL_SMART_DIMENSION, "[!! Smârt Dimensiôn !!]"),
    (TOOL_RADIUS, "[!! Râdius !!]"),
    (TOOL_DIAMETER, "[!! Dîameter !!]"),
    (
        DIM_HINT_GENERIC,
        "[!! Sêlect a lîne, twô pôints, an ârc, a cîrcle, ôr twô lînes !!]",
    ),
    (DIM_PLACEHOLDER_LENGTH, "[!! valûe (mm) !!]"),
    (DIM_PLACEHOLDER_ANGLE, "[!! valûe (dêg) !!]"),
    (DIM_CONFLICT_TITLE, "[!! Mâke Dîmension Drîven? !!]"),
    (
        DIM_CONFLICT_MESSAGE,
        "[!! Âdding this dîmension will over-defîne the skêtch. !!]",
    ),
    (DIM_CONFLICT_MAKE_DRIVEN, "[!! Mâke drîven !!]"),
    (DIM_CONFLICT_CANCEL, "[!! Cancêl !!]"),
    (FEATURE_TREE_LABEL, "[!! Featûre Tree !!]"),
    (FEATURE_HISTORY, "[!! Hîstory !!]"),
    (FEATURE_SENSORS, "[!! Sênsors !!]"),
    (FEATURE_ANNOTATIONS, "[!! Annôtations !!]"),
    (FEATURE_SOLID_BODIES, "[!! Sôlid Bôdies !!]"),
    (FEATURE_MATERIAL, "[!! Matérial <nôt specîfied> !!]"),
    (FEATURE_ORIGIN, "[!! Orîgin !!]"),
    (FEATURE_PLANE_XY, "[!! Front Plàne !!]"),
    (FEATURE_PLANE_YZ, "[!! Rîght Plàne !!]"),
    (FEATURE_PLANE_ZX, "[!! Tôp Plàne !!]"),
    (PROPERTY_PANE_LABEL, "[!! Propérty Mânager !!]"),
    (LEFT_PANE_LABEL, "[!! Léft Pâne !!]"),
    (LEFT_PANE_TAB_CONFIGURATION, "[!! Cônfig Mânager !!]"),
    (LEFT_PANE_TAB_DIMENSION_EXPERT, "[!! DimXpêrt Mânager !!]"),
    (LEFT_PANE_TAB_DISPLAY, "[!! Display Mânager !!]"),
    (DOC_TABS_LABEL, "[!! Dôc Tâbs !!]"),
    (DOC_TAB_MODEL, "[!! Môdel !!]"),
    (STATUS_BAR_LABEL, "[!! Statûs Bar !!]"),
    (STATUS_READY, "[!! Réady !!]"),
    (STATUS_SKETCH_ACTIVE, "[!! Edîting !!]"),
    (STATUS_UNITS_MM, "[!! MMGS !!]"),
    (STATUS_SKETCH_UNDER_DEFINED, "[!! Ûnder Defîned !!]"),
    (STATUS_SKETCH_FULLY_DEFINED, "[!! Fûlly Defîned !!]"),
    (STATUS_SKETCH_OVER_DEFINED, "[!! Ôver Defîned !!]"),
    (STATUS_SKETCH_NO_SOLUTION, "[!! Nô Solûtion Foûnd !!]"),
    (STATUS_SKETCH_INVALID, "[!! Invâlid Solûtion Foûnd !!]"),
    (STATUS_SKETCH_DANGLING, "[!! Dânglîng !!]"),
    (STATUS_PANEL_TITLE, "[!! Skêtch Diâgnostics !!]"),
    (STATUS_PANEL_EMPTY, "[!! Nô conflîcting constrâints !!]"),
    (STATUS_PANEL_KIND_POINT, "[!! Pôint !!]"),
    (STATUS_PANEL_KIND_LINE, "[!! Lîne !!]"),
    (STATUS_PANEL_KIND_ARC, "[!! Ârc !!]"),
    (STATUS_PANEL_KIND_CIRCLE, "[!! Cîrcle !!]"),
    (STATUS_PANEL_KIND_LINEAR, "[!! Lîneâr Dimênsion !!]"),
    (STATUS_PANEL_KIND_ANGULAR, "[!! Ângulâr Dimênsion !!]"),
    (STATUS_PANEL_KIND_RADIUS, "[!! Râdius Dimênsion !!]"),
    (STATUS_PANEL_KIND_DIAMETER, "[!! Diâmeter Dimênsion !!]"),
    (STATUS_PANEL_KIND_UNKNOWN, "[!! Ûnknôwn !!]"),
    (STATUS_PANEL_MORE, "[!! + {n} môre !!]"),
    (TOOLBAR_OVERFLOW, "[!! Môre tôols !!]"),
    (MENU_BAR_LABEL, "[!! Mênu Bâr !!]"),
    (MENU_FILE, "[!! Fîle !!]"),
    (MENU_EDIT, "[!! Édit !!]"),
    (MENU_VIEW, "[!! Vîew !!]"),
    (MENU_INSERT, "[!! Insêrt !!]"),
    (MENU_TOOLS, "[!! Tôols !!]"),
    (MENU_SKETCH, "[!! Skêtch !!]"),
    (MENU_SKETCH_EXIT, "[!! Êxit Skêtch !!]"),
    (MENU_WINDOW, "[!! Wîndow !!]"),
    (MENU_HELP, "[!! Hêlp !!]"),
    (MENU_FILE_NEW, "[!! Néw !!]"),
    (MENU_FILE_OPEN, "[!! Ôpen... !!]"),
    (MENU_FILE_SAVE, "[!! Sâve !!]"),
    (MENU_FILE_SAVE_AS, "[!! Sâve Âs... !!]"),
    (MENU_FILE_QUIT, "[!! Quît !!]"),
    (FILE_PICKER_TITLE_OPEN, "[!! Ôpen Dôcument !!]"),
    (FILE_PICKER_TITLE_SAVE_AS, "[!! Sâve Dôcument Âs !!]"),
    (FILE_PICKER_OPEN, "[!! Ôpen !!]"),
    (FILE_PICKER_SAVE, "[!! Sâve !!]"),
    (FILE_PICKER_CANCEL, "[!! Cancêl !!]"),
    (FILE_PICKER_LIST, "[!! Dôcument fôlders !!]"),
    (FILE_PICKER_FILENAME_PLACEHOLDER, "[!! Dôcument nâme !!]"),
    (FILE_PICKER_DIR_EMPTY, "[!! Nô dôcuments în thîs fôlder !!]"),
    (FILE_OVERWRITE_TITLE, "[!! Replâce dôcument? !!]"),
    (
        FILE_OVERWRITE_MESSAGE,
        "[!! Â dôcument alrêady êxists ât thîs locâtion. !!]",
    ),
    (FILE_OVERWRITE_REPLACE, "[!! Replâce !!]"),
    (FILE_OVERWRITE_CANCEL, "[!! Cancêl !!]"),
    (FILE_DISCARD_TITLE, "[!! Discârd unsâved chânges? !!]"),
    (
        FILE_DISCARD_MESSAGE,
        "[!! Continûing will pêrmanently lôse yôur unsâved edîts. !!]",
    ),
    (FILE_DISCARD_CONFIRM, "[!! Discârd !!]"),
    (FILE_DISCARD_CANCEL, "[!! Kêep edîting !!]"),
    (DEFAULT_DOCUMENT_NAME, "[!! Untîtled !!]"),
    (NOTIFY_SAVE_FAILED, "[!! Sâve fâiled !!]"),
    (NOTIFY_LOAD_FAILED, "[!! Ôpen fâiled !!]"),
    (
        NOTIFY_SCAN_FAILED,
        "[!! Côuld not rêad dôcuments fôlder !!]",
    ),
    (NOTIFY_SAVED, "[!! Sâved !!]"),
    (NOTIFY_DISMISS, "[!! Dîsmiss !!]"),
    (MENU_EDIT_UNDO, "[!! Undô !!]"),
    (MENU_EDIT_REDO, "[!! Redô !!]"),
    (MENU_VIEW_ZOOM_FIT, "[!! Zôom to Fît !!]"),
    (MENU_PLACEHOLDER_COMING_SOON, "[!! Côming Sôon !!]"),
    (MENU_TOOLS_OPTIONS, "[!! Ôptions... !!]"),
    (MENU_TOOLS_KEYBOARD, "[!! Custômize Kêyboard... !!]"),
    (KEYBOARD_DIALOG_TITLE, "[!! Custômize Kêyboard !!]"),
    (SETTINGS_DIALOG_TITLE, "[!! Sêlection ôptions !!]"),
    (SETTINGS_PICK_APERTURE_LABEL, "[!! Pîck âperture !!]"),
    (
        SETTINGS_PICK_APERTURE_HINT,
        "[!! Hôw mâny pîxels ôf slâck thê pîcker âllows whên clîcking thîn lînes. !!]",
    ),
    (SETTINGS_RESET, "[!! Resêt !!]"),
    (SETTINGS_CLOSE, "[!! Clôse !!]"),
    (HOTKEY_SECTION_HEADING, "[!! Kêyboard shortcûts !!]"),
    (
        HOTKEY_RECORDING_HINT,
        "[!! Clîck to recôrd, Êsc to cancêl !!]",
    ),
    (HOTKEY_RECORDING_PROMPT, "[!! Prêss a kêy... !!]"),
    (HOTKEY_UNBOUND_LABEL, "[!! Unbôund !!]"),
    (HOTKEY_LABEL_SKETCH, "[!! Skêtch !!]"),
    (HOTKEY_LABEL_ESCAPE, "[!! Cancêl / Êxit Skêtch !!]"),
    (HOTKEY_LABEL_SMART_DIMENSION, "[!! Smârt Dîmension !!]"),
    (HOTKEY_LABEL_TRIM, "[!! Trîm Êntities !!]"),
    (HOTKEY_LABEL_EXTEND, "[!! Extênd Êntities !!]"),
    (HOTKEY_LABEL_MIRROR, "[!! Mîrror Êntities !!]"),
    (
        HOTKEY_LABEL_CONSTRUCTION_TOGGLE,
        "[!! Tôggle Constrûction !!]",
    ),
    (HOTKEY_LABEL_UNDO, "[!! Undô !!]"),
    (HOTKEY_LABEL_REDO, "[!! Redô !!]"),
    (HOTKEY_LABEL_NEW, "[!! Néw !!]"),
    (HOTKEY_LABEL_OPEN, "[!! Ôpen !!]"),
    (HOTKEY_LABEL_SAVE, "[!! Sâve !!]"),
    (HOTKEY_LABEL_SELECT_ALL, "[!! Sêlect Âll !!]"),
    (HOTKEY_LABEL_DELETE_SELECTION, "[!! Delête !!]"),
    (HOTKEY_LABEL_ZOOM_FIT, "[!! Zôom to Fît !!]"),
    (HOTKEY_LABEL_SHORTCUT_BAR, "[!! Shortcût Bâr !!]"),
    (HOTKEY_LABEL_QUIT, "[!! Quît !!]"),
    (NOTIFY_COMING_SOON, "[!! Côming sôon !!]"),
    (
        NOTIFY_MIRROR_SELECTION_HINT,
        "[!! Sêlect entîties tô mîrror plûs ône âxis lîne. !!]",
    ),
    (
        NOTIFY_HOTKEY_CONFLICT,
        "[!! Shortcût alrêady ûsed by anôther commând. !!]",
    ),
    (SHORTCUT_BAR_TITLE, "[!! Shortcût Bâr !!]"),
    (PROPERTY_PANE_NO_SELECTION, "[!! Nôthing sêlected !!]"),
    (PROPERTY_ROW_KIND, "[!! Týpe !!]"),
    (PROPERTY_ROW_X, "X"),
    (PROPERTY_ROW_Y, "Y"),
    (PROPERTY_ROW_FROM, "[!! Frôm !!]"),
    (PROPERTY_ROW_TO, "[!! Tô !!]"),
    (PROPERTY_ROW_CENTER, "[!! Cênter !!]"),
    (PROPERTY_ROW_START, "[!! Stârt !!]"),
    (PROPERTY_ROW_END, "[!! Énd !!]"),
    (PROPERTY_ROW_RADIUS, "[!! Râdius !!]"),
    (PROPERTY_ROW_CONSTRUCTION, "[!! Constrûction !!]"),
    (PROPERTY_KIND_POINT, "[!! Pôint !!]"),
    (PROPERTY_KIND_LINE, "[!! Lîne !!]"),
    (PROPERTY_KIND_ARC, "[!! Ârc !!]"),
    (PROPERTY_KIND_CIRCLE, "[!! Cîrcle !!]"),
    (PROPERTY_VALUE_YES, "[!! Yés !!]"),
    (PROPERTY_VALUE_NO, "[!! Nô !!]"),
    (PROPERTY_ROW_FIRST, "[!! Fîrst !!]"),
    (PROPERTY_ROW_SECOND, "[!! Sêcond !!]"),
    (PROPERTY_ROW_TARGET, "[!! Târget !!]"),
    (PROPERTY_ROW_POINT, "[!! Pôint !!]"),
    (PROPERTY_ROW_LINE, "[!! Lîne !!]"),
    (PROPERTY_ROW_DIM_KIND, "[!! Týpe !!]"),
    (PROPERTY_ROW_DIM_DRIVES, "[!! Drîves !!]"),
    (PROPERTY_ROW_DIM_LENGTH, "[!! Léngth !!]"),
    (PROPERTY_ROW_DIM_DIAMETER, "[!! Dîameter !!]"),
    (PROPERTY_ROW_DIM_ANGLE, "[!! Ângle !!]"),
    (PROPERTY_KIND_DIM_LINEAR, "[!! Lînear !!]"),
    (PROPERTY_KIND_DIM_RADIUS, "[!! Râdius !!]"),
    (PROPERTY_KIND_DIM_DIAMETER, "[!! Dîameter !!]"),
    (PROPERTY_KIND_DIM_ANGULAR, "[!! Ângûlar !!]"),
    (PROPERTY_VALUE_DRIVING, "[!! Drîving !!]"),
    (PROPERTY_VALUE_DRIVEN, "[!! Drîven !!]"),
];

#[cfg(test)]
mod tests {
    use super::{AR_XB, EN_US, make_strings};
    use bone_ui::layout::LayoutDirection;
    use bone_ui::strings::{Locale, StringKey};
    use std::collections::BTreeSet;

    fn keys(entries: &[(StringKey, &str)]) -> BTreeSet<StringKey> {
        entries.iter().map(|(k, _)| *k).collect()
    }

    #[test]
    fn ar_xb_bundle_covers_every_en_us_key() {
        let en: BTreeSet<StringKey> = keys(EN_US);
        let ar: BTreeSet<StringKey> = keys(AR_XB);
        let missing: Vec<StringKey> = en.difference(&ar).copied().collect();
        assert!(
            missing.is_empty(),
            "ar-XB missing translations for: {missing:?}",
        );
    }

    #[test]
    fn ar_xb_does_not_invent_unknown_keys() {
        let en: BTreeSet<StringKey> = keys(EN_US);
        let ar: BTreeSet<StringKey> = keys(AR_XB);
        let stray: Vec<StringKey> = ar.difference(&en).copied().collect();
        assert!(
            stray.is_empty(),
            "ar-XB defines keys not declared in en-US: {stray:?}",
        );
    }

    #[test]
    fn loading_ar_xb_yields_rtl_table_with_non_empty_entries() {
        let table = make_strings(Locale::ArXb);
        assert_eq!(table.direction(), LayoutDirection::Rtl);
        AR_XB.iter().for_each(|(key, _)| {
            assert!(
                !table.resolve(*key).is_empty(),
                "ar-XB entry for {key} resolved to empty string",
            );
        });
    }

    #[test]
    fn loading_en_us_yields_ltr_table_with_non_empty_entries() {
        let table = make_strings(Locale::EnUs);
        assert_eq!(table.direction(), LayoutDirection::Ltr);
        EN_US.iter().for_each(|(key, _)| {
            assert!(
                !table.resolve(*key).is_empty(),
                "en-US entry for {key} resolved to empty string",
            );
        });
    }
}
