Merge pull request #1 from wikimedia/isKnown

Add isKnown method
This commit is contained in:
Niklas Laxström
2017-10-10 16:25:21 +03:00
committed by GitHub
2 changed files with 22 additions and 4 deletions

View File

@@ -4,13 +4,24 @@ var languageData = require( './language-data.json' );
* Utility functions for querying language data. * 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? * Is this language a redirect to another language?
* @param {string} language Language code * @param {string} language Language code
* @return {string} Target language code if it's a redirect or false if it's not * @return {string} Target language code if it's a redirect or false if it's not
*/ */
function isRedirect( language ) { 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 ) { if ( target ) {
return getScript( target ); return getScript( target );
} }
if ( !languageData.languages[ language ] ) { if ( !isKnown( language ) ) {
// Undetermined // Undetermined
return 'Zyyy'; return 'Zyyy';
} }
@@ -40,7 +51,7 @@ function getRegions( language ) {
if ( target ) { if ( target ) {
return getRegions( 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 ) { if ( target ) {
return getAutonym( 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, getRegions,
getScript, getScript,
getScriptGroupOfLanguage, getScriptGroupOfLanguage,
isKnown,
isRedirect, isRedirect,
isRtl, isRtl,
sortByAutonym sortByAutonym

View File

@@ -85,6 +85,12 @@ describe( 'languagedata', function () {
} }
return result; 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 () { it( 'autonyms', function () {
var autonyms; var autonyms;
// Add a language in run time. // Add a language in run time.