The LanguagesClient class provides methods for fetching language data from the YouVersion Platform API. It returns information about supported languages, including BCP 47 language codes, scripts, country associations, and display names.
// Get English language detailsconst english = await languagesClient.getLanguage('en');console.log(english.id); // "en"console.log(english.display_names?.en); // "English"console.log(english.text_direction); // "ltr"console.log(english.countries); // ["US", "GB", "CA", ...]console.log(english.default_bible_id); // Default English Bible version ID
Some languages have multiple scripts (e.g., Serbian, Azerbaijani):
const language = await languagesClient.getLanguage('sr');if (language.scripts && language.scripts.length > 1) { console.log(`${language.id} has multiple scripts:`); for (const script of language.scripts) { const langWithScript = `${language.language}-${script}`; try { const variant = await languagesClient.getLanguage(langWithScript); console.log(` ${script}: ${variant.script_name}`); } catch (error) { // Script variant might not be available } }}
Fetch specific fields for performance
When you don’t need all language metadata, specify only required fields:
// Only need language IDs and display names for a dropdownconst languages = await languagesClient.getLanguages({ page_size: '*', fields: ['id', 'display_names']});// Much faster and uses less bandwidth
Filter by country for relevant languages
Show only languages relevant to the user’s region:
// Detect user's country (from IP, browser, or user preference)const userCountry = 'US';// Get languages for that countryconst regionalLanguages = await languagesClient.getLanguages({ country: userCountry});console.log(`Languages in ${userCountry}:`);regionalLanguages.data.forEach(lang => { console.log(` - ${lang.display_names?.en}`);});
Build a language selector UI
Use language data to create an internationalized language picker:
async function buildLanguageSelector(userLocale: string = 'en') { const languages = await languagesClient.getLanguages({ page_size: '*', fields: ['id', 'display_names', 'default_bible_id'] }); // Filter to languages with Bibles const withBibles = languages.data.filter(l => l.default_bible_id); // Sort by display name in user's locale return withBibles .map(lang => ({ id: lang.id, name: lang.display_names?.[userLocale] || lang.display_names?.en || lang.id, bibleId: lang.default_bible_id })) .sort((a, b) => a.name.localeCompare(b.name));}// Use in UIconst options = await buildLanguageSelector('es');// Render dropdown with options