#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_ET_INSTALL_FAIL_TOOL, ERROR_ET_INSTALL_FAIL_DRIVER_FOLDER, ERROR_ET_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, // Tooltips TOOLTIP_IPD_ADJUSTMENT, TOOLTIP_PROXIMITY_NOT_SUPPORTED, TOOLTIP_SLEEP_NOT_SUPPORTED, TOOLTIP_STEAMVR_FOLDER_REQUIRED, // 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 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, // 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_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, 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)