diff --git a/index.js b/index.js index cd5b9b1..1df72e8 100644 --- a/index.js +++ b/index.js @@ -4,13 +4,24 @@ var languageData = require( './language-data.json' ); * Utility functions for querying language data. */ +/** + * Check whether the languageCode is known to the language database. + * For practical purposes it may be same as checking if given language code is valid, + * but not guaranteed that all valid language codes are in our database. + * @param {string} languageCode language code + * @return {boolean} + */ +function isKnown( languageCode ) { + return !!languageData.languages[ languageCode ]; +} + /** * Is this language a redirect to another language? * @param {string} language Language code * @return {string} Target language code if it's a redirect or false if it's not */ function isRedirect( language ) { - return ( languageData.languages[ language ] !== undefined && languageData.languages[ language ].length === 1 ) ? languageData.languages[ language ][ 0 ] : false; + return ( isKnown( language ) && languageData.languages[ language ].length === 1 ) ? languageData.languages[ language ][ 0 ] : false; } /** @@ -23,7 +34,7 @@ function getScript( language ) { if ( target ) { return getScript( target ); } - if ( !languageData.languages[ language ] ) { + if ( !isKnown( language ) ) { // Undetermined return 'Zyyy'; } @@ -40,7 +51,7 @@ function getRegions( language ) { if ( target ) { return getRegions( target ); } - return ( languageData.languages[ language ] && languageData.languages[ language ][ 1 ] ) || 'UNKNOWN'; + return ( isKnown( language ) && languageData.languages[ language ][ 1 ] ) || 'UNKNOWN'; } /** @@ -53,7 +64,7 @@ function getAutonym( language ) { if ( target ) { return getAutonym( target ); } - return ( languageData.languages[ language ] && languageData.languages[ language ][ 2 ] ) || language; + return ( isKnown( language ) && languageData.languages[ language ][ 2 ] ) || language; } /** @@ -255,6 +266,7 @@ module.exports = { getRegions, getScript, getScriptGroupOfLanguage, + isKnown, isRedirect, isRtl, sortByAutonym diff --git a/test/index.js b/test/index.js index 1fe6f5a..c86aa13 100644 --- a/test/index.js +++ b/test/index.js @@ -85,6 +85,12 @@ describe( 'languagedata', function () { } return result; }; + + it( 'language tags', function () { + assert.ok( languageData.isKnown( 'ar' ), 'Language is unknown' ); + assert.ok( !languageData.isKnown( 'unknownLanguageCode!' ), 'Language is known' ); + } ); + it( 'autonyms', function () { var autonyms; // Add a language in run time.