- {env.DEV_DEMO_NOTES === "true" ? (
+ {env.DEV_DEMO_NOTES === "true" ?
Download Starter
- ) : (
-
+ :
Buy Now
- )}
+ }
Hello, Tokens!
+//
+
// todo: try to use this for static pages rendering
// unstable_setRequestLocale(locale); // needs for static pages rendering
// const t = useTranslations("landing"); // traditional page translations
diff --git a/src/data/i18n/en-us.json b/src/data/i18n/en-us.json
index f9aebf8..e354a01 100644
--- a/src/data/i18n/en-us.json
+++ b/src/data/i18n/en-us.json
@@ -554,7 +554,7 @@
}
},
"plugins": {
- "stars": "Star Relivator v1.2.0 on GitHub ⭐"
+ "stars": "Star Relivator v1.2.1 on GitHub ⭐"
},
"pricing": {
"compare": {
diff --git a/src/data/i18n/uk-ua.json b/src/data/i18n/uk-ua.json
index ed3d42f..7b28d7c 100644
--- a/src/data/i18n/uk-ua.json
+++ b/src/data/i18n/uk-ua.json
@@ -62,7 +62,7 @@
"other-options": "Увійдіть за допомогою:",
"password": "Пароль",
"password-placeholder": "Введіть ваш пароль",
- "sign-out": "Вийти з обліковки",
+ "sign-out": "Вийти",
"signup": "Зареєструйтеся тут.",
"submit": "Увійти",
"title": "Увійти",
diff --git a/src/data/i18n/zh-cn.json b/src/data/i18n/zh-cn.json
new file mode 100644
index 0000000..a51886d
--- /dev/null
+++ b/src/data/i18n/zh-cn.json
@@ -0,0 +1,728 @@
+{
+ "landing": {
+ "heading": "打造更高效、更吸引人、更有利可图的在线商店: Relivator 用 Next.js 的力量赋能您的电子商务",
+ "about": "我们的目标是创建世界上功能最丰富、全球性和标志性的 Next.js 启动器。\n探索完整的功能列表。\n提供的不仅仅是代码, 更是一段旅程。\n它很稳定, 可以投入生产。",
+ "btn1-products-now": "现在产品",
+ "btn1-sell": "卖",
+ "btn2-download": "下载",
+ "btn2-starter": "Next.js Relivator 入门版",
+ "features": {
+ "clock": {
+ "description": "通过即时切换 MySQL 和 Postgres, 使用 Drizzle ORM 保持最佳性能。\n享受灵活的部署选项, 包括 Planetscale、Vercel、Railway、Neon 等。",
+ "title": "数据库集成: 强大且多功能"
+ },
+ "cryptography": {
+ "description": "通过 App Router、布局和加载 UI 等高级功能体验无缝导航。\n利用强大的 API 路线并探索基础之外的创新功能。",
+ "title": "Next.js 14: 增强的用户体验"
+ },
+ "currency": {
+ "description": "使用基于 Radix 和 Shadcn UI 的组件制作令人惊叹的 UI, 并使用 Tailwind CSS 进行精美的设计, 以实现现代美学。\n建议使用 VSCode 以获得完整的沉浸式体验。",
+ "title": "组成部分: 优雅"
+ },
+ "devtools": {
+ "ambitions-description": "停止从一个启动器运行到下一个启动器。\n有了 Relivator, 您将拥有无限的可能性。\n你可以创造任何你想要的东西;\n所有的工具都已经为您准备好了。",
+ "description": "实施了强大的订阅系统, 支持免费和付费计划, 并针对效率和可扩展性进行了优化。\n学习该项目的 README.md 以了解更多信息。",
+ "title": "Stripe 订阅: 功能强大"
+ },
+ "files": {
+ "description": "使用 NextAuth.js 和 Clerk 部署多功能身份验证系统, 根据您的应用程序需求量身定制。\n在 .env.example 文件中了解更多信息, 然后您就可以开始了。",
+ "on-the-fly": "完全动态定制",
+ "on-the-fly-description": "深入了解我们项目存储库中的广泛功能列表。\n轻松在 Clerk/NextAuth.js 和 MySQL/PostgreSQL 之间切换, 以满足您的项目需求。",
+ "roadmap": "远大的抱负: 无限的可能性",
+ "title": "用户身份验证: 安全"
+ },
+ "subtitle": "从代码到设计, Relivator 的功能可以增强您的 Web 项目。",
+ "text": {
+ "description": "使用服务器和客户端组件轻松操作您的应用程序。\n利用高级挂钩并探索一系列附加功能, 以获得更流畅的开发体验。",
+ "title": "React 18: 简化的现代开发"
+ },
+ "title": "特征"
+ },
+ "get-started": "特征",
+ "meta": {
+ "description": "使用 Next.js 构建的 Relivator",
+ "title": "救援者"
+ },
+ "open-source": {
+ "stars": "该项目有 {count} 颗星! \n😍",
+ "stars#few": "该项目有 {count} 颗星! \n😍",
+ "stars#many": "该项目有 {count} 颗星! \n😍",
+ "stars#one": "这个项目只有一颗星...😢",
+ "subtitle": {
+ "first": "Bleverse Relivator 倡导开源精神并鼓励协作代码进化。",
+ "second": "探索我们的代码库"
+ },
+ "title": "拥抱开源"
+ },
+ "subtitle": "Bleverse Relivator 简化了您的开发之旅。\n从针对现代 Web 开发优化的内置功能开始。",
+ "things": {
+ "linkText": "前往列表"
+ },
+ "title": "探索 React、Next.js 等的重要工具。\n专为您量身定制。"
+ },
+ "DataTable": {
+ "block": "堵塞",
+ "columns": "列",
+ "delete": "删除",
+ "email": "电子邮件",
+ "filter-emails-placeholder": "过滤电子邮件",
+ "id": "ID",
+ "isadmin": "是管理员",
+ "lastlogintime": "上次登录时间",
+ "make-admin": "设为管理员",
+ "make-non-admin": "设为非管理员",
+ "name": "姓名",
+ "next": "下一个",
+ "no-results": "没有结果",
+ "of": "的",
+ "previous": "以前的",
+ "registrationtime": "报名时间",
+ "rows-selected": "已选择行",
+ "success-description": "成功",
+ "success-title": "成功地",
+ "unblock": "解锁",
+ "view-profile": "查看资料"
+ },
+ "EnvironmentVariables": {
+ "errors": {
+ "something-wrong": "这些环境变量指定不正确或未指定(请检查.env文件): "
+ }
+ },
+ "LanguageSwitch": {
+ "choose-language": "语言"
+ },
+ "LocaleSwitcher": {
+ "label": "改变语言",
+ "selectLocale": "语言"
+ },
+ "LoginForm": {
+ "description": "使用您的电子邮件地址和密码登录您的帐户。",
+ "email": "电子邮件",
+ "email-placeholder": "输入你的电子邮箱地址",
+ "error-heading": "无法登录。",
+ "errors": {
+ "Callback": "尝试使用不同的帐户进行签名。",
+ "CredentialsSignin": "登录失败。\n检查您提供的详细信息是否正确。",
+ "Email or password is incorrect": "电子邮件或密码不正确。",
+ "EmailCreateAccount": "尝试使用不同的帐户进行签名。",
+ "EmailSignin": "检查您的电子邮件地址。",
+ "Invalid credentials": "无效证件。",
+ "OAuthAccountNotLinked": "要确认您的身份, 请使用您最初使用的同一帐户登录。",
+ "OAuthCallback": "尝试使用不同的帐户进行签名。",
+ "OAuthCreateAccount": "尝试使用不同的帐户进行签名。",
+ "OAuthSignin": "尝试使用不同的帐户进行签名。",
+ "Signin": "尝试使用不同的帐户进行签名。",
+ "default": "无法登录。"
+ },
+ "form": {
+ "description": "使用您的电子邮件地址和密码登录您的帐户。",
+ "email": "电子邮件",
+ "email-placeholder": "输入你的电子邮箱地址",
+ "error-heading": "无法登录。",
+ "no-account": "没有帐户?",
+ "other-options": "使用以下方式登录: ",
+ "password": "密码",
+ "password-placeholder": "输入您的密码",
+ "sign-out": "登出",
+ "signup": "在此注册。",
+ "submit": "登入",
+ "title": "登入",
+ "wait": "请稍等..."
+ },
+ "no-account": "没有帐户?",
+ "other-options": "使用以下方式登录: ",
+ "password": "密码",
+ "password-placeholder": "输入您的密码",
+ "reset-password": "重设密码",
+ "signin": "登入",
+ "signup": "在此注册。",
+ "submit": "登入",
+ "success-description": "成功。",
+ "success-title": "完毕!",
+ "title": "登入",
+ "wait": "请稍等..."
+ },
+ "MainError": {
+ "error": "错误",
+ "fetch-failed": "无法获取用户。",
+ "not-authenticated": "未经过验证。",
+ "not-found": "未找到用户。"
+ },
+ "Navbar": {
+ "home": "家",
+ "sign-out": "登出",
+ "signin": "登入"
+ },
+ "ProfileButton": {
+ "admin": "管理面板",
+ "logout": "登出",
+ "my-account": "我的账户",
+ "new-review": "新评论",
+ "profile": "轮廓",
+ "settings": "设置"
+ },
+ "ProfileSettingsForm": {
+ "description": "更新您的个人资料设置。",
+ "errors": {
+ "update-error": "无法更新用户。"
+ },
+ "name": "姓名",
+ "name-min": "名称必须至少包含 2 个字符。",
+ "name-placeholder": "输入你的名字",
+ "submit": "更新用户",
+ "title": "个人资料设置",
+ "update-success": "用户更新成功。"
+ },
+ "RegisterForm": {
+ "description": "使用您的电子邮件地址和密码创建一个新帐户。",
+ "email": "电子邮件",
+ "email-placeholder": "输入你的电子邮箱地址",
+ "error-heading": "无法注册。",
+ "errors": {
+ "email-exists": "使用此电子邮件的用户已存在。",
+ "fill-fields": "请填写所有字段。",
+ "not-authenticated": "未经过验证。"
+ },
+ "form": {
+ "email-min": "用户名必须至少有 2 个字符。",
+ "invalid-email": "无效的邮件地址。",
+ "name-min": "名称必须至少包含 2 个字符。",
+ "password-min": "密码必须至少6个字符。"
+ },
+ "have-account": "已经有帐户?",
+ "name": "姓名",
+ "name-placeholder": "输入你的名字",
+ "other-options": "或者通过以下方式注册: ",
+ "password": "密码",
+ "password-placeholder": "输入您的密码",
+ "signin": "在这里登录。",
+ "submit": "报名",
+ "success-description": "您现在可以登录您的帐户。",
+ "success-title": "注册成功!",
+ "title": "报名",
+ "wait": "请稍等..."
+ },
+ "ReviewNewForm": {
+ "description": "创建新评论。",
+ "errors": {
+ "create-error": "无法创建评论。"
+ },
+ "grade": "年级",
+ "grade-placeholder": "输入年级",
+ "item": "物品",
+ "item-placeholder": "所审查艺术品的名称",
+ "submit": "创建评论",
+ "tags": "标签",
+ "tags-placeholder": "输入标签",
+ "title": "创建评论",
+ "title-field": "标题",
+ "title-field-placeholder": "输入标题"
+ },
+ "TagsSelect": {
+ "no-options": "无选项",
+ "search": "搜索...",
+ "tags": "标签",
+ "tags-placeholder": "输入标签"
+ },
+ "ThemeSwitch": {
+ "dark": "黑暗的",
+ "light": "光",
+ "system": "系统"
+ },
+ "account-page": {
+ "Settings": "设置",
+ "loggedIn": "登录",
+ "loggedOut": "登出",
+ "login": "登入",
+ "logout": "登出",
+ "title": "帐户"
+ },
+ "auth-page": {
+ "error": "有事吗...",
+ "password": "密码",
+ "submit": "提交",
+ "username": "用户名"
+ },
+ "auth-pages-content": {
+ "change": "更改我的电子邮件/密码",
+ "description": "如果需要, 您可以在此处链接您的其他个人资料。\n只需使用下面的按钮即可登录。\n然后, 您可以注销并使用您链接的任何社交个人资料重新登录。",
+ "magic-link": "发送魔法链接",
+ "sign-out": "登出"
+ },
+ "auth-provider": {
+ "please-wait": "请稍等...",
+ "sign-in": "使用 {name} 登录",
+ "sign-in-null": "{姓名}",
+ "sign-up": "使用 {name} 注册",
+ "sign-up-null": "{姓名}"
+ },
+ "auth": {
+ "emailSubmitButton": {
+ "label": "提交"
+ },
+ "error": {
+ "default": "尝试使用不同的帐户进行签名。",
+ "email": "电子邮件找不到。\n尝试与其他提供商签约。",
+ "oauthNotLinked": "要确认您的身份, 请使用您最初使用的同一帐户登录。",
+ "unknown": "发生错误。\n请再试一次。",
+ "unknown-error": "出了些问题。\n请访问 /contact 页面并告知我们的支持团队有关此未知错误的信息。"
+ },
+ "legal": "使用上面的按钮即表示您同意",
+ "legal-and": "和",
+ "legal-privacy": "隐私政策",
+ "legal-terms": "服务条款",
+ "magicLink": {
+ "description": "请务必检查您的垃圾邮件文件夹。",
+ "title": "一封神奇链接电子邮件已发送。 🧙"
+ },
+ "noProvider": {
+ "link": "配置至少一个身份验证提供商(例如电子邮件、Google、GitHub、Facebook 等)",
+ "preLink": "你需要"
+ },
+ "orEmailLabel": "或者通过您的电子邮件",
+ "other-options": "链接更多帐户: ",
+ "register": {
+ "agreeToTerms": "注册即表示您同意我们的<条款>服务条款条款>和<隐私>隐私政策隐私>。",
+ "alreadyHaveAccountLabel": {
+ "link": "登入",
+ "preLink": "已经有帐户?"
+ },
+ "heading": "创建一个帐户"
+ },
+ "signin": {
+ "heading": "登入",
+ "noAccountLabel": {
+ "link": "免费注册",
+ "preLink": "没有帐户?"
+ }
+ },
+ "signinErrorToast": {
+ "description": "注册被禁用。",
+ "title": "未经授权",
+ "tooManyRequests": "请求太多。\n稍后再试。"
+ }
+ },
+ "common": {
+ "home": {
+ "linkText": "返回首页"
+ },
+ "userLogin": {
+ "signInText": "登入",
+ "signOutText": "退出{用户名}"
+ }
+ },
+ "environments": {
+ "auth-button-placeholder": "⚠️ 请在环境变量中指定 Github/Google/Discord 以解锁与身份验证相关的功能。"
+ },
+ "general": {
+ "about": "关于",
+ "pricing": "价钱",
+ "tools": "实用程序"
+ },
+ "islands": {
+ "command": {
+ "dark": "黑暗的",
+ "light": "光",
+ "system": "系统",
+ "theme": "主题",
+ "tools": "特征"
+ },
+ "copy-button": {
+ "copied": "已复制到剪贴板!",
+ "copy": "复制到剪贴板"
+ },
+ "footer": "由{作者}开发。\n源代码可在 {github} 上获取。",
+ "links": {
+ "github": "我的 GitHub 个人资料",
+ "twitter": "我的推特个人资料"
+ },
+ "main": {
+ "about": "关于",
+ "github": "github",
+ "tools": "特征",
+ "twitter": "推特"
+ },
+ "pricing": {
+ "toast": {
+ "description": "该项目是开源的并且可以免费使用。 \n🥳",
+ "title": "免费! \n😜"
+ }
+ },
+ "search": {
+ "placeholder": "输入命令或搜索",
+ "title": "搜索..."
+ },
+ "toast": {
+ "error": "错误",
+ "success": "成功",
+ "warning": "警告"
+ }
+ },
+ "meta": {
+ "description": "Next.js 14 入门",
+ "title": "救援者"
+ },
+ "pages": {
+ "about": {
+ "author": "执照",
+ "credits": {
+ "title": "制作人员",
+ "topics": {
+ "lucide": "对于很酷的图标。",
+ "nextjs": "对于基于 React 的 Web 框架。",
+ "radix-ui": "对于美妙的原始人。",
+ "shadcn/ui": "对于别致的组件。",
+ "tailwind": "难以置信地简化了我们的 CSS 生活。",
+ "typescript": "对于类型安全的 JavaScript。",
+ "vercel": "用于部署我的所有项目。"
+ }
+ },
+ "subtitle": "Bleverse Relivator 是一个强大的 Next.js TypeScript Tailwind 启动器。\n它简化了开发过程, 并为创建 Web 项目提供了坚实的基础。\n欢迎通过{link}随意使用、改编该项目并为该项目做出贡献。",
+ "subtitle-link": "点击这里",
+ "title": "关于"
+ },
+ "home": {
+ "features": {
+ "clock": {
+ "description": "使用 Drizzle ORM 保持正轨。\n部署在 Vercel、Railway、Neon 等上",
+ "title": "数据库"
+ },
+ "cryptography": {
+ "description": "参与应用程序目录、路由、布局、加载 UI、API 路由等。",
+ "title": "Next.js 14"
+ },
+ "currency": {
+ "description": "UI 组件使用 Radix UI 构建并使用 Tailwind CSS 进行样式设置。",
+ "title": "成分"
+ },
+ "devtools": {
+ "description": "使用 Stripe 进行免费和付费订阅。",
+ "title": "订阅"
+ },
+ "files": {
+ "description": "使用 NextAuth.js 的中间件身份验证。",
+ "title": "验证"
+ },
+ "subtitle": "从代码到设计, Relivator 的功能可以增强您的 Web 项目。",
+ "text": {
+ "description": "使用服务器和客户端组件轻松操作应用程序。\n使用钩子。\n和更多。",
+ "title": "反应18"
+ },
+ "title": "特征"
+ },
+ "get-started": "特征",
+ "open-source": {
+ "stars": "该项目有 {count} 颗星! \n😍",
+ "stars#few": "该项目有 {count} 颗星! \n😍",
+ "stars#many": "该项目有 {count} 颗星! \n😍",
+ "stars#one": "这个项目只有一颗星...😢",
+ "subtitle": {
+ "first": "Bleverse Relivator 倡导开源精神并鼓励协作代码进化。",
+ "second": "探索我们的代码库"
+ },
+ "title": "拥抱开源"
+ },
+ "subtitle": "Bleverse Relivator 简化了您的开发之旅。\n从针对现代 Web 开发优化的内置功能开始。",
+ "title": "探索 React、Next.js 等的重要工具。\n专为您量身定制。"
+ },
+ "not-found": {
+ "description": "您要查找的资源可能已被移动、重命名, 或者可能根本不存在。\n请验证 URL 或使用菜单导航至其他部分。",
+ "go-home": "返回首页",
+ "title": "🫠 页面未找到! \n🥲 可悲的是..."
+ },
+ "tools": {
+ "binary-code": {
+ "decode": "二进制到文本",
+ "encode": "文本转二进制",
+ "title": "二进制代码"
+ },
+ "caesar-cipher": {
+ "actions": {
+ "code": "代码",
+ "decode": "解码"
+ },
+ "decode": "密码转文本",
+ "encode": "文本到密码",
+ "key": "钥匙",
+ "title": "凯撒密码",
+ "toast": {
+ "invalid-key": "请输入 0 - 25 之间的数字"
+ }
+ },
+ "clock": {
+ "title": "钟"
+ },
+ "color-picker": {
+ "title": "选色器"
+ },
+ "css-minifier": {
+ "actions": {
+ "minify": "缩小",
+ "minifying": "缩小化"
+ },
+ "title": "CSS 缩小器",
+ "toast": {
+ "required": "请输入一些 CSS 来缩小",
+ "success": "CSS 缩小成功"
+ }
+ },
+ "currency": {
+ "not-found": "未找到货币。",
+ "placeholder": "搜索货币...",
+ "result": "{from} 等于 {to}",
+ "source": "来源",
+ "title": "货币"
+ },
+ "hex-code": {
+ "actions": {
+ "code": "代码",
+ "decode": "解码"
+ },
+ "decode": "十六进制转文本",
+ "encode": "文本转十六进制",
+ "title": "十六进制代码"
+ },
+ "json-formatter": {
+ "actions": {
+ "format": "格式",
+ "formatting": "格式化"
+ },
+ "placeholder": "空格数",
+ "title": "JSON 格式化程序",
+ "toast": {
+ "invalid-json": "无效的 JSON",
+ "invalid-number": "请输入有效号码",
+ "required": "请输入一些 JSON 进行格式化",
+ "success": "JSON 格式化成功"
+ }
+ },
+ "length": {
+ "centimeter": "厘米",
+ "foot": "脚",
+ "inch": "英寸",
+ "kilometer": "公里",
+ "meter": "仪表",
+ "micrometers": "千分尺",
+ "mile": "英里",
+ "millimeter": "毫米",
+ "nanometers": "纳米",
+ "nautical mile": "海里",
+ "title": "长度",
+ "yard": "院子"
+ },
+ "morse-code": {
+ "actions": {
+ "code": "代码",
+ "decode": "解码"
+ },
+ "decode": "莫尔斯电码转文本",
+ "encode": "文本转莫尔斯电码",
+ "title": "摩尔斯电码"
+ },
+ "password-generator": {
+ "actions": {
+ "generate": "产生"
+ },
+ "length": "长度: {长度}",
+ "placeholder": "密码",
+ "title": "密码生成器"
+ },
+ "qr-code": {
+ "actions": {
+ "download": "下载",
+ "share": {
+ "twitter": "分享到Twitter",
+ "whatsapp": "在 WhatsApp 上分享"
+ }
+ },
+ "hint": "(您的二维码将自动生成)",
+ "placeholder": "在此输入您的网站、文字或链接",
+ "title": "二维码"
+ },
+ "random-color": {
+ "generate": "新的颜色",
+ "title": "随机颜色"
+ },
+ "stopwatch": {
+ "clear": "清除",
+ "start": "开始",
+ "stop": "停止",
+ "title": "跑表"
+ },
+ "text-converter": {
+ "actions": {
+ "camel-case": "转换为驼峰式大小写",
+ "capitalize": "大写",
+ "kebab-case": "转换为烤肉串大小写",
+ "lowercase": "转换为小写",
+ "pascal-case": "转换为帕斯卡大小写",
+ "remove-accents": "删除重音符号",
+ "remove-duplicates": "删除重复项",
+ "remove-empty-lines": "删除空行",
+ "remove-spaces": "删除空格",
+ "remove-special-characters": "删除特殊字符",
+ "reverse": "撤销",
+ "snake-case": "转换为蛇形格式",
+ "uppercase": "转换为大写"
+ },
+ "clear-input": "清除输入",
+ "placeholder": {
+ "input": "在这里输入一些内容...",
+ "output": "结果"
+ },
+ "title": "文本转换器",
+ "toast": {
+ "required": "请输入一些要转换的文字",
+ "success-camel-case": "成功转换为 Camel 大小写",
+ "success-capitalize": "资本化成功",
+ "success-kebab-case": "成功转换为烤肉串案例",
+ "success-lowercase": "转小写成功",
+ "success-pascal-case": "成功转换为帕斯卡大小写",
+ "success-remove-accents": "成功删除重音",
+ "success-remove-duplicates": "重复项删除成功",
+ "success-remove-empty-lines": "空行删除成功",
+ "success-remove-spaces": "空格删除成功",
+ "success-remove-special-characters": "特殊字符已成功删除",
+ "success-reverse": "逆转成功",
+ "success-snake-case": "成功转换为蛇形案例",
+ "success-uppercase": "转换为大写成功"
+ }
+ },
+ "timestamp": "-",
+ "title": "实用程序",
+ "todo": {
+ "actions": {
+ "create": "创建新待办事项",
+ "delete": "删除任务"
+ },
+ "placeholder": "添加新任务",
+ "title": "去做"
+ },
+ "unit-converter": {
+ "actions": "-",
+ "categories": "-",
+ "placeholder": "-",
+ "toast": "-"
+ },
+ "url-encoder-decoder": {
+ "actions": "-"
+ },
+ "word-counter": "-"
+ }
+ },
+ "plugins": {
+ "stars": "在 GitHub 上给 Relivator v1.2.1 点赞 ⭐"
+ },
+ "pricing": {
+ "compare": {
+ "features": {
+ "enterprise": "商业",
+ "features": "特征",
+ "free": "自由的",
+ "team": "团队"
+ },
+ "title": "比较计划"
+ },
+ "cta": {
+ "get-started": "开始使用",
+ "sign-up": "登记"
+ },
+ "faq": {
+ "have-questions": "问题?",
+ "read-faq": "请阅读我们的{常见问题解答}。",
+ "title": "常见问题解答"
+ },
+ "features": {
+ "features": {
+ "included": "包括",
+ "not-included": "不包含"
+ },
+ "title": "特征"
+ },
+ "hero": {
+ "description": "加入 Relivator 社区。\n选择最适合您的计划。",
+ "pricing": "价钱"
+ },
+ "plans": {
+ "title": "计划"
+ },
+ "questions": {
+ "answer-card": "点菜定价允许您根据您的具体需求定制您的计划。\n您只需为您需要的功能付费。",
+ "answer-change": "是的, 您可以随时更改计划。",
+ "answer-free": "是的, Relivator 提供具有基本功能集的免费计划。\n您可以免费使用它。",
+ "answer-limits": "如果超出计划限制, 您可以升级计划以获得更多资源, 或者根据超额使用量支付额外费用。",
+ "answer-nonprofit": "是的, 我们为非营利组织和教育机构提供折扣。\n与我们联系了解更多详情。",
+ "answer-payment": "我们接受信用卡付款并安全在线付款。\n您也可以选择按月或按年付款。",
+ "answer-prices": "所有价格均为每月价格。",
+ "answer-teams": "团队的定价基于团队成员的数量。\n您可以随时添加或删除团队成员, 您的账单将相应调整。",
+ "are-prices": "价格是按月还是按年?",
+ "can-i-change": "我可以稍后更改计划吗?",
+ "do-you-offer": "你们为非营利组织或教育机构提供折扣吗?",
+ "how-does": "点菜定价如何运作?",
+ "how-is": "团队的定价是如何计算的?",
+ "is-there": "Relivator 有免费版本吗?",
+ "what-happens": "如果我超出计划限制会怎样?",
+ "what-payment": "你接受什么支付方式?"
+ }
+ },
+ "settings-page": {
+ "description": "管理您的设置。",
+ "title": "设置"
+ },
+ "signIn": {
+ "LoginForm": {
+ "wait": "请稍等..."
+ },
+ "heading": "登入",
+ "meta": {
+ "description": "登录以获得个性化体验",
+ "title": "登入"
+ },
+ "providerButtonText": "使用 {name} 登录",
+ "providerButtonTextReg": "使用 {name} 注册"
+ },
+ "store": {
+ "categories": {
+ "buyProducts": "购买 ${category} 类别的产品",
+ "buyFromCategories": "从最好的商店购买 {category}",
+ "buyTheBest": "购买最好的 {category}"
+ },
+ "product": {
+ "addToCart": "添加到购物车",
+ "buyProductsFromOurStores": "从我们的商店购买产品",
+ "description": "描述",
+ "moreProductsFrom": "{storeName} 的更多产品",
+ "noDescription": "该产品没有可用的描述。",
+ "products": "产品"
+ },
+ "stores": {
+ "buy-products": "从我们的商店购买产品",
+ "stores": "商店"
+ }
+ },
+ "things": {
+ "heading": "你的救援者",
+ "input": {
+ "placeholder": "输入标题",
+ "submitButtonText": "添加到列表"
+ },
+ "list": {
+ "createdDate": "创建于 {createdDate, date, ::yyyyMMddHHmmss}",
+ "loading": "加载中..."
+ },
+ "meta": {
+ "description": "您的个人物品清单",
+ "title": "你的救援者"
+ },
+ "signIn": "请
登录才能查看。"
+ },
+ "tools": {
+ "about": "-",
+ "categories": "-",
+ "cta": "-",
+ "hero": {
+ "title": "Relivator 的免费在线工具"
+ },
+ "title": "工具"
+ }
+}
diff --git a/src/forms/add-product-form.tsx b/src/forms/add-product-form.tsx
index d9a1840..6d94746 100644
--- a/src/forms/add-product-form.tsx
+++ b/src/forms/add-product-form.tsx
@@ -289,7 +289,7 @@ export function AddProductForm({ storeId }: AddProductFormProps) {
variables.
)}
- {files?.length ? (
+ {files?.length ?
{files.map((file, i) => (
// biome-ignore lint/suspicious/noArrayIndexKey:
@@ -304,7 +304,7 @@ export function AddProductForm({ storeId }: AddProductFormProps) {
))}
- ) : null}
+ : null}
{
+ const images =
+ isArrayOfFile(data.images) ?
+ await startUpload(data.images).then((res) => {
const formattedImages = res?.map((image) => ({
id: image.key,
name: image.key.split("_")[1] ?? image.key,
@@ -279,7 +280,7 @@ export function UpdateProductForm({ product }: UpdateProductFormProps) {
variables.
)}
- {files?.length ? (
+ {files?.length ?
{files.map((file, i) => (
// biome-ignore lint/suspicious/noArrayIndexKey:
@@ -294,7 +295,7 @@ export function UpdateProductForm({ product }: UpdateProductFormProps) {
))}
- ) : null}
+ : null}
Cart {itemCount > 0 && `(${itemCount})`}
- {itemCount > 0 ?
+ {itemCount > 0 ? (
<>
@@ -118,7 +118,8 @@ export async function CartSheet() {
>
- :
+ ) : (
+
- }
+ )}
);
diff --git a/src/islands/commerce/featured-store-items.tsx b/src/islands/commerce/featured-store-items.tsx
index fb6ec7a..28e3ddf 100644
--- a/src/islands/commerce/featured-store-items.tsx
+++ b/src/islands/commerce/featured-store-items.tsx
@@ -84,7 +84,7 @@ export async function FeaturedStoreItems() {
- {guestEmail || session ? (
+ {guestEmail || session ?
<>
{someProducts.map((product: Product) => (
))}
>
- ) : (
- <>
+ : <>
{someProducts.map((product: Product) => (
))}
>
- )}
+ }
diff --git a/src/islands/navigation/carousel-cards.tsx b/src/islands/navigation/carousel-cards.tsx
new file mode 100644
index 0000000..3fbaac1
--- /dev/null
+++ b/src/islands/navigation/carousel-cards.tsx
@@ -0,0 +1,35 @@
+"use client";
+
+import { Card, CardContent } from "~/islands/primitives/card";
+import {
+ Carousel,
+ CarouselContent,
+ CarouselItem,
+ CarouselNext,
+ CarouselPrevious,
+} from "~/islands/primitives/ui/carousel";
+
+export function CarouselCards() {
+ return (
+