Skip to content

Instantly share code, notes, and snippets.

@Chizaruu
Last active November 13, 2024 09:22
Show Gist options
  • Select an option

  • Save Chizaruu/3324a299864d6f6842ee55a52810ad07 to your computer and use it in GitHub Desktop.

Select an option

Save Chizaruu/3324a299864d6f6842ee55a52810ad07 to your computer and use it in GitHub Desktop.
The World's langauges in one neat typescript array.
interface Language {
label: string;
value: string;
iso639_1?: string;
iso639_2: string;
}
const languages: Language[] = [
{
label: 'Afrikaans',
value: 'afrikaans',
iso639_1: 'af',
iso639_2: 'afr'
},
{
label: 'Albanian',
value: 'albanian',
iso639_1: 'sq',
iso639_2: 'alb'
},
{
label: 'Amharic',
value: 'amharic',
iso639_1: 'am',
iso639_2: 'amh'
},
{
label: 'Arabic',
value: 'arabic',
iso639_1: 'ar',
iso639_2: 'ara'
},
{
label: 'Arabic (Egyptian)',
value: 'arabic-egyptian',
iso639_1: 'ar',
iso639_2: 'arz'
},
{
label: 'Arabic (Modern Standard)',
value: 'arabic-modern',
iso639_1: 'ar',
iso639_2: 'arb'
},
{
label: 'Armenian',
value: 'armenian',
iso639_1: 'hy',
iso639_2: 'arm'
},
{
label: 'Assamese',
value: 'assamese',
iso639_1: 'as',
iso639_2: 'asm'
},
{
label: 'Aymara',
value: 'aymara',
iso639_1: 'ay',
iso639_2: 'aym'
},
{
label: 'Azerbaijani',
value: 'azerbaijani',
iso639_1: 'az',
iso639_2: 'aze'
},
{
label: 'Bambara',
value: 'bambara',
iso639_1: 'bm',
iso639_2: 'bam'
},
{
label: 'Basque',
value: 'basque',
iso639_1: 'eu',
iso639_2: 'eus'
},
{
label: 'Belarusian',
value: 'belarusian',
iso639_1: 'be',
iso639_2: 'bel'
},
{
label: 'Bengali',
value: 'bengali',
iso639_1: 'bn',
iso639_2: 'ben'
},
{
label: 'Bhojpuri',
value: 'bhojpuri',
iso639_2: 'bho'
},
{
label: 'Bislama',
value: 'bislama',
iso639_1: 'bi',
iso639_2: 'bis'
},
{
label: 'Bosnian',
value: 'bosnian',
iso639_1: 'bs',
iso639_2: 'bos'
},
{
label: 'Breton',
value: 'breton',
iso639_1: 'br',
iso639_2: 'bre'
},
{
label: 'Bulgarian',
value: 'bulgarian',
iso639_1: 'bg',
iso639_2: 'bul'
},
{
label: 'Burmese',
value: 'burmese',
iso639_1: 'my',
iso639_2: 'mya'
},
{
label: 'Catalan',
value: 'catalan',
iso639_1: 'ca',
iso639_2: 'cat'
},
{
label: 'Cebuano',
value: 'cebuano',
iso639_2: 'ceb'
},
{
label: 'Chamorro',
value: 'chamorro',
iso639_1: 'ch',
iso639_2: 'cha'
},
{
label: 'Chechen',
value: 'chechen',
iso639_1: 'ce',
iso639_2: 'che'
},
{
label: 'Cherokee',
value: 'cherokee',
iso639_2: 'chr'
},
{
label: 'Chinese (Cantonese)',
value: 'chinese-cantonese',
iso639_2: 'yue'
},
{
label: 'Chinese (Mandarin)',
value: 'chinese-mandarin',
iso639_1: 'zh',
iso639_2: 'cmn'
},
{
label: 'Chinese (Min Nan)',
value: 'chinese-min-nan',
iso639_2: 'nan'
},
{
label: 'Chinese (Simplified)',
value: 'chinese-simplified',
iso639_1: 'zh',
iso639_2: 'zho'
},
{
label: 'Chinese (Traditional)',
value: 'chinese-traditional',
iso639_1: 'zh',
iso639_2: 'zho'
},
{
label: 'Chichewa',
value: 'chichewa',
iso639_1: 'ny',
iso639_2: 'nya'
},
{
label: 'Corsican',
value: 'corsican',
iso639_1: 'co',
iso639_2: 'cos'
},
{
label: 'Croatian',
value: 'croatian',
iso639_1: 'hr',
iso639_2: 'hrv'
},
{
label: 'Czech',
value: 'czech',
iso639_1: 'cs',
iso639_2: 'ces'
},
{
label: 'Danish',
value: 'danish',
iso639_1: 'da',
iso639_2: 'dan'
},
{
label: 'Dari',
value: 'dari',
iso639_1: 'fa',
iso639_2: 'prs'
},
{
label: 'Dhivehi',
value: 'dhivehi',
iso639_1: 'dv',
iso639_2: 'div'
},
{
label: 'Dutch',
value: 'dutch',
iso639_1: 'nl',
iso639_2: 'nld'
},
{
label: 'Dzongkha',
value: 'dzongkha',
iso639_1: 'dz',
iso639_2: 'dzo'
},
{
label: 'English',
value: 'english',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'English (Australia)',
value: 'english-australian',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'English (Canada)',
value: 'english-canadian',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'English (India)',
value: 'english-indian',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'English (Ireland)',
value: 'english-irish',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'English (New Zealand)',
value: 'english-newzealand',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'English (Scotland)',
value: 'english-scotland',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'English (South Africa)',
value: 'english-southafrica',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'English (UK)',
value: 'english-uk',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'English (US)',
value: 'english-us',
iso639_1: 'en',
iso639_2: 'eng'
},
{
label: 'Esperanto',
value: 'esperanto',
iso639_1: 'eo',
iso639_2: 'epo'
},
{
label: 'Estonian',
value: 'estonian',
iso639_1: 'et',
iso639_2: 'est'
},
{
label: 'Ewe',
value: 'ewe',
iso639_1: 'ee',
iso639_2: 'ewe'
},
{
label: 'Faroese',
value: 'faroese',
iso639_1: 'fo',
iso639_2: 'fao'
},
{
label: 'Fijian',
value: 'fijian',
iso639_1: 'fj',
iso639_2: 'fij'
},
{
label: 'Filipino',
value: 'filipino',
iso639_2: 'fil'
},
{
label: 'Finnish',
value: 'finnish',
iso639_1: 'fi',
iso639_2: 'fin'
},
{
label: 'French',
value: 'french',
iso639_1: 'fr',
iso639_2: 'fra'
},
{
label: 'French (Belgium)',
value: 'french-belgian',
iso639_1: 'fr',
iso639_2: 'fra'
},
{
label: 'French (Canadian)',
value: 'french-canadian',
iso639_1: 'fr',
iso639_2: 'fra'
},
{
label: 'French (Swiss)',
value: 'french-swiss',
iso639_1: 'fr',
iso639_2: 'fra'
},
{
label: 'Frisian',
value: 'frisian',
iso639_1: 'fy',
iso639_2: 'fry'
},
{
label: 'Fulah',
value: 'fulah',
iso639_1: 'ff',
iso639_2: 'ful'
},
{
label: 'Galician',
value: 'galician',
iso639_1: 'gl',
iso639_2: 'glg'
},
{
label: 'Georgian',
value: 'georgian',
iso639_1: 'ka',
iso639_2: 'kat'
},
{
label: 'German',
value: 'german',
iso639_1: 'de',
iso639_2: 'deu'
},
{
label: 'German (Austria)',
value: 'german-austria',
iso639_1: 'de',
iso639_2: 'deu'
},
{
label: 'German (Swiss)',
value: 'german-swiss',
iso639_1: 'de',
iso639_2: 'deu'
},
{
label: 'Greek',
value: 'greek',
iso639_1: 'el',
iso639_2: 'ell'
},
{
label: 'Greenlandic',
value: 'greenlandic',
iso639_1: 'kl',
iso639_2: 'kal'
},
{
label: 'Guarani',
value: 'guarani',
iso639_1: 'gn',
iso639_2: 'grn'
},
{
label: 'Gujarati',
value: 'gujarati',
iso639_1: 'gu',
iso639_2: 'guj'
},
{
label: 'Haitian Creole',
value: 'haitian-creole',
iso639_1: 'ht',
iso639_2: 'hat'
},
{
label: 'Hausa',
value: 'hausa',
iso639_1: 'ha',
iso639_2: 'hau'
},
{
label: 'Hawaiian',
value: 'hawaiian',
iso639_2: 'haw'
},
{
label: 'Hebrew',
value: 'hebrew',
iso639_1: 'he',
iso639_2: 'heb'
},
{
label: 'Hindi',
value: 'hindi',
iso639_1: 'hi',
iso639_2: 'hin'
},
{
label: 'Hmong',
value: 'hmong',
iso639_2: 'hmn'
},
{
label: 'Hungarian',
value: 'hungarian',
iso639_1: 'hu',
iso639_2: 'hun'
},
{
label: 'Icelandic',
value: 'icelandic',
iso639_1: 'is',
iso639_2: 'isl'
},
{
label: 'Igbo',
value: 'igbo',
iso639_1: 'ig',
iso639_2: 'ibo'
},
{
label: 'Ilocano',
value: 'ilocano',
iso639_2: 'ilo'
},
{
label: 'Indonesian',
value: 'indonesian',
iso639_1: 'id',
iso639_2: 'ind'
},
{
label: 'Inuktitut',
value: 'inuktitut',
iso639_1: 'iu',
iso639_2: 'iku'
},
{
label: 'Irish',
value: 'irish',
iso639_1: 'ga',
iso639_2: 'gle'
},
{
label: 'Italian',
value: 'italian',
iso639_1: 'it',
iso639_2: 'ita'
},
{
label: 'Japanese',
value: 'japanese',
iso639_1: 'ja',
iso639_2: 'jpn'
},
{
label: 'Javanese',
value: 'javanese',
iso639_1: 'jv',
iso639_2: 'jav'
},
{
label: 'Kannada',
value: 'kannada',
iso639_1: 'kn',
iso639_2: 'kan'
},
{
label: 'Kashmiri',
value: 'kashmiri',
iso639_1: 'ks',
iso639_2: 'kas'
},
{
label: 'Kazakh',
value: 'kazakh',
iso639_1: 'kk',
iso639_2: 'kaz'
},
{
label: 'Khmer',
value: 'khmer',
iso639_1: 'km',
iso639_2: 'khm'
},
{
label: 'Kinyarwanda',
value: 'kinyarwanda',
iso639_1: 'rw',
iso639_2: 'kin'
},
{
label: 'Korean',
value: 'korean',
iso639_1: 'ko',
iso639_2: 'kor'
},
{
label: 'Kurdish',
value: 'kurdish',
iso639_1: 'ku',
iso639_2: 'kur'
},
{
label: 'Kurdish (Sorani)',
value: 'kurdish-sorani',
iso639_2: 'ckb'
},
{
label: 'Kyrgyz',
value: 'kyrgyz',
iso639_1: 'ky',
iso639_2: 'kir'
},
{
label: 'Lao',
value: 'lao',
iso639_1: 'lo',
iso639_2: 'lao'
},
{
label: 'Latin',
value: 'latin',
iso639_1: 'la',
iso639_2: 'lat'
},
{
label: 'Latvian',
value: 'latvian',
iso639_1: 'lv',
iso639_2: 'lav'
},
{
label: 'Lingala',
value: 'lingala',
iso639_1: 'ln',
iso639_2: 'lin'
},
{
label: 'Lithuanian',
value: 'lithuanian',
iso639_1: 'lt',
iso639_2: 'lit'
},
{
label: 'Luxembourgish',
value: 'luxembourgish',
iso639_1: 'lb',
iso639_2: 'ltz'
},
{
label: 'Macedonian',
value: 'macedonian',
iso639_1: 'mk',
iso639_2: 'mkd'
},
{
label: 'Malagasy',
value: 'malagasy',
iso639_1: 'mg',
iso639_2: 'mlg'
},
{
label: 'Malay',
value: 'malay',
iso639_1: 'ms',
iso639_2: 'msa'
},
{
label: 'Malayalam',
value: 'malayalam',
iso639_1: 'ml',
iso639_2: 'mal'
},
{
label: 'Maltese',
value: 'maltese',
iso639_1: 'mt',
iso639_2: 'mlt'
},
{
label: 'Maori',
value: 'maori',
iso639_1: 'mi',
iso639_2: 'mri'
},
{
label: 'Marathi',
value: 'marathi',
iso639_1: 'mr',
iso639_2: 'mar'
},
{
label: 'Marshallese',
value: 'marshallese',
iso639_1: 'mh',
iso639_2: 'mah'
},
{
label: 'Mongolian',
value: 'mongolian',
iso639_1: 'mn',
iso639_2: 'mon'
},
{
label: 'Nauru',
value: 'nauru',
iso639_1: 'na',
iso639_2: 'nau'
},
{
label: 'Navajo',
value: 'navajo',
iso639_1: 'nv',
iso639_2: 'nav'
},
{
label: 'Nepali',
value: 'nepali',
iso639_1: 'ne',
iso639_2: 'nep'
},
{
label: 'Northern Sami',
value: 'northern-sami',
iso639_1: 'se',
iso639_2: 'sme'
},
{
label: 'Norwegian',
value: 'norwegian',
iso639_1: 'no',
iso639_2: 'nor'
},
{
label: 'Norwegian (Nynorsk)',
value: 'norwegian-nynorsk',
iso639_1: 'nn',
iso639_2: 'nno'
},
{
label: 'Occitan',
value: 'occitan',
iso639_1: 'oc',
iso639_2: 'oci'
},
{
label: 'Odia',
value: 'odia',
iso639_1: 'or',
iso639_2: 'ori'
},
{
label: 'Oromo',
value: 'oromo',
iso639_1: 'om',
iso639_2: 'orm'
},
{
label: 'Pashto',
value: 'pashto',
iso639_1: 'ps',
iso639_2: 'pus'
},
{
label: 'Persian',
value: 'persian',
iso639_1: 'fa',
iso639_2: 'per'
},
{
label: 'Polish',
value: 'polish',
iso639_1: 'pl',
iso639_2: 'pol'
},
{
label: 'Portuguese',
value: 'portuguese',
iso639_1: 'pt',
iso639_2: 'por'
},
{
label: 'Portuguese (Brazil)',
value: 'portuguese-brazil',
iso639_1: 'pt',
iso639_2: 'por'
},
{
label: 'Portuguese (Angola)',
value: 'portuguese-angola',
iso639_1: 'pt',
iso639_2: 'por'
},
{
label: 'Punjabi',
value: 'punjabi',
iso639_1: 'pa',
iso639_2: 'pan'
},
{
label: 'Quechua',
value: 'quechua',
iso639_1: 'qu',
iso639_2: 'que'
},
{
label: 'Romanian',
value: 'romanian',
iso639_1: 'ro',
iso639_2: 'ron'
},
{
label: 'Romansh',
value: 'romansh',
iso639_1: 'rm',
iso639_2: 'roh'
},
{
label: 'Russian',
value: 'russian',
iso639_1: 'ru',
iso639_2: 'rus'
},
{
label: 'Samoan',
value: 'samoan',
iso639_1: 'sm',
iso639_2: 'smo'
},
{
label: 'Sanskrit',
value: 'sanskrit',
iso639_1: 'sa',
iso639_2: 'san'
},
{
label: 'Scots',
value: 'scots',
iso639_2: 'sco'
},
{
label: 'Scottish Gaelic',
value: 'scottish-gaelic',
iso639_1: 'gd',
iso639_2: 'gla'
},
{
label: 'Serbian',
value: 'serbian',
iso639_1: 'sr',
iso639_2: 'srp'
},
{
label: 'Shona',
value: 'shona',
iso639_1: 'sn',
iso639_2: 'sna'
},
{
label: 'Sindhi',
value: 'sindhi',
iso639_1: 'sd',
iso639_2: 'snd'
},
{
label: 'Sinhala',
value: 'sinhala',
iso639_1: 'si',
iso639_2: 'sin'
},
{
label: 'Slovak',
value: 'slovak',
iso639_1: 'sk',
iso639_2: 'slk'
},
{
label: 'Slovenian',
value: 'slovenian',
iso639_1: 'sl',
iso639_2: 'slv'
},
{
label: 'Somali',
value: 'somali',
iso639_1: 'so',
iso639_2: 'som'
},
{
label: 'Spanish',
value: 'spanish',
iso639_1: 'es',
iso639_2: 'spa'
},
{
label: 'Spanish (Argentina)',
value: 'spanish-argentina',
iso639_1: 'es',
iso639_2: 'spa'
},
{
label: 'Spanish (Latin America)',
value: 'spanish-latin-america',
iso639_1: 'es',
iso639_2: 'spa'
},
{
label: 'Spanish (Mexico)',
value: 'spanish-mexico',
iso639_1: 'es',
iso639_2: 'spa'
},
{
label: 'Sundanese',
value: 'sundanese',
iso639_1: 'su',
iso639_2: 'sun'
},
{
label: 'Swahili',
value: 'swahili',
iso639_1: 'sw',
iso639_2: 'swa'
},
{
label: 'Swedish',
value: 'swedish',
iso639_1: 'sv',
iso639_2: 'swe'
},
{
label: 'Tagalog',
value: 'tagalog',
iso639_1: 'tl',
iso639_2: 'tgl'
},
{
label: 'Tajik',
value: 'tajik',
iso639_1: 'tg',
iso639_2: 'tgk'
},
{
label: 'Tamil',
value: 'tamil',
iso639_1: 'ta',
iso639_2: 'tam'
},
{
label: 'Tatar',
value: 'tatar',
iso639_1: 'tt',
iso639_2: 'tat'
},
{
label: 'Telugu',
value: 'telugu',
iso639_1: 'te',
iso639_2: 'tel'
},
{
label: 'Thai',
value: 'thai',
iso639_1: 'th',
iso639_2: 'tha'
},
{
label: 'Tibetan',
value: 'tibetan',
iso639_1: 'bo',
iso639_2: 'bod'
},
{
label: 'Tigrinya',
value: 'tigrinya',
iso639_1: 'ti',
iso639_2: 'tir'
},
{
label: 'Tongan',
value: 'tongan',
iso639_1: 'to',
iso639_2: 'ton'
},
{
label: 'Turkish',
value: 'turkish',
iso639_1: 'tr',
iso639_2: 'tur'
},
{
label: 'Turkmen',
value: 'turkmen',
iso639_1: 'tk',
iso639_2: 'tuk'
},
{
label: 'Twi',
value: 'twi',
iso639_1: 'tw',
iso639_2: 'twi'
},
{
label: 'Ukrainian',
value: 'ukrainian',
iso639_1: 'uk',
iso639_2: 'ukr'
},
{
label: 'Urdu',
value: 'urdu',
iso639_1: 'ur',
iso639_2: 'urd'
},
{
label: 'Uyghur',
value: 'uyghur',
iso639_1: 'ug',
iso639_2: 'uig'
},
{
label: 'Uzbek',
value: 'uzbek',
iso639_1: 'uz',
iso639_2: 'uzb'
},
{
label: 'Valencian',
value: 'valencian',
iso639_2: 'cat'
},
{
label: 'Venda',
value: 'venda',
iso639_1: 've',
iso639_2: 'ven'
},
{
label: 'Vietnamese',
value: 'vietnamese',
iso639_1: 'vi',
iso639_2: 'vie'
},
{
label: 'Volapük',
value: 'volapuk',
iso639_1: 'vo',
iso639_2: 'vol'
},
{
label: 'Walloon',
value: 'walloon',
iso639_1: 'wa',
iso639_2: 'wln'
},
{
label: 'Welsh',
value: 'welsh',
iso639_1: 'cy',
iso639_2: 'cym'
},
{
label: 'Wolof',
value: 'wolof',
iso639_1: 'wo',
iso639_2: 'wol'
},
{
label: 'Xhosa',
value: 'xhosa',
iso639_1: 'xh',
iso639_2: 'xho'
},
{
label: 'Yiddish',
value: 'yiddish',
iso639_1: 'yi',
iso639_2: 'yid'
},
{
label: 'Yoruba',
value: 'yoruba',
iso639_1: 'yo',
iso639_2: 'yor'
},
{
label: 'Zhuang',
value: 'zhuang',
iso639_1: 'za',
iso639_2: 'zha'
},
{
label: 'Zulu',
value: 'zulu',
iso639_1: 'zu',
iso639_2: 'zul'
}
];
// Type validation
type LanguageValidation = Record<'label' | 'value' | 'iso639_2', string> & {
iso639_1?: string;
};
// Validate and export
const validateLanguages = (langs: LanguageValidation[]): Language[] => {
// Additional validation could be added here
return langs;
};
const validatedLanguages = validateLanguages(languages);
export default validatedLanguages;
// Utility types and functions
export type { Language };
export const getLanguageByCode = (code: string): Language | undefined => {
return validatedLanguages.find((lang) => lang.iso639_1 === code || lang.iso639_2 === code);
};
export const getLanguageByValue = (value: string): Language | undefined => {
return validatedLanguages.find((lang) => lang.value === value);
};
export const getAllLanguagesWithCode = (code: string): Language[] => {
return validatedLanguages.filter((lang) => lang.iso639_1 === code || lang.iso639_2 === code);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment