[Solved] How to write a object to storage?

Posted on
  • Working on an app called locale that will handle locales , so we can see eg month, day names and more in our language.

    Writing single values work's like expected, but looks like not using the correct way to write a list.

    So how should this be written correctly?

    // source 
    s = require('Storage');
    
    var locale =  {
      "de_DE": {
        dp : ',',
        ts : '.',
        cs : '€',
        ics : 'EUR',
        sp : 'km',
        ds : 'mm,cm,m,km',
        t : '°C',
        ap: 0,
        mo : "Januar,Februar,März,April,Mai,Juni,Juli­,August,September,Oktober,November,Dezem­ber",
        mos : "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt­,Nov,Dez",
        dy : "Sonntag,Montag,Dienstag,Mittwoch,Donner­stag,Freitag,Samstag",
        dys : "So,Mo,Di,Mi,Do,Fr,Sa",
        tr : {
            yes: 'ja', Yes : 'Ja',
            no: 'nein', No : 'Nein',
            ok : 'ok',
            on : 'an',
            off: 'aus'
        }
      }
    };
    
    lang = "de_DE";
    
    s.write('locale',`
    exports.name = function() {return '${lang}'};
    exports.temp = function(n){return n + '${locale[lang].tr}';};
    exports.translate = function(t){return ${locale[lang].tr}[t];};
    `);
    
    
    /*
    console.log(require('locale').name());
    console.log(require('locale').translate(­"yes"));
    console.log(require('locale').temp(25.5)­);
    */
    
    //translate = function(t) { return locale[lang].tr[t];};
    
    
    console.log(s.read('locale'));
    console.log(require('locale').temp(25.5)­);
    console.log(require('locale').translate(­"yes"));
    
    
    /* output
    exports.name = function() {return 'de_DE'};
    exports.temp = function(n){return n + '[object Object]';};
    exports.translate = function(t){return [object Object][t];};
    25.5[object Object]
    Uncaught ReferenceError: "object" is not defined
     at line 1 col 2
    [object Object][t];
     ^
    in function "translate" called from line 48 col 46
    console.log(require('locale').translate(­"yes"));
                                                 ^
    */
    
  • So I guess the issue is:

    s.write('locale',`
    exports.name = function() {return '${lang}'};
    exports.temp = function(n){return n + '${locale[lang].tr}';};
    exports.translate = function(t){return ${locale[lang].tr}[t];};
    `);
    

    You want something more like:

    s.write('locale',`
    exports.name = function() {return ${JSON.stringify(lang)}};
    exports.temp = function(n){return n + ${JSON.stringify(locale[lang].t)};};
    exports.translate = function(t){return ${JSON.stringify(locale[lang].tr}[t]);};­
    `);
    

    Generally it's safer to use JSON.stringify than to try and quote it yourself :)

  • Cool - Thanks

    s.write('locale',`
            exports.name = function() {return ${JSON.stringify(lang)};};
            exports.temp = function(n){return n + ${JSON.stringify(locale[lang].t)};};
            exports.translate = function(t) { return ${JSON.stringify(locale[lang].tr)}[t]);}­;
    `);
    
    
  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

[Solved] How to write a object to storage?

Posted by Avatar for MaBe @MaBe

Actions