Opnå global rækkevidde med JavaScript Intl API. Lær bedste praksis for internationalisering af datoer, tal, valutaer med mere, hvilket sikrer en problemfri brugeroplevelse verden over.
JavaScript Intl API: Bedste Praksis for Internationalisering til et Globalt Publikum
I dagens forbundne verden er det afgørende at skabe webapplikationer, der henvender sig til et globalt publikum. JavaScript Intl API tilbyder kraftfulde værktøjer til internationalisering (i18n), der giver dig mulighed for at formatere datoer, tal, valutaer og mere i henhold til konventionerne i forskellige sprogindstillinger. Denne artikel udforsker bedste praksis for at udnytte Intl API til at bygge virkelig globale applikationer.
Forstå Internationalisering (i18n) og Lokalisering (l10n)
Før du dykker ned i detaljerne i Intl API, er det vigtigt at forstå forskellen mellem internationalisering (i18n) og lokalisering (l10n). I18n er processen med at designe og udvikle applikationer på en måde, der gør det nemt at tilpasse dem til forskellige sprog og regioner uden at kræve ingeniørmæssige ændringer. L10n er derimod processen med at tilpasse en internationaliseret applikation til en bestemt sprogindstilling ved at oversætte tekst og tilpasse andre sprogspecifikke elementer.
Intl API fokuserer på i18n-aspektet og leverer mekanismerne til håndtering af sprogspecifikke data, mens lokalisering typisk involverer levering af oversættelser og sprogspecifikke konfigurationer.
Nøglekomponenter i Intl API
Intl API består af flere nøgleobjekter, der hver især er ansvarlige for at håndtere specifikke aspekter af internationalisering:
- Intl.Collator: Til sammenligning af strenge på en sprogspecifik måde.
- Intl.DateTimeFormat: Til formatering af datoer og tidspunkter.
- Intl.NumberFormat: Til formatering af tal, herunder valutaer og procenter.
- Intl.PluralRules: Til håndtering af pluraliseringsregler på forskellige sprog.
- Intl.ListFormat: Til formatering af lister på en sprogspecifik måde.
- Intl.RelativeTimeFormat: Til formatering af relative tidspunkter (f.eks. "i går", "om 2 timer").
Bedste Praksis for Brug af Intl API
For effektivt at udnytte Intl API og sikre en positiv brugeroplevelse for dit globale publikum, skal du overveje følgende bedste praksis:
1. Angiv den Korrekte Sprogindstilling
Grundlaget for internationalisering er at angive den korrekte sprogindstilling. Sprogindstillingen identificerer sproget, regionen og eventuelle specifikke varianter, der skal bruges til formatering. Du kan hente brugerens foretrukne sprogindstilling fra navigator.language
-egenskaben eller Accept-Language
HTTP-headeren.
Når du opretter Intl-objekter, kan du angive sprogindstillingen som en streng eller en række strenge. Hvis du angiver en række, vil API'et forsøge at finde den bedst matchende sprogindstilling fra de tilgængelige muligheder.
Eksempel:
const locale = navigator.language || 'en-US';
const numberFormat = new Intl.NumberFormat(locale);
Hvis brugerens foretrukne sprogindstilling ikke er tilgængelig, kan du angive en fallback-sprogindstilling. Du kan f.eks. bruge 'en-US' som standard, hvis brugerens browser rapporterer en ikke-understøttet sprogindstilling.
2. Udnyt Intl.DateTimeFormat til Dato- og Tidsformatering
Formatering af datoer og tidspunkter korrekt er afgørende for at levere en lokaliseret oplevelse. Intl.DateTimeFormat
-objektet giver dig mulighed for at formatere datoer og tidspunkter i henhold til konventionerne i en specifik sprogindstilling.
Du kan tilpasse formateringen ved at angive forskellige indstillinger, f.eks. formatet for år, måned, dag, time, minut og sekund. Du kan også angive tidszonen for at sikre, at datoer og tidspunkter vises korrekt for brugere i forskellige dele af 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 eksempel formaterer den aktuelle dato og tid i henhold til den tyske (Tyskland) sprogindstilling, inklusive år, måned, dag, time og minut. Det angiver også 'Europe/Berlin'-tidszonen.
Husk at tage hensyn til forskellige dato- og tidsformater, der bruges rundt om i verden. For eksempel bruger USA MM/DD/YYYY, mens mange andre lande bruger DD/MM/YYYY.
3. Brug Intl.NumberFormat til Tal-, Valuta- og Procentformatering
Intl.NumberFormat
-objektet giver en fleksibel måde at formatere tal, valutaer og procenter i henhold til sprogspecifikke konventioner. Du kan tilpasse formateringen ved at angive indstillinger som f.eks. valutaen, stilen (decimal, valuta eller procent), minimums- og maksimumsbrøkdifferencer og mere.
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. "¥12,346"
console.log(formattedAmount);
Dette eksempel formaterer tallet 12345,67 som japanske yen (JPY). Bemærk, hvordan valutasymbolet (¥) og gruppeseparator (,) automatisk justeres i henhold til den japanske sprogindstilling.
Eksempel (Procentformatering):
const locale = 'ar-EG'; // Arabisk (Egypten)
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. "٧٥٫٠٠٪"
console.log(formattedPercentage);
Dette eksempel formaterer tallet 0,75 som en procent i arabisk (Egypten). Outputtet indeholder det arabiske procenttegn (٪) og to decimaler.
Vigtige Overvejelser for Valutaformatering:
- Valutakoder: Brug de korrekte ISO 4217-valutakoder (f.eks. USD, EUR, JPY).
- Placering af symboler: Vær opmærksom på, at valutasymbolets position varierer på tværs af sprogindstillinger (f.eks. før eller efter beløbet).
- Decimalseparatorer og gruppeseparatorer: Forstå de forskellige konventioner for decimalseparatorer (f.eks. punktum eller komma) og gruppeseparatorer (f.eks. komma eller punktum).
4. Håndter Pluralisering Korrekt med Intl.PluralRules
Pluraliseringsregler varierer betydeligt på tværs af sprog. For eksempel har engelsk enkle regler med entals- og flertalsformer, mens andre sprog har mere komplekse regler baseret på tallets værdi. Intl.PluralRules
-objektet hjælper dig med at bestemme den korrekte flertalsform for et givet tal og en given sprogindstilling.
Eksempel:
const locale = 'ru-RU'; // Russisk (Rusland)
const pluralRules = new Intl.PluralRules(locale);
function getPluralForm(count) {
const rule = pluralRules.select(count);
switch (rule) {
case 'one': return 'товар'; // tovar (entals)
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 eksempel demonstrerer, hvordan du bruger Intl.PluralRules
til at få den korrekte flertalsform for ordet "товар" (vare) på russisk. Russisk har forskellige flertalsformer afhængigt af om tallet ender på 1, 2-4 eller 5-9.
5. Formater Lister med Intl.ListFormat
Når du præsenterer lister over elementer, kan formateringen variere på tværs af sprogindstillinger. Intl.ListFormat
-objektet giver dig mulighed for at formatere lister i henhold til sprogspecifikke konventioner, herunder brugen af forskellige konjunktioner (f.eks. "og", "eller") og listeseparatorer (f.eks. kommaer, semikolon).
Eksempel:
const locale = 'es-ES'; // Spansk (Spanien)
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 eksempel formaterer en liste over frugter på spansk (Spanien) ved hjælp af konjunktionen "y" (og) til at forbinde de sidste to elementer.
6. Formater Relative Tidspunkter med Intl.RelativeTimeFormat
Visning af relative tidspunkter (f.eks. "i går", "om 2 timer") giver en brugervenlig måde at præsentere tidsinformation på. Intl.RelativeTimeFormat
-objektet giver dig mulighed for at formatere relative tidspunkter i henhold til sprogspecifikke konventioner.
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 eksempel formaterer relative tidspunkter på fransk (Canada). Outputtet viser "hier" (i går) og "dans 2 jours" (om 2 dage).
Indstillingen `numeric` styrer, hvordan tal vises. `'auto'` viser relative ord, når de er tilgængelige (som "i går"), og ellers tal. `'always'` viser altid tal.
7. Sorter Strenge med Intl.Collator
Sammenligning af strenge er sprogspecifik. Den måde, strenge sorteres på, varierer afhængigt af sproget. For eksempel sorteres tegnet "ä" på tysk typisk som "a", mens det på svensk sorteres efter "z". Intl.Collator
-objektet giver dig mulighed for at sammenligne strenge i henhold til reglerne for en bestemt sprogindstilling.
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 eksempel sorterer en række tyske ord ved hjælp af Intl.Collator
. Bemærk, at "äpfel" sorteres før "aprikosen", selvom "ä" kommer senere i alfabetet.
8. Håndter Grænsetilfælde og Manglende Data
Ikke alle sprogindstillinger understøttes af alle browsere eller miljøer. Det er vigtigt at håndtere grænsetilfælde, hvor en sprogindstilling ikke er tilgængelig, eller når data mangler. Overvej følgende strategier:
- Angiv Fallback-sprogindstillinger: Angiv en standards sprogindstilling, der skal bruges, når brugerens foretrukne sprogindstilling ikke understøttes.
- Nedgrader elegant: Hvis specifikke formateringsindstillinger ikke understøttes for en sprogindstilling, skal du angive et fornuftigt fallback. Du kan f.eks. vise en dato i et mindre detaljeret format.
- Brug Try-Catch-blokke: Omslut Intl API-kald i try-catch-blokke for at håndtere potentielle fejl på en elegant måde.
9. Test Grundigt med Forskellige Sprogindstillinger
Grundig testning er afgørende for at sikre, at din internationaliserede applikation fungerer korrekt for alle understøttede sprogindstillinger. Test din applikation med en række sprogindstillinger, herunder sprog, der bruger forskellige tegnsæt, dato- og tidsformater, talformater og pluraliseringsregler.
Overvej at bruge automatiserede testværktøjer til at verificere, at din applikation fungerer som forventet i forskellige sprogindstillinger.
10. Overvej Ydelsesimplikationer
Selvom Intl API generelt er effektivt, kan oprettelse af Intl-objekter være relativt dyrt. For at optimere ydeevnen skal du overveje følgende:
- Cache Intl-objekter: Opret Intl-objekter én gang, og genbrug dem, når det er muligt, i stedet for at oprette nye objekter for hver formateringshandling.
- Lazy Load Sprogindstillingsdata: Indlæs kun sprogindstillingsdata, når det er nødvendigt, i stedet for at indlæse alle sprogindstillingsdata på forhånd.
Ud over Intl API: Yderligere Overvejelser for Internationalisering
Selvom Intl API tilbyder kraftfulde værktøjer til formatering af data, involverer internationalisering mere end blot formatering. Overvej følgende yderligere aspekter:
- Tekstretning (RTL/LTR): Understøt højre-til-venstre (RTL)-sprog som arabisk og hebraisk ved hjælp af CSS til at justere layoutet af din applikation.
- Tegnkodning: Brug UTF-8-kodning for at sikre, at din applikation kan håndtere en lang række tegn.
- Oversættelsesstyring: Brug et oversættelsesstyringssystem til at strømline processen med at oversætte din applikations tekst.
- Kulturelt Følsomt Design: Vær opmærksom på kulturelle forskelle, når du designer din applikation. For eksempel kan farvesymbolik variere på tværs af kulturer.
Konklusion
JavaScript Intl API er et uvurderligt værktøj til at bygge webapplikationer, der henvender sig til et globalt publikum. Ved at følge den bedste praksis, der er beskrevet i denne artikel, kan du oprette applikationer, der ikke kun er funktionelle, men også kulturelt følsomme og brugervenlige for brugere over hele verden. Omfavn kraften i Intl API og frigør potentialet i din applikation på den globale scene. At mestre Intl API vil resultere i en mere inkluderende og tilgængelig oplevelse for alle dine brugere, uanset deres placering eller sprog.