3 votes

Enveloppez la fonction du module et changez son retour

Je suis en train d'utiliser node-i18n-iso-countries et je veux remplacer la fonction getNames qui prend 2 arguments pour pouvoir gérer un nouveau nom de pays que je veux ajouter.

Actuellement, je le fais simplement avec une déclaration if-else de cette façon :

let countryName = country === 'countryName' ? 'countryName' 
: isoCountries.getName(code, lang);

Y a-t-il un moyen plus optimal de le faire? par exemple en enveloppant la fonction isoCountries.getName?

Je suis nouveau en TypeScript et en enveloppement de fonction. Donc une réponse avec un extrait de code / une question existante pourrait aider s'il vous plaît!

0voto

lepsch Points 337

Il est possible d'enregistrer un paramètre régional avec registerLocale et de remplacer les langues nécessaires par un nouveau pays dans la liste des pays déjà définis.

Solution 1

Faites-le comme ceci en important directement le JSON.

import isoCountries, { LocaleData } from 'i18n-iso-countries'
import enJson from 'i18n-iso-countries/langs/en.json'

const localeData: LocaleData = enJson;
localeData.countries['AA'] = 'Nom du pays de test'
isoCountries.registerLocale(localeData)
console.log(isoCountries.getName('AA', 'en'))
// ^ Affiche : Nom du pays de test

Solution 2

Si l'importation d'un JSON n'est pas possible, reconstruisez les données locales à partir de zéro comme ceci :

import isoCountries, { LocaleData } from 'i18n-iso-countries'

const localeData: LocaleData = {
  locale: 'en',
  countries: isoCountries.getNames('en', { select: 'all' }),
};
localeData.countries['AA'] = 'Nom du pays de test'
isoCountries.registerLocale(localeData)
console.log(isoCountries.getName('AA', 'en'))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X