refactor: update site metadata and translations

- Renamed "Site" to "Metadata" in translation files for clarity.
- Updated the title, tagline, and description in both English and Chinese translations to reflect the new branding.
- Adjusted references in various components to use the updated metadata structure.
- Removed the obsolete site.webmanifest file and updated the manifest path in the metadata construction.
This commit is contained in:
javayhu 2025-03-23 15:37:38 +08:00
parent 7cf3a5afe8
commit a6e2ee698a
12 changed files with 24 additions and 26 deletions

View File

@ -1,7 +1,9 @@
{
"Site": {
"Metadata": {
"name": "MkSaaS",
"tagline": "Make AI SaaS in hours, simply and effortlessly"
"title": "MkSaaS - The Best AI SaaS Boilerplate",
"tagline": "Make AI SaaS in days, simply and effortlessly",
"description": "MkSaaS is the best AI SaaS boilerplate. Make AI SaaS in days, simply and effortlessly"
},
"Common": {
"login": "Log in",
@ -18,10 +20,6 @@
"cancel": "Cancel",
"logoutFailed": "Failed to log out"
},
"Metadata": {
"title": "MkSaaS - The Best AI SaaS Boilerplate",
"description": "MkSaaS is the best AI SaaS boilerplate. Make AI SaaS in hours, simply and effortlessly"
},
"HomePage": {
"title": "next-intl example",
"description": "This is a simple example of how to use next-intl to build a website"

View File

@ -1,7 +1,9 @@
{
"Site": {
"Metadata": {
"name": "MkSaaS",
"tagline": "使用 MkSaaS 在几小时内轻松构建您的 AI SaaS"
"title": "MkSaaS - 最好的 AI SaaS 模板",
"tagline": "使用 MkSaaS 在几天内轻松构建您的 AI SaaS",
"description": "MkSaaS 是构建 AI SaaS 的最佳模板,使用 MkSaaS 可以在几天内轻松构建您的 AI SaaS简单且毫不费力。"
},
"Common": {
"login": "登录",
@ -18,10 +20,6 @@
"cancel": "取消",
"logoutFailed": "退出失败"
},
"Metadata": {
"title": "MkSaaS - 最好的 AI SaaS 模板",
"description": "MkSaaS 是构建 AI SaaS 的最佳模板,使用 MkSaaS 可以在几小时内轻松构建您的 AI SaaS简单且毫不费力。"
},
"HomePage": {
"title": "MkSaaS 示例",
"description": "这是一个使用 MkSaaS 构建网站的简单示例"

View File

@ -1 +0,0 @@
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}

View File

@ -22,9 +22,9 @@ import { type MetadataRoute } from 'next';
*/
export default function manifest(): MetadataRoute.Manifest {
return {
name: defaultMessages.Site.name,
short_name: defaultMessages.Site.name,
description: defaultMessages.Site.tagline,
name: defaultMessages.Metadata.name,
short_name: defaultMessages.Metadata.name,
description: defaultMessages.Metadata.description,
start_url: '/',
display: 'standalone',
background_color: '#ffffff',

View File

@ -38,7 +38,7 @@ export function DashboardSidebar({ ...props }: React.ComponentProps<typeof Sideb
<LocaleLink href="/">
<Logo className="size-5 rounded-full" />
<span className="truncate font-semibold text-base">
{t('Site.name')}
{t('Metadata.name')}
</span>
</LocaleLink>
</SidebarMenuButton>

View File

@ -25,13 +25,13 @@ export function Footer({ className }: React.HTMLAttributes<HTMLElement>) {
<div className="items-center space-x-2 flex">
<Logo />
<span className="text-xl font-semibold">
{t('Site.name')}
{t('Metadata.name')}
</span>
</div>
{/* tagline */}
<p className="text-muted-foreground text-base py-2 md:pr-12">
{t('Site.tagline')}
{t('Metadata.tagline')}
</p>
{/* social links */}
@ -94,7 +94,7 @@ export function Footer({ className }: React.HTMLAttributes<HTMLElement>) {
<div className="border-t py-8">
<Container className="px-4 flex items-center justify-between">
<span className="text-muted-foreground text-sm">
&copy; {new Date().getFullYear()} {t('Site.name')} All Rights
&copy; {new Date().getFullYear()} {t('Metadata.name')} All Rights
Reserved.
</span>

View File

@ -76,7 +76,7 @@ export function NavbarMobile({
<LocaleLink href={Routes.Root} className="flex items-center gap-2">
<Logo />
<span className="text-xl font-semibold">
{t('Site.name')}
{t('Metadata.name')}
</span>
</LocaleLink>

View File

@ -67,7 +67,7 @@ export function Navbar({ scroll }: NavBarProps) {
<LocaleLink href="/" className="flex items-center space-x-2">
<Logo />
<span className="text-xl font-semibold">
{t('Site.name')}
{t('Metadata.name')}
</span>
</LocaleLink>
</div>

View File

@ -52,7 +52,7 @@ export const websiteConfig: WebsiteConfig = {
},
social: {
github: 'https://github.com/MkSaaSHQ',
twitter: 'https://twitter.com/mksaas',
twitter: 'https://x.com/MkSaaSHQ',
blueSky: 'https://bsky.app/profile/mksaas.com',
youtube: 'https://www.youtube.com/@MkSaaSHQ',
linkedin: 'https://linkedin.com/company/mksaas',

View File

@ -13,7 +13,7 @@ import { admin, username } from 'better-auth/plugins';
* https://www.better-auth.com/docs/reference/options
*/
export const auth = betterAuth({
appName: defaultMessages.Site.name,
appName: defaultMessages.Metadata.name,
database: drizzleAdapter(db, {
provider: 'pg', // or "mysql", "sqlite"
// The schema object that defines the tables and fields

View File

@ -2,6 +2,7 @@ import { websiteConfig } from '@/config';
import { routing } from '@/i18n/routing';
import type { Metadata } from 'next';
import { getBaseUrl } from './urls/get-base-url';
import { defaultMessages } from '@/i18n/messages';
/**
* Construct the metadata object for the current page (in docs/guides)
@ -21,6 +22,8 @@ export function constructMetadata({
noIndex?: boolean;
locale?: string;
} = {}): Metadata {
title = title || defaultMessages.Metadata.name;
description = description || defaultMessages.Metadata.description;
image = image || websiteConfig.metadata.image;
const ogImageUrl = new URL(`${getBaseUrl()}${image}`);
return {
@ -53,7 +56,7 @@ export function constructMetadata({
apple: '/apple-touch-icon.png',
},
metadataBase: new URL(getBaseUrl()),
manifest: `${getBaseUrl()}/site.webmanifest`,
manifest: `${getBaseUrl()}/manifest.webmanifest`,
...(noIndex && {
robots: {
index: false,

View File

@ -43,7 +43,7 @@ export default function EmailLayout({ locale, messages, children }: EmailLayoutP
<Hr className="my-8" />
<Text className="mt-4">
{t('Mail.common.team', { name: t('Site.name') })}
{t('Mail.common.team', { name: t('Metadata.name') })}
</Text>
<Text>
{t('Mail.common.copyright', { year: new Date().getFullYear() })}