大家好,我是1024小神,技术群 / 私活群 / 股票群 或 交朋友 都可以私信我。 如果你觉得本文有用,一键三连 (点赞、评论、关注),就是对我最大的支持~

就像我的项目PakePlus的官网一样: pakeplus.com,第一次加载的时候,根据浏览器的默认语言,以后就不跟随了,用户选择什么语言就是什么语言,然后根据不同的语言,展示不同的提示内容。
实现逻辑就是创建一个脚本,来判断是不是第一次加载,可以在js脚本中,然后将这个js脚本添加到vitepress的加载脚本中。另外一种就是创建一个vue组建,然后在首页加载这个vue组建,在这个vue组建中实现相应的逻辑。
第一种方案js脚本
脚本逻辑如下,可以参考

第二种vue组建
创建一个组建来判断是不是第一次加载,并根据相应的语言提示公告
html
<template>
<div v-if="notesData.show" class="modalBox">
<div class="modalContent">
<h1 class="modalTitle">{{ title }}</h1>
<p class="modalNotes">{{ content }}</p>
<div class="modalButtons">
<button id="modalOk" @click="closeNotes">{{ okText }}</button>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { useData } from 'vitepress'
const vpData = useData()
const title = ref('')
const content = ref('')
const okText = ref('')
const notesData = ref({
version: '0.5.30',
show: false,
pub_date: '2025-06-02T09:00:33.251Z',
zh: 'PakePlus正在优化升级,暂时无法使用云端打包,请使用本地打包的方式,好了会在微信群发通知,感谢理解!',
en: 'PakePlus is optimizing and upgrading, please use local packaging instead,thank you for your understanding!',
ja: 'PakePlus は Github Token 方式のパッケージングをサポートしなくなりました。ローカルパッケージングを使用してください,感謝します!',
ko: 'PakePlus 는 Github Token 방식의 패키징을 지원하지 않습니다. 로컬 패키징을 사용하세요,感謝します!',
zhTw: 'PakePlus 正在优化升级,暂时无法使用云端打包,请使用本地打包的方式,感谢理解!',
openUrl: '',
overall: false,
})
const initNotes = async () => {
const ppnotesJson = await fetch('/ppnotes.json')
const ppnotesJsonData = await ppnotesJson.json()
notesData.value = ppnotesJsonData
console.log('ppnotesJsonData', ppnotesJsonData)
const isChinese = window.location.href.includes('zh')
const contentValue = isChinese ? ppnotesJsonData.zh : ppnotesJsonData.en
const titleValue = isChinese ? 'PackPlus公告' : 'PakePlus Notice'
const okTextValue = isChinese ? '确定' : 'OK'
if (ppnotesJsonData.show) {
title.value = titleValue
content.value = contentValue
okText.value = okTextValue
}
}
const closeNotes = () => {
if (notesData.value.openUrl) {
window.open(notesData.value.openUrl, '_blank')
}
notesData.value.show = false
}
const initLang = () => {
const isFirst = localStorage.getItem('first_visit')
const browserLang = navigator.language
console.log('browserLang-initLang', browserLang)
if (isFirst) {
console.log('cookieLang is not empty')
} else {
if (browserLang === 'zh-CN') {
window.location.href = '/zh'
} else {
window.location.href = '/'
}
localStorage.setItem('first_visit', 'true')
}
}
onMounted(() => {
console.log('vpData-----', vpData)
initLang()
initNotes()
})
</script>
<style scoped lang="scss">
.modalBox {
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
padding-top: 150px;
}
.modalContent {
background: white;
padding: 20px;
border-radius: 5px;
color: #000;
width: 40%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
@media only screen and (max-width: 600px) {
.modalContent {
width: 80%;
}
}
.modalTitle {
font-size: 24px;
font-weight: bold;
margin-bottom: 20px;
}
.modalButtons {
display: flex;
justify-content: center;
gap: 10px;
}
.modalButtons button {
padding: 8px 20px;
border-radius: 10px;
cursor: pointer;
background-color: #409eff;
color: #fff;
border: none;
margin-top: 20px;
}
.modalButtons button:hover {
background-color: #3688fa;
}
.modalButtons button:active {
background-color: #3688fa;
}
</style>
大家好,我是1024小神,技术群 / 私活群 / 股票群 或 交朋友 都可以私信我。 如果你觉得本文有用,一键三连 (点赞、评论、关注),就是对我最大的支持~