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 RIBBON_GROUP_EXTRUDE: StringKey = StringKey::new("shell.ribbon.group.extrude");
pub const CONFIRM_ACCEPT: StringKey = StringKey::new("confirm.accept");
pub const CONFIRM_CANCEL: StringKey = StringKey::new("confirm.cancel");

pub const VIEW_FRONT: StringKey = StringKey::new("view.front");
pub const VIEW_BACK: StringKey = StringKey::new("view.back");
pub const VIEW_LEFT: StringKey = StringKey::new("view.left");
pub const VIEW_RIGHT: StringKey = StringKey::new("view.right");
pub const VIEW_TOP: StringKey = StringKey::new("view.top");
pub const VIEW_BOTTOM: StringKey = StringKey::new("view.bottom");
pub const VIEW_ISOMETRIC: StringKey = StringKey::new("view.isometric");
pub const VIEW_NORMAL_TO: StringKey = StringKey::new("view.normal_to");
pub const VIEW_CUBE: StringKey = StringKey::new("view.cube");
pub const VIEW_HOME: StringKey = StringKey::new("view.home");
pub const VIEW_CUBE_EDGE: StringKey = StringKey::new("view.cube.edge");
pub const VIEW_CUBE_CORNER: StringKey = StringKey::new("view.cube.corner");
pub const VIEW_SELECTOR: StringKey = StringKey::new("view.selector");
pub const VIEW_CUBE_SET_HOME: StringKey = StringKey::new("view.cube.set_home");
pub const VIEW_CUBE_FIT: StringKey = StringKey::new("view.cube.fit");
pub const VIEW_CUBE_NORMAL_TO: StringKey = StringKey::new("view.cube.normal_to");
pub const HEADS_UP_BAR: StringKey = StringKey::new("heads_up.bar");
pub const HEADS_UP_ZOOM_FIT: StringKey = StringKey::new("heads_up.zoom_fit");
pub const HEADS_UP_ZOOM_AREA: StringKey = StringKey::new("heads_up.zoom_area");
pub const HEADS_UP_PREVIOUS_VIEW: StringKey = StringKey::new("heads_up.previous_view");
pub const HEADS_UP_SECTION_VIEW: StringKey = StringKey::new("heads_up.section_view");
pub const HEADS_UP_VIEW_ORIENTATION: StringKey = StringKey::new("heads_up.view_orientation");
pub const HEADS_UP_DISPLAY_STYLE: StringKey = StringKey::new("heads_up.display_style");
pub const HEADS_UP_HIDE_SHOW: StringKey = StringKey::new("heads_up.hide_show");
pub const HEADS_UP_EDIT_APPEARANCE: StringKey = StringKey::new("heads_up.edit_appearance");
pub const HEADS_UP_VIEW_SETTINGS: StringKey = StringKey::new("heads_up.view_settings");

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_EXTRUDED_BOSS_BASE: StringKey = StringKey::new("tool.extruded_boss_base");
pub const TOOL_EXTRUDED_CUT: StringKey = StringKey::new("tool.extruded_cut");

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 FEATURE_CTX_EDIT_FEATURE: StringKey = StringKey::new("feature.ctx.edit_feature");
pub const FEATURE_CTX_EDIT_SKETCH: StringKey = StringKey::new("feature.ctx.edit_sketch");
pub const FEATURE_CTX_SUPPRESS: StringKey = StringKey::new("feature.ctx.suppress");
pub const FEATURE_CTX_UNSUPPRESS: StringKey = StringKey::new("feature.ctx.unsuppress");
pub const FEATURE_CTX_ROLLBACK: StringKey = StringKey::new("feature.ctx.rollback");
pub const FEATURE_CTX_DELETE: StringKey = StringKey::new("feature.ctx.delete");
pub const FEATURE_CTX_RELATIONSHIPS: StringKey = StringKey::new("feature.ctx.relationships");
pub const FEATURE_REL_PARENTS: StringKey = StringKey::new("feature.rel.parents");
pub const FEATURE_REL_CHILDREN: StringKey = StringKey::new("feature.rel.children");
pub const FEATURE_REL_NONE: StringKey = StringKey::new("feature.rel.none");
pub const FEATURE_REL_CLOSE: StringKey = StringKey::new("feature.rel.close");
pub const WHATS_WRONG_TITLE: StringKey = StringKey::new("whats_wrong.title");
pub const WHATS_WRONG_NONE: StringKey = StringKey::new("whats_wrong.none");
pub const WHATS_WRONG_DANGLING: StringKey = StringKey::new("whats_wrong.dangling");
pub const WHATS_WRONG_NON_PLANAR: StringKey = StringKey::new("whats_wrong.non_planar");
pub const WHATS_WRONG_UPSTREAM: StringKey = StringKey::new("whats_wrong.upstream");
pub const WHATS_WRONG_BUILD_FAILED: StringKey = StringKey::new("whats_wrong.build_failed");
pub const WHATS_WRONG_REPAIRED: StringKey = StringKey::new("whats_wrong.repaired");
pub const WHATS_WRONG_REATTACH: StringKey = StringKey::new("whats_wrong.reattach");

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_EXTRUDE_ACTIVE: StringKey = StringKey::new("status.extrude_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 MENU_FILE_IMPORT: StringKey = StringKey::new("menu.file.import");
pub const MENU_FILE_EXPORT: StringKey = StringKey::new("menu.file.export");
pub const MENU_FILE_EXPORT_STEP: StringKey = StringKey::new("menu.file.export.step");
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_TITLE_IMPORT: StringKey = StringKey::new("file_picker.title.import");
pub const FILE_PICKER_TITLE_EXPORT: StringKey = StringKey::new("file_picker.title.export");
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_IMPORT: StringKey = StringKey::new("file_picker.import");
pub const FILE_PICKER_EXPORT: StringKey = StringKey::new("file_picker.export");
pub const FILE_PICKER_NO_STEP_FILES: StringKey = StringKey::new("file_picker.step.empty");
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_LIST_STEP: StringKey = StringKey::new("file_picker.list.step");
pub const FILE_PICKER_FILENAME_PLACEHOLDER: StringKey =
    StringKey::new("file_picker.filename_placeholder");
pub const FILE_PICKER_FILENAME_PLACEHOLDER_STEP: StringKey =
    StringKey::new("file_picker.filename_placeholder.step");
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_TITLE_STEP: StringKey = StringKey::new("file.overwrite.title.step");
pub const FILE_OVERWRITE_MESSAGE_STEP: StringKey = StringKey::new("file.overwrite.message.step");
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 FILE_IMPORT_REPLACE_TITLE: StringKey = StringKey::new("file.import_replace.title");
pub const FILE_IMPORT_REPLACE_MESSAGE: StringKey = StringKey::new("file.import_replace.message");
pub const FILE_IMPORT_REPLACE_CONFIRM: StringKey = StringKey::new("file.import_replace.confirm");
pub const FILE_IMPORT_REPLACE_CANCEL: StringKey = StringKey::new("file.import_replace.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_IMPORTED: StringKey = StringKey::new("notify.imported");
pub const NOTIFY_IMPORT_FAILED: StringKey = StringKey::new("notify.import_failed");
pub const NOTIFY_EXPORTED: StringKey = StringKey::new("notify.exported");
pub const NOTIFY_EXPORT_FAILED: StringKey = StringKey::new("notify.export_failed");
pub const STEP_PROGRESS_TITLE_IMPORT: StringKey = StringKey::new("step.progress.title.import");
pub const STEP_PROGRESS_TITLE_EXPORT: StringKey = StringKey::new("step.progress.title.export");
pub const STEP_PROGRESS_CANCEL: StringKey = StringKey::new("step.progress.cancel");
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_REDUCE_MOTION_LABEL: StringKey = StringKey::new("settings.reduce_motion.label");
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_IMPORT: StringKey = StringKey::new("hotkey.label.import");
pub const HOTKEY_LABEL_EXPORT: StringKey = StringKey::new("hotkey.label.export");
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 HOTKEY_LABEL_REBUILD: StringKey = StringKey::new("hotkey.label.rebuild");
pub const HOTKEY_LABEL_FORCE_REBUILD: StringKey = StringKey::new("hotkey.label.force_rebuild");
pub const NOTIFY_REATTACH_PICK: StringKey = StringKey::new("notify.reattach_pick");
pub const NOTIFY_REATTACH_NON_PLANAR: StringKey = StringKey::new("notify.reattach_non_planar");
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 EXTRUDE_PROMPT_SELECT_SKETCH: StringKey = StringKey::new("extrude.prompt.select_sketch");
pub const EXTRUDE_PROFILE_SELECTED: StringKey = StringKey::new("extrude.profile.selected");
pub const FEATURE_HINT_EXIT_SKETCH: StringKey = StringKey::new("feature.hint.exit_sketch");
pub const NOTIFY_EXTRUDE_NO_SKETCH: StringKey = StringKey::new("notify.extrude.no_sketch");
pub const NOTIFY_EXTRUDE_FAILED: StringKey = StringKey::new("notify.extrude.failed");
pub const PROPERTY_ROW_EXTRUDE_END: StringKey =
    StringKey::new("property.row.extrude.end_condition");
pub const PROPERTY_ROW_EXTRUDE_DEPTH: StringKey = StringKey::new("property.row.extrude.depth");
pub const PROPERTY_ROW_EXTRUDE_DRAFT: StringKey = StringKey::new("property.row.extrude.draft");
pub const PROPERTY_ROW_EXTRUDE_DRAFT_ANGLE: StringKey =
    StringKey::new("property.row.extrude.draft_angle");
pub const PROPERTY_ROW_EXTRUDE_DIRECTION_TWO: StringKey =
    StringKey::new("property.row.extrude.direction_two");
pub const PROPERTY_ROW_EXTRUDE_THIN: StringKey = StringKey::new("property.row.extrude.thin");
pub const PROPERTY_ROW_EXTRUDE_MERGE: StringKey = StringKey::new("property.row.extrude.merge");
pub const PROPERTY_PANE_EXTRUDE_TITLE: StringKey = StringKey::new("property.pane.extrude.title");
pub const PROPERTY_GROUP_DIRECTION_1: StringKey = StringKey::new("property.group.direction_1");
pub const PROPERTY_GROUP_FEATURE_SCOPE: StringKey = StringKey::new("property.group.feature_scope");
pub const EXTRUDE_END_BLIND: StringKey = StringKey::new("extrude.end.blind");
pub const EXTRUDE_END_MIDPLANE: StringKey = StringKey::new("extrude.end.midplane");
pub const STATUS_EXTRUDE_VALID: StringKey = StringKey::new("status.extrude.valid");
pub const STATUS_EXTRUDE_INVALID: StringKey = StringKey::new("status.extrude.invalid");
pub const STATUS_EXTRUDE_DANGLING: StringKey = StringKey::new("status.extrude.dangling");
pub const EXTRUDE_PANEL_TITLE: StringKey = StringKey::new("extrude.panel.title");
pub const EXTRUDE_PANEL_UNSOLVED_SKETCH: StringKey =
    StringKey::new("extrude.panel.unsolved_sketch");
pub const EXTRUDE_PANEL_PROFILE_OPEN_LOOP: StringKey =
    StringKey::new("extrude.panel.profile.open_loop");
pub const EXTRUDE_PANEL_PROFILE_BRANCHING: StringKey =
    StringKey::new("extrude.panel.profile.branching");
pub const EXTRUDE_PANEL_PROFILE_SELF_INTERSECTING: StringKey =
    StringKey::new("extrude.panel.profile.self_intersecting");
pub const EXTRUDE_PANEL_PROFILE_ZERO_AREA: StringKey =
    StringKey::new("extrude.panel.profile.zero_area");
pub const EXTRUDE_PANEL_PROFILE_UNCONTAINED: StringKey =
    StringKey::new("extrude.panel.profile.uncontained");
pub const EXTRUDE_PANEL_PROFILE_OVERLAPPING: StringKey =
    StringKey::new("extrude.panel.profile.overlapping");
pub const EXTRUDE_PANEL_EMPTY_DEPTH: StringKey = StringKey::new("extrude.panel.empty_depth");
pub const EXTRUDE_PANEL_SHELL_OPEN: StringKey = StringKey::new("extrude.panel.shell_open");
pub const EXTRUDE_PANEL_DEGENERATE_EDGE: StringKey =
    StringKey::new("extrude.panel.degenerate_edge");
pub const EXTRUDE_PANEL_DANGLING_EDGE: StringKey = StringKey::new("extrude.panel.dangling_edge");
pub const EXTRUDE_PANEL_DANGLING_VERTEX: StringKey =
    StringKey::new("extrude.panel.dangling_vertex");
pub const EXTRUDE_PANEL_UNSUPPORTED_DIRECTION: StringKey =
    StringKey::new("extrude.panel.unsupported.direction");
pub const EXTRUDE_PANEL_UNSUPPORTED_END: StringKey =
    StringKey::new("extrude.panel.unsupported.end_condition");
pub const EXTRUDE_PANEL_UNSUPPORTED_DRAFT: StringKey =
    StringKey::new("extrude.panel.unsupported.draft");
pub const EXTRUDE_PANEL_UNSUPPORTED_THIN: StringKey =
    StringKey::new("extrude.panel.unsupported.thin");
pub const EXTRUDE_PANEL_INTERNAL: StringKey = StringKey::new("extrude.panel.internal");
pub const EXTRUDE_PANEL_DANGLING_REFERENCE: StringKey =
    StringKey::new("extrude.panel.dangling_reference");
pub const EXTRUDE_PANEL_NON_PLANAR_TARGET: StringKey =
    StringKey::new("extrude.panel.non_planar_target");
pub const EXTRUDE_PANEL_UPSTREAM_UNRESOLVED: StringKey =
    StringKey::new("extrude.panel.upstream_unresolved");
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"),
    (RIBBON_GROUP_EXTRUDE, "Extrude"),
    (CONFIRM_ACCEPT, "Accept"),
    (CONFIRM_CANCEL, "Cancel"),
    (VIEW_FRONT, "Front"),
    (VIEW_BACK, "Back"),
    (VIEW_LEFT, "Left"),
    (VIEW_RIGHT, "Right"),
    (VIEW_TOP, "Top"),
    (VIEW_BOTTOM, "Bottom"),
    (VIEW_ISOMETRIC, "Isometric"),
    (VIEW_NORMAL_TO, "Normal To"),
    (VIEW_CUBE, "View Cube"),
    (VIEW_HOME, "Home"),
    (VIEW_CUBE_EDGE, "Edge View"),
    (VIEW_CUBE_CORNER, "Corner View"),
    (VIEW_SELECTOR, "View Orientation"),
    (VIEW_CUBE_SET_HOME, "Set as Home"),
    (VIEW_CUBE_FIT, "Fit to Window"),
    (VIEW_CUBE_NORMAL_TO, "View Normal To"),
    (HEADS_UP_BAR, "View Heads-Up Toolbar"),
    (HEADS_UP_ZOOM_FIT, "Zoom to Fit"),
    (HEADS_UP_ZOOM_AREA, "Zoom to Area"),
    (HEADS_UP_PREVIOUS_VIEW, "Previous View"),
    (HEADS_UP_SECTION_VIEW, "Section View"),
    (HEADS_UP_VIEW_ORIENTATION, "View Orientation"),
    (HEADS_UP_DISPLAY_STYLE, "Display Style"),
    (HEADS_UP_HIDE_SHOW, "Hide/Show Items"),
    (HEADS_UP_EDIT_APPEARANCE, "Edit Appearance"),
    (HEADS_UP_VIEW_SETTINGS, "View Settings"),
    (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_EXTRUDED_BOSS_BASE, "Extruded Boss/Base"),
    (TOOL_EXTRUDED_CUT, "Extruded Cut"),
    (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"),
    (FEATURE_CTX_EDIT_FEATURE, "Edit Feature"),
    (FEATURE_CTX_EDIT_SKETCH, "Edit Sketch"),
    (FEATURE_CTX_SUPPRESS, "Suppress"),
    (FEATURE_CTX_UNSUPPRESS, "Unsuppress"),
    (FEATURE_CTX_ROLLBACK, "Rollback to Here"),
    (FEATURE_CTX_DELETE, "Delete"),
    (FEATURE_CTX_RELATIONSHIPS, "Parent/Child Relationships"),
    (FEATURE_REL_PARENTS, "Parent Features"),
    (FEATURE_REL_CHILDREN, "Child Features"),
    (FEATURE_REL_NONE, "None"),
    (FEATURE_REL_CLOSE, "Close"),
    (WHATS_WRONG_TITLE, "What's Wrong"),
    (WHATS_WRONG_NONE, "No rebuild errors"),
    (WHATS_WRONG_DANGLING, "Dangling reference"),
    (WHATS_WRONG_NON_PLANAR, "Sketch plane is not planar"),
    (
        WHATS_WRONG_UPSTREAM,
        "Depends on a feature that failed to build",
    ),
    (WHATS_WRONG_BUILD_FAILED, "Geometry failed to build"),
    (WHATS_WRONG_REPAIRED, "Reference repaired"),
    (WHATS_WRONG_REATTACH, "Reattach"),
    (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_EXTRUDE_ACTIVE, "Extrude"),
    (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"),
    (MENU_FILE_IMPORT, "Import..."),
    (MENU_FILE_EXPORT, "Export"),
    (MENU_FILE_EXPORT_STEP, "STEP (.step)"),
    (FILE_PICKER_TITLE_OPEN, "Open Document"),
    (FILE_PICKER_TITLE_SAVE_AS, "Save Document As"),
    (FILE_PICKER_TITLE_IMPORT, "Import STEP"),
    (FILE_PICKER_TITLE_EXPORT, "Export STEP"),
    (FILE_PICKER_OPEN, "Open"),
    (FILE_PICKER_SAVE, "Save"),
    (FILE_PICKER_IMPORT, "Import"),
    (FILE_PICKER_EXPORT, "Export"),
    (FILE_PICKER_NO_STEP_FILES, "No STEP files in this folder"),
    (FILE_PICKER_CANCEL, "Cancel"),
    (FILE_PICKER_LIST, "Document folders"),
    (FILE_PICKER_LIST_STEP, "STEP files"),
    (FILE_PICKER_FILENAME_PLACEHOLDER, "Document name"),
    (FILE_PICKER_FILENAME_PLACEHOLDER_STEP, "File 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_TITLE_STEP, "Replace file?"),
    (
        FILE_OVERWRITE_MESSAGE_STEP,
        "A file 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"),
    (FILE_IMPORT_REPLACE_TITLE, "Replace current document?"),
    (
        FILE_IMPORT_REPLACE_MESSAGE,
        "The document changed while the import was running. Installing the import discards those changes.",
    ),
    (FILE_IMPORT_REPLACE_CONFIRM, "Install import"),
    (FILE_IMPORT_REPLACE_CANCEL, "Keep current"),
    (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_IMPORTED, "Imported"),
    (NOTIFY_IMPORT_FAILED, "Import failed"),
    (NOTIFY_EXPORTED, "Exported"),
    (NOTIFY_EXPORT_FAILED, "Export failed"),
    (STEP_PROGRESS_TITLE_IMPORT, "Importing STEP"),
    (STEP_PROGRESS_TITLE_EXPORT, "Exporting STEP"),
    (STEP_PROGRESS_CANCEL, "Cancel"),
    (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_REDUCE_MOTION_LABEL, "Reduce motion"),
    (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_IMPORT, "Import STEP"),
    (HOTKEY_LABEL_EXPORT, "Export STEP"),
    (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"),
    (HOTKEY_LABEL_REBUILD, "Rebuild"),
    (HOTKEY_LABEL_FORCE_REBUILD, "Force Rebuild"),
    (
        NOTIFY_REATTACH_PICK,
        "Pick a face to reattach the dangling reference",
    ),
    (NOTIFY_REATTACH_NON_PLANAR, "Pick a planar face to reattach"),
    (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"),
    (EXTRUDE_PROMPT_SELECT_SKETCH, "Select a sketch to extrude"),
    (EXTRUDE_PROFILE_SELECTED, "Sketch selected"),
    (FEATURE_HINT_EXIT_SKETCH, "Exit the sketch to add a feature"),
    (NOTIFY_EXTRUDE_NO_SKETCH, "Create a sketch first"),
    (NOTIFY_EXTRUDE_FAILED, "Can't preview this extrude"),
    (PROPERTY_ROW_EXTRUDE_END, "End Condition"),
    (PROPERTY_ROW_EXTRUDE_DEPTH, "Depth"),
    (PROPERTY_ROW_EXTRUDE_DRAFT, "Draft"),
    (PROPERTY_ROW_EXTRUDE_DRAFT_ANGLE, "Draft Angle"),
    (PROPERTY_ROW_EXTRUDE_DIRECTION_TWO, "Direction 2"),
    (PROPERTY_ROW_EXTRUDE_THIN, "Thin Feature"),
    (PROPERTY_ROW_EXTRUDE_MERGE, "Merge Result"),
    (PROPERTY_PANE_EXTRUDE_TITLE, "Extrude"),
    (PROPERTY_GROUP_DIRECTION_1, "Direction 1"),
    (PROPERTY_GROUP_FEATURE_SCOPE, "Feature Scope"),
    (EXTRUDE_END_BLIND, "Blind"),
    (EXTRUDE_END_MIDPLANE, "Mid Plane"),
    (STATUS_EXTRUDE_VALID, "Valid Solid"),
    (STATUS_EXTRUDE_INVALID, "Invalid Solid"),
    (STATUS_EXTRUDE_DANGLING, "Dangling"),
    (EXTRUDE_PANEL_TITLE, "Extrude Diagnostics"),
    (EXTRUDE_PANEL_UNSOLVED_SKETCH, "Sketch does not solve"),
    (EXTRUDE_PANEL_PROFILE_OPEN_LOOP, "Profile has an open loop"),
    (
        EXTRUDE_PANEL_PROFILE_BRANCHING,
        "Profile has a branching vertex",
    ),
    (
        EXTRUDE_PANEL_PROFILE_SELF_INTERSECTING,
        "Profile loop self-intersects",
    ),
    (EXTRUDE_PANEL_PROFILE_ZERO_AREA, "Profile has zero area"),
    (
        EXTRUDE_PANEL_PROFILE_UNCONTAINED,
        "Profile loop lies outside the outer boundary",
    ),
    (
        EXTRUDE_PANEL_PROFILE_OVERLAPPING,
        "Profile inner loops overlap",
    ),
    (EXTRUDE_PANEL_EMPTY_DEPTH, "Extrude depth is zero"),
    (EXTRUDE_PANEL_SHELL_OPEN, "Solid shell is not closed"),
    (
        EXTRUDE_PANEL_DEGENERATE_EDGE,
        "Edge {n} collapses below tolerance",
    ),
    (EXTRUDE_PANEL_DANGLING_EDGE, "Edge {n} belongs to no loop"),
    (
        EXTRUDE_PANEL_DANGLING_VERTEX,
        "Vertex {n} belongs to no loop",
    ),
    (
        EXTRUDE_PANEL_UNSUPPORTED_DIRECTION,
        "Extrude direction is not supported yet",
    ),
    (
        EXTRUDE_PANEL_UNSUPPORTED_END,
        "End condition is not supported yet",
    ),
    (
        EXTRUDE_PANEL_UNSUPPORTED_DRAFT,
        "Draft is not supported yet",
    ),
    (
        EXTRUDE_PANEL_UNSUPPORTED_THIN,
        "Thin feature is not supported yet",
    ),
    (EXTRUDE_PANEL_INTERNAL, "Internal kernel error"),
    (
        EXTRUDE_PANEL_DANGLING_REFERENCE,
        "Sketch plane references a face that no longer exists",
    ),
    (
        EXTRUDE_PANEL_NON_PLANAR_TARGET,
        "Sketch plane target face is not planar",
    ),
    (
        EXTRUDE_PANEL_UPSTREAM_UNRESOLVED,
        "Depends on a feature that failed to build",
    ),
    (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 !!]"),
    (RIBBON_GROUP_EXTRUDE, "[!! Êxtrude !!]"),
    (CONFIRM_ACCEPT, "[!! Accêpt !!]"),
    (CONFIRM_CANCEL, "[!! Cancêl !!]"),
    (VIEW_FRONT, "[!! Frônt !!]"),
    (VIEW_BACK, "[!! Bâck !!]"),
    (VIEW_LEFT, "[!! Lêft !!]"),
    (VIEW_RIGHT, "[!! Rîght !!]"),
    (VIEW_TOP, "[!! Tôp !!]"),
    (VIEW_BOTTOM, "[!! Bôttom !!]"),
    (VIEW_ISOMETRIC, "[!! Isômetric !!]"),
    (VIEW_NORMAL_TO, "[!! Nôrmal Tô !!]"),
    (VIEW_CUBE, "[!! Vîew Cûbe !!]"),
    (VIEW_HOME, "[!! Hôme !!]"),
    (VIEW_CUBE_EDGE, "[!! Êdge Vîew !!]"),
    (VIEW_CUBE_CORNER, "[!! Côrner Vîew !!]"),
    (VIEW_SELECTOR, "[!! Vîew Orientâtion !!]"),
    (VIEW_CUBE_SET_HOME, "[!! Sêt as Hôme !!]"),
    (VIEW_CUBE_FIT, "[!! Fît to Wîndow !!]"),
    (VIEW_CUBE_NORMAL_TO, "[!! Vîew Nôrmal Tô !!]"),
    (HEADS_UP_BAR, "[!! Vîew Hêads-Up Tôolbar !!]"),
    (HEADS_UP_ZOOM_FIT, "[!! Zôom to Fît !!]"),
    (HEADS_UP_ZOOM_AREA, "[!! Zôom to Ârea !!]"),
    (HEADS_UP_PREVIOUS_VIEW, "[!! Prêvious Vîew !!]"),
    (HEADS_UP_SECTION_VIEW, "[!! Sêction Vîew !!]"),
    (HEADS_UP_VIEW_ORIENTATION, "[!! Vîew Orientâtion !!]"),
    (HEADS_UP_DISPLAY_STYLE, "[!! Dîsplay Stŷle !!]"),
    (HEADS_UP_HIDE_SHOW, "[!! Hîde/Shôw Îtems !!]"),
    (HEADS_UP_EDIT_APPEARANCE, "[!! Êdit Appêarance !!]"),
    (HEADS_UP_VIEW_SETTINGS, "[!! Vîew Sêttings !!]"),
    (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_EXTRUDED_BOSS_BASE, "[!! Êxtruded Bôss/Base !!]"),
    (TOOL_EXTRUDED_CUT, "[!! Êxtruded Cût !!]"),
    (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 !!]"),
    (FEATURE_CTX_EDIT_FEATURE, "[!! Édit Featûre !!]"),
    (FEATURE_CTX_EDIT_SKETCH, "[!! Édit Skétch !!]"),
    (FEATURE_CTX_SUPPRESS, "[!! Suppréss !!]"),
    (FEATURE_CTX_UNSUPPRESS, "[!! Unsuppréss !!]"),
    (FEATURE_CTX_ROLLBACK, "[!! Rôllback to Hére !!]"),
    (FEATURE_CTX_DELETE, "[!! Delête !!]"),
    (FEATURE_CTX_RELATIONSHIPS, "[!! Parént/Chîld Relâtions !!]"),
    (FEATURE_REL_PARENTS, "[!! Parént Featûres !!]"),
    (FEATURE_REL_CHILDREN, "[!! Chîld Featûres !!]"),
    (FEATURE_REL_NONE, "[!! Nône !!]"),
    (FEATURE_REL_CLOSE, "[!! Clôse !!]"),
    (WHATS_WRONG_TITLE, "[!! Whât's Wrông !!]"),
    (WHATS_WRONG_NONE, "[!! Nô rebûild errôrs !!]"),
    (WHATS_WRONG_DANGLING, "[!! Dânglîng reférence !!]"),
    (WHATS_WRONG_NON_PLANAR, "[!! Plâne nôt plânar !!]"),
    (WHATS_WRONG_UPSTREAM, "[!! Dêpends ôn fâiled featûre !!]"),
    (WHATS_WRONG_BUILD_FAILED, "[!! Geômetry fâiled !!]"),
    (WHATS_WRONG_REPAIRED, "[!! Reférence repâired !!]"),
    (WHATS_WRONG_REATTACH, "[!! Reattâch !!]"),
    (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_EXTRUDE_ACTIVE, "[!! Êxtrude !!]"),
    (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 !!]"),
    (MENU_FILE_IMPORT, "[!! Impôrt... !!]"),
    (MENU_FILE_EXPORT, "[!! Expôrt !!]"),
    (MENU_FILE_EXPORT_STEP, "[!! STÊP (.step) !!]"),
    (FILE_PICKER_TITLE_OPEN, "[!! Ôpen Dôcument !!]"),
    (FILE_PICKER_TITLE_SAVE_AS, "[!! Sâve Dôcument Âs !!]"),
    (FILE_PICKER_TITLE_IMPORT, "[!! Impôrt STÊP !!]"),
    (FILE_PICKER_TITLE_EXPORT, "[!! Expôrt STÊP !!]"),
    (FILE_PICKER_OPEN, "[!! Ôpen !!]"),
    (FILE_PICKER_SAVE, "[!! Sâve !!]"),
    (FILE_PICKER_IMPORT, "[!! Impôrt !!]"),
    (FILE_PICKER_EXPORT, "[!! Expôrt !!]"),
    (
        FILE_PICKER_NO_STEP_FILES,
        "[!! Nô STÊP fîles în thîs fôlder !!]",
    ),
    (FILE_PICKER_CANCEL, "[!! Cancêl !!]"),
    (FILE_PICKER_LIST, "[!! Dôcument fôlders !!]"),
    (FILE_PICKER_LIST_STEP, "[!! STÊP fîles !!]"),
    (FILE_PICKER_FILENAME_PLACEHOLDER, "[!! Dôcument nâme !!]"),
    (FILE_PICKER_FILENAME_PLACEHOLDER_STEP, "[!! Fîle 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_TITLE_STEP, "[!! Replâce fîle? !!]"),
    (
        FILE_OVERWRITE_MESSAGE_STEP,
        "[!! Â fîle 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 !!]"),
    (
        FILE_IMPORT_REPLACE_TITLE,
        "[!! Replâce cûrrent dôcument? !!]",
    ),
    (
        FILE_IMPORT_REPLACE_MESSAGE,
        "[!! Thê dôcument chânged whîle thê impôrt wâs rûnning. Instâlling thê impôrt discârds thôse chânges. !!]",
    ),
    (FILE_IMPORT_REPLACE_CONFIRM, "[!! Instâll impôrt !!]"),
    (FILE_IMPORT_REPLACE_CANCEL, "[!! Kêep cûrrent !!]"),
    (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_IMPORTED, "[!! Impôrted !!]"),
    (NOTIFY_IMPORT_FAILED, "[!! Impôrt fâiled !!]"),
    (NOTIFY_EXPORTED, "[!! Expôrted !!]"),
    (NOTIFY_EXPORT_FAILED, "[!! Expôrt fâiled !!]"),
    (STEP_PROGRESS_TITLE_IMPORT, "[!! Impôrting STÊP !!]"),
    (STEP_PROGRESS_TITLE_EXPORT, "[!! Expôrting STÊP !!]"),
    (STEP_PROGRESS_CANCEL, "[!! Cancêl !!]"),
    (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_REDUCE_MOTION_LABEL, "[!! Redûce môtion !!]"),
    (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_IMPORT, "[!! Impôrt STÊP !!]"),
    (HOTKEY_LABEL_EXPORT, "[!! Expôrt STÊP !!]"),
    (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 !!]"),
    (HOTKEY_LABEL_REBUILD, "[!! Rebûild !!]"),
    (HOTKEY_LABEL_FORCE_REBUILD, "[!! Fôrce Rebûild !!]"),
    (NOTIFY_REATTACH_PICK, "[!! Pîck a fâce to reattâch !!]"),
    (NOTIFY_REATTACH_NON_PLANAR, "[!! Pîck a plânar fâce !!]"),
    (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 !!]"),
    (
        EXTRUDE_PROMPT_SELECT_SKETCH,
        "[!! Sêlect a skêtch to êxtrude !!]",
    ),
    (EXTRUDE_PROFILE_SELECTED, "[!! Skêtch sêlected !!]"),
    (
        FEATURE_HINT_EXIT_SKETCH,
        "[!! Êxit the skêtch to add a fêature !!]",
    ),
    (NOTIFY_EXTRUDE_NO_SKETCH, "[!! Crêate a skêtch fîrst !!]"),
    (NOTIFY_EXTRUDE_FAILED, "[!! Cân't prêview this êxtrude !!]"),
    (PROPERTY_ROW_EXTRUDE_END, "[!! Énd Condîtion !!]"),
    (PROPERTY_ROW_EXTRUDE_DEPTH, "[!! Dépth !!]"),
    (PROPERTY_ROW_EXTRUDE_DRAFT, "[!! Drâft !!]"),
    (PROPERTY_ROW_EXTRUDE_DRAFT_ANGLE, "[!! Drâft Ângle !!]"),
    (PROPERTY_ROW_EXTRUDE_DIRECTION_TWO, "[!! Dîrection 2 !!]"),
    (PROPERTY_ROW_EXTRUDE_THIN, "[!! Thîn Fêature !!]"),
    (PROPERTY_ROW_EXTRUDE_MERGE, "[!! Mêrge Rêsult !!]"),
    (PROPERTY_PANE_EXTRUDE_TITLE, "[!! Éxtrude !!]"),
    (PROPERTY_GROUP_DIRECTION_1, "[!! Dîrection 1 !!]"),
    (PROPERTY_GROUP_FEATURE_SCOPE, "[!! Fêature Scôpe !!]"),
    (EXTRUDE_END_BLIND, "[!! Blînd !!]"),
    (EXTRUDE_END_MIDPLANE, "[!! Mîd Plâne !!]"),
    (STATUS_EXTRUDE_VALID, "[!! Vâlid Sôlid !!]"),
    (STATUS_EXTRUDE_INVALID, "[!! Invâlid Sôlid !!]"),
    (STATUS_EXTRUDE_DANGLING, "[!! Dângling !!]"),
    (EXTRUDE_PANEL_TITLE, "[!! Êxtrude Diagnôstics !!]"),
    (
        EXTRUDE_PANEL_UNSOLVED_SKETCH,
        "[!! Skêtch dôes nôt sôlve !!]",
    ),
    (
        EXTRUDE_PANEL_PROFILE_OPEN_LOOP,
        "[!! Prôfile hâs an ôpen lôop !!]",
    ),
    (
        EXTRUDE_PANEL_PROFILE_BRANCHING,
        "[!! Prôfile hâs a brânching vêrtex !!]",
    ),
    (
        EXTRUDE_PANEL_PROFILE_SELF_INTERSECTING,
        "[!! Prôfile lôop sêlf-intersêcts !!]",
    ),
    (
        EXTRUDE_PANEL_PROFILE_ZERO_AREA,
        "[!! Prôfile hâs zêro ârea !!]",
    ),
    (
        EXTRUDE_PANEL_PROFILE_UNCONTAINED,
        "[!! Prôfile lôop lîes outsîde the ôuter bôundary !!]",
    ),
    (
        EXTRUDE_PANEL_PROFILE_OVERLAPPING,
        "[!! Prôfile înner lôops overlâp !!]",
    ),
    (EXTRUDE_PANEL_EMPTY_DEPTH, "[!! Êxtrude dêpth is zêro !!]"),
    (
        EXTRUDE_PANEL_SHELL_OPEN,
        "[!! Sôlid shêll is nôt clôsed !!]",
    ),
    (
        EXTRUDE_PANEL_DEGENERATE_EDGE,
        "[!! Êdge {n} collâpses belôw tolerânce !!]",
    ),
    (
        EXTRUDE_PANEL_DANGLING_EDGE,
        "[!! Êdge {n} belôngs to nô lôop !!]",
    ),
    (
        EXTRUDE_PANEL_DANGLING_VERTEX,
        "[!! Vêrtex {n} belôngs to nô lôop !!]",
    ),
    (
        EXTRUDE_PANEL_UNSUPPORTED_DIRECTION,
        "[!! Êxtrude dirêction is nôt suppôrted yêt !!]",
    ),
    (
        EXTRUDE_PANEL_UNSUPPORTED_END,
        "[!! Énd condîtion is nôt suppôrted yêt !!]",
    ),
    (
        EXTRUDE_PANEL_UNSUPPORTED_DRAFT,
        "[!! Drâft is nôt suppôrted yêt !!]",
    ),
    (
        EXTRUDE_PANEL_UNSUPPORTED_THIN,
        "[!! Thîn fêature is nôt suppôrted yêt !!]",
    ),
    (EXTRUDE_PANEL_INTERNAL, "[!! Intêrnal kêrnel êrror !!]"),
    (
        EXTRUDE_PANEL_DANGLING_REFERENCE,
        "[!! Skêtch plâne refêrences a fâce that nô longer exîsts !!]",
    ),
    (
        EXTRUDE_PANEL_NON_PLANAR_TARGET,
        "[!! Skêtch plâne târget fâce is nôt planâr !!]",
    ),
    (
        EXTRUDE_PANEL_UPSTREAM_UNRESOLVED,
        "[!! Dêpends ôn a fâiled featûre !!]",
    ),
    (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",
            );
        });
    }
}
