Problems with dynamic loading in JavaScript

后端 未结 3 719
执笔经年
执笔经年 2021-01-05 21:47

I am a JavaScript newbie and learn by working on a pure JavaScript \"project\" that calculates mathematical functions. It all works well. Now, as a further step, I

3条回答
  •  走了就别回头了
    2021-01-05 22:28

    I found the right answer to my question using the info from GarethOwen. Here are the code modifications I had to do:

    
    
    	
    		
    		Test languages
    		
    		
    		
    		
    		
    		
    	
    	
    	
    		
    Please press [F12] so that you can see the test results.

    1. TestLanguage.html: Augmented the body tag

      
      
    2. TestLanguage.js: 2a. Added the load() function requested by the HTML page now:

      var gCodes = ['de', 'en', 'tr'];
      function load() {
          console.log("load()");
          for (var i = 0; i < codes.length; i++) {
              new Language(codes[i]);
          }
      }
      

    2b. Using the global gCodes variable also in the output() function

    1. Language.js: To test the whole better, I made the code in the function Language a little bit more elaborate by changing the line in the constructor in function Language(language) to:

        // Load the proper language file:
        if (eval("gLoaded.indexOf('" + language + "') < 0")) {
          loadFile("js/resources/lang." + language + ".js");
          gLoaded[gLoaded.length] = language;
      }
      

    Thank you for your support! :-)

    //Lang/js/Lang.js:
    "use strict";
    
    /**
     * Object for multilingual message handling.
     *
     * @param language
     */
    function Language(language) {
      var __construct = function(dynamicLoad) {
        if (typeof language == 'undefined') {
          language = "en";
        }
        // Load the proper language file:
        switch (language) {
          case "de":
            loadFile("js/resources/lang.de.js");
            break;
          case "tr":
            loadFile("js/resources/lang.tr.js");
            break;
          default:
            loadFile("js/resources/lang.en.js");
        }
        return;
      }()
    
      /**
       * Returns the language of that object.
       *
       * @returns The language
       */
      this.getLanguage = function() {
        var strLanguage;
    
        switch (language) {
          case "de":
            strLanguage = "German";
            break;
          case "tr":
            strLanguage = "Turkish";
            break;
          default:
            strLanguage = "English";
        }
        return strLanguage;
      }
    
      /**
       * Returns the language code of that object.
       *
       * @returns The language code
       */
      this.getString = function(tag, strDefault) {
        var strReturn = eval('eval(language).' + tag);
    
        if (typeof strReturn != 'undefined') {
          return strReturn;
        } else {
          return (typeof strDefault != 'undefined') ? strDefault : eval('en.' + tag);
        }
      }
    }
    
    //Lang/js/TestLang.js:
    "use strict";
    
    var gCodes = ['de', 'en', 'tr'];
    
    function load() {
      console.log("load()");
    
      for (var i = 0; i < gCodes.length; i++) {
        new Language(gCodes[i]);
      }
    }
    
    /**
     * Object for multilingual message handling.
     *
     * @param language
     */
    function output() {
        console.log("output()");
    
        for (var i = 0; i < gCodes.length; i++) {
          var translator = new Language(gCodes[i]);
    
          var message = "output(): in " + translator.getLanguage() + ": ";
    
          message += translator.getString('pleaseWait');
    
          console.log(message);
        }
      }
      //Utils/Files/js/FileUtils.js:
    "use strict";
    
    /**
     * Object with file utilities
     *
     * @param filepathname
     */
    function loadFile(filepathname) {
      var methodName = "loadFile(" + filepathname + "): "
      var reference = document.createElement('script');
    
      reference.setAttribute("type", "text/javascript");
      reference.setAttribute("src", filepathname);
    
      if (typeof reference != 'undefined') {
        document.getElementsByTagName("head")[0].appendChild(reference);
      }
    
      reference.onload = function() {
        console.log(methodName + "onload(): Language script loaded and ready!");
      }
    }

    Here is the console output:

    Here is the output:
    load()
    loadFile(js/resources/lang.de.js): onload(): Language script loaded and ready!
    loadFile(js/resources/lang.en.js): onload(): Language script loaded and ready!
    loadFile(js/resources/lang.tr.js): onload(): Language script loaded and ready!
    output()
    output(): in German: Bitte warten...
    output(): in English: Please wait...
    output(): in Turkish: Lütfen bekleyiniz...
    loadFile(js/resources/lang.de.js): onload(): Language script loaded and ready!
    loadFile(js/resources/lang.en.js): onload(): Language script loaded and ready!
    loadFile(js/resources/lang.tr.js): onload(): Language script loaded and ready!
    

提交回复
热议问题