def trans(self, id, parameters=None, domain=None, locale=None):
        """
        Throws RuntimeError whenever a message is missing
        """
        if parameters is None:
            parameters = {}

        if locale is None:
            locale = self.locale
        else:
            self._assert_valid_locale(locale)

        if domain is None:
            domain = 'messages'

        catalogue = self.get_catalogue(locale)
        if not catalogue.has(id, domain):
            raise RuntimeError(
                "There is no translation for {0} in domain {1}".format(
                    id,
                    domain
                )
            )

        msg = self.get_catalogue(locale).get(id, domain)
        return self.format(msg, parameters)