Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to change language without a restart #14379

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
4 changes: 3 additions & 1 deletion builtin/mainmenu/tab_about.lua
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,9 @@ end

return {
name = "about",
caption = fgettext("About"),
caption = function()
return fgettext("About")
end,

cbf_formspec = function(tabview, name, tabdata)
local logofile = defaulttexturedir .. "logo.png"
Expand Down
4 changes: 3 additions & 1 deletion builtin/mainmenu/tab_local.lua
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,9 @@ end
--------------------------------------------------------------------------------
return {
name = "local",
caption = fgettext("Start Game"),
caption = function()
return fgettext("Start Game")
end ,
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_change
Expand Down
4 changes: 3 additions & 1 deletion builtin/mainmenu/tab_online.lua
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,9 @@ end

return {
name = "online",
caption = fgettext("Join Game"),
caption = function()
return fgettext("Join Game")
end,
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_change
Expand Down
Loading
Loading