Compare commits
2 Commits
653ade9acc
...
ce291d9a1a
Author | SHA1 | Date | |
---|---|---|---|
ce291d9a1a | |||
950ee1f489 |
9
content/zh-CN/products/acefield.mdx
Normal file
9
content/zh-CN/products/acefield.mdx
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
thumbnail: /thumbnails/products/acefield.webp
|
||||
title: AceField
|
||||
description: An experimental multiplayer top-down view shooting game that created by Solsynth LLC affiliation Highland Entertainment.
|
||||
url: https://files.solsynth.dev/production01/acefield
|
||||
---
|
||||
|
||||
AceField which is stands for wonderful place to battle.
|
||||
We can't just use the name Battlefield because it already became a trademark of Electronic Arts.
|
6
content/zh-CN/products/roadsign.mdx
Normal file
6
content/zh-CN/products/roadsign.mdx
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
thumbnail: /thumbnails/products/roadsign.webp
|
||||
title: RoadSign
|
||||
description: The reserve proxy that powered our network. Powerful and easy to use.
|
||||
archived: true
|
||||
---
|
24
content/zh-CN/products/solar-network.mdx
Normal file
24
content/zh-CN/products/solar-network.mdx
Normal file
@ -0,0 +1,24 @@
|
||||
---
|
||||
thumbnail: /thumbnails/products/solar-network.webp
|
||||
title: Solar Network
|
||||
description: All-in-one 社交媒体平台
|
||||
url: https://sn.solsynth.dev
|
||||
---
|
||||
|
||||
Solar Network 是一个创新的平台,它将社交互动、聊天和语音通话无缝整合到一个统一的体验中。通过 Solar Network,您可以毫不费力地建立和管理自己的社区。
|
||||
|
||||
## Key Features
|
||||
|
||||
- Social Integration: Connect and engage with others through a comprehensive social platform that brings together various forms of interaction.
|
||||
- Chat: Enjoy real-time messaging with individuals and groups, making communication smooth and efficient.
|
||||
- Voice Calls: Experience crystal-clear voice calls, enabling you to connect on a deeper level with your community.
|
||||
|
||||
## Why Choose Solar Network?
|
||||
|
||||
- User-Friendly: Designed with simplicity in mind, making it easy for anyone to create and manage their community.
|
||||
- All-in-One Solution: Combines essential communication tools into one platform, eliminating the need for multiple apps.
|
||||
- Customizable: Tailor the platform to suit your community’s unique needs and preferences.
|
||||
|
||||
Join Solar Network today and start building your community with ease!
|
||||
|
||||
Feel free to adjust any details to better fit your vision for the product.
|
20
generator/goat-language-translator.ts
Normal file
20
generator/goat-language-translator.ts
Normal file
@ -0,0 +1,20 @@
|
||||
import fs from "fs"
|
||||
|
||||
const tones = ["↑", "→", "↓", "↗", "↘"]
|
||||
|
||||
const raw = fs.readFileSync("../lang/zh-CN.json", "utf-8")
|
||||
|
||||
const original: { [id: string]: string } = JSON.parse(raw)
|
||||
|
||||
const result: { [id: string]: string } = {}
|
||||
|
||||
for (const key in original) {
|
||||
let str = ""
|
||||
for (const char of original[key]) {
|
||||
const tone = tones[Math.floor(Math.random() * tones.length)]
|
||||
str += "咩" + tone
|
||||
}
|
||||
result[key] = str
|
||||
}
|
||||
|
||||
fs.writeFileSync("../lang/ml-SG.json", JSON.stringify(result))
|
55
lang/ml-SG.json
Normal file
55
lang/ml-SG.json
Normal file
@ -0,0 +1,55 @@
|
||||
{
|
||||
"brandName": "咩→咩↗咩↘咩↑",
|
||||
"brandNameFormal": "咩↓咩↓咩→咩↘咩↗咩↗咩↘咩↗咩↓咩↘",
|
||||
"navProducts": "咩↑咩→",
|
||||
"navActivity": "咩→咩↑",
|
||||
"navActivityCaption": "咩→咩↑咩↑咩↑咩↗咩↑咩↗咩↘咩↗咩↑咩→咩↘",
|
||||
"navGallery": "咩→咩↑",
|
||||
"navGalleryCaption": "咩↓咩↘咩↓咩↘咩↘咩↓咩↑咩↘咩→咩↗咩↗咩↑咩↗咩↗咩↓咩↗咩→咩↑咩↘咩↑咩↓咩→咩↑咩↗",
|
||||
"indexIntroduce": "咩↓咩↗咩↓咩↑咩↘咩↓咩↑咩↑咩↗咩↗咩↗咩↓咩↘咩↗咩→咩→咩↓咩↓咩↘咩→咩↓咩↓咩↑咩↑咩→",
|
||||
"indexProductListHint": "咩↗咩↓咩↘咩↑咩↑咩↘咩↓咩↑咩↘咩↓咩↗咩↘",
|
||||
"indexActivities": "咩↘咩↗",
|
||||
"indexActivitiesCaption": "咩↑咩↘咩→咩↗咩↑咩↗咩↓咩→咩↗咩↑咩↓咩→咩↑咩↓咩↓咩↑咩→咩→咩↑咩↗咩→咩→咩↓咩→",
|
||||
"indexActivitiesHint": "咩↑咩↓咩↘咩→咩→咩↓咩↘咩→咩↘咩↗咩→咩↓",
|
||||
"userMenuDashboard": "咩↓咩↗咩↗",
|
||||
"userMenuSignOut": "咩↑咩→",
|
||||
"userMenuSignIn": "咩→咩→",
|
||||
"userMenuSignUp": "咩↑咩↘咩→咩↗",
|
||||
"next": "咩↑咩→咩↗",
|
||||
"errorOccurred": "咩→咩↑咩↘咩→咩→咩↓咩↓咩↑咩↘咩↘",
|
||||
"username": "咩→咩↓咩↑",
|
||||
"nickname": "咩↘咩→咩↘",
|
||||
"email": "咩↓咩↓咩↓咩↓",
|
||||
"password": "咩↘咩↓",
|
||||
"copyright": "咩↑咩↗咩↓咩↗",
|
||||
"signUpTitle": "咩↘咩→咩↗咩↗",
|
||||
"signUpCaption": "咩↑咩↓咩↘咩↓咩↑咩→咩↗咩↓咩↘咩↘咩↘咩↓咩↓咩↑咩↑咩↘咩↗咩↘咩↑咩↓咩↘咩↓咩↘咩→咩↗咩↗咩→咩↘咩↘咩↗咩↘咩→咩↑咩→咩↓",
|
||||
"signUpCompleted": "咩↓咩→咩↓咩↓咩↗咩↗咩→咩↗咩↑咩↗咩→咩→咩↘咩→咩→咩↗咩↑咩↘咩↓咩↓咩↓咩↑咩↗咩↓咩↓咩↑咩↗咩↘咩→咩↓咩↘咩↓咩↗咩↘咩↓咩↗咩↗咩↓咩↑",
|
||||
"signUpCompletedAction": "咩↘咩↗",
|
||||
"signInTitle": "咩↑咩↘",
|
||||
"signInCaption": "咩↗咩↘咩↑咩↑咩↘咩↑咩→咩↘咩→咩→咩↑咩↑咩↑咩↓咩↘咩↓咩↗咩→咩↘咩↓咩↓咩↓咩↑咩→咩↗咩↘咩↘咩→",
|
||||
"multiFactorCaption": "咩→咩→咩↓咩↓咩↓咩↘咩→咩↗咩↓咩↓咩↑咩↘咩↑咩↓咩↓咩↗咩→咩↗咩↓咩↑",
|
||||
"multiFactorHint": "咩↓咩→咩↓咩↑咩↑咩↑咩↑",
|
||||
"multiFactorTypeEmail": "咩↘咩→咩↑咩↓咩↑咩↘咩↓咩↗咩↑",
|
||||
"signInCompleted": "咩→咩↓",
|
||||
"signInCompletedCaption": "咩↑咩↘咩↗咩↗咩↑咩→咩↗咩↑咩↓咩↑咩↘咩↑咩↓咩↘咩↓咩↓咩↘咩↘咩↗咩↑咩↗咩→咩↘咩↗咩↑咩→咩↓",
|
||||
"transferredToSolianHint": "咩↑咩→咩↑咩↑咩→咩→咩↘咩→咩↓咩→咩↑咩↘咩↘咩↑咩↗咩↗咩↓咩→咩↑咩↓咩↓咩↗咩↗咩↑咩→咩↑咩↗咩↓咩→咩↑咩→咩↑咩↘咩↘咩↗咩↘咩↑咩↘咩↘咩↓咩↘咩↑咩↑咩↗咩↑咩↘咩→咩→咩↓咩↘咩↗咩↓咩↑咩↑咩↘",
|
||||
"personalize": "咩↓咩↑咩↑",
|
||||
"personalizeCaption": "咩↑咩↓咩↘咩↑咩↓咩↑咩→咩↑咩↘咩↓咩→咩↘咩↗咩→咩↑咩↗咩↑咩→咩↓咩→咩↗咩↓咩↘",
|
||||
"security": "咩↗咩↓",
|
||||
"securityCaption": "咩↓咩↗咩→咩→咩↘咩↑咩↘咩↗咩↓咩→咩↘咩→咩→咩↘咩→咩↓咩↗咩↗咩↑咩→咩↓咩↘",
|
||||
"userActivity": "咩↗咩↗",
|
||||
"userActivityCaption": "咩↑咩↑咩↗咩↓咩↑咩↗咩↗咩↗咩↓",
|
||||
"productArchived": "咩↘咩↓咩→",
|
||||
"callbackHint": "咩↑咩↘咩↓咩↓咩↓咩↓咩↗咩↑咩↘咩↗咩↗咩→咩↗咩↑咩↑咩↓咩↗咩↘咩↑咩↗咩↗咩↓咩↓咩↘咩↑咩↗咩↗咩→咩↓",
|
||||
"authorizeTitle": "咩↑咩↑咩→咩↑咩↘咩↗",
|
||||
"authorizeCaption": "咩↓咩↘咩↑咩↓咩↗咩↘咩↓咩↘咩↗咩↘咩↑咩↘咩↓咩→咩↓咩↑咩↗咩↘咩↘咩↗咩↗咩↘咩↓咩↑咩↘咩→咩↑咩↘",
|
||||
"authorizeErrorHint": "咩↑咩↓咩↘咩→咩↓咩↗咩↗咩↑咩↘咩↘咩↓咩↑咩→咩↘咩↘咩↗咩↓咩↘咩↗咩↓咩↓咩↗咩↗咩↑咩→咩→咩↓咩↘咩↑咩→",
|
||||
"authorizeRedirectHint": "咩↓咩↓咩→咩↑咩↓咩→咩→咩↑咩↓咩↗咩↘咩↗咩↑咩↗咩→咩↗咩↑",
|
||||
"authorizeCompleted": "咩↗咩→咩↘",
|
||||
"authorizeCompletedCaption": "咩↓咩↓咩↗咩↗咩↑咩↘咩↘咩↑咩↗咩↘咩↑咩→咩↓咩↑咩↘咩↗咩↗咩↑咩↘咩↗咩↘咩↘咩↑",
|
||||
"authorizeCompletedRedirect": "咩→咩↘咩↑咩↓咩↗咩↓咩→咩→咩↗咩↘咩→咩↑咩↘咩→咩↘咩↘咩↓咩↘咩→咩→咩↗咩↘咩↑咩↗咩→咩↗",
|
||||
"authorizeCompletedRedirectHint": "咩↑咩↑咩↑咩↘咩→咩↗",
|
||||
"decline": "咩↗咩↘",
|
||||
"approve": "咩→咩↓"
|
||||
}
|
@ -24,6 +24,7 @@ export default defineNuxtConfig({
|
||||
locales: [
|
||||
{ code: "en", name: "English", file: "en-US.json" },
|
||||
{ code: "zh-CN", name: "简体中文", file: "zh-CN.json" },
|
||||
{ code: "ml-SG", name: "羊语", file: "ml-SG.json" },
|
||||
],
|
||||
lazy: true,
|
||||
langDir: "lang",
|
||||
@ -71,6 +72,8 @@ export default defineNuxtConfig({
|
||||
highlight: {
|
||||
theme: "github-dark",
|
||||
},
|
||||
locales: ["en", "zh-CN"],
|
||||
defaultLocale: "en",
|
||||
},
|
||||
|
||||
pinia: {
|
||||
|
@ -42,9 +42,13 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getLocale } from "~/utils/locale"
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
const { data: products } = await useAsyncData("products", () => queryContent("/products").where({ archived: { $ne: true } }).limit(5).find())
|
||||
const { data: products } = await useAsyncData("products", () => {
|
||||
return queryContent("/products").where({ _locale: getLocale(), archived: { $ne: true } }).limit(5).find()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
@ -26,7 +26,7 @@
|
||||
</v-card>
|
||||
|
||||
<article class="text-base prose xl:text-lg mx-auto">
|
||||
<content-doc>
|
||||
<content-renderer :value="page">
|
||||
<template #empty>
|
||||
<v-empty-state
|
||||
icon="mdi-image-broken-variant"
|
||||
@ -39,19 +39,9 @@
|
||||
</template>
|
||||
</v-empty-state>
|
||||
</template>
|
||||
<template #not-found>
|
||||
<v-empty-state
|
||||
icon="mdi-flask-empty-remove-outline"
|
||||
text="We haven't this product, yet."
|
||||
title="Not Found"
|
||||
class="no-content-placeholder"
|
||||
>
|
||||
<template #actions>
|
||||
<v-btn prepend-icon="mdi-list-box" variant="plain" text="Back to index" to="/products" exact />
|
||||
</template>
|
||||
</v-empty-state>
|
||||
</template>
|
||||
</content-doc>
|
||||
|
||||
<content-renderer-markdown :value="page" />
|
||||
</content-renderer>
|
||||
</article>
|
||||
</v-container>
|
||||
</template>
|
||||
@ -67,7 +57,14 @@
|
||||
const route = useRoute()
|
||||
|
||||
const { t } = useI18n()
|
||||
const { data: page } = await useAsyncData("page", queryContent(route.path).findOne)
|
||||
const { data: page } = await useAsyncData<any>("page", queryContent(route.path).where({ _locale: getLocale() }).findOne)
|
||||
|
||||
if (page.value == null) {
|
||||
throw createError({
|
||||
status: 404,
|
||||
statusMessage: "Product Not Found",
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
@ -28,13 +28,17 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getLocale } from "~/utils/locale"
|
||||
|
||||
useHead({
|
||||
title: "Products",
|
||||
})
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
const { data: products } = await useAsyncData("products", () => queryContent("/products").find())
|
||||
const { data: products } = await useAsyncData("products", () => {
|
||||
return queryContent("/products").where({ _locale: getLocale() }).find()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
7
utils/locale.ts
Normal file
7
utils/locale.ts
Normal file
@ -0,0 +1,7 @@
|
||||
export function getLocale() {
|
||||
const fallbackLocale = "en"
|
||||
const supportedLocales = ["en", "zh-CN"]
|
||||
const { locale } = useI18n()
|
||||
|
||||
return supportedLocales.includes(locale.value) ? locale.value : fallbackLocale;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user