You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koreader/frontend/ui/language.lua

175 lines
5.8 KiB
Lua

-- high level wrapper module for gettext
local _ = require("gettext")
local Language = {
language_names = {
C = "English",
en = "English",
en_GB = "English (United Kingdom)",
ca = "Catalá",
cs = "Čeština",
da = "Dansk",
de = "Deutsch",
eo = "Esperanto",
es = "Español",
eu = "Euskara",
fi = "Suomi",
fr = "Français",
gl = "Galego",
it_IT = "Italiano",
he = "עִבְרִית",
hr = "Hrvatski",
hu = "Magyar",
lt_LT = "Lietuvių",
lv = "Latviešu",
nl_NL = "Nederlands",
nb_NO = "Norsk bokmål",
pl = "Polski",
pl_PL = "Polski2",
pt_PT = "Português",
pt_BR = "Português do Brasil",
ro = "Română",
ro_MD = "Română (Moldova)",
sk = "Slovenčina",
sv = "Svenska",
th = "ภาษาไทย",
vi = "Tiếng Việt",
tr = "Türkçe",
vi_VN = "Viet Nam",
ar = "عربى",
bg_BG = "български",
bn = "বাংলা",
el = "Ελληνικά",
fa = "فارسی",
hi = "हिन्दी",
ja = "日本語",
ka = "ქართული",
kk = "Қазақ",
ko_KR = "한글",
ru = "Русский",
sr = "Српски",
uk = "Українська",
zh = "中文",
zh_CN = "简体中文",
zh_TW = "中文(台灣)",
["zh_TW.Big5"] = "中文台灣Big5",
},
-- Languages that are written RTL, and should have the UI mirrored.
-- Should match lang tags defined in harfbuzz/src/hb-ot-tag-table.hh.
-- https://meta.wikimedia.org/wiki/Template:List_of_language_names_ordered_by_code
-- Not included are those absent or commented out in hb-ot-tag-table.hh.
languages_rtl = {
ar = true, -- Arabic
arz = true, -- Egyptian Arabic
ckb = true, -- Sorani (Central Kurdish)
dv = true, -- Divehi
fa = true, -- Persian
he = true, -- Hebrew
ks = true, -- Kashmiri
ku = true, -- Kurdish
ps = true, -- Pashto
sd = true, -- Sindhi
ug = true, -- Uyghur
ur = true, -- Urdu
yi = true, -- Yiddish
}
}
function Language:getLanguageName(lang_locale)
return self.language_names[lang_locale] or lang_locale
end
function Language:isLanguageRTL(lang_locale)
if not lang_locale then
return false
end
local lang = lang_locale
local sep = lang:find("_")
if sep then
lang = lang:sub(1, sep-1)
end
return self.languages_rtl[lang] or false
end
function Language:changeLanguage(lang_locale)
local UIManager = require("ui/uimanager")
_.changeLang(lang_locale)
G_reader_settings:saveSetting("language", lang_locale)
UIManager:askForRestart(_("Please restart KOReader for the new language setting to take effect."))
end
function Language:genLanguageSubItem(lang_locale)
return {
text = self:getLanguageName(lang_locale),
checked_func = function()
return G_reader_settings:readSetting("language") == lang_locale
end,
callback = function()
self:changeLanguage(lang_locale)
end
}
end
function Language:getLangMenuTable()
-- cache menu table
if not self.LangMenuTable then
self.LangMenuTable = {
text = _("Language"),
-- NOTE: language with no translation are commented out for now
sub_item_table = {
self:genLanguageSubItem("C"),
self:genLanguageSubItem("en_GB"),
self:genLanguageSubItem("ca"),
self:genLanguageSubItem("cs"),
self:genLanguageSubItem("de"),
self:genLanguageSubItem("eo"),
self:genLanguageSubItem("es"),
self:genLanguageSubItem("eu"),
self:genLanguageSubItem("fi"),
self:genLanguageSubItem("fr"),
self:genLanguageSubItem("gl"),
self:genLanguageSubItem("hr"),
self:genLanguageSubItem("it_IT"),
self:genLanguageSubItem("hu"),
self:genLanguageSubItem("lt_LT"),
self:genLanguageSubItem("lv"),
self:genLanguageSubItem("nl_NL"),
self:genLanguageSubItem("nb_NO"),
self:genLanguageSubItem("pl"),
--self:genLanguageSubItem("pl_PL"),
self:genLanguageSubItem("pt_PT"),
self:genLanguageSubItem("pt_BR"),
self:genLanguageSubItem("ro"),
self:genLanguageSubItem("ro_MD"),
self:genLanguageSubItem("sk"),
self:genLanguageSubItem("sv"),
self:genLanguageSubItem("vi"),
self:genLanguageSubItem("tr"),
self:genLanguageSubItem("vi_VN"),
self:genLanguageSubItem("ar"),
self:genLanguageSubItem("bg_BG"),
--self:genLanguageSubItem("bn"),
self:genLanguageSubItem("el"),
self:genLanguageSubItem("fa"),
self:genLanguageSubItem("he"),
self:genLanguageSubItem("hi"),
self:genLanguageSubItem("ja"),
self:genLanguageSubItem("ka"),
--self:genLanguageSubItem("kk"),
self:genLanguageSubItem("ko_KR"),
self:genLanguageSubItem("ru"),
self:genLanguageSubItem("sr"),
self:genLanguageSubItem("uk"),
--self:genLanguageSubItem("zh"),
self:genLanguageSubItem("zh_CN"),
self:genLanguageSubItem("zh_TW"),
--self:genLanguageSubItem("zh_TW.Big5"),
}
}
end
return self.LangMenuTable
end
return Language