更改 HTML 页面语言
Change HTML Page Language
我想制作一个英文页面,上面有一个可以将语言更改为德语的按钮。我已经阅读了数千篇关于这个主题的文章,但我还没有找到答案。我确定我不想使用 Google 翻译器 API 或任何 API。我想用纯 JS 来实现。我只想问你是怎么做到的?使用一个有很多行的按钮来逐个更改元素的文本:
function changeLang () { document.getElementById('someid').innerHTML = "some German text"; ... }
或者用 const transLang { from = "en" to = "de" ...}
来实现?
如果您知道如何启动它,请告诉我。
对于“纯 JS”解决方案,换句话说 none 通常的解决方案:
- 否 Ajax 获取翻译后的页面文本/替换 html
- 不重定向到可以处理布局不一致的不同页面
一个选项是将翻译存储在每个 div 上并使用 .text()
切换它们。不要将您的翻译编码到您的 javascript 中,因为那样很快就无法维护。
function switchLang(lang)
{
$("[data-" + lang + "]").text(function(i, e) {
return $(this).data(lang);
});
}
switchLang("en");
$(".switchlang").click(function() {
// change the button caption here, eg a flag
// UX opinion of whether it should be what it is
// or what it will become
// ie "de" click to make it "de"
// or "de" it's currently "de", click to change it
$(this).text($(this).data("lang"));
// switch to other language based on language on the button
var lang = $(this).data("lang") == "de" ? "en" : "de";
$(this).data("lang", lang);
switchLang(lang)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span data-de="Um die Nachrichten zu lesen"
data-en="To read the news"></span>,
<span data-de="Übersetzungsdienst nicht verfügbar"
data-en="click here"></span>
<hr/>
<div data-en="no de translation for this line"></div>
<hr/>
<button class='switchlang' data-lang="en">de</button>
然后您可以轻松添加新语言,而无需更改任何代码(这次使用单独的按钮)
var defaultlang = "en";
function switchLang(lang)
{
$("[data-" + lang + "]").text(function(i, e) {
return $(this).data(lang);
});
}
switchLang("en");
$(".switchlang").click(function() {
switchLang($(this).data("lang"))
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span data-de="Um die Nachrichten zu lesen"
data-es="Para leer las noticias"
data-en="To read the news"></span>,
<span data-de="Übersetzungsdienst nicht verfügbar"
data-es="haga clic aquí"
data-en="click here"></span>
<hr/>
<div data-es="no hay traducción para esta línea"
data-en="no de translation for this line"></div>
<hr/>
<button class='switchlang' data-lang="en">en</button>
<button class='switchlang' data-lang="de">de</button>
<button class='switchlang' data-lang="es">es</button>
您可能更喜欢直接在 HTML 中默认语言,而不是在启动时,例如:
<span data-de="speichern">save</span>
然后在加载时将原件存储在 .data("en")
中。这将删除对您的场景可能很重要的 FOUC(加载页面时的延迟)。
我想制作一个英文页面,上面有一个可以将语言更改为德语的按钮。我已经阅读了数千篇关于这个主题的文章,但我还没有找到答案。我确定我不想使用 Google 翻译器 API 或任何 API。我想用纯 JS 来实现。我只想问你是怎么做到的?使用一个有很多行的按钮来逐个更改元素的文本:
function changeLang () { document.getElementById('someid').innerHTML = "some German text"; ... }
或者用 const transLang { from = "en" to = "de" ...}
来实现?
如果您知道如何启动它,请告诉我。
对于“纯 JS”解决方案,换句话说 none 通常的解决方案:
- 否 Ajax 获取翻译后的页面文本/替换 html
- 不重定向到可以处理布局不一致的不同页面
一个选项是将翻译存储在每个 div 上并使用 .text()
切换它们。不要将您的翻译编码到您的 javascript 中,因为那样很快就无法维护。
function switchLang(lang)
{
$("[data-" + lang + "]").text(function(i, e) {
return $(this).data(lang);
});
}
switchLang("en");
$(".switchlang").click(function() {
// change the button caption here, eg a flag
// UX opinion of whether it should be what it is
// or what it will become
// ie "de" click to make it "de"
// or "de" it's currently "de", click to change it
$(this).text($(this).data("lang"));
// switch to other language based on language on the button
var lang = $(this).data("lang") == "de" ? "en" : "de";
$(this).data("lang", lang);
switchLang(lang)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span data-de="Um die Nachrichten zu lesen"
data-en="To read the news"></span>,
<span data-de="Übersetzungsdienst nicht verfügbar"
data-en="click here"></span>
<hr/>
<div data-en="no de translation for this line"></div>
<hr/>
<button class='switchlang' data-lang="en">de</button>
然后您可以轻松添加新语言,而无需更改任何代码(这次使用单独的按钮)
var defaultlang = "en";
function switchLang(lang)
{
$("[data-" + lang + "]").text(function(i, e) {
return $(this).data(lang);
});
}
switchLang("en");
$(".switchlang").click(function() {
switchLang($(this).data("lang"))
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span data-de="Um die Nachrichten zu lesen"
data-es="Para leer las noticias"
data-en="To read the news"></span>,
<span data-de="Übersetzungsdienst nicht verfügbar"
data-es="haga clic aquí"
data-en="click here"></span>
<hr/>
<div data-es="no hay traducción para esta línea"
data-en="no de translation for this line"></div>
<hr/>
<button class='switchlang' data-lang="en">en</button>
<button class='switchlang' data-lang="de">de</button>
<button class='switchlang' data-lang="es">es</button>
您可能更喜欢直接在 HTML 中默认语言,而不是在启动时,例如:
<span data-de="speichern">save</span>
然后在加载时将原件存储在 .data("en")
中。这将删除对您的场景可能很重要的 FOUC(加载页面时的延迟)。