From d490d21ad225f5538f6e6459a8265b93cc02e646 Mon Sep 17 00:00:00 2001 From: Jamiras Date: Tue, 10 Sep 2024 22:07:52 -0600 Subject: [PATCH 1/2] use translated strings for achievement messages --- cheevos/cheevos.c | 107 ++++++++++++++++++++++++--------------------- intl/msg_hash_us.h | 72 ++++++++++++++++++++++++++++-- msg_hash.h | 18 +++++++- 3 files changed, 141 insertions(+), 56 deletions(-) diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index d927fe3adce..ed46108af04 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -756,11 +756,8 @@ int rcheevos_get_richpresence(char* s, size_t len) if (!rcheevos_is_game_loaded()) return 0; - /* TODO/FIXME - localize */ - { - size_t _len = strlcpy(s, "Spectating ", len); - return (int)strlcpy(s + _len, rc_client_get_game_info(rcheevos_locals.client)->title, len - _len); - } + return snprintf(s, len, msg_hash_to_str(MSG_CHEEVOS_RICH_PRESENCE_SPECTATING), + rc_client_get_game_info(rcheevos_locals.client)->title); } return (int)rc_client_get_rich_presence_message(rcheevos_locals.client, s, (size_t)len); @@ -1750,8 +1747,8 @@ void rcheevos_validate_config_settings(void) * auto setting should achieve the most accurate frame rate anyway, so * disallow any manual values */ if (!settings->bools.video_frame_delay_auto && settings->uints.video_frame_delay != 0) { - const char* error = "Hardcore paused. Manual video frame delay setting not allowed."; - CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", error); + const char* error = msg_hash_to_str(MSG_CHEEVOS_HARDCORE_PAUSED_MANUAL_FRAME_DELAY); + CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", msg_hash_to_str_us(MSG_CHEEVOS_HARDCORE_PAUSED_MANUAL_FRAME_DELAY)); rcheevos_pause_hardcore(); runloop_msg_queue_push(error, 0, 4 * 60, false, NULL, @@ -1768,8 +1765,8 @@ void rcheevos_validate_config_settings(void) * running at less than 60Hz because 1 is the default value - many users * wouldn't know how to change it to auto. */ if (settings->uints.video_swap_interval > 1) { - const char* error = "Hardcore paused. vsync swap interval above 1 not allowed."; - CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", error); + const char* error = msg_hash_to_str(MSG_CHEEVOS_HARDCORE_PAUSED_VSYNC_SWAP_INTERVAL); + CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", msg_hash_to_str_us(MSG_CHEEVOS_HARDCORE_PAUSED_VSYNC_SWAP_INTERVAL)); rcheevos_pause_hardcore(); runloop_msg_queue_push(error, 0, 4 * 60, false, NULL, @@ -1780,8 +1777,8 @@ void rcheevos_validate_config_settings(void) /* this causes N blank frames to be rendered between real frames, thus * can slow down the actual number of rendered frames per second. */ if (settings->uints.video_black_frame_insertion > 0) { - const char* error = "Hardcore paused. Black frame insertion not allowed."; - CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", error); + const char* error = msg_hash_to_str(MSG_CHEEVOS_HARDCORE_PAUSED_BLACK_FRAME_INSERTION); + CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", msg_hash_to_str_us(MSG_CHEEVOS_HARDCORE_PAUSED_BLACK_FRAME_INSERTION)); rcheevos_pause_hardcore(); runloop_msg_queue_push(error, 0, 4 * 60, false, NULL, @@ -1793,8 +1790,8 @@ void rcheevos_validate_config_settings(void) the purposes of shaders that update faster than content. Thus * can slow down the actual number of rendered frames per second. */ if (settings->uints.video_shader_subframes > 1) { - const char* error = "Hardcore paused. Shader subframes not allowed."; - CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", error); + const char* error = msg_hash_to_str(MSG_CHEEVOS_HARDCORE_PAUSED_SHADER_SUBFRAMES); + CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", msg_hash_to_str_us(MSG_CHEEVOS_HARDCORE_PAUSED_SHADER_SUBFRAMES)); rcheevos_pause_hardcore(); runloop_msg_queue_push(error, 0, 4 * 60, false, NULL, @@ -1815,9 +1812,11 @@ void rcheevos_validate_config_settings(void) if (!rc_libretro_is_setting_allowed(disallowed_settings, key, val)) { char buffer[128]; - /* TODO/FIXME - localize */ - snprintf(buffer, sizeof(buffer), "Hardcore paused. Setting not allowed: %s=%s", key, val); + snprintf(buffer, sizeof(buffer), + msg_hash_to_str_us(MSG_CHEEVOS_HARDCORE_PAUSED_SETTING_NOT_ALLOWED), key, val); CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", buffer); + snprintf(buffer, sizeof(buffer), + msg_hash_to_str(MSG_CHEEVOS_HARDCORE_PAUSED_SETTING_NOT_ALLOWED), key, val); rcheevos_pause_hardcore(); runloop_msg_queue_push(buffer, 0, 4 * 60, false, NULL, @@ -1839,10 +1838,8 @@ void rcheevos_validate_config_settings(void) if (console_id && !rc_libretro_is_system_allowed(sysinfo->library_name, console_id)) { char buffer[256]; - buffer[0] = '\0'; - /* TODO/FIXME - localize */ snprintf(buffer, sizeof(buffer), - "Hardcore paused. You cannot earn hardcore achievements for %s using %s", + msg_hash_to_str(MSG_CHEEVOS_HARDCORE_PAUSED_SYSTEM_NOT_FOR_CORE), rc_console_name(console_id), sysinfo->library_name); CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", buffer); rcheevos_pause_hardcore(); @@ -2324,7 +2321,8 @@ static void rc_hash_reset_cdreader_hooks(void) static void rcheevos_show_game_placard(void) { - char msg[256], unsupported_clause[64] = ""; + char msg[256]; + int len; const settings_t* settings = config_get_ptr(); rc_client_user_game_summary_t summary; @@ -2334,37 +2332,46 @@ static void rcheevos_show_game_placard(void) rc_client_get_user_game_summary(rcheevos_locals.client, &summary); - if (summary.num_unsupported_achievements) - { - snprintf(unsupported_clause, sizeof(unsupported_clause), " (%d unsupported)", - (int)summary.num_unsupported_achievements); - } - - /* TODO/FIXME - localize strings */ if (summary.num_core_achievements == 0) { if (summary.num_unofficial_achievements == 0) - strlcpy(msg, "This game has no achievements.", sizeof(msg)); + len = snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_CHEEVOS_GAME_HAS_NO_ACHIEVEMENTS)); else - snprintf(msg, sizeof(msg), - "Activated %d unofficial achievements%s.", - (int)summary.num_unofficial_achievements, - unsupported_clause); + len = snprintf(msg, sizeof(msg), + msg_hash_to_str(MSG_CHEEVOS_UNOFFICIAL_ACHIEVEMENTS_ACTIVATED), + (int)summary.num_unofficial_achievements); } else if (rc_client_get_encore_mode_enabled(rcheevos_locals.client)) { - snprintf(msg, sizeof(msg), - "All %d achievements activated for this session%s.", - (int)summary.num_core_achievements, - unsupported_clause); + len = snprintf(msg, sizeof(msg), + msg_hash_to_str(MSG_CHEEVOS_ALL_ACHIEVEMENTS_ACTIVATED), + (int)summary.num_core_achievements); } else { - snprintf(msg, sizeof(msg), - "You have %d of %d achievements unlocked%s.", - (int)summary.num_unlocked_achievements, - (int)summary.num_core_achievements, - unsupported_clause); + len = snprintf(msg, sizeof(msg), + msg_hash_to_str(MSG_CHEEVOS_NUMBER_ACHIEVEMENTS_UNLOCKED), + (int)summary.num_unlocked_achievements, + (int)summary.num_core_achievements); + } + + if (summary.num_unsupported_achievements) + { + if (len < sizeof(msg) - 4) + { + msg[len++] = ' '; + msg[len++] = '('; + + len += snprintf(&msg[len], sizeof(msg) - len, + msg_hash_to_str(MSG_CHEEVOS_UNSUPPORTED_COUNT), + (int)summary.num_unsupported_achievements); + + if (len < sizeof(msg) - 1) + { + msg[len++] = ')'; + msg[len] = '\0'; + } + } } msg[sizeof(msg) - 1] = 0; @@ -2479,10 +2486,8 @@ static void rcheevos_client_login_callback(int result, /* show notification (if enabled) */ if (settings->bools.cheevos_visibility_account) { - /* TODO/FIXME - localize */ - char msg[256]; - snprintf(msg, sizeof(msg), - "RetroAchievements: Logged in as \"%s\".", + char msg[128]; + snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_CHEEVOS_LOGGED_IN_AS_USER), user->display_name); runloop_msg_queue_push(msg, 0, 2 * 60, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); @@ -2522,14 +2527,15 @@ static void rcheevos_client_load_game_callback(int result, if (!settings->bools.cheevos_verbose_enable) return; - snprintf(msg, sizeof(msg), "RetroAchievements: Game could not be identified."); + snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_CHEEVOS_GAME_NOT_IDENTIFIED)); } else { - snprintf(msg, sizeof(msg), "RetroAchievements game load failed: %s", - error_message ? error_message : "Unknown error"); + if (!error_message) + error_message = "Unknown error"; - CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", msg); + snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_CHEEVOS_GAME_LOAD_FAILED), error_message); + CHEEVOS_LOG(RCHEEVOS_TAG "Game load failed: %s\n", error_message); } runloop_msg_queue_push(msg, 0, 2 * 60, false, NULL, @@ -3453,9 +3459,8 @@ static void rcheevos_client_change_media_callback(int result, if (!error_message) error_message = "Unknown error"; - snprintf(msg, sizeof(msg), "RetroAchievements change media failed: %s", - error_message); - CHEEVOS_LOG(RCHEEVOS_TAG "%s\n", msg); + snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_CHEEVOS_CHANGE_MEDIA_FAILED), error_message); + CHEEVOS_LOG(RCHEEVOS_TAG "Change media failed: %s\n", error_message); } runloop_msg_queue_push(msg, 0, 2 * 60, false, NULL, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index c68fe36fd5e..1857b2deae6 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -14321,10 +14321,6 @@ MSG_HASH( MSG_CANNOT_INFER_NEW_CONFIG_PATH, "Cannot infer new config path. Use current time." ) -MSG_HASH( - MSG_CHEEVOS_HARDCORE_MODE_ENABLE, - "Achievements Hardcore Mode Enabled, save state & rewind were disabled." - ) MSG_HASH( MSG_COMPARING_WITH_KNOWN_MAGIC_NUMBERS, "Comparing with known magic numbers..." @@ -15509,6 +15505,10 @@ MSG_HASH( MSG_FAILED_TO_RECEIVE_HEADER_FROM_HOST, "Failed to receive header from host." ) +MSG_HASH( + MSG_CHEEVOS_LOGGED_IN_AS_USER, + "RetroAchievements: Logged in as \"%s\"." + ) MSG_HASH( MSG_CHEEVOS_LOAD_STATE_PREVENTED_BY_HARDCORE_MODE, "You must pause or disable Achievements Hardcore Mode to load states." @@ -15529,6 +15529,70 @@ MSG_HASH( MSG_CHEEVOS_COMPLETED_GAME, "Completed %s" ) +MSG_HASH( + MSG_CHEEVOS_HARDCORE_MODE_ENABLE, + "Achievements Hardcore Mode Enabled, save state & rewind were disabled." + ) +MSG_HASH( + MSG_CHEEVOS_GAME_HAS_NO_ACHIEVEMENTS, + "This game has no achievements." + ) +MSG_HASH( + MSG_CHEEVOS_ALL_ACHIEVEMENTS_ACTIVATED, + "All %d achievements activated for this session" +) +MSG_HASH( + MSG_CHEEVOS_UNOFFICIAL_ACHIEVEMENTS_ACTIVATED, + "Activated %d unofficial achievements" +) +MSG_HASH( + MSG_CHEEVOS_NUMBER_ACHIEVEMENTS_UNLOCKED, + "You have %d of %d achievements unlocked" +) +MSG_HASH( + MSG_CHEEVOS_UNSUPPORTED_COUNT, + "%d unsupported" +) +MSG_HASH( + MSG_CHEEVOS_RICH_PRESENCE_SPECTATING, + "Spectating %s" + ) +MSG_HASH( + MSG_CHEEVOS_HARDCORE_PAUSED_MANUAL_FRAME_DELAY, + "Hardcore paused. Manual video frame delay setting not allowed." + ) +MSG_HASH( + MSG_CHEEVOS_HARDCORE_PAUSED_SHADER_SUBFRAMES, + "Hardcore paused. Shader subframes not allowed." + ) +MSG_HASH( + MSG_CHEEVOS_HARDCORE_PAUSED_VSYNC_SWAP_INTERVAL, + "Hardcore paused. vsync swap interval above 1 not allowed." + ) +MSG_HASH( + MSG_CHEEVOS_HARDCORE_PAUSED_BLACK_FRAME_INSERTION, + "Hardcore paused. Black frame insertion not allowed." + ) +MSG_HASH( + MSG_CHEEVOS_HARDCORE_PAUSED_SETTING_NOT_ALLOWED, + "Hardcore paused. Setting not allowed: %s=%s" + ) +MSG_HASH( + MSG_CHEEVOS_HARDCORE_PAUSED_SYSTEM_NOT_FOR_CORE, + "Hardcore paused. You cannot earn hardcore achievements for %s using %s" + ) +MSG_HASH( + MSG_CHEEVOS_GAME_NOT_IDENTIFIED, + "RetroAchievements: Game could not be identified." + ) +MSG_HASH( + MSG_CHEEVOS_GAME_LOAD_FAILED, + "RetroAchievements game load failed: %s" + ) +MSG_HASH( + MSG_CHEEVOS_CHANGE_MEDIA_FAILED, + "RetroAchievements change media failed: %s" + ) MSG_HASH( MSG_RESAMPLER_QUALITY_LOWEST, "Lowest" diff --git a/msg_hash.h b/msg_hash.h index 0864f126165..78913c99948 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -478,7 +478,6 @@ enum msg_hash_enums MSG_FAST_FORWARD, MSG_REWIND_REACHED_END, MSG_FAILED_TO_START_MOVIE_RECORD, - MSG_CHEEVOS_HARDCORE_MODE_ENABLE, MSG_STATE_SLOT, MSG_REPLAY_SLOT, MSG_STARTING_MOVIE_RECORD_TO, @@ -4073,11 +4072,28 @@ enum msg_hash_enums MSG_CHEAT_SEARCH_ADD_MATCH_SUCCESS, MSG_CHEAT_SEARCH_ADD_MATCH_FAIL, MSG_CHEAT_SEARCH_DELETE_MATCH_SUCCESS, + MSG_CHEEVOS_LOGGED_IN_AS_USER, MSG_CHEEVOS_LOAD_STATE_PREVENTED_BY_HARDCORE_MODE, MSG_CHEEVOS_HARDCORE_MODE_DISABLED, MSG_CHEEVOS_HARDCORE_MODE_DISABLED_CHEAT, MSG_CHEEVOS_MASTERED_GAME, MSG_CHEEVOS_COMPLETED_GAME, + MSG_CHEEVOS_HARDCORE_MODE_ENABLE, + MSG_CHEEVOS_GAME_HAS_NO_ACHIEVEMENTS, + MSG_CHEEVOS_ALL_ACHIEVEMENTS_ACTIVATED, + MSG_CHEEVOS_UNOFFICIAL_ACHIEVEMENTS_ACTIVATED, + MSG_CHEEVOS_NUMBER_ACHIEVEMENTS_UNLOCKED, + MSG_CHEEVOS_UNSUPPORTED_COUNT, + MSG_CHEEVOS_RICH_PRESENCE_SPECTATING, + MSG_CHEEVOS_HARDCORE_PAUSED_MANUAL_FRAME_DELAY, + MSG_CHEEVOS_HARDCORE_PAUSED_VSYNC_SWAP_INTERVAL, + MSG_CHEEVOS_HARDCORE_PAUSED_SHADER_SUBFRAMES, + MSG_CHEEVOS_HARDCORE_PAUSED_BLACK_FRAME_INSERTION, + MSG_CHEEVOS_HARDCORE_PAUSED_SETTING_NOT_ALLOWED, + MSG_CHEEVOS_HARDCORE_PAUSED_SYSTEM_NOT_FOR_CORE, + MSG_CHEEVOS_GAME_NOT_IDENTIFIED, + MSG_CHEEVOS_GAME_LOAD_FAILED, + MSG_CHEEVOS_CHANGE_MEDIA_FAILED, MENU_ENUM_LABEL_VALUE_TIMEDATE_YMD_HMS, MENU_ENUM_LABEL_VALUE_TIMEDATE_YMD_HM, MENU_ENUM_LABEL_VALUE_TIMEDATE_YMD, From b4617a5c6e6621c5a5611dfca6cba7589bd50e8c Mon Sep 17 00:00:00 2001 From: Jamiras Date: Tue, 10 Sep 2024 22:20:21 -0600 Subject: [PATCH 2/2] fix android build --- cheevos/cheevos.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index ed46108af04..a83a4eb1775 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -2335,7 +2335,7 @@ static void rcheevos_show_game_placard(void) if (summary.num_core_achievements == 0) { if (summary.num_unofficial_achievements == 0) - len = snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_CHEEVOS_GAME_HAS_NO_ACHIEVEMENTS)); + len = snprintf(msg, sizeof(msg), "%s", msg_hash_to_str(MSG_CHEEVOS_GAME_HAS_NO_ACHIEVEMENTS)); else len = snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_CHEEVOS_UNOFFICIAL_ACHIEVEMENTS_ACTIVATED), @@ -2527,7 +2527,7 @@ static void rcheevos_client_load_game_callback(int result, if (!settings->bools.cheevos_verbose_enable) return; - snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_CHEEVOS_GAME_NOT_IDENTIFIED)); + snprintf(msg, sizeof(msg), "%s", msg_hash_to_str(MSG_CHEEVOS_GAME_NOT_IDENTIFIED)); } else {