Register and manage language data for browser environments and query supported languages. Essential for browser-based applications that need selective language loading for optimal performance.
Registers language data for use in browser environments. Required before using name-related functions in browser contexts.
/**
* Register locale data for browser environment
* @param localeData - Object containing locale identifier and country name mappings
* @throws TypeError if localeData.locale or localeData.countries is missing
*/
function registerLocale(localeData: LocaleData): void;
interface LocaleData {
locale: string;
countries: { [alpha2Key: string]: string | string[] };
}Usage Examples:
const countries = require("i18n-iso-countries");
// Register English locale
countries.registerLocale(require("i18n-iso-countries/langs/en.json"));
// Register multiple locales
countries.registerLocale(require("i18n-iso-countries/langs/fr.json"));
countries.registerLocale(require("i18n-iso-countries/langs/de.json"));
countries.registerLocale(require("i18n-iso-countries/langs/es.json"));
// Now you can use name functions
console.log(countries.getName("US", "en")); // "United States of America"
console.log(countries.getName("US", "fr")); // "États-Unis"
console.log(countries.getName("US", "de")); // "Vereinigte Staaten von Amerika"
// Custom locale data registration
const customLocale = {
locale: "test",
countries: {
"US": "Test United States",
"GB": ["Test United Kingdom", "Test UK"],
"DE": "Test Germany"
}
};
countries.registerLocale(customLocale);
console.log(countries.getName("US", "test")); // "Test United States"
console.log(countries.getName("GB", "test", { select: "alias" })); // "Test UK"const countries = require("i18n-iso-countries");
// Missing locale property
try {
countries.registerLocale({
countries: { "US": "United States" }
});
} catch (error) {
console.log(error.message); // "Missing localeData.locale"
}
// Missing countries property
try {
countries.registerLocale({
locale: "en"
});
} catch (error) {
console.log(error.message); // "Missing localeData.countries"
}
// Invalid structure - countries must be an object
try {
countries.registerLocale({
locale: "en",
countries: "invalid"
});
} catch (error) {
console.log(error.message); // "Missing localeData.countries"
}Retrieves the complete list of language codes supported by the library.
/**
* Get all supported language codes
* @returns Array of ISO 639-1 language codes supported by the library
*/
function getSupportedLanguages(): string[];Usage Examples:
const countries = require("i18n-iso-countries");
const supportedLangs = countries.getSupportedLanguages();
console.log(supportedLangs.length); // 79
// Check if a language is supported
function isLanguageSupported(langCode) {
return supportedLangs.includes(langCode);
}
console.log(isLanguageSupported("en")); // true
console.log(isLanguageSupported("fr")); // true
console.log(isLanguageSupported("xx")); // false
// Display supported languages
console.log("Supported languages:", supportedLangs.join(", "));
// Output: br, cy, dv, sw, eu, af, am, ha, ku, ml, mt, no, ps, sd, so, sq, ta, tg, tt, ug, ur, vi, ar, az, be, bg, bn, bs, ca, cs, da, de, el, en, es, et, fa, fi, fr, ga, gl, he, hi, hr, hu, hy, id, is, it, ja, ka, kk, km, ko, ky, lt, lv, mk, mn, mr, ms, nb, nl, nn, pl, pt, ro, ru, sk, sl, sr, sv, th, tk, tr, uk, uz, zh
// Iterate through supported languages
supportedLangs.forEach(lang => {
console.log(`Language: ${lang}`);
});Retrieves the list of currently registered/loaded language codes in the current environment.
/**
* Get currently registered language codes
* @returns Array of language codes that have been registered in the current session
*/
function langs(): string[];Usage Examples:
const countries = require("i18n-iso-countries");
// Initially, in browser environment, no languages are registered
console.log(countries.langs()); // []
// Register some languages
countries.registerLocale(require("i18n-iso-countries/langs/en.json"));
countries.registerLocale(require("i18n-iso-countries/langs/fr.json"));
// Now these languages are available
console.log(countries.langs()); // ["en", "fr"]
// Register more languages
countries.registerLocale(require("i18n-iso-countries/langs/de.json"));
countries.registerLocale(require("i18n-iso-countries/langs/es.json"));
console.log(countries.langs()); // ["en", "fr", "de", "es"]
// Check if specific language is registered
function isLanguageRegistered(langCode) {
return countries.langs().includes(langCode);
}
console.log(isLanguageRegistered("en")); // true
console.log(isLanguageRegistered("zh")); // false (not registered yet)In Node.js, all supported languages are automatically pre-loaded:
const countries = require("i18n-iso-countries");
// All 79 languages are immediately available
console.log(countries.langs().length); // 79
console.log(countries.getSupportedLanguages().length); // 79
// langs() and getSupportedLanguages() return the same list
console.log(countries.langs().sort());
console.log(countries.getSupportedLanguages().sort());
// Both return the same 79 language codes
// No registration needed
console.log(countries.getName("US", "zh")); // Works immediately
console.log(countries.getName("US", "ar")); // Works immediatelyIn browser environments, languages must be manually registered:
const countries = require("i18n-iso-countries");
// Initially no languages registered
console.log(countries.langs()); // []
console.log(countries.getSupportedLanguages().length); // 79 (full list available)
// Functions return undefined for unregistered languages
console.log(countries.getName("US", "en")); // undefined
// Register required languages
countries.registerLocale(require("i18n-iso-countries/langs/en.json"));
countries.registerLocale(require("i18n-iso-countries/langs/fr.json"));
// Now registered languages work
console.log(countries.langs()); // ["en", "fr"]
console.log(countries.getName("US", "en")); // "United States of America"
console.log(countries.getName("US", "fr")); // "États-Unis"
console.log(countries.getName("US", "de")); // undefined (not registered)Understanding the structure of locale data files helps with custom registrations:
// Example structure of a locale file (en.json)
const enLocale = {
"locale": "en",
"countries": {
"AF": "Afghanistan",
"AL": "Albania",
"DZ": "Algeria",
// ... more countries with single names
"GB": ["United Kingdom", "UK", "Great Britain"], // Country with aliases
// ... more countries
}
};
// Countries can have either:
// 1. Single name (string): "Germany"
// 2. Multiple names (array): ["United Kingdom", "UK", "Great Britain"]
// - First element is the official name
// - Additional elements are aliases// Bundle size optimization - only load needed languages
const countries = require("i18n-iso-countries");
// Application supports English, French, and Spanish
const supportedAppLanguages = ["en", "fr", "es"];
// Load only required languages
supportedAppLanguages.forEach(lang => {
countries.registerLocale(require(`i18n-iso-countries/langs/${lang}.json`));
});
// Verify registration
console.log("Loaded languages:", countries.langs());
// Create language validation function
function validateLanguage(langCode) {
return countries.langs().includes(langCode);
}async function loadLanguage(langCode) {
// Check if already registered
if (countries.langs().includes(langCode)) {
return true;
}
// Check if language is supported
if (!countries.getSupportedLanguages().includes(langCode)) {
throw new Error(`Language '${langCode}' is not supported`);
}
try {
// Dynamically import and register
const localeData = require(`i18n-iso-countries/langs/${langCode}.json`);
countries.registerLocale(localeData);
return true;
} catch (error) {
throw new Error(`Failed to load language '${langCode}': ${error.message}`);
}
}
// Usage
async function getCountryNameWithLazyLoading(countryCode, langCode) {
await loadLanguage(langCode);
return countries.getName(countryCode, langCode);
}
// Example
getCountryNameWithLazyLoading("US", "de").then(name => {
console.log(name); // "Vereinigte Staaten von Amerika"
});The library uses ISO 639-1 language codes. Here's the complete list of supported languages:
function safeRegisterLocale(langCode) {
try {
// Check if already registered
if (countries.langs().includes(langCode)) {
return { success: true, message: `Language '${langCode}' already registered` };
}
// Check if supported
if (!countries.getSupportedLanguages().includes(langCode)) {
return { success: false, message: `Language '${langCode}' is not supported` };
}
// Load and register
const localeData = require(`i18n-iso-countries/langs/${langCode}.json`);
countries.registerLocale(localeData);
return { success: true, message: `Language '${langCode}' registered successfully` };
} catch (error) {
return { success: false, message: `Failed to register '${langCode}': ${error.message}` };
}
}
// Usage
console.log(safeRegisterLocale("en")); // { success: true, message: "Language 'en' registered successfully" }
console.log(safeRegisterLocale("xx")); // { success: false, message: "Language 'xx' is not supported" }