[Bugfix] FS#13908 hotkeys not saved when language is changed

rockbox-gerrit-noreply--- via rockbox-cvs <[email protected]> Tue, 26 May 2026 01:30:21 -0400
Newsgroups gmane.comp.systems.archos.rockbox.cvs
Message-ID <[email protected]>
commit 239ba599fddb7a51abdc6872cdce22f5ff9903e3
Author: William Wilgus <[email protected]>
Date:   Tue May 26 01:09:05 2026 -0400

    [Bugfix] FS#13908 hotkeys not saved when language is  changed
    
    Lang IDs get localized, if using them in a setting they should be
    converted to english
    
    adds lang_id_to_english() which walks the core builtins to return the lang id in english
    
    Change-Id: Iced0d70be1318e512a8f3756e2bef1102dc511d8

diff --git a/apps/language.c b/apps/language.c
index 112a25957c..9f2bdece03 100644
--- a/apps/language.c
+++ b/apps/language.c
@@ -147,6 +147,25 @@ int lang_english_to_id(const char *english)
     return -1;
 }
 
+const char * lang_id_to_english(int lang_id)
+{
+    int i;
+    unsigned char *ptr = (unsigned char *) core_language_builtin;
+
+    if (lang_id >= 0 && lang_id < LANG_LAST_INDEX_IN_ARRAY)
+    {
+        if (language_strings[0] == ptr) /* already in english */
+            return str(lang_id);
+
+        for (i = 0; i < LANG_LAST_INDEX_IN_ARRAY; i++) {
+            if (i == lang_id)
+                return ptr;
+            ptr += strlen((char *)ptr) + 1; /* advance pointer to next string */
+        }
+    }
+    return ""; /* Not found */
+}
+
 int lang_is_rtl(void)
 {
     return (lang_options & LANGUAGE_FLAG_RTL) != 0;
diff --git a/apps/language.h b/apps/language.h
index 85fa7f6efa..2d31d3c602 100644
--- a/apps/language.h
+++ b/apps/language.h
@@ -34,6 +34,8 @@ int lang_load(const char *filename, const unsigned char *builtin,
 
 /* get the ID of an english string so it can be localised */
 int lang_english_to_id(const char *english);
+/* get the english string of a given id */
+const char * lang_id_to_english(int lang_id);
 
 /* returns whether the loaded language is a right-to-left language */
 int lang_is_rtl(void);
diff --git a/apps/onplay.c b/apps/onplay.c
index 2f19c9505e..fe355ac4b1 100644
--- a/apps/onplay.c
+++ b/apps/onplay.c
@@ -67,6 +67,7 @@
 #ifdef HAVE_DISK_STORAGE
 #include "storage.h"
 #endif
+#include "language.h"
 
 static int onplay_result = ONPLAY_OK;
 static bool in_queue_submenu = false;
@@ -1823,8 +1824,8 @@ void wps_context_menu_load_from_cfg(void* setting, char *value)
 
             for (size_t i = ARRAYLEN(hotkey_items) - 1; i < ARRAYLEN(hotkey_items); i--)
             {
-                if (end-st > 1
-                    && strncasecmp(st, str(hotkey_items[i].lang_id), end-st) == 0)
+                if (end-st > 1 &&
+                    strncasecmp(st, lang_id_to_english(hotkey_items[i].lang_id), end-st) == 0)
                 {
                     var |= HK_CTX_SET(item, hotkey_items[i].action);
                 }
@@ -1851,7 +1852,7 @@ char* wps_context_menu_write_to_cfg(void* setting, char*buf, int buf_len)
     for (int i = 0; i < items && buf_len > 0; i++)
     {
         written = snprintf(buffer, buf_len, "%s, ",
-                           str(get_hotkey(HK_CTX_GET(i, var))->lang_id));
+                    lang_id_to_english(get_hotkey(HK_CTX_GET(i, var))->lang_id));
         buf_len -= written;
         buffer += written;
     }
-- 
rockbox-cvs mailing list
[email protected]
https://lists.haxx.se/mailman/listinfo/rockbox-cvs