قاچانمۇ بىر ئۇيغۇر تىلىمىزنى باشقا تىللار ئارا تېكىسىتلىك تەرجىمە قىلالايدىغان ماشىنا تەرجىمە تېخنىكىسى بارلىققا كېلەر!؟ يېقىندىن بۇيان بۇ نوقتىغا بەكلا قىزىقىپ قىلىۋاتىمەن. ئەلۋەتتە ھازىرغىچە كۆپ تىللار ئارا بىر قەدەر مۇكەممەل تەرجمانلىق قىلالايدىغان Google تەرجىمانىنى مىسال ئالساقمۇ، نۇرغۇن يىتەرسىزلىكلەردىن خالىي ئەمەس، ھەمدە پۈتۈنلەي ئادەم تەرجىمە قىلغاندەك سەۋىيەگە يەتكۈزەلىشى مۇمكىن ئەمەس. دېمەك 80% لىك ھەتتا 70% لىك سۈپەتتىكى ماشىنا تەرجىمە ئۈسكۈنىلىرىنى بارلىققا كەلتۈرۈش ئۈچۈن ئىنسانلارنىڭ 50 يىلدىن بىرى توختىماي ئىزدىنىپ كېلىۋاتقانلىقى ھەمدە نۇرغۇن داڭلىق شىركەت ھەتتا ھۆكۈمەتلەرنىڭ بۇ ساھەگە مەبلەخنى ئايىماي سېلىۋاتقانلىقى كېشىنى ھەرگىزمۇ ئەجەپلەندۈرمەيدۇ. مەنبەلەرنى ئىزدەپ باقسام، ماشىنا تەرجىمچىلىكىدىن ئىبارەت بۇ تېخنىكا سوغۇق مۇناسىۋەتلەر ئۇرۇشى جەريانىدا، ئامېرىكىنىڭ روسچە تېخنىكلىق مەنبەلەردىن ئۈنۈملۈك پايدىلىنىش ۋە ۋاقتىدا قولغا چۈشۈرۈش مەقسىتىدە تازا ئەۋجىگە چىققانىكەن. ئاڭلاشلارغا قارىغاندا ھازىرمۇ ئامېرىكا ئارمىيەسىنىڭ ماشىنا تەرجىمانلىرى دۇنيا بويىچە ئەڭ ئىلغار دەيدۇ، يەنى دۇنيادىكى نۇرغۇن ئۇششاق تىللارنىمۇ يۇقىرى توغىرلىق نىسبىتىدە تەرجىمە قىلىپ بېرەلەيدىكەن. بولۇپمۇ تېخنىكىلىق ماقالە - يازمىلارنى توپ -توپ تەرجىمە قىلىشتا ماشىنا تەرجىمىچىلىكىنىڭ رولى ۋە ئۈنۈمى ئىنتايىن زور، چۈنكى تېخنىكلىق قىلىپلاشتۇرۇلغان ئاتالغۇلارغا قارىتا تەرجىمە بىر تەرەپ قىلىش تېخىمۇ ئاسان.
بولۇپمۇ بۈگۈنكىدەك "زور مەلۇمات دەۋرى"گە سىلجىۋاتقان بىر زاماندا، ماشىنا تەرجىمانلىقىنىڭ تېخىمۇ يۇقىرى سەۋىيەگە يەتكۈزۈلىشى مۇمكىنچىلىككە تولىمۇ يېقىن. ئۇزاق بولمىغان كەلگۈسىدە بىۋاستە ماشىنا تەرجىمانلىرىنىڭ قولىدىن چىققان ماتېرىيالارنى نەشر قىلىش مۇمكچىلىكىمۇ يۇقىرى(يەنى، دۇنيادىكى خالىغان بىر تىلدا ماقالە - ئەسەر يېزىلغان بولسا، ماشىنا تەرجىمان ئارقىلىق نەچچە مېنۇتتىلا تەرجىمە قىلىپ، ئېلىكترونلۇق نەشرىياتلاردا شۇھامان، ماسقەدەمدە تارقىتىدىغان ئەھۋاللار كۆرۈلۈشى مۇمكىن).
خوش، قۇرۇق پاراڭلار قۇلاققا خوشياقماس! مەركىزى نوقتىغا قايتايلى! موشۇ ماتېرىيال تەرجىمە ئىشلىرىمغا قولاي بولسۇن ئۈچۈن، گەرچە دېگەندەك ياخشى بولمىسىمۇ، ئۇيغۇرچە تەرجىمان ياكى لۇغەت API لىرى بولمىغاندىكىن 百度 API نى ئىشلىتىپ، ئاددىيغىنە بىر تەرجىمان قورالچاق ياسىۋالدىم. يەنى كومپىيۇتېرىم تورغا ئۇلاغلىق بولسىلا، مەزكۇر دېتالىم ئارقىلىق 15 خىل تىل ئارا قوش يۆنىلىشلىك تەرجىمە قىلغىلى بولىدۇ. يەنى ئىشلىتىپ بولغاندا ئىكراننىڭ بىر بۇلۇڭىغا يۇشۇرۇپ قويىمەن، لازىم بولغاندا چوڭايتىپلا ئىشلىتىمەن. بۇرۇنقىدەك بىر سۆزنى تەرجىمە قىلىش ئۈچۈنمۇ توربەت ئېچىپ ئولتۇرۇشۇمنىڭ ھاجىتى يوق دېگەن گەپ. كۆرۈنمە يۈزى تۆۋەندىكىدەك:
دېتال كۆرۈنمە يۈزلىرى



دېتال كود قىسمى
ئەمدى قىزىققۇچىلار داۋامىغا مەرھەمەت! مەزكۇر دېتالنىڭ كودلىرى بىلەن تونۇشۇپ چىقايلى(بۇ يەردە يىپىدىن - يېڭنىسىغىچە قەدەم باسقۇچلىرىنى سۆزلەپ ئولتۇرمايمەن، ئەسلى كودىنى چۈشۈرۈپ كۆرۈپ باقساڭلار بولىدۇ!).
بىر پروجېكت (يېڭى تۈر) قۇرۇپ، كۆرۈنمە يۈزىنى يۇقىرىقى رەسىمدىكىدەك ئورۇنلاشتۇرىۋالغاندىن كېيىن، ئارقا ئىجرا كودلىرى تۆۋەندىكىدەك بولىدۇ:
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Windows.Forms; using System.Speech; using System.Speech.Synthesis; namespace MyTranslator { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } DictionaryTargetLanguage; BindingSource bingTarget; Dictionary , Dictionary > allLanguage; /// /// terjime qilishqa bolidighan tillarni ComboBox qa qoshimiz /// private void addLanguage(){ allLanguage = new Dictionary, Dictionary >(); //tallashqa bolidighan nowettiki tillar Dictionary NowLanguage = new Dictionary (); NowLanguage.Add("auto", "ئاپتوماتىك"); NowLanguage.Add("zh", "خەنزۇتىلى"); NowLanguage.Add("en", "ئىنگىلىزتىلى"); NowLanguage.Add("ara", "ئەرەپ تىلى"); NowLanguage.Add("de", "گىرمان تىلى"); NowLanguage.Add("jp", "ياپۇن تىلى"); NowLanguage.Add("spa", "ئىسپان تىلى"); NowLanguage.Add("th", "تايلاند تىلى"); NowLanguage.Add("ru", "روس تىلى"); NowLanguage.Add("yue", "ئاۋمېن تىلى"); NowLanguage.Add("kor", "كورىيان تىلى"); NowLanguage.Add("fra", "فرانسۇس تىلى"); NowLanguage.Add("it", "ئىتالىيە تىلى"); NowLanguage.Add("pt", "پورتىگال تىلى"); NowLanguage.Add("wyw", "قەدىمىي خەنزۇتىلى"); //tallashqa bolidighan esli tillar TargetLanguage = new Dictionary (); TargetLanguage.Add("auto", "ئاپتوماتىك"); TargetLanguage.Add("zh", "خەنزۇتىلى"); TargetLanguage.Add("en", "ئىنگىلىزتىلى"); TargetLanguage.Add("ara", "ئەرەپ تىلى"); TargetLanguage.Add("de", "گىرمان تىلى"); TargetLanguage.Add("jp", "ياپۇن تىلى"); TargetLanguage.Add("spa", "ئىسپان تىلى"); TargetLanguage.Add("th", "تايلاند تىلى"); TargetLanguage.Add("ru", "روس تىلى"); TargetLanguage.Add("yue", "ئاۋمېن تىلى"); TargetLanguage.Add("kor", "كورىيان تىلى"); TargetLanguage.Add("fra", "فرانسۇز تىلى"); TargetLanguage.Add("it", "ئىتالىيان تىلى"); TargetLanguage.Add("pt", "پورتىگال تىلى"); TargetLanguage.Add("wyw", "قەدىمىي خەنزۇتىلى"); allLanguage.Add(NowLanguage, TargetLanguage); Control.CheckForIllegalCrossThreadCalls = false; BindingSource bingNow = new BindingSource(); bingNow.DataSource = allLanguage[NowLanguage]; cboNowLanguage.DataSource = bingNow; cboNowLanguage.DisplayMember = "Value"; cboNowLanguage.ValueMember = "Key"; bingTarget = new BindingSource(); bingTarget.DataSource = TargetLanguage; cboTargetLanguage.DataSource = bingTarget; cboTargetLanguage.DisplayMember = "Value"; cboTargetLanguage.ValueMember = "Key"; } SpeechSynthesizer speak; /// /// koznekni qozghitish /// /// /// private void frmMain_Load(object sender, EventArgs e) { speak= new SpeechSynthesizer(); textContent.Focus(); this.Height = 140; lblOpenAndClose.Top = 60; //arqa ijra muhitida tillarni yuklesh try { Thread threadAddLanguage = new Thread(new ThreadStart(addLanguage)); threadAddLanguage.IsBackground = true; threadAddLanguage.Start(); } catch { } } ////// terjime qilish konupka buyruqi qismi /// /// /// private void btnTranslate_Click(object sender, EventArgs e) { this.Height = 264; lblOpenAndClose.Top = 130; try { search(); } catch (Exception ex) { MessageBox.Show(ex.Message); } picSpeech.Visible = true; } ////// izdesh /// private void search() { //terjime qilidighan til quruq bolsa eskertimiz if (textContent.Text == "") { MessageBox.Show("تەرجىمە قىلىدىغان مەزمۇننى كىرگۈزۈڭ", "ئەسكەرتىش", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } String json = new Translation().TranslationMain(cboNowLanguage.SelectedValue.ToString(), cboTargetLanguage.SelectedValue.ToString(), textContent.Text); textResultContent.Text = new AnalyticalToJson().Analytical(json); } ////// quruqdash konupka ishi /// /// /// /// private void btnReset_Click_1(object sender, EventArgs e) { textResultContent.Clear(); textContent.Clear(); cboTargetLanguage.SelectedIndex = 0; cboNowLanguage.SelectedIndex = 0; } //kochurush konupka ishi private void button1_Click(object sender, EventArgs e) { if (textResultContent.Text == "") { MessageBox.Show("كۆچۈرۈلىدىغان مەزمۇن قۇرۇق", "ئەسكەرتىش", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { Clipboard.SetDataObject(textResultContent.Text); MessageBox.Show("تەرجىمە نەتىجىسى كۆچۈرۈلدى", "ئەسكەرتىش", MessageBoxButtons.OK, MessageBoxIcon.Information); } } //chekinish konupka ishi private void button2_Click(object sender, EventArgs e) { if (MessageBox.Show("راستىنلا چېكىنەممسىز؟", "ئەسكەرتىش", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { MessageBox.Show("ئىشلەتكىنىڭىزگە كۆپ رەھمەت!"); Application.Exit(); } } //anglash konupka ishi private void picSpeech_Click_1(object sender, EventArgs e) { speak.SpeakAsync(textResultContent.Text.Trim()); } private void lblOpenAndClose_Click(object sender, EventArgs e) { openOrColose(); } private void openOrColose() { //ekran kengliki we igizlikige irishish Rectangle ScreenArea = System.Windows.Forms.Screen.GetWorkingArea(this); int width = ScreenArea.Width; // > belgisi bolsa basqandin keyin yangha yushurimiz if (lblOpenAndClose.Text.Equals(">")) { this.Width = 30; lblOpenAndClose.Text = "<"; this.Left = width - 30; this.Height = 76; lblOpenAndClose.Top = 30; } else { this.Width = 634; lblOpenAndClose.Text = ">"; this.Left = 350; textContent.Focus(); if (textResultContent.Text == "") { this.Height = 140; lblOpenAndClose.Top = 60; } else { this.Height = 264; lblOpenAndClose.Top = 130; } } } // yangha yushurush we eslige qayturush konupka ishi private void panel1_Click(object sender, EventArgs e) { openOrColose(); } // yangha yushurulma halettin eslige qayturush konupka ishi private void nfTranslation_Click(object sender, EventArgs e) { this.Width = 264; lblOpenAndClose.Text = ">"; this.Left = 150; } private void cboNowLanguage_SelectedIndexChanged(object sender, EventArgs e) { } //koznekni tartip yotkeshni emelge ashurush Point mouseOff; //mawus yotkelgen noqta bool leftFlag; // mawusning sol konupkisimu yoq? private void frmMain_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { mouseOff = new Point(-e.X, -e.Y); // nowettiki orun noqta qimmitige irishish leftFlag = true; // mawus sol dolisini basqandin keyin true; } } private void frmMain_MouseMove(object sender, MouseEventArgs e) { if (leftFlag) { Point mouseSet = Control.MousePosition; mouseSet.Offset(mouseOff.X, mouseOff.Y); //koznekni yotkeshke bolidighan rayun Location = mouseSet; } } private void frmMain_MouseUp(object sender, MouseEventArgs e) { if (leftFlag) { leftFlag = false;// mawusning sol dolisini qoyup bergende false; } } } }
يەنى: ئاۋۋال NowLanguage ۋە TargetLanguage نامىدىكى ئىككى لۇغەت (Dictionary) ئىچىگە نۆۋەتتىكى تىل ۋە نېشان تىللارنىڭ نامى ۋە بەلگە سۆزىنى(Key) قويىۋىلىپ، ئاندىن بۇ ئىككى لۇغەتنى allLanguage نامىدىكى لۇغەت ئىچىگە تىقىمىز ۋە addLanguage فۇنكىسيەسى ئىچىدە مەزكۇر لۇغەتنى ئاۋۇ ئىككى Combox كە باغلاپ، مەزمۇنلىرىنى كۆرسىتىمىز.
كۆزنەك قوزغانلغاندا كۆرۈنمە ھالىتى، ئىگىزلىك - كەڭلىك ۋە تىللارنى سۈكۈتلەيمىز. باشقا قىسىملىرى ئاساسەن كونۇپكا ئىشلىرى ۋە بىر قىسىم ئاددىي فۇنكىسىيەلەر.
ئەلۋەتتە، كۆزنەكنى ئىكراننىڭ بىر بېقىنىغا تىقىپ يۇشۇرىدىغان ئۈنۈمنى چىقىرىشمۇ تەس ئەمەس. يۇقىرىقى كودتا بېرىلگەن openOrColose ئۇسسۇلى ئىچىدە، lblOpenAndClose ناملىق بەلگە كونترولىنىڭ تېكىسىتى > بولسا كونۇپكىنى باسقاندىن كېيىن، كۆزنەك كەڭلىكىنى 30 پېكىسىل قىلىپ، ئىكران ئومۇمى كەڭلىكىدىن 30 نى ئېلىۋىتىپ شۇ جايغا كۆرسىتىپ بەرسەك يۇشۇرۇنغان ئۈنۈم چىقىدۇ. يەنە بىر باسقاندىن كېيىن ئەسلىگە قايتۇرۇپ بەرسەكلا بولىدۇ خالاس.
ئاندىن ئاۋۇ MouseDown، MouseMove، MouseUp ئىشلىرىنى مۇۋاپىق بەلگىلەش ئارقىلىق، ماۋۇسنى بېسىپ تۇرۇپ كۆزنەكنى ئېكىراننىڭ خالىغان يېرىگە سۆرىگىلى بولىدىغان ئۈنۈمنى چىقاردۇق. شۇنىڭ بىلەن ئاساسىي ئىش تۈگىدى. ئەمدى 百度 API نى ئىشلىتىدىغان بىر تۈر يازىمىز، تۈرنىڭ ئاساسلىق كودى مۇنداق:
public String TranslationMain(String NowLanguage, String TargetLanguage,String Content) { String api = String.Format("http://openapi.baidu.com/public/2.0/bmt/translate?client_id=QnHHTyPLu9TueCO3rxoejwI5&q={0}&from={1}&to={2}", Content, NowLanguage, TargetLanguage); WebClient client = new WebClient(); return client.DownloadString(api); }
شۇنداق، 百度 API نى يۇقىرىقىدەك ئۇلىۋالساقلا بولىدۇ. بۇنىڭ ئىچىدە client_id دېگىنى بەيدۇ ئاچقۇچىلار ھىساۋاتىمىزدىكى APP_Key شۇ.( بەيدۇ لۇغەت API سىنى ئىشلىتىش تەپسىلىي چۈشەندۈرۈشلىرىنى بۇ يەر دىن كۆرۈڭ.)، ئاندىن WebClient كونترولى ئارقىلىق API تەمىنلىگەن ئۇچۇرلارنى تارتىپ كېلىپ، تەرجىمە نەتىجىسى سۈپىتىدە كۆرسىتىپ بەرسەكلا تامام.
لېكىن API دىن قايتۇرۇلىدىغىنى json ئۇچۇرى بولىدۇ. دېمەك، يەنە بىر تۈر قۇرۇپ Json كودلىرىنى يېشىشىمىزغا توغرا كېلىدۇ:
class AnalyticalToJson { //////Json ni yeshish /// /// JSON codi ///terjime qilghan mezmunni qayturidu public String Analytical(String JsonCode) { JObject ResultParent = JObject.Parse(JsonCode); String trans_result = ResultParent["trans_result"].ToString(); JObject ResultChild = JObject.Parse(trans_result.Replace("[", " ").Replace("]", " ")); //terjime qilinghandin keyinki nishan til String target = ResultChild["dst"].ToString(); return target; } }
خۇددى يۇقىرىدا بېرىلگەندەكلا JObject كونترلىنى تارتىپ ئىشلىتىپ، Json كودىنى يېشىمىز ۋە ئۇنىڭدا قايتۇرۇلغان مەزمۇنلارنىڭ قۇرۇلمىسىغا ئاساسەن، ھەرىپ زەنجىرلىرىگە ئوقۇپ ئېلىپ قايتۇرىمىز، شۇنىڭ بىلەن تامام! ئەلۋەتتە بەيدۇ تەرجىمانىنىڭ ئىقتىدارى ئىنتايىن چەكلىك، لېكىن ھەرھالدا بەزى ئىھتىياجلارنى قامداپ قويىدۇ. ئەسلى google تەرجىمانىنى ئىشلىتەي دېگەن، لېكىن بەزىدە ئېچىلمايلا قويىدۇ...
ئەسلى كود چۈشۈرۈش
بۇ پەقەت ئاددى بىر قورال بولغاچقا، ھەمدە ئۆگېنىش - ئالماشتۇرۇشنى ئاساس قىلغاچقا قاچىلاش پروگراممىسى ياسالمىدى. ئىشلەتكۈسى بار، ئەمما VisualStudio مۇھىتى ھازىرلىمىغان دوسىتلار پەقەت FramWork4.0 نى قاچىلغان بولسىلا MyTranslator\MyTranslator\bin\Debug موشۇ ئادرىس بويىچە MyTranslator.exe ھۆججىتىنى ئىجرا قىلىپ ئىشلەتسە بولىدۇ.
يېقىندا مەن c# ئۆگىنىۋاتقان ئىدىم، ياخشى ماتېرىيال بوپ قالغۇدەك. ۋىن8 غا دۇكان ئەپ ئېچىش دەرسلىكلىرى توختاپ قالدى، داۋامىنى سۆزلەشنى ئويلۇشۇپ باقتىلىمۇ؟
ياخشى باشلىنىش
بىلىمخۇمار؟ سىز ئەركىن سىددىق ئاكىمۇ يا؟ مېنڭچە ئەمەس :ھو ھو:
ھېچنىمىنى چۈشەنمىدىم.