mirror of https://github.com/koreader/koreader
add tool to update F-Droid metadata based on weblate translations (#9090)
parent
f67469bab4
commit
6f44a29b88
@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env luajit
|
||||
|
||||
-- tool to generate localized metadata
|
||||
--
|
||||
-- metadata is fetched by F-Droid on each tagged release and used to update
|
||||
-- https://f-droid.org/packages/org.koreader.launcher.fdroid/
|
||||
--
|
||||
-- usage: ./tools/update_metadata.lua
|
||||
--
|
||||
-- NOTE: title and screenshots are not translated. These resources are located in metadata/en-US
|
||||
|
||||
package.path = "frontend/?.lua;" .. package.path
|
||||
local _ = require("gettext")
|
||||
|
||||
local metadata = {
|
||||
["short_description.txt"] = _("Ebook reader with support for many formats like PDF, DjVu, EPUB, FB2, CBZ."),
|
||||
["full_description.txt"] = _([[* portable: runs on embedded devices (Cervantes, Kindle, Kobo, PocketBook), Android and Linux computers. Developers can run a KOReader emulator in Linux and MacOS.
|
||||
|
||||
* multi-format documents: supports fixed page formats (PDF, DjVu, CBT, CBZ) and reflowable e-book formats (EPUB, FB2, Mobi, DOC, CHM, TXT). Scanned PDF/DjVu documents can also be reflowed with the built-in K2pdfopt library.
|
||||
|
||||
* full-featured reading: multi-lingual user interface with a highly customizable reader view and many typesetting options. You can set arbitrary page margins, override line spacing and choose external fonts and styles. It has multi-lingual hyphenation dictionaries bundled into the application.
|
||||
|
||||
* integrated with calibre (search metadata, receive ebooks wirelessly, browse library via OPDS), Wallabag, Wikipedia, Google Translate and other content providers.
|
||||
|
||||
* optimized for e-ink devices: custom UI without animation, with paginated menus, adjustable text contrast, and easy zoom to fit content or page in paged media.
|
||||
|
||||
* extensible via plugins
|
||||
|
||||
* and much more: look up words with StarDict dictionaries / Wikipedia, add your own online OPDS catalogs and RSS feeds, online over-the-air software updates, an FTP client, an SSH server, …
|
||||
]]),
|
||||
}
|
||||
|
||||
local function isFile(str)
|
||||
local f = io.open(str, "r")
|
||||
if f then
|
||||
f:close()
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function writeFile(str, path)
|
||||
local f = io.open(path, "w")
|
||||
if f then
|
||||
f:write(str)
|
||||
f:write("\n")
|
||||
f:close()
|
||||
end
|
||||
end
|
||||
|
||||
local function isLocaleDir(str)
|
||||
for _, v in ipairs({"templates", "README.md", "LICENSE"}) do
|
||||
if str == v then return false end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local function getLocales()
|
||||
local locales = {}
|
||||
local output = io.popen('ls l10n')
|
||||
if not output then return {} end
|
||||
for dir in output:lines() do
|
||||
if isLocaleDir(dir) then
|
||||
locales[#locales + 1] = dir
|
||||
end
|
||||
end
|
||||
output:close()
|
||||
return locales
|
||||
end
|
||||
|
||||
----------------------------------------------------------------
|
||||
print("updating metadata for " .. #getLocales() .. " languages")
|
||||
for file, str in pairs(metadata) do
|
||||
local count = { new = 0, updated = 0, not_translated = 0 }
|
||||
|
||||
-- update english
|
||||
_.changeLang("en")
|
||||
local source = _(str)
|
||||
local metadata_file = "metadata/en-US/" .. file
|
||||
writeFile(source, metadata_file)
|
||||
|
||||
-- update translations
|
||||
for __, lang in ipairs(getLocales()) do
|
||||
_.changeLang(lang)
|
||||
local translation = _(str)
|
||||
if source ~= translation then
|
||||
local metadata_dir = "metadata/" .. lang
|
||||
metadata_file = metadata_dir .. "/" .. file
|
||||
os.execute('mkdir -p ' .. metadata_dir)
|
||||
if isFile(metadata_file) then
|
||||
count.updated = count.updated + 1
|
||||
else
|
||||
count.new = count.new + 1
|
||||
end
|
||||
writeFile(translation, metadata_file)
|
||||
else
|
||||
count.not_translated = count.not_translated + 1
|
||||
end
|
||||
end
|
||||
print(string.format("%s: %d new | %d updated | %d not translated",
|
||||
file, count.new, count.updated, count.not_translated))
|
||||
end
|
Loading…
Reference in New Issue