Skip to content

Commit 03bb09f

Browse files
committed
feat(core): make language available in page data
1 parent 05b87dd commit 03bb09f

File tree

9 files changed

+45
-16
lines changed

9 files changed

+45
-16
lines changed

packages/@vuepress/client/src/app.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,7 @@ export const createVueApp = async ({
123123
siteLocaleData.value
124124
)
125125
)
126-
const pageLang = computed(() =>
127-
resolvePageLang(pageFrontmatter.value, siteLocaleData.value)
128-
)
126+
const pageLang = computed(() => resolvePageLang(pageData.value))
129127

130128
// provide global computed
131129
app.provide(routeLocaleSymbol, routeLocale)

packages/@vuepress/client/src/injections/pageData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const pageDataEmpty = readonly({
1212
key: '',
1313
path: '',
1414
title: '',
15+
lang: '',
1516
frontmatter: {},
1617
excerpt: '',
1718
headers: [],
Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { inject } from 'vue'
22
import type { ComputedRef, InjectionKey } from 'vue'
3-
import { isString } from '@vuepress/shared'
4-
import type { PageFrontmatter } from './pageFrontmatter'
5-
import type { SiteLocaleData } from './siteLocaleData'
3+
import type { PageData } from '@vuepress/shared'
64

75
export type PageLang = string
86
export type PageLangRef = ComputedRef<PageLang>
@@ -19,12 +17,11 @@ export const usePageLang = (): PageLangRef => {
1917
return pageLang
2018
}
2119

22-
export const resolvePageLang = (
23-
frontmatter: PageFrontmatter,
24-
siteLocale: SiteLocaleData
25-
): PageLang => {
26-
if (isString(frontmatter.lang) && frontmatter.lang) {
27-
return frontmatter.lang
28-
}
29-
return siteLocale.lang || 'en'
30-
}
20+
/**
21+
* Resolve language of current page
22+
*
23+
* It's mainly used for the `lang` attribute of `<html>` tag,
24+
* which should not be empty
25+
*/
26+
export const resolvePageLang = (pageData: PageData): PageLang =>
27+
pageData.lang || 'en'

packages/@vuepress/core/src/app/prepare/resolvePageData.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export const resolvePageData = ({
77
key,
88
path,
99
title,
10+
lang,
1011
frontmatter,
1112
excerpt,
1213
headers,
@@ -15,6 +16,7 @@ export const resolvePageData = ({
1516
key,
1617
path,
1718
title,
19+
lang,
1820
frontmatter,
1921
excerpt,
2022
headers,

packages/@vuepress/core/src/page/createPage.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { resolvePageFileContent } from './resolvePageFileContent'
99
import { resolvePageFilePath } from './resolvePageFilePath'
1010
import { resolvePageFrontmatter } from './resolvePageFrontmatter'
1111
import { resolvePageKey } from './resolvePageKey'
12+
import { resolvePageLang } from './resolvePageLang'
1213
import { resolvePagePath } from './resolvePagePath'
1314
import { resolvePagePermalink } from './resolvePagePermalink'
1415
import { resolvePageRoutesInfo } from './resolvePageRoutesInfo'
@@ -48,6 +49,9 @@ export const createPage = async (
4849
// infer page path according to file path
4950
const { pathInferred, pathLocale } = inferPagePath({ app, filePathRelative })
5051

52+
// resolve language from frontmatter and site options
53+
const lang = resolvePageLang({ app, frontmatter, pathLocale })
54+
5155
// resolve page permalink
5256
const permalink = resolvePagePermalink({
5357
options,
@@ -118,5 +122,6 @@ export const createPage = async (
118122
links,
119123
slug,
120124
date,
125+
lang,
121126
}
122127
}

packages/@vuepress/core/src/page/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export * from './resolvePageFileContent'
99
export * from './resolvePageFilePath'
1010
export * from './resolvePageFrontmatter'
1111
export * from './resolvePageKey'
12+
export * from './resolvePageLang'
1213
export * from './resolvePagePath'
1314
export * from './resolvePagePermalink'
1415
export * from './resolvePageRoutesInfo'

packages/@vuepress/core/src/page/inferPagePath.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export const inferPagePath = ({
2828
.replace(/\/(README|index).html$/i, '/')
2929

3030
// resolve page locale path
31-
const pathLocale = resolveLocalePath(app.options.locales, pathInferred)
31+
const pathLocale = resolveLocalePath(app.siteData.locales, pathInferred)
3232

3333
return {
3434
pathInferred,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { isString } from '@vuepress/shared'
2+
import type { App, PageFrontmatter } from '../types'
3+
4+
/**
5+
* Resolve language of page
6+
*/
7+
export const resolvePageLang = ({
8+
app,
9+
frontmatter,
10+
pathLocale,
11+
}: {
12+
app: App
13+
frontmatter: PageFrontmatter
14+
pathLocale: string
15+
}): string => {
16+
if (isString(frontmatter.lang) && frontmatter.lang) {
17+
return frontmatter.lang
18+
}
19+
return app.siteData.locales[pathLocale]?.lang ?? app.siteData.lang ?? ''
20+
}

packages/@vuepress/shared/src/types/page.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export type PageData<
3232
*/
3333
title: string
3434

35+
/**
36+
* Language of the page
37+
*/
38+
lang: string
39+
3540
/**
3641
* Front matter of the page
3742
*/

0 commit comments

Comments
 (0)