Posterverse: the home link's fallback label in the reader's language

With home-href but no home-label, VerticalTabsLayout falls back to labels.home,
which Posterverse did not pass, so every locale read the English default. The
shell now passes labels.home from its own strings in all 11 locales, the same
words the Research Gallery uses. A host's own home-label still wins.
This commit is contained in:
Doxa Maps 2026-09-30 23:25:58 +00:00
parent 32a9b41bc0
commit 42a444edb8
3 changed files with 13 additions and 2 deletions

View file

@ -162,7 +162,7 @@ export default defineComponent({
uiDir() { return this.uiLocale === 'ar' ? 'rtl' : 'ltr' },
layoutLabels() {
const out = {}
for (const k of ['toggleList', 'openViews', 'expandList', 'collapseList', 'collapse']) out[k] = this.tr(k)
for (const k of ['toggleList', 'openViews', 'expandList', 'collapseList', 'collapse', 'home']) out[k] = this.tr(k)
return out
},
effectiveProvider() {

View file

@ -86,7 +86,7 @@ export function checkShelf({ SECTIONS, TABS, NEVER, resolveTabs, manifest, meta,
// E. strings
const en = STRINGS.en || {}
const used = ['lab', 'experimentalSub', 'loading', 'loadFailed', 'manifestHint', 'backToTop',
'toggleList', 'openViews', 'expandList', 'collapseList', 'collapse',
'toggleList', 'openViews', 'expandList', 'collapseList', 'collapse', 'home',
...SECTIONS.map((s) => s.i18n), ...TABS.map((t) => 'tab.' + t.id),
...TABS.filter((t) => t.section !== 'experimental').map((t) => 'sub.' + t.id)]
for (const k of used) if (!(k in en)) errs.push(`E: the shell reads "${k}", which English does not define`)

View file

@ -24,6 +24,7 @@ export const STRINGS = {
loading: 'Loading {label}…', loadFailed: 'Could not load {label}.',
manifestHint: 'This tab is composed from manifest.json — build the tree, or serve the built tree, to load it.',
backToTop: 'Back to top',
home: 'Back to homepage',
toggleList: 'Toggle list', openViews: 'Open the list of views', expandList: 'Expand list', collapseList: 'Collapse list', collapse: 'Collapse',
},
es: {
@ -37,6 +38,7 @@ export const STRINGS = {
loading: 'Cargando {label}…', loadFailed: 'No se pudo cargar {label}.',
manifestHint: 'Esta pestaña se compone a partir de manifest.json: compila el árbol o sirve el árbol compilado para cargarla.',
backToTop: 'Volver arriba',
home: 'Volver a la página de inicio',
toggleList: 'Mostrar u ocultar la lista', openViews: 'Abrir la lista de vistas', expandList: 'Expandir la lista', collapseList: 'Contraer la lista', collapse: 'Contraer',
},
fr: {
@ -50,6 +52,7 @@ export const STRINGS = {
loading: 'Chargement de {label}…', loadFailed: 'Impossible de charger {label}.',
manifestHint: "Cet onglet est composé à partir de manifest.json : construisez l'arborescence ou servez l'arborescence construite pour le charger.",
backToTop: 'Retour en haut',
home: 'Retour à l’accueil',
toggleList: 'Afficher ou masquer la liste', openViews: 'Ouvrir la liste des vues', expandList: 'Déplier la liste', collapseList: 'Replier la liste', collapse: 'Replier',
},
de: {
@ -63,6 +66,7 @@ export const STRINGS = {
loading: '{label} wird geladen…', loadFailed: '{label} konnte nicht geladen werden.',
manifestHint: 'Dieser Tab wird aus manifest.json zusammengesetzt – bauen Sie den Baum oder stellen Sie den gebauten Baum bereit, um ihn zu laden.',
backToTop: 'Nach oben',
home: 'Zurück zur Startseite',
toggleList: 'Liste ein-/ausblenden', openViews: 'Ansichtsliste öffnen', expandList: 'Liste ausklappen', collapseList: 'Liste einklappen', collapse: 'Einklappen',
},
pt: {
@ -76,6 +80,7 @@ export const STRINGS = {
loading: 'Carregando {label}…', loadFailed: 'Não foi possível carregar {label}.',
manifestHint: 'Esta aba é composta a partir do manifest.json — compile a árvore ou sirva a árvore compilada para carregá-la.',
backToTop: 'Voltar ao topo',
home: 'Voltar à página inicial',
toggleList: 'Mostrar ou ocultar a lista', openViews: 'Abrir a lista de visualizações', expandList: 'Expandir a lista', collapseList: 'Recolher a lista', collapse: 'Recolher',
},
it: {
@ -89,6 +94,7 @@ export const STRINGS = {
loading: 'Caricamento di {label}…', loadFailed: 'Impossibile caricare {label}.',
manifestHint: "Questa scheda è composta da manifest.json: compila l'albero o pubblica l'albero compilato per caricarla.",
backToTop: 'Torna su',
home: 'Torna alla home page',
toggleList: 'Mostra o nascondi l’elenco', openViews: 'Apri l’elenco delle viste', expandList: 'Espandi l’elenco', collapseList: 'Comprimi l’elenco', collapse: 'Comprimi',
},
ro: {
@ -102,6 +108,7 @@ export const STRINGS = {
loading: 'Se încarcă {label}…', loadFailed: '{label} nu a putut fi încărcat.',
manifestHint: 'Această filă este compusă din manifest.json — construiți arborele sau serviți arborele construit pentru a o încărca.',
backToTop: 'Sus',
home: 'Înapoi la pagina principală',
toggleList: 'Afișează sau ascunde lista', openViews: 'Deschide lista de vizualizări', expandList: 'Extinde lista', collapseList: 'Restrânge lista', collapse: 'Restrânge',
},
ru: {
@ -115,6 +122,7 @@ export const STRINGS = {
loading: 'Загрузка: {label}…', loadFailed: 'Не удалось загрузить: {label}.',
manifestHint: 'Эта вкладка собирается из manifest.json — соберите дерево или разместите собранное дерево, чтобы загрузить её.',
backToTop: 'Наверх',
home: 'На главную страницу',
toggleList: 'Показать или скрыть список', openViews: 'Открыть список представлений', expandList: 'Развернуть список', collapseList: 'Свернуть список', collapse: 'Свернуть',
},
ar: {
@ -128,6 +136,7 @@ export const STRINGS = {
loading: 'جارٍ تحميل {label}…', loadFailed: 'تعذّر تحميل {label}.',
manifestHint: 'تُبنى علامة التبويب هذه من manifest.json — ابنِ الشجرة أو قدّم الشجرة المبنية لتحميلها.',
backToTop: 'إلى الأعلى',
home: 'العودة إلى الصفحة الرئيسية',
toggleList: 'إظهار القائمة أو إخفاؤها', openViews: 'فتح قائمة العروض', expandList: 'توسيع القائمة', collapseList: 'طي القائمة', collapse: 'طي',
},
hi: {
@ -141,6 +150,7 @@ export const STRINGS = {
loading: '{label} लोड हो रहा है…', loadFailed: '{label} लोड नहीं हो सका।',
manifestHint: 'यह टैब manifest.json से बनता है — इसे लोड करने के लिए ट्री बनाएँ या बना हुआ ट्री सर्व करें।',
backToTop: 'ऊपर जाएँ',
home: 'होमपेज पर वापस जाएँ',
toggleList: 'सूची दिखाएँ या छिपाएँ', openViews: 'दृश्यों की सूची खोलें', expandList: 'सूची फैलाएँ', collapseList: 'सूची संक्षिप्त करें', collapse: 'संक्षिप्त करें',
},
zh: {
@ -154,6 +164,7 @@ export const STRINGS = {
loading: '正在加载{label}…', loadFailed: '无法加载{label}。',
manifestHint: '此标签页由 manifest.json 组成——请构建目录树或提供已构建的目录树以加载它。',
backToTop: '回到顶部',
home: '返回首页',
toggleList: '显示或隐藏列表', openViews: '打开视图列表', expandList: '展开列表', collapseList: '折叠列表', collapse: '折叠',
},
}