diff --git a/copyparty/__main__.py b/copyparty/__main__.py index e0a46e79..43fc9916 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -1870,6 +1870,7 @@ def add_ui(ap, retry: int): ap2.add_argument("--ui-filesz", metavar="FMT", type=u, default="1", help="default filesize format; one of these: 0, 1, 2, 2c, 3, 3c, 4, 4c, 5, 5c, fuzzy (see UI)") ap2.add_argument("--rcm", metavar="TXT", default="yy", help="rightclick-menu; two yes/no options: 1st y/n is enable-custom-menu, 2nd y/n is enable-double") ap2.add_argument("--lang", metavar="LANG", type=u, default="eng", help="language, for example \033[32meng\033[0m / \033[32mnor\033[0m / ...") + ap2.add_argument("--glang", action="store_true", help="guess the browser's default language, otherwise fall back to \033[33m--lang\033[0m") ap2.add_argument("--theme", metavar="NUM", type=int, default=0, help="default theme to use (0..%d)" % (THEMES - 1,)) ap2.add_argument("--themes", metavar="NUM", type=int, default=THEMES, help="number of themes installed") ap2.add_argument("--au-vol", metavar="0-100", type=int, default=50, choices=range(0, 101), help="default audio/video volume percent") diff --git a/copyparty/authsrv.py b/copyparty/authsrv.py index 61cf1da9..af25c7e9 100644 --- a/copyparty/authsrv.py +++ b/copyparty/authsrv.py @@ -3273,7 +3273,7 @@ class AuthSrv(object): for zs in zs.split(): if vf.get(zs): js_htm[zs] = 1 - zs = "notooltips" + zs = "glang notooltips" for zs in zs.split(): if getattr(self.args, zs, False): js_htm[zs] = 1 diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 3f8255b9..85d03ab5 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -713,6 +713,54 @@ var L = Ls[lang] || Ls.eng, LANGS = []; for (var a = 0; a < LANGN.length; a++) LANGS.push(LANGN[a][0]); +if (window.glang && navigator.languages && !/\bcplng=/.test(document.cookie)) + (function() { + var lmap = [ + ["eng", /^en/i], + ["nor", /^n[ob]/i], + ["chi", /^zh-cn/i], + ["cze", /^cs/i], + ["deu", /^de/i], + ["epo", /^eo/i], + ["fin", /^fi/i], + ["fra", /^fr/i], + ["grc", /^el/i], + ["hun", /^hu/i], + ["ita", /^it/i], + ["jpn", /^ja/i], + ["kor", /^ko/i], + ["nld", /^nl/i], + ["nno", /^nn/i], + ["pol", /^pl/i], + ["por", /^pt/i], + ["rus", /^ru/i], + ["spa", /^es/i], + ["swe", /^sv/i], + ["tur", /^tr/i], + ["ukr", /^uk/i], + ["vie", /^vi/i], + ]; + for (var a = 0; a < navigator.languages.length; a++) { + for (var b = 0; b < lmap.length; b++) { + var n = lmap[b][0]; + if (!lmap[b][1].test(navigator.languages[a]) || !has(LANGS, n)) + continue; + + if (Ls[n]) { + lang = n; + L = Ls[n]; + return; + } + if (window.stop) + window.stop(); + document.body.innerHTML = 'Loading ' + n; + setck("cplng=" + n, location.reload.bind(location)); + crashed = true; + throw 1; + } + } + })(); + function langtest() { var n = LANGS.length - 1;