From 17e437dbd09ab2e3c898ba3481cf1e4d52144dfa Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Fri, 6 Sep 2019 17:01:37 +0200 Subject: [PATCH] [UX] Allow keyboard layout selection (#5318) Fixes . This isn't quite what I want but I've been letting this slip for too long due to fancier keyboard interaction concepts. --- .../elements/common_settings_menu_table.lua | 4 + frontend/ui/elements/menu_keyboard_layout.lua | 19 +++ frontend/ui/elements/reader_menu_order.lua | 1 + frontend/ui/language.lua | 119 ++++++++++++------ frontend/ui/widget/virtualkeyboard.lua | 26 ++-- 5 files changed, 120 insertions(+), 49 deletions(-) create mode 100644 frontend/ui/elements/menu_keyboard_layout.lua diff --git a/frontend/ui/elements/common_settings_menu_table.lua b/frontend/ui/elements/common_settings_menu_table.lua index 51097460f..9f4c2b031 100644 --- a/frontend/ui/elements/common_settings_menu_table.lua +++ b/frontend/ui/elements/common_settings_menu_table.lua @@ -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"), } diff --git a/frontend/ui/elements/menu_keyboard_layout.lua b/frontend/ui/elements/menu_keyboard_layout.lua new file mode 100644 index 000000000..352572fb6 --- /dev/null +++ b/frontend/ui/elements/menu_keyboard_layout.lua @@ -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 diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index 31e56a884..ea0876e88 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -57,6 +57,7 @@ local order = { "status_bar", }, device = { + "keyboard_layout", "time", "battery", "autosuspend", diff --git a/frontend/ui/language.lua b/frontend/ui/language.lua index c423fa4cb..da8570908 100644 --- a/frontend/ui/language.lua +++ b/frontend/ui/language.lua @@ -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 diff --git a/frontend/ui/widget/virtualkeyboard.lua b/frontend/ui/widget/virtualkeyboard.lua index 052853574..b51963efe 100644 --- a/frontend/ui/widget/virtualkeyboard.lua +++ b/frontend/ui/widget/virtualkeyboard.lua @@ -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