I.Introduction
– Bing là một công cụ tìm kiếm được Mirosoft phát triển, gần đây Bing còn được hổ trợ cả tính năng Translator cho nhiều ngôn ngữ.
– Trong bài này mình xin chia sẻ cách sử dụng Bing Translator để phát triển một ứng dụng có thể Translate từ ngôn ngữ chỉ định, và có thể đọc với những Text đầu vào.
II.Fundamental
– Để sử dụng Bing Service trước tiên chúng ta phải có App ID, các bạn vào http://www.bing.com/developers/ để đăng ký 1 APP ID.
– Tiếp theo chúng ta tạo một Windows Phone Application Project và đặt một biến cục bộ là :
1: public readonly String App_ID = "Your_App_ID";
– Kế tiếp là chọn phải chuột vào References-> Add Service References :
– Sau đó paste đường link của Bing Translator service: http://api.microsofttranslator.com/V2/Soap.svc vào thanh Address –> chọn go –>đặt tên ở namespace là BingService –> chọn OK:
– Sau khi add Service vào thì các bạn sẽ thấy có một thư mục mới của hệ thống sinh ra là Service References và trong đó có BingService như hình phía dưới :
– Việc còn lại là sử dụng các phương thức trong BingService
III. Advanced
– Bây giờ công việc tiếp theo của chúng ta là tạo một tao diện đơn giản và sử dụng Service, về phần giao diện thì các bạn có thể tự tạo theo ý mình để thỏa thông tin đầu vào là Nguôn ngữ nguồn(From) –> và ngôn ngữ bạn muốn translate sang(To) , và tất nhiên là ko thể thiếu Text đầu vào.
– Một số phương thức thường dùng trong Bing Translator Service như :
- Translate : phương thức dịch
- GetLanguagesForTranslate: phương thức lấy thông tin ngôn ngữ ex: Vi (Việt Nam), En ….
- GetLanguageNames: lấy tên nước tương ứng với ngôn ngữ
- Speak: Đọc từ
– Khi bạn gọi các phương thức trên bằng asynchronous thì kết quả sẽ trả về sự kiên Completed tương ướng với tên sự kiện.
- – chúng ta khai báo cục bộ một biến LanguageServiceClient để sử dụng :
1: LanguageServiceClient ws = new LanguageServiceClient();
– Bây giờ trong Contructor MainPage() chúng ta khai báo các sự kiện Completed của các phương thức cần thiết :
1: ws.TranslateCompleted += ws_TranslateCompleted;
2: ws.GetLanguagesForTranslateCompleted += ws_GetLanguagesForTranslateCompleted;
3: ws.GetLanguageNamesCompleted += ws_GetLanguageNamesCompleted;
4: ws.SpeakCompleted += ws_SpeakCompleted;
các phương thức tương ứng với lời gọi sự kiện phía trên:
1: void ws_TranslateCompleted(object sender, TranslateCompletedEventArgs e)
2: {
3: MessageBox.Show(e.Result);
4: lblMean.Text = "Mean: \n" + e.Result;
5: Meaning = e.Result;
6: }
1: void ws_GetLanguageNamesCompleted(object sender, GetLanguageNamesCompletedEventArgs e)
2: {
3: _Name = new List<string>();
4: _Name = e.Result.ToList();
5: LoadLanguage();
6: SetLanguageData();
7: WriteLanguageToXML();
8: }
1: void ws_GetLanguagesForTranslateCompleted(object sender, GetLanguagesForTranslateCompletedEventArgs e)
2: {
3: _Code = new List<string>();
4: _Code = e.Result.ToList();
5: ws.GetLanguageNamesAsync(App_ID, "en", e.Result);
6: }
1: void ws_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
2: {
3: WebClient client = new WebClient();
4: client.OpenReadCompleted += ((s, args) =>
5: {
6: SoundEffect Sound = SoundEffect.FromStream(args.Result);
7: Sound.Play();
8: });
9: client.OpenReadAsync(new Uri(e.Result));
10: Timer.Stop();
11: }
– Các sự kiện Competed trên sẽ được kích hoạt khi bạn gọi phương thức asynchronous tương ứng của nó, sau đây mình sẽ gọi phương thức TranslateAsync khi click vào một Button :
1: private void btnTranslat_Click(object sender, EventArgs e)
2: {
3: if (!String.IsNullOrEmpty(txtWord.Text))
4: {
5: //From = lpkFrom.SelectedItem as Language;
6: //To = lpkTo.SelectedItem as Language;
7: ws.TranslateAsync(App_ID, "Your Words", "En", "Vi", null, null);
8: }
9: else
10: {
11: MessageBox.Show(":) Please enter your word");
12: txtWord.Focus();
13: }
14: }
– Và sau khi gọi phương thức Async thì thông tin sẽ được gửi lên WebService và kế quả sẽ được trả về thông qua ws_TranslateCompleted, tương tự với các phương thức :
- GetLanguagesForTranslate
- GetLanguageNames
– Đối với phương thức Speek thì có khác một chút, chúng ta phải sử dụng một DispatcherTimer thì mới có thể đọc. các bạn khai báo một biến cục bộ là :
1: DispatcherTimer Timer = new DispatcherTimer();
- – Tiếp theo các bạn vào MainPage() để khai báo sự kiện Tick cho nó , và sử lý sự kiện Tick như sau :
1: void Timer_Tick(object sender, EventArgs e)
2: {
3: FrameworkDispatcher.Update();
4: }
– Tiếp theo là chúng ta tạo một Phương thức Speek để gọi phương thức SpeekAsync :
1: private void Speak(String Text,String Lang)
2: {
3: ws.SpeakAsync(this.App_ID, Text, Lang, "audio/wav", null);
4: Timer.Start();
5: }
– Tiếp theo là xử lý việc nhận thông tin từ vừa được gửi cùng với Ngôn ngữ ở phía Phone lên Service :
1: void ws_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
2: {
3: WebClient client = new WebClient();
4: client.OpenReadCompleted += ((s, args) =>
5: {
6: SoundEffect Sound = SoundEffect.FromStream(args.Result);
7: Sound.Play();
8: });
9: client.OpenReadAsync(new Uri(e.Result));
10: Timer.Stop();
11: }
– Bây giờ chúng ta đã có thể dùng phương thức Speek ở bất cứ nơi nào mà chúng ta muốn :
1: private void imgPlay_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
2: {
3: if(!String.IsNullOrEmpty(txtWord.Text))
4: Speak(txtWord.Text, From.Code);
5: }
– Công việc cuối cùng là chạy ứng dụng xem kết quả :
Hy vọng bài viết sẽ mang đến thông tin hữu ích cho các bạn
Thanks for reading !
/*It’s time for Windows Phone*/