Dịch thuật đa ngôn ngữ (dựa vào Google Translate) (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,954
Từ bài viết này:

http://www.giaiphapexcel.com/forum/...a-code-vba-Translate-thành-Function!&p=480229
Mình chợt có ý nghĩ tạo thành 1 ứng dụng để dịch thuật đa ngôn ngữ trên Excel (thông qua 1 UserForm)

Capture.JPG




























Thấy cũng đơn giản...
Ai có hứng thú hãy mang về phát triển thêm
(yêu cầu: máy phải kết nối Internet)
------------------------------------------
Tôi thường hay đọc các tài liệu và Help VBA bằng tiếng Anh nhưng trình độ Anh ngữ còn hạn chế nên cứ phải vào Google Translate để dịch... Giờ nếu dùng cái này thì chỉ việc Save nó thành một Add-In rồi cứ ngay trên Excel mà dịch luôn, khỏi cần nhảy qua nhảy lại cho mất công


Capture2.JPG













------------------------------------------------------
Mình gửi thêm bản mới (đã sửa lại theo anh siwtom)... Các bạn tải file Google Translator_4.xlsm nhé
------------------------------------------------------
Phiên bản mới nhất (cũng theo code của anh siwtom): File Translator_5.xlsm
 

File đính kèm

Lần chỉnh sửa cuối:
máy em đã chạy ok rồi anh ơi. Cảm ơn sự nhiệt huyết của các anh.có điều cái thằng google translate nó dịch tầm bậy.thậm chí thua translate trong word nữa. Anh có thể chuyển qua anh bill dịch dùm được không.MÁY EM DUNG W8 32 BIT

Tất nhiên google đâu phải là người. Nhiều khi nó dịch ra cái rất buồn cười. Chỉ để tham khảo thôi. Nhiều khi giúp ta hiểu được ý của một đoạn văn bản. Mà trong dịch thuật thì theo tôi nghĩa là chính. Cùng một đoạn văn bản đưa cho 10 biên dịch thì tôi tin là có thể có tới 10 phiên bản khác nhau về câu từ, độ chính xác.
Nhưng nói không bằng Translate của WORD thì tôi e rằng không đúng. Tôi không dịch bằng WORD bao giờ nhưng vài phút trước đây tôi ngó qua WORD của tôi (2007) thì thấy: ngôn ngữ vào là Arabic, English, French, Spanish. Nếu đầu vào là English thì ra chỉ là French, Spanish. Như vậy là rất hạn chế. Tôi thử viếi chơi "how are you" thì không có kết quả dịch.
 
Upvote 0
À em quên mất.dịch tiếng việt trong office chỉ có từ office 2010 trở đi hay sao âý.em cũng không để ý kỹ.có 1 lần viết mail tự nhiên thấy 1 vài từ nó đỏ lè dưới chân.bôi đen từ đó thấy nó hiên ra 1 số từ thay thế thì ra viết sai chính tả.sau đó thấy chữ translate bèn kiểm tra xem nó dịch có đúng không.kết quả thấy 60% đúng.đem câu đó đưa cho anh google thấy buồn cười làm sao.
 
Upvote 0
Dịch thuật thì nó vẫn dịch, mặc dù dịch chưa sát nghĩa, dịch "chay", dịch "thô", tuy nhiên có một số ngôn ngữ nếu máy nào chưa cài thì sẽ không được hiển thị hoặc hiển thị các ô vuông (như tiếng Ả rập, Hàn quốc ...).
 
Lần chỉnh sửa cuối:
Upvote 0
Không ngờ cái code nhỏ xíu này cũng khiến các bạn quan tâm nhiều đến thế ---> Vô cùng cảm ơn!
Thật lòng mà nói thì tôi viết ứng dụng này để phục vụ nhu cầu cá nhân là chính (tra help, đọc không kịp hiểu hết nên nhờ máy dịch hộ)
Gửi lên đây cũng chỉ với mục đích: Ai có nhu cầu giống mình cứ việc mang về mà xài, cải tiến tùy thích
-----------------
Cảm ơn các bạn đã quan tâm
 
Upvote 0
Như thế là IE7 có vấn đề. Thiên hạ người ta biết từ lâu, chỉ có mình bây giờ mới "khám phá" ra.
Được cái an ủi là hiếm có người bây giờ dùng IE7. Vì nhiều trang web không chịu mở, không mở hoàn chỉnh nếu là IE7. Thậm chí IE8.

Thế mới thấy bác Bill làm ăn cũng tương đối "chắp vá" đấy chứ. IE cũ thì bị những lỗi chẳng ai có, chạy trên Win7 64-bit thì IE lại là 32-bit,... Thực ra vì code lôi IE vào nên nó mới "sống" lại chứ lâu rồi toàn dùng FF.
 
Lần chỉnh sửa cuối:
Upvote 0
Thôi đúng rồi, cẩn thận quá vẫn hơn. Chắc chắn IE7 có vấn đề về READYSTATE_COMPLETE
Nói ngắn gọn thì thực ra document vẫn chưa được load hoàn chỉnh mà code đã "cố" đọc nội dung (.Document.getElementById("result_box").innerText) nên kết quả là chuỗi rỗng.

Vậy thì tôi đề nghị 2 hướng:

1. Sau Do Until .ReadyState = 4: DoEvents: Loop ta thêm chút chờ đợi: Application.Wait (Now + TimeValue("0:00:5"))

2. Chờ đợi 5 giây như ở trên không biết có là cách tốt hay không. Có khi ít quá (kết cục là thất bại) mà có khi nhiều quá (chờ phí công). Tôi đề nghị chờ tối đa 10 giây. Tức nếu sau 1, 2, 3 giây mà đã có kết quả thì không chờ thêm nữa, còn không thì chờ tiếp nhưng tối đa là 10 giây. Sau 10 giây mà vẫn chưa có kết quả thì cũng dọn đồ chơi luôn.

Mã:
    Do Until .ReadyState = 4: DoEvents: Loop
    Do While count < 10 And result_data = ""
        Application.Wait (Now + TimeValue("0:00:1"))
        result_data = .Document.getElementById("result_box").innerText
        count = count + 1
        Debug.Print count
    Loop

Tôi đã sửa lại code hàm Translate theo code trên.

Các bạn Lê Duy Thương, Nguyễn Duy Tuân, Crystal Rose, Good-Luck đã "kêu ca" thì bây giờ đề nghị thử lại, thậm chí với IE7, và cho biết kết quả nhé.
Hihi..nhóc tải file này về và sử dụng bình thường rồi ạ. Cám ơn hai anh ạ.
 
Upvote 0
Không ngờ cái code nhỏ xíu này cũng khiến các bạn quan tâm nhiều đến thế ---> Vô cùng cảm ơn!
Thật lòng mà nói thì tôi viết ứng dụng này để phục vụ nhu cầu cá nhân là chính (tra help, đọc không kịp hiểu hết nên nhờ máy dịch hộ)
Gửi lên đây cũng chỉ với mục đích: Ai có nhu cầu giống mình cứ việc mang về mà xài, cải tiến tùy thích
-----------------
Cảm ơn các bạn đã quan tâm

Bây giờ mình muốn cải tiến một bước nữa là thêm một Combobox để lưu lại những gì đã tra cứu, kể cả khi thoát Form, để nếu cần xem lại mà không phải chờ đợi Internet nữa. Chỉ khi nào thoát Excle thì danh sách m[í bị xoá. Bạn nào có hứng thú thì nghiên cứu cùng mình xem.
 
Upvote 0
Bây giờ mình muốn cải tiến một bước nữa là thêm một Combobox để lưu lại những gì đã tra cứu, kể cả khi thoát Form, để nếu cần xem lại mà không phải chờ đợi Internet nữa. Chỉ khi nào thoát Excle thì danh sách m[í bị xoá. Bạn nào có hứng thú thì nghiên cứu cùng mình xem.

Em nghĩ là lưu trong sheet luôn, combobox thoát ra rồi thì không lưu gì nữa cả. Nếu muốn những từ đã tra cứu thì sau khi load form thì up lên combobox đó.
 
Upvote 0
Upvote 0
Anh lưu bằng cách nào? Còn em thì chỉ lưu trong sheet mà thôi.

Ý Nghĩa là sao. Không có cách hay là thích lưu trên sheet?
Lưu trên Sheet cũng có cái hay là đơn giản, có thể tạo thành một sổ tay dạng như từ điển các từ thông dụng. Khi mở Form thì nạp từ điển vào combobox luôn. Nhưng nếu muốn tạo File add-in thì sao?
Sheet ẩn của add-ins có lưu được không nhỉ? mình chưa thử.
 
Upvote 0
Ý Nghĩa là sao. Không có cách hay là thích lưu trên sheet?
Lưu trên Sheet cũng có cái hay là đơn giản, có thể tạo thành một sổ tay dạng như từ điển các từ thông dụng. Khi mở Form thì nạp từ điển vào combobox luôn. Nhưng nếu muốn tạo File add-in thì sao?
Sheet ẩn của add-ins có lưu được không nhỉ? mình chưa thử.

Anh lưu trên sheet, hay lưu trên sheet của addins cũng đều như nhau, nhưng addin không thể lưu trực tiếp được, trừ khi anh chỉnh sửa trong môi trường VBA và lưu trên đó.
 
Upvote 0
Sheet ẩn của add-ins có lưu được không nhỉ? mình chưa thử.
Đương nhiên là lưu được. Anh thử thì biết liền chứ gì (gọi đúng tên Workbook, tên sheet, vùng dữ liệu là được rồi)
Anh lưu trên sheet, hay lưu trên sheet của addins cũng đều như nhau, nhưng addin không thể lưu trực tiếp được, trừ khi anh chỉnh sửa trong môi trường VBA và lưu trên đó.
Sao mà không được chứ... thử code này:
Mã:
Sub Test()
  Dim Text As String
  Text = Application.InputBox("nhap tu", , , , , , , 2)
  ThisWorkbook.Sheets(1).Range("A1").Value = Text
End Sub
Sub Auto_Close()
  ThisWorkbook.Save
End Sub
Code cho vào 1 module rồi lưu thành Add-In... Xong thí nghiệm xem nó có lưu được gì không
 
Lần chỉnh sửa cuối:
Upvote 0
Bây giờ mình muốn cải tiến một bước nữa là thêm một Combobox để lưu lại những gì đã tra cứu, kể cả khi thoát Form, để nếu cần xem lại mà không phải chờ đợi Internet nữa. Chỉ khi nào thoát Excle thì danh sách m[í bị xoá. Bạn nào có hứng thú thì nghiên cứu cùng mình xem.
nếu đã cải tiến thỉ cảm phiền cải tiến thêm cái này nữa các anh nhé: nếu mình cảm thấy nó dịch chưa đúng nghĩa của câu mình có thể chọn từ đó tìm nghĩa khác, nếu từ đó có nhiều nghĩa , không biết có khó không ???
tu dien.jpg
 
Upvote 0
Mình đã cải tiến thêm cho tiện dụng, thêm chức năng lưu lại các từ đã tra để khi cần lấy lại cho nhanh mà không cần đến Internet và một nút (Replace) để sửa lại nghĩa tùy thích.
Tặng các bạn và mong các bạn góp ý để hoàn thiện hơn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xin góp ý nhỏ. Nếu đây là sản phẩm bạn viết từ đầu thì dùng từ "tặng" nghe chuẩn hơn. Bạn đang cải tiến ứng dụng của anh NDU mà.

Bài này mình cũng nói là mình cải tiến thêm thôi mà, còn bài #19 mình cũng đã nói xin mạn phép cải tiến và ndu đã đồng ý. Ai đọc topic này từ đầu cũng hiểu thôi. Nếu mình "tặng" trong topic mới thì đúng là có ý xấu.
Mình cũng vì kiệm lời nên mới nói ngắn gọn vậy, không giải thích kỹ hơn, ngoài ra không có ý gì hết. Mong bạn hiểu và mình sẽ rút kinh nghiệm.
Vậy theo bạn phải viết như thế nào cho chuẩn?
 
Upvote 0
Bài này mình cũng nói là mình cải tiến thêm thôi mà, còn bài #19 mình cũng đã nói xin mạn phép cải tiến và ndu đã đồng ý. Ai đọc topic này từ đầu cũng hiểu thôi. Nếu mình "tặng" trong topic mới thì đúng là có ý xấu.
Mình cũng vì kiệm lời nên mới nói ngắn gọn vậy, không giải thích kỹ hơn, ngoài ra không có ý gì hết. Mong bạn hiểu và mình sẽ rút kinh nghiệm.
Vậy theo bạn phải viết như thế nào cho chuẩn?

Bạn có vẻ quan tâm tới vấn đề này. Vậy thì bạn xem xet luôn code dưới đây.

Nếu bạn có thời gian thì tìm với google, từ khóa ví dụ là
http://translate.google.com/translate_a/t?client=t&text=

Tôi chỉ tìm thấy các code dùng các ngôn ngữ khác và không hỗ trợ nguồn unicode. Tức truyền trực tiếp văn bản Việt là dữ liệu nguồn cần dịch thì không được. Trong URL "http://..." thì phải mã các ký tự.
 

File đính kèm

Upvote 0
Bạn có vẻ quan tâm tới vấn đề này. Vậy thì bạn xem xet luôn code dưới đây.

Nếu bạn có thời gian thì tìm với google, từ khóa ví dụ là
http://translate.google.com/translate_a/t?client=t&text=

Tôi chỉ tìm thấy các code dùng các ngôn ngữ khác và không hỗ trợ nguồn unicode. Tức truyền trực tiếp văn bản Việt là dữ liệu nguồn cần dịch thì không được. Trong URL "http://..." thì phải mã các ký tự.

Đã test, quả nhiên kỳ diệu... Mọi thứ đã gõ sẽ được lưu ở file translatetext.txt rồi cứ thế mà load lên... Vậy nên dù không có internet nhưng với những từ đã tra trước đó thì chương trình vẫn dịch được bình thường
Hay!
 
Upvote 0
Đã test, quả nhiên kỳ diệu... Mọi thứ đã gõ sẽ được lưu ở file translatetext.txt rồi cứ thế mà load lên... Vậy nên dù không có internet nhưng với những từ đã tra trước đó thì chương trình vẫn dịch được bình thường
Hay!

Tôi không hiểu ý lắm. Mình dùng google dịch thì phải có internet chứ?
 
Upvote 0
Tôi không hiểu ý lắm. Mình dùng google dịch thì phải có internet chứ?

Em chẳng biết nữa, nhưng em thí nghiệm thế này:
Bước 1
- Mở Internet
- Gõ từ "Tôi đi làm", dịch từ Việt sang Anh, kết quả: "I go to work"
- Gõ từ "Tôi đi học", dịch từ Việt sang Anh, kết quả: "I go to school"

Bước 2
- Tắt Internet
- Gõ từ "Tôi đi làm", dịch từ Việt sang Anh, vẫn ra kết quả: "I go to work"
- Gõ từ "Tôi đi học", dịch từ Việt sang Anh, vẫn ra kết quả: "I go to school"

Ở bước 2, dù không có internet như nó vẫn dịch được! Anh nghĩ sao?
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom