diff --git a/assets/voxygen/i18n/en/main.ron b/assets/voxygen/i18n/en/main.ron index 79c7f4ad90..48209ec675 100644 --- a/assets/voxygen/i18n/en/main.ron +++ b/assets/voxygen/i18n/en/main.ron @@ -64,7 +64,13 @@ https://veloren.net/account/."#, "main.login.username_bad_characters": "Username contains invalid characters! (Only alphanumeric, '_' and '-' are allowed)", "main.login.username_too_long": "Username is too long! Max length is: {max_len}", "main.servers.select_server": "Select a server", - "main.servers.singleplayer_error": "Failed to connect to internal server.", + "main.servers.singleplayer_error": "Failed to connect to internal server: {sp_error}", + "main.servers.network_error": "Server network/socket error: {raw_error}", + "main.servers.participant_error": "Participant disconnect/protocol error: {raw_error}", + "main.servers.stream_error": "Client connection/compression/(de)serialization error: {raw_error}", + "main.servers.database_error": "Server database error: {raw_error}", + "main.servers.persistence_error": "Server persistence error (Probably Asset/Character Data related): {raw_error}", + "main.servers.other_error": "Server general error: {raw_error}", // Credits screen "main.credits": "Credits", diff --git a/voxygen/src/menu/main/mod.rs b/voxygen/src/menu/main/mod.rs index e2bcc6b8ee..f01047eca7 100644 --- a/voxygen/src/menu/main/mod.rs +++ b/voxygen/src/menu/main/mod.rs @@ -113,17 +113,43 @@ impl PlayState for MainMenuState { global_state.singleplayer = None; self.init = InitState::None; self.main_menu_ui.cancel_connection(); + let server_err = match e { + server::Error::NetworkErr(e) => localized_strings + .get("main.servers.network_error") + .to_owned() + .replace("{raw_error}", e.to_string().as_str()), + server::Error::ParticipantErr(e) => localized_strings + .get("main.servers.participant_error") + .to_owned() + .replace("{raw_error}", e.to_string().as_str()), + server::Error::StreamErr(e) => localized_strings + .get("main.servers.stream_error") + .to_owned() + .replace("{raw_error}", e.to_string().as_str()), + server::Error::DatabaseErr(e) => localized_strings + .get("main.servers.database_error") + .to_owned() + .replace("{raw_error}", e.to_string().as_str()), + server::Error::PersistenceErr(e) => localized_strings + .get("main.servers.persistence_error") + .to_owned() + .replace("{raw_error}", e.to_string().as_str()), + server::Error::Other(e) => localized_strings + .get("main.servers.other_error") + .to_owned() + .replace("{raw_error}", e.to_string().as_str()), + }; global_state.info_message = Some( localized_strings .get("main.servers.singleplayer_error") - .to_owned(), + .to_owned() + .replace("{sp_error}", server_err.as_str()), ); }, Err(_) => (), } } } - // Handle window events. for event in events { // Pass all events to the ui first.