NX Lab

Giao diện đa ngôn ngữ cho công cụ: bảng chuỗi Việt/Anh và chọn ngôn ngữ theo cài đặt

#Python#Địa phương hóa1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Công ty có kỹ sư nước ngoài hay đối tác cần thông báo tiếng Anh. Tách chuỗi hiển thị ra bảng dịch, và hàm tra theo mã ngôn ngữ, giúp thêm ngôn ngữ mà không đụng logic.

    Giao diện đa ngôn ngữ cho công cụ Giao diện đa ngôn ngữ cho công cụ

    Các bước thực hiện

    1. Tách chuỗi khỏi code. Mỗi thông báo có một mã khóa.
    2. Lập bảng dịch. Từ điển mã -> bản dịch cho từng ngôn ngữ.
    3. Chọn ngôn ngữ. Cấu hình hoặc biến môi trường.
    4. Hàm tra chuỗi. Dự phòng bằng tiếng Việt hoặc chính mã.
    5. Định dạng tham số. Dùng .format với tên tham số.

    Code tham khảo (Python)

    import os
    
    BANG_DICH = {
        "vi": {
            "khong_co_part": "Chưa có Work Part. Hãy mở chi tiết trước.",
            "da_xuat": "Đã xuất {so} file vào {thu_muc}",
            "loi_xuat": "Lỗi khi xuất {ten}: {ly_do}",
        },
        "en": {
            "khong_co_part": "No Work Part. Please open a part first.",
            "da_xuat": "Exported {so} file(s) to {thu_muc}",
            "loi_xuat": "Export failed for {ten}: {ly_do}",
        },
    }
    
    def ngon_ngu_hien_tai():
        return os.environ.get("NXLAB_NGON_NGU", "vi").lower()
    
    def t(ma, **tham_so):
        bang = BANG_DICH.get(ngon_ngu_hien_tai(), BANG_DICH["vi"])
        mau = bang.get(ma) or BANG_DICH["vi"].get(ma) or ma
        try:
            return mau.format(**tham_so)
        except (KeyError, IndexError):
            return mau
    
    def main():
        for ngon_ngu in ("vi", "en"):
            os.environ["NXLAB_NGON_NGU"] = ngon_ngu
            print(ngon_ngu, "|", t("khong_co_part"))
            print(ngon_ngu, "|", t("da_xuat", so=12, thu_muc="D:/xuat"))
            print(ngon_ngu, "|", t("loi_xuat", ten="a.prt", ly_do="file bị khóa"))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Hàm t(ma, **tham_so) là điểm duy nhất lấy chuỗi hiển thị; thay ngôn ngữ chỉ đổi một biến.
    • Dự phòng theo thứ tự: bản dịch của ngôn ngữ -> tiếng Việt -> chính mã khóa, nên thiếu bản dịch không làm chương trình lỗi.
    • format(**tham_so) chèn tham số có tên, khác với ghép chuỗi vì thứ tự từ mỗi ngôn ngữ khác nhau.

    Lỗi thường gặp

    • Đừng ghép chuỗi bằng + giữa các câu đã dịch; thứ tự từ khác nhau giữa các ngôn ngữ.
    • Giữ các mã khóa ổn định; đổi mã khóa làm mất bản dịch hiện có.

    Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.

    Điểm: 0

Trả lời

Đăng nhập để tham gia thảo luận.