#pragma once #include #include #include "ui.h" // String ID enumeration for all localizable strings enum class StringID { // Error messages ERROR_LIGHTHOUSE_SERIAL_NOT_FOUND, ERROR_FAILED_READ_SETTINGS, ERROR_FAILED_READ_FIRMWARE, ERROR_FAILED_READ_DFU_FIRMWARE, ERROR_FAILED_WRITE_CONFIG, ERROR_FAILED_STEAMVR_SETTINGS, ERROR_DFU_MODE_FAILED, ERROR_ADMIN_PRIVILEGES_REQUIRED, ERROR_UTILITY_ALREADY_RUNNING, ERROR_NO_BACKUP_FOUND, ERROR_READING_HMD_CONFIG, ERROR_UTILITY_INVALID_STEAMVR, ERROR_VALIDATING_CONFIG, ERROR_DRIVER_INSTALL_FAIL_TOOL, ERROR_ET_INSTALL_FAIL_DRIVER_FOLDER, ERROR_BRIDGE_INSTALL_FAIL_DRIVER_FOLDER, ERROR_DRIVER_INSTALL_FAIL_STEAMVR_FOLDER, ERROR_ET_LAUNCH, ERROR_READING_STEAMVR_SETTINGS, ERROR_FINDING_STEAMVR_SETTINGS, ERROR_COLOR_TINT_RUNNING, ERROR_COLOR_TINT_TOOL, ERROR_NO_SERIAL, ERROR_NO_IPD_FIELD, ERROR_UPLOAD_NEW_CONFIG, ERROR_FAILED_STAGED_CONFIG, ERROR_FAILED_DOWNLOAD_CONFIG, ERROR_FINDING_LIGHTHOUSE_CONSOLE, ERROR_FAILED_VALIDATING_CONFIG_LT, ERROR_FAILED_VALIDATING_CONFIG, ERROR_FAILED_OPENING_CONFIG, ERROR_ET_ALREADY_RUNNING, // UI Labels LABEL_DISPLAY_COLOR_TINT, LABEL_DISPLAY_REFRESH_RATE, LABEL_IPD_ADJUSTMENT, LABEL_FAN_SPEED, LABEL_DISPLAY_BRIGHTNESS, LABEL_OVERDRIVE, LABEL_LED_COLOR, LABEL_USAGE_TIME, LABEL_LONGEST_SESSION, LABEL_BEYOND_FIRMWARE, LABEL_CAMERA_FIRMWARE, LABEL_EYETRACKING, LABEL_PROXIMITY_SENSOR_OFFSET, LABEL_DEVICE_IDLE_SLEEP, LABEL_ADVANCED_SETTINGS, LABEL_OUTWARD, LABEL_INWARD, LABEL_HOURS, LABEL_HOUR, LABEL_MINUTES, LABEL_MINUTE, // Button labels BUTTON_RESOLVE, BUTTON_IGNORE, BUTTON_OK, BUTTON_CANCEL, BUTTON_BACK, BUTTON_RESET, BUTTON_SAVE_SETTINGS, BUTTON_UPDATE_FIRMWARE, BUTTON_RESTART_BEYOND, BUTTON_EXIT_DFU_MODE, BUTTON_RESTART_EYETRACKING_CAMERAS, BUTTON_SELECT_FILE, BUTTON_CHANGE_STEAMVR_FOLDER, BUTTON_OPEN_EYETRACKING_CLIENT, BUTTON_INSTALL_EYETRACKING_ADDON, BUTTON_UPDATE_AVAILABLE, BUTTON_SELECT, BUTTON_REMOVE, BUTTON_REFRESH, // Tooltips TOOLTIP_IPD_ADJUSTMENT, TOOLTIP_PROXIMITY_NOT_SUPPORTED, TOOLTIP_SLEEP_NOT_SUPPORTED, TOOLTIP_STEAMVR_FOLDER_REQUIRED, TOOLTIP_GETTING_INFO, // Status messages STATUS_AWAITING_DEVICE, STATUS_CHANGING_REFRESH_RATE, STATUS_CHANGING_IPD, STATUS_SAVING, STATUS_UPDATING_FIRMWARE, STATUS_UPDATING_ET_FIRMWARE, STATUS_VERIFYING_UPDATE, STATUS_SAVING_ERROR_LOG, STATUS_RESTARTING_BOOTLOADER, // Popup titles POPUP_TITLE_ERROR, POPUP_TITLE_BEYOND_FIRMWARE, POPUP_TITLE_EYETRACKING_FIRMWARE, POPUP_TITLE_LIGHTHOUSE_UPDATE, POPUP_TITLE_MEMORY_UPDATE, POPUP_TITLE_RESTART_STEAMVR, POPUP_TITLE_RECONNECT_DEVICE, POPUP_TITLE_IPD_CHANGE, POPUP_TITLE_IGNORE_SETTING, POPUP_TITLE_PROXIMITY_CHANGE, POPUP_TITLE_ET_UPDATE_FAILED, POPUP_TITLE_IDLE_SLEEP_CONFIRM, POPUP_TITLE_REINITIALIZE_CAMERAS, POPUP_TITLE_BAD_UPDATE_FIX, // Popup messages POPUP_MSG_UPDATE_BEYOND_FIRMWARE, POPUP_MSG_UPDATE_ET_FIRMWARE, POPUP_MSG_FLASH_WARN, POPUP_MSG_UPDATE_LIGHTHOUSE_CONFIG, POPUP_MSG_UPDATE_VERIFY_CONFIG, POPUP_MSG_UPDATE_MEMORY_CONFIG, POPUP_MSG_RESTART_STEAMVR, POPUP_MSG_RECONNECT_DEVICE, POPUP_MSG_IPD_CHANGE, POPUP_MSG_IPD_CHANGE_WITH_ET, POPUP_MSG_IGNORE_SETTING, POPUP_MSG_SAVE_PROXIMITY_OFFSET, POPUP_MSG_ET_UPDATE_FAILED, POPUP_MSG_ET_UPDATE_ATTEMPTS, POPUP_MSG_IDLE_SLEEP_CONFIRM, POPUP_MSG_REBOOT_BEYOND, POPUP_MSG_REINITIALIZE_CAMERAS, POPUP_CAM_ADMIN_REQUIREMENT, POPUP_BAD_UPDATE_EX, POPUP_BAD_UPDATE_FIX, POPUP_ADDON_TITLE, POPUP_ADDON_INFO, // Advanced settings ADV_FLASH_BEYOND_FIRMWARE, ADV_FLASH_ET_FIRMWARE, ADV_FLASH_LIGHTHOUSE_CONFIG, ADV_FLASH_MEMORY_CONFIG, ADV_ONLY_IF_INSTRUCTED, ADV_HEADSET_SERIAL, ADV_LIGHTHOUSE_SERIAL, ADV_BEYOND_FIRMWARE_VERSION, ADV_ET_FIRMWARE_VERSION, // DFU/Bootloader messages DFU_DETECTED_MESSAGE, DFU_EXIT_MESSAGE, DFU_STUCK_MESSAGE, DFU_UPDATE_COMPLETE, DFU_WAITING_FOR_DFU, DFU_UPDATE_FAILED, DFU_INTEGRITY, DFU_FW_NOT_FOUND, DFU_RETRY, BOOTLOADER_DETECTED, BOOTLOADER_RESTART_MESSAGE, BOOTLOADER_STUCK_MESSAGE, BOOTLOADER_UPDATE_COMPLETE, BOOTLOADER_UPDATE_FAIL, BOOTLOADER_FIRMWARE_VERSION, // Crash handler CRASH_COMMUNICATION_ERROR, CRASH_SOFTWARE_VERSION, CRASH_ERROR_REASON, CRASH_HARD_FAULT, CRASH_UNKNOWN_ISR, CRASH_STACK_OVERFLOW, CRASH_UNKNOWN_ERROR, CRASH_DISCONNECT_RECONNECT, CRASH_CONTACT_SUPPORT, CRASH_VISIT_WEBSITE_HEAD, CRASH_VISIT_WEBSITE_TAIL, // Settings descriptions DESC_COLOR_TINT, DESC_IDLE_SLEEP, DESC_IDLE_SLEEP_NOTE, DESC_SAVE_SETTINGS, DESC_STEAMVR_SETTINGS_WARNING, // Refresh rate labels REFRESH_75HZ, REFRESH_90HZ, REFRESH_72HZ, // Status labels STATUS_INSTALLED, STATUS_NOT_INSTALLED, STATUS_LOADING, // Utility version UTILITY_VERSION, // Warning banners WARN_STEAMVR_SETTINGS, WARN_NO_CAMERA, WARN_BAD_UPDATE, WARN_VIEW_BUTTON, WARN_RESOLVE_BUTTON, // File dialogs FILE_DIALOG_BEYOND_FIRMWARE, FILE_DIALOG_ET_FIRMWARE, FILE_DIALOG_LIGHTHOUSE_CONFIG, FILE_DIALOG_MEMORY_CONFIG, FILE_DIALOG_SELECT_STEAMVR_FOLDER, // Toast notifications TOAST_NEW_DEVICE_CONGRATS, TOAST_NEW_DEVICE_MESSAGE, TOAST_NEW_DEVICE_ET_MESSAGE, TOAST_ET_SETUP_MESSAGE, TOAST_ET_SETUP_TITLE, SETTING_MOTION_TITLE, SETTING_MOTION_DESC, SETTING_SAMPLE_VALUE_TITLE, SETTING_SAMPLE_VALUE_DESC, SETTING_SAMPLE_AUTO_TITLE, SETTING_SAMPLE_AUTO_DESC, SETTING_DISPLAY_IDLE_TITLE, SETTING_DISPLAY_IDLE_DESC, SETTING_PAUSE_TITLE, SETTING_PAUSE_DESC, SETTING_GPU_PROFILE_TITLE, SETTING_GPU_PROFILE_DESC, SETTING_GPU_BUS_TITLE, SETTING_GPU_BUS_DESC, // Eyetracking text EYETRACKING_HEADER, EYETRACKING_STATUS_SEARCHING_CAMERAS, EYETRACKING_STATUS_WAITING_STEAMVR, EYETRACKING_STATUS_WAITING_VR_APP, EYETRACKING_STATUS_DOWNLOADING_MODEL, EYETRACKING_STATUS_ERROR, EYETRACKING_STATUS_ACTIVE, EYETRACKING_STATUS_NOT_RUNNING, EYETRACKING_ENABLE_EYETRACKING, EYETRACKING_RECIPIENTS_HEADER, EYETRACKING_ENROLLMENT_HEADER, EYETRACKING_USER_TOKEN_LABEL, EYETRACKING_USER_ID_LABEL, EYETRACKING_BUTTON_PASTE, EYETRACKING_TOKEN_EXPIRED_MESSAGE, EYETRACKING_ENROLLMENT_INTRO_MESSAGE, EYETRACKING_TOKEN_CONTACT_PREFIX, EYETRACKING_TOKEN_CONTACT_SUFFIX, EYETRACKING_STATUS_LABEL, EYETRACKING_DFR_HEADER, EYETRACKING_DFR_DESCRIPTION, EYETRACKING_DFR_GET_STARTED_PREFIX, EYETRACKING_DFR_TITLES_LINK_TEXT, EYETRACKING_DFR_GET_STARTED_SUFFIX, EYETRACKING_DFR_OPENXR_FORWARD_MESSAGE, EYETRACKING_DFR_QUAD_VIEWS_REQUIRED, EYETRACKING_DFR_DOWNLOAD_INSTALL_LINK, EYETRACKING_DFR_RESTART_STEAMVR_MESSAGE, EYETRACKING_DFR_BETA_NOTE, EYETRACKING_ENABLE_DFR, EYETRACKING_OPEN_QUAD_VIEW_SETTINGS, EYETRACKING_DFR_GAZE_CURSOR, EYETRACKING_PLEASE_TRY_AGAIN, EYETRACKING_ALIGNMENT_OFF_QUESTION, EYETRACKING_SEE_TIPS_LINK, EYETRACKING_MODEL_NO_BLINKING_WARNING, EYETRACKING_SHOW_ALIGNMENT_HELPER, EYETRACKING_SEE_GUIDE_LINK, EYETRACKING_ALIGNMENT_HELPER_GUIDE_TITLE, EYETRACKING_ALIGNMENT_HELPER_GUIDE_TEXT, EYETRACKING_REDO_ENROLLMENT_WITH_IPD_CHANGE, EYETRACKING_ENROLLMENT_DISRUPT_WARNING, EYETRACKING_CLICK_START_WHEN_READY, EYETRACKING_ENROLLMENT_CONSENT_PREFIX, EYETRACKING_ENROLLMENT_PRIVACY_LINK, EYETRACKING_BUTTON_START, EYETRACKING_ALIGNMENT_HELPER_ENABLE_QUESTION, EYETRACKING_ALIGNMENT_HELPER_OVERLAY_MESSAGE, EYETRACKING_BUTTON_YES, EYETRACKING_BUTTON_NO, EYETRACKING_BUTTON_CLOSE, EYETRACKING_ALIGNMENT_HELPER_REQUIRES_DFR, EYETRACKING_ALIGNMENT_HELPER_DISABLE_WARNING, EYETRACKING_BUTTON_CONTINUE, EYETRACKING_OPENXR_LAYER_CONFLICT_WARNING, EYETRACKING_EYE_VIEWER_LATENCY_WARNING, EYETRACKING_EYE_VIEWER_CLOSE_RECOMMENDATION, EYETRACKING_RENAME_MODEL_LABEL, EYETRACKING_REMOVE_MODEL_LABEL, EYETRACKING_REMOVE_MODEL_LIST, EYETRACKING_MODEL_TRAINING_IN_PROGRESS, EYETRACKING_DFR_SETTINGS_APPLIED_RESTART, EYETRACKING_QUAD_VIEWS_SETTINGS_WRITE_FAILED, EYETRACKING_DFR_APPLY_RECOMMENDED_SETTINGS_QUESTION, EYETRACKING_DFR_OVERWRITE_USER_SETTINGS_WARNING, EYETRACKING_DFR_APPLY_CHANGE_QUESTION, EYETRACKING_DFR_POPULAR_APPS_LIST_DESC, EYETRACKING_DFR_QUAD_VIEWS_NOT_REQUIRED_NOTE, EYETRACKING_WARNING_GPU_UNAVAILABLE, EYETRACKING_WARNING_CAMERA_ACCESS_FAILED, EYETRACKING_WARNING_MODEL_LOAD_FAILED, EYETRACKING_WARNING_EYETRACKING_DATA_LOAD_FAILED, EYETRACKING_APP_DCS, EYETRACKING_APP_DCS_SETUP, EYETRACKING_APP_PAVLOV, EYETRACKING_APP_PAVLOV_SETUP, EYETRACKING_APP_IRACING, EYETRACKING_APP_IRACING_SETUP, EYETRACKING_APP_MSFS_2024, EYETRACKING_APP_MSFS_2024_SETUP_PREFIX, EYETRACKING_APP_MSFS_2024_SETUP, EYETRACKING_APP_KAYAK_VR_MIRAGE, EYETRACKING_APP_KAYAK_SETUP, EYETRACKING_TIP_WEAR_CONFIGURATIONS, EYETRACKING_TIP_CLEAN_CAMERA_LENSES, EYETRACKING_TIP_OLD_MODEL_REENROLL, EYETRACKING_TIP_IPD_CHANGE_REENROLL, EYETRACKING_TIP_ALIGNMENT_HELPER_USAGE, EYETRACKING_RECIPIENT_VRCHAT_OSC, EYETRACKING_RECIPIENT_VRCHAT_OSC_DESC, EYETRACKING_RECIPIENT_VRCFT, EYETRACKING_RECIPIENT_VRCFT_DESC, EYETRACKING_RECIPIENT_DFR, EYETRACKING_RECIPIENT_DFR_DESC, EYETRACKING_RECIPIENT_EYE_VIEWER, EYETRACKING_RECIPIENT_EYE_VIEWER_DESC, EYETRACKING_REQUIRE_STEAMVR_PRESENCE_DESC, EYETRACKING_REQUIRE_STEAMVR_PRESENCE, EYETRACKING_SMOOTHING_ENABLED_DESC, EYETRACKING_SMOOTHING_ENABLED, EYETRACKING_TRACK_EYES_DESC, EYETRACKING_TRACK_RIGHT_EYE, EYETRACKING_TRACK_LEFT_EYE, EYETRACKING_SMOOTHING_INTENSITY, EYETRACKING_SMOOTHING_INTENSITY_DESC, EYETRACKING_OSC_SEND_IP_ADDRESS, EYETRACKING_OSC_SEND_IP_ADDRESS_DESC, EYETRACKING_OSC_SEND_PORT, EYETRACKING_OSC_SEND_PORT_DESC, EYETRACKING_PERIPHERAL_CLARITY, EYETRACKING_PERIPHERAL_CLARITY_DESC, EYETRACKING_FOCUS_CLARITY, EYETRACKING_FOCUS_CLARITY_DESC, EYETRACKING_HORIZONTAL_FOCUS_REGION_SCALE, EYETRACKING_HORIZONTAL_FOCUS_REGION_SCALE_DESC, EYETRACKING_VERTICAL_FOCUS_REGION_SCALE, EYETRACKING_VERTICAL_FOCUS_REGION_SCALE_DESC, EYETRACKING_EDGE_SMOOTHING, EYETRACKING_EDGE_SMOOTHING_DESC, EYETRACKING_VISUAL_CURSOR, EYETRACKING_MODEL_FILTER_CLOUD, EYETRACKING_MODEL_FILTER_DOWNLOADED, EYETRACKING_MODEL_FILTER_ALL, EYETRACKING_MODEL_NO_SELECT, EYETRACKING_MODEL_NONE_AVAILABLE, EYETRACKING_NO_MODELS, EYETRACKING_TOKEN_FOR_MODELS, EYETRACKING_ENROLL_REQ, EYETRACKING_PERFORM_ENROLL, EYETRACKING_REDO_ENROLL, EYETRACKING_SETTINGS, EYETRACKING_AVAILABLE_MODELS, EYETRACKING_ADV_SETTING_CHANGES, EYETRACKING_USER_TOKEN_HINT, EYETRACKING_BLINK_LABEL, EYETRACKING_BLINK_DESC, EYETRACKING_BLINK_Option1, EYETRACKING_BLINK_Option2, EYETRACKING_BLINK_Option3, EYETRACKING_APPS_LIST_RUNNING, EYETRACKING_APPS_LIST_SELECTED, EYETRACKING_APPS_LIST_BTN, EYETRACKING_APPS_LIST_DESC, EYETRACKING_APPS_NOT_AVAIL, EYETRACKING_APPS_NONE_SELECTED, STRING_COUNT // Keep this last }; // Forward declarations - actual implementations in language-specific headers // These are defined in localization_en.h, localization_jp.h, etc. class Localization { public: // Get localized string static const std::string& GetString(StringID id); // Get localized wide string static const std::wstring& GetWString(StringID id); // Set language at runtime static void SetLanguage(Locales languageCode); static Locales GetLanguage() { return currentLanguage; } private: static std::unordered_map strings; static std::unordered_map wstrings; static Locales currentLanguage; // Helper to convert UTF-8 to wide string static std::wstring StringToWString(const std::string& str); // Load strings from language-specific header static void LoadLanguageStrings(const std::unordered_map& langStrings); }; // Convenience macros for cleaner code #define LSTR(id) Localization::GetString(id) #define LWSTR(id) Localization::GetWString(id)