diff --git a/app/[locale]/line/[slug]/page.tsx b/app/[locale]/line/[slug]/page.tsx index bec7cb5..3b61af0 100644 --- a/app/[locale]/line/[slug]/page.tsx +++ b/app/[locale]/line/[slug]/page.tsx @@ -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 []; } } \ No newline at end of file diff --git a/app/[locale]/line/page.tsx b/app/[locale]/line/page.tsx index ae6fc9d..3eca452 100644 --- a/app/[locale]/line/page.tsx +++ b/app/[locale]/line/page.tsx @@ -19,7 +19,7 @@ type MetadataProps = { export async function generateMetadata({ params, }: MetadataProps): Promise { - const { locale } = params; + const { locale } = await params; const t = await getTranslations({ locale, namespace: "Workshop" }); return constructMetadata({ diff --git a/app/[locale]/single/[slug]/page.tsx b/app/[locale]/single/[slug]/page.tsx deleted file mode 100644 index 8359f92..0000000 --- a/app/[locale]/single/[slug]/page.tsx +++ /dev/null @@ -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 { - 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:移除不必要的 await(params 是同步对象) - 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 ( -
-
- {/* 封面图区域 - 🔴 修复布局属性不一致 */} -
- {coverAlt} -
- - {/* 标题+描述区域 */} -
-

- {line.title} -

-

- {lineDesc} -

-
- - {line.images.length > 0 && ( -
-

- 车间图片 -

-
- {line.images.map((img, index) => { - const stableKey = `line-${slug}-img-${index}-${img.slice(-8)}`; - const imgAlt = `${line.title}-图片${index + 1}`; - return ( -
- {imgAlt} -
- ); - })} -
-
- )} -
-
- ); -} - -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 []; - } -} \ No newline at end of file diff --git a/app/[locale]/single/page.tsx b/app/[locale]/single/page.tsx deleted file mode 100644 index 6d2255f..0000000 --- a/app/[locale]/single/page.tsx +++ /dev/null @@ -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 { - 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
暂无产品线数据
; -} - -// 单个车间卡片组件(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" }); - - // 获取产品线数据(顶层 await,Server Component 原生支持) - const products: Line[] = await getLines(locale); -} \ No newline at end of file diff --git a/app/[locale]/workshop/[slug]/page.tsx b/app/[locale]/workshop/[slug]/page.tsx index 94b96ef..eba438b 100644 --- a/app/[locale]/workshop/[slug]/page.tsx +++ b/app/[locale]/workshop/[slug]/page.tsx @@ -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; diff --git a/components/footer/Footer.tsx b/components/footer/Footer.tsx index e20ef58..23b694b 100644 --- a/components/footer/Footer.tsx +++ b/components/footer/Footer.tsx @@ -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() {

{t("tagLine")}

-
+ {/*
{siteConfig.socialLinks?.github && ( )} -
+
*/} - + {/* */} diff --git a/content/lines/en/electric-steel.mdx b/content/lines/en/electric-steel.mdx index 4a096a2..bdf68a8 100644 --- a/content/lines/en/electric-steel.mdx +++ b/content/lines/en/electric-steel.mdx @@ -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 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 --- \ No newline at end of file diff --git a/content/lines/en/paint.mdx b/content/lines/en/paint.mdx index f19092f..9b21194 100644 --- a/content/lines/en/paint.mdx +++ b/content/lines/en/paint.mdx @@ -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 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 --- \ No newline at end of file diff --git a/content/lines/en/stainless-steel-heat-treatment.mdx b/content/lines/en/stainless-steel-heat-treatment.mdx index 7ab30d7..5e818aa 100644 --- a/content/lines/en/stainless-steel-heat-treatment.mdx +++ b/content/lines/en/stainless-steel-heat-treatment.mdx @@ -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 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. --- \ No newline at end of file diff --git a/content/lines/en/zinc.mdx b/content/lines/en/zinc.mdx index e57b5ff..72ecae6 100644 --- a/content/lines/en/zinc.mdx +++ b/content/lines/en/zinc.mdx @@ -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 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 --- \ No newline at end of file diff --git a/content/lines/zh/stainless-steel-heat-treatment.mdx b/content/lines/zh/stainless-steel-heat-treatment.mdx index 4f81153..2d33704 100644 --- a/content/lines/zh/stainless-steel-heat-treatment.mdx +++ b/content/lines/zh/stainless-steel-heat-treatment.mdx @@ -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 diff --git a/i18n/messages/en.json b/i18n/messages/en.json index 9e3c874..8c9f020 100644 --- a/i18n/messages/en.json +++ b/i18n/messages/en.json @@ -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", diff --git a/i18n/messages/vi.json b/i18n/messages/vi.json index b909706..d20a5eb 100644 --- a/i18n/messages/vi.json +++ b/i18n/messages/vi.json @@ -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ụ", diff --git a/i18n/messages/zh.json b/i18n/messages/zh.json index 9980159..41024bc 100644 --- a/i18n/messages/zh.json +++ b/i18n/messages/zh.json @@ -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": { diff --git a/i18n/routing.ts b/i18n/routing.ts index 6370749..abce071 100644 --- a/i18n/routing.ts +++ b/i18n/routing.ts @@ -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 = { 'en': "English", diff --git a/lib/lines.ts b/lib/lines.ts index 64aeb6c..68a6562 100644 --- a/lib/lines.ts +++ b/lib/lines.ts @@ -12,9 +12,12 @@ export async function getLines(locale: string): Promise { 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; } diff --git a/next.config.mjs b/next.config.mjs index feacd81..325d3d7 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -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 diff --git a/public/favicon.ico b/public/favicon.ico index 6e51365..c8c9ee9 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/favicon.png b/public/favicon.png index 2270d8a..3f68e73 100644 Binary files a/public/favicon.png and b/public/favicon.png differ diff --git a/public/logo.png b/public/logo.png index 2270d8a..3f68e73 100644 Binary files a/public/logo.png and b/public/logo.png differ