nl_tokens: Updates all translations to include all msgids found in code
pl_tokens: function ( library , locales ) { const Promisify = qx . tool . compiler . utils . Promisify ; return Promise . all ( locales . map ( locale => { var translation = new qx . tool . compiler . app . Translation ( library , locale ) ; return translation . read ( ) . then ( ( ) => { let unusedEntries = { } ; for ( let msgid in translation . getEntries ( ) ) unusedEntries [ msgid ] = true ; return Promise . all ( this . __classes . map ( async classname => { if ( ! classname . startsWith ( library . getNamespace ( ) ) ) { return ; } let dbClassInfo = await Promisify . call ( cb => this . getClassInfo ( classname , cb ) ) ; if ( ! dbClassInfo . translations ) return ; dbClassInfo . translations . forEach ( function ( src ) { var <mask> = translation . getOrCreateEntry ( src . msgid ) ; delete unusedEntries [ src . msgid ] ; if ( src . msgid_plural ) { entry . msgid_plural = src . msgid_plural ; } if ( ! entry . comments ) { entry . comments = { } ; } entry . comments . extracted = src . comment ; entry . comments . reference = { } ; let ref = entry . comments . reference ; const fileName = classname . replace ( / \. / g , "/" ) + ".js" ; const fnAddReference = lineNo => { let arr = ref [ fileName ] ; if ( ! arr ) arr = ref [ fileName ] = [ ] ; if ( ! arr . includes ( src . lineNo ) ) { arr . push ( lineNo ) ; } } ; if ( qx . lang . Type . isArray ( src . lineNo ) ) { src . lineNo . forEach ( fnAddReference ) ; } else { fnAddReference ( src . lineNo ) ; } } ) ; } ) ) . then ( ( ) => { Object . keys ( unusedEntries ) . forEach ( msgid => { var entry = translation . getEntry ( msgid ) ; if ( entry ) { if ( ! entry . comments ) { entry . comments = { } ; } entry . comments . extracted = "NO LONGER USED" ; entry . comments . reference = { } ; } } ) ; } ) ; } ) . then ( ( ) => translation . write ( ) ) ; } ) ) ; }