From d297a90d3fb654bd01abefa72913476245936976 Mon Sep 17 00:00:00 2001
From: kno10 <erich.schubert@gmail.com>
Date: Fri, 24 Jan 2025 22:38:08 +0100
Subject: [PATCH] Sort blocks and mobs by localized name in documentation
 (#4895)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Reviewed-on: https://git.minetest.land/VoxeLibre/VoxeLibre/pulls/4895
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: kno10 <erich.schubert@gmail.com>
Co-committed-by: kno10 <erich.schubert@gmail.com>
---
 mods/HELP/doc/doc/init.lua | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/mods/HELP/doc/doc/init.lua b/mods/HELP/doc/doc/init.lua
index 47b5e18dd..9f4ddbfc8 100644
--- a/mods/HELP/doc/doc/init.lua
+++ b/mods/HELP/doc/doc/init.lua
@@ -758,7 +758,8 @@ function doc.generate_entry_list(cid, playername)
 		local entry_textlist = "textlist[0,1;"..(doc.FORMSPEC.WIDTH-0.2)..","..(doc.FORMSPEC.HEIGHT-2)..";doc_catlist;"
 		local counter = 0
 		doc.data.players[playername].entry_ids = {}
-		local entries = doc.get_sorted_entry_names(cid)
+		local lang = core.get_player_information(playername).lang_code
+		local entries = doc.get_sorted_entry_names(cid, lang)
 		doc.data.players[playername].catsel_list = {}
 		for i=1, #entries do
 			local eid = entries[i]
@@ -800,8 +801,7 @@ function doc.generate_entry_list(cid, playername)
 	return formstring
 end
 
-function doc.get_sorted_entry_names(cid)
-	local sort_table = {}
+function doc.get_sorted_entry_names(cid, lang)
 	local entry_table = {}
 	local cat = doc.data.categories[cid]
 	local used_eids = {}
@@ -824,21 +824,15 @@ function doc.get_sorted_entry_names(cid)
 		end
 	end
 	for eid,entry in pairs(cat.entries) do
-		local new_entry = table.copy(entry)
-		new_entry.eid = eid
 		if not used_eids[eid] then
+			local new_entry = table.copy(entry)
+			new_entry.eid = eid
+			new_entry.__sort_key = entry.name and core.strip_colors(core.get_translated_string(lang, entry.name)):lower() or eid
 			table.insert(entry_table, new_entry)
 		end
-		table.insert(sort_table, entry.name)
 	end
 	if cat.def.sorting == "custom" then
 		return extract(entry_table)
-	else
-		table.sort(sort_table)
-	end
-	local reverse_sort_table = table.copy(sort_table)
-	for i=1, #sort_table do
-		reverse_sort_table[sort_table[i]] = i
 	end
 	local comp
 	if cat.def.sorting ~= "nosort" then
@@ -848,7 +842,7 @@ function doc.get_sorted_entry_names(cid)
 		-- Alphabetic sorting
 		elseif cat.def.sorting == "abc" or cat.def.sorting == nil then
 			comp = function(e1, e2)
-				if reverse_sort_table[e1.name] < reverse_sort_table[e2.name] then return true else return false end
+				return e1.__sort_key < e2.__sort_key
 			end
 		end
 		table.sort(entry_table, comp)