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..dc529d7f 100644 --- a/copyparty/authsrv.py +++ b/copyparty/authsrv.py @@ -3268,6 +3268,7 @@ class AuthSrv(object): "frand": bool(vf.get("rand")), "lifetime": vn.js_ls["lifetime"], "u2sort": self.args.u2sort, + "glang": self.args.glang } zs = "ui_noacci ui_nocpla ui_noctxb ui_nolbar ui_nombar ui_nonav ui_notree ui_norepl ui_nosrvi" for zs in zs.split(): diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 72878b20..277e5f26 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -8496,6 +8496,43 @@ var setfszf = (function () { } freshen(); + + let lmap = [ + ["eng", /^en(-.+)?$/], + ["nor", /^(no|nb)$/], + ["chi", /^zh(-.+)?$/], + ["cze", /^cs$/], + ["deu", /^de(-.+)?$/], + ["epo", /^eo$/], + ["fin", /^fi$/], + ["fra", /^fr(-.+)?$/], + ["grc", /^el$/], + ["hu", /^hu$/], + ["ita", /^it(-ch)?$/], + ["jpn", /^ja$/], + ["kor", /^ko(-.+)?$/], + ["nl", /^nl(-be)?$/], + ["nyn", /^nn$/], + ["pol", /^pl$/], + ["por", /^pt(-.+)?$/], + ["rus", /^ru(-md)?$/], + ["spa", /^es(-.+)?$/], + ["swe", /^sv(-.+)?$/], + ["tur", /^tr$/], + ["ukr", /^uk$/], + ["vie", /^vi$/] + ]; + + if (glang && navigator.languages && !/(^|; )cplng=/.test(document.cookie)) { + for (let i = 0; i < navigator.languages.length; i++) { + for (let j = 0; j < lmap.length; j++) { + console.log(lmap[j]); + if (lmap[j][1].test(navigator.languages[i])) { + return setck('cplng=' + lmap[j][0], location.reload.bind(location)); + } + } + } + } })();