tools/check_lua_locale_files.lua
changeset 14089 30565866db82
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/check_lua_locale_files.lua	Fri Nov 02 17:43:06 2018 +0100
@@ -0,0 +1,71 @@
+local SHOW_WARNINGS = false
+
+local function scandir(directory)
+	local i, t, popen = 0, {}, io.popen
+	local pfile = popen('ls -a "'..directory..'"')
+	for filename in pfile:lines() do
+		i = i + 1
+		t[i] = filename
+	end
+	pfile:close()
+	return t
+end
+
+local locale_dir = "../share/hedgewars/Data/Locale"
+
+local files = scandir(locale_dir)
+
+for f = 1, #files do
+	local filename = files[f]
+	if string.match(filename, "^[a-zA-Z_]+%.lua$") ~= nil and filename ~= "stub.lua" then
+
+		print("== "..filename.." ==")
+		dofile(locale_dir .. "/" .. filename)
+		local errors = 0
+		for eng, transl in pairs(locale) do
+			local example = "[\""..tostring(eng).."\"] = \""..tostring(transl).."\""
+
+			-- Check for obvious errors
+			if transl == "" then
+				print("[EE] Empty translation: "..example)
+				errors = errors + 1
+			end
+			if eng == "" then
+				print("[EE] Empty source string: "..example)
+				errors = errors + 1
+			end
+			if type(transl) ~= "string" then
+				print("[EE] Translation is not a string: "..example)
+				errors = errors + 1
+			end
+			if type(eng) ~= "string" then
+				print("[EE] Source is not a string: "..example)
+				errors = errors + 1
+			end
+
+			-- Check parameters
+			local ne, nt = 0, 0
+			local patterns = { "c", "d", "E", "e", "f", "g", "G", "i", "o", "u", "X", "x", "q", "s", "%.%df", "%.f", "" }
+			for p = 1, #patterns do
+				for w in string.gmatch(eng, "%%"..patterns[p]) do
+					ne = ne + 1
+				end
+				for w in string.gmatch(transl, "%%"..patterns[p]) do
+					nt = nt + 1
+				end
+			end
+			if ne ~= nt then
+				print("[EE] Param mismatch!: [\""..eng.."\"] = \""..transl.."\"")
+				errors = errors + 1
+			end
+
+			-- Warnings
+			if SHOW_WARNINGS and eng == transl then
+				print("[WW] Translation unchanged: "..example)
+			end
+		end
+		if errors == 0 then
+			print("OK")
+		end
+	end
+end