// LanguageCodeFrom can be "auto" // After the translation is returned from Google, it will call OnTranslationReady(TranslationResult, ErrorMsg) // TranslationResult will be null if translation failed public static void Translate(string text, string LanguageCodeFrom, string LanguageCodeTo, Action <string, string> OnTranslationReady) { TranslationDictionary queries = new TranslationDictionary(); LanguageCodeTo = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeTo); if (LanguageCodeTo == LanguageCodeFrom) { OnTranslationReady(text, null); return; } // Unsupported language if (string.IsNullOrEmpty(LanguageCodeTo)) { OnTranslationReady(string.Empty, null); return; } CreateQueries(text, LanguageCodeFrom, LanguageCodeTo, queries); // can split plurals into several queries Translate(queries, (results, error) => { if (!string.IsNullOrEmpty(error) || results.Count == 0) { OnTranslationReady(null, error); return; } string result = RebuildTranslation(text, queries, LanguageCodeTo); // gets the result from google and rebuilds the text from multiple queries if its is plurals OnTranslationReady(result, null); }); }
public static WWW GetTranslationWWW(TranslationDictionary requests, bool usePOST = true) { #if !UNITY_5_6_OR_NEWER usePOST = false; #endif var sb = new StringBuilder(); foreach (var kvp in requests) { var request = kvp.Value; if (sb.Length > 0) { sb.Append("<I2Loc>"); } sb.Append(GoogleLanguages.GetGoogleLanguageCode(request.LanguageCode)); sb.Append(":"); for (int i = 0; i < request.TargetLanguagesCode.Length; ++i) { if (i != 0) { sb.Append(","); } sb.Append(GoogleLanguages.GetGoogleLanguageCode(request.TargetLanguagesCode[i])); } sb.Append("="); var text = (TitleCase(request.Text) == request.Text) ? request.Text.ToLowerInvariant() : request.Text; if (usePOST) { sb.Append(text); } else { sb.Append(Uri.EscapeDataString(text)); if (sb.Length > 4000) { break; } } } if (usePOST) { WWWForm form = new WWWForm(); form.AddField("action", "Translate"); form.AddField("list", sb.ToString()); WWW www = new WWW(LocalizationManager.GetWebServiceURL(), form); return(www); } else { string url = string.Format("{0}?action=Translate&list={1}", LocalizationManager.GetWebServiceURL(), sb.ToString()); //Debug.Log(url); return(new WWW(url)); } }
void TranslateAllToLanguage(string lanName) { if (!GoogleTranslation.CanTranslate()) { ShowError("WebService is not set correctly or needs to be reinstalled"); return; } ClearErrors(); int LanIndex = mLanguageSource.GetLanguageIndex(lanName); string code = mLanguageSource.mLanguages [LanIndex].Code; string googleCode = GoogleLanguages.GetGoogleLanguageCode(code); if (string.IsNullOrEmpty(googleCode)) { ShowError("Language '" + code + "' is not supported by google translate"); return; } googleCode = code; mTranslationTerms.Clear(); mTranslationRequests.Clear(); foreach (var termData in mLanguageSource.mTerms) { if (termData.TermType != eTermType.Text) { continue; } if (!string.IsNullOrEmpty(termData.Languages[LanIndex])) { continue; } string sourceCode, sourceText; FindTranslationSource(LanguageSourceData.GetKeyFromFullTerm(termData.Term), termData, code, null, out sourceText, out sourceCode); mTranslationTerms.Add(termData.Term); GoogleTranslation.CreateQueries(sourceText, sourceCode, googleCode, mTranslationRequests); // can split plurals into several queries } if (mTranslationRequests.Count == 0) { StopConnectionWWW(); return; } mConnection_WWW = null; mConnection_Text = "Translating"; if (mTranslationRequests.Count > 1) { mConnection_Text += " (" + mTranslationRequests.Count + ")"; } mConnection_Callback = null; //EditorApplication.update += CheckForConnection; GoogleTranslation.Translate(mTranslationRequests, OnLanguageTranslated); }
public static WWW GetTranslationWWW(string text, string LanguageCodeFrom, string LanguageCodeTo) { LanguageCodeFrom = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeFrom); LanguageCodeTo = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeTo); if (TitleCase(text) == text && text.ToUpper() != text) { text = text.ToLower(); } return(new WWW($"{LocalizationManager.GetWebServiceURL()}?action=Translate&list={LanguageCodeFrom}:{LanguageCodeTo}={Uri.EscapeUriString(text)}")); }
static WWW GetTranslationWWW(string text, string LanguageCodeFrom, string LanguageCodeTo) { LanguageCodeFrom = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeFrom); LanguageCodeTo = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeTo); text = text.ToLower(); string url = string.Format("http://www.google.com/translate_t?hl=en&vi=c&ie=UTF8&oe=UTF8&submit=Translate&langpair={0}|{1}&text={2}", LanguageCodeFrom, LanguageCodeTo, Uri.EscapeUriString(text)); WWW www = new WWW(url); return(www); }
//[PostProcessBuild(10000)] public static void PostProcessAndroid(BuildTarget buildTarget, string pathToBuiltProject) { if (buildTarget != BuildTarget.Android && buildTarget != BuildTarget.Tizen) { return; } if (LocalizationManager.Sources.Count <= 0) { LocalizationManager.UpdateSources(); } // Get language with variants, but also add it without the variant to allow fallbacks (e.g. en-CA also adds en) var langCodes = LocalizationManager.GetAllLanguagesCode(false).Concat(LocalizationManager.GetAllLanguagesCode(true)).Distinct().ToList(); if (langCodes.Count <= 0) { return; } string stringXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<resources>\n" + " <string name=\"app_name\">{0}</string>\n" + "</resources>"; SetStringsFile(pathToBuiltProject + "/res/values", "strings.xml", stringXML, LocalizationManager.GetAppName(langCodes[0])); var list = new List <string>(); list.Add(pathToBuiltProject + "/res/values"); foreach (var code in langCodes) { // Android doesn't use zh-CN or zh-TW, instead it uses: zh-rCN, zh-rTW, zh string fixedCode = code; if (fixedCode.StartsWith("zh", System.StringComparison.OrdinalIgnoreCase)) { string googleCode = GoogleLanguages.GetGoogleLanguageCode(fixedCode); if (googleCode == null) { googleCode = fixedCode; } fixedCode = (googleCode == "zh-CN") ? "zh-CN" : "zh"; } fixedCode = fixedCode.Replace("-", "-r"); string dir = pathToBuiltProject + "/res/values-" + fixedCode; SetStringsFile(dir, "strings.xml", stringXML, LocalizationManager.GetAppName(code)); } }
// Querry google for the translation and waits until google returns //public static string ForceTranslate ( string text, string LanguageCodeFrom, string LanguageCodeTo ) //{ // WWW www = GetTranslationWWW( text, LanguageCodeFrom, LanguageCodeTo ); // while (!www.isDone); // if (!string.IsNullOrEmpty(www.error)) // { // Debug.LogError ("-- " + www.error); // //foreach(KeyValuePair<string, string> entry in www.responseHeaders) // // Debug.Log(entry.Value + "=" + entry.Key); // return string.Empty; // } // else // { // var bytes = www.bytes; // var wwwText = Encoding.UTF8.GetString(bytes, 0, bytes.Length); //www.text // return ParseTranslationResult(wwwText, text); // } //} public static WWW GetTranslationWWW(string text, string LanguageCodeFrom, string LanguageCodeTo) { LanguageCodeFrom = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeFrom); LanguageCodeTo = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeTo); // Google has problem translating this "This Is An Example" but not this "this is an example" // so I'm asking google with the lowercase version and then reverting back if (TitleCase(text) == text && text.ToUpper() != text) { text = text.ToLower(); } string url = string.Format("{0}?action=Translate&list={1}:{2}={3}", LocalizationManager.GetWebServiceURL(), LanguageCodeFrom, LanguageCodeTo, Uri.EscapeUriString(text)); //Debug.Log (url); WWW www = new WWW(url); return(www); }
public static List <string> ConvertTranslationRequest(TranslationDictionary requests, bool encodeGET) { List <string> results = new List <string>(); var sb = new StringBuilder(); foreach (var kvp in requests) { var request = kvp.Value; if (sb.Length > 0) { sb.Append("<I2Loc>"); } sb.Append(GoogleLanguages.GetGoogleLanguageCode(request.LanguageCode)); sb.Append(":"); for (int i = 0; i < request.TargetLanguagesCode.Length; ++i) { if (i != 0) { sb.Append(","); } sb.Append(GoogleLanguages.GetGoogleLanguageCode(request.TargetLanguagesCode[i])); } sb.Append("="); var text = (TitleCase(request.Text) == request.Text) ? request.Text.ToLowerInvariant() : request.Text; if (!encodeGET) { sb.Append(text); } else { sb.Append(Uri.EscapeDataString(text)); if (sb.Length > 4000) { results.Add(sb.ToString()); sb.Length = 0; } } } results.Add(sb.ToString()); return(results); }
public static WWW GetTranslationWWW(string text, string LanguageCodeFrom, string LanguageCodeTo) { LanguageCodeFrom = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeFrom); LanguageCodeTo = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeTo); // Google has problem translating this "This Is An Example" but not this "this is an example" // so I'm asking google with the lowercase version and then reverting back if (TitleCase(text) == text) { text = text.ToLower(); } //string url = string.Format ("http://www.google.com/translate_t?hl=en&vi=c&ie=UTF8&oe=UTF8&submit=Translate&langpair={0}|{1}&text={2}", LanguageCodeFrom, LanguageCodeTo, Uri.EscapeUriString( text )); string url = string.Format("{0}?action=Translate&list={1}:{2}={3}", LocalizationManager.Sources[0].Google_WebServiceURL, LanguageCodeFrom, LanguageCodeTo, Uri.EscapeUriString(text)); //Debug.Log (url); WWW www = new WWW(url); return(www); }