def read(self, fileName, **kwargs):
        """
        Interprets the specified file (script or model or mixed) As a side
        effect, it invalidates all entities (as the passed file can contain any
        arbitrary command); the lists of entities will be re-populated lazily
        (at first access).

        Args:
            fileName: Full path to the file.

        Raises:
            RuntimeError: in case the file does not exist.
        """
        if self._langext is not None:
            with open(fileName, 'r') as fin:
                newmodel = self._langext.translate(fin.read(), **kwargs)
                with open(fileName+'.translated', 'w') as fout:
                    fout.write(newmodel)
                    fileName += '.translated'
        lock_and_call(
            lambda: self._impl.read(fileName),
            self._lock
        )
        self._errorhandler_wrapper.check()