2018년 7월 2일 월요일

엑셀 데이터를 이용한 단어 연습기 만들기 (C# 소스, 프로그램 배포 포함)

오랜만에 돌아온 C# 이야기는 최근 일본어를 공부할때 단어 암기에 도움이 되기 위해 만든 단어 연습기에 대한 이야기 입니다.

처음에 일본어 한자를 외우기 위해서 엑셀에다 작업을 했었는데요.


이렇게 엑셀에다 단어의 한자, 뜻, 발음, 종류, 난이도 정도를


모르는 단어 위주로 6000여개를 작성하곤


처음엔 이런식으로 연습을 했는데 이게 너무 불편하고 느려서 만들게 되었습니다.


(완성된 단어 연습기 모습)

단어 연습기는 연습할 단어가 들어있는 엑셀 파일을 선택하면 그중에서 랜덤으로 한 단어를 표시하고 뜻 보기를 클릭하면 한글 뜻과 발음이 보이고, 안다나 모른다 버튼을 클릭하면 다음 단어로 넘어가는 형식입니다.

그리고 아래부분에는 현재 단어를 쉽게 사전에 검색할 수 있도록 단어를 스크립트로 제공하고, 실행되고 몇번째 단어를 보고있는지 정보와 단어를 알고 있는 비율이 어느정도인지에 대한 정보도 담아 연습이 좀 더 재미있게 만들었습니다 ^^

단어 하나하나 버튼으로 클릭하다보니 손가락이 아파서 아래 텍스트 박스에 커서를 둔 다음 키보드 방향키를 이용해 왼쪽 방향키는 안다 버튼을, 오른쪽 방향키는 모른다 버튼을, 아래 방향키는 뜻보기 버튼을 누르는 기능을 추가하여 무진장 빠른 단어 연습 효과를 보이게 되었습니다.

(단어연습기를 테스트 중인 영상)
위 영상은 단어 연습기를 실제로 사용하는걸 찍은 영상인데요.

보시다시피 처음에 실행되면 파일 찾기 버튼을 클릭해 엑셀 파일을 찾고, 엑셀 파일이 로드 된 뒤론 단어 암기를 연습하시면 됩니다.

단어 외우는건 반복이 중요함을 보여주듯 저도 대략 몰랐던 6000여개의 한자 단어들을 매일 2000개씩 보면서 한 달쯤 하니깐 정답 확률이 85%정도에 도달한 상태입니다.

그동안은 혼자 공부 하는동안 사용하며 기능을 하나씩 올리던 녀석인데 혹시 다른분께도 쓰임을 받지 않을까 싶어서 이렇게 작성하게 되었습니다 ^^

귀엽게 봐주세요 ㅎㅎ

(## 2019.06.20 다운로드 링크의 일부분이 지워져 있어서 링크 수정을 했습니다.)
단어 연습기 실행파일 = 다운로드
한자 엑셀 파일 = 다운로드

제 구글 드라이버 링크이니 악성 코드나 광고 낚시 링크가 아닙니다.

단어연습기의 공급자가 빠져서 SmartScreen에서 실행을 차단하는 경우가 발생할 수 있습니다.

그리고 엑셀 데이터는 한자 단어들을 제가 단어장에서 그대로 배낀거라 저작권이 있을꺼 같아 제가 쓰던 6000개 단어에서 앞에 100개정도만 짜른 데이터 입니다.

그럼 단어 연습기 설명은 이것으로 마치고 지금부턴 단어 연습기 소스 설명에 들어가겠습니다.

1. 디자인


전체 디자인은 아래 한자 스크립트를 제공할 텍스트 박스 1개를 제외하곤 모두 레이블이며 파일 찾기 버튼은


아래엔 이렇게 안다, 모른다 버튼이 있습니다. ^^

저는 일본어 한자 연습이라 발음 항목이 있는데 영단어일 경우엔 필요없는 항목이 되겠죠?

2. 소스

일단 전체 소스는
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
 
namespace vacaPractice
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
            //전체 초기화
            Init();
            FormClosing += new FormClosingEventHandler(closing);
        }
        private void closing(object sender, FormClosingEventArgs e)
        {
            try
            {
                wb.Close(true);
                excelApp.Quit();
            }
            catch
            {
                //Application.Exit();
            }
            Application.Exit();
        }
 
        //excel file path
        string strPath = "";
 
        //current rowNum
        //2 ~ last row
        int intRow = 2;
        int intLastRow = 0;
 
        //today word
        float fltIndex = 0;
        float fltOk = -1;
        float fltNo = -1;
        static Excel.Application excelApp = null;
        static Excel.Workbook wb = null;
        static Excel.Worksheet ws = null;
        static object[,] data;
 
        //전테 초기화 메서드
        void Init()
        {
            //레이블 초기화
            this.label1.Text = "漢字";
            this.label2.Text = "뜻";
            this.label3.Text = "발음";
            this.label4.Text = "종류";
            this.label5.Text = "레벨";
            this.label6.Text = "순번";
            
            //path name
            //strPath = @"D:\공부\voca\nadel\data.xlsx";
            this.label2.ForeColor = Color.White;
            this.label3.ForeColor = Color.White;
            this.label1.AutoSize = false;
            this.label2.AutoSize = false;
            this.label3.AutoSize = false;
            this.label1.Width = 300;
            this.label2.Width = 300;
            this.label3.Width = 300;
        }
 
        //load excel
        void loadExcel()
        {
            try
            {
                excelApp = new Excel.Application();
                wb = excelApp.Workbooks.Open(strPath);
                ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;
                Excel.Range rng = ws.UsedRange;
                Excel.Range last = ws.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
                data = rng.Value;
                intLastRow = last.Row;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 
        //data read
        void reExcal()
        {
            this.label2.ForeColor = Color.White;
            this.label3.ForeColor = Color.White;
 
            //random rowNumber
            rodmRow();
 
            try
            {
                for (int c = 1; c <= 7; c++)
                {
                    if (data[intRow, c] == null)
                    {
                        label1.Text = data[intRow, 3] == null ? "" : data[intRow, 3].ToString();
                        label2.Text = data[intRow, 4] == null ? "" : data[intRow, 4].ToString();
                        label3.Text = data[intRow, 5] == null ? "" : data[intRow, 5].ToString();
                        label4.Text = data[intRow, 6] == null ? "" : data[intRow, 6].ToString();
                        label5.Text = data[intRow, 1] == null ? "" : data[intRow, 1].ToString();
                        label6.Text = data[intRow, 2] == null ? "" : data[intRow, 2].ToString();
                        this.textBox1.Text = data[intRow, 3] == null ? "" : data[intRow, 3].ToString();
                        continue;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //ReleaseExcelObject(ws);
                //ReleaseExcelObject(wb);
                //ReleaseExcelObject(excelApp);
                fltIndex++;
                intRow++;
                this.label7.Text = fltIndex.ToString();
            }
        }
 
        //뜻보기
        private void button1_Click(object sender, EventArgs e)
        {
            bt1();
        }
 
        void bt1()
        {
            this.label2.ForeColor = Color.Black;
            this.label3.ForeColor = Color.Black;
        }
 
        //안다 버튼
        private void button2_Click(object sender, EventArgs e)
        {
            bt2();
        }
 
        void bt2()
        {
            reExcal();
 
            if (fltOk.Equals(-1))
            {
                fltNo++;
                fltOk++;
            }
            else
            {
                fltOk++;
                claResult();
            }
        }
 
        //모른다 버튼
        private void button3_Click(object sender, EventArgs e)
        {
            bt3();
        }
 
        void bt3()
        {
            reExcal();
            if (fltNo.Equals(-1))
            {
                fltOk++;
                fltNo++;
            }
            else
            {
                fltNo++;
                claResult();
            }
        }
 
        //성적 결과 내기
        void claResult()
        {
            float floatResult = fltOk / (fltIndex -1) * 100;
            this.label9.Text = floatResult.ToString("N1");
            this.label11.Text = fltOk.ToString();
            this.label13.Text = fltNo.ToString();
        }
 
        //행번호 랜덤으로 만들기
        void rodmRow()
        {
            Random r = new Random();
            intRow = r.Next(2, intLastRow);
        }
 
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Left")
            {
                bt2();
            }
 
            if (e.KeyCode.ToString() == "Right")
            {
                bt3();
            }
 
            if (e.KeyCode.ToString() == "Down")
            {
                bt1();
            }
        }
 
        //파일찾기 버튼
        private void button4_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "Excel File(*.xlsx)|*.*";
            open.Title = "단어집 파일을 선택해 주세요.";
 
            if (open.ShowDialog() == DialogResult.OK)
            {
                strPath = open.FileName;
 
                //load excel
                loadExcel();
            }
 
            //성공시 버튼 지우기
            this.button4.Visible = false;
        }
    }//form
cs

이렇게 되고 실행 순서로 하나씩 살펴보면

1. 참조
1
2
3
4
5
6
7
8
9
10
11
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

다른건 다 평범한데 마지막 2개 참조는 엑셀 파일을 읽어야 하니 가져온 참조입니다.

Microsoft.Office.Interop에 관련한 dll 다운로드 링크도 준비했습니다~

Microsoft.Office.Interop.dll 다운로드

2. 변수 선언

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//excel file path
        string strPath = "";
 
        //current rowNum
        //2 ~ last row
        int intRow = 2;
        int intLastRow = 0;
 
        //today word
        float fltIndex = 0;
        float fltOk = -1;
        float fltNo = -1;
        static Excel.Application excelApp = null;
        static Excel.Workbook wb = null;
        static Excel.Worksheet ws = null;
        static object[,] data;
cs
위에서부터

엑셀 파일 경로
엑셀 파일 시작행 (2로 고정하였습니다.)
엑셀 파일 마지막행
연습한 단어 갯수
아는 단어 갯수
모르는 단어 갯수

마지막 4개는 엑셀 데이터 변환할 변수들입니다.

3. 폼 시작

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
            //전체 초기화
            Init();
            FormClosing += new FormClosingEventHandler(closing);
        }
        private void closing(object sender, FormClosingEventArgs e)
        {
            try
            {
                wb.Close(true);
                excelApp.Quit();
            }
            catch
            {
                //Application.Exit();
            }
            Application.Exit();
        }
        //전체 초기화 메서드
        void Init()
        {
            //레이블 초기화
            this.label1.Text = "漢字";
            this.label2.Text = "뜻";
            this.label3.Text = "발음";
            this.label4.Text = "종류";
            this.label5.Text = "레벨";
            this.label6.Text = "순번";
            
            //path name
            //strPath = @"D:\공부\voca\nadel\data.xlsx";
            this.label2.ForeColor = Color.White;
            this.label3.ForeColor = Color.White;
            this.label1.AutoSize = false;
            this.label2.AutoSize = false;
            this.label3.AutoSize = false;
            this.label1.Width = 300;
            this.label2.Width = 300;
            this.label3.Width = 300;
        }
#7에서 초기화를 시작하여

#32~#37은 레이블에 초기 텍스트를 넣고

#42~#43은 뜻과 발음은 안보이게 글 색상을 변경했고

#45~#51은 단어가 큼직히 잘 보이고 길어도 짤리지 말라고 고정 사이즈 옵션을 죽였습니다.

#10은 단어연습기 종료 이벤트를 따와서

#13~#26동안 종료하기전 열려있는 엑셀 파일을 닫는 역할을 넣었습니다.


4. 파일 찾기와 엑셀 데이터 로드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        //파일찾기 버튼
        private void button4_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "Excel File(*.xlsx)|*.*";
            open.Title = "단어집 파일을 선택해 주세요.";
            if (open.ShowDialog() == DialogResult.OK)
            {
                strPath = open.FileName;
                //load excel
                loadExcel();
            }
            //성공시 버튼 지우기
            this.button4.Visible = false;
        }
        //load excel
        void loadExcel()
        {
            try
            {
                excelApp = new Excel.Application();
                wb = excelApp.Workbooks.Open(strPath);
                ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;
                Excel.Range rng = ws.UsedRange;
                Excel.Range last = ws.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
                data = rng.Value;
                intLastRow = last.Row;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

사용자가 파일 찾기 버튼을 클릭하면 #2가 실행되고 엑셀 파일 선택을 받으면 #18에서 버튼의 시각화를 false 시켜 안다, 모른다 버튼이 활성화 되도록 했습니다.

엑셀 파일이 선택되면 #14에서 엑셀 데이터 로드를 호출하여

#26~#31동안 엑셀의 첫번째 워크 시트에 있는 전체 데이터를 로드하여 변수로 가지고 있도록 합니다.

특히 #30은 데이터의 마지막 행을 구하여 전체 데이터 범위를 파악하도록 합니다.


5. 안다, 모른다 버튼 클릭

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
        //안다 버튼
        private void button2_Click(object sender, EventArgs e)
        {
            bt2();
        }
        void bt2()
        {
            reExcal();
            if (fltOk.Equals(-1))
            {
                fltNo++;
                fltOk++;
            }
            else
            {
                fltOk++;
                claResult();
            }
        }
        //모른다 버튼
        private void button3_Click(object sender, EventArgs e)
        {
            bt3();
        }
        void bt3()
        {
            reExcal();
            if (fltNo.Equals(-1))
            {
                fltOk++;
                fltNo++;
            }
            else
            {
                fltNo++;
                claResult();
            }
        }
        //성적 결과 내기
        void claResult()
        {
            float floatResult = fltOk / (fltIndex -1) * 100;
            this.label9.Text = floatResult.ToString("N1");
            this.label11.Text = fltOk.ToString();
            this.label13.Text = fltNo.ToString();
        }
        
        //행번호 랜덤으로 만들기
        void rodmRow()
        {
            Random r = new Random();
            intRow = r.Next(2, intLastRow);
        }
        
        //load excel
        void loadExcel()
        {
            try
            {
                excelApp = new Excel.Application();
                wb = excelApp.Workbooks.Open(strPath);
                ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;
                Excel.Range rng = ws.UsedRange;
                Excel.Range last = ws.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
                data = rng.Value;
                intLastRow = last.Row;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        //data read
        void reExcal()
        {
            this.label2.ForeColor = Color.White;
            this.label3.ForeColor = Color.White;
            //random rowNumber
            rodmRow();
            try
            {
                for (int c = 1; c <= 7; c++)
                {
                    if (data[intRow, c] == null)
                    {
                        label1.Text = data[intRow, 3] == null ? "" : data[intRow, 3].ToString();
                        label2.Text = data[intRow, 4] == null ? "" : data[intRow, 4].ToString();
                        label3.Text = data[intRow, 5] == null ? "" : data[intRow, 5].ToString();
                        label4.Text = data[intRow, 6] == null ? "" : data[intRow, 6].ToString();
                        label5.Text = data[intRow, 1] == null ? "" : data[intRow, 1].ToString();
                        label6.Text = data[intRow, 2] == null ? "" : data[intRow, 2].ToString();
                        this.textBox1.Text = data[intRow, 3] == null ? "" : data[intRow, 3].ToString();
                        continue;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //ReleaseExcelObject(ws);
                //ReleaseExcelObject(wb);
                //ReleaseExcelObject(excelApp);
                fltIndex++;
                intRow++;
                this.label7.Text = fltIndex.ToString();
            }
        }

두 버튼을 클릭하면 로드한 데이터를 적절하게 배치하여 뿌려줄 매서드를 호출하고 (#8, #29)

호출된 매서드는 가장 먼저 보여줄 단어를 랜덤으로 정하기 위해 랜덤 숫자를 만들 매서드를 호출하고 (#87)

호출된 매서드는 #56~#57동안 2~마지막 데이터가 있는 행 사이의 정수 중에서 하나를 선택해 변수에 저장합니다.

랜덤수를 받았으면 #91~#105동안 정해진 레이블에 데이터를 넣어주고, 몇번째 연습한 단어인지 작성한 다음 (#118~#119) 종료됩니다.

데이터를 다 뿌린 다음엔 첫 실행일 경우엔 변수만 바꿔주고, 그 외엔 아는 갯수, 모르는 갯수 변수를 이용해 현재 성적을 작성해 줄 매서드를 호출 합니다. (#18,#39)


6. 뜻보기 버튼과 키보드 이벤트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        //뜻보기
        private void button1_Click(object sender, EventArgs e)
        {
            bt1();
        }
        void bt1()
        {
            this.label2.ForeColor = Color.Black;
            this.label3.ForeColor = Color.Black;
        }
        
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.ToString() == "Left")
            {
                bt2();
            }
            if (e.KeyCode.ToString() == "Right")
            {
                bt3();
            }
            if (e.KeyCode.ToString() == "Down")
            {
                bt1();
            }
        }
뜻보기 버튼이 클릭되면 해당 레이블 글자색을 바꿔주며 (#8~#9)

텍스트 박스에 키보드 클릭이벤트를 받아와서 방향키 클릭에 따라 해당 클릭 이벤트를 연결해 줍니다.

혼자 생각날때마다 기능을 달고 혼자 쓸 생각에 만들었던거라 예외처리가 매우 안되어 있음을 참조해주세요 ^^;;

이로써 단어 연습기 설명도 마치겠습니다.

긴 글 봐주셔서 감사하고, 단어연습기에 대한 질문이나 문의 개조 등등 모두 댓글로 남겨 주시면 제가 바로 해결하겠습니다. 감사합니다.!
Share:

[8] 나리타공항에서 올림픽 선수 대상으로 빠른 수화물 체크 서비스 시행 (NHK 뉴스 스크립트 번역)

<해당 시리즈는 일본어 공부를 위해 NHK에서 제공하는 뉴스 스크립트를 공부하는 겸 번역해서 올리는 포스트입니다. 일본어 초보자 수준이라 내용에 오역이 많을 수 있으니 유의해주세요.>

뉴스 링크 : https://www3.nhk.or.jp/news/easy/k10011499881000/k10011499881000.html
개시 일자 : 2018年 7月2日 11時30分



[成田空港 オリンピックから帰る選手の荷物を早くチェック]
[나리아 공항은 올림픽에서 돌아가는 선수의 수화물을 빨리 체크]



成田空港の会社は、2020年の東京オリンピックとパラリンピックの閉会式のあと、荷物の安全をチェックする場所がとても混むと考えています。試合が終わった選手たちが、大きな荷物や道具をたくさん空港に送るためです。

このため会社は、空港の中の使っていない倉庫に、荷物をチェックする場所を特別につくることにしました。閉会式から3日ぐらいの間使います。ここで選手たちの荷物のチェックを行って、選手たちが長い時間待たなくてもいいようにしたいと考えています。

会社は、オリンピックの閉会式の次の日は、成田空港から日本を出発する人が今まででいちばん多い7万2000人になると考えています。選手たちのために、パスポートやチケットをチェックする場所もつくる予定です。

成田(나리타) 공항 회사는, 2020년 도쿄 올림픽과 패럴림픽 폐회식 후 수화물 안전을 체크하는 장소가 복잡해질껄로 생각됩니다. 시합이 끝나면 선수들은 큰 짐이나 도구를 많이 공항으로 보내기 때문입니다.

이를 위해 회사는 공항에서 사용하지 않는 창고를 수화물 체크가 되는 장소로 특별히 만들게 했습니다. 폐회식부터 3일간 사용합니다. 여기에 선수들의 수화물을 체크하고 선수들이 오래 대기하지 않도록 하고싶다고 생각하고 있습니다.

회사는 올림픽 폐회식 다음날은 나리타 공항에서 일본을 출발하는 사람이 지금까지 가장 많은 7만 2000명이 될 것으로 생각하고 있습니다. 선수들을 위해 패스포트와 티켓을 체크하는 장소도 만들 예정입니다.

===========================
물론 기사니깐 좋은점만 부각 시킨거겠지만 우리가 평창 준비하면서 겪었던 엉성한 준비 과정과는 달리 애들은 확실히 해야할건 준비를 미리미리 완벽하게 할려는 욕심과 은근히 협조, 정부의 꼼꼼한 추진력이 잘 연계되는걸 보면 참 부럽고 배워야 된다 생각된다.
Share:

[7] 냉방기기를 사용하는 계절엔 화제를 조심하자 (NHK 뉴스 스크립트 번역)

<해당 시리즈는 일본어 공부를 위해 NHK에서 제공하는 뉴스 스크립트를 공부하는 겸 번역해서 올리는 포스트입니다. 일본어 초보자 수준이라 내용에 오역이 많을 수 있으니 유의해주세요.>

뉴스 링크 : https://www3.nhk.or.jp/news/easy/k10011498691000/k10011498691000.html
개시 일자 : 2018年 7月2日 11時30分



[エアコンや扇風機を使う季節 火事に気をつけて]
[에어콘이나 선풍기를 사용하는 계절엔 화제를 조심하자]



製品の安全などを調べているNITEによると、今年3月までの6年に、エアコンや扇風機が原因の事故が660件ありました。そのうち半分は6月から8月の間に起こっていて、特に火事が多くなっています。

エアコンの火事は338件ありました。エアコン用ではない「延長コード」を使ったり、コードを切って別のコードとつないだりして間違った使い方をして火事になることが多くなっています。

扇風機の火事も119件ありました。古い扇風機のコードが壊れて火事になることが多くなっています。

NITEは、エアコンや扇風機を久しぶりに使うときには壊れていないかどうかチェックするように言っています。特に20年以上使っている古いエアコンや扇風機を使うときは、変な音がするなどいつもと違うことがあったら使わないでほしいと言っています。

제품의 안전등을 조사하는 NITE에 따르면, 금년 3월까지 6년간 에어콘이나 선풍기로 인한 사고가 660건이 있었습니다. 그 중 절반은 6월부터 8월사이에 일어나, 특히 사고가 많아지고 있습니다.

에어콘의 화제는 338건이 있었습니다. 에어콘용이 아닌 [연장코드]를 사용하거나 코드를 잘라 다른 코드와 연결하는 등의 잘못된 사용법으로 인해 화제가 일어나는 경우가 많아지고 있습니다.

선풍기 화제도 119건이 있었습니다. 오래된 선풍기 코드가 손상되어 화제가 나는 경우가 많아지고 있습니다.

NITE에선, 에어콘이나 선풍기를 오랜만에 사용할 때에는 손상 여부를 체크하라고 합니다. 특히 20년 이상 사용한 오래된 에어콘이나 선풍기를 사용할땐, 이상한 소리가 나는것과 같은 평소와 다른 일이 있으면 사용하지 말라고 합니다.

======================
기사 스크립트 중에선 제일 길었던거 같음.
Share:

[6] 실업률이 2.2%으로 25년전만큼 낮아지다. (NHK 뉴스 스크립트 번역)

<해당 시리즈는 일본어 공부를 위해 NHK에서 제공하는 뉴스 스크립트를 공부하는 겸 번역해서 올리는 포스트입니다. 일본어 초보자 수준이라 내용에 오역이 많을 수 있으니 유의해주세요.>

뉴스 링크 : https://www3.nhk.or.jp/news/easy/k10011500211000/k10011500211000.html
개시 일자 : 2018年 6月29日 16時30分



[仕事がない人の割合は2.2% 25年前と同じぐらい低い]
[직업이 없는 사람의 비율이 2.2%로 25년전만큼 낮아지다.]



総務省によると、今年の5月に日本で仕事をしている人の数は6698万人でした。去年の5月に比べて151万人増えて、65か月続けて増えました。

仕事を探しているのに仕事がない人は158万人で、去年の5月と比べて52万人少なくなりました。仕事がない人は96か月続けて少なくなっています。

仕事がない人の割合は、2.2%で、1992年10月と同じぐらい低くなりました。

総務省は「働く人が足りない会社が増えています。多くの会社が働く人を増やしているため、仕事がない人が少なくなりました」と話しています。

총무성에서 밝히길, 금년 5월 일본에서 직업이 있는 사람의 수는 6698만명으로 되었습니다. 작년 5월과 비교했을때 151만명이 증가하였고, 65개월 동안 연속해서 증가하였습니다.

일자리를 찾고있는 실업자는 158만명으로 작년 5월에 비해 52만명이 줄어들었습니다. 실업자 수도 96개월 연속하여 줄어들고 있습니다.

실업률 2.2%는 1992년 10월과 동일한 수치로 낮아졌습니다.

총무성은 [근무자가 부족한 회사가 증가하고 있습니다. 많은 회사가 근무자를 늘리고 있기 때문에 실업률이 줄어들었습니다.]라고 이야기 했다.

=================
무진장 부러운 기사.

근로자 수를 보면 확실히 일본 경제력이 우리와 비교했을땐 엄청나게 튼튼하다는걸 실감하게 되고 일본이나 미국은 지금 엄청난 호황인데 우리나라는 날이 갈수록 암담하기만 하니 답답함을 넘어 짜증이 난다.
Share:

2018년 7월 1일 일요일

[5] 월드컵 일본이 결승 토너먼트로 진출하다. (NHK 뉴스 스크립트 번역)

<해당 시리즈는 일본어 공부를 위해 NHK에서 제공하는 뉴스 스크립트를 공부하는 겸 번역해서 올리는 포스트입니다. 일본어 초보자 수준이라 내용에 오역이 많을 수 있으니 유의해주세요.>

뉴스 링크 : https://www3.nhk.or.jp/news/easy/k10011499751000/k10011499751000.html
개시 일자 : 2018年 6月29日 16時30分



[ワールドカップ 日本が決勝トーナメントに進む]
[월드컵 일본이 결승 토너먼트로 진출하다.]



ロシアで行っているサッカーのワールドカップで28日、日本はポーランドと試合をしました。前半は日本もポーランドも点を取ることができなくて、0−0でした。後半にポーランドが1点取って、日本は0−1で負けました。

優勝のチームを決めるための決勝トーナメントに進むことができるのは、4つの国のグループの中で2つだけです。

日本と同じグループのセネガルとコロンビアの試合では、コロンビアが勝ちました。その結果、コロンビアがグループの中で1番になりました。日本とセネガルは勝った数と負けた数、取った点が同じでした。しかし、日本はセネガルより反則が少なかったため、2番になって、決勝トーナメントに進むことになりました。日本がワールドカップで決勝トーナメントに進んだのは3回目です。

日本の時間で7月3日、日本はベルギーと試合をします。

러시아에서 진행중인 축구 월드컵이 28일, 일본은 폴란드와 경기를 하였습니다.  전반에 일본과 폴란드는 점수를 내지못해 0대0으로 끝나고, 후반에 폴란드가 1점을 획득하여 일본은 0-1로 패배하였습니다.

우승팀을 겨루기 위한 결승 토너먼트를 진출 할 수 있는 국가는 4개의 국가 그룹 중 두 국가 뿐입니다.

일본과 같은 그룹의 세네갈과 콜롬비아의 경기는 콜롬비아가 승리하였습니다. 이 경기 결과로 콜롬비아가 국가 그룹에서 1순위가 되었습니다. 일본과 세네갈은 승리 횟수와 패배 수, 취득 점수가 같았습니다. 하지만 일본은 세네갈보다 반칙이 적었기 때문에 그룹의 2순위가 되었고, 결승 토너먼트로 진출이 되었습니다. 일본이 월드컵 결승 토너먼트에 진출한건 3번째 입니다.

일본 시간으로 7월 3일, 일본은 벨기에와 경기를 합니다.

=====
이때까지 한 기사들 중에선 가장 난이도가 높은 기사였음.

축구도 농구처럼 시간을 멈추는걸 도입해야 침대나 이런 졸전을 막을 수 있을듯.
Share:

2018년 6월 28일 목요일

[4] 도쿄만에 고래가 헤엄 치는 중! [배들은 조심하세요] (NHK 뉴스 스크립트 번역)

<해당 시리즈는 일본어 공부를 위해 NHK에서 제공하는 뉴스 스크립트를 공부하는 겸 번역해서 올리는 포스트입니다. 일본어 초보자 수준이라 내용에 오역이 많을 수 있으니 유의해주세요.>

뉴스 링크 : https://www3.nhk.or.jp/news/easy/k10011494651000/k10011494651000.html
개시 일자 : 2018年 6月26日 11時30分



[東京湾で鯨が泳いでいる「船は気をつけて」]
[도쿄만에 고래가 해엄 치는 중 [배들은 조심하세요]]



海の安全を守る仕事をしている東京海上保安部に「東京湾で鯨が泳いでいるのを見た」という連絡が18日からたくさん来ています。24日も、羽田空港から東に3kmぐらいの海などで鯨を見たという連絡がありました。

近くを通った船から撮ったビデオを見ると、鯨らしい生き物が2回ぐらいジャンプしています。ビデオを撮った人は「毎週釣りに行っていますが、鯨を見たのは初めてです。5mぐらいの高さまでジャンプしていて、驚きました」と話していました。

東京海上保安部は、たくさんの人が見ているのは同じ鯨の可能性があると言っています。そして、ぶつかると事故になって危険なため、近くを通る船は鯨に気をつけてほしいと言っています。


바다의 안전을 지키는 업무를 수행중인 도쿄해상보안부로 [도쿄만에서 헤엄을 치는 고래를 보았다]는 연락이 18일부터 많이 들어오고 있습니다. 24일도 羽田(하네다) 공항에서 동쪽으로 3Km정도의 바다쪽에 고래를 봤다는 연락이 있었습니다.

근처를 통과한 한 배에서 찍은 비디오를 보면, 고래로 추정되는 생물이 2회 정도 점프를 하고 있습니다. 비디오를 찍은 사람은 [매주 낚시를 하고있지만, 고래를 본 건 처음입니다. 5M 정도의 높이까지 점프를 하여 놀랐습니다.]라고 이야기 했습니다.

도쿄해상보안부는 많은 사람들이 보고 있는 것은 같은 고래일 가능성이 있다고 말을 합니다. 그리고 부딧히면 사고가 되어 위험하니 근처를 지나는 배는 고래를 조심해 달라고 말을 합니다.

===
돌고래였음 창에 찔려 죽었을껀뎅 ㄷㄷ
Share: