Skip to content

Instantly share code, notes, and snippets.

@marcingolenia
Last active June 23, 2022 08:23
Show Gist options
  • Save marcingolenia/93b4569dcb8bcd1f1dcd8b42f0f8da7c to your computer and use it in GitHub Desktop.
Save marcingolenia/93b4569dcb8bcd1f1dcd8b42f0f8da7c to your computer and use it in GitHub Desktop.
countries-utils.ts
import nationalities from 'i18n-nationality/langs/en.json'
import countries from 'i18n-iso-countries/langs/en.json'
import {
getName as getNationality,
registerLocale as registerNationality
} from 'i18n-nationality'
import {
getName as getCountry,
registerLocale as registerCountry
} from 'i18n-iso-countries'
import {getNames as getNationalities} from 'i18n-nationality'
import {getNames as getCountries} from 'i18n-iso-countries'
type UpperCaseCharacter =
| 'A'
| 'B'
| 'C'
| 'D'
| 'E'
| 'F'
| 'G'
| 'H'
| 'I'
| 'J'
| 'K'
| 'L'
| 'M'
| 'N'
| 'O'
| 'P'
| 'Q'
| 'R'
| 'S'
| 'T'
| 'U'
| 'V'
| 'W'
| 'X'
| 'Y'
| 'Z'
export type IsoCode = `${UpperCaseCharacter}${UpperCaseCharacter}`
registerCountry(countries)
registerNationality(nationalities)
export const isoToCountryName = (iso: IsoCode) => getCountry(iso, 'en')
export const isoToNationalityName = (iso: IsoCode) => getNationality(iso, 'en')
export const listNationalities = () => getNationalities('en') as {[_ in IsoCode]: string}
export const listCountries = () => getCountries('en') as {[_ in IsoCode]: string}
export const listNationalitiesArray = () => Object.entries(listNationalities()) as [IsoCode, string][]
export const listCountriesArray = () => Object.entries(listCountries()) as [IsoCode, string][]
// TESTS
import {
isoToCountryName,
isoToNationalityName,
listCountries,
listCountriesArray,
listNationalities,
listNationalitiesArray
} from '@src/localization-utils'
import {expect} from 'chai'
describe('Country ISO Codes', () => {
it('can be converted to country name', () => {
expect(isoToCountryName('PL')).equals('Poland')
})
it('can be converted to nationality name', () => {
expect(isoToNationalityName('PL')).equals('Polish')
})
it('countries can be listed', () => {
let countries = listCountries()
expect(countries['PL']).to.equal('Poland')
expect(countries.DK).to.equal('Denmark')
})
it('nationalities can be listed', () => {
let nationalities = listNationalities()
expect(nationalities['PL']).to.equal('Polish')
expect(nationalities.DK).to.equal('Danish')
})
it('nationalities array can be retrieved', () => {
let nationalities = listNationalitiesArray()
expect(nationalities.filter(([iso, _]) => iso == 'PL')[0][1]).to.equal(
'Polish'
)
})
it('countries array can be retrieved', () => {
let countries = listCountriesArray()
expect(countries.filter(([iso, _]) => iso == 'PL')[0][1]).to.equal('Poland')
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment