我有一个 Django 表单,我在其中使用 Jquery Validation Plugin 进行验证。我的表单需要以多种语言显示,并且我允许用户通过单击按钮来更改表单语言(每种可能的语言一个按钮)。每种语言都有一个单独的脚本要加载,以允许内置验证消息以该语言显示。例如,如果我希望这个插件的默认验证消息是俄语的,我会加载"https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/localization/messages_ru.min.js"
脚本。
我的问题如下:
- 我真的应该像下面那样将新脚本附加到标题部分吗?然后,如果用户在语言按钮上来回单击,我的 DOM 中将会有一堆完全不必要的脚本,它们会被最后加载的脚本覆盖。这有问题吗?画风不好?有一个更好的方法吗?
- 如果他们单击“英语”按钮,我不确定该怎么做,因为在这种情况下,我必须摆脱所有其他语言脚本,使其默认为英语。有没有一种简单的方法可以做到这一点?我想过遍历 header 的所有孩子并取出所有最后一个,直到我回到引导程序(这是我在这些脚本之前的最后一个),但是如果我或其他人选择添加另一个脚本到头了,这段代码会乱的……
也许有一些方法可以在标题中为这些脚本保留一个特定的空间,我可以根据用户单击的按钮替换或删除该空间中的内容?
- 有没有办法在脚本源中使用变量?除了指定语言的两个字母之外,它们都完全相同,所以我觉得我的代码非常多余。
- 我也不确定如何将已单击的元素传递给我的 ChangeValidationLanguage 方法。
到目前为止,为了根据按钮单击加载正确的脚本,我所拥有的 js 代码是这样的:
window.onload = function() {
document.getElementsByClassName('btn-outline-secondary').setAttribute('onclick', "ChangeValidationLanguage()");
};
function ChangeValidationLanguage(element) {
var head = document.getElementsByTagName('head')[0];
var js = document.createElement("script");
js.type = "text/javascript";
if (element.id === '#form_ru') {
js.src = "https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/localization/messages_ru.min.js";
}
else if (element.id === '#form_fr'){
js.src = "https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/localization/messages_fr.min.js";
}
else if (element.id === '#form_es'){
js.src = "https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/localization/messages_es.min.js";
}
else if (element.id === '#form_he'){
js.src = "https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/localization/messages_he.min.js";
}
// else{ //if (element.id === '#form_en')
// js.src = ""
// }
head.appendChild(js);
}
我在 html 中的按钮如下所示:
<div class="language-buttons">
<form action="/i18n/setlang/" method="post" id="form_en" style="display:inline!important;">
<input type="hidden" name="csrfmiddlewaretoken" value="...">
<input name="next" type="hidden" value="" />
<input name="language" type="hidden" value="en" />
</form>
<a><button class="btn-outline-secondary" type="submit" form="form_en" value="Submit">English </button></a>
<form action="/i18n/setlang/" method="post" id="form_ru" style="display:inline!important;">
<input type="hidden" name="csrfmiddlewaretoken" value="...">
<input name="next" type="hidden" value="" />
<input name="language" type="hidden" value="ru" />
</form>
<a><button class="btn-outline-secondary" type="submit" form="form_ru" value="Submit">Русский </button></a>
<form action="/i18n/setlang/" method="post" id="form_fr" style="display:inline!important;">
<input type="hidden" name="csrfmiddlewaretoken" value="...">
<input name="next" type="hidden" value="" />
<input name="language" type="hidden" value="fr" />
</form>
<a><button class="btn-outline-secondary" type="submit" form="form_fr" value="Submit">français </button></a>
<form action="/i18n/setlang/" method="post" id="form_es" style="display:inline!important;">
<input type="hidden" name="csrfmiddlewaretoken" value="...">
<input name="next" type="hidden" value="" />
<input name="language" type="hidden" value="es" />
</form>
<a><button class="btn-outline-secondary" type="submit" form="form_es" value="Submit">español </button></a>
<form action="/i18n/setlang/" method="post" id="form_he" style="display:inline!important;">
<input type="hidden" name="csrfmiddlewaretoken" value="...">
<input name="next" type="hidden" value="" />
<input name="language" type="hidden" value="he" />
</form>
<a><button class="btn-outline-secondary" type="submit" form="form_he" value="Submit">עברית </button></a>
</div>
谢谢!