diff --git a/crates/ui-egui/src/i18n.rs b/crates/ui-egui/src/i18n.rs index 9ecfdcc46..7fe752261 100644 --- a/crates/ui-egui/src/i18n.rs +++ b/crates/ui-egui/src/i18n.rs @@ -21,6 +21,7 @@ mod pl; mod pt; mod ru; mod sr; +mod vi; mod zh; mod uk; @@ -44,11 +45,12 @@ pub enum Language { Pl, It, Uk, + Vi, } impl Language { - pub const ALL: [Self; 15] = [ - Self::En, Self::Es, Self::El, Self::Zh, Self::Ja, Self::Ko, Self::Ru, Self::PtBr, Self::De, Self::Cs, Self::Fr, Self::Sr, Self::Pl, Self::It, Self::Uk, + pub const ALL: [Self; 16] = [ + Self::En, Self::Es, Self::El, Self::Zh, Self::Ja, Self::Ko, Self::Ru, Self::PtBr, Self::De, Self::Cs, Self::Fr, Self::Sr, Self::Pl, Self::It, Self::Uk, Self::Vi, ]; /// The language's own name, shown in the switcher. @@ -69,6 +71,7 @@ impl Language { Self::Pl => "Polski", Self::It => "Italiano", Self::Uk => "Українська", + Self::Vi => "Tiếng Việt", } } @@ -90,6 +93,7 @@ impl Language { Self::Pl => "pl", Self::It => "it", Self::Uk => "uk", + Self::Vi => "vi", } } @@ -114,6 +118,7 @@ impl Language { "pl" => Some(Self::Pl), "it" => Some(Self::It), "uk" => Some(Self::Uk), + "vi" => Some(Self::Vi), _ => None, } } @@ -156,6 +161,7 @@ impl Language { Self::Pl => pl::translate(text), Self::It => it::translate(text), Self::Uk => uk::translate(text), + Self::Vi => vi::translate(text), }; translated.unwrap_or_else(|| text.rsplit_once('|').map_or(text, |(_, label)| label)) } @@ -225,6 +231,7 @@ mod tests { assert!(pl::translate(english).is_some_and(|text| !text.is_empty()), "missing Polish: {english}"); assert!(it::translate(english).is_some_and(|text| !text.is_empty()), "missing Italian: {english}"); assert!(uk::translate(english).is_some_and(|text| !text.is_empty()), "missing Ukrainian: {english}"); + assert!(vi::translate(english).is_some_and(|text| !text.is_empty()), "missing Vietnamese: {english}"); } assert_eq!(Language::Ja.tr("Data"), "データ"); assert_eq!(Language::Zh.tr("Data"), "数据"); @@ -272,6 +279,10 @@ mod tests { assert_eq!(Language::It.tr("Orientation"), "Orientamento"); assert_eq!(Language::Uk.tr("Data"), "Дані"); assert_eq!(Language::Uk.tr("Sheet1!A1"), "Sheet1!A1"); + assert_eq!(Language::Vi.tr("Data"), "Dữ liệu"); + assert_eq!(Language::Vi.tr("Sheet1!A1"), "Sheet1!A1"); + assert_eq!(Language::Vi.tr("Page Layout|Orientation"), "Hướng giấy"); + assert_eq!(Language::Vi.tr("Orientation"), "Hướng chữ"); assert_eq!(Language::parse("xx"), None); } @@ -409,6 +420,8 @@ mod tests { assert_eq!(Language::parse("it"), Some(Language::It)); assert_eq!(Language::from_tag("uk-XX"), Some(Language::Uk)); assert_eq!(Language::parse("uk"), Some(Language::Uk)); + assert_eq!(Language::from_tag("vi-VN"), Some(Language::Vi)); + assert_eq!(Language::parse("vi"), Some(Language::Vi)); } #[test] diff --git a/crates/ui-egui/src/i18n/vi.rs b/crates/ui-egui/src/i18n/vi.rs new file mode 100644 index 000000000..06eaa8342 --- /dev/null +++ b/crates/ui-egui/src/i18n/vi.rs @@ -0,0 +1,416 @@ +//! Vietnamese translations for the interface strings in i18n.rs. Labels follow the wording +//! Vietnamese spreadsheet users know; anything absent falls back to English. + +pub(super) fn translate(text: &str) -> Option<&'static str> { + Some(match text { + "Paste" => "Dán", + "Paste Values" => "Dán giá trị", + "Paste Formulas" => "Dán công thức", + "Paste Formatting" => "Dán định dạng", + "Transpose" => "Chuyển vị", + "Paste Link" => "Dán liên kết", + "Paste Special…" => "Dán đặc biệt…", + "Insert Copied Cells" => "Chèn ô đã sao chép", + "Insert Copied Cells…" => "Chèn ô đã sao chép…", + "Insert Cut Cells" => "Chèn ô đã cắt", + "Insert Paste" => "Chèn và dán", + "Cut (⌘X)" => "Cắt (⌘X)", + "Copy (⌘C)" => "Sao chép (⌘C)", + "Format Painter (double-click to keep it on)" => "Sao định dạng (bấm đúp để giữ)", + "Bold (⌘B)" => "Đậm (⌘B)", + "Italic (⌘I)" => "Nghiêng (⌘I)", + "Underline (⌘U)" => "Gạch chân (⌘U)", + "Double Underline" => "Gạch chân đôi", + "Strikethrough" => "Gạch ngang", + "Underline" => "Gạch chân", + "Increase Font Size" => "Tăng cỡ chữ", + "Decrease Font Size" => "Giảm cỡ chữ", + "Wrap Text" => "Xuống dòng tự động", + "Merge & Center" => "Hợp nhất và căn giữa", + "Merge Cells" => "Hợp nhất ô", + "Merge Across" => "Hợp nhất theo hàng", + "Unmerge Cells" => "Bỏ hợp nhất ô", + "Fill Color" => "Màu tô", + "Font Color" => "Màu chữ", + "Borders" => "Viền", + "Top\nAlign" => "Căn\ntrên", + "Middle\nAlign" => "Căn\ngiữa dọc", + "Bottom\nAlign" => "Căn\ndưới", + "Left" => "Trái", + "Right" => "Phải", + "Center" => "Giữa", + "Horizontal" => "Ngang", + "Vertical Text" => "Chữ dọc", + "Decrease Indent" => "Giảm thụt lề", + "Increase Indent" => "Tăng thụt lề", + "Orientation" => "Hướng chữ", + "Page Layout|Orientation" => "Hướng giấy", + "Angle Counterclockwise" => "Xoay ngược chiều kim đồng hồ", + "Angle Clockwise" => "Xoay theo chiều kim đồng hồ", + "Rotate Text Up" => "Xoay chữ lên", + "Rotate Text Down" => "Xoay chữ xuống", + "Accounting Number Format" => "Định dạng số kế toán", + "Percent Style" => "Kiểu phần trăm", + "Comma Style" => "Kiểu dấu phân cách", + "Increase Decimal" => "Tăng số thập phân", + "Decrease Decimal" => "Giảm số thập phân", + "More Accounting Formats…" => "Định dạng kế toán khác…", + "Conditional\nFormatting" => "Định dạng\ncó điều kiện", + "Conditional Formatting" => "Định dạng có điều kiện", + "Format\nas Table" => "Định dạng\nthành bảng", + "Cell\nStyles" => "Kiểu\nô", + "Format Cells…" => "Định dạng ô…", + "Format Cell Alignment…" => "Căn chỉnh ô…", + "Format\nPane" => "Ngăn\nđịnh dạng", + "Format" => "Định dạng", + "Insert" => "Chèn", + "Insert Cells…" => "Chèn ô…", + "Delete" => "Xóa", + "Delete Cells…" => "Xóa ô…", + "Insert Sheet Rows" => "Chèn hàng trang tính", + "Insert Sheet Columns" => "Chèn cột trang tính", + "Delete Sheet Rows" => "Xóa hàng trang tính", + "Delete Sheet Columns" => "Xóa cột trang tính", + "Row Height…" => "Chiều cao hàng…", + "AutoFit Row Height" => "Tự động khớp chiều cao hàng", + "Column Width…" => "Độ rộng cột…", + "AutoFit Column Width" => "Tự động khớp độ rộng cột", + "Default Width…" => "Độ rộng mặc định…", + "Hide Rows" => "Ẩn hàng", + "Unhide Rows" => "Bỏ ẩn hàng", + "Hide Columns" => "Ẩn cột", + "Unhide Columns" => "Bỏ ẩn cột", + "Lock Cell" => "Khóa ô", + "Clear" => "Xóa", + "Clear All" => "Xóa tất cả", + "Clear Formats" => "Xóa định dạng", + "Clear Contents" => "Xóa nội dung", + "Clear Comments and Notes" => "Xóa chú thích và ghi chú", + "Clear Hyperlinks" => "Xóa siêu liên kết", + "AutoSum" => "Tự động tính tổng", + "AutoSum (⌘⇧T)" => "Tự động tính tổng (⌘⇧T)", + "Flash\nFill" => "Điền\nnhanh", + "Flash Fill" => "Điền nhanh", + "Fill" => "Điền", + "Clear Print Area" => "Xóa vùng in", + "Find &\nSelect" => "Tìm &\nChọn", + "Find…" => "Tìm…", + "Replace…" => "Thay thế…", + "Go To…" => "Đi tới…", + "Go To Special…" => "Đi tới đặc biệt…", + "PivotTable" => "PivotTable", + "Recommended\nCharts" => "Biểu đồ\nđề xuất", + "Table" => "Bảng", + "Pictures" => "Ảnh", + "Shapes" => "Hình", + "Icons" => "Biểu tượng", + "Text\nBox" => "Hộp\nvăn bản", + "Comment" => "Chú thích", + "New\nComment" => "Chú thích\nmới", + "New Note" => "Ghi chú mới", + "Show/Hide Note" => "Hiện/ẩn ghi chú", + "Header &\nFooter" => "Đầu trang &\nChân trang", + "Text to\nColumns" => "Tách\ncột", + "Link" => "Liên kết", + "Symbol" => "Ký hiệu", + "Sparklines" => "Biểu đồ thu nhỏ", + "Checkbox" => "Hộp kiểm", + "Insert checkboxes in the selected cells" => "Chèn hộp kiểm vào các ô đã chọn", + "Header & Footer" => "Đầu trang & Chân trang", + "Draw with ink" => "Vẽ bằng mực", + "Eraser" => "Tẩy", + "Ink to\nShape" => "Mực thành\nhình", + "Select\nObjects" => "Chọn\nđối tượng", + "Themes" => "Chủ đề", + "Margins" => "Lề", + "Left Margin" => "Lề trái", + "Right Margin" => "Lề phải", + "Top Margin" => "Lề trên", + "Bottom Margin" => "Lề dưới", + "Header Margin" => "Lề đầu trang", + "Footer Margin" => "Lề chân trang", + "Size" => "Khổ giấy", + "Print\nArea" => "Vùng\nin", + "Set Print Area" => "Đặt vùng in", + "Breaks" => "Ngắt trang", + "Insert Page Break" => "Chèn ngắt trang", + "Remove Page Break" => "Bỏ ngắt trang", + "Reset All Page Breaks" => "Đặt lại tất cả ngắt trang", + "Print\nTitles" => "In\ntiêu đề", + "Sheet\nRight-to-Left" => "Trang tính\nphải sang trái", + "Sheet Right-to-Left" => "Trang tính phải sang trái", + "Narrow" => "Hẹp", + "Wide" => "Rộng", + "Normal" => "Bình thường", + "Portrait" => "Dọc", + "Landscape" => "Ngang", + "Custom Margins…" => "Lề tùy chỉnh…", + "Insert\nFunction" => "Chèn\nhàm", + "Name\nManager" => "Trình quản lý\ntên", + "Define Name" => "Xác định tên", + "Use in Formula" => "Dùng trong công thức", + "Create from Selection" => "Tạo từ vùng chọn", + "Trace Precedents" => "Truy tìm ô tham chiếu", + "Trace Dependents" => "Truy tìm ô phụ thuộc", + "Remove Arrows" => "Bỏ mũi tên", + "Show Formulas" => "Hiện công thức", + "Error Checking" => "Kiểm tra lỗi", + "Evaluate Formula" => "Đánh giá công thức", + "Watch Window" => "Cửa sổ theo dõi", + "Calculation\nOptions" => "Tùy chọn\ntính toán", + "Calculate Now" => "Tính ngay", + "Calculate Sheet" => "Tính trang tính", + "Automatic" => "Tự động", + "Automatic Except for Data Tables" => "Tự động trừ bảng dữ liệu", + "Manual" => "Thủ công", + "Sort &\nFilter" => "Sắp xếp &\nLọc", + "Sort" => "Sắp xếp", + "Sort A to Z" => "Sắp xếp từ A đến Z", + "Sort Z to A" => "Sắp xếp từ Z đến A", + "Custom Sort…" => "Sắp xếp tùy chỉnh…", + "Filter" => "Lọc", + "Reapply" => "Áp dụng lại", + "Get Data\n(Text/CSV)" => "Lấy dữ liệu\n(Văn bản/CSV)", + "Remove\nDuplicates" => "Loại bỏ\ntrùng lặp", + "Data\nValidation" => "Xác thực\ndữ liệu", + "Data Validation" => "Xác thực dữ liệu", + "Data Validation…" => "Xác thực dữ liệu…", + "Circle Invalid Data" => "Khoanh dữ liệu không hợp lệ", + "Clear Validation" => "Xóa xác thực", + "Group" => "Nhóm", + "Ungroup" => "Bỏ nhóm", + "Show Detail" => "Hiện chi tiết", + "Hide Detail" => "Ẩn chi tiết", + "Subtotal" => "Tổng phụ", + "Data\nAnalysis" => "Phân tích\ndữ liệu", + "Data Analysis" => "Phân tích dữ liệu", + "Solver" => "Solver", + "What-If\nAnalysis" => "Phân tích\nWhat-If", + "Data Table…" => "Bảng dữ liệu…", + "Scenario Manager…" => "Trình quản lý kịch bản…", + "Goal Seek…" => "Tìm mục tiêu…", + "Forecast\nSheet" => "Trang tính\ndự báo", + "Spelling" => "Chính tả", + "Check\nAccessibility" => "Kiểm tra\ntrợ năng", + "Threaded Comments" => "Chú thích dạng chuỗi", + "Show\nComments" => "Hiện\nchú thích", + "Previous" => "Trước", + "Next" => "Tiếp", + "Previous Comment" => "Chú thích trước", + "Next Comment" => "Chú thích tiếp theo", + "Show All Notes" => "Hiện tất cả ghi chú", + "Convert to Comments" => "Chuyển thành chú thích", + "Protect\nWorkbook" => "Bảo vệ\nsổ làm việc", + "Allow Edit\nRanges" => "Cho phép sửa\nphạm vi", + "Allow Edit Ranges" => "Cho phép sửa phạm vi", + "Unprotect\nSheet" => "Bỏ bảo vệ\ntrang tính", + "Protect Sheet…" => "Bảo vệ trang tính…", + "Comments" => "Chú thích", + "Notes" => "Ghi chú", + "Page Break\nPreview" => "Xem trước\nngắt trang", + "Page\nLayout" => "Bố trí\ntrang", + "Formula Bar" => "Thanh công thức", + "Gridlines" => "Đường lưới", + "Headings" => "Tiêu đề hàng/cột", + "Zoom" => "Thu phóng", + "100%" => "100%", + "Zoom to\nSelection" => "Phóng to\nvùng chọn", + "Freeze\nPanes" => "Cố định\nngăn", + "Freeze Panes" => "Cố định ngăn", + "Freeze Top Row" => "Cố định hàng trên cùng", + "Freeze First Column" => "Cố định cột đầu tiên", + "Unfreeze Panes" => "Bỏ cố định ngăn", + "Dark Mode" => "Chế độ tối", + "Display theme" => "Chủ đề hiển thị", + "Animations" => "Hiệu ứng động", + "Glide the selection outline to the cell you move to instead of jumping there" => { + "Trượt khung vùng chọn tới ô bạn di chuyển đến thay vì nhảy ngay tới đó" + } + "System" => "Hệ thống", + "Light" => "Sáng", + "Dark" => "Tối", + "Interface language" => "Ngôn ngữ giao diện", + "Interface size" => "Kích thước giao diện", + "Auto" => "Tự động", + "Drag to freeze columns" => "Kéo để cố định cột", + "Drag to freeze rows" => "Kéo để cố định hàng", + "Command\nPalette" => "Bảng\nlệnh", + "Agent\nControl" => "Điều khiển\nagent", + "Action\nJournal" => "Nhật ký\nthao tác", + "About\nGridCraft" => "Giới thiệu\nGridCraft", + "Share" => "Chia sẻ", + "Add Chart\nElement" => "Thêm thành phần\nbiểu đồ", + "Change\nChart Type" => "Đổi kiểu\nbiểu đồ", + "Switch\nRow/Column" => "Đổi\nhàng/cột", + "Select\nData" => "Chọn\ndữ liệu", + "Data Labels: None" => "Nhãn dữ liệu: Không", + "Data Labels: Show" => "Nhãn dữ liệu: Hiện", + "Legend: None" => "Chú giải: Không", + "Legend: Bottom" => "Chú giải: Dưới", + "Legend: Top" => "Chú giải: Trên", + "Legend: Right" => "Chú giải: Phải", + "Gridlines: None" => "Đường lưới: Không", + "Gridlines: Show" => "Đường lưới: Hiện", + "Chart\nTitle" => "Tiêu đề\nbiểu đồ", + "Delete\nChart" => "Xóa\nbiểu đồ", + "Convert\nto Range" => "Chuyển thành\nphạm vi", + "Table\nStyles" => "Kiểu\nbảng", + "Top 10 Items" => "10 mục đầu", + "Top 10%" => "10% đầu", + "Bottom 10 Items" => "10 mục cuối", + "Bottom 10%" => "10% cuối", + "Above Average" => "Trên trung bình", + "Below Average" => "Dưới trung bình", + "Clear Rules from Entire Sheet" => "Xóa quy tắc khỏi toàn bộ trang tính", + "Clear Rules from Selected Cells" => "Xóa quy tắc khỏi các ô đã chọn", + "Constants" => "Hằng số", + "Data Bars" => "Thanh dữ liệu", + "Color Scales" => "Thang màu", + "Icon Sets" => "Bộ biểu tượng", + "Home" => "Trang đầu", + "Draw" => "Vẽ", + "Page Layout" => "Bố trí trang", + "Formulas" => "Công thức", + "Data" => "Dữ liệu", + "Review" => "Xem lại", + "View" => "Xem", + "Automate" => "Tự động hóa", + "Table Design" => "Thiết kế bảng", + "Chart Design" => "Thiết kế biểu đồ", + "Ready" => "Sẵn sàng", + "Enter" => "Nhập", + "Edit" => "Sửa", + "Point" => "Trỏ", + "Calculate" => "Tính toán", + "Select destination and press Enter or choose Paste" => "Chọn vị trí đích rồi nhấn Enter hoặc chọn Dán", + "General" => "Chung", + "Number" => "Số", + "Currency" => "Tiền tệ", + "Accounting" => "Kế toán", + "Date" => "Ngày", + "Time" => "Giờ", + "Percentage" => "Phần trăm", + "Fraction" => "Phân số", + "Scientific" => "Khoa học", + "Text" => "Văn bản", + "Special" => "Đặc biệt", + "Custom" => "Tùy chỉnh", + "Short Date" => "Ngày dạng ngắn", + "Long Date" => "Ngày dạng dài", + "More Number Formats…" => "Định dạng số khác…", + "Financial" => "Tài chính", + "Logical" => "Logic", + "Date &\nTime" => "Ngày &\nGiờ", + "Lookup &\nReference" => "Tra cứu &\nTham chiếu", + "Math &\nTrig" => "Toán &\nLượng giác", + "More\nFunctions" => "Hàm\nkhác", + "Sheet Options|View" => "Xem", + "Print" => "In", + // Page Layout view and the Header & Footer tab. + "Click to add data" => "Bấm để thêm dữ liệu", + "Add header" => "Thêm đầu trang", + "Add footer" => "Thêm chân trang", + "(none)" => "(không có)", + "Header" => "Đầu trang", + "Footer" => "Chân trang", + "Page\nNumber" => "Số\ntrang", + "Number\nof Pages" => "Tổng\nsố trang", + "Current\nDate" => "Ngày\nhiện tại", + "Current\nTime" => "Giờ\nhiện tại", + "File\nPath" => "Đường dẫn\ntệp", + "File\nName" => "Tên\ntệp", + "Sheet\nName" => "Tên\ntrang tính", + "Go to\nHeader" => "Đi tới\nđầu trang", + "Go to\nFooter" => "Đi tới\nchân trang", + "Page Number" => "Số trang", + "Number of Pages" => "Tổng số trang", + "Current Date" => "Ngày hiện tại", + "Current Time" => "Giờ hiện tại", + "File Path" => "Đường dẫn tệp", + "File Name" => "Tên tệp", + "Sheet Name" => "Tên trang tính", + "Go to Header" => "Đi tới đầu trang", + "Different First Page" => "Trang đầu khác", + "Different Odd & Even Pages" => "Trang chẵn lẻ khác nhau", + "Go to Footer" => "Đi tới chân trang", + "Ruler" => "Thước", + // File › Backstage view. + "File" => "Tệp", + "Back" => "Quay lại", + "New" => "Mới", + "Open" => "Mở", + "Info" => "Thông tin", + "Save" => "Lưu", + "Save As" => "Lưu thành", + "Export" => "Xuất", + "Close" => "Đóng", + "Options" => "Tùy chọn", + "Blank workbook" => "Sổ làm việc trống", + "Recent" => "Gần đây", + "No recent workbooks yet." => "Chưa có sổ làm việc gần đây.", + "More workbooks" => "Sổ làm việc khác", + "Modified" => "Đã sửa đổi", + "Not available" => "Không khả dụng", + "Just now" => "Vừa xong", + "Yesterday" => "Hôm qua", + "{n} min ago" => "{n} phút trước", + "{n} h ago" => "{n} giờ trước", + "{n} days ago" => "{n} ngày trước", + "{n} weeks ago" => "{n} tuần trước", + "{n} months ago" => "{n} tháng trước", + "{n} years ago" => "{n} năm trước", + "Browse…" => "Duyệt…", + "Not saved yet" => "Chưa lưu", + "Location" => "Vị trí", + "Sheets" => "Trang tính", + "Protect Workbook" => "Bảo vệ sổ làm việc", + "Sheet structure is locked: sheets can't be added, moved, renamed or deleted." => { + "Cấu trúc trang tính đã bị khóa: không thể thêm, di chuyển, đổi tên hoặc xóa trang tính." + } + "Lock the sheet structure so sheets can't be added, moved, renamed or deleted." => { + "Khóa cấu trúc trang tính để không thể thêm, di chuyển, đổi tên hoặc xóa trang tính." + } + "Properties" => "Thuộc tính", + "Title" => "Tiêu đề", + "Subject" => "Chủ đề", + "Author" => "Tác giả", + "Company" => "Công ty", + "Keywords" => "Từ khóa", + "Description" => "Mô tả", + "No workbook is open." => "Chưa mở sổ làm việc nào.", + "Save as type" => "Lưu dưới dạng", + "Excel Workbook (*.xlsx)" => "Sổ làm việc Excel (*.xlsx)", + "CSV UTF-8 (Comma delimited) (*.csv)" => "CSV UTF-8 (phân cách bằng dấu phẩy) (*.csv)", + "Web Page (*.html)" => "Trang web (*.html)", + "PDF (*.pdf)" => "PDF (*.pdf)", + "Download" => "Tải xuống", + "A CSV file, web page or PDF is a copy: the workbook keeps its own file." => { + "Tệp CSV, trang web hoặc PDF chỉ là bản sao: sổ làm việc vẫn giữ tệp gốc." + } + "Save the workbook under another name or in another folder." => "Lưu sổ làm việc với tên khác hoặc vào thư mục khác.", + "Print Active Sheets" => "In các trang tính hiện hoạt", + "Print Entire Workbook" => "In toàn bộ sổ làm việc", + "Fit Sheet on One Page" => "Vừa trang tính trên một trang", + "Page Setup…" => "Thiết lập trang…", + "Page {page} of {pages}" => "Trang {page} / {pages}", + "Nothing to print." => "Không có gì để in.", + "Previous page" => "Trang trước", + "Next page" => "Trang sau", + "Create PDF" => "Tạo PDF", + "Save the sheet as a PDF document that keeps its page layout." => "Lưu trang tính thành tài liệu PDF, giữ nguyên bố trí trang.", + "Change File Type" => "Đổi kiểu tệp", + "CSV (Comma delimited)" => "CSV (phân cách bằng dấu phẩy)", + "Save the active sheet as comma-separated text." => "Lưu trang tính hiện hoạt thành văn bản phân cách bằng dấu phẩy.", + "Web Page (.html)" => "Trang web (.html)", + "Save the workbook as a web page." => "Lưu sổ làm việc thành trang web.", + "Options|General" => "Chung", + "Options|Save" => "Lưu", + "Show formula bar" => "Hiện thanh công thức", + "Enable AutoComplete for cell values" => "Bật tự động hoàn thành giá trị ô", + "Save .xlsx workbooks automatically after every change" => "Tự động lưu sổ làm việc .xlsx sau mỗi thay đổi", + "Workbook calculation" => "Tính toán sổ làm việc", + "Enable iterative calculation" => "Bật tính toán lặp", + "Calculation settings are saved with the workbook." => "Thiết lập tính toán được lưu cùng sổ làm việc.", + _ => return None, + }) +} diff --git a/docs/localization-parity.md b/docs/localization-parity.md index 0e0cb6367..14b39c0a5 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -61,7 +61,7 @@ separators, number/date formats, machine translation with agent review, and scri | German | de | 266 (~12%) | no | Latin: yes | no | menus only | 4–8 h | | Italian | it | 971 (~44%) | dialogs, tooltips, pivot pane | Latin: yes | no | menus, File view, dialogs, pivot pane | 3–5 h | | Korean | ko | 266 (~12%) | no | Hangul via the CJK fallback; IME unverified | no | menus only | 6–10 h | -| Vietnamese | vi | 0 (0%) | no | Latin with stacked diacritics: unverified | no | none | 6–10 h | +| Vietnamese | vi | 398 (~18%) | no | Latin with stacked diacritics: unverified | no | menus, File view | 5–9 h | Other shipped languages: Russian (ru) and German (de), 266 labels each (~12%), menus only. @@ -93,6 +93,7 @@ language (none so far) and of localized function names. | 2026-10-19 | trivial | Text boxes and shapes keep right-to-left paragraph direction (`a:pPr rtl`) on XLSX save, so Excel-authored Arabic and Hebrew text boxes reopen right to left | | 2026-10-19 | minor | Save as Web Page and copied HTML mark right-to-left sheets `dir="rtl"`, let General-aligned Arabic and Hebrew text align by its own direction (`dir="auto"`), and keep numbers on right-to-left sheets left to right and on the left | | 2026-10-19 | minor | French and Serbian kept the context in three `context\|label` translations ("Options\|Général", "Opcije\|Opšte" for `Options\|General`; also `Options\|Save`, `Sheet Options\|View`). `tr` shows a found translation as it is, so File › Options headings and the Sheet Options "View" checkboxes showed the prefix. Fixed; a test checks that no catalog shows a `\|` | +| 2026-10-17 | minor | Vietnamese catalog (`i18n/vi.rs`, every key in the master table); `vi` locale tags resolve to Vietnamese | | 2026-10-12 | minor | Format Cells looks up its tabs, labels, options and note through `Language::tr` (Fill tab keyed `Format Cells\|Fill`); dialog titles and OK/Cancel too. Labels already in a table (Number, Currency, Fill…) show translated; the rest fall back to English until the tables add them | | 2026-10-12 | minor | Brazilian Portuguese catalog (`i18n/pt.rs`) grows from 377 to 923 entries: every key the other catalogs translate, including the dialog strings #669 starts looking up (~42%) | | 2026-10-11 | minor | German ribbon catalog (`i18n/de.rs`, 266 labels, ~12%); `de` locale tags (de-DE, de-AT, de-CH…) resolve to German. PR #163 (localized German formulas/numbers) still open |