public static string AddToAbsolutelyPos(string origin, string addContent, int addIndex, Languages language) { StringBuilder languageLine = new StringBuilder(""); if (language != Languages.Chinese) { addContent = TranslateElement.ToDBC(addContent); } int count = 0; for (int p = 0; p < origin.Length; ++p) { char c = origin[p]; if (IsLanguage(c, language)) { if (count == addIndex) { languageLine.Append(addContent); } languageLine.Append(c); count++; } else { languageLine.Append(c); } } if (count == addIndex) { languageLine.Append(addContent); } return(languageLine.ToString()); }
public Translator(string pathOri, Languages languagesOri, string pathTarget, Languages languagesTarget) { oriLanguages = languagesOri; targetLanguages = languagesTarget; string[] arr = File.ReadAllLines(pathOri); for (int i = 0, imax = arr.Length; i < imax; i++) { LanguagesElement element = new LanguagesElement(languagesOri, arr[i]); lstWaitingTranslate.Add(element); } arr = File.ReadAllLines(pathTarget); for (int i = 0, imax = arr.Length; i < imax; i++) { string[] arrLine = arr[i].Split(','); TranslateElement ele = new TranslateElement(arrLine[0], arrLine[1], languagesOri, arrLine[2], languagesTarget); dicTranslateResult.Add(ele.key, ele); } }
public void Translate(string output, string errorOutput) { StreamWriter sw = new StreamWriter(output, false, Encoding.UTF8); StreamWriter swError = new StreamWriter(errorOutput, false, Encoding.UTF8); for (int p = 0, pmax = lstWaitingTranslate.Count; p < pmax; p++) { LanguagesElement curEle = lstWaitingTranslate[p]; if (!dicTranslateResult.ContainsKey(curEle.key)) { Debug.LogError("Do not exist translate key:" + curEle.key); continue; } TranslateElement tEle = dicTranslateResult[curEle.key]; List <MyArguments> curWaitingArguments = curEle.arguemnts; string result = string.Empty; bool needRecordQuestion = false; bool useTargetTransalte = false; if (curEle.originText == tEle.originLanguages.originText) { result = tEle.targetLanguages.originText; useTargetTransalte = true; } else { result = tEle.targetLanguages.key; for (int i = 0, imax = curWaitingArguments.Count; i < imax; i++) { MyArguments curTemp = curWaitingArguments[i]; for (int j = 0, jmax = tEle.originLanguages.arguemnts.Count; j < jmax; j++) { MyArguments temp = tEle.originLanguages.arguemnts[j]; if (temp.index == curTemp.index) { if (!tEle.dicArgumentIndex.ContainsKey(j)) { needRecordQuestion = true; continue; } int tryToFind = tEle.dicArgumentIndex[j]; if (tEle.targetLanguages.arguemnts.Count <= tryToFind) { string tempStr = string.Format("\nCouldn't find argument pos :{0}", temp.argument); Debug.LogError(tempStr); break; } int addIndex = tEle.targetLanguages.arguemnts[tryToFind].index; result = AddToAbsolutelyPos(result, curTemp.argument, addIndex, targetLanguages); break; } } } } if (!useTargetTransalte && (needRecordQuestion || !string.IsNullOrEmpty(tEle.errorStr))) { string errorLine = string.Format("{0},{1},{2}", curEle.originText, result, tEle.errorStr); swError.WriteLine(errorLine); } curEle.translateResult = result; string newLine = string.Format("{2},{0},{1}", curEle.originText, curEle.translateResult, "Key" + (p + 1)); sw.WriteLine(newLine); // Debug.Log(string.Format("原文:{0} \n译文:{1}", curEle.originText, curEle.translateResult)); // tEle.originLanguages.arguemnts } sw.Close(); swError.Close(); }