Tekststrenger i kode
Komponentene i Punkt har innebygde tekster pÄ bokmÄl. Du kan bytte ut alle tekstene pÄ én gang, for eksempel til et annet sprÄk, eller bare endre teksten i én enkelt komponent.
- Alle tekstene ligger i én felles katalog som React og Elements deler.
- Du bytter ut tekster globalt med
setPktStrings(), eller per komponent medstrings. - Tekstene er vanlige strenger, sÄ du kan legge dem i egne sprÄkfiler.
Slik er tekstene bygd opp
Katalogen har to nivÄer: et namespace og en nÞkkel. Namespace er som regel navnet pÄ komponenten, og nÞkkelen sier hva teksten brukes til.
{
searchinput: {
placeholder: "SĂžkâŠ",
submit: "SĂžk",
},
}
Du trenger aldri Ă„ oppgi hele katalogen. Tekstene du ikke nevner, beholder verdien de har fra fĂžr.
Bytt ut alle tekstene
Skal du oversette hele designsystemet, eller endre mange tekster pÄ tvers av
lĂžsningen, samler du dem i ett objekt og sender det til setPktStrings().
Legg gjerne tekstene i en egen fil per sprÄk:
// strings/en.js
export const en = {
generic: { from: 'From', to: 'To', close: 'Close' },
forms: {
optional: 'Optional',
required: 'Required',
readMore: 'Read more',
},
validation: {
valueMissing: 'This field is required',
rangeUnderflowMin: 'The value must be at least {min}.',
},
searchinput: { placeholder: 'SearchâŠ', submit: 'Search' },
// ⊠resten av namespacene
}
Kall setPktStrings() én gang nÄr applikasjonen starter:
import { setPktStrings } from '@oslokommune/punkt-elements'
import { en } from './strings/en'
setPktStrings(en)import { setPktStrings } from '@oslokommune/punkt-react'
import { en } from './strings/en'
setPktStrings(en)Kallet gjelder bÄde React og Elements pÄ samme side, og komponenter som allerede er tegnet opp, blir oppdatert. Bruker du begge pakkene, holder det med ett kall.
Du kan kalle setPktStrings() flere ganger, ogsÄ mens brukeren er inne pÄ siden.
Kallene legges oppÄ hverandre. Skal du bytte til et sprÄk der ikke alle tekstene er
oversatt, bĂžr du kalle resetPktStrings() fĂžrst. Ellers blir tekstene fra det
forrige sprÄket liggende igjen.
Se hvilke tekster som finnes
Alle nĂžklene med de innebygde verdiene ligger i pktStringsNb. Bruk den som fasit
nÄr du lager en sprÄkfil:
import { pktStringsNb } from '@oslokommune/punkt-elements'
console.log(pktStringsNb)import { pktStringsNb } from '@oslokommune/punkt-react'
console.log(pktStringsNb)Bytt ut teksten i én komponent
Alle komponenter som viser tekst, tar imot strings. Denne teksten vinner over den
globale.
<pkt-searchinput
id="sok"
strings='{"searchinput":{"placeholder":"Finn ansattâŠ"}}'
></pkt-searchinput><PktSearchInput id="sok" strings={{ searchinput: { placeholder: 'Finn ansattâŠ' } }} />I Elements kan du sette strings som JSON i attributtet, slik som over, eller som
en egenskap i JavaScript:
document.querySelector('#sok').strings = {
searchinput: { placeholder: 'Finn ansattâŠ' },
}
BestÄr komponenten av flere elementer, sÞrger Punkt for at teksten nÄr fram til elementene inni.
Bytt ut teksten i en del av siden
I React kan du pakke inn en del av siden med PktStringsProvider. Da gjelder
tekstene bare der inne.
import { PktStringsProvider } from '@oslokommune/punkt-react'
;<PktStringsProvider strings={{ forms: { optional: 'Kan stÄ tomt' } }}>
<PktTextinput id="navn" name="navn" label="Navn" optionalTag />
</PktStringsProvider>
Du kan legge flere slike inni hverandre. Den innerste vinner.
Bruker du Elements, setter du strings pÄ hver komponent i stedet.
Hvilken tekst vinner?
Punkt leter etter teksten i denne rekkefĂžlgen. Nederste treff vinner.
| RekkefĂžlge | Hvor teksten kommer fra |
|---|---|
| 1 | Den innebygde teksten pÄ bokmÄl |
| 2 | setPktStrings() |
| 3 | PktStringsProvider (bare React) |
| 4 | strings pÄ selve komponenten |
| 5 | Utdaterte props som optionalText |
Tekster med verdier i seg
Noen tekster har en verdi som settes inn nÄr teksten vises. Disse er markert med krÞllparenteser. Behold dem nÄr du bytter ut teksten, ellers mangler verdien.
setPktStrings({
validation: { rangeUnderflowMin: 'Kan ikke vĂŠre lavere enn {min}' },
})
Entall og flertall
Tekster som finnes i to former, har to nÞkler: én som slutter pÄ One og én som
slutter pÄ Other. Punkt velger One nÄr det er nÞyaktig én.
setPktStrings({
fileupload: {
fileLabelOne: 'dokument',
fileLabelOther: 'dokumenter',
},
})
Namespace
| Namespace | Hva det dekker |
|---|---|
generic | Ord som gÄr igjen: from, to, close |
forms | Merkelapper rundt skjemafelt |
validation | Feilmeldinger i skjema |
dates | Navn pÄ mÄneder og dager, week, month, year |
calendar | Knappene for forrige og neste mÄned |
datepicker | Ă pne kalenderen, fjerne en dato |
timepicker | Timer, minutter og knappene i tidsvelgeren |
searchinput | Ledetekst og knapp i sĂžkefeltet |
listbox | SĂžkefeltet i nedtrekkslisten |
combobox | Beskjeder om treff, valg og maksgrense |
fileupload | Slippsone, filvalidering og beskjeder til skjermlesere |
backlink | Tilbakelenken |
breadcrumbs | BrĂždsmulestien |
tag | Knappen som fjerner en tagg |
header | SĂžk og meny i toppfeltet |
Utdaterte props
Noen komponenter har egne props for enkelttekster, som optionalText,
requiredText, searchPlaceholder og helptextDropdownButton. De virker fortsatt,
og de vinner over alle de andre tekstene.
Vi kommer til Ă„ fjerne dem i en senere hovedversjon. Bruk strings eller
setPktStrings() nÄr du skriver ny kode.
Slik nullstiller du
resetPktStrings() setter alt tilbake til de innebygde tekstene. Den er mest nyttig
i tester.
import { resetPktStrings } from '@oslokommune/punkt-elements'
resetPktStrings()import { resetPktStrings } from '@oslokommune/punkt-react'
resetPktStrings()