fix: fall back to original language on post redirect

This commit is contained in:
TerryM
2026-06-04 17:50:03 +08:00
parent ec98ff5a03
commit 1fcf2ea46d
9 changed files with 75 additions and 8 deletions

View File

@@ -166,6 +166,8 @@ export const enDict: Dict = {
favoritesSortHot: "Hot resources",
favoritesSearchPlaceholder: "Search your favorites",
favoritesUnavailable: "Unavailable",
postShownInOriginalLanguage:
"This post is not available in your selected language. Showing the original.",
favoritesClearFilters: "Clear filters",
favorites: "My Favorites",
favoritesComingSoon: "Coming Soon",

View File

@@ -166,6 +166,8 @@ export const idDict: Dict = {
favoritesSortHot: "Sumber populer",
favoritesSearchPlaceholder: "Cari favorit Anda",
favoritesUnavailable: "Tidak tersedia",
postShownInOriginalLanguage:
"Postingan ini tidak tersedia dalam bahasa yang Anda pilih. Menampilkan bahasa aslinya.",
favoritesClearFilters: "Hapus filter",
favorites: "Favorit Saya",
favoritesComingSoon: "Segera Hadir",

View File

@@ -166,6 +166,8 @@ export const jaDict: Dict = {
favoritesSortHot: "人気資料",
favoritesSearchPlaceholder: "お気に入りを検索",
favoritesUnavailable: "利用不可",
postShownInOriginalLanguage:
"この投稿は選択した言語で提供されていないため、原語で表示します。",
favoritesClearFilters: "フィルターをクリア",
favorites: "お気に入り",
favoritesComingSoon: "近日公開",

View File

@@ -164,6 +164,8 @@ export const koDict: Dict = {
favoritesSortHot: "인기 자료",
favoritesSearchPlaceholder: "내 즐겨찾기 검색",
favoritesUnavailable: "사용 불가",
postShownInOriginalLanguage:
"이 게시물은 선택하신 언어로 제공되지 않아 원본 언어로 표시됩니다.",
favoritesClearFilters: "필터 지우기",
favorites: "내 즐겨찾기",
favoritesComingSoon: "출시 예정",

View File

@@ -164,6 +164,8 @@ export const msDict: Dict = {
favoritesSortHot: "Sumber popular",
favoritesSearchPlaceholder: "Cari kegemaran anda",
favoritesUnavailable: "Tidak tersedia",
postShownInOriginalLanguage:
"Pos ini tidak tersedia dalam bahasa pilihan anda. Memaparkan bahasa asal.",
favoritesClearFilters: "Kosongkan penapis",
favorites: "Kegemaran Saya",
favoritesComingSoon: "Akan Hadir",

View File

@@ -163,6 +163,8 @@ export const viDict: Dict = {
favoritesSortHot: "Tài nguyên hot",
favoritesSearchPlaceholder: "Tìm trong yêu thích",
favoritesUnavailable: "Không khả dụng",
postShownInOriginalLanguage:
"Bài đăng này không có trong ngôn ngữ bạn chọn. Đang hiển thị bằng ngôn ngữ gốc.",
favoritesClearFilters: "Xóa bộ lọc",
favorites: "Yêu thích của tôi",
favoritesComingSoon: "Sắp ra mắt",

View File

@@ -159,6 +159,7 @@ export const zhDict: Dict = {
favoritesSortHot: "热门资料",
favoritesSearchPlaceholder: "搜索我的收藏",
favoritesUnavailable: "已下架",
postShownInOriginalLanguage: "该贴子暂未提供当前语言版本,以原语言显示。",
favoritesClearFilters: "清除筛选",
favorites: "我的收藏",
favoritesComingSoon: "功能即将推出",

View File

@@ -5,13 +5,15 @@ import { langQuery, useI18n } from "../../i18n";
import { useLocalizedPath } from "../../useLocalizedPath";
import { MOCK_POSTS } from "../../mocks/mockPosts";
import { POST_STREAM_USES_MOCK } from "../../components/messageStream/hooks/usePostStream";
import { useToast } from "../../components/Toast";
import type { Post } from "../../types/post";
export function PostRedirect() {
const { id } = useParams();
const { lang } = useI18n();
const { lang, t } = useI18n();
const navigate = useNavigate();
const lp = useLocalizedPath();
const { showToast } = useToast();
useEffect(() => {
if (!id) {
@@ -30,16 +32,25 @@ export function PostRedirect() {
return;
}
const goToPost = (post: Post) => {
navigate(lp(`/browse?post=${encodeURIComponent(post.id)}`), {
replace: true,
});
};
getJSON<Post>(
`/api/posts/${id}?lang=${encodeURIComponent(langQuery(lang))}`,
)
.then((post) => {
navigate(lp(`/browse?post=${encodeURIComponent(post.id)}`), {
replace: true,
});
})
.catch(() => navigate(lp("/browse"), { replace: true }));
}, [id, lang, navigate, lp]);
.then(goToPost)
.catch(() => {
getJSON<Post>(`/api/posts/${id}`)
.then((post) => {
showToast(t("postShownInOriginalLanguage"));
goToPost(post);
})
.catch(() => navigate(lp("/browse"), { replace: true }));
});
}, [id, lang, navigate, lp, showToast, t]);
return <div className="text-neutral-400"></div>;
}