Skip to content

Commit

Permalink
Add ability to change language without a restart
Browse files Browse the repository at this point in the history
  • Loading branch information
rubenwardy committed Mar 3, 2024
1 parent d4d4712 commit ab5202c
Show file tree
Hide file tree
Showing 7 changed files with 195 additions and 117 deletions.
13 changes: 13 additions & 0 deletions builtin/mainmenu/content/dlg_contentstore.lua
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,19 @@ local REASON_UPDATE = "update"
local REASON_DEPENDENCY = "dependency"


function reset_contentdb()
store.load_ok = false
store.loading = false
store.load_error = false
store.packages = {}
store.packages_full = {}
store.packages_full_unordered = {}
store.aliases = {}
search_string = ""
cur_page = 1
end


local function get_download_url(package, reason)
local base_url = core.settings:get("contentdb_url")
local ret = base_url .. ("/packages/%s/releases/%d/download/"):format(
Expand Down
11 changes: 11 additions & 0 deletions builtin/mainmenu/settings/components.lua
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,9 @@ function make.enum(setting)
self.resettable = core.settings:has(setting.name)

local labels = setting.option_labels or {}
if type(labels) == "function" then
labels = labels(self, setting, value)
end

local items = {}
for i, option in ipairs(setting.values) do
Expand All @@ -187,6 +190,14 @@ function make.enum(setting)
end

core.settings:set(setting.name, value)

if setting.name == "language" then
-- Refresh content to update translations
pkgmgr.refresh_globals()
pkgmgr.update_gamelist()
reset_contentdb()
end

return true
end,
}
Expand Down
147 changes: 77 additions & 70 deletions builtin/mainmenu/settings/dlg_settings.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

-- Capture translations without translating
local function gettext_lazy(x)
return x
end


local component_funcs = dofile(core.get_mainmenu_path() .. DIR_DELIM ..
"settings" .. DIR_DELIM .. "components.lua")
Expand Down Expand Up @@ -65,23 +70,23 @@ local change_keys = {

add_page({
id = "accessibility",
title = fgettext_ne("Accessibility"),
title = gettext_lazy("Accessibility"),
content = {
"language",
{ heading = fgettext_ne("General") },
{ heading = gettext_lazy("General") },
"font_size",
"chat_font_size",
"gui_scaling",
"hud_scaling",
"show_nametag_backgrounds",
{ heading = fgettext_ne("Chat") },
{ heading = gettext_lazy("Chat") },
"console_height",
"console_alpha",
"console_color",
{ heading = fgettext_ne("Controls") },
{ heading = gettext_lazy("Controls") },
"autojump",
"safe_dig_and_place",
{ heading = fgettext_ne("Movement") },
{ heading = gettext_lazy("Movement") },
"arm_inertia",
"view_bobbing_amount",
"fall_bobbing_amount",
Expand All @@ -96,7 +101,7 @@ local function load_settingtypes()
if not page then
page = add_page({
id = (section or "general"):lower():gsub(" ", "_"),
title = section or fgettext_ne("General"),
title = section or gettext_lazy("General"),
section = section,
content = {},
})
Expand All @@ -120,7 +125,7 @@ local function load_settingtypes()
elseif entry.level == 2 then
ensure_page_started()
page.content[#page.content + 1] = {
heading = fgettext_ne(entry.readable_name or entry.name),
heading = entry.readable_name or entry.name,
}
end
else
Expand Down Expand Up @@ -153,68 +158,70 @@ end
-- These must not be translated, as they need to show in the local
-- language no matter the user's current language.
-- This list must be kept in sync with src/unsupported_language_list.txt.
get_setting_info("language").option_labels = {
[""] = fgettext_ne("(Use system language)"),
--ar = " [ar]", blacklisted
be = "Беларуская [be]",
bg = "Български [bg]",
ca = "Català [ca]",
cs = "Česky [cs]",
cy = "Cymraeg [cy]",
da = "Dansk [da]",
de = "Deutsch [de]",
--dv = " [dv]", blacklisted
el = "Ελληνικά [el]",
en = "English [en]",
eo = "Esperanto [eo]",
es = "Español [es]",
et = "Eesti [et]",
eu = "Euskara [eu]",
fi = "Suomi [fi]",
fil = "Wikang Filipino [fil]",
fr = "Français [fr]",
gd = "Gàidhlig [gd]",
gl = "Galego [gl]",
--he = " [he]", blacklisted
--hi = " [hi]", blacklisted
hu = "Magyar [hu]",
id = "Bahasa Indonesia [id]",
it = "Italiano [it]",
ja = "日本語 [ja]",
jbo = "Lojban [jbo]",
kk = "Қазақша [kk]",
--kn = " [kn]", blacklisted
ko = "한국어 [ko]",
ky = "Kırgızca / Кыргызча [ky]",
lt = "Lietuvių [lt]",
lv = "Latviešu [lv]",
mn = "Монгол [mn]",
mr = "मराठी [mr]",
ms = "Bahasa Melayu [ms]",
--ms_Arab = " [ms_Arab]", blacklisted
nb = "Norsk Bokmål [nb]",
nl = "Nederlands [nl]",
nn = "Norsk Nynorsk [nn]",
oc = "Occitan [oc]",
pl = "Polski [pl]",
pt = "Português [pt]",
pt_BR = "Português do Brasil [pt_BR]",
ro = "Română [ro]",
ru = "Русский [ru]",
sk = "Slovenčina [sk]",
sl = "Slovenščina [sl]",
sr_Cyrl = "Српски [sr_Cyrl]",
sr_Latn = "Srpski (Latinica) [sr_Latn]",
sv = "Svenska [sv]",
sw = "Kiswahili [sw]",
--th = " [th]", blacklisted
tr = "Türkçe [tr]",
tt = "Tatarça [tt]",
uk = "Українська [uk]",
vi = "Tiếng Việt [vi]",
zh_CN = "中文 (简体) [zh_CN]",
zh_TW = "正體中文 (繁體) [zh_TW]",
}
get_setting_info("language").option_labels = function()
return {
[""] = fgettext_ne("(Use system language)"),
--ar = " [ar]", blacklisted
be = "Беларуская [be]",
bg = "Български [bg]",
ca = "Català [ca]",
cs = "Česky [cs]",
cy = "Cymraeg [cy]",
da = "Dansk [da]",
de = "Deutsch [de]",
--dv = " [dv]", blacklisted
el = "Ελληνικά [el]",
en = "English [en]",
eo = "Esperanto [eo]",
es = "Español [es]",
et = "Eesti [et]",
eu = "Euskara [eu]",
fi = "Suomi [fi]",
fil = "Wikang Filipino [fil]",
fr = "Français [fr]",
gd = "Gàidhlig [gd]",
gl = "Galego [gl]",
--he = " [he]", blacklisted
--hi = " [hi]", blacklisted
hu = "Magyar [hu]",
id = "Bahasa Indonesia [id]",
it = "Italiano [it]",
ja = "日本語 [ja]",
jbo = "Lojban [jbo]",
kk = "Қазақша [kk]",
--kn = " [kn]", blacklisted
ko = "한국어 [ko]",
ky = "Kırgızca / Кыргызча [ky]",
lt = "Lietuvių [lt]",
lv = "Latviešu [lv]",
mn = "Монгол [mn]",
mr = "मराठी [mr]",
ms = "Bahasa Melayu [ms]",
--ms_Arab = " [ms_Arab]", blacklisted
nb = "Norsk Bokmål [nb]",
nl = "Nederlands [nl]",
nn = "Norsk Nynorsk [nn]",
oc = "Occitan [oc]",
pl = "Polski [pl]",
pt = "Português [pt]",
pt_BR = "Português do Brasil [pt_BR]",
ro = "Română [ro]",
ru = "Русский [ru]",
sk = "Slovenčina [sk]",
sl = "Slovenščina [sl]",
sr_Cyrl = "Српски [sr_Cyrl]",
sr_Latn = "Srpski (Latinica) [sr_Latn]",
sv = "Svenska [sv]",
sw = "Kiswahili [sw]",
--th = " [th]", blacklisted
tr = "Türkçe [tr]",
tt = "Tatarça [tt]",
uk = "Українська [uk]",
vi = "Tiếng Việt [vi]",
zh_CN = "中文 (简体) [zh_CN]",
zh_TW = "正體中文 (繁體) [zh_TW]",
}
end


-- See if setting matches keywords
Expand Down Expand Up @@ -420,7 +427,7 @@ local function build_page_components(page)
elseif item.get_formspec then
retval[i] = item
elseif item.heading then
retval[i] = component_funcs.heading(item.heading)
retval[i] = component_funcs.heading(fgettext_ne(item.heading))
end
end
return retval
Expand Down
Loading

0 comments on commit ab5202c

Please sign in to comment.