From c53032155b68628b50f55daaf33ffcd963329c36 Mon Sep 17 00:00:00 2001 From: TerryM Date: Mon, 1 Jun 2026 15:54:29 +0800 Subject: [PATCH] feat(i18n): add full ja/vi/id/ms translations and drop languageNames fallback - Add complete dicts: src/locales/{ja,vi,id,ms}.ts (115 keys each) - Remove languageNames override map; dict object now points directly to each locale - i18n.tsx shrinks from ~414 lines to ~81 lines --- src/i18n.tsx | 97 ++++------------------------------ src/locales/id.ts | 131 ++++++++++++++++++++++++++++++++++++++++++++++ src/locales/ja.ts | 131 ++++++++++++++++++++++++++++++++++++++++++++++ src/locales/ms.ts | 131 ++++++++++++++++++++++++++++++++++++++++++++++ src/locales/vi.ts | 131 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 534 insertions(+), 87 deletions(-) create mode 100644 src/locales/id.ts create mode 100644 src/locales/ja.ts create mode 100644 src/locales/ms.ts create mode 100644 src/locales/vi.ts diff --git a/src/i18n.tsx b/src/i18n.tsx index 3313f27..ca3c216 100644 --- a/src/i18n.tsx +++ b/src/i18n.tsx @@ -9,99 +9,22 @@ import { languageForHomePathname } from "./languageRoutes"; import type { Dict } from "./locales/types"; import { zhDict } from "./locales/zh-CN"; import { enDict } from "./locales/en"; +import { jaDict } from "./locales/ja"; import { koDict } from "./locales/ko"; +import { viDict } from "./locales/vi"; +import { idDict } from "./locales/id"; +import { msDict } from "./locales/ms"; export type Lang = "zh-CN" | "en" | "ja" | "ko" | "vi" | "id" | "ms"; -const languageNames: Record = { - "zh-CN": { - lang_zh_CN: "中文", - lang_en: "English", - lang_ja: "日本語", - lang_ko: "한국어", - lang_vi: "Tiếng Việt", - lang_id: "Bahasa Indonesia", - lang_ms: "Bahasa Melayu", - }, - en: { - lang_zh_CN: "Chinese", - lang_en: "English", - lang_ja: "Japanese", - lang_ko: "Korean", - lang_vi: "Vietnamese", - lang_id: "Indonesian", - lang_ms: "Malay", - }, - ja: { - brand: "ARK ライブラリー", - showMore: "すべて表示", - showLess: "閉じる", - lang_zh_CN: "中国語", - lang_en: "英語", - lang_ja: "日本語", - lang_ko: "韓国語", - lang_vi: "ベトナム語", - lang_id: "インドネシア語", - lang_ms: "マレー語", - }, - ko: { - brand: "ARK 라이브러리", - showMore: "모두 보기", - showLess: "접기", - lang_zh_CN: "중국어", - lang_en: "영어", - lang_ja: "일본어", - lang_ko: "한국어", - lang_vi: "베트남어", - lang_id: "인도네시아어", - lang_ms: "말레이어", - }, - vi: { - brand: "Thư viện ARK", - showMore: "Xem tất cả", - showLess: "Thu gọn", - lang_zh_CN: "Tiếng Trung", - lang_en: "Tiếng Anh", - lang_ja: "Tiếng Nhật", - lang_ko: "Tiếng Hàn", - lang_vi: "Tiếng Việt", - lang_id: "Tiếng Indonesia", - lang_ms: "Tiếng Mã Lai", - }, - id: { - brand: "Perpustakaan ARK", - showMore: "Lihat semua", - showLess: "Tutup", - lang_zh_CN: "Bahasa Tionghoa", - lang_en: "Bahasa Inggris", - lang_ja: "Bahasa Jepang", - lang_ko: "Bahasa Korea", - lang_vi: "Bahasa Vietnam", - lang_id: "Bahasa Indonesia", - lang_ms: "Bahasa Melayu", - }, - ms: { - brand: "Perpustakaan ARK", - showMore: "Lihat semua", - showLess: "Tutup", - lang_zh_CN: "Bahasa Cina", - lang_en: "Bahasa Inggeris", - lang_ja: "Bahasa Jepun", - lang_ko: "Bahasa Korea", - lang_vi: "Bahasa Vietnam", - lang_id: "Bahasa Indonesia", - lang_ms: "Bahasa Melayu", - }, -}; - const dict: Record = { - "zh-CN": { ...zhDict, ...languageNames["zh-CN"] }, - en: { ...enDict, ...languageNames.en }, - ja: { ...enDict, ...languageNames.ja }, + "zh-CN": zhDict, + en: enDict, + ja: jaDict, ko: koDict, - vi: { ...enDict, ...languageNames.vi }, - id: { ...enDict, ...languageNames.id }, - ms: { ...enDict, ...languageNames.ms }, + vi: viDict, + id: idDict, + ms: msDict, }; /** Fixed locale lookup (admin UI uses Simplified Chinese). */ diff --git a/src/locales/id.ts b/src/locales/id.ts new file mode 100644 index 0000000..a1fd83c --- /dev/null +++ b/src/locales/id.ts @@ -0,0 +1,131 @@ +import type { Dict } from "./types"; + +export const idDict: Dict = { + brand: "Perpustakaan ARK", + mainNav: "Menu situs", + home: "Beranda", + all: "Semua aset", + categories: "Kategori", + latest: "Terbaru", + official: "Pilihan resmi", + popular: "Populer", + search: "Cari", + searchPlaceholder: "Cari sumber daya...", + searchPanelPlaceholder: "Cari aset...", + searchNow: "Cari sekarang", + searchSubmit: "Cari", + cancel: "Batal", + clear: "Hapus", + searchPanelHint: + "Pencarian mendukung judul, kategori, tag, ringkasan, jenis file, dan isi.", + currentTags: "Tag tersedia", + noTagsAvailable: "Belum ada tag yang tersedia.", + tagPostsTitle: "Postingan terkait #{{tag}}", + noTagPosts: "Belum ada postingan dengan tag ini.", + viewAll: "Lihat semua", + backToTop: "Kembali ke atas", + heroTitle: "Perpustakaan Resmi ARK", + heroSub: + "Memusatkan, mengatur, dan mengelola perpustakaan ARK agar Anda dapat menemukan yang dibutuhkan dengan cepat dan membantu komunitas tumbuh bersama.", + categorySection: "Kategori", + officialSection: "Rekomendasi resmi", + latestSection: "Pembaruan terbaru", + popularSection: "Aset populer", + preview: "Pratinjau", + download: "Unduh", + downloading: "Mengunduh…", + downloadOk: "Unduhan selesai", + downloadFail: "Unduhan gagal, silakan coba lagi", + longPressImageSave: "Tekan lama gambar untuk menyimpan", + showMore: "Lihat semua", + showLess: "Tutup", + share: "Bagikan", + langLabel: "Bahasa", + admin: "Admin", + login: "Masuk", + logout: "Keluar", + email: "Email", + password: "Kata sandi", + dashboard: "Dasbor", + resources: "Sumber daya", + newResource: "Sumber daya baru", + save: "Simpan", + title: "Judul", + description: "Deskripsi", + type: "Jenis", + language: "Bahasa", + category: "Kategori", + status: "Status", + public: "Publik", + downloadable: "Dapat diunduh", + recommended: "Unggulan", + cover: "URL gambar sampul", + fileUrl: "URL file", + externalUrl: "Tautan eksternal", + body: "Isi teks", + badge: "Label lencana", + published: "Diterbitkan", + draft: "Draf", + archived: "Diarsipkan", + noResults: "Tidak ada hasil. Coba kata kunci lain atau telusuri kategori.", + copyLink: "Salin tautan", + related: "Terkait", + total: "Total item", + views: "Tampilan", + downloads: "Unduhan", + lang_zh_CN: "Bahasa Tionghoa", + lang_en: "Bahasa Inggris", + lang_ja: "Bahasa Jepang", + lang_ko: "Bahasa Korea", + lang_vi: "Bahasa Vietnam", + lang_id: "Bahasa Indonesia", + lang_ms: "Bahasa Melayu", + filterAll: "Semua jenis", + sortPublished: "Tanggal terbit", + type_ppt: "PPT", + type_music: "Musik", + type_video: "Video", + type_image: "Gambar", + type_pdf: "PDF", + type_link: "Tautan", + type_text: "Teks", + type_archive: "Arsip", + type_zip: "ZIP", + adminLoginTitle: "Masuk admin", + adminEditResource: "Edit sumber daya", + adminVideoFileHint: + "Unggah file video (MP4/WebM/MOV, dll.) dan atur jenis ke Video; situs akan memutar otomatis (default tanpa suara — pengguna dapat membunyikan).", + adminStatTodayNew: "Baru hari ini", + adminStatFavorites: "Favorit", + adminMetricDownloads: "Unduhan", + adminMetricFavorites: "Favorit", + adminMetricViews: "Tampilan", + edit: "Edit", + backToList: "Kembali ke daftar", + sortOrderLabel: "Urutan", + previewUrlLabel: "URL pratinjau", + tagsCommaLabel: "Tag (dipisahkan koma)", + uploadFile: "Unggah", + loading: "Memuat…", + paginationPrev: "Sebelumnya", + paginationNext: "Berikutnya", + listRange: "Menampilkan {{from}}–{{to}} dari {{total}}", + pageIndicator: "Halaman {{c}} / {{p}}", + resourceLangFilter: "Bahasa sumber daya", + filterTagClear: "Hapus tag", + filterLanguageAll: "Semua bahasa", + footerAdminLogin: "Masuk admin", + adminSearchLogs: "Log pencarian", + adminMetricShares: "Berbagi", + adminSearchQuery: "Kueri", + adminSearchTime: "Waktu", + adminSearchId: "ID", + favorites: "Favorit Saya", + favoritesComingSoon: "Segera Hadir", + favoritesComingSoonDesc: + "Fitur masuk dan favorit sedang dikembangkan. Nantikan.", + featureUnavailable: "Belum tersedia", + featureUnavailableDesc: "Fitur ini belum tersedia.", + confirm: "Mengerti", + backToHome: "Kembali ke Beranda", +}; diff --git a/src/locales/ja.ts b/src/locales/ja.ts new file mode 100644 index 0000000..0a6968c --- /dev/null +++ b/src/locales/ja.ts @@ -0,0 +1,131 @@ +import type { Dict } from "./types"; + +export const jaDict: Dict = { + brand: "ARK ライブラリー", + mainNav: "サイトメニュー", + home: "ホーム", + all: "すべての資料", + categories: "カテゴリー", + latest: "最新", + official: "公式おすすめ", + popular: "人気", + search: "検索", + searchPlaceholder: "資料を検索...", + searchPanelPlaceholder: "資料を検索...", + searchNow: "今すぐ検索", + searchSubmit: "検索", + cancel: "キャンセル", + clear: "クリア", + searchPanelHint: + "タイトル・カテゴリー・タグ・概要・ファイル形式・本文の検索に対応", + currentTags: "利用可能なタグ", + noTagsAvailable: "現在利用可能なタグはありません。", + tagPostsTitle: "#{{tag}} 関連の資料", + noTagPosts: "このタグの資料はまだありません。", + viewAll: "すべて表示", + backToTop: "トップへ戻る", + heroTitle: "ARK 公式データベース", + heroSub: + "ARK ライブラリーを集約・整理・管理し、必要な資料をすばやく見つけてコミュニティの成長を促進します。", + categorySection: "カテゴリー", + officialSection: "公式おすすめ", + latestSection: "最新の更新", + popularSection: "人気の資料", + preview: "プレビュー", + download: "ダウンロード", + downloading: "ダウンロード中…", + downloadOk: "ダウンロード完了", + downloadFail: "ダウンロードに失敗しました。再試行してください", + longPressImageSave: "画像を長押しして保存", + showMore: "すべて表示", + showLess: "閉じる", + share: "シェア", + langLabel: "言語", + admin: "管理画面", + login: "ログイン", + logout: "ログアウト", + email: "メールアドレス", + password: "パスワード", + dashboard: "ダッシュボード", + resources: "資料管理", + newResource: "新規資料", + save: "保存", + title: "タイトル", + description: "説明", + type: "種類", + language: "言語", + category: "カテゴリー", + status: "ステータス", + public: "公開", + downloadable: "ダウンロード可", + recommended: "おすすめ", + cover: "カバー画像 URL", + fileUrl: "ファイル URL", + externalUrl: "外部リンク", + body: "本文", + badge: "推薦バッジ", + published: "公開済み", + draft: "下書き", + archived: "アーカイブ", + noResults: + "該当する資料が見つかりません。別のキーワードを試すか、カテゴリーをご覧ください。", + copyLink: "リンクをコピー", + related: "関連資料", + total: "総資料数", + views: "閲覧", + downloads: "ダウンロード", + lang_zh_CN: "中国語", + lang_en: "英語", + lang_ja: "日本語", + lang_ko: "韓国語", + lang_vi: "ベトナム語", + lang_id: "インドネシア語", + lang_ms: "マレー語", + filterAll: "すべての種類", + sortPublished: "公開日", + type_ppt: "PPT", + type_music: "音楽", + type_video: "動画", + type_image: "画像", + type_pdf: "PDF", + type_link: "リンク", + type_text: "テキスト", + type_archive: "アーカイブ", + type_zip: "ZIP", + adminLoginTitle: "管理画面ログイン", + adminEditResource: "資料を編集", + adminVideoFileHint: + "動画ファイル(MP4/WebM/MOV など)をアップロードし、種類を「動画」に設定すると、サイト上で自動再生されます(デフォルトはミュート、ユーザーが解除可能)。", + adminStatTodayNew: "本日の新規", + adminStatFavorites: "お気に入り", + adminMetricDownloads: "ダウンロード", + adminMetricFavorites: "お気に入り", + adminMetricViews: "閲覧", + edit: "編集", + backToList: "一覧へ戻る", + sortOrderLabel: "並び順", + previewUrlLabel: "プレビュー URL", + tagsCommaLabel: "タグ(カンマ区切り)", + uploadFile: "アップロード", + loading: "読み込み中…", + paginationPrev: "前へ", + paginationNext: "次へ", + listRange: "{{from}}–{{to}} / 全 {{total}} 件", + pageIndicator: "{{c}} / {{p}} ページ", + resourceLangFilter: "資料の言語", + filterTagClear: "タグをクリア", + filterLanguageAll: "すべての言語", + footerAdminLogin: "管理者ログイン", + adminSearchLogs: "検索履歴", + adminMetricShares: "シェア", + adminSearchQuery: "検索キーワード", + adminSearchTime: "時刻", + adminSearchId: "ID", + favorites: "お気に入り", + favoritesComingSoon: "近日公開", + favoritesComingSoonDesc: "ログインとお気に入り機能は開発中です。お楽しみに。", + featureUnavailable: "未公開", + featureUnavailableDesc: "この機能はまだご利用いただけません。", + confirm: "了解", + backToHome: "ホームへ戻る", +}; diff --git a/src/locales/ms.ts b/src/locales/ms.ts new file mode 100644 index 0000000..65a9047 --- /dev/null +++ b/src/locales/ms.ts @@ -0,0 +1,131 @@ +import type { Dict } from "./types"; + +export const msDict: Dict = { + brand: "Perpustakaan ARK", + mainNav: "Menu laman", + home: "Laman utama", + all: "Semua aset", + categories: "Kategori", + latest: "Terkini", + official: "Pilihan rasmi", + popular: "Popular", + search: "Cari", + searchPlaceholder: "Cari sumber...", + searchPanelPlaceholder: "Cari aset...", + searchNow: "Cari sekarang", + searchSubmit: "Cari", + cancel: "Batal", + clear: "Kosongkan", + searchPanelHint: + "Carian menyokong tajuk, kategori, tag, ringkasan, jenis fail dan isi teks.", + currentTags: "Tag tersedia", + noTagsAvailable: "Belum ada tag tersedia.", + tagPostsTitle: "Pos berkaitan #{{tag}}", + noTagPosts: "Belum ada pos dengan tag ini.", + viewAll: "Lihat semua", + backToTop: "Kembali ke atas", + heroTitle: "Perpustakaan Rasmi ARK", + heroSub: + "Memusatkan, menyusun dan mengurus perpustakaan ARK supaya anda dapat mencari apa yang diperlukan dengan cepat dan membantu komuniti berkembang bersama.", + categorySection: "Kategori", + officialSection: "Cadangan rasmi", + latestSection: "Kemas kini terkini", + popularSection: "Aset popular", + preview: "Pratonton", + download: "Muat turun", + downloading: "Memuat turun…", + downloadOk: "Muat turun selesai", + downloadFail: "Muat turun gagal, sila cuba lagi", + longPressImageSave: "Tekan lama imej untuk simpan", + showMore: "Lihat semua", + showLess: "Tutup", + share: "Kongsi", + langLabel: "Bahasa", + admin: "Pentadbir", + login: "Log masuk", + logout: "Log keluar", + email: "E-mel", + password: "Kata laluan", + dashboard: "Papan pemuka", + resources: "Sumber", + newResource: "Sumber baharu", + save: "Simpan", + title: "Tajuk", + description: "Penerangan", + type: "Jenis", + language: "Bahasa", + category: "Kategori", + status: "Status", + public: "Awam", + downloadable: "Boleh dimuat turun", + recommended: "Pilihan", + cover: "URL imej muka", + fileUrl: "URL fail", + externalUrl: "Pautan luar", + body: "Isi teks", + badge: "Label lencana", + published: "Diterbitkan", + draft: "Draf", + archived: "Diarkibkan", + noResults: "Tiada hasil. Cuba kata kunci lain atau imbas kategori.", + copyLink: "Salin pautan", + related: "Berkaitan", + total: "Jumlah item", + views: "Tontonan", + downloads: "Muat turun", + lang_zh_CN: "Bahasa Cina", + lang_en: "Bahasa Inggeris", + lang_ja: "Bahasa Jepun", + lang_ko: "Bahasa Korea", + lang_vi: "Bahasa Vietnam", + lang_id: "Bahasa Indonesia", + lang_ms: "Bahasa Melayu", + filterAll: "Semua jenis", + sortPublished: "Tarikh terbit", + type_ppt: "PPT", + type_music: "Muzik", + type_video: "Video", + type_image: "Imej", + type_pdf: "PDF", + type_link: "Pautan", + type_text: "Teks", + type_archive: "Arkib", + type_zip: "ZIP", + adminLoginTitle: "Log masuk pentadbir", + adminEditResource: "Sunting sumber", + adminVideoFileHint: + "Muat naik fail video (MP4/WebM/MOV, dll.) dan tetapkan jenis kepada Video; laman akan main automatik (asalnya senyap — pengguna boleh hidupkan bunyi).", + adminStatTodayNew: "Baharu hari ini", + adminStatFavorites: "Kegemaran", + adminMetricDownloads: "Muat turun", + adminMetricFavorites: "Kegemaran", + adminMetricViews: "Tontonan", + edit: "Sunting", + backToList: "Kembali ke senarai", + sortOrderLabel: "Susunan", + previewUrlLabel: "URL pratonton", + tagsCommaLabel: "Tag (dipisahkan koma)", + uploadFile: "Muat naik", + loading: "Memuatkan…", + paginationPrev: "Sebelum", + paginationNext: "Seterusnya", + listRange: "Menunjukkan {{from}}–{{to}} daripada {{total}}", + pageIndicator: "Halaman {{c}} / {{p}}", + resourceLangFilter: "Bahasa sumber", + filterTagClear: "Kosongkan tag", + filterLanguageAll: "Semua bahasa", + footerAdminLogin: "Log masuk pentadbir", + adminSearchLogs: "Log carian", + adminMetricShares: "Kongsi", + adminSearchQuery: "Kata kunci", + adminSearchTime: "Masa", + adminSearchId: "ID", + favorites: "Kegemaran Saya", + favoritesComingSoon: "Akan Hadir", + favoritesComingSoonDesc: + "Ciri log masuk dan kegemaran sedang dibangunkan. Nantikan.", + featureUnavailable: "Belum tersedia", + featureUnavailableDesc: "Ciri ini belum tersedia.", + confirm: "Faham", + backToHome: "Kembali ke Laman Utama", +}; diff --git a/src/locales/vi.ts b/src/locales/vi.ts new file mode 100644 index 0000000..838e961 --- /dev/null +++ b/src/locales/vi.ts @@ -0,0 +1,131 @@ +import type { Dict } from "./types"; + +export const viDict: Dict = { + brand: "Thư viện ARK", + mainNav: "Menu trang web", + home: "Trang chủ", + all: "Tất cả tài liệu", + categories: "Danh mục", + latest: "Mới nhất", + official: "Đề xuất chính thức", + popular: "Phổ biến", + search: "Tìm kiếm", + searchPlaceholder: "Tìm tài liệu...", + searchPanelPlaceholder: "Tìm tài liệu...", + searchNow: "Tìm ngay", + searchSubmit: "Tìm kiếm", + cancel: "Hủy", + clear: "Xóa", + searchPanelHint: + "Hỗ trợ tìm theo tiêu đề, danh mục, thẻ, tóm tắt, loại tệp và nội dung.", + currentTags: "Thẻ hiện có", + noTagsAvailable: "Chưa có thẻ nào.", + tagPostsTitle: "Tài liệu liên quan #{{tag}}", + noTagPosts: "Chưa có tài liệu nào với thẻ này.", + viewAll: "Xem tất cả", + backToTop: "Lên đầu trang", + heroTitle: "Thư viện chính thức ARK", + heroSub: + "Tập trung, phân loại và quản lý thư viện ARK để bạn nhanh chóng tìm thấy tài nguyên cần thiết và thúc đẩy sự phát triển của cộng đồng.", + categorySection: "Danh mục", + officialSection: "Đề xuất chính thức", + latestSection: "Cập nhật mới", + popularSection: "Tài liệu phổ biến", + preview: "Xem trước", + download: "Tải xuống", + downloading: "Đang tải xuống…", + downloadOk: "Tải xuống hoàn tất", + downloadFail: "Tải xuống thất bại, vui lòng thử lại", + longPressImageSave: "Nhấn giữ ảnh để lưu", + showMore: "Xem tất cả", + showLess: "Thu gọn", + share: "Chia sẻ", + langLabel: "Ngôn ngữ", + admin: "Quản trị", + login: "Đăng nhập", + logout: "Đăng xuất", + email: "Email", + password: "Mật khẩu", + dashboard: "Bảng điều khiển", + resources: "Tài liệu", + newResource: "Tài liệu mới", + save: "Lưu", + title: "Tiêu đề", + description: "Mô tả", + type: "Loại", + language: "Ngôn ngữ", + category: "Danh mục", + status: "Trạng thái", + public: "Công khai", + downloadable: "Có thể tải xuống", + recommended: "Nổi bật", + cover: "URL ảnh bìa", + fileUrl: "URL tệp", + externalUrl: "Liên kết bên ngoài", + body: "Nội dung", + badge: "Nhãn đề xuất", + published: "Đã xuất bản", + draft: "Bản nháp", + archived: "Đã lưu trữ", + noResults: "Không có kết quả. Hãy thử từ khóa khác hoặc duyệt danh mục.", + copyLink: "Sao chép liên kết", + related: "Tài liệu liên quan", + total: "Tổng số tài liệu", + views: "Lượt xem", + downloads: "Lượt tải", + lang_zh_CN: "Tiếng Trung", + lang_en: "Tiếng Anh", + lang_ja: "Tiếng Nhật", + lang_ko: "Tiếng Hàn", + lang_vi: "Tiếng Việt", + lang_id: "Tiếng Indonesia", + lang_ms: "Tiếng Mã Lai", + filterAll: "Tất cả loại", + sortPublished: "Ngày xuất bản", + type_ppt: "PPT", + type_music: "Âm nhạc", + type_video: "Video", + type_image: "Hình ảnh", + type_pdf: "PDF", + type_link: "Liên kết", + type_text: "Văn bản", + type_archive: "Tệp nén", + type_zip: "ZIP", + adminLoginTitle: "Đăng nhập quản trị", + adminEditResource: "Chỉnh sửa tài liệu", + adminVideoFileHint: + "Tải lên tệp video (MP4/WebM/MOV, v.v.) và đặt loại là Video; trang web sẽ tự động phát (mặc định tắt tiếng, người dùng có thể bật).", + adminStatTodayNew: "Mới hôm nay", + adminStatFavorites: "Yêu thích", + adminMetricDownloads: "Lượt tải", + adminMetricFavorites: "Yêu thích", + adminMetricViews: "Lượt xem", + edit: "Chỉnh sửa", + backToList: "Quay lại danh sách", + sortOrderLabel: "Thứ tự sắp xếp", + previewUrlLabel: "URL xem trước", + tagsCommaLabel: "Thẻ (cách nhau bằng dấu phẩy)", + uploadFile: "Tải lên", + loading: "Đang tải…", + paginationPrev: "Trước", + paginationNext: "Sau", + listRange: "Hiển thị {{from}}–{{to}} trên {{total}}", + pageIndicator: "Trang {{c}} / {{p}}", + resourceLangFilter: "Ngôn ngữ tài liệu", + filterTagClear: "Xóa thẻ", + filterLanguageAll: "Tất cả ngôn ngữ", + footerAdminLogin: "Đăng nhập quản trị", + adminSearchLogs: "Lịch sử tìm kiếm", + adminMetricShares: "Chia sẻ", + adminSearchQuery: "Từ khóa", + adminSearchTime: "Thời gian", + adminSearchId: "ID", + favorites: "Yêu thích của tôi", + favoritesComingSoon: "Sắp ra mắt", + favoritesComingSoonDesc: + "Tính năng đăng nhập và yêu thích đang phát triển. Hãy chờ đón.", + featureUnavailable: "Chưa khả dụng", + featureUnavailableDesc: "Tính năng này hiện chưa khả dụng.", + confirm: "Đã hiểu", + backToHome: "Về trang chủ", +};