Beispiel #1
0
        // 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);
            });
        }
Beispiel #2
0
        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));
            }
        }
Beispiel #3
0
        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)}"));
 }
Beispiel #5
0
        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));
            }
        }
Beispiel #7
0
        // 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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }