build: new generic lines fall back in the plan's language; Tomter Vel's front door deployed

List notes, empty lists and the invite form's guidance are lines no
model is asked about before a page ships; on a Norwegian site they
showed in English until reworded. They now fall back in Norwegian for
no/nb/nn plans, like the mail fallbacks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Bendik Aagaard Lynghaug
2026-09-28 20:50:24 +02:00
co-authored by Claude Opus 5.5
parent 5e736668e4
commit cda3b0685a
17 changed files with 314 additions and 188 deletions
@@ -19,3 +19,14 @@ what goes to the board.
Lints green with the iris mail checks (uhhm/iris PR 1); the two
warnings are real (a neighbour whose request was not solved is not
told; a member removed from the list is not told).
## Deployed 2026-09-28
Pushed to tomtervel/questions (58188f5) and live on
vel.klingenbergbygg.no. Only the opener and the new "Siste fra bygda"
card come from this round (`words-frontdoor.json`); the question and
the door headings are the tuned ones from
`runs/tomtervel-opener-2026-09-23`, so `needs.yaml` and
`aggregates.yaml` are unchanged and routing is as last scored. The
desks' and lists' new lines (what a row is, an empty list) fall back
in Norwegian now, not English.
@@ -3,7 +3,7 @@ needs:
who: en husstand i Tomter
wants: å bli medlem og få betalt kontingenten
enters: /
via: Bli medlem eller endre medlemskapet
via: Bli medlem eller endre opplysningene dine
lands_in: husstander
handled_by: kasserer
stages:
@@ -25,7 +25,7 @@ needs:
who: et medlem som har flyttet, byttet e-post eller vil melde seg ut
wants: at velet har riktige opplysninger om dem
enters: /
via: Bli medlem eller endre medlemskapet
via: Bli medlem eller endre opplysningene dine
lands_in: medlemsendringer
handled_by: kasserer
stages:
@@ -44,7 +44,7 @@ needs:
who: en som har sett et farlig sted i trafikken
wants: at velet tar det opp med kommunen eller den som eier veien
enters: /
via: Si fra om noe farlig eller ødelagt
via: Meld fra om noe som bør fikses
lands_in: trafikkmeldinger
handled_by: trafikk
stages:
@@ -68,7 +68,7 @@ needs:
who: en som ser at noe på lekeplassen eller stien er ødelagt
wants: at det blir fikset før noen skader seg
enters: /
via: Si fra om noe farlig eller ødelagt
via: Meld fra om noe som bør fikses
lands_in: anleggsfeil
handled_by: lekeplasser
stages:
@@ -89,7 +89,7 @@ needs:
who: en beboer som har en mening om en sak kommunen har på høring
wants: at velet tar det med i sitt svar
enters: /
via: Si din mening i en høringssak
via: Få din mening med i høringssvaret
lands_in: innspill
handled_by: horingsinstans
stages:
@@ -111,7 +111,7 @@ needs:
who: en som vil hjelpe til på et arrangement eller en dugnad
wants: å bli satt opp på noe som passer dem
enters: /
via: Stille opp på 17. mai, dugnad eller i komité
via: Bli med og gjør en innsats
lands_in: frivillige
handled_by: arrangementer
stages:
@@ -135,7 +135,7 @@ needs:
who: en som vil sitte i en komité
wants: en plass i den komiteen som driver med det de bryr seg om
enters: /
via: Stille opp på 17. mai, dugnad eller i komité
via: Bli med og gjør en innsats
lands_in: komitesoknader
handled_by: styret
stages:
@@ -157,7 +157,7 @@ needs:
who: en beboer som ikke får til noe selv for tiden, som snømåking, handling eller en skyss
wants: at en nabo stiller opp
enters: /
via: Hjelp fra naboen, eller hjelp naboen
via: Få hjelp av naboer, eller gi en hånd selv
lands_in: hjelpebehov
handled_by: nabohjelp
stages:
@@ -181,7 +181,7 @@ needs:
who: en nabo som kan stille opp når noen trenger det
wants: å bli spurt når det passer
enters: /
via: Hjelp fra naboen, eller hjelp naboen
via: Få hjelp av naboer, eller gi en hånd selv
lands_in: hjelpere
handled_by: nabohjelp
stages:
@@ -203,7 +203,7 @@ needs:
who: en nabo som har noe å låne ut, eller trenger å låne noe
wants: et oppslag som naboene ser
enters: /
via: Hjelp fra naboen, eller hjelp naboen
via: Få hjelp av naboer, eller gi en hånd selv
lands_in: oppslag
handled_by: styret
stages:
@@ -11,7 +11,7 @@ alternatives:
- Lagre
features:
- name: Frivillige
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -39,7 +39,7 @@ alternatives:
group: arrangementer
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -52,8 +52,8 @@ alternatives:
consequence:
- Lagre
features:
- name: Who has been invited
description: Each row is one invitation, with the one-time link while it is unused.
- name: Hvem som er invitert
description: Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt.
resource:
source:
kind: kv
@@ -11,7 +11,7 @@ alternatives:
- Send svar
features:
- name: Innspill
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -33,7 +33,7 @@ alternatives:
group: horingsinstans
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -46,8 +46,8 @@ alternatives:
consequence:
- Send svar
features:
- name: Who has been invited
description: Each row is one invitation, with the one-time link while it is unused.
- name: Hvem som er invitert
description: Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt.
resource:
source:
kind: kv
@@ -1,5 +1,5 @@
name: Hva trenger du hjelp med i Tomter?
description: Tomter Vel er for alle som bor her. Velg det som passer deg, så finner du veien videre.
name: Hva gjør Tomter Vel, og hva kan du få her?
description: Velforeningen for Tomter, stiftet i 1947, drevet på fritida av naboene dine. Alt du kan be om her havner hos en komité eller styret, og du ser selv hvor saken står.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
@@ -49,56 +49,56 @@ alternatives:
states: []
empty: Ingen farlige steder er meldt inn nå. Har du sett et, fortell oss.
jq: 'sort_by(.submitted_ms) | reverse | .[:3] | .[] | .responses |= {hva: .hva, hvor: .hvor}'
- name: Bli medlem eller endre medlemskapet
description: Meld deg inn, betal kontingent, eller si fra om flytting, ny e-post eller utmelding.
- name: Bli medlem eller endre opplysningene dine
description: Meld deg inn, betal kontingenten, eller gi beskjed om flytting, ny e-post eller utmelding.
action: /medlem
consequence:
- Til medlemskap
features:
- name: For deg som bor i Tomter
description: Du kan bli medlem og betale kontingent, eller melde flytting, ny e-post eller utmelding.
icon: lucide:user-plus
- name: Si fra om noe farlig eller ødelagt
description: Har du sett et farlig sted i trafikken eller noe i stykker på lekeplassen eller stien? Da vet velet det.
- name: Deg som bor i Tomter
description: Å bli medlem og få betalt kontingenten, at velet har riktige opplysninger om dem.
icon: lucide:house
- name: Meld fra om noe som bør fikses
description: Sett du noe farlig i trafikken, eller noe ødelagt på lekeplassen eller elvestien? Gi oss beskjed.
action: /melde-fra
consequence:
- Meld fra
features:
- name: For deg som har sett noe
description: Du kan melde fra om et farlig sted i trafikken eller om noe som er ødelagt på lekeplassen eller stien.
- name: Deg som har sett noe som bør fikses
description: At velet tar det opp med kommunen eller den som eier veien, at det blir fikset før noen skader seg.
icon: lucide:alert-triangle
- name: Stille opp på 17. mai, dugnad eller i komité
description: Velet drives av folk som bidrar litt. Finn noe som passer deg.
- name: Bli med og gjør en innsats
description: Vi trenger folk på 17. mai, dugnader og i komiteene. Det trengs ikke mer enn litt tid du har å avse.
action: /bidra
consequence:
- Vil bidra
- Bli med
features:
- name: For deg som vil være med
description: Du kan melde deg til hjelp på 17. mai, dugnad eller et arrangement, eller søke plass i en komité.
- name: Deg som vil gjøre en innsats
description: Å bli satt opp på noe som passer dem, en plass i den komiteen som driver med det de bryr seg om.
icon: lucide:hand-helping
- name: Hjelp fra naboen, eller hjelp naboen
description: Snømåking, handling, skyss og utlån av utstyr, naboer imellom.
- name: Få hjelp av naboer, eller gi en hånd selv
description: Trenger du en hånd med snømåking, handling eller skyss? Eller kan du stille opp for en nabo? Her møtes dere.
action: /naboer
consequence:
- Til nabohjelp
features:
- name: For deg og naboene dine
description: Du kan be om hjelp, tilby hjelp eller legge ut noe du har å låne ut.
- name: Deg som trenger hjelp eller kan gi en hånd
description: At en nabo stiller opp, å bli spurt når det passer, et oppslag som naboene ser.
icon: lucide:heart-handshake
- name: Si din mening i en høringssak
description: Har kommunen en sak på høring som du har tanker om? Send oss innspillet ditt.
- name: Få din mening med i høringssvaret
description: Har kommunen en sak på høring du mener noe om? Send oss innspillet ditt, så tar vi det med i velets svar.
action: /received/horingsinnspill
consequence:
- Send innspill
record_as: innspill
features:
- name: Slik går det videre
description: Innspillet kommer inn til høringsgruppa. Så avgjør de om det blir tatt med i velets svar, og du får vite om det ble med eller ikke.
- name: Hva skjer videre
description: Innspillet ditt kommer inn hos høringsutvalget. De vurderer om det tas med i velets svar til kommunen, eller om det ikke passer inn denne gangen.
icon: lucide:route
- name: Hvem leser det
description: Høringsgruppa i Tomter Vel leser det du sender. Du når styret på post@tomtervel.no.
- name: Hvem leser dette
description: Høringsutvalget i Tomter Vel leser innspillet ditt; i mellomtiden kan du nå styret på post@tomtervel.no.
icon: lucide:users
- name: Ditt innspill
- name: Send et høringsinnspill
requirements:
- name: navn
label: Navn
@@ -107,12 +107,12 @@ alternatives:
- name: sak
label: Hvilken sak gjelder det?
type: text
placeholder: Reguleringsplan for Tomtervegen
placeholder: Reguleringsplan for Tomterveien
- name: innspill
label: Hva mener du?
type: textarea
placeholder: Jeg mener gangfeltet bør flyttes nærmere skolen, fordi barna krysser der.
description: Ha saken og det du vil si klart før du begynner.
placeholder: Jeg mener det bør settes opp fartsdumper langs den nye traseen, for barna krysser der til skolen.
description: Fortell hvilken sak det gjelder og hva du mener.
icon: lucide:megaphone
encouragements:
- Innspillet ditt leses av høringsgruppa før velet skriver sitt svar.
- Innspillet ditt blir lest av høringsutvalget vårt og veier inn i svaret vi sender kommunen.
@@ -11,7 +11,7 @@ alternatives:
- Lagre
features:
- name: Husstander
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -31,7 +31,7 @@ alternatives:
- Lagre
features:
- name: Medlemsendringer
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -48,7 +48,7 @@ alternatives:
- Lagre
features:
- name: Utlegg
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -76,7 +76,7 @@ alternatives:
group: kasserer
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -89,8 +89,8 @@ alternatives:
consequence:
- Lagre
features:
- name: Who has been invited
description: Each row is one invitation, with the one-time link while it is unused.
- name: Hvem som er invitert
description: Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt.
resource:
source:
kind: kv
@@ -18,7 +18,7 @@ alternatives:
group: komiteer
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -31,8 +31,8 @@ alternatives:
consequence:
- Confirm
features:
- name: Who has been invited
description: Each row is one invitation, with the one-time link while it is unused.
- name: Hvem som er invitert
description: Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt.
resource:
source:
kind: kv
@@ -11,7 +11,7 @@ alternatives:
- Lagre
features:
- name: Anleggsfeil
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -33,7 +33,7 @@ alternatives:
group: lekeplasser
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -46,8 +46,8 @@ alternatives:
consequence:
- Lagre
features:
- name: Who has been invited
description: Each row is one invitation, with the one-time link while it is unused.
- name: Hvem som er invitert
description: Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt.
resource:
source:
kind: kv
@@ -11,7 +11,7 @@ alternatives:
- Lagre
features:
- name: Hjelpebehov
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -37,7 +37,7 @@ alternatives:
- Lagre
features:
- name: Hjelpere
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -59,7 +59,7 @@ alternatives:
group: nabohjelp
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -72,8 +72,8 @@ alternatives:
consequence:
- Lagre
features:
- name: Who has been invited
description: Each row is one invitation, with the one-time link while it is unused.
- name: Hvem som er invitert
description: Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt.
resource:
source:
kind: kv
@@ -8,14 +8,14 @@ alternatives:
description: Alle meldinger er åpne for alle å se.
features:
- name: Anleggsfeil
description: Each row is one case and the stage it has reached. Names and contact details are not shown here.
description: Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.
resource:
source:
kind: kv
bucket: anleggsfeil
public: true
states: []
empty: Nothing here yet.
empty: Ingenting her ennå.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {hva: .hva, hvor: .hvor}'
- name: Tilbake til meldinger
description: ''
@@ -8,14 +8,14 @@ alternatives:
description: Åpen liste – navn og detaljer vises ikke.
features:
- name: Oppslag
description: Each row is one case and the stage it has reached. Names and contact details are not shown here.
description: Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.
resource:
source:
kind: kv
bucket: oppslag
public: true
states: []
empty: Nothing here yet.
empty: Ingenting her ennå.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {har_eller_trenger: .har_eller_trenger, hva: .hva}'
- name: Tilbake
description: ''
@@ -8,14 +8,14 @@ alternatives:
description: Alle meldinger som er sendt inn, og hvor de står nå.
features:
- name: Trafikkmeldinger
description: Each row is one case and the stage it has reached. Names and contact details are not shown here.
description: Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.
resource:
source:
kind: kv
bucket: trafikkmeldinger
public: true
states: []
empty: Nothing here yet.
empty: Ingenting her ennå.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {hva: .hva, hvor: .hvor}'
- name: Tilbake
description: ''
@@ -11,7 +11,7 @@ alternatives:
- Lagre
features:
- name: Innspill
description: Each row is one case and the stage it has reached. Another desk moves these.
description: Hver rad er én sak og hvor langt den har kommet. En annen pult flytter disse.
resource:
source:
kind: kv
@@ -25,7 +25,7 @@ alternatives:
- Lagre
features:
- name: Komitesoknader
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -45,7 +45,7 @@ alternatives:
- Lagre
features:
- name: Oppslag
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -65,7 +65,7 @@ alternatives:
- Lagre
features:
- name: Trafikkmeldinger
description: Each row is one case and the stage it has reached. Another desk moves these.
description: Hver rad er én sak og hvor langt den har kommet. En annen pult flytter disse.
resource:
source:
kind: kv
@@ -81,7 +81,7 @@ alternatives:
group: arrangementer
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -97,7 +97,7 @@ alternatives:
group: horingsinstans
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -113,7 +113,7 @@ alternatives:
group: kasserer
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -129,7 +129,7 @@ alternatives:
group: komiteer
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -145,7 +145,7 @@ alternatives:
group: lekeplasser
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -161,7 +161,7 @@ alternatives:
group: nabohjelp
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -177,7 +177,7 @@ alternatives:
group: styret
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -193,7 +193,7 @@ alternatives:
group: trafikk
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -206,8 +206,8 @@ alternatives:
consequence:
- Lagre
features:
- name: Who has been invited
description: Each row is one invitation, with the one-time link while it is unused.
- name: Hvem som er invitert
description: Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt.
resource:
source:
kind: kv
@@ -11,7 +11,7 @@ alternatives:
- Lagre
features:
- name: Trafikkmeldinger
description: Each row is one case. The buttons record what you have just done with it.
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
@@ -39,7 +39,7 @@ alternatives:
group: trafikk
features:
- name: Hvem
description: Their name, and the address the account and its one-time link go to.
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
@@ -52,8 +52,8 @@ alternatives:
consequence:
- Lagre
features:
- name: Who has been invited
description: Each row is one invitation, with the one-time link while it is unused.
- name: Hvem som er invitert
description: Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt.
resource:
source:
kind: kv
@@ -46,7 +46,7 @@
"open->takket_nei": "Takket nei"
},
"list_title": "Frivillige",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
}
},
"links": {},
@@ -56,7 +56,7 @@
"description": "De får en konto, plass i Arrangementer, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -67,8 +67,8 @@
"heading": "Sendte invitasjoner",
"description": "Hver invitasjon med lenken som ble laget. Marker som ferdig når personen er inne.",
"done": "Er inne",
"list_title": "Who has been invited",
"list_note": "Each row is one invitation, with the one-time link while it is unused."
"list_title": "Hvem som er invitert",
"list_note": "Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt."
}
},
"questions/bidra/index.yaml": {
@@ -190,7 +190,7 @@
"open->ikke_tatt_med": "Ikke tatt med"
},
"list_title": "Innspill",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
}
},
"links": {},
@@ -200,7 +200,7 @@
"description": "De får en konto, plass i Høringsinstans, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -211,13 +211,13 @@
"heading": "Sendte invitasjoner",
"description": "Hver invitasjon med lenken som ble laget. Marker som ferdig når personen er inne.",
"done": "Er inne",
"list_title": "Who has been invited",
"list_note": "Each row is one invitation, with the one-time link while it is unused."
"list_title": "Hvem som er invitert",
"list_note": "Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt."
}
},
"questions/index.yaml": {
"question": "Hva trenger du hjelp med i Tomter?",
"description": "Tomter Vel er for alle som bor her. Velg det som passer deg, så finner du veien videre.",
"question": "Hva gjør Tomter Vel, og hva kan du få her?",
"description": "Velforeningen for Tomter, stiftet i 1947, drevet på fritida av naboene dine. Alt du kan be om her havner hos en komité eller styret, og du ser selv hvor saken står.",
"opener": {
"heading": "Velforeningen for Tomter siden 1947",
"description": "Vi er sju komiteer som jobber på fritida for bygda vår. 157 husstander er med.",
@@ -263,56 +263,56 @@
},
"doors": {
"medlem": {
"heading": "Bli medlem eller endre medlemskapet",
"description": "Meld deg inn, betal kontingent, eller si fra om flytting, ny e-post eller utmelding.",
"heading": "Bli medlem eller endre opplysningene dine",
"description": "Meld deg inn, betal kontingenten, eller gi beskjed om flytting, ny e-post eller utmelding.",
"button": "Til medlemskap",
"icon": "user-plus",
"for_whom": "For deg som bor i Tomter",
"behind": "Du kan bli medlem og betale kontingent, eller melde flytting, ny e-post eller utmelding."
"icon": "house",
"for_whom": "Deg som bor i Tomter",
"behind": "Å bli medlem og få betalt kontingenten, at velet har riktige opplysninger om dem."
},
"melde-fra": {
"heading": "Si fra om noe farlig eller ødelagt",
"description": "Har du sett et farlig sted i trafikken eller noe i stykker på lekeplassen eller stien? Da vet velet det.",
"heading": "Meld fra om noe som bør fikses",
"description": "Sett du noe farlig i trafikken, eller noe ødelagt på lekeplassen eller elvestien? Gi oss beskjed.",
"button": "Meld fra",
"icon": "alert-triangle",
"for_whom": "For deg som har sett noe",
"behind": "Du kan melde fra om et farlig sted i trafikken eller om noe som er ødelagt på lekeplassen eller stien."
"for_whom": "Deg som har sett noe som bør fikses",
"behind": "At velet tar det opp med kommunen eller den som eier veien, at det blir fikset før noen skader seg."
},
"bidra": {
"heading": "Stille opp på 17. mai, dugnad eller i komité",
"description": "Velet drives av folk som bidrar litt. Finn noe som passer deg.",
"button": "Vil bidra",
"heading": "Bli med og gjør en innsats",
"description": "Vi trenger folk på 17. mai, dugnader og i komiteene. Det trengs ikke mer enn litt tid du har å avse.",
"button": "Bli med",
"icon": "hand-helping",
"for_whom": "For deg som vil være med",
"behind": "Du kan melde deg til hjelp på 17. mai, dugnad eller et arrangement, eller søke plass i en komité."
"for_whom": "Deg som vil gjøre en innsats",
"behind": "Å bli satt opp på noe som passer dem, en plass i den komiteen som driver med det de bryr seg om."
},
"naboer": {
"heading": "Hjelp fra naboen, eller hjelp naboen",
"description": "Snømåking, handling, skyss og utlån av utstyr, naboer imellom.",
"heading": "Få hjelp av naboer, eller gi en hånd selv",
"description": "Trenger du en hånd med snømåking, handling eller skyss? Eller kan du stille opp for en nabo? Her møtes dere.",
"button": "Til nabohjelp",
"icon": "heart-handshake",
"for_whom": "For deg og naboene dine",
"behind": "Du kan be om hjelp, tilby hjelp eller legge ut noe du har å låne ut."
"for_whom": "Deg som trenger hjelp eller kan gi en hånd",
"behind": "At en nabo stiller opp, å bli spurt når det passer, et oppslag som naboene ser."
}
},
"needs": {
"horingsinnspill": {
"heading": "Si din mening i en høringssak",
"description": "Har kommunen en sak på høring som du har tanker om? Send oss innspillet ditt.",
"heading": "Få din mening med i høringssvaret",
"description": "Har kommunen en sak på høring du mener noe om? Send oss innspillet ditt, så tar vi det med i velets svar.",
"button": "Send innspill",
"encouragement": "Innspillet ditt leses av høringsgruppa før velet skriver sitt svar.",
"encouragement": "Innspillet ditt blir lest av høringsutvalget vårt og veier inn i svaret vi sender kommunen.",
"icon": "megaphone",
"requires_title": "Dette trenger vi fra deg",
"requires_description": "Navnet ditt, hvilken sak det gjelder og hva du mener.",
"requires_icon": "clipboard-list",
"road_title": "Slik går det videre",
"road_description": "Innspillet kommer inn til høringsgruppa. Så avgjør de om det blir tatt med i velets svar, og du får vite om det ble med eller ikke.",
"road_icon": "route",
"who_title": "Hvem leser det",
"who_description": "Høringsgruppa i Tomter Vel leser det du sender. Du når styret på post@tomtervel.no.",
"who_icon": "users",
"form_title": "Ditt innspill",
"form_description": "Ha saken og det du vil si klart før du begynner.",
"requires_title": "",
"requires_description": "",
"requires_icon": "",
"road_title": "Hva skjer videre",
"road_description": "Innspillet ditt kommer inn hos høringsutvalget. De vurderer om det tas med i velets svar til kommunen, eller om det ikke passer inn denne gangen.",
"road_icon": "lucide:route",
"who_title": "Hvem leser dette",
"who_description": "Høringsutvalget i Tomter Vel leser innspillet ditt; i mellomtiden kan du nå styret på post@tomtervel.no.",
"who_icon": "lucide:users",
"form_title": "Send et høringsinnspill",
"form_description": "Fortell hvilken sak det gjelder og hva du mener.",
"labels": {
"navn": "Navn",
"sak": "Hvilken sak gjelder det?",
@@ -320,8 +320,8 @@
},
"hints": {
"navn": "Kari Nordmann",
"sak": "Reguleringsplan for Tomtervegen",
"innspill": "Jeg mener gangfeltet bør flyttes nærmere skolen, fordi barna krysser der."
"sak": "Reguleringsplan for Tomterveien",
"innspill": "Jeg mener det bør settes opp fartsdumper langs den nye traseen, for barna krysser der til skolen."
}
}
}
@@ -339,7 +339,7 @@
"open->utmeldt": "Meld ut"
},
"list_title": "Husstander",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
},
"medlemsendringer": {
"heading": "Endringer som venter på å bli registrert",
@@ -348,7 +348,7 @@
"open->oppdatert": "Registrer endring"
},
"list_title": "Medlemsendringer",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
},
"utlegg": {
"heading": "Utlegg som venter på deg",
@@ -360,7 +360,7 @@
"open->avvist": "Avvis utlegg"
},
"list_title": "Utlegg",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
}
},
"links": {},
@@ -370,7 +370,7 @@
"description": "De får en konto, plass i kassereren, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -381,8 +381,8 @@
"heading": "Sendte invitasjoner",
"description": "Hver invitasjon med lenken som ble laget. Marker som ferdig når personen er inne.",
"done": "Er inne",
"list_title": "Who has been invited",
"list_note": "Each row is one invitation, with the one-time link while it is unused."
"list_title": "Hvem som er invitert",
"list_note": "Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt."
}
},
"questions/komiteer/index.yaml": {
@@ -403,7 +403,7 @@
"description": "De får en konto, plass i komiteene, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -414,8 +414,8 @@
"heading": "Sendte invitasjoner",
"description": "Hver invitasjon med lenken som ble laget. Marker som ferdig når personen er inne.",
"done": "Er inne",
"list_title": "Who has been invited",
"list_note": "Each row is one invitation, with the one-time link while it is unused."
"list_title": "Hvem som er invitert",
"list_note": "Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt."
}
},
"questions/komiteer/utlegg-sent.yaml": {
@@ -468,7 +468,7 @@
"tatt_tak_i->utbedret": "Merk som utbedret"
},
"list_title": "Anleggsfeil",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
}
},
"links": {},
@@ -478,7 +478,7 @@
"description": "De får en konto, plass i Leke- og møteplasser, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -489,8 +489,8 @@
"heading": "Sendte invitasjoner",
"description": "Hver invitasjon med lenken som ble laget. Marker som ferdig når personen er inne.",
"done": "Er inne",
"list_title": "Who has been invited",
"list_note": "Each row is one invitation, with the one-time link while it is unused."
"list_title": "Hvem som er invitert",
"list_note": "Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt."
}
},
"questions/medlem/index.yaml": {
@@ -730,7 +730,7 @@
"open->ikke_lost": "Meld ikke løst"
},
"list_title": "Hjelpebehov",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
},
"hjelpere": {
"heading": "Naboer som kan stille opp",
@@ -740,7 +740,7 @@
"open->trukket": "Meld trukket"
},
"list_title": "Hjelpere",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
}
},
"links": {},
@@ -750,7 +750,7 @@
"description": "De får en konto, plass i nabohjelpen, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -761,8 +761,8 @@
"heading": "Sendte invitasjoner",
"description": "Hver invitasjon med lenken som ble laget. Marker som ferdig når personen er inne.",
"done": "Er inne",
"list_title": "Who has been invited",
"list_note": "Each row is one invitation, with the one-time link while it is unused."
"list_title": "Hvem som er invitert",
"list_note": "Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt."
}
},
"questions/received/anleggsfeil.yaml": {
@@ -856,8 +856,8 @@
"heading": "Status på meldte anleggsfeil",
"list_description": "Alle meldinger er åpne for alle å se.",
"list_title": "Anleggsfeil",
"list_note": "Each row is one case and the stage it has reached. Names and contact details are not shown here.",
"empty": "Nothing here yet.",
"list_note": "Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.",
"empty": "Ingenting her ennå.",
"back": "Tilbake til meldinger"
},
"questions/status/oppslag/index.yaml": {
@@ -866,8 +866,8 @@
"heading": "Oversikt over det som er meldt inn",
"list_description": "Åpen liste – navn og detaljer vises ikke.",
"list_title": "Oppslag",
"list_note": "Each row is one case and the stage it has reached. Names and contact details are not shown here.",
"empty": "Nothing here yet.",
"list_note": "Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.",
"empty": "Ingenting her ennå.",
"back": "Tilbake"
},
"questions/status/trafikkmeldinger/index.yaml": {
@@ -876,8 +876,8 @@
"heading": "Trafikkmeldinger og status",
"list_description": "Alle meldinger som er sendt inn, og hvor de står nå.",
"list_title": "Trafikkmeldinger",
"list_note": "Each row is one case and the stage it has reached. Names and contact details are not shown here.",
"empty": "Nothing here yet.",
"list_note": "Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.",
"empty": "Ingenting her ennå.",
"back": "Tilbake"
},
"questions/styret/index.yaml": {
@@ -890,7 +890,7 @@
"description": "Her samles meninger fra beboerne om saker kommunen har på høring, klare til å tas med i velets svar.",
"moves": {},
"list_title": "Innspill",
"list_note": "Each row is one case and the stage it has reached. Another desk moves these."
"list_note": "Hver rad er én sak og hvor langt den har kommet. En annen pult flytter disse."
},
"komitesoknader": {
"heading": "Søknader til komiteene",
@@ -900,7 +900,7 @@
"open->avslatt": "Avslå søknaden"
},
"list_title": "Komitesoknader",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
},
"oppslag": {
"heading": "Utstyr til utlån blant naboer",
@@ -910,14 +910,14 @@
"open->tatt_ned": "Ta ned oppslaget"
},
"list_title": "Oppslag",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
},
"trafikkmeldinger": {
"heading": "Meldinger om trafikkfarer",
"description": "Her samles meldinger om farlige steder i trafikken, klare til å tas videre med kommunen eller veieier.",
"moves": {},
"list_title": "Trafikkmeldinger",
"list_note": "Each row is one case and the stage it has reached. Another desk moves these."
"list_note": "Hver rad er én sak og hvor langt den har kommet. En annen pult flytter disse."
}
},
"links": {},
@@ -927,7 +927,7 @@
"description": "De får en konto, plass i Arrangementer, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -938,7 +938,7 @@
"description": "De får en konto, plass i Høringsinstans, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -949,7 +949,7 @@
"description": "De får en konto, plass i kassereren, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -960,7 +960,7 @@
"description": "De får en konto, plass i komiteene, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -971,7 +971,7 @@
"description": "De får en konto, plass i Leke- og møteplasser, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -982,7 +982,7 @@
"description": "De får en konto, plass i nabohjelpen, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -993,7 +993,7 @@
"description": "De får en konto, plass i styret, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -1004,7 +1004,7 @@
"description": "De får en konto, plass i Trafikkforhold, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -1015,8 +1015,8 @@
"heading": "Sendte invitasjoner",
"description": "Hver invitasjon med lenken som ble laget. Marker som ferdig når personen er inne.",
"done": "Er inne",
"list_title": "Who has been invited",
"list_note": "Each row is one invitation, with the one-time link while it is unused."
"list_title": "Hvem som er invitert",
"list_note": "Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt."
}
},
"questions/trafikk/index.yaml": {
@@ -1034,7 +1034,7 @@
"tatt_opp->avvist": "Avvis meldingen"
},
"list_title": "Trafikkmeldinger",
"list_note": "Each row is one case. The buttons record what you have just done with it."
"list_note": "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den."
}
},
"links": {},
@@ -1044,7 +1044,7 @@
"description": "De får en konto, plass i Trafikkforhold, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Their name, and the address the account and its one-time link go to.",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
@@ -1055,8 +1055,8 @@
"heading": "Sendte invitasjoner",
"description": "Hver invitasjon med lenken som ble laget. Marker som ferdig når personen er inne.",
"done": "Er inne",
"list_title": "Who has been invited",
"list_note": "Each row is one invitation, with the one-time link while it is unused."
"list_title": "Hvem som er invitert",
"list_note": "Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt."
}
},
"site.yaml": {
@@ -0,0 +1,106 @@
{
"questions/index.yaml": {
"description": "Velforeningen for Tomter, stiftet i 1947, drevet på fritida av naboene dine. Alt du kan be om her havner hos en komité eller styret, og du ser selv hvor saken står.",
"doors": {
"bidra": {
"button": "Bli med",
"description": "Vi trenger folk på 17. mai, dugnader og i komiteene. Det trengs ikke mer enn litt tid du har å avse.",
"for_whom": "Deg som vil gjøre en innsats",
"heading": "Bli med og gjør en innsats",
"icon": "hand-helping"
},
"medlem": {
"button": "Til medlemskap",
"description": "Meld deg inn, betal kontingenten, eller gi beskjed om flytting, ny e-post eller utmelding.",
"for_whom": "Deg som bor i Tomter",
"heading": "Bli medlem eller endre opplysningene dine",
"icon": "house"
},
"melde-fra": {
"button": "Meld fra",
"description": "Sett du noe farlig i trafikken, eller noe ødelagt på lekeplassen eller elvestien? Gi oss beskjed.",
"for_whom": "Deg som har sett noe som bør fikses",
"heading": "Meld fra om noe som bør fikses",
"icon": "alert-triangle"
},
"naboer": {
"button": "Til nabohjelp",
"description": "Trenger du en hånd med snømåking, handling eller skyss? Eller kan du stille opp for en nabo? Her møtes dere.",
"for_whom": "Deg som trenger hjelp eller kan gi en hånd",
"heading": "Få hjelp av naboer, eller gi en hånd selv",
"icon": "heart-handshake"
}
},
"needs": {
"horingsinnspill": {
"button": "Send innspill",
"description": "Har kommunen en sak på høring du mener noe om? Send oss innspillet ditt, så tar vi det med i velets svar.",
"encouragement": "Innspillet ditt blir lest av høringsutvalget vårt og veier inn i svaret vi sender kommunen.",
"form_description": "Fortell hvilken sak det gjelder og hva du mener.",
"form_title": "Send et høringsinnspill",
"heading": "Få din mening med i høringssvaret",
"hints": {
"innspill": "Jeg mener det bør settes opp fartsdumper langs den nye traseen, for barna krysser der til skolen.",
"navn": "Kari Nordmann",
"sak": "Reguleringsplan for Tomterveien"
},
"icon": "megaphone",
"labels": {
"innspill": "Hva mener du?",
"navn": "Navn",
"sak": "Hvilken sak gjelder det?"
},
"road_description": "Innspillet ditt kommer inn hos høringsutvalget. De vurderer om det tas med i velets svar til kommunen, eller om det ikke passer inn denne gangen.",
"road_icon": "lucide:route",
"road_title": "Hva skjer videre",
"who_description": "Høringsutvalget i Tomter Vel leser innspillet ditt; i mellomtiden kan du nå styret på post@tomtervel.no.",
"who_icon": "lucide:users",
"who_title": "Hvem leser dette"
}
},
"opener": {
"heading": "Velforeningen for Tomter siden 1947",
"description": "Vi er sju komiteer som jobber på fritida for bygda vår. 157 husstander er med.",
"features": {
"medlem": {
"heading": "157 husstander er medlemmer",
"description": "Kontingenten går til arrangementer, lekeplasser, elvestien og arbeidet for tryggere trafikk.",
"icon": "users"
},
"nabo": {
"heading": "Naboer som stiller opp for hverandre",
"description": "Trenger du hjelp med snømåking, handling eller skyss, finner vi en nabo som kan. Du kan også låne og låne ut utstyr.",
"icon": "heart-handshake"
}
}
},
"question": "Hva gjør Tomter Vel, og hva kan du få her?",
"shopping": {
"heading": "Siste fra bygda",
"description": "Nye meldinger og oppslag, slik de står akkurat nå.",
"items": {
"status-anleggsfeil": {
"heading": "Feil på lekeplasser og sti",
"description": "Det som er meldt inn, og hvor langt vi har kommet med å fikse det.",
"link": "Alle feilmeldinger",
"empty": "Ingenting er meldt ødelagt akkurat nå. Ser du noe, si fra.",
"icon": "construction"
},
"status-oppslag": {
"heading": "Oppslagstavla for naboer",
"description": "Utstyr som er til låns, og det naboene leter etter.",
"link": "Hele oppslagstavla",
"empty": "Tavla er tom nå. Legg gjerne ut det første oppslaget.",
"icon": "list"
},
"status-trafikkmeldinger": {
"heading": "Farlige steder i trafikken",
"description": "Det naboer har meldt fra om, og hva velet har gjort med det.",
"link": "Alle trafikkmeldinger",
"empty": "Ingen farlige steder er meldt inn nå. Har du sett et, fortell oss.",
"icon": "car"
}
}
}
}
}
+20 -11
View File
@@ -747,7 +747,16 @@ fn internal_page(need: &PlanNeed, group: &str) -> String {
/// The words every page needs, as built-in fallbacks: plain, English,
/// made from the plan's own text. Keyed by file path, then the same
/// JSON shape the model is asked for.
/// A generic line in the plan's language: English, or Norwegian for
/// `no`/`nb`/`nn`. For the few fallbacks no model is asked about
/// before a page ships (list notes, empty lists), so a Norwegian site
/// does not show English where its own words have not reached yet.
fn loc(lang: &str, en: &str, no: &str) -> String {
if lang.starts_with("no") || lang.starts_with("nb") || lang.starts_with("nn") { no } else { en }.to_string()
}
pub fn fallback_words(plan: &Plan) -> BTreeMap<String, Value> {
let lang = plan.language.as_str();
// Every part of the card portal renders has a slot: the model
// gets to write the button, an encouragement, the section's icon
// and guidance line, and a placeholder per field, not only the
@@ -814,10 +823,10 @@ pub fn fallback_words(plan: &Plan) -> BTreeMap<String, Value> {
shopping.insert(
format!("status-{bucket}"),
json!({
"heading": format!("Latest {}", humanize(bucket).to_lowercase()),
"heading": format!("{} {}", loc(lang, "Latest", "Siste"), humanize(bucket).to_lowercase()),
"description": public_blurb(&needs),
"link": format!("All {}", humanize(bucket).to_lowercase()),
"empty": "Nothing here yet.",
"link": format!("{} {}", loc(lang, "All", "Alle"), humanize(bucket).to_lowercase()),
"empty": loc(lang, "Nothing here yet.", "Ingenting her ennå."),
"icon": "list",
}),
);
@@ -829,7 +838,7 @@ pub fn fallback_words(plan: &Plan) -> BTreeMap<String, Value> {
"description": plan.about,
"opener": { "heading": "What we do", "description": "", "features": does },
// Named for what it shows, never an invitation to look.
"shopping": { "heading": format!("Latest from {}", plan.business), "description": "", "items": shopping },
"shopping": { "heading": format!("{} {}", loc(lang, "Latest from", "Siste fra"), plan.business), "description": "", "items": shopping },
// A door's feature says what is behind it, from the needs
// that sit there: a card that leads somewhere has to say
// where, or it is a button with decoration around it.
@@ -890,9 +899,9 @@ pub fn fallback_words(plan: &Plan) -> BTreeMap<String, Value> {
// buttons under it do; the card's own description says
// what the cases are.
let note = if moves.is_empty() {
"Each row is one case and the stage it has reached. Another desk moves these.".to_string()
loc(lang, "Each row is one case and the stage it has reached. Another desk moves these.", "Hver rad er én sak og hvor langt den har kommet. En annen pult flytter disse.")
} else {
"Each row is one case. The buttons record what you have just done with it.".to_string()
loc(lang, "Each row is one case. The buttons record what you have just done with it.", "Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.")
};
let from_whom = format!("Sent in by {}.", needs.iter().map(|n| n.who.as_str()).collect::<Vec<_>>().join(" or "));
(bucket.to_string(), json!({ "heading": humanize(bucket), "description": from_whom, "moves": moves, "list_title": humanize(bucket), "list_note": note }))
@@ -915,7 +924,7 @@ pub fn fallback_words(plan: &Plan) -> BTreeMap<String, Value> {
"description": format!("They get an account, a place in {}, and a one-time link to set their own password or passkey.", label_of(plan, g)),
"button": "Invite",
"form_title": "Who",
"form_description": "Their name, and the address the account and its one-time link go to.".to_string(),
"form_description": loc(lang, "Their name, and the address the account and its one-time link go to.", "Navnet deres, og adressen kontoen og engangslenken går til."),
"labels": { "name": "Name", "email": "Email" },
}))
})
@@ -927,8 +936,8 @@ pub fn fallback_words(plan: &Plan) -> BTreeMap<String, Value> {
"heading": "Invitations sent",
"description": "Each invite with the link it made. Mark it done when the person is in.",
"done": "Is in",
"list_title": "Who has been invited",
"list_note": "Each row is one invitation, with the one-time link while it is unused.",
"list_title": loc(lang, "Who has been invited", "Hvem som er invitert"),
"list_note": loc(lang, "Each row is one invitation, with the one-time link while it is unused.", "Hver rad er én invitasjon, med engangslenken så lenge den ikke er brukt."),
})
};
words.insert(
@@ -948,8 +957,8 @@ pub fn fallback_words(plan: &Plan) -> BTreeMap<String, Value> {
// A public list says what a row is and what it leaves
// out, since the reader cannot know what was pruned.
"list_title": humanize(bucket),
"list_note": "Each row is one case and the stage it has reached. Names and contact details are not shown here.",
"empty": "Nothing here yet.",
"list_note": loc(lang, "Each row is one case and the stage it has reached. Names and contact details are not shown here.", "Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her."),
"empty": loc(lang, "Nothing here yet.", "Ingenting her ennå."),
"back": "Back",
}),
);