Lås opp global rekkevidde med JavaScript Intl API. Lær beste praksis for internasjonalisering for formatering av datoer, tall, valutaer og mer, og sikre en sømløs brukeropplevelse over hele verden.
JavaScript Intl API: Beste praksis for internasjonalisering for et globalt publikum
I dagens sammenkoblede verden er det avgjørende å lage webapplikasjoner som henvender seg til et globalt publikum. JavaScript Intl API tilbyr kraftige verktøy for internasjonalisering (i18n), slik at du kan formatere datoer, tall, valutaer og mer i henhold til konvensjonene for forskjellige lokaler. Denne artikkelen utforsker beste praksis for å utnytte Intl API for å bygge virkelig globale applikasjoner.
Forstå internasjonalisering (i18n) og lokalisering (l10n)
Før du dykker ned i detaljene for Intl API, er det viktig å forstå skillet mellom internasjonalisering (i18n) og lokalisering (l10n). I18n er prosessen med å designe og utvikle applikasjoner på en måte som gjør at de lett kan tilpasses for forskjellige språk og regioner uten å kreve tekniske endringer. L10n er derimot prosessen med å tilpasse en internasjonalisert applikasjon for en spesifikk lokal ved å oversette tekst og tilpasse andre lokalespesifikke elementer.
Intl API fokuserer på i18n-aspektet, og gir mekanismene for å håndtere lokalesensitive data, mens lokalisering typisk innebærer å tilby oversettelser og lokalespesifikke konfigurasjoner.
Nøkkelkomponenter i Intl API
Intl API består av flere nøkkelobjekter, hver ansvarlig for å håndtere spesifikke aspekter av internasjonalisering:
- Intl.Collator: For å sammenligne strenger på en lokalesensitiv måte.
- Intl.DateTimeFormat: For formatering av datoer og klokkeslett.
- Intl.NumberFormat: For formatering av tall, inkludert valutaer og prosenter.
- Intl.PluralRules: For håndtering av flertallsregler på forskjellige språk.
- Intl.ListFormat: For formatering av lister på en lokalesensitiv måte.
- Intl.RelativeTimeFormat: For formatering av relative tider (f.eks. "i går", "om 2 timer").
Beste praksis for bruk av Intl API
For å effektivt utnytte Intl API og sikre en positiv brukeropplevelse for ditt globale publikum, bør du vurdere følgende beste praksis:
1. Spesifiser riktig lokal
Grunnlaget for internasjonalisering er å spesifisere riktig lokal. Lokalen identifiserer språket, regionen og eventuelle spesifikke varianter som skal brukes for formatering. Du kan hente brukerens foretrukne lokal fra navigator.language
-egenskapen eller Accept-Language
HTTP-headeren.
Når du oppretter Intl-objekter, kan du spesifisere lokalen som en streng eller en rekke strenger. Hvis du oppgir en rekke, vil API-et forsøke å finne den best matchende lokalen fra de tilgjengelige alternativene.
Eksempel:
const locale = navigator.language || 'en-US';
const numberFormat = new Intl.NumberFormat(locale);
Hvis brukerens foretrukne lokal ikke er tilgjengelig, kan du oppgi en fallback-lokal. Du kan for eksempel bruke 'en-US' som standard hvis brukerens nettleser rapporterer en lokal som ikke støttes.
2. Utnytt Intl.DateTimeFormat for dato- og klokkeslettformatering
Formatering av datoer og klokkeslett riktig er avgjørende for å gi en lokalisert opplevelse. Intl.DateTimeFormat
-objektet lar deg formatere datoer og klokkeslett i henhold til konvensjonene for en spesifikk lokal.
Du kan tilpasse formateringen ved å spesifisere forskjellige alternativer, for eksempel år, måned, dag, time, minutt og sekundformat. Du kan også spesifisere tidssonen for å sikre at datoer og klokkeslett vises riktig for brukere i forskjellige deler av verden.
Eksempel:
const locale = 'de-DE'; // Tysk (Tyskland)
const date = new Date();
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
timeZone: 'Europe/Berlin'
};
const dateTimeFormat = new Intl.DateTimeFormat(locale, options);
const formattedDate = dateTimeFormat.format(date); // Output: z.B. "22. Mai 2024, 14:30"
console.log(formattedDate);
Dette eksemplet formaterer gjeldende dato og klokkeslett i henhold til den tyske (Tyskland) lokalen, inkludert år, måned, dag, time og minutt. Den spesifiserer også tidssonen 'Europe/Berlin'.
Husk å vurdere forskjellige dato- og klokkeslettformater som brukes rundt om i verden. For eksempel bruker USA MM/DD/YYYY, mens mange andre land bruker DD/MM/YYYY.
3. Bruk Intl.NumberFormat for tall-, valuta- og prosentformatering
Intl.NumberFormat
-objektet gir en fleksibel måte å formatere tall, valutaer og prosenter i henhold til lokalespesifikke konvensjoner. Du kan tilpasse formateringen ved å spesifisere alternativer som valuta, stil (desimal, valuta eller prosent), minimum og maksimum antall desimaler og mer.
Eksempel (valutaformatering):
const locale = 'ja-JP'; // Japansk (Japan)
const amount = 12345.67;
const options = {
style: 'currency',
currency: 'JPY'
};
const numberFormat = new Intl.NumberFormat(locale, options);
const formattedAmount = numberFormat.format(amount); // Output: z.B. "\u00A512,346"
console.log(formattedAmount);
Dette eksemplet formaterer tallet 12345.67 som japanske yen (JPY). Legg merke til hvordan valutasymbolet (¥) og gruppeseparatoren (,) justeres automatisk i henhold til den japanske lokalen.
Eksempel (prosentformatering):
const locale = 'ar-EG'; // Arabisk (Egypt)
const percentage = 0.75;
const options = {
style: 'percent',
minimumFractionDigits: 2
};
const numberFormat = new Intl.NumberFormat(locale, options);
const formattedPercentage = numberFormat.format(percentage); // Output: z.B. "\u0667\u0665\u066B\u0660\u0660\u066A"
console.log(formattedPercentage);
Dette eksemplet formaterer tallet 0,75 som en prosentandel på arabisk (Egypt). Utdataene inkluderer det arabiske prosenttegnet (٪) og to desimaler.
Viktige hensyn for valutaformatering:
- Valutakoder: Bruk de riktige ISO 4217-valutakodene (f.eks. USD, EUR, JPY).
- Symbolplassering: Vær oppmerksom på at valutasymbolets posisjon varierer på tvers av lokaler (f.eks. før eller etter beløpet).
- Desimalseparatorer og gruppeseparatorer: Forstå de forskjellige konvensjonene for desimalseparatorer (f.eks. punktum eller komma) og gruppeseparatorer (f.eks. komma eller punktum).
4. Håndter flertallsformer riktig med Intl.PluralRules
Flertallsregler varierer betydelig mellom språk. For eksempel har engelsk enkle regler med entalls- og flertallsformer, mens andre språk har mer komplekse regler basert på tallverdien. Intl.PluralRules
-objektet hjelper deg med å bestemme riktig flertallsform for et gitt tall og en gitt lokal.
Eksempel:
const locale = 'ru-RU'; // Russisk (Russland)
const pluralRules = new Intl.PluralRules(locale);
function getPluralForm(count) {
const rule = pluralRules.select(count);
switch (rule) {
case 'one': return 'товар'; // tovar (entall)
case 'few': return 'товара'; // tovara (få)
case 'many': return 'товаров'; // tovarov (mange)
default: return 'товаров'; // Standard til mange
}
}
const count = 5;
const pluralForm = getPluralForm(count);
console.log(`${count} ${pluralForm}`); // Output: "5 товаров"
Dette eksemplet viser hvordan du bruker Intl.PluralRules
for å få riktig flertallsform for ordet "товар" (vare) på russisk. Russisk har forskjellige flertallsformer avhengig av om tallet slutter på 1, 2-4 eller 5-9.
5. Formater lister med Intl.ListFormat
Når du presenterer lister over elementer, kan formateringen variere på tvers av lokaler. Intl.ListFormat
-objektet lar deg formatere lister i henhold til lokalespesifikke konvensjoner, inkludert bruk av forskjellige konjunksjoner (f.eks. "og", "eller") og listeseparatorer (f.eks. komma, semikolon).
Eksempel:
const locale = 'es-ES'; // Spansk (Spania)
const list = ['manzanas', 'naranjas', 'plátanos'];
const listFormat = new Intl.ListFormat(locale, { style: 'long', type: 'conjunction' });
const formattedList = listFormat.format(list); // Output: "manzanas, naranjas y plátanos"
console.log(formattedList);
Dette eksemplet formaterer en liste over frukt på spansk (Spania), ved hjelp av konjunksjonen "y" (og) for å koble sammen de to siste elementene.
6. Formater relative tider med Intl.RelativeTimeFormat
Visning av relative tider (f.eks. "i går", "om 2 timer") gir en brukervennlig måte å presentere tidsinformasjon på. Intl.RelativeTimeFormat
-objektet lar deg formatere relative tider i henhold til lokalespesifikke konvensjoner.
Eksempel:
const locale = 'fr-CA'; // Fransk (Canada)
const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });
console.log(rtf.format(-1, 'day')); // Output: "hier"
console.log(rtf.format(2, 'day')); // Output: "dans 2 jours"
Dette eksemplet formaterer relative tider på fransk (Canada). Utdataene viser "hier" (i går) og "dans 2 jours" (om 2 dager).
`numeric`-alternativet styrer hvordan tall vises. `'auto'` viser relative ord når de er tilgjengelige (som "i går"), og tall ellers. `'always'` viser alltid tall.
7. Sammenlign strenger med Intl.Collator
Strengsammenligning er lokalesensitiv. Måten strenger sorteres på varierer avhengig av språket. For eksempel, på tysk, sorteres tegnet "ä" vanligvis som "a", mens det på svensk sorteres etter "z". Intl.Collator
-objektet lar deg sammenligne strenger i henhold til reglene for en spesifikk lokal.
Eksempel:
const locale = 'de-DE';
const collator = new Intl.Collator(locale);
const strings = ['äpfel', 'birnen', 'bananen', 'aprikosen'];
strings.sort(collator.compare);
console.log(strings); // Output: ["äpfel", "aprikosen", "bananen", "birnen"]
Dette eksemplet sorterer en rekke tyske ord ved hjelp av Intl.Collator
. Legg merke til at "äpfel" sorteres før "aprikosen", selv om "ä" kommer senere i alfabetet.
8. Håndter grensetilfeller og manglende data
Ikke alle lokaler støttes av alle nettlesere eller miljøer. Det er viktig å håndtere grensetilfeller der en lokal ikke er tilgjengelig eller når data mangler. Vurder følgende strategier:
- Gi fallback-lokaler: Spesifiser en standardlokal som skal brukes når brukerens foretrukne lokal ikke støttes.
- Degrader pent: Hvis spesifikke formateringsalternativer ikke støttes for en lokal, gi en rimelig fallback. Du kan for eksempel vise en dato i et mindre detaljert format.
- Bruk Try-Catch-blokker: Omslutt Intl API-kall i try-catch-blokker for å håndtere potensielle feil på en elegant måte.
9. Test grundig med forskjellige lokaler
Grundig testing er avgjørende for å sikre at din internasjonaliserte applikasjon fungerer korrekt for alle støttede lokaler. Test applikasjonen din med en rekke lokaler, inkludert språk som bruker forskjellige tegnsett, dato- og klokkeslettformater, tallformater og flertallsregler.
Vurder å bruke automatiserte testverktøy for å verifisere at applikasjonen din oppfører seg som forventet i forskjellige lokaler.
10. Vurder ytelsespåvirkninger
Selv om Intl API generelt er effektivt, kan det være relativt kostbart å opprette Intl-objekter. For å optimalisere ytelsen, bør du vurdere følgende:
- Cache Intl-objekter: Opprett Intl-objekter én gang og bruk dem på nytt når det er mulig, i stedet for å opprette nye objekter for hver formateringsoperasjon.
- Last inn lokaledata etter behov: Last inn lokaledata bare når det er nødvendig, i stedet for å laste inn alle lokaledata på forhånd.
Utover Intl API: Ytterligere hensyn for internasjonalisering
Selv om Intl API gir kraftige verktøy for formatering av data, innebærer internasjonalisering mer enn bare formatering. Vurder følgende tilleggsaspekter:
- Tekstretning (RTL/LTR): Støtt høyre-til-venstre-språk (RTL) som arabisk og hebraisk ved å bruke CSS for å justere layouten til applikasjonen din.
- Tegnsetting: Bruk UTF-8-koding for å sikre at applikasjonen din kan håndtere et bredt spekter av tegn.
- Oversettelseshåndtering: Bruk et oversettelseshåndteringssystem for å strømlinje prosessen med å oversette applikasjonens tekst.
- Kulturelt sensitivt design: Vær oppmerksom på kulturelle forskjeller når du designer applikasjonen din. For eksempel kan fargesymbolikk variere på tvers av kulturer.
Konklusjon
JavaScript Intl API er et uvurderlig verktøy for å bygge webapplikasjoner som henvender seg til et globalt publikum. Ved å følge de beste fremgangsmåtene som er skissert i denne artikkelen, kan du lage applikasjoner som ikke bare er funksjonelle, men også kulturelt sensitive og brukervennlige for brukere over hele verden. Omfavn kraften i Intl API og frigjør potensialet til applikasjonen din på den globale scenen. Å mestre Intl API vil resultere i en mer inkluderende og tilgjengelig opplevelse for alle brukerne dine, uavhengig av deres plassering eller språk.