public String generate(BusinessRule businessRule) {
        String language = businessRule.getLanguage().toLowerCase();
        StringTemplate templateForLanguage = getTemplateForLanguage(language);

        boolean unfilledAttributes = true;
        Map<String, String> attributes = templateForLanguage.getAttributes();

        while (unfilledAttributes) {
            for (Map.Entry<String, String> attribute : attributes.entrySet()) {
                if (attribute.getValue().equals("empty")) {
                    if (!execute(attribute.getKey(), businessRule, language, templateForLanguage)) {
                        templateForLanguage.setAttribute(attribute.getKey(), translator.getTranslationForElement(attribute.getKey(), language));
                    }
                }
            }

            templateForLanguage = new StringTemplate(templateForLanguage.render());
            attributes = templateForLanguage.getAttributes();

            unfilledAttributes = (!templateForLanguage.checkAllAttributes());
        }

        return templateForLanguage.render();
    }