프로젝트/번역 나래이터 [WPF]

Kakao 번역 API와 .NET 음성 Speech를 이용한 번역 나래이터 만들기 4. 최종 번역 나래이터 구현[ WPF]

언휴 2024. 1. 10. 09:17

유튜브 동영상 강의

번역 나래이터 구현

화면 배치

배치 1단계
배치 1단계
배치 2단계
배치 2단계

MainWindow.xaml.cs 소스 코드

using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using WrapKakaoLib;
using WrapSpeechLib;

namespace 번역_나래이터_v0._1
{
    ///
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btn_speek_Click(object sender, RoutedEventArgs e)
        {
            Grid grid = lbox_narbut.Items[0] as Grid;
            if(grid == null)
            {
                return;
            }
            Narrator narrator = grid.Tag as Narrator;
            narrator.SpeakAsync(tbox_src.Text);
        }

        private void btn_translate_Click(object sender, RoutedEventArgs e)
        {
            string result = KakaoTransAPI.Translate(tbox_src.Text);
            tbl_trnas.Text = result;
        }

        private void btn_speek2_Click(object sender, RoutedEventArgs e)
        {
            Grid grid = lbox_narbut.Items[1] as Grid;
            if(grid == null)
            {
                return;
            }
            Narrator narrator = grid.Tag as Narrator;
            narrator.SpeakAsync(tbox_src.Text);
        }

        private void btn_all_Click(object sender, RoutedEventArgs e)
        {
            Grid grid = lbox_narbut.Items[0] as Grid;
            if(grid == null)
            {
                return;
            }
            Narrator narrator = grid.Tag as Narrator;
            narrator.SpeakAsync(tbox_src.Text);

            string result = KakaoTransAPI.Translate(tbox_src.Text);
            tbl_trnas.Text = result;

            grid = lbox_narbut.Items[1] as Grid;
            if (grid == null)
            {
                return;
            }
            Narrator narrator2 = grid.Tag as Narrator;
            narrator2.SpeakAsync(tbox_src.Text);
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            List narrators = Narrator.Narrators;
            Grid grid;
            ColumnDefinition cd;
            TextBlock tb_bar;
            Button button;
            foreach(Narrator narrator in narrators)
            {
                grid = new Grid();
                grid.Width = lbox_narbut.ActualWidth - 20;
                cd = new ColumnDefinition();
                cd.Width = new GridLength(5, GridUnitType.Star);
                grid.ColumnDefinitions.Add(cd);
                cd = new ColumnDefinition();
                cd.Width = new GridLength(1, GridUnitType.Star);
                grid.ColumnDefinitions.Add(cd);

                tb_bar = new TextBlock();
                tb_bar.Text = narrator.Name;
                grid.Children.Add(tb_bar);
                button = new Button();
                button.Tag = narrator;
                button.Content = "소개하기";
                button.Click += Button_Click;
                grid.Children.Add(button);
                Grid.SetColumn(button, 1);
                lbox_narbut.Items.Add(grid);
                grid.Tag = narrator;
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Button button = sender as Button;
            if(button == null)
            {
                return;
            }
            Narrator narrator = button.Tag as Narrator;
            if(narrator == null)
            {
                return;
            }
            narrator.IntroduceAsync();
        }
    }
}