From 5477eca3d031746adc5526aa7ab4ebe0fb18a0e9 Mon Sep 17 00:00:00 2001 From: Sabda Yagra Date: Wed, 11 Jun 2025 13:10:40 +0700 Subject: [PATCH] fix: language --- .../area-coverage-and-work-units.tsx | 57 ++++-- components/landing-page/event-calender.tsx | 49 ++--- components/landing-page/new-content.tsx | 8 +- .../landing-page/search-section-new.tsx | 4 +- components/landing-page/survey-box.tsx | 170 ++++++++++++++---- messages/en.json | 33 +++- messages/in.json | 47 ++++- 7 files changed, 298 insertions(+), 70 deletions(-) diff --git a/components/landing-page/area-coverage-and-work-units.tsx b/components/landing-page/area-coverage-and-work-units.tsx index 788d9e41..7f1650cf 100644 --- a/components/landing-page/area-coverage-and-work-units.tsx +++ b/components/landing-page/area-coverage-and-work-units.tsx @@ -1,14 +1,24 @@ "use client"; import React, { useEffect, useState } from "react"; -import { Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; +import { + Dialog, + DialogClose, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; import Image from "next/image"; import Coverage from "./coverage"; import Division from "./division"; +import { useTranslations } from "next-intl"; const AreaCoverageWorkUnits = () => { const [openPolda, setOpenPolda] = useState(false); const [openSatker, setOpenSatker] = useState(false); + const t = useTranslations("LandingPage"); useEffect(() => { if (openPolda || openSatker) { @@ -24,21 +34,34 @@ const AreaCoverageWorkUnits = () => { return (

- Liputan Wilayah & Satker + {t("areaCoverage")}

{/* POLDA */} - - + -

Polda Jajaran

+

{t("regionalPolice")}

@@ -49,7 +72,9 @@ const AreaCoverageWorkUnits = () => {
- +
@@ -59,14 +84,20 @@ const AreaCoverageWorkUnits = () => { -

Satuan Kerja Polri

+

{t("policeDivision")}

@@ -75,7 +106,9 @@ const AreaCoverageWorkUnits = () => {
- +
diff --git a/components/landing-page/event-calender.tsx b/components/landing-page/event-calender.tsx index e6fcdeeb..6e8db2c4 100644 --- a/components/landing-page/event-calender.tsx +++ b/components/landing-page/event-calender.tsx @@ -1,5 +1,6 @@ import { getCalendarPagination } from "@/service/schedule/schedule"; import { ChevronLeft, ChevronRight } from "lucide-react"; +import { useTranslations } from "next-intl"; import React, { useEffect, useState } from "react"; interface CalendarItem { @@ -28,20 +29,21 @@ const EventCalender = () => { const [selectedEvent, setSelectedEvent] = useState(null); const [month, setMonth] = useState(currentMonth); const [year, setYear] = useState(currentYear); + const t = useTranslations("LandingPage"); const monthNames = [ - "Januari", - "Februari", - "Maret", + t("january"), + t("february"), + t("march"), "April", - "Mei", - "Juni", - "Juli", - "Agustus", + t("may"), + t("june"), + t("july"), + t("august"), "September", - "Oktober", + t("october"), "November", - "Desember", + t("december"), ]; const fetchData = async () => { @@ -66,7 +68,8 @@ const EventCalender = () => { const lastDayOfMonth = new Date(year, month + 1, 0); const daysInMonth = lastDayOfMonth.getDate(); const startingDayOfWeek = firstDayOfMonth.getDay(); - const adjustedStartingDay = startingDayOfWeek === 0 ? 6 : startingDayOfWeek - 1; + const adjustedStartingDay = + startingDayOfWeek === 0 ? 6 : startingDayOfWeek - 1; const generateCalendarDays = () => { const days = []; @@ -163,7 +166,7 @@ const EventCalender = () => { return (

- KALENDER ACARA + {t("calendar")}

@@ -211,13 +214,16 @@ const EventCalender = () => {
-
+

- Daftar Acara + {t("eventList")}

{events?.length === 0 ? (
- Tidak ada acara yang tersedia + {t("noEvent")}
) : ( events.map((event) => ( @@ -263,13 +269,15 @@ const EventCalender = () => {

- Detail Acara + {t("eventDetails")}

{selectedEvent ? (
{selectedEvent.title} { @@ -286,7 +294,7 @@ const EventCalender = () => {
- Tanggal: + {t("date")} {formatDateRange( @@ -297,21 +305,22 @@ const EventCalender = () => {

- {selectedEvent.description || "Tidak ada deskripsi tersedia."} + {selectedEvent.description || + "Tidak ada deskripsi tersedia."}

) : (
- Pilih acara untuk melihat detail + {t("selectEvent")}
)}
diff --git a/components/landing-page/new-content.tsx b/components/landing-page/new-content.tsx index b9658e9d..7d873d8e 100644 --- a/components/landing-page/new-content.tsx +++ b/components/landing-page/new-content.tsx @@ -113,10 +113,10 @@ const NewContent = (props: { group: string; type: string }) => { {[ - { label: "Foto", value: "image" }, - { label: "Audio Visual", value: "video" }, - { label: "Teks", value: "text" }, - { label: "Audio", value: "audio" }, + { label: t("image"), value: "image" }, + { label: t("video"), value: "video" }, + { label: t("text"), value: "text" }, + { label: t("audio"), value: "audio" }, ].map((tab) => ( {
{/* Berita Polda */}
-

Berita Polda

+

{t("regionNews")}

@@ -188,7 +188,7 @@ const ScrollableContent = () => { {/* Berita SATKER */}
-

Berita Satker

+

{t("divisionNews")}

diff --git a/components/landing-page/survey-box.tsx b/components/landing-page/survey-box.tsx index c6693c9d..5125490a 100644 --- a/components/landing-page/survey-box.tsx +++ b/components/landing-page/survey-box.tsx @@ -1,5 +1,13 @@ import React, { useEffect, useState } from "react"; -import { Dialog, DialogClose, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "../ui/dialog"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "../ui/dialog"; import FormSurvey from "./survey"; import { Controller, useForm } from "react-hook-form"; import { Textarea } from "../ui/textarea"; @@ -8,6 +16,7 @@ import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { Checkbox } from "../ui/checkbox"; import { createSurveyData } from "@/service/survey/survey"; +import { useTranslations } from "next-intl"; const surveySchema = z.object({ accessFrequency: z.string(), @@ -26,6 +35,8 @@ const UserSurveyBox = () => { const [openPolda, setOpenPolda] = useState(); const [showSurvey, setShowSurvey] = useState(true); const [isLoading, setIsLoading] = useState(false); + const t = useTranslations("LandingPage"); + const { control, handleSubmit, @@ -46,16 +57,49 @@ const UserSurveyBox = () => { }); const options = { - accessFrequency: ["Setiap hari", "Beberapa kali seminggu", "Beberapa kali dalam sebulan", "Baru pertama kali"], + accessFrequency: [ + "Setiap hari", + "Beberapa kali seminggu", + "Beberapa kali dalam sebulan", + "Baru pertama kali", + ], uiExperienceDesign: ["Sangat baik", "Baik", "Cukup", "Kurang", "Buruk"], - uiExperienceNavigation: ["Sangat mudah", "Mudah", "Cukup", "Sulit", "Sangat sulit"], - uiExperienceSpeed: ["Sangat cepat", "Cepat", "Cukup", "Lambat", "Sangat lambat"], + uiExperienceNavigation: [ + "Sangat mudah", + "Mudah", + "Cukup", + "Sulit", + "Sangat sulit", + ], + uiExperienceSpeed: [ + "Sangat cepat", + "Cepat", + "Cukup", + "Lambat", + "Sangat lambat", + ], infoAccuracy: ["Sangat puas", "Puas", "Cukup", "Kurang puas", "Tidak puas"], - infoCompleteness: ["Sangat lengkap", "Lengkap", "Cukup", "Kurang lengkap", "Tidak lengkap"], - usefulness: ["Sangat membantu", "Membantu", "Cukup membantu", "Kurang membantu", "Tidak membantu"], + infoCompleteness: [ + "Sangat lengkap", + "Lengkap", + "Cukup", + "Kurang lengkap", + "Tidak lengkap", + ], + usefulness: [ + "Sangat membantu", + "Membantu", + "Cukup membantu", + "Kurang membantu", + "Tidak membantu", + ], }; - const renderControllerGroup = (name: keyof SurveySchema, question: string, choices: string[]) => ( + const renderControllerGroup = ( + name: keyof SurveySchema, + question: string, + choices: string[] + ) => (

{question}

@@ -66,14 +110,21 @@ const UserSurveyBox = () => { control={control} render={({ field }) => ( )} /> ))}
- {errors[name] &&

{errors[name]?.message as string}

} + {errors[name] && ( +

+ {errors[name]?.message as string} +

+ )}
); @@ -107,50 +158,105 @@ const UserSurveyBox = () => {
{/* Kiri: Teks dan tombol */}
-

SURVEI KEPUASAN PENGGUNA MEDIAHUB POLRI

-

Kami menghargai pendapat Anda! Survei ini bertujuan untuk meningkatkan kualitas layanan MediaHub Polri. Mohon luangkan waktu beberapa menit untuk mengisi survei ini.

+

{t("survey1")}

+

+ {t("survey2")} +

- - + - SURVEI KEPUASAN PENGGUNA MEDIAHUB POLRI - Kami menghargai pendapat Anda! Survei ini bertujuan untuk meningkatkan kualitas layanan MediaHub Polri. + + {t("survey4")} + + + {t("survey5")} + -
- {renderControllerGroup("accessFrequency", "1. Seberapa sering Anda mengakses MediaHub Polri?", options.accessFrequency)} + + {renderControllerGroup( + "accessFrequency", + t("survey6"), + options.accessFrequency + )}
-

2. Bagaimana pengalaman Anda dalam mengakses website ini?

+

{t("survey7")}

- {renderControllerGroup("uiExperienceDesign", "a) Tampilan dan desain website", options.uiExperienceDesign)} - {renderControllerGroup("uiExperienceNavigation", "b) Kemudahan navigasi", options.uiExperienceNavigation)} - {renderControllerGroup("uiExperienceSpeed", "c) Kecepatan akses website", options.uiExperienceSpeed)} + {renderControllerGroup( + "uiExperienceDesign", + "a) Tampilan dan desain website", + options.uiExperienceDesign + )} + {renderControllerGroup( + "uiExperienceNavigation", + "b) Kemudahan navigasi", + options.uiExperienceNavigation + )} + {renderControllerGroup( + "uiExperienceSpeed", + "c) Kecepatan akses website", + options.uiExperienceSpeed + )}
-

3. Seberapa puas Anda dengan informasi yang tersedia di MediaHub Polri?

+

{t("survey8")}

- {renderControllerGroup("infoAccuracy", "a) Akurat dan terpercaya", options.infoAccuracy)} - {renderControllerGroup("infoCompleteness", "b) Kelengkapan berita dan informasi", options.infoCompleteness)} + {renderControllerGroup( + "infoAccuracy", + "a) Akurat dan terpercaya", + options.infoAccuracy + )} + {renderControllerGroup( + "infoCompleteness", + "b) Kelengkapan berita dan informasi", + options.infoCompleteness + )}
- {renderControllerGroup("usefulness", "4. Apakah Anda merasa website ini membantu dalam mendapatkan informasi terkait Polri?", options.usefulness)} + {renderControllerGroup( + "usefulness", + t("survey9"), + options.usefulness + )}
-

5. Apa saran atau masukan Anda?

-