feat: 更新网站配置和内容,优化国际化设置

refactor: 重构产线页面和路由,移除无用代码
style: 调整内容格式和样式,统一中英文标点
docs: 更新产品描述和元数据,完善多语言支持
This commit is contained in:
砂糖
2026-01-26 16:22:07 +08:00
parent 8e4f76f9e0
commit 99ce2b7fb8
20 changed files with 100 additions and 369 deletions

View File

@@ -130,16 +130,16 @@ export default async function ProductDetailPage({ params }: { params: Params })
export async function generateStaticParams() {
try {
const defaultLocale = LOCALES[0];
const workShops: Line[] = await getLines(defaultLocale);
const lines: Line[] = await getLines(defaultLocale);
return LOCALES.flatMap((locale) =>
workShops.map((workShop) => ({
lines.map((line) => ({
locale,
slug: workShop.slug as string,
slug: line.slug as string,
}))
);
} catch (error) {
console.error("生成产静态参数失败:", error);
console.error("生成产线静态参数失败:", error);
return [];
}
}

View File

@@ -19,7 +19,7 @@ type MetadataProps = {
export async function generateMetadata({
params,
}: MetadataProps): Promise<Metadata> {
const { locale } = params;
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "Workshop" });
return constructMetadata({

View File

@@ -1,135 +0,0 @@
import { LOCALES } from "@/i18n/routing";
import { getLine, getLines } from "@/lib/lines";
import { constructMetadata } from "@/lib/metadata";
import { Line } from "@/types/line";
import { Metadata } from "next";
import { Locale } from "next-intl";
// 强制静态渲染
export const dynamic = "force-static";
// 固定 Params 类型为普通对象Next.js 原生传参无异步)
type Params = {
locale: string;
slug: string;
};
type MetadataProps = {
params: Params;
};
export async function generateMetadata({
params,
}: MetadataProps): Promise<Metadata> {
const { locale, slug } = await params;
const line = await getLine(locale, slug);
console.log(line);
console.log(line?.slug);
if (!line) {
return constructMetadata({
title: "404 - 产线不存在",
description: "请求的产线页面未找到",
noIndex: true,
locale: locale as Locale,
path: `/line/${slug}`,
canonicalUrl: `/line/${slug}`,
});
}
return constructMetadata({
title: line.title,
description: line.desc,
locale: locale as Locale,
path: `/line/${slug}`,
canonicalUrl: `/line/${slug}`,
});
}
// 页面主组件 - 仅保留字段展示+修复 Hydration 错误
export default async function ProductDetailPage({ params }: { params: Params }) {
// 🔴 核心修复1移除不必要的 awaitparams 是同步对象)
const { locale, slug } = await params;
const line = await getLine(locale, slug);
if (!line) return null;
// 兜底处理:避免字段为空导致属性不匹配
const coverSrc = line.cover || "";
const coverAlt = line.title || "产线封面";
const lineDesc = line.desc || "暂无产线描述";
return (
<div className="min-h-screen bg-gray-50 py-10 px-4 sm:px-6 lg:px-8">
<div className="max-w-6xl mx-auto">
{/* 封面图区域 - 🔴 修复布局属性不一致 */}
<div className="relative rounded-2xl overflow-hidden shadow-lg h-[400px] sm:h-[500px] mb-8">
<img
src={coverSrc}
alt={coverAlt}
className="absolute inset-0 w-full h-full object-cover transition-transform hover:scale-105 duration-700"
// 显式设置属性,确保服务端/客户端一致
loading="lazy"
decoding="async"
/>
</div>
{/* 标题+描述区域 */}
<div className="bg-white rounded-xl p-8 shadow-sm mb-10">
<h1 className="text-3xl sm:text-4xl font-bold text-gray-900 mb-6">
{line.title}
</h1>
<p className="text-lg text-gray-700 leading-relaxed">
{lineDesc}
</p>
</div>
{line.images.length > 0 && (
<div className="bg-white rounded-xl p-8 shadow-sm">
<h2 className="text-2xl font-semibold text-gray-800 mb-6 border-b pb-3 border-gray-200">
</h2>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
{line.images.map((img, index) => {
const stableKey = `line-${slug}-img-${index}-${img.slice(-8)}`;
const imgAlt = `${line.title}-图片${index + 1}`;
return (
<div
key={stableKey}
className="relative rounded-lg overflow-hidden shadow-md h-64 hover:shadow-xl transition-all duration-300"
>
<img
src={img}
alt={imgAlt}
className="absolute inset-0 w-full h-full object-cover transition-transform hover:scale-110 duration-500"
loading="lazy"
decoding="async"
/>
</div>
);
})}
</div>
</div>
)}
</div>
</div>
);
}
export async function generateStaticParams() {
try {
const defaultLocale = LOCALES[0];
const workShops: Line[] = await getLines(defaultLocale);
return LOCALES.flatMap((locale) =>
workShops.map((workShop) => ({
locale,
slug: workShop.slug as string,
}))
);
} catch (error) {
console.error("生成产品静态参数失败:", error);
return [];
}
}

View File

@@ -1,66 +0,0 @@
import { LOCALES } from "@/i18n/routing";
import { getLines } from "@/lib/lines";
import { constructMetadata } from "@/lib/metadata";
import { Line } from "@/types/line";
import { Metadata } from "next";
import { getTranslations } from "next-intl/server";
// 强制静态生成
export const dynamic = "force-static";
// 明确 Params 类型(静态生成的参数)
type Params = { locale: string };
type MetadataProps = {
params: Params;
};
// 生成页面元数据(确保服务端/客户端翻译一致)
export async function generateMetadata({
params,
}: MetadataProps): Promise<Metadata> {
const { locale } = params;
const t = await getTranslations({ locale, namespace: "Workshop" });
return constructMetadata({
page: "Workshop",
title: t("pageTitle", { defaultValue: "车间展示" }), // 使用 next-intl 官方的 defaultValue
description: t("pageDesc", { defaultValue: "公司产品线展示" }),
locale: locale,
path: `/line`,
canonicalUrl: `/line`,
});
}
// 生成静态路由参数(多语言)
export async function generateStaticParams() {
return LOCALES.map((locale) => ({
locale,
}));
}
// 空数据组件(纯静态,无动态属性)
function EmptyState() {
return <div className="py-10 text-center text-gray-500">线</div>;
}
// 单个车间卡片组件Client Component 标记,避免 Hydration 冲突)
// 'use client'; // 仅当需要添加交互时启用,当前纯展示可不用
function ProductCard({ product }: { product: Line }) {
}
// 页面主组件Server Component
export default async function Page({
params,
}: {
params: Params;
}) {
const { locale } = await params;
// 获取翻译(确保服务端/客户端一致)
const t = await getTranslations({ locale, namespace: "Workshop" });
// 获取产品线数据(顶层 awaitServer Component 原生支持)
const products: Line[] = await getLines(locale);
}

View File

@@ -5,9 +5,6 @@ import { WorkShop } from "@/types/workShop";
import { Metadata } from "next";
import { Locale } from "next-intl";
// 强制静态渲染
export const dynamic = "force-static";
// 固定 Params 类型为普通对象Next.js 原生传参无异步)
type Params = {
locale: string;

View File

@@ -1,12 +1,8 @@
import BuiltWithButton from "@/components/BuiltWithButton";
import { TwitterX } from "@/components/social-icons/icons";
import { siteConfig } from "@/config/site";
import { Link as I18nLink } from "@/i18n/routing";
import { FooterLink } from "@/types/common";
import { GithubIcon, MailIcon } from "lucide-react";
import { getMessages, getTranslations } from "next-intl/server";
import Link from "next/link";
import { SiBluesky, SiDiscord } from "react-icons/si";
export default async function Footer() {
const messages = await getMessages();
@@ -37,7 +33,7 @@ export default async function Footer() {
<p className="text-sm p4-4 md:pr-12">{t("tagLine")}</p>
<div className="flex items-center gap-2">
{/* <div className="flex items-center gap-2">
{siteConfig.socialLinks?.github && (
<Link
href={siteConfig.socialLinks.github}
@@ -103,9 +99,9 @@ export default async function Footer() {
<MailIcon className="w-4 h-4" />
</Link>
)}
</div>
</div> */}
<BuiltWithButton />
{/* <BuiltWithButton /> */}
</div>
</div>

View File

@@ -7,14 +7,14 @@ images:
- /images/electrician-steel-1.png
- /images/electrician-steel-2.png
properties:
- Line Types: Normalizing and pickling line, decarburization annealing and insulation coating line, decarburization annealing, nitriding and magnesium oxide coating line, insulation coating and skin-pass rolling line
- Product Grades: Non-oriented (high, medium and low grades), grain-oriented (CGO, HiB)
- Coating Types: Insulation coating, magnesium oxide coating
- Normalizing Annealing Equipment - Cooling Methods: Air duct cooling, steam mist cooling, air jet cooling, water spray cooling
- Normalizing Annealing Equipment - Energy-saving Measures: High-efficiency radiant tube combustion air heat exchanger, flue gas combustion air heat exchanger, flue gas hot air and hot water heat exchanger, flue gas thermal radiation preheating of steel strip before non-oxidizing heating, lightweight fiber furnace lining
- Continuous Annealing Furnace - Decarburization Method: Decarburization with humidified nitrogen-hydrogen mixed gas
- Continuous Annealing Furnace - Nitriding Method: Low-temperature nitriding
- Continuous Annealing Furnace - Energy-saving Measures: High-efficiency radiant tube combustion air heat exchanger, flue gas combustion air heat exchanger, flue gas hot air and hot water heat exchanger, flue gas thermal radiation preheating of steel strip before non-oxidizing heating, lightweight fiber furnace lining
- Coating Machine: Two-roll type (special grooved rubber-covered roll)
- Magnesium Oxide Removal Cleaning Equipment Method: Combined chemical cleaning and hot water cleaning
- Line Types Normalizing and pickling line, decarburization annealing and insulation coating line, decarburization annealing, nitriding and magnesium oxide coating line, insulation coating and skin-pass rolling line
- Product Grades Non-oriented (high, medium and low grades), grain-oriented (CGO, HiB)
- Coating Types Insulation coating, magnesium oxide coating
- Normalizing Annealing Equipment - Cooling Methods Air duct cooling, steam mist cooling, air jet cooling, water spray cooling
- Normalizing Annealing Equipment - Energy-saving Measures High-efficiency radiant tube combustion air heat exchanger, flue gas combustion air heat exchanger, flue gas hot air and hot water heat exchanger, flue gas thermal radiation preheating of steel strip before non-oxidizing heating, lightweight fiber furnace lining
- Continuous Annealing Furnace - Decarburization Method Decarburization with humidified nitrogen-hydrogen mixed gas
- Continuous Annealing Furnace - Nitriding Method Low-temperature nitriding
- Continuous Annealing Furnace - Energy-saving MeasuresHigh-efficiency radiant tube combustion air heat exchanger, flue gas combustion air heat exchanger, flue gas hot air and hot water heat exchanger, flue gas thermal radiation preheating of steel strip before non-oxidizing heating, lightweight fiber furnace lining
- Coating Machine Two-roll type (special grooved rubber-covered roll)
- Magnesium Oxide Removal Cleaning Equipment Method Combined chemical cleaning and hot water cleaning
---

View File

@@ -7,11 +7,11 @@ images:
- /images/color-coating-1.png
- /images/color-coating-2.png
properties:
- Line Types: Two-coat two-bake, three-coat three-bake
- Product Grades: Building material sheets, decorative sheets, home appliance sheets
- Coating Types: Epoxy resin, polyurethane, polyester, polypropylene, polyvinylidene fluoride (PVDF), silicone-modified polyester
- Total Dry Film Thickness: min: 23μm, max: 70μm
- Other Treatments: Embossing, printing, hot laminating, cold laminating
- Coating Machines: Double-coating head two-roll type (for primer coating), three-roll type (for top coating of the front side), two-roll type (for top coating of the back side)
- Energy-saving Measures: Hot air recycling and lightweight fiber furnace lining; Waste gas, air and water heat exchangers are installed in the flue after TIC for heating the unit's baking oven and cleaning solution; Alternatively, the baking oven is directly heated by the hot flue gas after incineration (RTO); A hot water heat exchanger is installed in the flue after CIU for heating the cleaning solution
- Line TypesTwo-coat two-bake, three-coat three-bake
- Product GradesBuilding material sheets, decorative sheets, home appliance sheets
- Coating TypesEpoxy resin, polyurethane, polyester, polypropylene, polyvinylidene fluoride (PVDF), silicone-modified polyester
- Total Dry Film Thicknessmin 23μm, max 70μm
- Other TreatmentsEmbossing, printing, hot laminating, cold laminating
- Coating MachinesDouble-coating head two-roll type (for primer coating), three-roll type (for top coating of the front side), two-roll type (for top coating of the back side)
- Energy-saving MeasuresHot air recycling and lightweight fiber furnace lining; Waste gas, air and water heat exchangers are installed in the flue after TIC for heating the unit's baking oven and cleaning solution; Alternatively, the baking oven is directly heated by the hot flue gas after incineration (RTO); A hot water heat exchanger is installed in the flue after CIU for heating the cleaning solution
---

View File

@@ -1,14 +1,14 @@
---
title: Stainless Steel Continuous Annealing Pickling Line
slug: stainless-steel-heat-treatment
desc: The stainless steel continuous annealing pickling line is used for annealing and pickling various types of stainless steel to achieve the required mechanical properties and surface quality. It is mainly divided into hot-rolled stainless steel annealing pickling lines, cold-rolled stainless steel annealing pickling lines and cold-rolled stainless steel bright annealing lines. Our company has successively constructed ten such lines both domestically and overseas. The main features of the line are as follows:
desc: The stainless steel continuous annealing pickling line is used for annealing and pickling various types of stainless steel to achieve the required mechanical properties and surface quality. It is mainly divided into hot-rolled stainless steel annealing pickling lines, cold-rolled stainless steel annealing pickling lines and cold-rolled stainless steel bright annealing lines. Our company has successively constructed ten such lines both domestically and overseas.
cover: /images/stainless-steel-annealing-pickling-cover.png
images:
- /images/stainless-steel-annealing-pickling-1.png
- /images/stainless-steel-annealing-pickling-2.png
properties:
- Welding Machine: Adopts a complete welding process of shearing → butt jointing → welding → punching → edge trimming. Both the inlet and outlet are equipped with automatic steel strip centering devices. The clamping devices feature uniform force application and adjustable pressure, with longitudinal and transverse movement functions, as well as the function of steel strip lap angle compensation.
- High-pressure Hot Water Scrubbing and Rinsing: The water temperature is approximately 80℃, equipped with a hot water circulation system for rinsing. After degreasing treatment, it can ensure the surface cleanliness of the steel strip and meet the requirements of subsequent processes.
- Annealing Furnace Preheating Zone: Makes full use of the exhaust gas from the heating furnace to preheat the steel strip, effectively improving the thermal efficiency of the furnace and achieving energy conservation and consumption reduction.
- Pickling Process: Adopts a combined process of neutral salt electrolytic pickling + mixed acid pickling to stably guarantee pickling quality and ensure that the product surface meets the standards.
- Welding MachineAdopts a complete welding process of shearing → butt jointing → welding → punching → edge trimming. Both the inlet and outlet are equipped with automatic steel strip centering devices. The clamping devices feature uniform force application and adjustable pressure, with longitudinal and transverse movement functions, as well as the function of steel strip lap angle compensation.
- High-pressure Hot Water Scrubbing and RinsingThe water temperature is approximately 80℃, equipped with a hot water circulation system for rinsing. After degreasing treatment, it can ensure the surface cleanliness of the steel strip and meet the requirements of subsequent processes.
- Annealing Furnace Preheating ZoneMakes full use of the exhaust gas from the heating furnace to preheat the steel strip, effectively improving the thermal efficiency of the furnace and achieving energy conservation and consumption reduction.
- Pickling ProcessAdopts a combined process of neutral salt electrolytic pickling + mixed acid pickling to stably guarantee pickling quality and ensure that the product surface meets the standards.
---

View File

@@ -7,15 +7,15 @@ images:
- /images/zinc-1.png
- /images/zinc-2.png
properties:
- Line Types: Horizontal type, vertical type, combined horizontal-vertical type
- Processing Specification/Thickness: Cold-rolled strip / min 0.12mm, max 2.5mm; Hot-rolled strip / min 1.5mm, max 5mm
- Processing Specification/Width: min 550mm, max 1500mm
- Line Process Section Speed: max 200m/min (240m/min for GL)
- Continuous Annealing Furnace/Furnace Type: Horizontal type, vertical type, combined horizontal-vertical type (L-type)
- Continuous Annealing Furnace/Heating Method: Gas-fired non-oxidizing heating (NOF), gas-fired radiant tube heating (RTF), electric radiant tube and resistance strip heating
- Continuous Annealing Furnace/Cooling Method: Protective gas conventional jet cooling, high-hydrogen high-speed jet cooling
- Zinc Pot: Jet-flow ceramic induction zinc pot (GL with pre-melting pot)
- Air Knife: Advanced single-nozzle air knife, multi-chamber air knife
- Temper Mill: 300T-800T, roll wet tempering
- Energy-saving Measures: High-efficiency radiant tube combustion air heat exchanger, flue gas combustion air heat exchanger, flue gas hot air and hot water heat exchanger, thermal protective gas circulating injection for steel strip preheating, flue gas thermal radiation preheating of steel strip before non-oxidizing heating, lightweight fiber furnace lining
- Line TypesHorizontal type, vertical type, combined horizontal-vertical type
- Processing Specification/ThicknessCold-rolled strip / min 0.12mm, max 2.5mm; Hot-rolled strip / min 1.5mm, max 5mm
- Processing Specification/Widthmin 550mm, max 1500mm
- Line Process Section Speedmax 200m/min (240m/min for GL)
- Continuous Annealing Furnace/Furnace TypeHorizontal type, vertical type, combined horizontal-vertical type (L-type)
- Continuous Annealing Furnace/Heating MethodGas-fired non-oxidizing heating (NOF), gas-fired radiant tube heating (RTF), electric radiant tube and resistance strip heating
- Continuous Annealing Furnace/Cooling MethodProtective gas conventional jet cooling, high-hydrogen high-speed jet cooling
- Zinc PotJet-flow ceramic induction zinc pot (GL with pre-melting pot)
- Air KnifeAdvanced single-nozzle air knife, multi-chamber air knife
- Temper Mill300T-800T, roll wet tempering
- Energy-saving MeasuresHigh-efficiency radiant tube combustion air heat exchanger, flue gas combustion air heat exchanger, flue gas hot air and hot water heat exchanger, thermal protective gas circulating injection for steel strip preheating, flue gas thermal radiation preheating of steel strip before non-oxidizing heating, lightweight fiber furnace lining
---

View File

@@ -1,7 +1,7 @@
---
title: 不锈钢连续退火酸洗机组Stainless Steel Continuous Annealing Pickling Line
title: 不锈钢连续退火酸洗机组
slug: stainless-steel-heat-treatment
desc: 不锈钢连续退火酸洗机组用于对各类不锈钢进行退火和酸洗处理,以获得符合要求的机械性能及表面质量,主要分为热轧不锈钢退火酸洗机组、冷轧不锈钢退火酸洗机组和冷轧不锈钢光亮退火机组。我司先后在国内外承建了十条该类型机组,机组主要特色如下:
desc: 不锈钢连续退火酸洗机组用于对各类不锈钢进行退火和酸洗处理,以获得符合要求的机械性能及表面质量,主要分为热轧不锈钢退火酸洗机组、冷轧不锈钢退火酸洗机组和冷轧不锈钢光亮退火机组。我司先后在国内外承建了十条该类型机组
cover: /images/stainless-steel-annealing-pickling-cover.png
images:
- /images/stainless-steel-annealing-pickling-1.png

View File

@@ -12,54 +12,54 @@
"href": "/"
},
{
"name": "About Jufeng Steel",
"href": "/about",
"name": "About Wuhan Sage",
"href": "/about/company"
},
{
"name": "Workshop Exhibition",
"href": "/workshop",
"children": [
{
"name": "Company Profile",
"href": "/about/company"
"name": "Machining Workshop",
"href": "/workshop/machine"
},
{
"name": "Corporate Culture",
"href": "/about/culture"
"name": "Heat Treatment Workshop",
"href": "/workshop/heat-treatment"
},
{
"name": "Production Base",
"href": "/about/base"
},
{
"name": "Organizational Structure",
"href": "/about/organization"
},
{
"name": "Honors and Qualifications",
"href": "/about/awards"
},
{
"name": "Development History",
"href": "/about/history"
"name": "Assembly Workshop",
"href": "/workshop/assembly"
}
]
},
{
"name": "Product Center",
"href": "/product"
},
{
"name": "News Center",
"href": "/blog",
"name": "Mill Unit Products",
"href": "/line",
"children": [
{
"name": "Announcements",
"href": "/blog?category=announce"
"name": "Hot-dip Galvanizing / Galvalume Mill Unit",
"href": "/line/zinc"
},
{
"name": "News",
"href": "/blog?category=news"
"name": "Zinc-Aluminum-Magnesium Coating Mill Unit",
"href": "/line/magnesium"
},
{
"name": "Events",
"href": "/blog?category=event"
"name": "Color Coating Mill Unit",
"href": "/line/paint"
},
{
"name": "High-efficiency Electrical Steel (Silicon Steel) Continuous Processing Mill Unit",
"href": "/line/electric-steel"
},
{
"name": "Carbon Steel Pickling Mill Unit",
"href": "/line/carbon-steel"
},
{
"name": "Stainless Steel Continuous Annealing & Pickling Mill Unit",
"href": "/line/stainless-steel-heat-treatment"
}
]
}
@@ -125,48 +125,14 @@
"useA": true
}
]
},
{
"title": "Other Products",
"links": [
{
"href": "https://nexty.dev/",
"name": "Nexty - SaaS Template",
"rel": "noopener noreferrer",
"target": "_blank"
},
{
"href": "https://ogimage.click/",
"name": "OG Image Generator",
"rel": "noopener noreferrer",
"target": "_blank"
},
{
"href": "https://dofollow.tools/",
"name": "Dofollow.Tools",
"rel": "noopener noreferrer",
"target": "_blank"
}
]
}
]
},
"Newsletter": {
"title": "Subscribe to Our Newsletter",
"description": "Get the latest Next.js news and tutorials",
"defaultErrorMessage": "Please enter a valid email address",
"successMessage": "Subscription successful",
"errorMessage": "Subscription failed",
"errorMessage2": "Subscription failed, please try again later",
"subscribe": "Subscribe",
"subscribing": "Subscribing",
"subscribed": "Subscribed successfully! Thank you for your attention."
}
},
"Home": {
"title": "Jufeng Steel",
"tagLine": "Jufeng Steel Official Website",
"description": "Jufeng Steel Official Website",
"title": "Wuhan Saga Engineering Technology",
"tagLine": "Wuhan Saga Engineering Technology Official Website",
"description": "Wuhan Saga Engineering Technology Official Website",
"carousel": "Carousel",
"company_video": "Corporate Video",
"company": {
@@ -324,11 +290,11 @@
},
"Blog": {
"title": "News Center",
"description": "Latest updates, product upgrades, and industry news of Jufeng Steel"
"description": "Latest updates, product upgrades, and industry news of Wuhan Saga Engineering Technology"
},
"Product": {
"title": "Product Center",
"description": "Latest products, function introductions, and usage guides of Jufeng Steel",
"description": "Latest products, function introductions, and usage guides of Wuhan Saga Engineering Technology",
"detailTitle": "Product Display",
"productModel": "Product Model",
"productPlace": "Product Origin",
@@ -349,9 +315,13 @@
},
"learnMore": "Learn More"
},
"Workshop": {
"pageTitle": "Workshop Exhibition",
"pageDesc": "Workshop Exhibition"
},
"About": {
"title": "About Jufeng Steel",
"description": "About Jufeng Steel"
"title": "About Wuhan Saga Engineering Technology",
"description": "About Wuhan Saga Engineering Technology"
},
"TermsOfService": {
"title": "Terms of Service",

View File

@@ -12,7 +12,7 @@
"href": "/"
},
{
"name": "Giới thiệu Jufeng Steel",
"name": "Giới thiệu Wuhan Saga Engineering Technology",
"href": "/about",
"children": [
{
@@ -164,9 +164,9 @@
}
},
"Home": {
"title": "Jufeng Steel",
"tagLine": "Trang web chính thức của Jufeng Steel",
"description": "Trang web chính thức của Jufeng Steel",
"title": "Wuhan Saga Engineering Technology",
"tagLine": "Trang web chính thức của Wuhan Saga Engineering Technology",
"description": "Trang web chính thức của Wuhan Saga Engineering Technology",
"carousel": "Trình chiếu vòng",
"company_video": "Video doanh nghiệp",
"company": {
@@ -324,11 +324,11 @@
},
"Blog": {
"title": "Trung tâm tin tức",
"description": "Cập nhật mới nhất, nâng cấp sản phẩm, tin tức ngành của Jufeng Steel"
"description": "Cập nhật mới nhất, nâng cấp sản phẩm, tin tức ngành của Wuhan Saga Engineering Technology"
},
"Product": {
"title": "Trung tâm sản phẩm",
"description": "Sản phẩm mới nhất, giới thiệu chức năng, hướng dẫn sử dụng của Jufeng Steel",
"description": "Sản phẩm mới nhất, giới thiệu chức năng, hướng dẫn sử dụng của Wuhan Saga Engineering Technology",
"detailTitle": "Hiển thị sản phẩm",
"productModel": "Mã sản phẩm",
"productPlace": "Nguồn gốc sản phẩm",
@@ -350,8 +350,8 @@
"learnMore": "Tìm hiểu thêm"
},
"About": {
"title": "Giới thiệu Jufeng Steel",
"description": "Về Jufeng Steel"
"title": "Giới thiệu Wuhan Saga Engineering Technology",
"description": "Về Wuhan Saga Engineering Technology"
},
"TermsOfService": {
"title": "Điều khoản dịch vụ",

View File

@@ -100,42 +100,8 @@
"useA": true
}
]
},
{
"title": "其他产品",
"links": [
{
"href": "https://nexty.dev/",
"name": "Nexty - SaaS Template",
"rel": "noopener noreferrer",
"target": "_blank"
},
{
"href": "https://ogimage.click/",
"name": "OG Image Generator",
"rel": "noopener noreferrer",
"target": "_blank"
},
{
"href": "https://dofollow.tools/",
"name": "Dofollow.Tools",
"rel": "noopener noreferrer",
"target": "_blank"
}
]
}
]
},
"Newsletter": {
"title": "订阅我们的邮件",
"description": "获取最新的 Next.js 资讯和教程",
"defaultErrorMessage": "请输入有效的邮箱地址",
"successMessage": "订阅成功",
"errorMessage": "订阅失败",
"errorMessage2": "订阅失败,请稍后再试",
"subscribe": "订阅",
"subscribing": "订阅中",
"subscribed": "订阅成功!感谢您的关注。"
}
},
"Home": {

View File

@@ -1,7 +1,7 @@
import { createNavigation } from 'next-intl/navigation';
import { defineRouting } from 'next-intl/routing';
export const LOCALES = ['en', 'zh']
export const LOCALES = ['zh', 'en']
export const DEFAULT_LOCALE = 'zh'
export const LOCALE_NAMES: Record<string, string> = {
'en': "English",

View File

@@ -12,9 +12,12 @@ export async function getLines(locale: string): Promise<Line[]> {
for (const file of files.map((file) => file.replace('.mdx', ''))) {
const contentPath = path.join(process.cwd(), `content/lines/${locale}/${file}.mdx`);
const fileContent = fs.readFileSync(contentPath, 'utf8');
// console.log(fileContent);
const { data: frontmatter, content } = matter(fileContent);
console.log(frontmatter);
workShops.push(frontmatter as Line);
}
console.log(workShops, files);
return workShops;
}

View File

@@ -4,8 +4,8 @@ const withNextIntl = createNextIntlPlugin();
/** @type {import('next').NextConfig} */
const nextConfig = {
// output: "export",
output: "standalone",
output: "export",
// output: "standalone",
images: {
remotePatterns: [
...(process.env.R2_PUBLIC_URL

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 18 KiB