作者 xiaoqiu

添加多语言翻译

# API地址
NUXT_API_URL="http://htai.toolsai.cc"
\ No newline at end of file
NUXT_API_URL="/dev-api"
\ No newline at end of file
... ...
... ... @@ -13,6 +13,7 @@ const webSite = useState<webSiteType>("webSite");
const sortList = useState<classifyType[]>("sortTree");
webSite.value = await getWebSite();
console.log(webSite.value);
sortList.value = await getClassifyList();
useHead({
title: webSite.value.webname,
... ... @@ -33,4 +34,8 @@ useHead({
.scroll-container::-webkit-scrollbar {
display: none; /* Chrome/Safari/Opera */
}
#translate {
display: none;
}
</style>
... ...
@font-face {
font-family: "iconfont"; /* Project id 5094593 */
src: url('iconfont.woff2?t=1766651481158') format('woff2'),
url('iconfont.woff?t=1766651481158') format('woff'),
url('iconfont.ttf?t=1766651481158') format('truetype');
src: url('iconfont.woff2?t=1770621719751') format('woff2'),
url('iconfont.woff?t=1770621719751') format('woff'),
url('iconfont.ttf?t=1770621719751') format('truetype');
}
.iconfont {
... ... @@ -13,6 +13,30 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-international:before {
content: "\e638";
}
.icon-delete:before {
content: "\e668";
}
.icon-home:before {
content: "\e7c6";
}
.icon-left-btn:before {
content: "\e83d";
}
.icon-nav-menu:before {
content: "\e636";
}
.icon-nav-search:before {
content: "\e637";
}
.icon-tag:before {
content: "\e6af";
}
... ... @@ -249,10 +273,6 @@
content: "\e612";
}
.icon-international:before {
content: "\e613";
}
.icon-link:before {
content: "\e614";
}
... ...
... ... @@ -13,6 +13,7 @@
<div class="flex items-center gap-2">
<MySearch />
<MyI18n />
<MyMenu />
</div>
</div>
... ...
... ... @@ -21,18 +21,9 @@
role="tablist"
>
<li
class="anchor md:w-[120.891px] w-[107.3px] cursor-pointer rounded-[100px] bg-[#5961f9]"
style="
position: absolute;
height: 28px;
opacity: 1;
transition: 0.35s;
"
:style="{ left: `${left}px` }"
></li>
<li
v-for="(child, index) in childData.children"
class="h-auto w-auto cursor-pointer"
class="h-auto w-auto cursor-pointer rounded-[100px] transition-all duration-350"
:class="[index === currentFilter ? 'bg-[#5961f9]' : '']"
>
<a
:id="`#term-${childData.id}-${child.id}`"
... ... @@ -159,14 +150,11 @@ function onConfirm(id: number) {
}
// 导航样式内容
const currentFilter = ref(0);
const left = ref(0);
// 切换分类内容
function onClick(event: any, alias: string, index: number) {
let moveWidth = window.innerWidth > 768 ? 120.891 : 107.3;
event?.preventDefault();
childAlias.value = alias;
currentFilter.value = index;
left.value = index * moveWidth;
}
</script>
... ...
<template>
<div>
<el-dropdown trigger="click">
<span class="el-dropdown-link">
<i class="iconfont icon-international text-[#5961f9] language"></i>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('english');"
>English</a
>
</el-dropdown-item>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('chinese_simplified');"
>简体中文</a
>
</el-dropdown-item>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('vietnamese');"
>Tiếng Việt</a
>
</el-dropdown-item>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('thai');"
>คนไทย</a
>
</el-dropdown-item>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('malay');"
>Malay</a
>
</el-dropdown-item>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('singapore');"
>සිංගාපුර්</a
>
</el-dropdown-item>
<el-dropdown-item>
<a class="ignore" href="javascript:translate.changeLanguage('lao');"
>ກະຣຸນາ</a
>
</el-dropdown-item>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('khmer');"
>ភាសា​ខ្មែរName</a
>
</el-dropdown-item>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('filipino');"
>Pilipino</a
>
</el-dropdown-item>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('burmese');"
>ဗာရမ်</a
>
</el-dropdown-item>
<el-dropdown-item>
<a
class="ignore"
href="javascript:translate.changeLanguage('indonesian');"
>IndonesiaName</a
>
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</template>
<script setup lang="ts"></script>
<style scoped>
.language {
font-size: 40px;
}
@media (max-width: 768px) {
.language {
font-size: 35px;
}
}
</style>
... ...
... ... @@ -43,14 +43,14 @@ onMounted(() => {
}
.toggle {
position: relative;
width: 35px;
height: 35px;
width: 30px;
height: 30px;
cursor: pointer;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
gap: 10px;
gap: 8px;
transition-duration: 0.5s;
}
... ...
... ... @@ -59,9 +59,8 @@ function onSearch() {
.input {
border-style: none;
height: 50px;
width: 50px;
padding: 10px;
height: 40px;
width: 40px;
outline: none;
border-radius: 50%;
transition: 0.5s ease-in-out;
... ... @@ -89,8 +88,8 @@ function onSearch() {
position: absolute;
right: 0px;
cursor: pointer;
width: 50px;
height: 50px;
width: 40px;
height: 40px;
outline: none;
border-style: none;
border-radius: 50%;
... ... @@ -116,13 +115,13 @@ function onSearch() {
gap: 10px;
}
.icon {
width: 40px;
height: 40px;
width: 35px;
height: 35px;
}
.input {
width: 40px;
height: 40px;
padding-right: 31px;
width: 35px;
height: 35px;
padding-right: 35px;
}
.input::placeholder,
.input {
... ... @@ -133,7 +132,7 @@ function onSearch() {
.icon:focus ~ .input,
.input:focus {
box-shadow: none;
width: 200px;
width: 180px;
border-radius: 0px;
background-color: transparent;
border-bottom: 1.5px solid #5961f9;
... ...
module.exports = {
apps: [
{
name: 'linkNuxt3',
script: './.output/server/index.mjs',
port: 3666,
instances: 'max',
exec_mode: 'cluster',
autorestart: true,
args: 'start'
}
]
}
\ No newline at end of file
... ... @@ -18,7 +18,7 @@ export default defineNuxtConfig({
nitro: {
devProxy: {
'/dev-api': {
target: 'http://192.168.2.220:35273/',
target: 'http://192.168.2.72:35273/',
changeOrigin: true,
}
... ... @@ -26,14 +26,14 @@ export default defineNuxtConfig({
// 该配置用于服务端请求转发
routeRules: {
'/dev-api/**': {
proxy: 'http://192.168.2.220:35273/**'
proxy: 'http://192.168.2.72:35273/**'
},
},
// prerender: {
// routes: ['/sitemap.xml'],
// // 从预渲染中排除 sitemap.xml,让它动态生成
// ignore: ['/sitemap.xml']
// }
prerender: {
routes: ['/sitemap.xml'],
// 从预渲染中排除 sitemap.xml,让它动态生成
ignore: ['/sitemap.xml']
}
},
css: [
'~/assets/iconfonts/iconfont.css',
... ... @@ -56,6 +56,11 @@ export default defineNuxtConfig({
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
],
script: [
{
src: "/js/translate.js",
},
]
}
},
... ...
此 diff 太大无法显示。
... ... @@ -68,13 +68,4 @@ Disallow: /
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-log/
Disallow: /wp-includes/
Disallow: /bookmark/
Disallow: /go/
Disallow: /user
Disallow: /hotnews
Disallow: /?s=*
Disallow: /search/
Disallow: /search?q=
Sitemap: https://www.toolsai.cc/sitemap.xml
\ No newline at end of file
Sitemap: https://www.aiboxgo.com/sitemap.xml
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.toolsai.cc</loc>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-writing-tools</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-image-generators</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-image-background-removers</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-image-big</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-image-repair</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-video-tools</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-agent</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-chatbots</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-programming-tools</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-design-tools</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-audio-tools</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-search-engines</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-frameworks</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-study</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-models</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-model-evaluation</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-content</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/category/ai-directive</loc>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/16</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/24</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/23</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/22</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/21</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/20</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/19</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/18</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/17</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/8</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/15</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/14</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/13</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/12</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/11</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/10</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://www.toolsai.cc/details/9</loc>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
</urlset>
\ No newline at end of file
export default defineEventHandler(async (event) => {
const res = await $fetch('http://htai.toolsai.cc/sitemap.xml', {
method: 'get'
})
console.log("后台数据", res)
event.node.res.setHeader('content-type', 'text/xml')
return res
})
\ No newline at end of file
... ...