translator: Fix english not working at all, minor refactoring

This commit is contained in:
Aleksander 2026-08-03 09:39:56 +02:00
parent 3ae01f59d1
commit 98f800c644
4 changed files with 448 additions and 95 deletions

View File

@ -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"
}

View File

@ -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;
}

View File

@ -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

View File

@ -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"
}
}
}