🕵️ SicherheitslückenWeb Application Firewall Rule Bypass in Jetpack WAF Runtime(17.09.2026 um 16:34 Uhr)
🕵️ SicherheitslückenCross-Site Request Forgery in WooCommerce Product and Term Ordering(17.09.2026 um 16:34 Uhr)
🕵️ SicherheitslückenUnescaped Output in Enable Media Replace Error View(17.09.2026 um 16:34 Uhr)
🕵️ SicherheitslückenStored Cross-Site Scripting in WooCommerce Order Notes REST API v4(17.09.2026 um 16:34 Uhr)
🕵️ SicherheitslückenUnescaped Attribute Output in Enable Media Replace Upsell View(17.09.2026 um 16:34 Uhr)
🕵️ SicherheitslückenWeb Application Firewall Rule Bypass in Jetpack WAF Runtime(17.09.2026 um 16:34 Uhr)
🕵️ SicherheitslückenCross-Site Request Forgery in WooCommerce Product and Term Ordering(17.09.2026 um 16:34 Uhr)
🕵️ SicherheitslückenUnescaped Output in Enable Media Replace Error View(17.09.2026 um 16:34 Uhr)
🕵️ SicherheitslückenStored Cross-Site Scripting in WooCommerce Order Notes REST API v4(17.09.2026 um 16:34 Uhr)
🕵️ SicherheitslückenUnescaped Attribute Output in Enable Media Replace Upsell View(17.09.2026 um 16:34 Uhr)
🔧 Programmierung 🕛 vor 2 Jahren 4 Min Lesezeit
0

Sauver mon i18n en le typant

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

L'internationalisation (i18n) est un aspect crucial du développement web moderne. Cet article explore comment implémenter une solution i18n typée en utilisant la bibliothèque typed-locale dans une application React.






Introduction à typed-locale



typed-locale est une bibliothèque d'internationalisation légère et typée, conçue pour fonctionner avec TypeScript. Elle fournit une API pour gérer les traductions avec une sécurité de type pour les clés et les variables.






Mise en place du projet



Créons un nouveau projet React en utilisant Vite avec TypeScript :




CODE
npm create vite@latest my-i18n-app -- --template react-ts
cd my-i18n-app
npm install






Maintenant, installons typed-locale :




CODE
npm install typed-locale









Définition des traductions



Créez un nouveau fichier appelé translations.ts dans le dossier src :




CODE
// src/translations.ts
import { InferTranslation, plural } from 'typed-locale';

export const en = {
greeting: 'Hello, {{name}}!',
itemCount: plural({
none: 'You have no items.',
one: 'You have one item.',
other: 'You have {{count}} items.',
}),
nav: {
home: 'Home',
about: 'About',
contact: 'Contact',
},
} as const;

export type Translation = InferTranslation<typeof en>;

export const fr: Translation = {
greeting: 'Bonjour, {{name}} !',
itemCount: plural({
none: 'Vous n'avez aucun article.',
one:
'Vous avez un article.',
other:
'Vous avez {{count}} articles.',
}),
nav: {
home:
'Accueil',
about:
'À propos',
contact:
'Contact',
},
};









Création du traducteur



Créons maintenant un hook personnalisé pour utiliser nos traductions. Créez un nouveau fichier appelé useTranslator.ts :




CODE
// src/useTranslator.ts
import { createTranslatorFromDictionary } from 'typed-locale';
import { useMemo } from 'react';
import { en, fr, Translation } from './translations';

const dictionary = { en, fr };

export const useTranslator = (locale: keyof typeof dictionary) => {
return useMemo(() =>
createTranslatorFromDictionary<Translation>({
dictionary,
locale,
defaultLocale: 'en',
}),
[locale]
);
};









Utilisation du traducteur dans les composants



Maintenant, utilisons notre traducteur dans un composant React. Mettez à jour votre App.tsx :




CODE
// src/App.tsx
import React, { useState } from 'react';
import { useTranslator } from './useTranslator';

const App: React.FC = () => {
const [locale, setLocale] = useState<'en' | 'fr'>('en');
const [itemCount, setItemCount] = useState(0);
const translator = useTranslator(locale);

return (
<div>
<select value={locale} onChange={(e) => setLocale(e.target.value as 'en' | 'fr')}>
<option value="en">English</option>
<option value="fr">Français</option>
</select>

<nav>
<ul>
<li>{translator(t => t.nav.home)}</li>
<li>{translator(t => t.nav.about)}</li>
<li>{translator(t => t.nav.contact)}</li>
</ul>
</nav>

<h1>{translator(t => t.greeting, { name: 'World' })}</h1>

<p>{translator(t => t.itemCount, { count: itemCount })}</p>
<button onClick={() => setItemCount(itemCount + 1)}>Add Item</button>
<button onClick={() => setItemCount(Math.max(0, itemCount - 1))}>Remove Item</button>
</div>
);
};

export default App;









Fonctionnalités de sécurité de type



typed-locale offre plusieurs fonctionnalités de sécurité de type :




  1. Auto-complétion pour les clés de traduction : L'IDE fournit des suggestions d'auto-complétion pour toutes les clés de traduction disponibles.


  2. Vérification de type pour les variables : TypeScript détecte l'utilisation incorrecte des variables :





CODE
   // Ceci provoquera une erreur TypeScript
translator(t => t.greeting, { wrongVariable: 'World' });







  1. Traductions imbriquées : Le système de types comprend les traductions imbriquées, permettant translator(t => t.nav.home).


  2. Pluralisation : La traduction itemCount démontre comment typed-locale gère la pluralisation, en sélectionnant automatiquement la forme plurielle correcte en fonction de la valeur de count.







Avantages techniques



L'approche typée utilisant typed-locale offre plusieurs avantages techniques :




  1. Détection des erreurs à la compilation : Les erreurs liées aux traductions sont détectées lors de la compilation plutôt qu'à l'exécution.


  2. Amélioration de l'expérience développeur : L'auto-complétion pour les clés de traduction améliore la productivité.


  3. Support de refactoring : Les outils de refactoring de TypeScript fonctionnent parfaitement avec les clés de traduction.


  4. Prévention des fautes de frappe dans les clés : L'approche par callback élimine les fautes de frappe dans les chaînes de caractères pour les clés de traduction.


  5. Taille de bundle réduite : Avec seulement 1 Ko, typed-locale a un impact minimal sur la taille de l'application.


  6. Indépendant du framework : Bien que cet exemple utilise React, typed-locale peut être utilisé avec n'importe quel framework JavaScript ou en JavaScript vanilla.







Conclusion



L'implémentation de l'i18n avec une approche typée utilisant typed-locale fournit une solution robuste pour gérer les traductions dans les projets TypeScript. En tirant parti du système de types, les développeurs peuvent créer des applications internationalisées plus fiables tout en maintenant la qualité du code et la productivité.

Vollständiger Original-Artikel
Den kompletten Beitrag mit allen Details direkt auf dev.to lesen.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
1 Quelle
Bolt.new launches Forge to widen who gets to build with AI
1 Quelle
Common Pitfalls in RAG Applications: What to Avoid When Using Vector Search and Embeddings
1 Quelle
Turn Your Android Phone Into a Local Development Server With Termux
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Sauver mon i18n en le typant

Thematisch verwandte Begriffe: Sauver, i18n, typant · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...