public string Get(TranslateModel wordToTranslate)
        {
            // TODO Replace with in-memory caching of localized file.
            // TODO Determine user's culture and return translation based on that.
            // Although to be useful across multiple consumers, requesting the culture would be best.
            // TODO Request culture on initial poke to API. Put culture in JWT.
            // TODO Add token/JWT to API.

            if (Utils.Utils.IsValidCulture(wordToTranslate.Culture))
            {
                JObject translation = JObject.Parse(System.IO.File.ReadAllText("./Localization/" + wordToTranslate.Culture + ".json"));

                var translatedWord = (string)translation[wordToTranslate.Word];
                if (translatedWord == null)
                {
                    //TODO Log error regarding missing/invalid word.
                    return("-1");
                }
                else
                {
                    Utils.Utils.WriteToConsoleDB(translatedWord, _writeToConfig);
                    return(translatedWord);
                }
            }
            else
            {
                // TODO Log error regarding missing/invalid culture.

                return(null);
            }
        }
        public ActionResult Edit(TranslateModel inmodel)
        {
            var model = CreateModel(inmodel.TextKey);

            model.Text = inmodel.Text;
            if (!ModelState.IsValid)
            {
                return(View(model));
            }


            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                _repository.Update(CultureInfo.CurrentUICulture, new TypePromptKey(model.TextKey), model.Text);
                return(RedirectToAction("Index"));
            }
            catch (Exception err)
            {
                ModelState.AddModelError("", err.Message);
                return(View(model));
            }
        }
示例#3
0
        private async Task HandlingMessage(TranslateMessage translateMessage, TranslateModel translateModel)
        {
            Boolean bReult = false;
            await Task.Run(() => bReult = translateModel.SaveTextSegment(translateMessage));

            translateMessage.ClientId = this.clientId;
            translateMessage.SendTime = DateTime.Now;
            translateMessage.UserId   = this.userId;
            translateMessage.UserName = this.userName;
            translateMessage.Color    = this.userColor.Name;
            string jsonMessage = JsonConvert.SerializeObject(translateMessage);

            this.lastMessage = jsonMessage;
            if (bReult)
            {
                foreach (var item in clients)
                {
                    if (item != this && ((APVTranslator_Web.Socket.wsHandler)item).projectId == this.projectId && ((APVTranslator_Web.Socket.wsHandler)item).fileId == this.fileId)
                    {
                        string msgBack = jsonMessage;
                        item.Send(msgBack);
                    }
                }
                ;
            }
            else
            {
                string msgBack = string.Format("{0} have sent {1} at {2}", this.WebSocketContext.User.Identity.Name, "Something error!", DateTime.Now.ToLongTimeString());
                this.Send(msgBack);
            }
        }
示例#4
0
        public ActionResult SaveTargetLang(int projectId, int fileId, string targetLang)
        {
            ControllerResult oControllerResult = new ControllerResult();

            try
            {
                if (User.Identity.IsAuthenticated && GetUserPermission(SessionUser.GetUserId(), projectId))
                {
                    TranslateModel translateModel = new TranslateModel();
                    ProjectFile    oProjectFile   = translateModel.GetFile(projectId, fileId);
                    if (oProjectFile != null && !String.IsNullOrEmpty(targetLang))
                    {
                        translateModel.SaveTargetLang(projectId, fileId, targetLang);
                    }
                    else
                    {
                        oControllerResult.IsSuccess = false;
                        oControllerResult.Message   = "project or file don't exists!";
                    }
                }
                else
                {
                    oControllerResult.IsSuccess = false;
                    oControllerResult.Message   = "You don't had permission in file!";
                }
            }
            catch (Exception ex)
            {
                oControllerResult.IsSuccess = false;
                oControllerResult.Message   = ex.Message;
            }
            return(Json(new { success = oControllerResult.IsSuccess, responseText = oControllerResult.Message }, JsonRequestBehavior.AllowGet));
        }
 private void TbKey_LostFocus(object sender, RoutedEventArgs e)
 {
     if (TbKey.Text == "")
     {
         TranslateModels       = null;
         Word_Panel.Visibility = Visibility.Collapsed;
     }
 }
示例#6
0
        /// <summary>
        /// 当前的语言包配置文件
        /// </summary>
        /// <returns></returns>
        private Result Data()
        {
            TranslateModel model = new TranslateModel(this.context.GetParam("Language"))
            {
                Content = TranslateAgent.Instance().GetTranslate(this.GetToken())
            };

            if (this.context.GetParam("type") == "xml")
            {
                return(new Result(ContentType.XML, model.ToXml()));
            }
            return(new Result(true, this.GetToken(), model));
        }
示例#7
0
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                var user           = HttpContext.Current.User;
                var projectId      = context.Request["projectId"];
                var fileId         = context.Request["fileId"];
                var fileExportName = context.Request["fileExportName"];
                if (user.Identity.IsAuthenticated && projectId != null && fileId != null && GetUserPermission(SessionUser.GetUserId(), Convert.ToInt32(projectId)))
                {
                    TranslateModel translateModel = new TranslateModel();
                    Project        project        = translateModel.GetProject(Convert.ToInt32(projectId));
                    ProjectFile    file           = translateModel.GetFile(Convert.ToInt32(projectId), Convert.ToInt32(fileId));
                    if (project != null && file != null)
                    {
                        context.Response.Clear();
                        context.Response.ContentType = "application/octet-stream";

                        string exportPath     = String.Empty;
                        var    fileExt        = Path.GetExtension(file.FileName);
                        string translatedFile = string.Empty;
                        if (fileExportName != null)
                        {
                            exportPath = Utility.GetRootPath() + Contanst.rootProject + "\\" + project.Title + "\\Exports\\" + fileExportName;
                            context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileExportName);
                            context.Response.WriteFile(exportPath);
                            context.Response.Flush();
                            File.Delete(exportPath);
                        }
                        else
                        {
                            exportPath     = Utility.GetRootPath() + Contanst.rootProject + "\\" + project.Title + "\\Exports\\" + file.FileName;
                            translatedFile = exportPath.Replace(fileExt, $"_Export{fileExt}");
                            context.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.FileName);
                            context.Response.WriteFile(translatedFile);
                            context.Response.Flush();
                            File.Delete(translatedFile);
                        }
                        context.Response.SuppressContent = true;
                        context.ApplicationInstance.CompleteRequest();
                    }
                }
            }
            catch (Exception ex)
            {
                //context.Response.ContentType = "text/plain";
                context.Response.Write(ex.Message);
            }
        }
示例#8
0
        public IActionResult Index(String wort, String Zielsprache)
        {
            TranslateModel tm = new TranslateModel("maitenant tout est parfait");

            ViewData["phrase"] = tm.translatePhrase();
            tm.setPhrase(wort);
            tm.setZielsprache(Zielsprache);
            ViewData["phrase2"] = tm.translatePhrase();

            ViewData["zielsprache"] = Zielsprache;

            var model = new ZielspracheViewModel();

            return(View(model));
        }
示例#9
0
 public override void OnMessage(string message)
 {
     try
     {
         TranslateMessage translateMessage;
         if (!string.IsNullOrEmpty(message))
         {
             TranslateModel translateModel = new TranslateModel();
             translateMessage = JsonConvert.DeserializeObject <TranslateMessage>(message);
             Task taskHandlingMessage = HandlingMessage(translateMessage, translateModel);
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
示例#10
0
 private bool GetUserPermission(int userId, int projectId)
 {
     try
     {
         TranslateModel       translateModel = new TranslateModel();
         ApplicationDbContext appDb          = new ApplicationDbContext();
         List <Role>          lstUserRoles   = appDb.GetUserRoleId(SessionUser.GetUserId());
         if (lstUserRoles.Any(r => r.Id == (int)UserRoles.Admin))
         {
             return(true);
         }
         return(translateModel.GetUserPermission(userId, projectId));
     }
     catch (Exception)
     {
         return(false);
     }
 }
        public ServiceResult GetSugestion(String listTexsegment)
        {
            ServiceResult sResult = new ServiceResult();

            try
            {
                var user = HttpContext.Current.User;
                if (user.Identity.IsAuthenticated)
                {
                    TranslateModel     translateModel = new TranslateModel();
                    List <TextSegment> lstTextSegment = JsonConvert.DeserializeObject <List <TextSegment> >(listTexsegment);
                    if (lstTextSegment.Count > 0)
                    {
                        var projectId = lstTextSegment[0].ProjectId;
                        List <ReferenceDB> lstReferenceDB = new List <ReferenceDB>();
                        lstReferenceDB = translateModel.GetConditionData(projectId);
                        List <Int32> lstProjectIDRef = new List <int>();
                        foreach (ReferenceDB itReferenceDB in lstReferenceDB)
                        {
                            lstProjectIDRef.Add(itReferenceDB.ProjectReferID);
                        }
                        lstProjectIDRef.Add(projectId);
                        TextSuggestion oTextSuggestion = new TextSuggestion();

                        foreach (var item in lstTextSegment)
                        {
                            oTextSuggestion = translateModel.GetSuggestion(item.TextSegment1, lstProjectIDRef);
                            if (oTextSuggestion != null)
                            {
                                item.Suggestion = oTextSuggestion.TextSegment2;
                            }
                        }
                    }
                    sResult.Value = lstTextSegment;
                }
            }
            catch (Exception ex)
            {
                sResult.IsSuccess = false;
                sResult.Message   = "Some word can't get suggestion !";
            }
            return(sResult);
        }
        public void ShouldReturnNull()
        {
            WriteToConfig writeToConfig = new WriteToConfig();

            writeToConfig.TargetConsole = false;
            writeToConfig.TargetDB      = false;

            IOptions <WriteToConfig> options = Options.Create <WriteToConfig>(writeToConfig);

            var controller = new HelloWorldAPI.Controllers.TranslateController(options);

            TranslateModel wordToTranslate = new TranslateModel();

            wordToTranslate.Culture = "zn-ZN";
            wordToTranslate.Word    = "helloWorld";

            var result = controller.Get(wordToTranslate);

            Assert.Equal(null, result);
        }
        public void ShouldReturnErrorCode()
        {
            WriteToConfig writeToConfig = new WriteToConfig();

            writeToConfig.TargetConsole = false;
            writeToConfig.TargetDB      = false;

            IOptions <WriteToConfig> options = Options.Create <WriteToConfig>(writeToConfig);

            var controller = new HelloWorldAPI.Controllers.TranslateController(options);

            TranslateModel wordToTranslate = new TranslateModel();

            wordToTranslate.Culture = "en-US";
            wordToTranslate.Word    = "SuperCallousFragileMysticHexedByHalitosis";

            var result = controller.Get(wordToTranslate);

            Assert.Equal("-1", result);
        }
示例#14
0
        public async Task Translate(CommandContext ctx, string language, string target, [RemainingText] string text)
        {
            HttpClient client = new HttpClient();

            HttpRequestMessage request = new HttpRequestMessage
            {
                Method     = HttpMethod.Post,
                RequestUri = new Uri("https://google-translate1.p.rapidapi.com/language/translate/v2"),
                Headers    =
                {
                    { "x-rapidapi-key",  Startup.Configuration.RapidApiKey  },
                    { "x-rapidapi-host", "google-translate1.p.rapidapi.com" }
                },
                Content = new FormUrlEncodedContent(new Dictionary <string, string>
                {
                    { "q", text },
                    { "target", target },
                    { "source", language }
                })
            };

            using (HttpResponseMessage response = await client.SendAsync(request))
            {
                response.EnsureSuccessStatusCode();
                string body = await response.Content.ReadAsStringAsync();

                TranslateModel translation = JsonConvert.DeserializeObject <TranslateModel>(body);

                DiscordEmbedBuilder embed = new DiscordEmbedBuilder
                {
                    Title       = "Translation",
                    Description = $"Source language: `{language}`, target language: `{target}`\n" +
                                  $"Text: `{text}`\n" +
                                  $"Translation: `{translation.Data.Translations[0].Content}`"
                };

                await ctx.RespondAsync(embed.Build());
            }
        }
示例#15
0
        public ActionResult Edit(TranslateModel inmodel)
        {
            var model = CreateModel(inmodel.TextKey);

            model.Text = inmodel.Text;
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                var prompt = _repository.GetPrompt(CultureInfo.CurrentUICulture, new ViewPromptKey(inmodel.TextKey));
                _repository.Save(CultureInfo.CurrentUICulture, prompt.ViewPath, prompt.TextName, inmodel.Text);
                return(RedirectToAction("Index"));
            }
            catch (Exception err)
            {
                ModelState.AddModelError("", err.Message);
                return(View(model));
            }
        }
        public async Task <TranslateModel> FetchTranslate(string from, string to, string text)
        {
            try
            {
                using (HttpClient client = new HttpClient())
                    using (HttpResponseMessage response = await client.GetAsync(
                               "https://translation.googleapis.com/language/translate/v2?key=AIzaSyDnnlklIb2lddAcerawuzZJEz7BIovYOM4&q=" +
                               text + "&source=" + from + "&target=" + to).ConfigureAwait(true))

                        using (HttpContent content = response.Content)
                        {
                            string result = await content.ReadAsStringAsync().ConfigureAwait(true);

                            TranslateModel translation = JsonConvert.DeserializeObject <TranslateModel>(result);
                            return(translation);
                        }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return(null);
        }
示例#17
0
        //public ActionResult Index()
        //{
        //    return View();
        //}

        public ActionResult Index()
        {
            if (User.Identity.IsAuthenticated)
            {
                ViewBag.ProjectId = Request.QueryString["projectId"];
                ViewBag.FileId    = Request.QueryString["fileId"];
                ViewBag.UserId    = SessionUser.GetUserId();
                TranslateModel translateModel = new TranslateModel();
                if (ViewBag.ProjectId != null && ViewBag.FileId != null)
                {
                    ProjectFile oProjectFile = translateModel.GetFile(Convert.ToInt32(ViewBag.ProjectId), Convert.ToInt32(ViewBag.FileId));
                    if (oProjectFile != null)
                    {
                        ViewBag.TargetLang = oProjectFile.TargetLang;
                    }
                }
                return(View());
            }
            else
            {
                return(View("Error"));
            }
        }
        public async Task<JsonResult> Translate(TranslateModel translateModel)
        {
            HttpClient client = new HttpClient();

            apiUrl = string.Format(apiUrl, translateModel.LanguageSource, translateModel.LanguageDestinaton, translateModel.Source);

            string translateResponse = await client.GetStringAsync(apiUrl);

            ResponseModel responseModel = JsonConvert.DeserializeObject<ResponseModel>(translateResponse);

            if (string.IsNullOrEmpty(responseModel.Message) && responseModel.Code == 200)
            {
                translateModel.Destination = string.Join(",", responseModel.Text);
                translateModel.IsSuccess = true;
                Upsert(translateModel.Source);
            }
            else
            {
                translateModel.ErrorText = responseModel.Message;
            }

            return Json(translateModel, JsonRequestBehavior.AllowGet);
        }
        private void BtnTranslate_Click(object sender, RoutedEventArgs e)
        {
            API api = API.Init();

            api.Translate(TbKey.Text, FromLanguage.Short, ToLanguage.Short, new Action <TranslateModel>((mod) =>
            {
                if (mod == null)
                {
                    MessageBox.Show("翻译失败!");
                }
                base.Dispatcher.Invoke(new Action(() =>
                {
                    TranslateModels = mod;
                    if (mod.Word_Name != null)
                    {
                        Word_Panel.Visibility = Visibility.Visible;
                    }
                    else
                    {
                        Word_Panel.Visibility = Visibility.Collapsed;
                    }
                }));
            }));
        }
示例#20
0
        public Boolean BuildExportFile()
        {
            try
            {
                TranslateModel translateModel = new TranslateModel();
                Project        project        = translateModel.GetProject(_projectId);
                ProjectFile    file           = translateModel.GetFile(_projectId, _fileId);
                if (project != null && file != null)
                {
                    this.fileName = file.FileName;
                    string rootPath   = Utility.GetRootPath();
                    string importPath = rootPath + Contanst.rootProject + "\\" + project.Title + "\\Imports";
                    string exportPath = rootPath + Contanst.rootProject + "\\" + project.Title + "\\Exports";
                    if (Directory.Exists(exportPath))
                    {
                        Directory.CreateDirectory(exportPath);
                    }
                    this.filePath = importPath + "\\" + file.FileName;
                    if (!File.Exists(this.filePath))
                    {
                        throw new Exception("File don't exits!");
                    }
                    exportPath = exportPath + "\\" + file.FileName;
                    var fileExt = Path.GetExtension(file.FileName);
                    if (fileExt == null)
                    {
                        throw new Exception("Extension file error");
                    }
                    this.translatedFile = exportPath.Replace(fileExt, $"_Export{fileExt}");
                    string fileNameExport = Path.GetFileName(translatedFile);
                    try
                    {
                        File.Copy(filePath, translatedFile, true);
                    }
                    catch (Exception)
                    {
                        Random r = new Random();
                        translatedFile = filePath.Replace(fileExt, $"_r" + r.Next(100, 999) + "_vn" + fileExt);
                        fileNameExport = Path.GetFileName(translatedFile);
                        File.Copy(filePath, translatedFile, true);
                    }
                    switch (fileExt)
                    {
                    case ".xls":
                    case ".xlsx":
                        using (var excel = new ExcelHelper(translatedFile, false))
                        {
                            try
                            {
                                List <TextSegment> lstTextSegment         = translateModel.GetTextSegment(this._projectId, this._fileId);
                                List <TextSegment> lstTextSegmentNoExists = new List <TextSegment>();
                                foreach (var item in lstTextSegment)
                                {
                                    var textSegment = lstTextSegment.Where(a => !String.IsNullOrEmpty(a.TextSegment2) && a.TextSegment1 == item.TextSegment1 && String.IsNullOrEmpty(item.TextSegment2)).FirstOrDefault();
                                    if (textSegment != null)
                                    {
                                        lstTextSegmentNoExists.Add(new TextSegment()
                                        {
                                            TextSegment1 = item.TextSegment1, TextSegment2 = textSegment.TextSegment2, Type = item.Type, Row = item.Row, Col = item.Col, SheetName = item.SheetName, IsSheetName = item.IsSheetName, SheetIndex = item.SheetIndex
                                        });
                                    }
                                    else
                                    {
                                        lstTextSegmentNoExists.Add(new TextSegment()
                                        {
                                            TextSegment1 = item.TextSegment1, TextSegment2 = item.TextSegment2, Type = item.Type, Row = item.Row, Col = item.Col, SheetName = item.SheetName, IsSheetName = item.IsSheetName, SheetIndex = item.SheetIndex
                                        });
                                    }
                                }
                                lstTextSegmentNoExists = lstTextSegmentNoExists.OrderByDescending(x => x.TextSegment1.Length).ToList();
                                int count = lstTextSegmentNoExists.Count == 0 ? 1 : lstTextSegmentNoExists.Count;
                                foreach (TextSegment itTextSegment in lstTextSegmentNoExists)
                                {
                                    //try
                                    //{
                                    //    loading.UpdateProcessStatus(i * 100 / count);
                                    //}
                                    //catch (Exception)
                                    //{
                                    //    continue;
                                    //}
                                    //finally
                                    //{
                                    if (!string.IsNullOrEmpty(itTextSegment.TextSegment2))
                                    {
                                        if ((TextSegmentType)itTextSegment.Type == TextSegmentType.TEXT)
                                        {
                                            excel.ReplaceText(itTextSegment.TextSegment1, itTextSegment.TextSegment2, Convert.ToInt32(itTextSegment.Row), Convert.ToInt32(itTextSegment.Col), itTextSegment.SheetName, Convert.ToBoolean(itTextSegment.IsSheetName), Convert.ToInt32(itTextSegment.SheetIndex));     // Replace all text segment in words
                                        }
                                        else
                                        {
                                            excel.ReplaceObject(itTextSegment.TextSegment1, itTextSegment.TextSegment2);
                                        }
                                    }
                                }
                                excel.Save();
                            }
                            catch (Exception ex)
                            {
                                throw ex;
                            }
                        }
                        break;

                    case ".doc":
                    case ".docx":
                        using (var word = new WordHelper(translatedFile))
                        {
                            List <TextSegment> lstTextSegment = translateModel.GetTextSegment(this._projectId, this._fileId);
                            lstTextSegment = lstTextSegment.OrderByDescending(x => x.TextSegment1.Length).ToList();
                            int count = lstTextSegment.Count == 0 ? 1 : lstTextSegment.Count;
                            foreach (TextSegment itTextSegment in lstTextSegment)
                            {
                                //try
                                //{
                                //    loading.UpdateProcessStatus(i * 100 / count);
                                //}
                                //catch (Exception)
                                //{
                                //    continue;
                                //}
                                //finally
                                //{
                                if (!string.IsNullOrEmpty(itTextSegment.TextSegment2))
                                {
                                    if ((TextSegmentType)itTextSegment.Type == TextSegmentType.TEXT)
                                    {
                                        word.ReplaceText(itTextSegment.TextSegment1, itTextSegment.TextSegment2);     // Replace all text segment in words
                                    }
                                    else
                                    {
                                        word.ReplaceObject(itTextSegment.TextSegment1, itTextSegment.TextSegment2);
                                    }
                                }
                                //}
                            }
                            word.Save();
                        }
                        break;

                    case ".ppt":
                    case ".pptx":
                        using (var powerpoint = new PowerPointHelper(translatedFile))
                        {
                            List <TextSegment> lstTextSegment = translateModel.GetTextSegment(this._projectId, this._fileId);
                            lstTextSegment = lstTextSegment.OrderByDescending(x => x.TextSegment1.Length).ToList();
                            int count = lstTextSegment.Count == 0 ? 1 : lstTextSegment.Count;
                            foreach (TextSegment itTextSegment in lstTextSegment)
                            {
                                //try
                                //{
                                //    loading.UpdateProcessStatus(i * 100 / count);
                                //}
                                //catch (Exception)
                                //{
                                //    continue;
                                //}
                                //finally
                                //{
                                if (!string.IsNullOrEmpty(itTextSegment.TextSegment2))
                                {
                                    powerpoint.ReplaceObject(itTextSegment.TextSegment1, itTextSegment.TextSegment2);
                                }
                            }
                            powerpoint.Save();
                        }
                        break;

                    case ".pdf":

                        break;

                    default:
                        break;
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#21
0
        /// <summary>
        /// 翻译接口
        /// </summary>
        public void Translate(string key, string form, string to, Action <TranslateModel> action)
        {
            //地址http://fanyi.baidu.com/v2transapi
            // from: zh
            // to:en
            // query:1
            // transtype: realtime
            // simple_means_flag:3
            Dictionary <string, string> parameters = new Dictionary <string, string>
            {
                { "from", form },
                { "to", to },
                { "query", key.Replace("\r\n", "%0A") },
                { "transtype", "realtime" },
                { "simple_means_flag", "3" }
            };
            string poststr = "http://fanyi.baidu.com/v2transapi";

            TranslateModel mod = new TranslateModel()
            {
                Data       = new List <Result>(),
                Word_Means = new List <string>()
            };

            HTTP.Open(parameters, poststr, null,
                      new Action <string>((str) =>
            {
                JObject obj          = JsonConvert.DeserializeObject <JObject>(str);
                JObject trans_result = (JObject)obj["trans_result"];
                //data为结果集合
                if (obj["dict_result"] is JObject dict_result)               //简明释义
                {
                    if (dict_result["simple_means"] is JObject simple_means) //simple_means
                    {
                        if (simple_means["word_means"] is JArray word_means)
                        {
                            foreach (var item in word_means)
                            {
                                mod.Word_Means.Add(item.ToString());
                            }
                        }
                        if (simple_means["symbols"] is JArray symbols)
                        {
                            if (symbols[0] is JObject symbol)
                            {
                                if (symbol["symbol_mp3"] is Object Symbol_Mp3)
                                {
                                    mod.Symbol_Mp3 = Symbol_Mp3.ToString();
                                }
                                if (symbol["word_symbol"] is Object Word_Symbol)
                                {
                                    string temp = Word_Symbol.ToString();
                                    if (temp != null && temp != "")
                                    {
                                        mod.Word_Symbol = "[" + temp + "]";
                                    }
                                }
                            }
                        }
                        mod.Word_Name = simple_means["word_name"].ToString();
                    }
                }
                //try
                //{
                //    JObject liju_result = (JObject)obj["liju_result"];
                //    JValue logid = (JValue)obj["logid"];
                //}
                //catch (Exception)
                //{
                //    MessageBox.Show("翻译服务器出错!");
                //}
                if (trans_result != null)
                {
                    JArray data = (JArray)trans_result["data"];
                    foreach (JObject item in data)
                    {
                        var re = new Result()
                        {
                            DST = item["dst"].ToString(), SRC = item["src"].ToString()
                        };
                        mod.Data.Add(re);
                        mod.DataString += re.DST + "\r\n";
                    }
                }
                action(mod);
            }), new Action <Exception>((ex) => {
                action(mod);
            }));
        }
 public void Translate(TranslateModel input)
 {
     PostManager.Translate(input.Id, input.Title, input.Content);
 }
示例#23
0
        public ActionResult BuildExportFile(int projectId, int fileId)
        {
            ControllerResult cResult    = new ControllerResult();
            JsonResult       jsonResult = new JsonResult();

            if (User.Identity.IsAuthenticated && GetUserPermission(SessionUser.GetUserId(), projectId))
            {
                Thread thrGetText = new Thread(new ThreadStart(() =>
                {
                    #region "build file export"
                    try
                    {
                        TranslateModel translateModel = new TranslateModel();
                        Project project  = translateModel.GetProject(projectId);
                        ProjectFile file = translateModel.GetFile(projectId, fileId);
                        if (project != null && file != null)
                        {
                            string rootPath   = Utility.GetRootPath();
                            string importPath = rootPath + Contanst.rootProject + "\\" + project.Title + "\\Imports";
                            string exportPath = rootPath + Contanst.rootProject + "\\" + project.Title + "\\Exports";
                            if (Directory.Exists(exportPath))
                            {
                                Directory.CreateDirectory(exportPath);
                            }
                            string filePath = importPath + "\\" + file.FileName;
                            if (!System.IO.File.Exists(filePath))
                            {
                                throw new Exception("File don't exits!");
                            }
                            exportPath  = exportPath + "\\" + file.FileName;
                            var fileExt = Path.GetExtension(file.FileName);
                            if (fileExt == null)
                            {
                                throw new Exception("Extension file error");
                            }
                            string translatedFile = exportPath.Replace(fileExt, $"_Export{fileExt}");
                            string fileNameExport = Path.GetFileName(translatedFile);
                            try
                            {
                                int i = 1;
                                while (System.IO.File.Exists(translatedFile))
                                {
                                    translatedFile = exportPath.Replace(fileExt, $"(" + i + ")_Export" + fileExt);
                                    i++;
                                }
                                System.IO.File.Copy(filePath, translatedFile, true);
                            }
                            catch (Exception)
                            {
                                Random r       = new Random();
                                translatedFile = filePath.Replace(fileExt, $"_r" + r.Next(100, 999) + "_vn" + fileExt);
                                fileNameExport = Path.GetFileName(translatedFile);
                                System.IO.File.Copy(filePath, translatedFile, true);
                            }
                            switch (fileExt)
                            {
                            case ".xls":
                            case ".xlsx":
                                using (var excel = new ExcelHelper(translatedFile, false))
                                {
                                    try
                                    {
                                        List <TextSegment> lstTextSegment         = translateModel.GetTextSegment(projectId, fileId);
                                        List <TextSegment> lstTextSegmentNoExists = new List <TextSegment>();
                                        foreach (var item in lstTextSegment)
                                        {
                                            var textSegment = lstTextSegment.Where(a => !String.IsNullOrEmpty(a.TextSegment2) && a.TextSegment1 == item.TextSegment1 && String.IsNullOrEmpty(item.TextSegment2)).FirstOrDefault();
                                            if (textSegment != null)
                                            {
                                                lstTextSegmentNoExists.Add(new TextSegment()
                                                {
                                                    TextSegment1 = item.TextSegment1, TextSegment2 = textSegment.TextSegment2, Type = item.Type, Row = item.Row, Col = item.Col, SheetName = item.SheetName, IsSheetName = item.IsSheetName, SheetIndex = item.SheetIndex
                                                });
                                            }
                                            else if (!String.IsNullOrEmpty(item.TextSegment2))
                                            {
                                                lstTextSegmentNoExists.Add(new TextSegment()
                                                {
                                                    TextSegment1 = item.TextSegment1, TextSegment2 = item.TextSegment2, Type = item.Type, Row = item.Row, Col = item.Col, SheetName = item.SheetName, IsSheetName = item.IsSheetName, SheetIndex = item.SheetIndex
                                                });
                                            }
                                        }
                                        lstTextSegmentNoExists = lstTextSegmentNoExists.OrderByDescending(x => x.TextSegment1.Length).ToList();
                                        foreach (TextSegment itTextSegment in lstTextSegmentNoExists)
                                        {
                                            if (!string.IsNullOrEmpty(itTextSegment.TextSegment2))
                                            {
                                                if ((TextSegmentType)itTextSegment.Type == TextSegmentType.TEXT)
                                                {
                                                    excel.ReplaceText(itTextSegment.TextSegment1, itTextSegment.TextSegment2, Convert.ToInt32(itTextSegment.Row), Convert.ToInt32(itTextSegment.Col), itTextSegment.SheetName, Convert.ToBoolean(itTextSegment.IsSheetName), Convert.ToInt32(itTextSegment.SheetIndex));     // Replace all text segment in words
                                                }
                                                else
                                                {
                                                    excel.ReplaceObject(itTextSegment.TextSegment1, itTextSegment.TextSegment2);
                                                }
                                            }
                                        }
                                        excel.Save();
                                    }
                                    catch (Exception ex)
                                    {
                                        throw ex;
                                    }
                                }
                                break;

                            case ".doc":
                            case ".docx":
                                using (var word = new WordHelper(translatedFile))
                                {
                                    List <TextSegment> lstTextSegment         = translateModel.GetTextSegment(projectId, fileId);
                                    List <TextSegment> lstTextSegmentNoExists = new List <TextSegment>();
                                    foreach (var item in lstTextSegment)
                                    {
                                        var textSegment = lstTextSegment.Where(a => !String.IsNullOrEmpty(a.TextSegment2) && a.TextSegment1 == item.TextSegment1 && String.IsNullOrEmpty(item.TextSegment2)).FirstOrDefault();
                                        if (textSegment != null)
                                        {
                                            lstTextSegmentNoExists.Add(new TextSegment()
                                            {
                                                TextSegment1 = item.TextSegment1, TextSegment2 = textSegment.TextSegment2, Type = item.Type, Row = item.Row, Col = item.Col, SheetName = item.SheetName, IsSheetName = item.IsSheetName, SheetIndex = item.SheetIndex, ParagraphsOrShapeIndex = item.ParagraphsOrShapeIndex
                                            });
                                        }
                                        else if (!String.IsNullOrEmpty(item.TextSegment2))
                                        {
                                            lstTextSegmentNoExists.Add(new TextSegment()
                                            {
                                                TextSegment1 = item.TextSegment1, TextSegment2 = item.TextSegment2, Type = item.Type, Row = item.Row, Col = item.Col, SheetName = item.SheetName, IsSheetName = item.IsSheetName, SheetIndex = item.SheetIndex, ParagraphsOrShapeIndex = item.ParagraphsOrShapeIndex
                                            });
                                        }
                                    }
                                    lstTextSegmentNoExists = lstTextSegmentNoExists.OrderByDescending(x => x.TextSegment1.Length).ToList();
                                    foreach (TextSegment itTextSegment in lstTextSegmentNoExists)
                                    {
                                        if (!string.IsNullOrEmpty(itTextSegment.TextSegment2))
                                        {
                                            if ((TextSegmentType)itTextSegment.Type == TextSegmentType.TEXT)
                                            {
                                                word.ReplaceText(itTextSegment.TextSegment1, itTextSegment.TextSegment2, itTextSegment.ParagraphsOrShapeIndex);     // Replace all text segment in words
                                            }
                                            else
                                            {
                                                word.ReplaceObject(itTextSegment.TextSegment1, itTextSegment.TextSegment2, itTextSegment.ParagraphsOrShapeIndex);
                                            }
                                        }
                                    }
                                    word.Save();
                                }
                                break;

                            case ".ppt":
                            case ".pptx":
                                using (var powerpoint = new PowerPointHelper(translatedFile, false))
                                {
                                    List <TextSegment> lstTextSegment         = translateModel.GetTextSegment(projectId, fileId);
                                    List <TextSegment> lstTextSegmentNoExists = new List <TextSegment>();
                                    foreach (var item in lstTextSegment)
                                    {
                                        var textSegment = lstTextSegment.Where(a => !String.IsNullOrEmpty(a.TextSegment2) && a.TextSegment1 == item.TextSegment1 && String.IsNullOrEmpty(item.TextSegment2)).FirstOrDefault();
                                        if (textSegment != null)
                                        {
                                            lstTextSegmentNoExists.Add(new TextSegment()
                                            {
                                                TextSegment1 = item.TextSegment1, TextSegment2 = textSegment.TextSegment2, Type = item.Type, Row = item.Row, Col = item.Col, SheetName = item.SheetName, IsSheetName = item.IsSheetName, SheetIndex = item.SheetIndex, ParagraphsOrShapeIndex = item.ParagraphsOrShapeIndex
                                            });
                                        }
                                        else if (!String.IsNullOrEmpty(item.TextSegment2))
                                        {
                                            lstTextSegmentNoExists.Add(new TextSegment()
                                            {
                                                TextSegment1 = item.TextSegment1, TextSegment2 = item.TextSegment2, Type = item.Type, Row = item.Row, Col = item.Col, SheetName = item.SheetName, IsSheetName = item.IsSheetName, SheetIndex = item.SheetIndex, ParagraphsOrShapeIndex = item.ParagraphsOrShapeIndex
                                            });
                                        }
                                    }
                                    lstTextSegmentNoExists = lstTextSegmentNoExists.OrderByDescending(x => x.TextSegment1.Length).ToList();
                                    foreach (TextSegment itTextSegment in lstTextSegmentNoExists)
                                    {
                                        if (!string.IsNullOrEmpty(itTextSegment.TextSegment2))
                                        {
                                            powerpoint.ReplaceObject(itTextSegment.TextSegment1, itTextSegment.TextSegment2, itTextSegment.ParagraphsOrShapeIndex);
                                        }
                                    }
                                    powerpoint.Save();
                                }
                                break;

                            case ".pdf":

                                break;

                            default:
                                break;
                            }
                            cResult.IsSuccess = true;
                            cResult.Value     = Path.GetFileName(translatedFile);
                        }
                        else
                        {
                            cResult.IsSuccess = false;
                            cResult.Message   = "Project or file had deleted or don't exits!";
                        }
                    }
                    catch (Exception ex)
                    {
                        cResult.IsSuccess = false;
                        cResult.Message   = "Build export file error!";
                    }
                    #endregion
                }));
                thrGetText.Start();
                thrGetText.Join();
            }
            else
            {
                cResult.IsSuccess = false;
                cResult.Message   = "User don't has permissions!";
            }
            return(Json(cResult));
        }
示例#24
0
        public ActionResult GetTextSegment(int projectId, int fileId)
        {
            JsonResult     jsonResult = new JsonResult();
            SegmentsResult sResult    = new SegmentsResult();

            if (User.Identity.IsAuthenticated && GetUserPermission(SessionUser.GetUserId(), projectId))
            {
                Thread thrGetText = new Thread(new ThreadStart(() =>
                {
                    try
                    {
                        TranslateModel translateModel = new TranslateModel();
                        Project project  = translateModel.GetProject(projectId);
                        ProjectFile file = translateModel.GetFile(projectId, fileId);
                        if (project != null && file != null)
                        {
                            sResult.FileName    = file.FileName;
                            sResult.ProjectName = project.Title;
                            string importFile   = Utility.GetRootPath() + Contanst.rootProject + "\\" + project.Title + "\\Imports\\" + file.FileName;
                            var extFile         = Path.GetExtension(importFile);
                            switch (extFile)
                            {
                            case ".xls":
                            case ".xlsx":
                                sResult.FileType = (int)FileTypes.EXCEL;
                                if (System.IO.File.Exists(importFile) && file.IsLoadText == true)
                                {
                                    List <TextSegment> lstPureTextSegment = translateModel.GetTextSegment(projectId, fileId);
                                    List <TextSegment> lstTextSegment     = new List <TextSegment>();
                                    foreach (var textSegment in lstPureTextSegment)
                                    {
                                        int iRow = textSegment.Row != null ? Convert.ToInt32(textSegment.Row) : -1;
                                        int iCol = textSegment.Col != null ? Convert.ToInt32(textSegment.Col) : -1;
                                        if (!(lstTextSegment.Any(a => a.TextSegment1 == textSegment.TextSegment1) && iRow != -1 && iCol != -1))                          //&& iRow != -1 && iCol != -1
                                        {
                                            lstTextSegment.Add(textSegment);
                                        }
                                    }

                                    sResult.ControllerResult.Value = lstTextSegment;
                                }
                                else if (System.IO.File.Exists(importFile) && file.IsLoadText == false)
                                {
                                    List <TextRead> segments = new List <TextRead>();
                                    List <TextRead> objects  = new List <TextRead>();
                                    using (var excel = new ExcelHelper(importFile, true))
                                    {
                                        segments = excel.GetTextSegment();
                                        objects  = excel.GetTextObject();
                                    }
                                    List <TextSegment> lstTextSegment = translateModel.GetTextSegment(projectId, fileId);
                                    List <TextRead> lstTextSegments   = new List <TextRead>();
                                    List <TextRead> lstTextObjects    = new List <TextRead>();
                                    foreach (var item in segments)
                                    {
                                        if (!lstTextSegment.Any(a => a.Row == item.Row && a.Col == item.Col && a.SheetName == item.SheetName && a.TextSegment1 == item.Value))
                                        {
                                            lstTextSegments.Add(item);
                                        }
                                    }
                                    foreach (var item in objects)
                                    {
                                        if (!lstTextSegment.Any(a => a.Row == item.Row && a.Col == item.Col && a.SheetName == item.SheetName && a.TextSegment1 == item.Value))
                                        {
                                            lstTextObjects.Add(item);
                                        }
                                    }
                                    var insertedTxt = translateModel.BatchInsert(lstTextSegments, fileId, projectId, (int)FileTypes.EXCEL, (int)TextSegmentType.TEXT);
                                    var insertedObj = translateModel.BatchInsert(lstTextObjects, fileId, projectId, (int)FileTypes.EXCEL, (int)TextSegmentType.OBJECT);
                                    translateModel.UpdateStatusFileTranslate(projectId, fileId, true);

                                    List <TextSegment> lstPureTextSegment = translateModel.GetTextSegment(projectId, fileId);
                                    List <TextSegment> lstSegments        = new List <TextSegment>();
                                    foreach (var textSegment in lstPureTextSegment)
                                    {
                                        int iRow = textSegment.Row != null ? Convert.ToInt32(textSegment.Row) : -1;
                                        int iCol = textSegment.Col != null ? Convert.ToInt32(textSegment.Col) : -1;
                                        if (!(lstSegments.Any(a => a.TextSegment1 == textSegment.TextSegment1) && iRow != -1 && iCol != -1))                         //&& iRow != -1 && iCol != -1
                                        {
                                            lstSegments.Add(textSegment);
                                        }
                                    }
                                    sResult.ControllerResult.Value = lstSegments;
                                }
                                else
                                {
                                    sResult.ControllerResult.IsSuccess = false;
                                    sResult.ControllerResult.Message   = "Physical file don't exist in server!";
                                }
                                break;

                            case ".doc":
                            case ".docx":
                                sResult.FileType = (int)FileTypes.WORD;
                                if (System.IO.File.Exists(importFile) && file.IsLoadText == true)
                                {
                                    List <TextSegment> lstTextSegment = translateModel.GetTextSegment(projectId, fileId);
                                    sResult.ControllerResult.Value    = lstTextSegment;
                                }
                                else if (System.IO.File.Exists(importFile) && file.IsLoadText == false)
                                {
                                    List <TextRead> segments = new List <TextRead>();
                                    List <TextRead> objects  = new List <TextRead>();
                                    using (var word = new WordHelper(importFile, true))
                                    {
                                        segments = word.GetTextSegmentInWord();
                                        objects  = word.GetTextObjectInWord();
                                    }
                                    List <TextSegment> lstTextSegment = translateModel.GetTextSegment(projectId, fileId);
                                    List <TextRead> lstTextSegments   = new List <TextRead>();
                                    List <TextRead> lstTextObjects    = new List <TextRead>();
                                    foreach (var item in segments)
                                    {
                                        if (!lstTextSegment.Any(a => a.TextSegment1 == item.Value && a.ParagraphsOrShapeIndex == item.ParagraphsOrShapeIndex))
                                        {
                                            lstTextSegments.Add(item);
                                        }
                                    }
                                    foreach (var item in objects)
                                    {
                                        if (!lstTextSegment.Any(a => a.TextSegment1 == item.Value && a.ParagraphsOrShapeIndex == item.ParagraphsOrShapeIndex))
                                        {
                                            lstTextObjects.Add(item);
                                        }
                                    }
                                    var insertedTxt = translateModel.BatchInsert(lstTextSegments, fileId, projectId, (int)FileTypes.WORD, (int)TextSegmentType.TEXT);
                                    var insertedObj = translateModel.BatchInsert(lstTextObjects, fileId, projectId, (int)FileTypes.WORD, (int)TextSegmentType.OBJECT);

                                    translateModel.UpdateStatusFileTranslate(projectId, fileId, true);
                                    List <TextSegment> lstPureTextSegment = translateModel.GetTextSegment(projectId, fileId);
                                    List <TextSegment> lstSegments        = new List <TextSegment>();
                                    foreach (var textSegment in lstPureTextSegment)
                                    {
                                        if (!(lstSegments.Any(a => a.TextSegment1 == textSegment.TextSegment1)))
                                        {
                                            lstSegments.Add(textSegment);
                                        }
                                    }
                                    sResult.ControllerResult.Value = lstSegments;
                                }
                                else
                                {
                                    sResult.ControllerResult.IsSuccess = false;
                                    sResult.ControllerResult.Message   = "Physical file don't exist in server!";
                                }
                                break;

                            case ".ppt":
                            case ".pptx":
                                sResult.FileType = (int)FileTypes.POWERPOINT;
                                if (System.IO.File.Exists(importFile) && file.IsLoadText == true)
                                {
                                    List <TextSegment> lstTextSegment = translateModel.GetTextSegment(projectId, fileId);
                                    sResult.ControllerResult.Value    = lstTextSegment;
                                }
                                else if (System.IO.File.Exists(importFile) && file.IsLoadText == false)
                                {
                                    List <TextRead> textSegments = new List <TextRead>();
                                    using (var powerpoint = new PowerPointHelper(importFile))
                                    {
                                        textSegments = powerpoint.GetTexts();
                                    }
                                    List <TextSegment> lstTextSegment = translateModel.GetTextSegment(projectId, fileId);
                                    List <TextRead> lstTextSegments   = new List <TextRead>();
                                    foreach (var item in textSegments)
                                    {
                                        if (!lstTextSegment.Any(a => a.TextSegment1 == item.Value && a.ParagraphsOrShapeIndex == item.ParagraphsOrShapeIndex))
                                        {
                                            lstTextSegments.Add(item);
                                        }
                                    }
                                    var insertedTxt = translateModel.BatchInsert(lstTextSegments, fileId, projectId, (int)FileTypes.WORD, (int)TextSegmentType.OBJECT);

                                    translateModel.UpdateStatusFileTranslate(projectId, fileId, true);
                                    List <TextSegment> lstPureTextSegment = translateModel.GetTextSegment(projectId, fileId);
                                    List <TextSegment> lstSegments        = new List <TextSegment>();
                                    foreach (var textSegment in lstPureTextSegment)
                                    {
                                        if (!(lstSegments.Any(a => a.TextSegment1 == textSegment.TextSegment1)))
                                        {
                                            lstSegments.Add(textSegment);
                                        }
                                    }
                                    sResult.ControllerResult.Value = lstSegments;
                                }
                                else
                                {
                                    sResult.ControllerResult.IsSuccess = false;
                                    sResult.ControllerResult.Message   = "Physical file don't exist in server!";
                                }
                                break;

                            case ".pdf":
                                //not yet complete
                                break;

                            default:
                                break;
                            }
                        }
                        else
                        {
                            sResult.ControllerResult.IsSuccess = false;
                            sResult.ControllerResult.Message   = "Project or file don't exist!";
                        }
                    }
                    catch (Exception ex)
                    {
                        sResult.ControllerResult.IsSuccess = false;
                        if (ex.Message == "Exception from HRESULT: 0x800AC472")
                        {
                            sResult.ControllerResult.Message = "Office driver is busying can't call to Interop service or office on server don't actived!";
                        }
                        else
                        {
                            sResult.ControllerResult.Message = ex.Message;
                        }
                    }
                    jsonResult = Json(sResult, JsonRequestBehavior.AllowGet);
                    jsonResult.MaxJsonLength = Int32.MaxValue;
                }));
                thrGetText.Start();
                thrGetText.Join();
            }
            else
            {
                sResult.ControllerResult.IsSuccess = false;
                sResult.ControllerResult.Message   = "User don't has permissions!";
            }
            return(jsonResult);
        }
 /// <summary>
 /// 将给定的表结构信息转换成完整表名
 /// </summary>
 /// <param name="table"></param>
 /// <returns></returns>
 public static string GetTableName(TranslateModel.Table table)
 {
     var tableName = string.Empty;
     tableName = string.Format("{0}[{1}]", tableName, table.Name);
     return tableName;
 }