Programmer's Diary

Sebuah diary mahasiswa Teknik Informatika.

Posts Tagged ‘Translator’

Membuat Aplikasi Translator pada Microsoft Word 2010 menggunakan VSTO 4.0

Posted by Alexander Rahardjo on March 18, 2011

Setelah membaca dan mencoba tutorial saya yang sebelumnya mengenai VSTO, sekarang saatnya kita mencoba sesuatu dengan VSTO ini ke tingkat yang lebih tinggi Smile. Pada tutorial kali ini kita akan mencoba bersama membuat sebuah kakas penerjemah atau add-ins untuk Microsoft Word 2010 dengan menggunakan VSTO dan nama aplikasi kali ini saya namakan WordTranslator dimana aplikasi ini digunakan untuk melakukan translasi dalam Microsoft Word 2010 dan aplikasi ini menggunakan layanan yang berasal dari Google dan Bing sebagai translator.

Sebelum melakukan pembuatan aplikasi ini berikut adalah kakas dan library yang anda butuhkan dalam pengembangan aplikasi ini harus telah tersedia dalam komputer anda:

  1. Microsoft Visual Studio 2010
  2. Microsoft Office 2010
  3. Google Translate API (versi yang saya gunakan pada tutorial ini adalah 3.0)
  4. Mendaftarkan diri di http://www.bing.com/developers/appids.aspx untuk mendapatkan appID

Setelah itu, berikut adalah langkah-langkah pembuatan aplikasi:

1. Buka Visual Studio 2010 anda.

2. Buat sebuah project baru, pilih office, kemudian pilih Word 2010 Add-in, lalu tuliskan nama project yang anda kehendaki, di sini saya   menuliskan “WordTranslator2010”, lalu tekan tombol “OK”.

3. Kemudian tambahkan User Control pada project anda dengan cara klik kanan pada project anda lalu pilih Add User Control, maka akan tampil jendela berikut. Isi nama User Control kemudian tekan tombol “OK”.

image_thumb1_thumb

4. Kemudian tambahkan Ribbon pada project anda dengan cara klik kanan pada project anda lalu pilih Add New Item, maka akan tampil jendela berikut. Isi nama Ribbon kemudian tekan tombol “OK”.

image_thumb4_thumb

5. Kemudian pastikan bahwa 2 item tadi telah berada dalam project anda.

6. Tambahkan kontrol ToggleButton ke Ribbon anda melalui toolbox bagian Office Ribbon Controls. Anda dapat mengganti nama dari Ribbon anda yang semula group1, saya mengubahnya menjadi “WordTranslator”.

7. Ubah label ToggleButton tadi melalui jendela properties, pada project saya, saya mengubahnya menjadi “WordTranslator 2010”.

8. Lalu Ribbon anda akan tampak seperti gambar berikut.

image

9. Kemudian masukkan beberapa kontrol pada User Control dan ubah propertiesnya sesuai kebutuhan anda.

10. Berikut adalah tampilan User Control buatan saya.

image

11. Setelah itu lakukan add reference kemudian pilih library GoogleTranslate yang telah anda unduh tadi, dll yang digunakan adalah: GoogleTranslateAPI.dll.

12. Kemudian lakukan add service renference dengan mengisikan web service berikut http://api.microsofttranslator.com/V2/Soap.svc.

13. Buat sebuah App.config dengan cara Add New Item lalu isikan dengan konfigurasi sebagai berikut:

image

14. Setelah itu masukkan kode berikut pada User Control, dengan melakukan klik 2x setiap kontrol.

    public partial class WTUserControl : UserControl
    {
        List _srcGoogle;
        List _destGoogle;
        List _srcBing;
        List _destBing;
        List _srcBingName;
        List _destBingName;
        BingTranslatorService.LanguageServiceClient _proxy;
        TranslateClient _client;

        public WTUserControl()
        {
            InitializeComponent();
            InitGoogleTranslate();
            InitBingTranslate();
        }

        private void InitGoogleTranslate()
        {
            _srcGoogle = Google.API.Translate.Language.TranslatableCollection.Select(a => a.ToString()).ToList();
            _destGoogle = Google.API.Translate.Language.TranslatableCollection.Select(a => a.ToString()).ToList();
        }

        private void InitBingTranslate()
        {
            _proxy = new BingTranslatorService.LanguageServiceClient();
            string[] languageCodes = _proxy.GetLanguagesForTranslate(AppId);
            _srcBing = languageCodes.ToList();
            _destBing = languageCodes.ToList();
            _srcBingName = _proxy.GetLanguageNames(AppId, "en", languageCodes).ToList();
            _destBingName = _proxy.GetLanguageNames(AppId, "en", languageCodes).ToList();

        }

        private void btnTranslate_Click(object sender, EventArgs e)
        {
            string text;
            string src;
            string dest;
            string srcName;
            string destName;
            string translated;

            //get text from active document
            text = Globals.ThisAddIn.Application.ActiveDocument.Content.Text;

            try
            {
                if (rbGoogle.Checked)  //user checked Google
                {
                    src = _srcGoogle[cmbSrcLang.SelectedIndex];
                    dest = _destGoogle[cmbDestLang.SelectedIndex];
                    label3.Visible = true;
                    label3.Text = src + " to " + dest;
                    _client = new TranslateClient("");
                    translated = _client.Translate(text, GetLang(src),GetLang(dest));
                    txtResult.Text = translated;
                }
                else if (rbBing.Checked)  //user checked Bing
                {
                    src = _srcBing[cmbSrcLang.SelectedIndex];
                    dest = _destBing[cmbDestLang.SelectedIndex];
                    srcName = _srcBingName[cmbSrcLang.SelectedIndex];
                    destName = _destBingName[cmbDestLang.SelectedIndex];
                    label3.Visible = true;
                    label3.Text = srcName + " to " + destName;
                    translated = _proxy.Translate(AppId, text, src, dest,"","");
                    txtResult.Text = translated;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error, " + ex.Message);
            }
        }

        private void FillLanguageGoogle()
        {
            cmbSrcLang.Items.Clear();
            cmbSrcLang.Items.AddRange(_srcGoogle.ToArray());
            cmbSrcLang.SelectedIndex = 0;

            cmbDestLang.Items.Clear();
            cmbDestLang.Items.AddRange(_destGoogle.ToArray());
            cmbDestLang.SelectedIndex = 0;

        }

        private void FillLanguageBing()
        {
            cmbSrcLang.Items.Clear();
            cmbSrcLang.Items.AddRange(_srcBingName.ToArray());
            cmbSrcLang.SelectedIndex = 0;

            cmbDestLang.Items.Clear();
            cmbDestLang.Items.AddRange(_destBingName.ToArray());
            cmbDestLang.SelectedIndex = 0;
        }

        private void rbGoogle_CheckedChanged(object sender, EventArgs e)
        {
            FillLanguageGoogle();
        }

        private void rbBing_CheckedChanged(object sender, EventArgs e)
        {
            FillLanguageBing();
        }

        public Language GetLang(string lang)
        {
            foreach (Language language in Google.API.Translate.Language.TranslatableCollection)
            {
                if (language.ToString().Equals(lang))
                {
                    return language;
                }
            }
            return Language.English;
        }

        private static string AppId
        {
            get { return ConfigurationManager.AppSettings["appID"]; }
        }

        private void btnDetect_Click(object sender, EventArgs e)
        {
            string text = Globals.ThisAddIn.Application.ActiveDocument.Content.Text;
            if (rbGoogle.Checked)
            {
                bool reliable;
                double confidence;
                _client = new TranslateClient("");
                MessageBox.Show("Your current language is "+_client.Detect(text, out reliable, out confidence));
            }
            else if (rbBing.Checked)
            {
                MessageBox.Show(_proxy.Detect(AppId,text));
            }
        }
    }

15. Tambahkan kode berikut pada ThisAddIn.cs.


    public partial class ThisAddIn
    {
        Microsoft.Office.Tools.CustomTaskPane _ctp;
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            _ctp = Globals.ThisAddIn.CustomTaskPanes.Add(new WTUserControl(), "WordTranslator");
        }

        public void ShowWordTranslator()
        {
            _ctp.Visible = true;
        }

        public void HideWordTranslator()
        {
            _ctp.Visible = false;
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        ///
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        ///
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }

16. Kemudian tambahkan kode berikut pada Ribbon dengan melakukan klik 2x pada ToggleButton.

        private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
        {
            if (toggleButton1.Checked)
            {
                Globals.ThisAddIn.ShowWordTranslator();
            }
            else
            {
                Globals.ThisAddIn.HideWordTranslator();
            }
        }

17. Kemudian jalankan program anda dengan menekan tombol F5. Berikut adalah tampilan aplikasi:

image

Demikian tutorial dari saya kali ini yang mengaplikasikan 2 buah API yang salah satunya berupa web service. Semoga bermanfaat Smile.

Posted in Tutorial, VSTO | Tagged: , , , , , , | 1 Comment »

 
%d bloggers like this: