Skip to content

Commit 8c470e2

Browse files
committed
feat: add locale toggle on heritage detail
Wire toggleLocale callback from container to layout, render a flag button in the tab bar, and switch HeritageHero between Japanese and English titles based on locale.
1 parent 05c236b commit 8c470e2

3 files changed

Lines changed: 26 additions & 7 deletions

File tree

client/src/app/features/top/components/heritage-detail/HeritageDetailLayout.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { BreadcrumbList } from "@shared/components/BreadcrumbList.tsx";
1515
type Props = {
1616
item: WorldHeritageDetailVm;
1717
locale: Locale;
18+
toggleLocale: () => void;
1819
};
1920

2021
const DEFAULT_SEARCH: SearchValues = {
@@ -96,7 +97,7 @@ function KeyExamInfo({ item }: { item: WorldHeritageDetailVm }) {
9697
);
9798
}
9899

99-
export function HeritageDetailLayout({ item, locale }: Props) {
100+
export function HeritageDetailLayout({ item, locale, toggleLocale }: Props) {
100101
const [search, setSearch] = useState<SearchValues>(DEFAULT_SEARCH);
101102
const setLabel = useSetBreadcrumbLabel();
102103

@@ -115,7 +116,15 @@ export function HeritageDetailLayout({ item, locale }: Props) {
115116
<div className="min-h-screen bg-zinc-50 text-zinc-900">
116117
<HeritageSubHeader value={search} onChange={setSearch} onSubmit={handleSubmit} />
117118

118-
<HeritageDetailTabs items={TABS} />
119+
<div className="mx-auto w-full max-w-6xl px-4 mt-6 md:mt-8 flex items-center justify-between">
120+
<HeritageDetailTabs items={TABS} />
121+
<button
122+
onClick={toggleLocale}
123+
className="rounded-full border border-zinc-200 px-3 py-1.5 text-xs font-semibold text-zinc-700 hover:bg-zinc-100 shrink-0"
124+
>
125+
{locale === "ja" ? "🇯🇵" : "🇬🇧"}
126+
</button>
127+
</div>
119128

120129
<div className="mx-auto w-full max-w-6xl px-4 mt-4">
121130
<BreadcrumbList />

client/src/app/features/top/components/heritage-detail/HeritageHero.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ type Props = {
66
locale: Locale;
77
};
88

9-
export function HeritageHero({ item }: Props) {
9+
export function HeritageHero({ item, locale }: Props) {
1010
const primaryImage: WorldHeritageImageVm | undefined =
1111
item.images.find((img) => img.isPrimary) ?? item.images[0];
1212

1313
return (
1414
<header className="mx-auto w-full max-w-6xl px-4 pt-10 pb-6">
1515
<div className="mb-5 md:mb-6">
1616
<h1 className="text-3xl md:text-4xl font-extrabold tracking-tight text-zinc-900">
17-
{item.heritageNameJp}
18-
{item.name && (
17+
{locale === "ja" && item.heritageNameJp ? item.heritageNameJp : item.name}
18+
{locale === "ja" && item.heritageNameJp && item.name && (
1919
<span className="ml-2 text-xl md:text-2xl font-bold text-zinc-500">
2020
{item.name}
2121
</span>

client/src/app/features/top/containers/world-heritage-detail-container.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,19 @@ function resolveLocale(raw: string | null): Locale {
1313
export function WorldHeritageDetailContainer() {
1414
const { id } = useParams<{ id: string }>();
1515
const navigate = useNavigate();
16-
const [searchParams] = useSearchParams();
16+
const [searchParams, setSearchParams] = useSearchParams();
1717
const locale = useMemo(() => resolveLocale(searchParams.get("lang")), [searchParams]);
1818

19+
const toggleLanguageLocation = () => {
20+
const theOther = locale === "ja" ? "en" : "ja";
21+
setSearchParams((prev) => {
22+
const nowLocal = new URLSearchParams(prev);
23+
nowLocal.set("lang", theOther);
24+
25+
return nowLocal;
26+
});
27+
};
28+
1929
useEffect(() => {
2030
if (!id) navigate("/heritages", { replace: true });
2131
}, [id, navigate]);
@@ -51,5 +61,5 @@ export function WorldHeritageDetailContainer() {
5161
);
5262
}
5363

54-
return <HeritageDetailLayout item={item} locale={locale} />;
64+
return <HeritageDetailLayout item={item} locale={locale} toggleLocale={toggleLanguageLocation} />;
5565
}

0 commit comments

Comments
 (0)