[UX] Allow keyboard layout selection (#5318)

Fixes <https://github.com/koreader/koreader/issues/3998>.

This isn't quite what I want but I've been letting this slip for
too long due to fancier keyboard interaction concepts.
pull/5337/head
Frans de Jonge 5 years ago committed by GitHub
parent 20ebb55703
commit 17e437dbd0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -210,6 +210,10 @@ if Device:isAndroid() then
end
if Device:isTouchDevice() then
common_settings.keyboard_layout = {
text = _("Keyboard layout"),
sub_item_table = require("ui/elements/menu_keyboard_layout"),
}
common_settings.taps_and_gestures = {
text = _("Taps and gestures"),
}

@ -0,0 +1,19 @@
local Language = require("ui/language")
local VirtualKeyboard = require("ui/widget/virtualkeyboard")
local orderedPairs = require("ffi/util").orderedPairs
local sub_item_table = {}
for k, _ in orderedPairs(VirtualKeyboard.lang_to_keyboard_layout) do
table.insert(sub_item_table, {
text = Language:getLanguageName(k),
checked_func = function()
return VirtualKeyboard:getKeyboardLayout() == k
end,
callback = function()
G_reader_settings:saveSetting("keyboard_layout", k)
end,
})
end
return sub_item_table

@ -57,6 +57,7 @@ local order = {
"status_bar",
},
device = {
"keyboard_layout",
"time",
"battery",
"autosuspend",

@ -4,7 +4,50 @@ local InfoMessage = require("ui/widget/infomessage")
local UIManager = require("ui/uimanager")
local _ = require("gettext")
local Language = {}
local Language = {
language_names = {
C = "English",
en = "English",
ca = "Catalá",
cs_CZ = "Čeština",
de = "Deutsch",
es = "Español",
eu = "Euskara",
fr = "Français",
gl = "Galego",
it_IT = "Italiano",
hu = "Magyar",
nl_NL = "Nederlands",
nb_NO = "Norsk",
pl = "Polski",
pl_PL = "Polski2",
pt_PT = "Português",
pt_BR = "Português do Brasil",
sk = "Slovenčina",
sv = "Svenska",
vi = "Tiếng Việt",
tr = "Türkçe",
vi_VN = "Viet Nam",
ar_AA = "عربى",
bg_BG = "български",
bn = "বাঙালি",
el = "Ελληνικά",
fa = "فارسی",
ja = "日本語",
kk = "Қазақ",
ko_KR = "한글",
ru = "Русский язык",
uk = "Українська",
zh = "中文",
zh_CN = "简体中文",
zh_TW = "中文(台灣)",
["zh_TW.Big5"] = "中文台灣Big5",
},
}
function Language:getLanguageName(lang_locale)
return self.language_names[lang_locale] or lang_locale
end
function Language:changeLanguage(lang_locale)
_.changeLang(lang_locale)
@ -15,9 +58,9 @@ function Language:changeLanguage(lang_locale)
})
end
function Language:genLanguageSubItem(lang, lang_locale)
function Language:genLanguageSubItem(lang_locale)
return {
text = lang,
text = self:getLanguageName(lang_locale),
checked_func = function()
return G_reader_settings:readSetting("language") == lang_locale
end,
@ -34,41 +77,41 @@ function Language:getLangMenuTable()
text = _("Language"),
-- NOTE: language with no translation are commented out for now
sub_item_table = {
self:genLanguageSubItem("English", "C"),
self:genLanguageSubItem("Catalá", "ca"),
self:genLanguageSubItem("Čeština", "cs_CZ"),
self:genLanguageSubItem("Deutsch", "de"),
self:genLanguageSubItem("Español", "es"),
self:genLanguageSubItem("Euskara", "eu"),
self:genLanguageSubItem("Français", "fr"),
self:genLanguageSubItem("Galego", "gl"),
self:genLanguageSubItem("Italiano", "it_IT"),
self:genLanguageSubItem("Magyar", "hu"),
self:genLanguageSubItem("Nederlands", "nl_NL"),
self:genLanguageSubItem("Norsk", "nb_NO"),
self:genLanguageSubItem("Polski", "pl"),
--self:genLanguageSubItem("Polski2", "pl_PL"),
self:genLanguageSubItem("Português", "pt_PT"),
self:genLanguageSubItem("Português do Brasil", "pt_BR"),
self:genLanguageSubItem("Slovenčina", "sk"),
self:genLanguageSubItem("Svenska", "sv"),
self:genLanguageSubItem("Tiếng Việt", "vi"),
self:genLanguageSubItem("Türkçe", "tr"),
--self:genLanguageSubItem("Viet Nam", "vi_VN"),
--self:genLanguageSubItem("عربى", "ar_AA"),
self:genLanguageSubItem("български", "bg_BG"),
--self:genLanguageSubItem("বাঙালি", "bn"),
self:genLanguageSubItem("Ελληνικά", "el"),
--self:genLanguageSubItem("فارسی", "fa"),
self:genLanguageSubItem("日本語", "ja"),
--self:genLanguageSubItem("Қазақ", "kk"),
self:genLanguageSubItem("한글", "ko_KR"),
self:genLanguageSubItem("Русский язык", "ru"),
self:genLanguageSubItem("Українська", "uk"),
--self:genLanguageSubItem("中文", "zh"),
self:genLanguageSubItem("简体中文", "zh_CN"),
self:genLanguageSubItem("中文(台灣)", "zh_TW"),
--self:genLanguageSubItem("中文台灣Big5", "zh_TW.Big5"),
self:genLanguageSubItem("C"),
self:genLanguageSubItem("ca"),
self:genLanguageSubItem("cs_CZ"),
self:genLanguageSubItem("de"),
self:genLanguageSubItem("es"),
self:genLanguageSubItem("eu"),
self:genLanguageSubItem("fr"),
self:genLanguageSubItem("gl"),
self:genLanguageSubItem("it_IT"),
self:genLanguageSubItem("hu"),
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("sk"),
self:genLanguageSubItem("sv"),
self:genLanguageSubItem("vi"),
self:genLanguageSubItem("tr"),
--self:genLanguageSubItem("vi_VN"),
--self:genLanguageSubItem(""ar_AA"),
self:genLanguageSubItem("bg_BG"),
--self:genLanguageSubItem("bn"),
self:genLanguageSubItem("el"),
--self:genLanguageSubItem("fa"),
self:genLanguageSubItem("ja"),
--self:genLanguageSubItem("kk"),
self:genLanguageSubItem("ko_KR"),
self:genLanguageSubItem("ru"),
self:genLanguageSubItem("uk"),
--self:genLanguageSubItem("zh"),
self:genLanguageSubItem("zh_CN"),
self:genLanguageSubItem("zh_TW"),
--self:genLanguageSubItem("zh_TW.Big5"),
}
}
end

@ -517,21 +517,21 @@ local VirtualKeyboard = FocusManager:new{
bordersize = Size.border.default,
padding = Size.padding.small,
key_padding = Size.padding.default,
}
local lang_to_keyboard_layout = {
el = "el_keyboard",
en = "en_keyboard",
es = "es_keyboard",
fr = "fr_keyboard",
ja = "ja_keyboard",
pt_BR = "pt_keyboard",
ko_KR = "ko_KR_keyboard",
lang_to_keyboard_layout = {
el = "el_keyboard",
en = "en_keyboard",
es = "es_keyboard",
fr = "fr_keyboard",
ja = "ja_keyboard",
pt_BR = "pt_keyboard",
ko_KR = "ko_KR_keyboard",
},
}
function VirtualKeyboard:init()
local lang = G_reader_settings:readSetting("language")
local keyboard_layout = lang_to_keyboard_layout[lang] or lang_to_keyboard_layout["en"]
local lang = self:getKeyboardLayout()
local keyboard_layout = self.lang_to_keyboard_layout[lang] or self.lang_to_keyboard_layout["en"]
local keyboard = require("ui/data/keyboardlayouts/" .. keyboard_layout)
self.KEYS = keyboard.keys
self.shiftmode_keys = keyboard.shiftmode_keys
@ -551,6 +551,10 @@ function VirtualKeyboard:init()
end
end
function VirtualKeyboard:getKeyboardLayout()
return G_reader_settings:readSetting("keyboard_layout") or G_reader_settings:readSetting("language")
end
function VirtualKeyboard:onClose()
UIManager:close(self)
return true

Loading…
Cancel
Save