Files
qt-creator/share/qtcreator/lua-lupdate/lupdate.lua
Marcus Tillmanns 1220db049e Lua: Add support for translation
Change-Id: I5398480233c830bb08c641bc8193b068fb037032
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2024-07-24 10:04:26 +00:00

100 lines
2.3 KiB
Lua

--- luarocks install luafilesystem
local lfs = require "lfs"
function string:endswith(suffix)
return self:sub(- #suffix) == suffix
end
function findLUpdate()
if os.execute("lupdate -version 2>/dev/null") then
return "lupdate"
end
QtDir = os.getenv("QTDIR")
if QtDir then
local path = QtDir .. "/bin/lupdate"
if os.execute(path .. " -version 2>/dev/null") then
return path
end
end
return "lupdate"
end
LUpdatePath = findLUpdate()
TmpFiles = {}
local curdir, err = lfs.currentdir()
if not curdir then
print("Error: " .. err)
return
end
local folderName = curdir:match("([^/]+)$")
print("Working on: " .. curdir)
local pluginSpecName = folderName .. ".lua"
--- Noop tr function
function tr(str) return str end
local specScript, err = loadfile(curdir .. "/" .. pluginSpecName)
if not specScript then
print("Error: " .. err)
return
end
local spec, err = specScript()
if not spec then
print("Error: " .. err)
return
end
if not spec.languages then
print("Error: No languages specified in plugin spec.")
return
end
TrContext = spec.Name:gsub("[^a-zA-Z]", "_")
for file in lfs.dir(".") do
if file ~= "." and file ~= ".." and file:endswith(".lua") and file ~= "lupdate.lua" then
local f = io.open(file, "r")
if f then
local contents = f:read("a")
local tmpname = os.tmpname()
local tf = io.open(tmpname, "w")
if tf then
tf:write("--- class " .. TrContext .. " { Q_OBJECT \n")
tf:write(contents)
tf:write("--- }\n")
tf:close()
table.insert(TmpFiles, tmpname)
end
end
end
end
AllFiles = table.concat(TmpFiles, "\n")
LstFileName = os.tmpname()
local lstFile = io.open(LstFileName, "w")
if lstFile then
lstFile:write(AllFiles)
lstFile:close()
local allLangs = ""
for _, lang in ipairs(spec.languages) do
local name = "ts/" .. string.lower(folderName) .. "_" .. lang .. ".ts"
allLangs = allLangs .. name .. " "
end
lfs.mkdir("ts")
os.execute(LUpdatePath .. " @" .. LstFileName .. " -ts " .. allLangs)
--- Cleanup
os.remove(LstFileName)
for _, file in ipairs(TmpFiles) do
os.remove(file)
end
end