HTML lang 标签显示语言

HTML lang Tag display language

我问这个纯粹是出于教育目的,在浏览 HTML5 的一些参考信息时,我遇到了 lang 属性,而我理解它是一种定义语言的方式,如果我要说的是制作一个多语言网站,而不是重新制作每个页面我会假设这是一种根据浏览器语言隐藏各种 div 的方法,即

<div lang='en'>Hello</div>
<div lang='ja'>こんいちは</div>

所以我的第一个想法是,如果我的浏览器设置为英语,它应该只显示英语标签,但是在进一步阅读后,lang 标签似乎只告诉浏览器它是什么语言,添加了对 TTS、盲文和其他内容的支持。

这是正确的,还是我只是忘记了它的其他一些潜在用途?

如果它只是 reader 或类似的东西,在单个 html/php 站点上交换语言的最佳方式是:

<?php if ($_GET['lang'] == "en") { ?>
    <div>Hello</div>
<?php } else if ($_GET['lang'] == "ja") { ?>
    <div>こんいちは</div>
<?php } else { ?>
    <div>Language not supported</div>
<?php } ?>

虽然我已经做了很多年的程序员,但像这样的小事情我以前根本没有遇到过。

此致

可以使用CSS显示或隐藏元素,具体取决于它们的lang属性。你只会浪费很多带宽。

语言标签

语言标签的目的是让您能够标记 link、引号等,这样您就可以设置它们的样式,例如,将英国国旗添加到 link 指向从您的日语博客 post 阅读英文文章,并使屏幕阅读器能够提供正确的发音。

翻译

如果您想根据参数提供翻译文本,您应该在 HTML 代码的 外部 进行翻译(就像任何其他处理一样)。这种混合只会让代码难以辨认,成为维护的噩梦。

一个常见的解决方案是在单独的语言文件中提供翻译数据,主要是 .ini 文件。在您的情况下,它们可能看起来像:

languages/ja.ini:

LANG="ja"
HELLO="こんいちは"

languages/en.ini:

LANG="en"
HELLO="Hello"

现在,您可以在 HTML 文件中使用它们。

index.php:

<?php
$language    = $_GET['lang'] ?: 'en';
$translation = "languages/{$language}.ini";

if (!is_readable($translation)) {
    throw new \RuntimeException("Language file {$translation} not found");
}

$_ = parse_ini_file($translation);
?>

<div lang="<?= $_['LANG']; ?>"><?= $_['HELLO']; ?></div>

你的PHP和HTML代码都更容易理解,语言文件也更容易维护。