Dịch phần mềm và ứng dụng là chuyển toàn bộ phần chữ mà người dùng nhìn thấy hoặc nghe thấy — nút bấm, menu, thông báo lỗi, thông báo đẩy, email tự động, mô tả trên cửa hàng ứng dụng, trang trợ giúp — sang ngôn ngữ khác, sao cho ứng dụng vẫn chạy đúng và người dùng bản xứ dùng nó như thể nó được viết cho họ từ đầu. Trong nghề gọi việc này là bản địa hoá (localization, viết tắt l10n), vì ngoài chữ còn phải đổi định dạng ngày giờ, tiền tệ, cách xưng hô, đôi khi cả hình ảnh và luồng thao tác.
Khác biệt lớn nhất so với dịch tài liệu: người dịch không nhận một văn bản liền mạch mà nhận hàng trăm đến hàng chục nghìn mảnh chữ rời, mỗi mảnh nằm ở một màn hình khác nhau, nhiều mảnh chỉ một hai từ, có chứa biến và mã định dạng. Dịch đúng nghĩa từng mảnh vẫn có thể cho ra một ứng dụng đọc lủng củng, nút bị cắt chữ hoặc ứng dụng bị lỗi khi chạy.
Bài này đi qua toàn bộ chuỗi việc: phần nào là của lập trình viên, phần nào là của người dịch, bảy bước từ lúc xuất tệp chuỗi đến lúc phát hành, và những thứ bạn nên chuẩn bị để bản dịch không phải làm lại. Các bài khác trong chuyên mục đi sâu từng khâu: tệp chuỗi, biến, số nhiều, độ dài chữ, kiểm thử ngôn ngữ, cửa hàng ứng dụng, thông báo đẩy.
Dịch phần mềm khác dịch tài liệu ở chỗ nào
Thứ nhất là mất ngữ cảnh. Một tài liệu có câu trước câu sau; một tệp chuỗi chỉ có những dòng kiểu khoá – giá trị, sắp theo thứ tự lập trình viên đặt chứ không theo thứ tự người dùng nhìn thấy. Chữ "Open" có thể là động từ trên nút (Mở), tính từ trạng thái của một phiếu hỗ trợ (Đang mở) hay tên một bộ lọc (Chưa đóng). Chữ "Save" có thể là Lưu, Tiết kiệm hay Giảm giá tuỳ màn hình. Không có ảnh chụp màn hình hay ghi chú, người dịch giỏi đến đâu cũng phải đoán.
Thứ hai là chữ dính với mã. Chuỗi "Hello, {name}! You have %d new messages" có hai chỗ mà người dịch tuyệt đối không được đổi tên, không được xoá, và trong nhiều định dạng không được tuỳ tiện đổi thứ tự. Gõ nhầm một dấu ngoặc nhọn là màn hình đó hiện chữ thô hoặc ứng dụng báo lỗi. Đây là lỗi mà người dịch tài liệu chưa từng gặp, còn người dịch phần mềm gặp mỗi ngày.
Thứ ba là không gian cố định. Một trang tài liệu dịch dài hơn thì thêm trang; một nút bấm rộng bao nhiêu thì chữ chỉ được dài bấy nhiêu. Tiếng Việt thường dài hơn tiếng Anh khi dịch những nhãn ngắn ("Settings" thành "Cài đặt", "Sign in" thành "Đăng nhập"), lại có dấu chồng lên cao nên dễ bị cắt đầu chữ nếu khoảng cách dòng quá chật.
Thứ tư là vòng đời liên tục. Tài liệu dịch xong là xong; ứng dụng ra bản mới hằng tháng, có khi hằng tuần, mỗi lần thêm vài chục chuỗi và sửa vài chuỗi cũ. Bản địa hoá vì thế là một dây chuyền, không phải một đơn hàng. Ai từng dịch một lần rồi để đó sẽ thấy sau sáu tháng ứng dụng nửa Việt nửa Anh.
Quốc tế hoá và bản địa hoá: việc của ai
Hai khái niệm hay bị dùng lẫn. Quốc tế hoá (internationalization, i18n) là chuẩn bị mã nguồn để có thể dịch: tách chữ ra khỏi mã, dùng thư viện định dạng ngày giờ và số theo vùng, chừa chỗ cho chữ dài ra. Bản địa hoá là đổ nội dung của một thị trường cụ thể vào cái khung đã chuẩn bị đó. Không quốc tế hoá trước thì bản địa hoá biến thành vá víu: người dịch nhận ảnh chụp, lập trình viên dán tay từng câu vào mã.
| Việc | Thuộc về | Nếu bỏ qua thì sao |
|---|---|---|
| Tách mọi chữ hiển thị ra tệp chuỗi, không viết cứng trong mã | Lập trình viên (quốc tế hoá) | Có những màn hình mãi còn tiếng Anh vì chữ nằm trong mã, người dịch không thấy |
| Dùng thư viện định dạng ngày, giờ, số, tiền theo vùng | Lập trình viên | Ngày 03/04 bị hiểu là 4 tháng 3 hay 3 tháng 4 tuỳ người đọc |
| Không ghép câu bằng cách nối các mảnh chữ | Lập trình viên | Người dịch không thể sắp lại trật tự từ cho đúng ngữ pháp tiếng đích |
| Hỗ trợ quy tắc số nhiều, giống, viết từ phải sang trái | Lập trình viên | Bản tiếng Nga, tiếng Ả Rập sai ngữ pháp hoặc vỡ bố cục |
| Ghi chú ngữ cảnh, giới hạn độ dài, ảnh chụp màn hình | Nhóm sản phẩm | Người dịch đoán nghĩa, sai ở những chữ ngắn nhất |
| Dịch, thống nhất thuật ngữ, giữ giọng văn | Người dịch, người biên tập | Ứng dụng đọc như dịch máy, thuật ngữ mỗi màn hình một kiểu |
| Kiểm thử ngôn ngữ trên bản chạy thật | Người dịch cùng người kiểm thử | Lỗi cắt chữ, sai ngữ cảnh chỉ lộ ra khi người dùng phàn nàn |
Điểm đáng nhớ: phần lớn lỗi bản dịch mà người dùng thấy trên ứng dụng không phải lỗi dịch mà là lỗi quốc tế hoá — câu bị ghép mảnh, số nhiều cứng, chỗ không đủ rộng. Khi đánh giá một bản địa hoá kém, hãy tách hai nhóm này trước khi kết luận người dịch yếu.
Những phần của một ứng dụng cần dịch
Khi ước lượng khối lượng, nhiều nhóm chỉ tính tệp chuỗi giao diện và bỏ sót một nửa. Danh sách dưới đây giúp bạn đếm đủ trước khi lên kế hoạch:
- Chuỗi giao diện: nút, menu, tiêu đề màn hình, nhãn ô nhập, chữ gợi ý trong ô trống, thông báo xác nhận, thông báo lỗi.
- Thông báo hệ thống gửi ra ngoài ứng dụng: thông báo đẩy, tin nhắn SMS, email giao dịch (xác nhận đơn, đặt lại mật khẩu, hoá đơn).
- Nội dung trên cửa hàng ứng dụng: tên, phụ đề, mô tả ngắn và dài, từ khoá, ghi chú phiên bản, chữ trên ảnh chụp màn hình quảng bá.
- Nội dung động lấy từ máy chủ: danh mục sản phẩm, gói cước, câu hỏi khảo sát, bài hướng dẫn trong ứng dụng — thường nằm trong cơ sở dữ liệu chứ không trong tệp chuỗi.
- Trang trợ giúp và hướng dẫn người dùng: câu hỏi thường gặp, bài hướng dẫn từng bước, video hướng dẫn có phụ đề.
- Văn bản pháp lý: điều khoản sử dụng, chính sách quyền riêng tư, nội dung xin quyền truy cập (camera, vị trí, danh bạ) — phần này nên có người hiểu luật nước đích đọc lại.
- Hình ảnh và âm thanh có chữ: ảnh minh hoạ màn hình chào, biểu tượng có chữ viết tắt, giọng đọc hướng dẫn, nhạc chờ có lời.
Nội dung động và văn bản pháp lý là hai phần hay bị bỏ quên nhất. Người dùng mở ứng dụng thấy giao diện tiếng Việt chỉnh tề nhưng danh sách gói dịch vụ vẫn tiếng Anh, hoặc hộp thoại xin quyền camera vẫn tiếng Anh vì nó nằm trong một tệp cấu hình riêng của hệ điều hành. Với iOS, chuỗi xin quyền nằm trong tệp khai báo của ứng dụng; với Android, nhiều chuỗi hệ thống do chính hệ điều hành dịch. Hỏi lập trình viên danh sách đầy đủ trước khi ký hợp đồng dịch.
Quy trình bảy bước từ mã nguồn đến bản phát hành
Quy trình dưới đây là khung chung, áp dụng được cho ứng dụng di động, phần mềm máy tính và ứng dụng web. Quy mô nhỏ có thể gộp bước, nhưng không nên bỏ bước nào.
- Rà quốc tế hoá: lập trình viên kiểm còn chữ viết cứng trong mã không, câu nào đang ghép mảnh, chỗ nào hiển thị ngày giờ hay tiền tệ bằng tay. Sửa ở bước này rẻ hơn nhiều so với sửa sau khi đã dịch.
- Xuất tệp chuỗi và gom ngữ cảnh: xuất theo định dạng gốc của nền tảng, kèm ghi chú cho chuỗi mơ hồ, giới hạn ký tự cho nút và ô hẹp, ảnh chụp màn hình gắn với khoá chuỗi.
- Lập bảng thuật ngữ và quy ước văn phong: chọn cách dịch cho các khái niệm cốt lõi của sản phẩm (ví dụ "workspace", "board", "credit"), chọn xưng hô, quy tắc viết hoa, có giữ tên tính năng bằng tiếng Anh hay không.
- Dịch và biên tập: người dịch làm trong công cụ hiển thị được ngữ cảnh và chặn sửa biến; người thứ hai đọc lại toàn bộ theo bảng thuật ngữ.
- Nhập lại và dựng bản thử: lập trình viên đưa tệp đã dịch vào, kiểm tra cú pháp tệp, dựng bản cài thử cho từng ngôn ngữ.
- Kiểm thử ngôn ngữ: người hiểu tiếng đích đi qua các màn hình trên thiết bị thật, ghi lỗi kèm ảnh chụp; lỗi dịch quay về người dịch, lỗi giao diện quay về lập trình viên.
- Phát hành và duy trì: cập nhật nội dung cửa hàng ứng dụng, theo dõi phản hồi của người dùng bản xứ, đưa chuỗi mới của các bản sau vào cùng dây chuyền.
Bước hay bị cắt nhất khi gấp là bước 6. Bỏ kiểm thử ngôn ngữ giống như in sách mà không đọc bản bông: chữ đúng hết vẫn có thể nằm sai chỗ. Nếu thời gian thật sự hẹp, hãy kiểm ít nhất các luồng có tiền và có dữ liệu cá nhân — đăng ký, thanh toán, xoá tài khoản — vì sai ở đó gây thiệt hại thật.
Ngữ cảnh quyết định chất lượng nhiều hơn tay nghề
Một quan sát lặp lại trong nghề: cùng một người dịch, cho xem ảnh chụp màn hình thì bản dịch tốt hẳn so với khi chỉ đưa bảng tính. Lý do đơn giản là phần lớn chuỗi giao diện ngắn hơn năm từ, mà chữ càng ngắn càng đa nghĩa. "Back" là Quay lại hay Mặt sau? "Post" là Đăng hay Bài viết? "Clear" là Xoá hết hay Rõ ràng? "Free" là Miễn phí hay Còn trống? Chỉ cần nhìn thấy chữ đó nằm trên một nút ở góc trên bên trái hay trong một ô trạng thái là hết đoán.
Ngữ cảnh có ba dạng, xếp theo mức hữu ích. Tốt nhất là ảnh chụp màn hình gắn với khoá chuỗi, để người dịch thấy chữ đứng cạnh chữ nào. Thứ hai là ghi chú của lập trình viên ngay trong tệp: "nhãn nút, tối đa 12 ký tự", "trạng thái của đơn hàng, không phải động từ", "{0} là tên người gửi". Thứ ba là tên khoá có nghĩa: khoá kiểu checkout.button.pay giúp nhiều hơn khoá kiểu string_1043.
Nếu ứng dụng chưa có sẵn những thứ này, đừng chờ đủ mới dịch. Cách thực tế là cho người dịch một bản cài thử để tự đi qua các màn hình, kèm một đầu mối trả lời câu hỏi trong ngày. Các câu hỏi người dịch đặt ra cũng chính là danh sách chỗ mơ hồ trong sản phẩm — nhiều nhóm phát hiện ra chính bản tiếng Anh của mình đang dùng hai chữ khác nhau cho cùng một tính năng nhờ những câu hỏi đó.
Khi ứng dụng cập nhật liên tục
Ứng dụng phát hành theo nhịp hai tuần thì không thể gom chuỗi mỗi quý một lần đem đi dịch. Cách làm phổ biến hiện nay gọi là bản địa hoá liên tục: tệp chuỗi nguồn được đồng bộ tự động sang nền tảng quản lý bản dịch mỗi khi lập trình viên thêm chữ mới, người dịch nhận từng đợt nhỏ, bản dịch quay về kho mã trước ngày đóng bản. Không cần công cụ đắt tiền; điều cốt lõi là có một nơi duy nhất chứa chuỗi và có người chịu trách nhiệm theo dõi.
Ba quy ước giúp dây chuyền này không đứt. Một là đóng băng chuỗi: ấn định một mốc trước ngày phát hành, sau mốc đó không thêm chuỗi mới trừ trường hợp khẩn, để người dịch có thời gian làm và kiểm. Hai là không sửa nghĩa mà giữ nguyên khoá: khi đổi nội dung một chuỗi nguồn, nên đổi khoá hoặc đánh dấu chuỗi cần dịch lại, nếu không bản dịch cũ sẽ nằm im dưới nghĩa mới. Ba là quy tắc dự phòng: chuỗi chưa dịch thì hiển thị tiếng gì — tiếng Anh, hay ẩn tính năng đó ở thị trường ấy cho tới khi dịch xong.
Với doanh nghiệp Việt Nam đưa ứng dụng ra nước ngoài, chiều ngược lại cũng cần tính: tiếng Việt thường là ngôn ngữ nguồn, nghĩa là chính đội viết nội dung tiếng Việt phải viết chuỗi rõ nghĩa, không dùng tiếng lóng nội bộ, không viết tắt kiểu "SP" cho sản phẩm. Một chuỗi nguồn mơ hồ sẽ nhân thành mơ hồ ở mọi ngôn ngữ đích.
Chuẩn bị gì khi gửi yêu cầu dịch ứng dụng
Bộ hồ sơ dưới đây giúp bên dịch báo được khối lượng, thời gian và rủi ro ngay từ đầu, thay vì phát hiện giữa chừng:
- Tệp chuỗi ở định dạng gốc (không chép ra Word), ghi rõ nền tảng: iOS, Android, web, máy tính.
- Ngôn ngữ nguồn, các ngôn ngữ đích, và biến thể cụ thể nếu có (tiếng Trung giản thể hay phồn thể, tiếng Bồ Đào Nha của Brazil hay của Bồ Đào Nha).
- Bản cài thử hoặc tài khoản thử, ảnh chụp các màn hình chính.
- Bảng thuật ngữ sẵn có, bản dịch cũ nếu đã từng dịch, hướng dẫn giọng văn thương hiệu.
- Danh sách phần ngoài tệp chuỗi: nội dung cửa hàng ứng dụng, email, thông báo đẩy, trang trợ giúp, văn bản pháp lý.
- Nhịp phát hành dự kiến và đầu mối kỹ thuật trả lời câu hỏi ngữ cảnh.
Dịch Hay nhận bản địa hoá ứng dụng theo đúng chuỗi việc trong bài: xem tệp, hỏi ngữ cảnh, thống nhất thuật ngữ trước khi dịch, và kiểm thử trên bản chạy thật. Nếu bạn đang chuẩn bị đưa ứng dụng sang thị trường mới hoặc đưa phần mềm nước ngoài vào Việt Nam, hãy gửi yêu cầu kèm danh sách trên trong mẫu đăng ký để được xem trước khối lượng.
Câu hỏi thường gặp
Ứng dụng nhỏ, vài trăm chuỗi, có cần quy trình đầy đủ như vậy không?
Không cần đầy đủ hình thức nhưng nên giữ đủ ý: vẫn cần ngữ cảnh, vẫn cần một người đọc lại và một lượt bấm thử trên máy thật. Với vài trăm chuỗi, các bước có thể gói trong vài ngày. Thứ duy nhất không nên bỏ là lượt kiểm trên thiết bị, vì lỗi cắt chữ và lỗi nghĩa ở nút ngắn chỉ lộ ra khi nhìn tận mắt.
Có nên dịch tên tính năng sang tiếng Việt không?
Tuỳ việc người dùng gọi tên nó thế nào ngoài đời. Tên tính năng mang tính thương hiệu thường giữ nguyên, kèm giải thích ở lần đầu xuất hiện. Tên mô tả chức năng thì nên dịch để người dùng hiểu ngay. Quan trọng nhất là quyết một lần, ghi vào bảng thuật ngữ và dùng thống nhất ở giao diện, trang trợ giúp và email.
Bản địa hoá có bao gồm đổi hình ảnh và màu sắc không?
Có thể, khi hình ảnh mang thông tin văn hoá: cử chỉ tay, trang phục, món ăn, hình mẫu gia đình, biểu tượng tiền tệ. Màu sắc hiếm khi phải đổi trong giao diện ứng dụng, nhưng ảnh minh hoạ màn hình chào và ảnh quảng bá trên cửa hàng ứng dụng nên được người bản xứ xem lại trước khi phát hành.
Người dịch có cần biết lập trình không?
Không cần viết được mã, nhưng cần đọc được cấu trúc tệp chuỗi, nhận ra biến, thẻ định dạng và ký tự thoát, biết vì sao không được xoá dấu ngoặc hay dấu phần trăm. Người dịch phần mềm có kinh nghiệm cũng biết đặt câu hỏi ngữ cảnh đúng chỗ, điều mà người dịch tài liệu giỏi chưa chắc quen.
Dịch xong rồi, bao lâu thì phải cập nhật?
Mỗi lần ứng dụng thêm hoặc sửa chữ. Không có chu kỳ cố định, nên cách an toàn là gắn việc dịch vào lịch phát hành: trước mỗi lần đóng bản, xuất danh sách chuỗi mới và chuỗi đã sửa, dịch và kiểm cùng lúc với kiểm thử chức năng. Để dồn lâu sẽ tốn công tìm lại ngữ cảnh.
Ứng dụng nội bộ cho nhân viên nước ngoài có cần bản địa hoá kỹ như ứng dụng bán ra thị trường không?
Mức độ trau chuốt văn phong có thể thấp hơn, nhưng độ chính xác ở thao tác quan trọng thì không được thấp hơn: chấm công, đăng ký nghỉ, quy trình an toàn, bảng lương. Nhân viên đọc sai một nút trong luồng đó gây hậu quả không kém khách hàng đọc sai một nút thanh toán.