From 98f800c644719d3f23a20e50bd3237c29a8082cb Mon Sep 17 00:00:00 2001 From: Aleksander Date: Mon, 3 Aug 2026 09:39:56 +0200 Subject: [PATCH] translator: Fix english not working at all, minor refactoring --- dash-frontend/assets/lang/en.json | 334 +++++++++++++++++++++++++++++- scripts/translator/main.ts | 88 +++----- scripts/translator/run.sh | 1 + wayvr/src/assets/lang/en.json | 120 ++++++++--- 4 files changed, 448 insertions(+), 95 deletions(-) diff --git a/dash-frontend/assets/lang/en.json b/dash-frontend/assets/lang/en.json index 6271e9af..c25800e7 100644 --- a/dash-frontend/assets/lang/en.json +++ b/dash-frontend/assets/lang/en.json @@ -13,6 +13,334 @@ "FEATURES": "Features", "OVERLAY": "Overlay", "SKYMAP": "Skymap", - "PLAYSPACE": "Playspace" - } -} + "PLAYSPACE": "Playspace", + "D_PAD": "D-pad" + }, + "ACTIONS": { + "RECENTER_PLAYSPACE": "Re-center playspace" + }, + "APP_LAUNCHER": { + "ASPECT": { + "SEMI_TALL": "Semi-tall", + "SEMI_WIDE": "Semi-wide", + "SQUARE": "Square", + "TALL": "Tall", + "WIDE": "Wide" + }, + "ASPECT_TITLE": "Aspect", + "AUTOSTART": "Run automatically on startup", + "LAUNCH": "Launch", + "MODE": { + "CAGE": "Compatibility mode (Cage)", + "NATIVE": "Native mode" + }, + "RES_TITLE": "Resolution" + }, + "APP_SETTINGS": { + "ALLOW_SLIDING": "Stick interaction during grab", + "ANIMATION_SPEED": "UI Animation speed", + "AUTOSTART_APPS": "Apps to run on startup", + "BLOCK_GAME_INPUT": "Block game input", + "BLOCK_GAME_INPUT_HELP": "Blocks all input when an overlay is hovered", + "BLOCK_GAME_INPUT_IGNORE_WATCH": "Ignore watch when blocking input", + "BLOCK_GAME_INPUT_IGNORE_WATCH_HELP": "Do not block input when watch is hovered", + "BLOCK_POSES_ON_KBD_INTERACTION": "Block poses when interacting with keyboard", + "BLOCK_POSES_ON_KBD_INTERACTION_HELP": "Blocks the game from receiving poses when the keyboard is hovered and 'Block game input' is enabled", + "BINDINGS": { + "COMP": { + "CLICK": "Click", + "FORCE": "Force", + "TOUCH": "Touch", + "VALUE": "Value", + "PROXIMITY": "Proximity", + "X_AXIS": "X axis", + "Y_AXIS": "Y axis" + }, + "TYPE": { + "BUMPER": "Bumper", + "DPAD_UP": "D-pad Up", + "DPAD_DOWN": "D-pad Down", + "DPAD_LEFT": "D-pad Left", + "DPAD_RIGHT": "D-pad Right", + "JOYSTICK": "Joystick", + "MENU": "Menu", + "SHOULDER": "Shoulder", + "SQUEEZE": "Grip", + "SYSTEM": "System", + "THUMBREST": "Thumbrest", + "THUMBSTICK": "Thumbstick", + "TRACKPAD": "Trackpad", + "TRIGGER": "Trigger", + "VIEW": "View" + }, + "CLICK": { + "ANY": "Any", + "DOUBLE": "Double-tap", + "TRIPLE": "Triple-tap", + "TYPE": "Tap count" + }, + "ACTION": { + "CLICK": "Click*", + "GRAB": "Grab*", + "ALT_CLICK": "Custom shell exec (set alt_click in config)", + "SHOW_HIDE": "Show, hide, recenter*", + "TOGGLE_DASHBOARD": "Toggle dashboard", + "SPACE_DRAG": "Playspace drag", + "SPACE_ROTATE": "Playspace rotate", + "SPACE_RESET": "Playspace reset", + "CLICK_MODIFIER_RIGHT": "Right-click modifier", + "CLICK_MODIFIER_MIDDLE": "Middle-click modifier", + "MOVE_MOUSE": "Move mouse (if off by default)", + "SCROLL": "Scroll*" + }, + "LEFT": "Left", + "RIGHT": "Right", + "COMPONENT": "Actuation type", + "SUBPATH": "Actuating control", + "THRESHOLD": "Activate when above upper value\nDeactivate when below lower value" + }, + "BROWSE_ONLINE_CATALOG": "Browse online catalog...", + "BROWSE_SKYMAPS": "Browse skymaps", + "CAPTURE_METHOD": "Screen capture method", + "CAPTURE_METHOD_HELP": "Try changing this if you are\nexperiencing black or glitchy screens", + "COLOR_KEYING": "Color keying", + "COLOR_PALETTE": "Color palette", + "COLOR_PALETTE_HELP": "Click to browse color palettes.\nTo create custom ones, see website!", + "COLOR_PALETTES": "Color palettes", + "COLOR_PALETTE_CURRENT": "Currently active theme.", + "COLOR_PALETTE_CUSTOM_URL": "Add your own custom theme!", + "COLOR_PALETTE_CUSTOM_URL2": "Click to open web manual.", + "COLOR_PALETTE_ACTIVATE": "Click to use this theme.", + "CLEAR_PIPEWIRE_TOKENS": "Clear PipeWire tokens", + "CLEAR_PIPEWIRE_TOKENS_HELP": "Prompt for screen selection on next start", + "CLEAR_SAVED_STATE": "Clear saved state", + "CLEAR_SAVED_STATE_HELP": "Reset sets & overlay positions", + "CLICK_FREEZE_TIME_MS": "Click freeze time (ms)", + "CLICK_FREEZE_TIME_MS_HELP": "Helps with double-click precision", + "CLOCK_12H": "12-hour clock", + "CONTROLS": "Controls", + "DELETE_ALL_CONFIGS": "Wipe configuration", + "DELETE_ALL_CONFIGS_HELP": "Remove all configuration files from conf.d", + "DOUBLE_CURSOR_FIX": "Double cursor fix", + "DOUBLE_CURSOR_FIX_HELP": "Enable this if you see 2 cursors", + "DEFAULT_OVERLAY_SCALE": "Default overlay size", + "DEFAULT_OVERLAY_SCALE_HELP": "Spawn new overlays at this scale.", + "DEFAULT_CURVATURE": "Default overlay curvature", + "DEFAULT_OPACITY": "Default overlay opacity", + "DEFAULT_POSITIONING": "Default overlay positioning", + "OVERLAY_DEFAULTS_HELP": "Only applies to new overlays", + "ENABLED": "Enabled", + "FEATURES": "Features", + "FOCUS_FOLLOWS_MOUSE_MODE": "Mouse move on trigger touch", + "HANDSFREE_POINTER": "Handsfree mode", + "HANDSFREE_POINTER_HELP": "Input to use when motion\ncontrollers are unavailable.\nLeft pinch is grab, right is click.", + "HANDSFREE_ALT_TAB": "App switcher aim", + "HANDSFREE_ALT_TAB_HELP": "Hold Super+X, aim at the desired window, then release to switch focus.", + "HIDE_GRAB_HELP": "Hide grab help", + "HIDE_USERNAME": "Hide username", + "INPUT_EMULATION_METHOD": "Input emulation method", + "INPUT_EMULATION_METHOD_HELP": "Try change this in case mouse or\nkeyboard input does not register.", + "INPUT_CAPTURE_METHOD": "Input capture method", + "INPUT_CAPTURE_METHOD_HELP": "Allows using physical peripherial inside WayVR.\n Super+Z: Switch input between WayVR and real desktop\n Super+X: Switch between WayVR apps", + "INPUT_PROFILES": "Change Input Bindings", + "INPUT_PROFILES_HELP": "OpenXR controller input bindings", + "INVERT_SCROLL_DIRECTION_X": "Invert horizontal scroll direction", + "INVERT_SCROLL_DIRECTION_Y": "Invert vertical scroll direction", + "KEYBOARD_MIDDLE_CLICK": "Keyboard middle click", + "KEYBOARD_MIDDLE_CLICK_HELP": "Modifier to use when typing\nwith purple laser", + "KEYBOARD_SOUND_ENABLED": "Keyboard sounds", + "LANGUAGE": "Language", + "LEFT_HANDED_MOUSE": "Left-handed mouse", + "LEFT_HANDED_MOUSE_HELP": "Use this if mouse buttons are swapped", + "LONG_PRESS_DURATION": "Long press duration", + "LOOK_AND_FEEL": "Look & Feel", + "MISC": "Miscellaneous", + "NOTIFICATIONS_ENABLED": "Enable notifications", + "NOTIFICATIONS_SOUND_ENABLED": "Notification sounds", + "NOT_SUPPORTED": "Not supported", + "NO_SKYMAPS_FOUND": "No skymaps found", + "OPAQUE_BACKGROUND": "Opaque background", + "OPTION": { + "ANCHORED_HELP": "Moves with center marker. Recommended.", + "FLOATING_HELP": "Moves independently, recenters.\nEasy to misplace; not recommended.", + "STATIC_HELP": "Stays in place relative to world.", + "AUTO": "Automatic", + "AUTO_HELP": "ScreenCopy GPU if supported,\notherwise PipeWire GPU.", + "EYE_ONLY": "Eye laser", + "EYE_PINCH": "Eye + pinch", + "HMD_ONLY": "HMD laser", + "HMD_PINCH": "HMD + pinch", + "NONE": "None", + "NONE_INPUT_HELP": "Do not emulate mouse and keyboard.\nWill not be able to interact with screens.", + "NONE_INPUT_CAPTURE_HELP": "Do not capture mouse and keyboard.\nWill not be able to use physical mouse or\nkeyboard in apps launched inside WayVR.", + "PIPEWIRE_HELP": "Fast GPU capture,\nstandard on all desktops.", + "PW_FALLBACK_HELP": "Slow method with high CPU usage.\nTry in case PipeWire GPU doesn't work", + "SCREENCOPY_GPU_HELP": "Fast, no screen share popups.\nWorks on: Hyprland, Niri, River, Sway", + "SCREENCOPY_HELP": "Slow, no screen share popups.\nWorks on: Hyprland, Niri, River, Sway", + "UINPUT": "Device emulation", + "UINPUT_HELP": "Uses the uinput module to emulate a device.\nKnown to work well on most desktops.", + "EVDEV_HELP": "Grab input devices for exclusive use.\nYour user must be in the input group.", + "WL_VIRTUAL": "Wayland virtual input", + "WL_VIRTUAL_HELP": "Send events to the Wayland compositor using\nzwlr_virtual_pointer and zwp_virtual_keyboard.\nOnly works reliably on some desktops.\nDoes NOT work on KDE, GNOME or COSMIC." + }, + "POINTER_ACCELERATION": "Mouse acceleration", + "POINTER_ACCELERATION_HELP": "On: Adaptive mouse acceleration\nOff: Constant speed", + "POINTER_LERP_FACTOR": "Pointer smoothing", + "POINTER_SPEED": "Mouse speed", + "REQUIRES_RESTART": "Requires restart", + "RESET_PLAYSPACE": "Reset playspace", + "RESET_PLAYSPACE_HELP": "Clear the stage space offset.", + "SAVE_PLAYSPACE_CENTER": "Save playspace center", + "SAVE_PLAYSPACE_CENTER_HELP": "Use current playspace for reset playspace binding.", + "RESET_PLAYSPACE_CENTER": "Reset playspace center", + "RESET_PLAYSPACE_CENTER_HELP": "Clear previously set playspace center.", + "RESTART_SOFTWARE": "Restart software", + "RESTART_SOFTWARE_HELP": "Apply settings that require a restart", + "ROUND_MULTIPLIER": "UI Edge roundness", + "SCREEN_RENDER_DOWN": "Render screen at lower resolution", + "SCREEN_RENDER_DOWN_HELP": "Helps with aliasing on high-res screens", + "SCROLL_SPEED": "Scroll speed", + "SELECT_VARIANT": "Select variant", + "SNAP_ANGLE_DEG": "Window pitch & roll snap angle", + "SNAP_ANGLE_DEG_HELP": "Grabbed windows snap to this angle on pitch and roll axis.", + "ENABLE_WATCH": "Enable watch", + "SETS_ON_WATCH": "Sets on watch", + "SHOW_WELCOME_SCREEN": "Show welcome screen", + "SKYBOX": "Skymap", + "SKYMAP_ALREADY_DOWNLOADED": "This skymap is already downloaded. Select desired action.", + "SPACE_DRAG": "Playspace", + "SPACE_DRAG_MULTIPLIER": "Space drag multiplier", + "SPACE_DRAG_AFFECTS_WORLD": "Leave overlays behind during space move", + "SPACE_DRAG_UNLOCKED": "Allow space drag on all axes", + "SPACE_GRAVITY_DAMPING": "Damping", + "SPACE_GRAVITY_DAMPING_HELP": "Artificial drag to slow down movement. 0.1 - high drag, 1.0 - no drag", + "SPACE_GRAVITY_FLING_STRENGTH": "Fling strength", + "SPACE_GRAVITY_FLING_STRENGTH_HELP": "Intensity multiplier of gravitational launch force after space-drag.\n0.0 - no movement at all, 2.0 - double intensity", + "SPACE_GRAVITY_GRAVITY": "Gravity", + "SPACE_GRAVITY_GRAVITY_HELP": "Amount of downwards force. 0.0 - no gravity", + "SPACE_GRAVITY_GROUND_FRICTION": "Ground friction", + "SPACE_GRAVITY_GROUND_FRICTION_HELP": "Amount of friction slowing you down if you're touching the ground.\n0.0 - no friction (just like on ice), 1.0 - rough surface", + "SPACE_GRAVITY_FLOOR_HEIGHT": "Floor height", + "SPACE_GRAVITY_FLOOR_HEIGHT_HELP": "The Y position where the floor is. Gravity stops when you reach this height.", + "SPACE_ROTATE_UNLOCKED": "Allow space rotate on all axes", + "TROUBLESHOOTING": "Troubleshooting", + "UI_GRADIENT_INTENSITY": "UI Gradient intensity", + "UPRIGHT_SCREEN_FIX": "Upright screen fix", + "UPRIGHT_SCREEN_FIX_HELP": "Fixes upright screens on some desktops", + "USE_PASSTHROUGH": "Enable passthrough", + "USE_PASSTHROUGH_HELP": "Allow passthrough if the XR runtime supports it", + "USE_SKYBOX": "Show skymap", + "USE_SKYBOX_HELP": "Show a skymap if there's no scene app or passthrough", + "WATCH_VIEW_ANGLE": "Watch view angles", + "WATCH_VIEW_ANGLE_HELP": "Control how the watch fades away", + "WHISPER": { + "NEED_TO_DOWNLOAD_MODEL": "The selected model needs to be downloaded.\nDownload it right now?", + "REMOVE_UNUSED_MODELS": "You are turning off the speech-to-text feature.\nWould you like to remove downloaded Whisper models to free up space?" + }, + "WHISPER_MODEL": "Speech-to-text model", + "WHISPER_MODEL_HELP": "Whisper model to use.\nLarger models produce more accurate\nresults, but consume more VRAM.", + "GRID_OPACITY": "Floor grid opacity", + "GRID_OPACITY_HELP": "Opacity of the floor grid when the skymap is enabled", + "XWAYLAND_BY_DEFAULT": "Run apps in Compatibility mode by default", + "SAVE": "Save", + "CANCEL": "Cancel" + }, + "APPLICATION_LAUNCHER": "Application launcher", + "APPLICATION_STARTED": "Application started", + "APPLICATIONS": "Applications", + "AUDIO": { + "AUTO_SWITCH_TO_VR_AUDIO": "Auto-switch to VR audio", + "CARDS": "Cards", + "FAILED_TO_SWITCH_MICROPHONE": "Failed to switch microphone", + "MICROPHONE_SET_SUCCESSFULLY": "Microphone set successfully", + "MICROPHONES": "Microphones", + "NO_VR_MICROPHONE_SWITCH_MANUALLY": "No VR microphone found. Switch it manually.", + "NO_VR_SPEAKERS_FOUND_SWITCH_MANUALLY": "No VR speakers found. Switch them manually.", + "SELECT_AUDIO_CARD_PROFILE": "Select audio card profile", + "SETTINGS": "Audio settings", + "SPEAKERS": "Speakers", + "SPEAKERS_SET_SUCCESSFULLY": "Speakers set successfully", + "VOLUME": "Volume" + }, + "CLOSE_WINDOW": "Close window", + "CREATION_DATE": "Creation date", + "DEBUG_INFO": "Debug info", + "DISPLAY_BRIGHTNESS": "Display brightness", + "DONATE": { + "SUPPORT_US": "Support us", + "DESCRIPTION": "We're a small team of 2 developers building WayVR in our free time. If you enjoy using this software, please consider supporting us - every donation helps us keep going.", + "THANK_YOU_WAYVR": "Thank you from the WayVR Team!", + "BUTTON_TOOLTIP": "Donate via Open Collective", + "CURRENT_SUPPORTERS": "Current Supporters" + }, + "DOWNLOAD": "Download", + "DOWNLOADER": "Downloader", + "WELCOME": { + "ALL_SET": "You're all set!", + "BASICS": "These basics will allow you to start using WayVR with ease.", + "CENTER_MARKER": "Center marker is what will appear in front of you when recentering. Place overlays around it!", + "DOUBLE_PRESS_TO_TOGGLE": "Double-press B (on Index) or Y (on Meta) to show, recenter or hide your set. Try it now.", + "FEATURES_DOCUMENTATION": "There are many other features worth customizing. For more information, check the documentation at", + "FINISH_TUTORIAL": "Finish tutorial", + "GRAB_BOTH_HANDS": "Grab it with both hands if you want to move a specific overlay in your set.", + "GRAB_ONE_HAND": "Grab it with one hand to move your set.", + "GREETING": "Hi there!", + "GUIDE_INTRO": "Let us guide you through your first steps.", + "LASER_COLORS": "Laser Colors", + "LASER_FUNCTIONALITY": "Much of the functionality in WayVR depends on what color of laser is used to interact with a UI element. You don't need to press these buttons, just touch them!", + "LAST_PAGE_INFO": "This tutorial will stop showing up once you get to the last page.", + "LOOK_AT_LEFT_WRIST": "Look at your left wrist. That's your watch.", + "MIDDLE_CLICK_MODE_PURPLE_LASER": "Middle-click Mode: Purple laser", + "MOVING_YOUR_SET": "Moving your set", + "NEXT_BUTTON": "Press Next button below to get started.", + "REGULAR_MODE_BLUE_LASER": "Regular Mode: Blue laser", + "REPOSITION_THIS_WINDOW_BY_GRABBING": "Reposition this window using your controller's grip action.", + "RIGHT_CLICK_MODE_ORANGE_LASER": "Right-click Mode: Orange laser", + "THANKS_FOR_INSTALLING": "Thank you for installing WayVR!", + "WATCH": "Watch", + "WORKING_SET": "Working Set" + }, + "DOWNLOAD_AGAIN": "Download again", + "DOWNLOADING_FILE": "Downloading file...", + "FAILED_TO_LAUNCH_APPLICATION": "Failed to launch a application:", + "GAME_LAUNCHED": "Game launched", + "GAME_LIST": { + "NO_GAMES_FOUND": "No games found", + "RUNNING_GAMES_LIST": "List of running games" + }, + "GAMES": "Games", + "GENERAL_SETTINGS": "General settings", + "GETTING_STARTED": "Getting started", + "HEIGHT": "Height", + "HELLO": "Hello!", + "HELLO_USER": "Hello, {USER}!", + "HIDE": "Hide", + "HOME_SCREEN": "Home", + "MODIFICATION_DATE": "Modification date", + "MONADO_RUNTIME": "Monado runtime", + "LOADING": "Loading...", + "POPUP_ADD_DISPLAY": { + "RESOLUTION": "Resolution" + }, + "PROCESS": { + "FORCE_KILL": "Force-kill", + "STOP": "Stop" + }, + "PROCESS_LIST": "Process list", + "REFRESH": "Refresh", + "REMOVE": "Remove", + "APPLY": "Apply", + "RELOAD_FROM_DISK": "Reload from disk", + "SETTINGS": "Settings", + "SHOW": "Show", + "TARGET_PATH": "Target path", + "TERMINATE_PROCESS": "Terminate process", + "VERSION": "Version", + "WIDTH": "Width", + "PINNED_APPS": "Pinned applications", + "SAVED_TO_FAVOURITES": "Saved to pinned apps", + "ADD_TO_FAVOURITES": "Add to pinned apps", + "ADD_TO_FAVOURITES_HINT": "Save preset and pin it to the app drawer", + "REMOVE_FROM_FAVOURITES": "Remove from pinned apps", + "EMPTY": "Empty" +} \ No newline at end of file diff --git a/scripts/translator/main.ts b/scripts/translator/main.ts index de088ee5..98716bd9 100644 --- a/scripts/translator/main.ts +++ b/scripts/translator/main.ts @@ -196,39 +196,42 @@ function gen_prompt( english_translation: string, context: string, ) { - let num = 1; - for (const example of template.examples) { - description += "\nExample " + num + ":\n\n"; + for (let num = 1; num <= template.examples.length; num++) { + const example = template.examples[num - 1]!; description += - "Translate key `" + - example.key + - "` from English to " + - template.full_name + - ":\n\n"; - description += "```\n"; - description += example.en + "\n"; - description += "```\n\n"; - description += "Result:\n\n"; - description += "```\n"; - description += example.translated + "\n"; - description += "```\n"; - num += 1; + `\nExample ${num}:\n\n` + + `Translate key \`${example.key}\` from English to ${template.full_name}:\n\n` + + "```\n" + + example.en + + "\n```\n\n" + + "Result:\n\n```\n" + + example.translated + + "\n```\n"; } - description += "\nEnd of examples.\n\n"; - description += "Context: " + context + "\n\n"; description += - "Translate key `" + - key + - "` from English to " + - template.full_name + - ":\n\n"; - description += "```\n"; - description += english_translation + "\n"; - description += "```\n"; + `\nEnd of examples.\n\n` + + `Context: ${context}\n\n` + + `Translate key \`${key}\` from English to ${template.full_name}:\n\n` + + "```\n" + + english_translation + + "\n```\n"; return description; } async function run() { + const csv_text = (await fsp.readFile(lang_path + "/en.csv", "utf-8")) as any; + const csv_entries = parse_csv(csv_text); + const orig_english_json = csv_to_json(csv_entries); + + if (template_name === "en") { + await fsp.writeFile( + lang_path + "/en.json", + JSON.stringify(orig_english_json, undefined, "\t"), + ); + console.log("Translation en copied"); + return; + } + const template = JSON.parse( await fsp.readFile(templates_path + "/" + template_name + ".json", "utf-8"), ) as Template; @@ -242,42 +245,15 @@ async function run() { template.full_name, ); - const csv_text = (await fsp.readFile(lang_path + "/en.csv", "utf-8")) as any; - const csv_entries = parse_csv(csv_text); - const orig_english_json = csv_to_json(csv_entries); - let llm_translated_json: any = {}; const translated_json_path = lang_path + "/" + template_name + ".json"; - if (await fsp.exists(translated_json_path)) { + try { console.log("Loading file", translated_json_path); llm_translated_json = JSON.parse( (await fsp.readFile(translated_json_path)).toString(), ); - } - - if (template_name === "en") { - await fsp.writeFile( - lang_path + "/en.json", - JSON.stringify(orig_english_json, undefined, "\t"), - ); - console.log("Translation en finished"); - return; - } - - let orig_translated_json = {}; - try { - orig_translated_json = JSON.parse( - ( - await fsp.readFile(lang_path + "/" + template_name + ".json") - ).toString(), - ); } catch (_e) {} - let total_count = 0; - for (const _entry of csv_entries) { - total_count += 1; - } - await loop_object(llm_translated_json, "", async (key, _) => { if (!key_exists(orig_english_json, key)) { console.log("Removing key", key); @@ -294,10 +270,6 @@ async function run() { const english_translation = entry.english; const context = entry.context; - if (key_exists(orig_translated_json, key)) { - continue; - } - if (key_exists(llm_translated_json, key)) { continue; } diff --git a/scripts/translator/run.sh b/scripts/translator/run.sh index 91e86bd3..928b3558 100755 --- a/scripts/translator/run.sh +++ b/scripts/translator/run.sh @@ -25,6 +25,7 @@ if [ -z "${LLAMA_BASE_URL}" ]; then export LLAMA_BASE_URL="http://127.0.0.1:8080" fi +TEMPLATE="en" bun main.ts TEMPLATE="pl" bun main.ts TEMPLATE="de" bun main.ts TEMPLATE="ja" bun main.ts diff --git a/wayvr/src/assets/lang/en.json b/wayvr/src/assets/lang/en.json index 21048098..82a29bd3 100644 --- a/wayvr/src/assets/lang/en.json +++ b/wayvr/src/assets/lang/en.json @@ -1,17 +1,63 @@ { - "EDIT_MODE": { - "STEREO_3D_MODE": { - "ADJUST_MOUSE": "Adjust mouse", - "FULL_FRAME": "Full 3D", - "FULL_FRAME_BAT": "Full-BAT", - "FULL_FRAME_SBS": "Full-SBS", - "FULL_FRAME_TAB": "Full-TAB", - "SPLIT_BOTTOM_TOP": "BOTTOM→TOP", - "SPLIT_LEFT_RIGHT": "LEFT→RIGHT", - "SPLIT_RIGHT_LEFT": "RIGHT→LEFT", - "SPLIT_TOP_BOTTOM": "TOP→BOTTOM", - "TITLE": "3D Stereo Mode" + "DEFINITIONS": { + "ANCHORED": "Anchored", + "FLOATING": "Floating", + "STATIC": "Static", + "SET": "Set", + "WATCH": "Watch", + "DASHBOARD": "Dashboard", + "EDIT_MODE": "Edit Mode", + "MIRROR": "Mirror", + "SETTINGS": "Settings", + "KEYBOARD": "Keyboard", + "TASKBAR": "Taskbar", + "FEATURES": "Features", + "OVERLAY": "Overlay" + }, + "ANCHOR": { + "CENTER": "Center" + }, + "BAR": { + "ADD_MIRROR": "Add a new mirror overlay", + "ADD_NEW_SET": "Add new set", + "ADD_PASSTHRU": "Add new pass-through cutout", + "CLOSE_APP": "Close app", + "CLOSE_OVERLAY": "Close overlay", + "DELETE_CURRENT_SET": "Delete current set", + "EDIT_MODE_TOGGLE": "Toggle edit mode", + "FORCE_CLOSE_APP": "Force close app", + "HANDSFREE": { + "EYE_ONLY": "Eye laser", + "EYE_TRACKING": "Eye + pinch", + "HMD": "HMD + pinch", + "HMD_ONLY": "HMD laser", + "NONE": "Off", + "TITLE": "Hands-free mode" }, + "RELOAD_FROM_DISK": "Reload XML from disk", + "RESET_POSITION": "Reset position", + "TOGGLE_VISIBILITY": "Toggle visibility" + }, + "DEFAULT": "Default", + "DISABLED": "Disabled", + "DONE": "Done", + "EDIT_MODE": { + "ADJUST_CURVATURE": "Adjust curvature", + "ALIGN_TO_HMD": "Align to HMD", + "ALPHA_BLEND_MODE": "Alpha blend mode", + "ANGLE_FADE": "Angle fade", + "ANGLE_FADE_HELP": "Fade when not facing HMD", + "BLENDING_ADDITIVE": "Additive blending", + "BLOCK_INPUT": "Block game input", + "CURVATURE": "Curvature", + "DELETE": "Long press to remove from current set", + "DISABLE_GRAB": "Disable grab", + "GLOBAL": "Always visible", + "HINT_POINT_WINDOW": "Point at a window to change its parameters.\nOnce done, leave edit mode using the button on the right.", + "INTERPOLATION": "Interpolation", + "KEYBOARD": "Keyboard", + "LEAVE": "Leave edit mode", + "LOCK_INTERACTION": "Lock interaction", "MOUSE": { "FLIP180": "Flipped 180°", "FLIP270": "Flipped 270°", @@ -23,6 +69,29 @@ "ROTATE90": "Rotated 90°", "TITLE": "Mouse fixes", "WRONG_SCREEN_SELECTION_HELP": "If the cursor moves on a completely different screen,\nthe screens were likely selected wrong. See readme." + }, + "MOVE_PRESS_AND_DRAG": "Move (press & drag)", + "OPACITY": "Opacity", + "POS_ANCHORED": "Anchored: Moves together with set. Default.", + "POS_FLOATING": "Floating: Moves independently, recenters when shown.", + "POS_HAND_L": "Follow the left hand.", + "POS_HAND_R": "Follow the right hand.", + "POS_HMD": "Follow the HMD.", + "POS_STATIC": "Static: Not part of any set, no recenter.", + "POSITIONING": "Positioning", + "RESIZE_PRESS_AND_DRAG": "Resize (press & drag)", + "RESIZE_CORNER": "Drag to resize", + "STEREO_3D_MODE": { + "ADJUST_MOUSE": "Adjust mouse", + "FULL_FRAME": "Full 3D", + "FULL_FRAME_BAT": "Full-BAT", + "FULL_FRAME_SBS": "Full-SBS", + "FULL_FRAME_TAB": "Full-TAB", + "SPLIT_BOTTOM_TOP": "BOTTOM→TOP", + "SPLIT_LEFT_RIGHT": "LEFT→RIGHT", + "SPLIT_RIGHT_LEFT": "RIGHT→LEFT", + "SPLIT_TOP_BOTTOM": "TOP→BOTTOM", + "TITLE": "3D Stereo Mode" } }, "ALTTAB": { @@ -33,7 +102,6 @@ "GRAB": "Move individual overlay", "DASH": "Toggle dashboard", "EDIT": "Toggle edit mode", - "KEYBOARD": "Toggle keyboard", "SET": "Switch set", "RECENTER": "Show/hide/recenter", "GENERAL_BINDS": "General bindings", @@ -45,7 +113,7 @@ "GRAB": { "ADJUST_DISTANCE": "Adjust distance", "ADJUST_SIZE": "Adjust size", - "GRABBING_ANCHORED": "Anchored overlays all move together. Separate a single window by grabbing it with the other hand while still grabbing the anchor.", + "GRABBING_ANCHORED": "Anchored overlays move with the set. Separate a single window by grabbing it with the other hand while still grabbing the set.", "GRABBING_ANCHORED_EDIT": "This overlay will stay anchored to the center marker.", "GRABBING_FLOATING": "This overlay is Floating and will stay in place, unless recentered.", "GRABBING_FOLLOW": "This overlay will follow the device it is attached to.", @@ -71,17 +139,16 @@ "LAST_EXISTING_SET": "This is the last existing set.", "LETS_ADD_OVERLAYS": "Let's add some overlays from the taskbar!", "MAXIMUM_SETS_REACHED": "Maximum number of sets reached.", + "NO_KEYMAPS_CONFIGURED": "No keyboard layouts configured", + "NO_KEYMAPS_CONFIGURED_HELP": "Check the wayvr.org on how to set up your keyboard layouts!", "NO_SET_SELECTED": "No set is selected.", - "ONE_CONTROLLER_ON_FLOOR": "Place one controller on the floor!", - "NO_KEYMAPS_CONFIGURED": "No keymaps configured.", - "NO_KEYMAPS_CONFIGURED_HELP": "Check the wayvr.org on how to set up your keymaps!" + "ONE_CONTROLLER_ON_FLOOR": "Place one controller on the floor!" }, "WATCH": { "ADD_NEW_SET": "Add a new set", "CLEANUP_MIRRORS": "Remove mirrors that are\nnot currently visible", "DASHBOARD": "Dashboard", "EDIT_MODE": "Edit Mode", - "EDIT_MODE_EXPLANATION": "Overlays can now be moved and tuned individually.\nControl which overlays are visible on this set:", "FIX_FLOOR": "Fix floor level", "LONG_PRESS_TO_DELETE_SET": "Hold to delete", "RECENTER": "Recenter playspace", @@ -99,20 +166,5 @@ "INITIAL_TEXT": "Press and hold the mic button to start transcribing...", "INIT_ERROR": "Error while starting Whisper engine", "ENTER_KEY": "Enter key" - }, - "DEFINITIONS": { - "ANCHORED": "Anchored", - "FLOATING": "Floating", - "STATIC": "Static", - "SET": "Set", - "WATCH": "Watch", - "DASHBOARD": "Dashboard", - "EDIT_MODE": "Edit Mode", - "MIRROR": "Mirror", - "SETTINGS": "Settings", - "KEYBOARD": "Keyboard", - "TASKBAR": "Taskbar", - "FEATURES": "Features", - "OVERLAY": "Overlay" } -} +} \ No newline at end of file