Build and Deploy Verso / deploy (push) Successful in 14m53s
Users can now select their UI language directly without relying on subdomain routing (fr.verso.alocoq.fr etc.). Resolution order: (1) verso-lang cookie, (2) subdomain host header, (3) OVERLEAF_SITE_LANGUAGE default — fully backward compatible. Changes: - Translations.mjs: read verso-lang cookie in middleware; include all bundled locale files in availableLanguageCodes regardless of subdomain config so every loaded locale appears in the picker - User.mjs: add languageCode field to persist preference per user - UserController.mjs: setLanguage handler — sets cookie (1 year) and writes languageCode to DB when called by a logged-in user - AuthenticationController.mjs: on login, sync DB languageCode to cookie so preference follows the user to any new browser/device after login - ExpressLocals.mjs: expose availableLanguages to all Pug templates - router.mjs: GET /set-language?lng=<code> (anonymous + logged-in), POST /user/language (logged-in, REST-style) - language-picker.pug: replace subdomain href links with /set-language redirect links; iterate availableLanguages instead of subdomainLang - thin-footer.pug: show picker whenever availableLanguages.length > 1, not only when multiple subdomains are configured Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
50 lines
1.4 KiB
Plaintext
50 lines
1.4 KiB
Plaintext
footer.site-footer
|
|
- var showLanguagePicker = availableLanguages.length > 1
|
|
- var hasCustomLeftNav = nav.left_footer && nav.left_footer.length > 0
|
|
.site-footer-content.hidden-print
|
|
.row
|
|
ul.site-footer-items.col-lg-9
|
|
li
|
|
| © #{new Date().getFullYear()}
|
|
|
|
|
a(href='https://alocoq.fr' target='_blank' rel='noopener noreferrer') Aloïs Coquillard
|
|
li
|
|
strong.text-muted |
|
|
li
|
|
| Built on
|
|
|
|
|
a(href='https://github.com/overleaf/overleaf' target='_blank' rel='noopener noreferrer') Overleaf
|
|
|
|
if showLanguagePicker || hasCustomLeftNav
|
|
li
|
|
strong.text-muted |
|
|
|
|
if showLanguagePicker
|
|
include language-picker
|
|
|
|
if showLanguagePicker && hasCustomLeftNav
|
|
li
|
|
strong.text-muted |
|
|
|
|
each item in nav.left_footer
|
|
li
|
|
if item.url
|
|
a(href=item.url class=item.class) !{translate(item.text)}
|
|
else
|
|
| !{item.text}
|
|
|
|
ul.site-footer-items.col-lg-3.text-end
|
|
li
|
|
a(href='https://git.alocoq.fr/alois/verso/src/branch/main/LICENSE' target='_blank' rel='noopener noreferrer') AGPL licence
|
|
li
|
|
strong.text-muted |
|
|
li
|
|
a(href='https://git.alocoq.fr/alois/verso' target='_blank' rel='noopener noreferrer') Source code
|
|
|
|
each item in nav.right_footer
|
|
li
|
|
if item.url
|
|
a(href=item.url class=item.class aria-label=item.label) !{item.text}
|
|
else
|
|
| !{item.text}
|