🌐 Add i18n tool chain and landing page translation to simplified chinese
This commit is contained in:
parent
2f14e3817a
commit
283688452f
1
app.vue
1
app.vue
@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-app>
|
<v-app>
|
||||||
|
<nuxt-loading-indicator color="white" />
|
||||||
<nuxt-layout>
|
<nuxt-layout>
|
||||||
<nuxt-page />
|
<nuxt-page />
|
||||||
</nuxt-layout>
|
</nuxt-layout>
|
||||||
|
3
i18n.config.ts
Normal file
3
i18n.config.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export default defineI18nConfig(() => ({
|
||||||
|
fallbackLocale: 'en',
|
||||||
|
}))
|
9
lang/en-US.json
Normal file
9
lang/en-US.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"brandName": "Solsynth",
|
||||||
|
"brandNameFormal": "Solsynth LLC",
|
||||||
|
"indexIntroduce": "An energetic software company that create wonderful software which everyone love.",
|
||||||
|
"indexProductListHint": "See some of our products just there",
|
||||||
|
"indexActivities": "Activities",
|
||||||
|
"indexActivitiesCaption": "Keep in touch,\nand learn what we doing recently.",
|
||||||
|
"indexActivitiesHint": "See some posts in our realm just here"
|
||||||
|
}
|
9
lang/zh-CN.json
Normal file
9
lang/zh-CN.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"brandName": "索尔辛茨",
|
||||||
|
"brandNameFormal": "索尔辛茨实业有限公司",
|
||||||
|
"indexIntroduce": "一家充满活力的软件公司,创造了人人喜爱的精彩软件。",
|
||||||
|
"indexProductListHint": "在这里看看我们的一些产品",
|
||||||
|
"indexActivities": "动态",
|
||||||
|
"indexActivitiesCaption": "开发软件,闭门造车是大忌,了解我们最近在做什么。",
|
||||||
|
"indexActivitiesHint": "看看我们领域中的一些帖子"
|
||||||
|
}
|
@ -13,6 +13,29 @@
|
|||||||
|
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
|
<v-menu>
|
||||||
|
<template v-slot:activator="{ props }">
|
||||||
|
<v-btn
|
||||||
|
size="small"
|
||||||
|
icon="mdi-translate"
|
||||||
|
v-bind="props"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<v-list>
|
||||||
|
<v-list-item
|
||||||
|
class="w-48"
|
||||||
|
density="compact"
|
||||||
|
v-for="item in locales"
|
||||||
|
:key="item.code"
|
||||||
|
:value="item.code"
|
||||||
|
:active="locale == item.code"
|
||||||
|
@click.prevent.stop="setLocale(item.code)"
|
||||||
|
>
|
||||||
|
<v-list-item-title>{{ item.name }}</v-list-item-title>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</v-menu>
|
||||||
|
|
||||||
<user-menu />
|
<user-menu />
|
||||||
</v-container>
|
</v-container>
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
@ -24,6 +47,8 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Logo from "../assets/logo-w-shadow.png"
|
import Logo from "../assets/logo-w-shadow.png"
|
||||||
|
|
||||||
|
const { locale, locales, setLocale } = useI18n()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
@ -13,6 +13,23 @@ export default defineNuxtConfig({
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
i18n: {
|
||||||
|
strategy: "no_prefix",
|
||||||
|
detectBrowserLanguage: {
|
||||||
|
useCookie: true,
|
||||||
|
cookieCrossOrigin: true,
|
||||||
|
cookieKey: "__capital_i18n",
|
||||||
|
redirectOn: "root",
|
||||||
|
},
|
||||||
|
locales: [
|
||||||
|
{ code: "en", name: "English", file: "en-US.json" },
|
||||||
|
{ code: "zh-CN", name: "简体中文", file: "zh-CN.json" },
|
||||||
|
],
|
||||||
|
lazy: true,
|
||||||
|
langDir: "lang",
|
||||||
|
defaultLocale: "en",
|
||||||
|
},
|
||||||
|
|
||||||
css: ["@/assets/index.css"],
|
css: ["@/assets/index.css"],
|
||||||
|
|
||||||
runtimeConfig: {
|
runtimeConfig: {
|
||||||
@ -70,6 +87,7 @@ export default defineNuxtConfig({
|
|||||||
"@nuxt/image",
|
"@nuxt/image",
|
||||||
"@nuxtjs/sitemap",
|
"@nuxtjs/sitemap",
|
||||||
"@pinia/nuxt",
|
"@pinia/nuxt",
|
||||||
|
"@nuxtjs/i18n",
|
||||||
(_options, nuxt) => {
|
(_options, nuxt) => {
|
||||||
nuxt.hooks.hook("vite:extendConfig", (config) => {
|
nuxt.hooks.hook("vite:extendConfig", (config) => {
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
"@mdi/font": "^7.4.47",
|
"@mdi/font": "^7.4.47",
|
||||||
"@nuxt/content": "^2.13.2",
|
"@nuxt/content": "^2.13.2",
|
||||||
"@nuxt/image": "^1.7.0",
|
"@nuxt/image": "^1.7.0",
|
||||||
|
"@nuxtjs/i18n": "^8.3.3",
|
||||||
"@nuxtjs/sitemap": "^6.0.0-beta.1",
|
"@nuxtjs/sitemap": "^6.0.0-beta.1",
|
||||||
"@pinia/nuxt": "^0.5.3",
|
"@pinia/nuxt": "^0.5.3",
|
||||||
"nuxt": "^3.12.4",
|
"nuxt": "^3.12.4",
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
<v-container class="flex flex-col my-2 gap-[4rem]">
|
<v-container class="flex flex-col my-2 gap-[4rem]">
|
||||||
<v-row class="content-section">
|
<v-row class="content-section">
|
||||||
<v-col cols="12" md="4" class="flex justify-start">
|
<v-col cols="12" md="4" class="flex justify-start">
|
||||||
<div>
|
<div class="flex flex-col items-start">
|
||||||
<h1 class="text-4xl font-bold">Solsynth</h1>
|
<h1 class="text-4xl font-bold">{{ t("brandName") }}</h1>
|
||||||
<p class="text-lg mt-3">
|
<p class="text-lg mt-3 max-w-2/3">
|
||||||
An energetic software company that create wonderful software which everyone love.
|
{{ t("indexIntroduce") }}
|
||||||
</p>
|
</p>
|
||||||
<p class="text-grey mt-2">
|
<p class="text-grey mt-2">
|
||||||
See some of our products just there
|
{{ t("indexProductListHint") }}
|
||||||
<v-icon icon="mdi-arrow-right" size="16" class="mb-0.5" />
|
<v-icon icon="mdi-arrow-right" size="16" class="mb-0.5" />
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -26,15 +26,14 @@
|
|||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" md="4" class="flex justify-end" order="first" order-md="last">
|
<v-col cols="12" md="4" class="flex justify-end" order="first" order-md="last">
|
||||||
<div class="text-right">
|
<div class="text-right flex flex-col items-end">
|
||||||
<h1 class="text-4xl font-bold">Activities</h1>
|
<h1 class="text-4xl font-bold">{{ t("indexActivities") }}</h1>
|
||||||
<p class="text-lg mt-3">
|
<p class="text-lg mt-3 max-w-2/3">
|
||||||
Keep in touch, <br />
|
{{ t("indexActivitiesCaption") }}
|
||||||
and learn what we doing recently.
|
|
||||||
</p>
|
</p>
|
||||||
<p class="text-grey mt-2">
|
<p class="text-grey mt-2">
|
||||||
<v-icon icon="mdi-arrow-left" size="16" class="mb-0.5" />
|
<v-icon icon="mdi-arrow-left" size="16" class="mb-0.5" />
|
||||||
See some posts in our realm just here
|
{{ t("indexActivitiesHint") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</v-col>
|
</v-col>
|
||||||
@ -43,6 +42,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
const { data: products } = await useAsyncData("products", () => queryContent("/products").where({ archived: { $ne: true } }).limit(5).find())
|
const { data: products } = await useAsyncData("products", () => queryContent("/products").where({ archived: { $ne: true } }).limit(5).find())
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user