Skip to content

Commit 187bf25

Browse files
userquinbrc-dd
andauthored
feat(i18n,a11y): change last update logic (#4935)
--------- Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com>
1 parent c2eaccd commit 187bf25

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

src/client/theme-default/components/VPDocFooterLastUpdated.vue

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,46 @@
11
<script setup lang="ts">
2-
import { ref, computed, watchEffect, onMounted } from 'vue'
2+
import { useNavigatorLanguage } from '@vueuse/core'
3+
import { computed, onMounted, shallowRef, useTemplateRef, watchEffect } from 'vue'
34
import { useData } from '../composables/data'
45
5-
const { theme, page, lang } = useData()
6+
const { theme, page, lang: pageLang } = useData()
7+
const { language: browserLang } = useNavigatorLanguage()
68
7-
const date = computed(
8-
() => new Date(page.value.lastUpdated!)
9-
)
9+
const timeRef = useTemplateRef('timeRef')
10+
11+
const date = computed(() => new Date(page.value.lastUpdated!))
1012
const isoDatetime = computed(() => date.value.toISOString())
11-
const datetime = ref('')
13+
const datetime = shallowRef('')
1214
1315
// set time on mounted hook to avoid hydration mismatch due to
1416
// potential differences in timezones of the server and clients
1517
onMounted(() => {
1618
watchEffect(() => {
19+
const lang = theme.value.lastUpdated?.formatOptions?.forceLocale
20+
? pageLang.value
21+
: browserLang.value
22+
1723
datetime.value = new Intl.DateTimeFormat(
18-
theme.value.lastUpdated?.formatOptions?.forceLocale ? lang.value : undefined,
24+
lang,
1925
theme.value.lastUpdated?.formatOptions ?? {
20-
dateStyle: 'short',
21-
timeStyle: 'short'
26+
dateStyle: 'medium',
27+
timeStyle: 'medium'
2228
}
2329
).format(date.value)
30+
31+
if (lang && pageLang.value !== lang) {
32+
timeRef.value?.setAttribute('lang', lang)
33+
} else {
34+
timeRef.value?.removeAttribute('lang')
35+
}
2436
})
2537
})
2638
</script>
2739

2840
<template>
2941
<p class="VPLastUpdated">
3042
{{ theme.lastUpdated?.text || theme.lastUpdatedText || 'Last updated' }}:
31-
<time :datetime="isoDatetime">{{ datetime }}</time>
43+
<time ref="timeRef" :datetime="isoDatetime">{{ datetime }}</time>
3244
</p>
3345
</template>
3446

0 commit comments

Comments
 (0)