Fetch all Languages of the World (ISO 639) as Java Array

Recently i needed a Java Array of all Languages, containing some unique id.

I found that ISO 639 is exactly what i needed. The list is offered by the Library of Congress in a CSV like Format (link).

So i parsed this data and thought that maybe someone can use this, either the Java Array or the Code as Example for parsing external data with JavaScript.

 Demo:

To fetch the list i used Ben Almans JSONP Proxy and Ben Nadels CSVToArray Function.

Code:

<html>
  <head>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
 
    <!--- --------------------------------------------------------------------------------------- ----
      CSVToArray Function Source:
 
      Blog Entry:  Ask Ben: Parsing CSV Strings With Javascript Exec() Regular Expression Command  
      Author:  Ben Nadel / Kinky Solutions  
      Link:http://www.bennadel.com/index.cfm?event=blog.view&id=1504  
    ---- --------------------------------------------------------------------------------------- ---->
    <script type="text/javascript">
 
      // This will parse a delimited string into an array of
      // arrays. The default delimiter is the comma, but this
      // can be overriden in the second argument.
      function CSVToArray( strData, strDelimiter ){
        // Check to see if the delimiter is defined. If not,
        // then default to comma.
        strDelimiter = (strDelimiter || ",");
 
        // Create a regular expression to parse the CSV values.
        var objPattern = new RegExp(
          (
            // Delimiters.
            "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
 
            // Quoted fields.
            "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
 
            // Standard fields.
            "([^\"\\" + strDelimiter + "\\r\\n]*))"
          ),
          "gi"
          );
 
 
        // Create an array to hold our data. Give the array
        // a default empty first row.
        var arrData = [[]];
 
        // Create an array to hold our individual pattern
        // matching groups.
        var arrMatches = null;
 
 
        // Keep looping over the regular expression matches
        // until we can no longer find a match.
        while (arrMatches = objPattern.exec( strData )){
 
          // Get the delimiter that was found.
          var strMatchedDelimiter = arrMatches[ 1 ];
 
          // Check to see if the given delimiter has a length
          // (is not the start of string) and if it matches
          // field delimiter. If id does not, then we know
          // that this delimiter is a row delimiter.
          if (
            strMatchedDelimiter.length &&
            (strMatchedDelimiter != strDelimiter)
            ){
 
            // Since we have reached a new row of data,
            // add an empty row to our data array.
            arrData.push( [] );
 
          }
 
 
          // Now that we have our delimiter out of the way,
          // let's check to see which kind of value we
          // captured (quoted or unquoted).
          if (arrMatches[ 2 ]){
 
            // We found a quoted value. When we capture
            // this value, unescape any double quotes.
            var strMatchedValue = arrMatches[ 2 ].replace(
              new RegExp( "\"\"", "g" ),
              "\""
              );
 
          } else {
 
            // We found a non-quoted value.
            var strMatchedValue = arrMatches[ 3 ];
 
          }
 
 
          // Now that we have our value string, let's add
          // it to the data array.
          arrData[ arrData.length - 1 ].push( strMatchedValue );
        }
 
        // Return the parsed data.
        return( arrData );
      }
 
    </script>
 
    <script>
      function fetch(url) {
        jQuery.getJSON( "/ba-simple-proxy.php?url=" + encodeURI(url), function(data){     
          js_arr = CSVToArray(data.contents, '|');
          json = JSON.stringify(js_arr);
          java_arr_str = json.replace(/\[/g,"{").replace(/\]/g,"}");
          jQuery('#result').html(java_arr_str);
        });
      }
    </script>
  </head>
  <body>
    <input id="url" type="text" size="60" value="http://www.loc.gov/standards/iso639-2/ISO-639-2_utf-8.txt"> <br />
    <input type="button" value="Fetch!" onclick="fetch(jQuery('#url').val()); return false;"> <br />
    <br />    
    <textarea id="result" cols="80" rows="20" readonly="readonly" onClick="this.select();"></textarea>
  <body>
</html>

Leave a Reply

Your email address will not be published. Required fields are marked *