diff --git a/src/steps/render.js b/src/steps/render.js
index 9e747187..7c844f8e 100644
--- a/src/steps/render.js
+++ b/src/steps/render.js
@@ -67,12 +67,21 @@ export default async function render(state, req, res) {
}
let jsonLd;
+ let htmlLang;
+
for (const [name, value] of Object.entries(meta.page)) {
if (name.toLowerCase() === 'json-ld') {
jsonLd = value;
// eslint-disable-next-line no-continue
continue;
}
+ if (name.toLowerCase() === 'html-lang') {
+ if (/^[a-z]{2}([-_]{1}[A-Z]{2})?$/.test(value)) {
+ htmlLang = value;
+ }
+ // eslint-disable-next-line no-continue
+ continue;
+ }
const attr = name.includes(':') && !name.startsWith('twitter:') ? 'property' : 'name';
if (Array.isArray(value)) {
for (const v of value) {
@@ -111,7 +120,7 @@ export default async function render(state, req, res) {
type: 'root',
children: [
{ type: 'doctype' },
- h('html', [
+ h('html', htmlLang ? { lang: htmlLang } : null, [
$head,
h('body', [
h('header', []), // todo: are those still required ?
diff --git a/test/fixtures/content/page-metadata-htmllang-invalid.html b/test/fixtures/content/page-metadata-htmllang-invalid.html
new file mode 100644
index 00000000..352407aa
--- /dev/null
+++ b/test/fixtures/content/page-metadata-htmllang-invalid.html
@@ -0,0 +1,27 @@
+
+
+ Home | Helix Project Boilerplate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
HTML lang test
+
This is great.
+
+
+
+
+
\ No newline at end of file
diff --git a/test/fixtures/content/page-metadata-htmllang-invalid.md b/test/fixtures/content/page-metadata-htmllang-invalid.md
new file mode 100644
index 00000000..9c63440c
--- /dev/null
+++ b/test/fixtures/content/page-metadata-htmllang-invalid.md
@@ -0,0 +1,11 @@
+# HTML lang test
+
+This is great.
+
++-------------------------------------------------------------------------------------------+
+| Metadata |
++================+==========================================================================+
+| title | Home \| Helix Project Boilerplate |
++----------------+--------------------------------------------------------------------------|
+| html-lang | something |
++----------------+--------------------------------------------------------------------------+
diff --git a/test/fixtures/content/page-metadata-htmllang-short.html b/test/fixtures/content/page-metadata-htmllang-short.html
new file mode 100644
index 00000000..edcc5b92
--- /dev/null
+++ b/test/fixtures/content/page-metadata-htmllang-short.html
@@ -0,0 +1,27 @@
+
+
+ Home | Helix Project Boilerplate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
HTML lang test
+
This is great.
+
+
+
+
+
\ No newline at end of file
diff --git a/test/fixtures/content/page-metadata-htmllang-short.md b/test/fixtures/content/page-metadata-htmllang-short.md
new file mode 100644
index 00000000..fb90998c
--- /dev/null
+++ b/test/fixtures/content/page-metadata-htmllang-short.md
@@ -0,0 +1,11 @@
+# HTML lang test
+
+This is great.
+
++-------------------------------------------------------------------------------------------+
+| Metadata |
++================+==========================================================================+
+| title | Home \| Helix Project Boilerplate |
++----------------+--------------------------------------------------------------------------|
+| html-lang | de |
++----------------+--------------------------------------------------------------------------+
diff --git a/test/fixtures/content/page-metadata-htmllang.html b/test/fixtures/content/page-metadata-htmllang.html
new file mode 100644
index 00000000..ed3841fe
--- /dev/null
+++ b/test/fixtures/content/page-metadata-htmllang.html
@@ -0,0 +1,27 @@
+
+
+ Home | Helix Project Boilerplate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
HTML lang test
+
This is great.
+
+
+
+
+
\ No newline at end of file
diff --git a/test/fixtures/content/page-metadata-htmllang.md b/test/fixtures/content/page-metadata-htmllang.md
new file mode 100644
index 00000000..7bb31b3f
--- /dev/null
+++ b/test/fixtures/content/page-metadata-htmllang.md
@@ -0,0 +1,11 @@
+# HTML lang test
+
+This is great.
+
++-------------------------------------------------------------------------------------------+
+| Metadata |
++================+==========================================================================+
+| title | Home \| Helix Project Boilerplate |
++----------------+--------------------------------------------------------------------------|
+| html-lang | en-US |
++----------------+--------------------------------------------------------------------------+
diff --git a/test/rendering.test.js b/test/rendering.test.js
index d3c925b4..c2136020 100644
--- a/test/rendering.test.js
+++ b/test/rendering.test.js
@@ -520,6 +520,21 @@ describe('Rendering', () => {
config = DEFAULT_CONFIG_EMPTY;
await testRender('page-metadata-jsonld-xss', 'head');
});
+
+ it('injects html lang', async () => {
+ config = DEFAULT_CONFIG_EMPTY;
+ await testRender('page-metadata-htmllang', ':scope');
+ });
+
+ it('accepts short html lang', async () => {
+ config = DEFAULT_CONFIG_EMPTY;
+ await testRender('page-metadata-htmllang-short', ':scope');
+ });
+
+ it('rejects invalid html lang', async () => {
+ config = DEFAULT_CONFIG_EMPTY;
+ await testRender('page-metadata-htmllang-invalid', ':scope');
+ });
});
describe('Miscellaneous', () => {