Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
f4789f7
feat(i18n): add Spanish and Brazilian Portuguese locales
Jun 5, 2026
24d5214
fix(i18n): drop top banner, use tiny floating toast; fix useRoute() e…
Jun 5, 2026
1aa3f9e
fix(i18n): add translated home pages for es and pt-BR
Jun 5, 2026
9c50b4f
fix(i18n): use relative sidebar items under locale base
Jun 5, 2026
cb5f00d
fix(i18n): use absolute /lime.svg path in translated home pages
Jun 5, 2026
3d7c198
fix(i18n): smart redirect, link-out nav, drop reference sidebar from …
Jun 5, 2026
d815f0a
fix(i18n): per-locale description, navigator.languages, localized dis…
Jun 5, 2026
3e7e0d6
fix(i18n): replace built-in lang switcher with custom one that respec…
Jun 6, 2026
8031d8a
fix(i18n): add LanguageSwitcher.vue and i18n.ts that were referenced …
Jun 6, 2026
3dd07f8
fix(i18n): restore toast copy, preserve base path, remove all built-i…
Jun 6, 2026
b78327f
fix(i18n): localize the Guía/Guia nav link; mark English fallbacks ex…
Jun 6, 2026
67e34ae
fix(i18n): hide all built-in switcher variants in SSR CSS
Jun 6, 2026
172e295
fix(i18n): only show the first-visit toast when the current page has …
Jun 6, 2026
46d354d
fix(i18n): use site (not siteData) from useData() in VitePress 2.0 alpha
Jun 6, 2026
4b59c8b
fix(i18n): strip VitePress base from route.path before locale routing
Jun 6, 2026
b8c0be9
fix(i18n): add .html to translated page targets; map home to locale home
Jun 6, 2026
50c75d0
fix(i18n): restyle custom language switcher to match VitePress built-in
Jun 6, 2026
151e085
fix(i18n): drop duplicate locale title, reposition switcher, add mobi…
Jun 6, 2026
8e2868f
fix(i18n): correct lang-switcher divider spacing to match VitePress b…
Jun 6, 2026
2f031d9
fix(i18n): critical bugs in locale detection, memory leak, and selector
luandro Jun 6, 2026
97e7983
fix: add translation notices to stub pages
luandro Jun 6, 2026
85d8555
feat(i18n): add hreflang tags, localized aria-labels, and resource pa…
luandro Jun 7, 2026
aca2fcb
feat(es): add frontmatter titles to all Spanish locale pages
luandro Jun 7, 2026
5218338
feat(pt-BR): add frontmatter titles to all Portuguese locale pages
luandro Jun 7, 2026
32d925a
fix: replace pushState monkey-patch with MutationObserver for built-i…
luandro Jun 7, 2026
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
242 changes: 215 additions & 27 deletions docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,52 @@ const communities = await getFiles('docs/profiles/communities/*/index.md');
export default defineConfig({
title: "LibreMesh",
description: "A modular framework for creating OpenWrt-based firmwares for wireless mesh nodes",
head: [['link', { rel: 'icon', href: baseUrl+'/favicon.ico' }]],
head: [
['link', { rel: 'icon', href: baseUrl+'/favicon.ico' }],
['link', { rel: 'alternate', hreflang: 'en', href: 'https://libremesh.github.io/' }],
['link', { rel: 'alternate', hreflang: 'es', href: 'https://libremesh.github.io/es/' }],
['link', { rel: 'alternate', hreflang: 'pt-BR', href: 'https://libremesh.github.io/pt-BR/' }],
],
lastUpdated: true,
base: baseUrl,
metaChunk: true,

locales: {
root: {
label: 'English',
lang: 'en'
lang: 'en',
description: 'A modular framework for creating OpenWrt-based firmwares for wireless mesh nodes',
themeConfig: {
nav: navEn(),
sidebar: {
'/': { base: '/', items: sidebarGuideEn() },
'/reference/': { base: '/reference/', items: sidebarReferenceEn() }
},
},
},
es: {
label: 'Español',
lang: 'es',
link: '/es/',
description: 'Un framework modular para crear firmwares basados en OpenWrt para nodos de mesh inalámbricos',
themeConfig: {
nav: navEs(),
sidebar: {
'/es/': { base: '/es/', items: sidebarGuideEs() },
},
},
},
'pt-BR': {
label: 'Português (BR)',
lang: 'pt-BR',
link: '/pt-BR/',
description: 'Um framework modular para criar firmwares baseados em OpenWrt para nós mesh sem fio',
themeConfig: {
nav: navPtBr(),
sidebar: {
'/pt-BR/': { base: '/pt-BR/', items: sidebarGuidePtBr() },
},
},
},
},

Expand All @@ -45,13 +82,6 @@ export default defineConfig({
},
outline: 'deep',

nav: nav(),

sidebar: {
'/': { base: '/', items: sidebarGuide() },
'/reference/': { base: '/reference/', items: sidebarReference() }
},

socialLinks: [
{ icon: 'github', link: 'https://github.com/libremesh/lime-packages' },
// { icon: 'maildotru', link: 'https://www.autistici.org/mailman/listinfo/libremesh' },
Expand All @@ -60,29 +90,57 @@ export default defineConfig({
{ icon: 'peertube', link: 'https://media.exo.cat/a/libremesh' }
],
},
// async buildEnd() {
// // const meetings = await createContentLoader('meetings/*.md').load()
// // generate files based on posts metadata, e.g. RSS feed
// }
})

function nav(): DefaultTheme.NavItem[] {
function navEn(): DefaultTheme.NavItem[] {
return [
{ text: 'Guide', link: '/guide/packages-selection' },
{ text: 'Reference', link: '/reference/configuration' },
{ text: 'Reference', link: '/reference/configuration' },
{ text: 'News',
items: [
{ text: 'v2024.1', link: '/news/2025-05-04' },
{ text: 'v2020.4', link: '/news/2023-10-07' },
{ text: 'Latest Articles', link: '/news/' },
{ text: 'Changelog', link: 'changelog'},
{ text: 'Changelog', link: '/changelog'},
{ text: 'Issues', link: 'https://github.com/libremesh/lime-packages/issues'},
]
},
]
}

function sidebarGuide(): DefaultTheme.SidebarItem[] {
function navEs(): DefaultTheme.NavItem[] {
return [
{ text: 'Guía', link: '/es/guide/connecting' },
{ text: 'Referencia (en)', link: '/reference/configuration' },
{ text: 'Noticias (en)',
items: [
{ text: 'v2024.1 (en)', link: '/news/2025-05-04' },
{ text: 'v2020.4 (en)', link: '/news/2023-10-07' },
{ text: 'Artículos recientes (en)', link: '/news/' },
{ text: 'Changelog (en)', link: '/changelog'},
{ text: 'Issues', link: 'https://github.com/libremesh/lime-packages/issues'},
]
},
]
}

function navPtBr(): DefaultTheme.NavItem[] {
return [
{ text: 'Guia', link: '/pt-BR/guide/connecting' },
{ text: 'Referência (em)', link: '/reference/configuration' },
{ text: 'Notícias (em)',
items: [
{ text: 'v2024.1 (em)', link: '/news/2025-05-04' },
{ text: 'v2020.4 (em)', link: '/news/2023-10-07' },
{ text: 'Artigos recentes (em)', link: '/news/' },
{ text: 'Changelog (em)', link: '/changelog'},
{ text: 'Issues', link: 'https://github.com/libremesh/lime-packages/issues'},
]
},
]
}

function sidebarGuideEn(): DefaultTheme.SidebarItem[] {
return [
{
text: 'Introduction',
Expand All @@ -98,13 +156,13 @@ function sidebarGuide(): DefaultTheme.SidebarItem[] {
collapsed: false,
items: [
{ text: 'Connecting to the router', link: '/guide/connecting' },
{ text: 'Packages selection',
link: '/guide/packages-selection',
{ text: 'Packages selection',
link: '/guide/packages-selection',
collapsed: true,
items: [
{ text: 'Network Profiles', link: '/guide/network-profiles' }
] },
{ text: 'Build LibreMesh',
{ text: 'Build LibreMesh',
link: '/build/',
collapsed: true,
items: [
Expand All @@ -122,8 +180,8 @@ function sidebarGuide(): DefaultTheme.SidebarItem[] {
items: [
{ text: 'Testing Guide', link: '/development/testing' },
{ text: 'Run LibreMesh on QEMU', link: '/development/virtualizing' },
{ text: 'Hacking',
link: '/development/hacking',
{ text: 'Hacking',
link: '/development/hacking',
collapsed: true,
items: [
{ text: 'Kernel Vermagic', link: '/development/hacking/kernel_vermagic' }
Expand All @@ -147,7 +205,7 @@ function sidebarGuide(): DefaultTheme.SidebarItem[] {
items: [
{ text: 'Media list', link: '/resources/media_list' },
{ text: 'Related projects', link: '/resources/related_projects' },
{ text: 'Tools',
{ text: 'Tools',
link: '/resources/tools/monitoring',
collapsed: true,
items: [
Expand All @@ -170,22 +228,152 @@ function sidebarGuide(): DefaultTheme.SidebarItem[] {
{ text: 'Communities', items: generateSidebarItems(communities) },
{ text: 'Packages', items: generateSidebarItems(profiles), },
]
},
]
}

function sidebarGuideEs(): DefaultTheme.SidebarItem[] {
return [
{
text: 'Introducción',
collapsed: false,
items: [
{ text: '¿Qué es LibreMesh?', link: 'what-is-libremesh' },
{ text: 'Primeros pasos', link: 'getting-started' },
{ text: 'Características', link: 'features' },
]
},
{
text: 'Guía de uso',
collapsed: false,
items: [
{ text: 'Conectarse al router', link: 'guide/connecting' },
{ text: 'Selección de paquetes',
link: 'guide/packages-selection',
collapsed: true,
items: [
{ text: 'Perfiles de red', link: 'guide/network-profiles' }
] },
{ text: 'Compilar LibreMesh',
link: 'build/',
collapsed: true,
items: [
{ text: 'ImageBuilder', link: 'build/imagebuilder' },
{ text: 'Buildroot', link: 'build/buildroot'}
]},
{ text: 'Actualización', link: 'guide/upgrade' },
]
},
{ text: 'Configuración y Referencia', link: 'reference/configuration'},
{
text: 'Guía de desarrollo',
collapsed: false,
items: [
{ text: 'Guía de testing', link: 'development/testing' },
{ text: 'Ejecutar LibreMesh en QEMU', link: 'development/virtualizing' },
{ text: 'Hacking',
link: 'development/hacking',
collapsed: true,
items: [
{ text: 'Vermagic del kernel', link: 'development/hacking/kernel_vermagic' }
] },
{ text: 'Contribuir a lime-packages', link: 'development/contributing' },
]
},
{
text: 'Recursos',
collapsed: false,
link: 'resources',
items: [
{ text: 'Lista de medios', link: 'resources/media_list' },
{ text: 'Proyectos relacionados', link: 'resources/related_projects' },
{ text: 'Herramientas',
link: 'resources/tools/monitoring',
collapsed: true,
items: [
{ text: 'Monitoring', link: 'resources/tools/monitoring' },
]},
]
},
]
}


function sidebarGuidePtBr(): DefaultTheme.SidebarItem[] {
return [
{
text: 'Introdução',
collapsed: false,
items: [
{ text: 'O que é o LibreMesh?', link: 'what-is-libremesh' },
{ text: 'Primeiros passos', link: 'getting-started' },
{ text: 'Recursos', link: 'features' },
]
},
{
text: 'Guia de uso',
collapsed: false,
items: [
{ text: 'Conectando ao roteador', link: 'guide/connecting' },
{ text: 'Seleção de pacotes',
link: 'guide/packages-selection',
collapsed: true,
items: [
{ text: 'Perfis de rede', link: 'guide/network-profiles' }
] },
{ text: 'Compilar o LibreMesh',
link: 'build/',
collapsed: true,
items: [
{ text: 'ImageBuilder', link: 'build/imagebuilder' },
{ text: 'Buildroot', link: 'build/buildroot'}
]},
{ text: 'Atualização', link: 'guide/upgrade' },
]
},
{ text: 'Configuração e Referência', link: 'reference/configuration'},
{
text: 'Guia de desenvolvimento',
collapsed: false,
items: [
{ text: 'Guia de testes', link: 'development/testing' },
{ text: 'Executar LibreMesh no QEMU', link: 'development/virtualizing' },
{ text: 'Hacking',
link: 'development/hacking',
collapsed: true,
items: [
{ text: 'Vermagic do kernel', link: 'development/hacking/kernel_vermagic' }
] },
{ text: 'Contribuir com lime-packages', link: 'development/contributing' },
]
},
{
text: 'Recursos',
collapsed: false,
link: 'resources',
items: [
{ text: 'Lista de mídia', link: 'resources/media_list' },
{ text: 'Projetos relacionados', link: 'resources/related_projects' },
{ text: 'Ferramentas',
link: 'resources/tools/monitoring',
collapsed: true,
items: [
{ text: 'Monitoramento', link: 'resources/tools/monitoring' },
]},
]
},
]
}


function sidebarReference(): DefaultTheme.SidebarItem[] {
function sidebarReferenceEn(): DefaultTheme.SidebarItem[] {
return [
{
text: 'Reference',
items: [
{ text: 'Configuration', link: 'configuration' },
{ text: 'lime-config', link: 'lime-config' },
{ text: 'Flavors', link: 'flavors' },
{ text: 'Default protocols',
{ text: 'Default protocols',
collapsed: true,
items: [
{ text: 'Batman-adv', link: 'network/protocols/batman-adv'},
Expand All @@ -207,7 +395,7 @@ function sidebarReference(): DefaultTheme.SidebarItem[] {
{ text: 'Interface specific', link: 'wifi/interface-specific'},
] },
{ text: 'Generic UCI configs', link: 'generic_config' },
{ text: 'Hardware detection',
{ text: 'Hardware detection',
items: [
{ text: 'Ground Routing', link: 'hardware_detection/ground_routing' },
{ text: 'Watchcat', link: 'hardware_detection/watchcat' }
Expand Down
Loading