コード例 #1
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);
        }
コード例 #2
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);
        }
コード例 #3
0
        private static string GetPluralType( MatchCollection matches, string langCode, _GetParam getParam)
		{
			for (int i = 0, nMatches = matches.Count; i < nMatches; ++i)
			{
				var match = matches[i];
				var param = match.Groups[match.Groups.Count - 1].Value;
				var result = (string)getParam(param);
				if (result == null)
					continue;
				
				int amount = 0;
				if (!int.TryParse (result, out amount))
					continue;

				var pluralType = GoogleLanguages.GetPluralType(langCode, amount);
				return pluralType.ToString ();
			}
			return null;
		}
コード例 #4
0
        public string Export_CSV(string Category, char Separator = ',')
        {
            StringBuilder Builder = new StringBuilder();

            int nLanguages = (mLanguages.Count);

            Builder.AppendFormat("Key{0}Type{0}Desc", Separator);

            foreach (LanguageData langData in mLanguages)
            {
                Builder.Append(Separator);
                AppendString(Builder, GoogleLanguages.GetCodedLanguage(langData.Name, langData.Code), Separator);
            }
            Builder.Append("\n");

            mTerms = mTerms.OrderBy(x => x.Term).ToList();
            foreach (TermData termData in mTerms)
            {
                string Term;

                if (string.IsNullOrEmpty(Category) || (Category == EmptyCategory && termData.Term.IndexOfAny(CategorySeparators) < 0))
                {
                    Term = termData.Term;
                }
                else
                if (termData.Term.StartsWith(Category + @"/") && Category != termData.Term)
                {
                    Term = termData.Term.Substring(Category.Length + 1);
                }
                else
                {
                    continue;                           // Term doesn't belong to this category
                }
                AppendTerm(Builder, nLanguages, Term, termData, null, termData.Languages, termData.Languages_Touch, Separator, (byte)TranslationFlag.AutoTranslated_Normal, (byte)TranslationFlag.AutoTranslated_Touch);

                if (termData.HasTouchTranslations())
                {
                    AppendTerm(Builder, nLanguages, Term, termData, "[touch]", termData.Languages_Touch, null, Separator, (byte)TranslationFlag.AutoTranslated_Touch, (byte)TranslationFlag.AutoTranslated_Normal);
                }
            }
            return(Builder.ToString());
        }
コード例 #5
0
        public string Export_I2CSV(string Category, char Separator = ',')
        {
            StringBuilder Builder = new StringBuilder();

            //--[ Header ]----------------------------------
            Builder.Append("Key[*]Type[*]Desc");
            foreach (LanguageData langData in mLanguages)
            {
                Builder.Append("[*]");
                Builder.Append(GoogleLanguages.GetCodedLanguage(langData.Name, langData.Code));
            }
            Builder.Append("[ln]");

            int nLanguages = (mLanguages.Count);

            foreach (TermData termData in mTerms)
            {
                string Term;

                if (string.IsNullOrEmpty(Category) || (Category == EmptyCategory && termData.Term.IndexOfAny(CategorySeparators) < 0))
                {
                    Term = termData.Term;
                }
                else
                if (termData.Term.StartsWith(Category + @"/") && Category != termData.Term)
                {
                    Term = termData.Term.Substring(Category.Length + 1);
                }
                else
                {
                    continue;                           // Term doesn't belong to this category
                }
                AppendI2Term(Builder, nLanguages, Term, termData, string.Empty, termData.Languages, termData.Languages_Touch, Separator, (byte)TranslationFlag.AutoTranslated_Normal, (byte)TranslationFlag.AutoTranslated_Touch);

                if (termData.HasTouchTranslations())
                {
                    AppendI2Term(Builder, nLanguages, Term, termData, "[touch]", termData.Languages_Touch, null, Separator, (byte)TranslationFlag.AutoTranslated_Touch, (byte)TranslationFlag.AutoTranslated_Normal);
                }
            }
            return(Builder.ToString());
        }
コード例 #6
0
        public static bool HasJoinedWords = false;  // Some languages (e.g. Chinese, Japanese and Thai) don't add spaces to their words (all characters are placed toguether)

        #endregion

        public static void SetLanguageAndCode(string LanguageName, string LanguageCode, bool RememberLanguage = true, bool Force = false)
        {
            if (mCurrentLanguage != LanguageName || mLanguageCode != LanguageCode || Force)
            {
                if (RememberLanguage)
                {
                    PersistentStorage.SetSetting_String("I2 Language", LanguageName);
                }
                mCurrentLanguage = LanguageName;
                mLanguageCode    = LanguageCode;
                mCurrentCulture  = CreateCultureForCode(LanguageCode);
                if (mChangeCultureInfo)
                {
                    SetCurrentCultureInfo();
                }

                IsRight2Left   = IsRTL(mLanguageCode);
                HasJoinedWords = GoogleLanguages.LanguageCode_HasJoinedWord(mLanguageCode);
                LocalizeAll(Force);
            }
        }
コード例 #7
0
        public static void CreateQueries(string text, string LanguageCodeFrom, string LanguageCodeTo, TranslationDictionary dict)
        {
            if (!text.Contains("[i2p_"))
            {
                AddQuery(text, LanguageCodeFrom, LanguageCodeTo, dict);
                return;
            }

            // Get pluralType 'Plural'
            int idx0 = 0;
            int idx1 = text.IndexOf("[i2p_");

            if (idx1 == 0)              // Handle case where the text starts with a plural tag
            {
                idx0 = text.IndexOf("]", idx1) + 1;
                idx1 = text.IndexOf("[i2p_");
                if (idx1 < 0)
                {
                    idx1 = text.Length;
                }
            }

            var pluralText = text.Substring(idx0, idx1 - idx0);

            var regex = new Regex(@"{\[(.*?)\]}");

            for (var i = (ePluralType)0; i <= ePluralType.Plural; ++i)
            {
                if (!GoogleLanguages.LanguageHasPluralType(LanguageCodeTo, i.ToString()))
                {
                    continue;
                }

                var newText    = pluralText;
                int testNumber = GoogleLanguages.GetPluralTestNumber(LanguageCodeTo, i);
                newText = regex.Replace(newText, testNumber.ToString());

                AddQuery(newText, LanguageCodeFrom, LanguageCodeTo, dict);
            }
        }
コード例 #8
0
 public static void SetLanguageAndCode(string LanguageName, string LanguageCode, bool RememberLanguage = true, bool Force = false)
 {
     if (mCurrentLanguage != LanguageName || mLanguageCode != LanguageCode || Force)
     {
         if (RememberLanguage)
         {
             PlayerPrefs.SetString("I2 Language", LanguageName);
         }
         mCurrentLanguage = LanguageName;
         mLanguageCode    = LanguageCode;
         if (mChangeCultureInfo)
         {
             SetCurrentCultureInfo();
         }
         else
         {
             IsRight2Left   = IsRTL(mLanguageCode);
             HasJoinedWords = GoogleLanguages.LanguageCode_HasJoinedWord(mLanguageCode);
         }
         LocalizeAll(Force);
     }
 }
コード例 #9
0
        void OnGUI_LanguageList()
        {
            GUILayout.BeginHorizontal(EditorStyles.toolbar);
            GUILayout.FlexibleSpace();
            GUILayout.Label("Languages:", EditorStyles.miniLabel, GUILayout.ExpandWidth(false));
            GUILayout.FlexibleSpace();
            GUILayout.Label("Code:", EditorStyles.miniLabel, GUILayout.Width(76));
            GUILayout.EndHorizontal();

            //--[ Language List ]--------------------------

            int IndexLanguageToDelete = -1;
            int LanguageToMoveUp      = -1;
            int LanguageToMoveDown    = -1;

            mScrollPos_Languages = GUILayout.BeginScrollView(mScrollPos_Languages, "AS TextArea", GUILayout.MinHeight(100), GUILayout.MaxHeight(Screen.height), GUILayout.ExpandHeight(false));

            List <string> codes = GoogleLanguages.GetAllInternationalCodes();

            codes.Sort();
            codes.Insert(0, string.Empty);

            for (int i = 0, imax = mProp_Languages.arraySize; i < imax; ++i)
            {
                GUILayout.BeginHorizontal();

                SerializedProperty Prop_Lang     = mProp_Languages.GetArrayElementAtIndex(i);
                SerializedProperty Prop_LangName = Prop_Lang.FindPropertyRelative("Name");
                SerializedProperty Prop_LangCode = Prop_Lang.FindPropertyRelative("Code");

                if (GUILayout.Button("X", "toolbarbutton", GUILayout.ExpandWidth(false)))
                {
                    IndexLanguageToDelete = i;
                }

                GUILayout.BeginHorizontal(EditorStyles.toolbar);

                GUI.changed = false;
                string LanName = EditorGUILayout.TextField(Prop_LangName.stringValue, GUILayout.ExpandWidth(true));
                if (GUI.changed && !string.IsNullOrEmpty(LanName))
                {
                    Prop_LangName.stringValue = LanName;
                    GUI.changed = false;
                }

                int Index = Mathf.Max(0, codes.IndexOf(Prop_LangCode.stringValue));
                GUI.changed = false;
                Index       = EditorGUILayout.Popup(Index, codes.ToArray(), EditorStyles.toolbarPopup, GUILayout.Width(60));
                if (GUI.changed && Index >= 0)
                {
                    Prop_LangCode.stringValue = codes[Index];
                }

                GUILayout.EndHorizontal();

                GUI.enabled = (i < imax - 1);
                if (GUILayout.Button("\u25BC", EditorStyles.toolbarButton, GUILayout.Width(18)))
                {
                    LanguageToMoveDown = i;
                }
                GUI.enabled = i > 0;
                if (GUILayout.Button("\u25B2", EditorStyles.toolbarButton, GUILayout.Width(18)))
                {
                    LanguageToMoveUp = i;
                }
                GUI.enabled = true;

                if (GUILayout.Button(new GUIContent("Show", "Preview all localizations into this language"), EditorStyles.toolbarButton, GUILayout.Width(35)))
                {
                    LocalizationManager.SetLanguageAndCode(LanName, Prop_LangCode.stringValue, false, true);
                }

                GUILayout.EndHorizontal();
            }

            GUILayout.EndScrollView();

            OnGUI_AddLanguage(mProp_Languages);

            if (IndexLanguageToDelete >= 0)
            {
                mLanguageSource.RemoveLanguage(mLanguageSource.mLanguages[IndexLanguageToDelete].Name);
                serializedObject.Update();
                ParseTerms(true, false);
                mShouldDetectStoreIntegration = true;
            }

            if (LanguageToMoveUp >= 0)
            {
                SwapLanguages(LanguageToMoveUp, LanguageToMoveUp - 1);
            }
            if (LanguageToMoveDown >= 0)
            {
                SwapLanguages(LanguageToMoveDown, LanguageToMoveDown + 1);
            }
        }
コード例 #10
0
        public string Export_I2CSV(string Category, char Separator = ',', bool specializationsAsRows = true)
        {
            StringBuilder Builder = new StringBuilder();

            //--[ Header ]----------------------------------
            Builder.Append("Key[*]Type[*]Desc");
            foreach (LanguageData langData in mLanguages)
            {
                Builder.Append("[*]");
                if (!langData.IsEnabled())
                {
                    Builder.Append('$');
                }
                Builder.Append(GoogleLanguages.GetCodedLanguage(langData.Name, langData.Code));
            }
            Builder.Append("[ln]");

            mTerms.Sort((a, b) => string.CompareOrdinal(a.Term, b.Term));

            int  nLanguages = (mLanguages.Count);
            bool firstLine  = true;

            foreach (TermData termData in mTerms)
            {
                string Term;

                if (string.IsNullOrEmpty(Category) || (Category == EmptyCategory && termData.Term.IndexOfAny(CategorySeparators) < 0))
                {
                    Term = termData.Term;
                }
                else
                if (termData.Term.StartsWith(Category + @"/") && Category != termData.Term)
                {
                    Term = termData.Term.Substring(Category.Length + 1);
                }
                else
                {
                    continue;                       // Term doesn't belong to this category
                }
                if (!firstLine)
                {
                    Builder.Append("[ln]");
                }
                firstLine = false;

                if (!specializationsAsRows)
                {
                    AppendI2Term(Builder, nLanguages, Term, termData, Separator, null);
                }
                else
                {
                    var allSpecializations = termData.GetAllSpecializations();
                    for (int i = 0; i < allSpecializations.Count; ++i)
                    {
                        if (i != 0)
                        {
                            Builder.Append("[ln]");
                        }
                        var specialization = allSpecializations[i];
                        AppendI2Term(Builder, nLanguages, Term, termData, Separator, specialization);
                    }
                }
            }
            return(Builder.ToString());
        }
コード例 #11
0
        void OnGUI_AddLanguage(SerializedProperty Prop_Languages)
        {
            //--[ Add Language Upper Toolbar ]-----------------

            GUILayout.BeginVertical();
            GUILayout.BeginHorizontal();

            GUILayout.BeginHorizontal(EditorStyles.toolbar);
            mLanguages_NewLanguage = EditorGUILayout.TextField("", mLanguages_NewLanguage, EditorStyles.toolbarTextField, GUILayout.ExpandWidth(true));
            GUILayout.EndHorizontal();

            GUI.enabled = !string.IsNullOrEmpty(mLanguages_NewLanguage);
            if (TestButton(eTest_ActionType.Button_AddLanguageManual, "Add", EditorStyles.toolbarButton, GUILayout.Width(50)))
            {
                Prop_Languages.serializedObject.ApplyModifiedProperties();
                mLanguageSource.AddLanguage(mLanguages_NewLanguage, GoogleLanguages.GetLanguageCode(mLanguages_NewLanguage));
                Prop_Languages.serializedObject.Update();
                mLanguages_NewLanguage = "";
                GUI.FocusControl(string.Empty);
            }
            GUI.enabled = true;

            GUILayout.EndHorizontal();


            //--[ Add Language Bottom Toolbar ]-----------------

            GUILayout.BeginHorizontal();

            //-- Language Dropdown -----------------
            string CodesToExclude = string.Empty;

            foreach (var LanData in mLanguageSource.mLanguages)
            {
                CodesToExclude = string.Concat(CodesToExclude, "[", LanData.Code, "]");
            }

            List <string> Languages = GoogleLanguages.GetLanguagesForDropdown(mLanguages_NewLanguage, CodesToExclude);

            GUI.changed = false;
            int index = EditorGUILayout.Popup(0, Languages.ToArray(), EditorStyles.toolbarDropDown);

            if (GUI.changed && index >= 0)
            {
                mLanguages_NewLanguage = GoogleLanguages.GetFormatedLanguageName(Languages[index]);
            }


            if (TestButton(eTest_ActionType.Button_AddLanguageFromPopup, "Add", EditorStyles.toolbarButton, GUILayout.Width(50)) && index >= 0)
            {
                Prop_Languages.serializedObject.ApplyModifiedProperties();
                mLanguages_NewLanguage = GoogleLanguages.GetFormatedLanguageName(Languages[index]);

                if (!string.IsNullOrEmpty(mLanguages_NewLanguage))
                {
                    mLanguageSource.AddLanguage(mLanguages_NewLanguage, GoogleLanguages.GetLanguageCode(mLanguages_NewLanguage));
                }
                Prop_Languages.serializedObject.Update();

                mLanguages_NewLanguage = "";
                GUI.FocusControl(string.Empty);
            }

            GUILayout.EndHorizontal();
            GUILayout.EndVertical();
            GUI.color = Color.white;
        }
コード例 #12
0
        public string Import_CSV(string Category, List <string[]> CSV, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace)
        {
            string[] Tokens = CSV[0];

            int LanguagesStartIdx = 1;
            int TypeColumnIdx     = -1;
            int DescColumnIdx     = -1;

            var ValidColumnName_Key  = new string[] { "Key" };
            var ValidColumnName_Type = new string[] { "Type" };
            var ValidColumnName_Desc = new string[] { "Desc", "Description" };

            if (Tokens.Length > 1 && ArrayContains(Tokens[0], ValidColumnName_Key))
            {
                if (UpdateMode == eSpreadsheetUpdateMode.Replace)
                {
                    ClearAllData();
                }

                if (Tokens.Length > 2)
                {
                    if (ArrayContains(Tokens[1], ValidColumnName_Type))
                    {
                        TypeColumnIdx     = 1;
                        LanguagesStartIdx = 2;
                    }
                    if (ArrayContains(Tokens[1], ValidColumnName_Desc))
                    {
                        DescColumnIdx     = 1;
                        LanguagesStartIdx = 2;
                    }
                }
                if (Tokens.Length > 3)
                {
                    if (ArrayContains(Tokens[2], ValidColumnName_Type))
                    {
                        TypeColumnIdx     = 2;
                        LanguagesStartIdx = 3;
                    }
                    if (ArrayContains(Tokens[2], ValidColumnName_Desc))
                    {
                        DescColumnIdx     = 2;
                        LanguagesStartIdx = 3;
                    }
                }
            }
            else
            {
                return("Bad Spreadsheet Format.\nFirst columns should be 'Key', 'Type' and 'Desc'");
            }

            int nLanguages = Mathf.Max(Tokens.Length - LanguagesStartIdx, 0);

            int[] LanIndices = new int[nLanguages];
            for (int i = 0; i < nLanguages; ++i)
            {
                if (string.IsNullOrEmpty(Tokens[i + LanguagesStartIdx]))
                {
                    LanIndices [i] = -1;
                    continue;
                }

                string langToken = Tokens[i + LanguagesStartIdx];

                string LanName, LanCode;
                bool   isLangEnabled = true;
                if (langToken.StartsWith("$"))
                {
                    isLangEnabled = false;
                    langToken     = langToken.Substring(1);
                }
                GoogleLanguages.UnPackCodeFromLanguageName(langToken, out LanName, out LanCode);

                int LanIdx = -1;
                if (!string.IsNullOrEmpty(LanCode))
                {
                    LanIdx = GetLanguageIndexFromCode(LanCode);
                }
                else
                {
                    LanIdx = GetLanguageIndex(LanName, SkipDisabled: false);
                }

                if (LanIdx < 0)
                {
                    LanguageData lanData = new LanguageData();
                    lanData.Name  = LanName;
                    lanData.Code  = LanCode;
                    lanData.Flags = (byte)(0 | (isLangEnabled?0:(int)eLanguageDataFlags.DISABLED));
                    mLanguages.Add(lanData);
                    LanIdx = mLanguages.Count - 1;
                }
                LanIndices[i] = LanIdx;
            }

            //--[ Update the Languages array in the existing terms]-----
            nLanguages = mLanguages.Count;
            for (int i = 0, imax = mTerms.Count; i < imax; ++i)
            {
                TermData termData = mTerms[i];
                if (termData.Languages.Length < nLanguages)
                {
                    Array.Resize(ref termData.Languages, nLanguages);
                    Array.Resize(ref termData.Flags, nLanguages);
                }
            }

            //--[ Keys ]--------------

            for (int i = 1, imax = CSV.Count; i < imax; ++i)
            {
                Tokens = CSV[i];
                string sKey = string.IsNullOrEmpty(Category) ? Tokens[0] : string.Concat(Category, "/", Tokens[0]);

                string specialization = null;
                if (sKey.EndsWith("]"))
                {
                    int idx = sKey.LastIndexOf('[');
                    if (idx > 0)
                    {
                        specialization = sKey.Substring(idx + 1, sKey.Length - idx - 2);
                        if (specialization == "touch")
                        {
                            specialization = "Touch";
                        }
                        sKey = sKey.Remove(idx);
                    }
                }
                ValidateFullTerm(ref sKey);
                if (string.IsNullOrEmpty(sKey))
                {
                    continue;
                }

                TermData termData = GetTermData(sKey);

                // Check to see if its a new term
                if (termData == null)
                {
                    termData      = new TermData();
                    termData.Term = sKey;

                    termData.Languages = new string[mLanguages.Count];
                    termData.Flags     = new byte[mLanguages.Count];
                    for (int j = 0; j < mLanguages.Count; ++j)
                    {
                        termData.Languages[j] = string.Empty;
                    }

                    mTerms.Add(termData);
                    mDictionary.Add(sKey, termData);
                }
                else
                // This term already exist
                if (UpdateMode == eSpreadsheetUpdateMode.AddNewTerms)
                {
                    continue;
                }

                if (TypeColumnIdx > 0)
                {
                    termData.TermType = GetTermType(Tokens[TypeColumnIdx]);
                }

                if (DescColumnIdx > 0)
                {
                    termData.Description = Tokens[DescColumnIdx];
                }

                for (int j = 0; j < LanIndices.Length && j < Tokens.Length - LanguagesStartIdx; ++j)
                {
                    if (!string.IsNullOrEmpty(Tokens[j + LanguagesStartIdx]))   // Only change the translation if there is a new value
                    {
                        var lanIdx = LanIndices[j];
                        if (lanIdx < 0)
                        {
                            continue;
                        }
                        var value = Tokens[j + LanguagesStartIdx];

                        if (value == "-")
                        {
                            value = string.Empty;
                        }
                        else
                        if (value == "")
                        {
                            value = null;
                        }

                        termData.SetTranslation(lanIdx, value, specialization);
                    }
                }
            }
            if (Application.isPlaying)
            {
                SaveLanguages(HasUnloadedLanguages());
            }
            return(string.Empty);
        }
コード例 #13
0
        public static string RebuildTranslation(string text, TranslationDictionary dict, string LanguageCodeTo)
        {
            if (!text.Contains("[i2p_"))
            {
                return(GetTranslation(text, LanguageCodeTo, dict));
            }

            // Get pluralType 'Plural'
            int idx0 = 0;
            int idx1 = text.IndexOf("[i2p_");

            if (idx1 == 0)              // Handle case where the text starts with a plural tag
            {
                idx0 = text.IndexOf("]", idx1) + 1;
                idx1 = text.IndexOf("[i2p_");
                if (idx1 < 0)
                {
                    idx1 = text.Length;
                }
            }
            var pluralText = text.Substring(idx0, idx1 - idx0);
            var match      = Regex.Match(pluralText, @"{\[(.*?)\]}");
            var param      = (match == null ? string.Empty : match.Value);


            var sb = new System.Text.StringBuilder();

            var newText    = pluralText;
            int testNumber = GoogleLanguages.GetPluralTestNumber(LanguageCodeTo, ePluralType.Plural);

            newText = newText.Replace(param, testNumber.ToString());
            var    translation       = GetTranslation(newText, LanguageCodeTo, dict);
            string pluralTranslation = translation.Replace(testNumber.ToString(), param);

            sb.Append(pluralTranslation);

            for (var i = (ePluralType)0; i < ePluralType.Plural; ++i)
            {
                if (!GoogleLanguages.LanguageHasPluralType(LanguageCodeTo, i.ToString()))
                {
                    continue;
                }

                newText    = pluralText;
                testNumber = GoogleLanguages.GetPluralTestNumber(LanguageCodeTo, i);
                newText    = newText.Replace(param, testNumber.ToString());

                translation = GetTranslation(newText, LanguageCodeTo, dict);

                translation = translation.Replace(testNumber.ToString(), param);


                if (!string.IsNullOrEmpty(translation) && translation != pluralTranslation)
                {
                    sb.Append("[i2p_");
                    sb.Append(i.ToString());
                    sb.Append(']');
                    sb.Append(translation);
                }
            }

            return(sb.ToString());
        }
コード例 #14
0
        public string Import_CSV(string Category, List <string[]> CSV, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace)
        {
            string[] array = CSV[0];
            int      num   = 1;
            int      num2  = -1;
            int      num3  = -1;

            string[] texts = new string[1]
            {
                "Key"
            };
            string[] texts2 = new string[1]
            {
                "Type"
            };
            string[] texts3 = new string[2]
            {
                "Desc",
                "Description"
            };
            if (array.Length > 1 && ArrayContains(array[0], texts))
            {
                if (UpdateMode == eSpreadsheetUpdateMode.Replace)
                {
                    ClearAllData();
                }
                if (array.Length > 2)
                {
                    if (ArrayContains(array[1], texts2))
                    {
                        num2 = 1;
                        num  = 2;
                    }
                    if (ArrayContains(array[1], texts3))
                    {
                        num3 = 1;
                        num  = 2;
                    }
                }
                if (array.Length > 3)
                {
                    if (ArrayContains(array[2], texts2))
                    {
                        num2 = 2;
                        num  = 3;
                    }
                    if (ArrayContains(array[2], texts3))
                    {
                        num3 = 2;
                        num  = 3;
                    }
                }
                int   num4   = Mathf.Max(array.Length - num, 0);
                int[] array2 = new int[num4];
                for (int i = 0; i < num4; i++)
                {
                    if (string.IsNullOrEmpty(array[i + num]))
                    {
                        array2[i] = -1;
                        continue;
                    }
                    string text = array[i + num];
                    bool   flag = true;
                    if (text.StartsWith("$"))
                    {
                        flag = false;
                        text = text.Substring(1);
                    }
                    GoogleLanguages.UnPackCodeFromLanguageName(text, out string Language, out string code);
                    int num5 = -1;
                    num5 = (string.IsNullOrEmpty(code) ? GetLanguageIndex(Language) : GetLanguageIndexFromCode(code));
                    if (num5 < 0)
                    {
                        LanguageData languageData = new LanguageData();
                        languageData.Name  = Language;
                        languageData.Code  = code;
                        languageData.Flags = (byte)(0 | ((!flag) ? 1 : 0));
                        mLanguages.Add(languageData);
                        num5 = mLanguages.Count - 1;
                    }
                    array2[i] = num5;
                }
                num4 = mLanguages.Count;
                int j = 0;
                for (int count = mTerms.Count; j < count; j++)
                {
                    TermData termData = mTerms[j];
                    if (termData.Languages.Length < num4)
                    {
                        Array.Resize(ref termData.Languages, num4);
                        Array.Resize(ref termData.Languages_Touch, num4);
                        Array.Resize(ref termData.Flags, num4);
                    }
                }
                int k = 1;
                for (int count2 = CSV.Count; k < count2; k++)
                {
                    array = CSV[k];
                    string Term  = string.IsNullOrEmpty(Category) ? array[0] : (Category + "/" + array[0]);
                    bool   flag2 = false;
                    if (Term.EndsWith("[touch]"))
                    {
                        Term  = Term.Remove(Term.Length - "[touch]".Length);
                        flag2 = true;
                    }
                    ValidateFullTerm(ref Term);
                    if (string.IsNullOrEmpty(Term))
                    {
                        continue;
                    }
                    TermData termData2 = GetTermData(Term);
                    if (termData2 == null)
                    {
                        termData2                 = new TermData();
                        termData2.Term            = Term;
                        termData2.Languages       = new string[mLanguages.Count];
                        termData2.Languages_Touch = new string[mLanguages.Count];
                        termData2.Flags           = new byte[mLanguages.Count];
                        for (int l = 0; l < mLanguages.Count; l++)
                        {
                            termData2.Languages[l] = (termData2.Languages_Touch[l] = string.Empty);
                        }
                        mTerms.Add(termData2);
                        mDictionary.Add(Term, termData2);
                    }
                    else if (UpdateMode == eSpreadsheetUpdateMode.AddNewTerms)
                    {
                        continue;
                    }
                    if (num2 > 0)
                    {
                        termData2.TermType = GetTermType(array[num2]);
                    }
                    if (num3 > 0)
                    {
                        termData2.Description = array[num3];
                    }
                    for (int m = 0; m < array2.Length && m < array.Length - num; m++)
                    {
                        if (string.IsNullOrEmpty(array[m + num]))
                        {
                            continue;
                        }
                        int num6 = array2[m];
                        if (num6 >= 0)
                        {
                            string text2 = array[m + num];
                            if (flag2)
                            {
                                termData2.Languages_Touch[num6] = text2;
                                termData2.Flags[num6]          &= 253;
                            }
                            else
                            {
                                termData2.Languages[num6] = text2;
                                termData2.Flags[num6]    &= 254;
                            }
                        }
                    }
                }
                return(string.Empty);
            }
            return("Bad Spreadsheet Format.\nFirst columns should be 'Key', 'Type' and 'Desc'");
        }
コード例 #15
0
        static void ShowPluralTranslation(string pluralType, string langCode, string translation, ref string finalTranslation, bool show, bool allowDelete, bool showTag)
        {
            string tag            = "[i2p_" + pluralType + "]";
            int    idx0           = translation.IndexOf(tag, System.StringComparison.OrdinalIgnoreCase);
            bool   hasTranslation = idx0 >= 0 || pluralType == "Plural";

            if (idx0 < 0)
            {
                idx0 = 0;
            }
            else
            {
                idx0 += tag.Length;
            }

            int idx1 = translation.IndexOf("[i2p_", idx0, System.StringComparison.OrdinalIgnoreCase);

            if (idx1 < 0)
            {
                idx1 = translation.Length;
            }

            var pluralTranslation = translation.Substring(idx0, idx1 - idx0);
            var newTrans          = pluralTranslation;

            bool allowPluralForm = GoogleLanguages.LanguageHasPluralType(langCode, pluralType);

            if (hasTranslation && !allowPluralForm)
            {
                newTrans    = "";
                GUI.changed = true;
            }

            if (show && allowPluralForm)
            {
                if (!hasTranslation)
                {
                    GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 0.35f);
                }

                GUILayout.BeginHorizontal();
                if (showTag)
                {
                    GUILayout.Label(pluralType, EditorStyles.miniLabel, GUILayout.Width(35));
                }
                newTrans = EditorGUILayout.TextArea(pluralTranslation, Style_WrapTextField);

                if (allowDelete && GUILayout.Button("X", EditorStyles.toolbarButton, GUILayout.Width(15)))
                {
                    newTrans    = string.Empty;
                    GUI.changed = true;
                    GUIUtility.keyboardControl = 0;
                }

                GUILayout.EndHorizontal();
                if (!hasTranslation)
                {
                    GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 1);
                }
            }

            if (!string.IsNullOrEmpty(newTrans))
            {
                if (hasTranslation || newTrans != pluralTranslation)
                {
                    if (pluralType != "Plural")
                    {
                        finalTranslation += tag;
                    }
                    finalTranslation += newTrans;
                }
            }
        }
コード例 #16
0
        void OnGUI_LanguageList()
        {
            GUILayout.BeginHorizontal(EditorStyles.toolbar);
            GUILayout.FlexibleSpace();
            GUILayout.Label("Languages:", EditorStyles.miniLabel, GUILayout.ExpandWidth(false));
            GUILayout.FlexibleSpace();
            GUILayout.Label("Code:", EditorStyles.miniLabel, GUILayout.Width(76));
            GUILayout.EndHorizontal();

            //--[ Language List ]--------------------------

            int IndexLanguageToDelete = -1;
            int LanguageToMoveUp      = -1;
            int LanguageToMoveDown    = -1;

            mScrollPos_Languages = GUILayout.BeginScrollView(mScrollPos_Languages, EditorStyles.textArea, GUILayout.MinHeight(100), GUILayout.MaxHeight(Screen.height), GUILayout.ExpandHeight(false));

            List <string> codes = GoogleLanguages.GetAllInternationalCodes();

            codes.Sort();
            codes.Insert(0, string.Empty);

            for (int i = 0, imax = mProp_Languages.arraySize; i < imax; ++i)
            {
                SerializedProperty Prop_Lang     = mProp_Languages.GetArrayElementAtIndex(i);
                SerializedProperty Prop_LangName = Prop_Lang.FindPropertyRelative("Name");
                SerializedProperty Prop_LangCode = Prop_Lang.FindPropertyRelative("Code");
                SerializedProperty Prop_Flags    = Prop_Lang.FindPropertyRelative("Flags");
                bool isLanguageEnabled           = (Prop_Flags.intValue & (int)eLanguageDataFlags.DISABLED) == 0;

                GUI.color = isLanguageEnabled ? Color.white : new Color(1, 1, 1, 0.3f);
                GUILayout.BeginHorizontal();

                if (GUILayout.Button("X", "toolbarbutton", GUILayout.ExpandWidth(false)))
                {
                    IndexLanguageToDelete = i;
                }

                GUILayout.BeginHorizontal(EditorStyles.toolbar);

                GUI.changed = false;
                string LanName = EditorGUILayout.TextField(Prop_LangName.stringValue, GUILayout.ExpandWidth(true));
                if (GUI.changed && !string.IsNullOrEmpty(LanName))
                {
                    Prop_LangName.stringValue = LanName;
                    GUI.changed = false;
                }

                int Index = Mathf.Max(0, codes.IndexOf(Prop_LangCode.stringValue));
                GUI.changed = false;
                Index       = EditorGUILayout.Popup(Index, codes.ToArray(), EditorStyles.toolbarPopup, GUILayout.Width(60));
                if (GUI.changed && Index >= 0)
                {
                    Prop_LangCode.stringValue = codes[Index];
                }

                GUILayout.EndHorizontal();

                GUI.enabled = (i < imax - 1);
                if (GUILayout.Button("\u25BC", EditorStyles.toolbarButton, GUILayout.Width(18)))
                {
                    LanguageToMoveDown = i;
                }
                GUI.enabled = i > 0;
                if (GUILayout.Button("\u25B2", EditorStyles.toolbarButton, GUILayout.Width(18)))
                {
                    LanguageToMoveUp = i;
                }

                GUI.enabled = true;
                if (GUILayout.Button(new GUIContent("Show", "Preview all localizations into this language"), EditorStyles.toolbarButton, GUILayout.Width(35)))
                {
                    LocalizationManager.SetLanguageAndCode(LanName, Prop_LangCode.stringValue, false, true);
                }

                if (GUILayout.Button(new GUIContent("Translate", "Translate all empty terms"), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false)))
                {
                    TranslateAllToLanguage(LanName);
                }
                GUI.enabled = true;

                EditorGUI.BeginChangeCheck();
                isLanguageEnabled = EditorGUILayout.Toggle(isLanguageEnabled, GUILayout.Width(15));
                if (EditorGUI.EndChangeCheck())
                {
                    Prop_Flags.intValue = (Prop_Flags.intValue & ~(int)eLanguageDataFlags.DISABLED) | (isLanguageEnabled ? 0 : (int)eLanguageDataFlags.DISABLED);
                }

                GUILayout.EndHorizontal();
            }

            GUILayout.EndScrollView();

            OnGUI_AddLanguage(mProp_Languages);

            if (mConnection_WWW != null || mConnection_Text.Contains("Translating"))
            {
                // Connection Status Bar
                int    time    = (int)((Time.realtimeSinceStartup % 2) * 2.5);
                string Loading = mConnection_Text + ".....".Substring(0, time);
                GUI.color = Color.gray;
                GUILayout.BeginHorizontal(EditorStyles.textArea);
                GUILayout.Label(Loading, EditorStyles.miniLabel);
                GUI.color = Color.white;
                if (GUILayout.Button("Cancel", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false)))
                {
                    EditorApplication.update -= DelayedStartTranslation;
                    StopConnectionWWW();
                }
                GUILayout.EndHorizontal();
                Repaint();
            }

            if (IndexLanguageToDelete >= 0)
            {
                mLanguageSource.RemoveLanguage(mLanguageSource.mLanguages[IndexLanguageToDelete].Name);
                serializedObject.Update();
                ParseTerms(true, false);
            }

            if (LanguageToMoveUp >= 0)
            {
                SwapLanguages(LanguageToMoveUp, LanguageToMoveUp - 1);
            }
            if (LanguageToMoveDown >= 0)
            {
                SwapLanguages(LanguageToMoveDown, LanguageToMoveDown + 1);
            }
        }
コード例 #17
0
        public string Import_CSV(string Category, List <string[]> CSV, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace)
        {
            string[] Tokens = CSV[0];

            int LanguagesStartIdx = 1;
            int TypeColumnIdx     = -1;
            int DescColumnIdx     = -1;

            var ValidColumnName_Key  = new string[] { "Key" };
            var ValidColumnName_Type = new string[] { "Type" };
            var ValidColumnName_Desc = new string[] { "Desc", "Description" };

            if (Tokens.Length > 1 && ArrayContains(Tokens[0], ValidColumnName_Key))
            {
                if (UpdateMode == eSpreadsheetUpdateMode.Replace)
                {
                    ClearAllData();
                }

                if (Tokens.Length > 2)
                {
                    if (ArrayContains(Tokens[1], ValidColumnName_Type))
                    {
                        TypeColumnIdx     = 1;
                        LanguagesStartIdx = 2;
                    }
                    if (ArrayContains(Tokens[1], ValidColumnName_Desc))
                    {
                        DescColumnIdx     = 1;
                        LanguagesStartIdx = 2;
                    }
                }
                if (Tokens.Length > 3)
                {
                    if (ArrayContains(Tokens[2], ValidColumnName_Type))
                    {
                        TypeColumnIdx     = 2;
                        LanguagesStartIdx = 3;
                    }
                    if (ArrayContains(Tokens[2], ValidColumnName_Desc))
                    {
                        DescColumnIdx     = 2;
                        LanguagesStartIdx = 3;
                    }
                }
            }
            else
            {
                return("Bad Spreadsheet Format.\nFirst columns should be 'Key', 'Type' and 'Desc'");
            }

            int nLanguages = Mathf.Max(Tokens.Length - LanguagesStartIdx, 0);

            int[] LanIndices = new int[nLanguages];
            for (int i = 0; i < nLanguages; ++i)
            {
                if (string.IsNullOrEmpty(Tokens[i + LanguagesStartIdx]))
                {
                    LanIndices [i] = -1;
                    continue;
                }

                string langToken = Tokens[i + LanguagesStartIdx];

                string LanName, LanCode;
                bool   isLangEnabled = true;
                if (langToken.StartsWith("$"))
                {
                    isLangEnabled = false;
                    langToken     = langToken.Substring(1);
                }
                GoogleLanguages.UnPackCodeFromLanguageName(langToken, out LanName, out LanCode);

                int LanIdx = -1;
                if (!string.IsNullOrEmpty(LanCode))
                {
                    LanIdx = GetLanguageIndexFromCode(LanCode);
                }
                else
                {
                    LanIdx = GetLanguageIndex(LanName);
                }

                if (LanIdx < 0)
                {
                    LanguageData lanData = new LanguageData();
                    lanData.Name  = LanName;
                    lanData.Code  = LanCode;
                    lanData.Flags = (byte)(0 | (isLangEnabled?0:(int)eLanguageDataFlags.DISABLED));
                    mLanguages.Add(lanData);
                    LanIdx = mLanguages.Count - 1;
                }
                LanIndices[i] = LanIdx;
            }

            //--[ Update the Languages array in the existing terms]-----
            nLanguages = mLanguages.Count;
            for (int i = 0, imax = mTerms.Count; i < imax; ++i)
            {
                TermData termData = mTerms[i];
                if (termData.Languages.Length < nLanguages)
                {
                    Array.Resize(ref termData.Languages, nLanguages);
                    Array.Resize(ref termData.Languages_Touch, nLanguages);
                    Array.Resize(ref termData.Flags, nLanguages);
                }
            }

            //--[ Keys ]--------------

            for (int i = 1, imax = CSV.Count; i < imax; ++i)
            {
                Tokens = CSV[i];
                string sKey    = string.IsNullOrEmpty(Category) ? Tokens[0] : string.Concat(Category, "/", Tokens[0]);
                bool   isTouch = false;
                if (sKey.EndsWith("[touch]"))
                {
                    sKey    = sKey.Remove(sKey.Length - "[touch]".Length);
                    isTouch = true;
                }
                LanguageSource.ValidateFullTerm(ref sKey);
                if (string.IsNullOrEmpty(sKey))
                {
                    continue;
                }

                TermData termData = GetTermData(sKey);

                // Check to see if its a new term
                if (termData == null)
                {
                    termData      = new TermData();
                    termData.Term = sKey;

                    termData.Languages       = new string[mLanguages.Count];
                    termData.Languages_Touch = new string[mLanguages.Count];
                    termData.Flags           = new byte[mLanguages.Count];
                    for (int j = 0; j < mLanguages.Count; ++j)
                    {
                        termData.Languages[j] = termData.Languages_Touch[j] = string.Empty;
                    }

                    mTerms.Add(termData);
                    mDictionary.Add(sKey, termData);
                }
                else
                // This term already exist
                if (UpdateMode == eSpreadsheetUpdateMode.AddNewTerms)
                {
                    continue;
                }

                if (TypeColumnIdx > 0)
                {
                    termData.TermType = GetTermType(Tokens[TypeColumnIdx]);
                }

                if (DescColumnIdx > 0)
                {
                    termData.Description = Tokens[DescColumnIdx];
                }

                for (int j = 0; j < LanIndices.Length && j < Tokens.Length - LanguagesStartIdx; ++j)
                {
                    if (!string.IsNullOrEmpty(Tokens[j + LanguagesStartIdx]))                   // Only change the translation if there is a new value
                    {
                        var lanIdx = LanIndices[j];
                        if (lanIdx < 0)
                        {
                            continue;
                        }
                        var value = Tokens[j + LanguagesStartIdx];
                        //var isAuto = false;// value.Contains("[i2auto]");
                        //if (isAuto)
                        //value = value.Replace ("[i2auto]", string.Empty);

                        //if (value=="-")
                        //	value = string.Empty;

                        if (isTouch)
                        {
                            termData.Languages_Touch[lanIdx] = value;

                            /*if (isAuto)  termData.Flags[lanIdx] |= (byte)TranslationFlag.AutoTranslated_Touch;
                             *              else */termData.Flags[lanIdx] &= byte.MaxValue ^ ((byte)TranslationFlag.AutoTranslated_Touch);
                        }
                        else
                        {
                            termData.Languages[lanIdx] = value;

                            /*if (isAuto)  termData.Flags[lanIdx] |= (byte)TranslationFlag.AutoTranslated_Normal;
                             *              else*/termData.Flags[lanIdx] &= byte.MaxValue ^ ((byte)TranslationFlag.AutoTranslated_Normal);
                        }
                    }
                }
            }

            return(string.Empty);
        }
コード例 #18
0
        public static void ApplyLocalizationParams(ref string translation, _GetParam getParam, bool allowLocalizedParameters = true)
        {
            if (translation == null)
            {
                return;
            }

            string pluralType = null;
            int    idx0       = 0;
            int    idx1       = translation.Length;

            int index = 0;

            while (index >= 0 && index < translation.Length)
            {
                int iParamStart = translation.IndexOf("{[", index);
                if (iParamStart < 0)
                {
                    break;
                }

                int iParamEnd = translation.IndexOf("]}", iParamStart);
                if (iParamEnd < 0)
                {
                    break;
                }

                // there is a sub param, so, skip this one:   "this {[helo{[hi]} end"
                int isubParam = translation.IndexOf("{[", iParamStart + 1);
                if (isubParam > 0 && isubParam < iParamEnd)
                {
                    index = isubParam;
                    continue;
                }

                // Check that some plural parameters can have the form: {[#name]}
                var offset = translation[iParamStart + 2] == '#' ? 3 : 2;
                var param  = translation.Substring(iParamStart + offset, iParamEnd - iParamStart - offset);
                var result = (string)getParam(param);
                if (result != null && allowLocalizedParameters)
                {
                    // check if Param is Localized
                    LanguageSourceData source;
                    var termData = LocalizationManager.GetTermData(result, out source);
                    if (termData != null)
                    {
                        int idx = source.GetLanguageIndex(LocalizationManager.CurrentLanguage);
                        if (idx >= 0)
                        {
                            result = termData.GetTranslation(idx);
                        }
                    }

                    var paramTag = translation.Substring(iParamStart, iParamEnd - iParamStart + 2);
                    translation = translation.Replace(paramTag, result);

                    int amount = 0;
                    if (int.TryParse(result, out amount))
                    {
                        pluralType = GoogleLanguages.GetPluralType(CurrentLanguageCode, amount).ToString();
                    }

                    index = iParamStart + result.Length;
                }
                else
                {
                    index = iParamEnd + 2;
                }
            }

            if (pluralType != null)
            {
                var tag = "[i2p_" + pluralType + "]";
                idx0 = translation.IndexOf(tag, System.StringComparison.OrdinalIgnoreCase);
                if (idx0 < 0)
                {
                    idx0 = 0;
                }
                else
                {
                    idx0 += tag.Length;
                }

                idx1 = translation.IndexOf("[i2p_", idx0 + 1, System.StringComparison.OrdinalIgnoreCase);
                if (idx1 < 0)
                {
                    idx1 = translation.Length;
                }

                translation = translation.Substring(idx0, idx1 - idx0);
            }
        }
コード例 #19
0
 public void AddLanguage(string LanguageName)
 {
     AddLanguage(LanguageName, GoogleLanguages.GetLanguageCode(LanguageName));
 }
コード例 #20
0
        void OnGUI_LanguageList()
        {
            GUILayout.BeginHorizontal(EditorStyles.toolbar);
            GUILayout.FlexibleSpace();
            GUILayout.Label("Languages:", EditorStyles.miniLabel, GUILayout.ExpandWidth(false));
            GUILayout.FlexibleSpace();
            GUILayout.Label("Code:", EditorStyles.miniLabel);
            GUILayout.Space(170);
            GUILayout.EndHorizontal();

            //--[ Language List ]--------------------------

            int IndexLanguageToDelete = -1;
            int LanguageToMoveUp      = -1;
            int LanguageToMoveDown    = -1;

            GUI.backgroundColor  = Color.Lerp(GUITools.LightGray, Color.white, 0.5f);
            mScrollPos_Languages = GUILayout.BeginScrollView(mScrollPos_Languages, LocalizeInspector.GUIStyle_OldTextArea, GUILayout.MinHeight(200), /*GUILayout.MaxHeight(Screen.height),*/ GUILayout.ExpandHeight(false));
            GUI.backgroundColor  = Color.white;

            if (mLanguageCodePopupList == null || mLanguageCodePopupList.Count == 0)
            {
                mLanguageCodePopupList = GoogleLanguages.GetLanguagesForDropdown("", "");
                mLanguageCodePopupList.Sort();
                mLanguageCodePopupList.Insert(0, string.Empty);
            }

            for (int i = 0, imax = mProp_Languages.arraySize; i < imax; ++i)
            {
                SerializedProperty Prop_Lang     = mProp_Languages.GetArrayElementAtIndex(i);
                SerializedProperty Prop_LangName = Prop_Lang.FindPropertyRelative("Name");
                SerializedProperty Prop_LangCode = Prop_Lang.FindPropertyRelative("Code");
                SerializedProperty Prop_Flags    = Prop_Lang.FindPropertyRelative("Flags");
                bool isLanguageEnabled           = (Prop_Flags.intValue & (int)eLanguageDataFlags.DISABLED) == 0;

                GUI.color = isLanguageEnabled ? Color.white : new Color(1, 1, 1, 0.3f);
                GUILayout.BeginHorizontal();

                if (GUILayout.Button("X", "toolbarbutton", GUILayout.ExpandWidth(false)))
                {
                    IndexLanguageToDelete = i;
                }

                GUILayout.BeginHorizontal(EditorStyles.toolbar);

                EditorGUI.BeginChangeCheck();
                string LanName = EditorGUILayout.TextField(Prop_LangName.stringValue, GUILayout.ExpandWidth(true));
                if (EditorGUI.EndChangeCheck() && !string.IsNullOrEmpty(LanName))
                {
                    Prop_LangName.stringValue = LanName;
                }

                var currentCode = "[" + Prop_LangCode.stringValue + "]";

                if (isLanguageEnabled)
                {
                    int Index = Mathf.Max(0, mLanguageCodePopupList.FindIndex(c => c.Contains(currentCode)));
                    EditorGUI.BeginChangeCheck();
                    Index = EditorGUILayout.Popup(Index, mLanguageCodePopupList.ToArray(), EditorStyles.toolbarPopup, GUILayout.Width(60));
                    if (EditorGUI.EndChangeCheck() && Index >= 0)
                    {
                        currentCode = mLanguageCodePopupList[Index];
                        int i0 = currentCode.IndexOf("[");
                        int i1 = currentCode.IndexOf("]");
                        if (i0 >= 0 && i1 > i0)
                        {
                            Prop_LangCode.stringValue = currentCode.Substring(i0 + 1, i1 - i0 - 1);
                        }
                        else
                        {
                            Prop_LangCode.stringValue = string.Empty;
                        }
                    }
                    var rect = GUILayoutUtility.GetLastRect();
                    GUI.Label(rect, Prop_LangCode.stringValue, EditorStyles.toolbarPopup);
                }
                else
                {
                    GUILayout.Label(Prop_LangCode.stringValue, EditorStyles.toolbarPopup, GUILayout.Width(60));
                }

                GUILayout.EndHorizontal();

                GUI.enabled = (i < imax - 1);
                if (GUILayout.Button("\u25BC", EditorStyles.toolbarButton, GUILayout.Width(18)))
                {
                    LanguageToMoveDown = i;
                }
                GUI.enabled = i > 0;
                if (GUILayout.Button("\u25B2", EditorStyles.toolbarButton, GUILayout.Width(18)))
                {
                    LanguageToMoveUp = i;
                }

                GUI.enabled = true;
                if (GUILayout.Button(new GUIContent("Show", "Preview all localizations into this language"), EditorStyles.toolbarButton, GUILayout.Width(35)))
                {
                    LocalizationManager.SetLanguageAndCode(LanName, Prop_LangCode.stringValue, false, true);
                }

                if (TestButtonArg(eTest_ActionType.Button_Languages_TranslateAll, i, new GUIContent("Translate", "Translate all empty terms"), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false)))
                {
                    GUITools.DelayedCall(() => TranslateAllToLanguage(LanName));
                }
                GUI.enabled = true;
                GUI.color   = Color.white;

                EditorGUI.BeginChangeCheck();
                isLanguageEnabled = EditorGUILayout.Toggle(isLanguageEnabled, GUILayout.Width(15));

                var r = GUILayoutUtility.GetLastRect();
                GUI.Label(r, new GUIContent("", "Enable/Disable the language.\nDisabled languages can be used to store data values or to avoid showing Languages that are stil under development"));

                if (EditorGUI.EndChangeCheck())
                {
                    Prop_Flags.intValue = (Prop_Flags.intValue & ~(int)eLanguageDataFlags.DISABLED) | (isLanguageEnabled ? 0 : (int)eLanguageDataFlags.DISABLED);
                }

                GUILayout.EndHorizontal();
            }

            GUILayout.EndScrollView();

            OnGUI_AddLanguage(mProp_Languages);

            if (mConnection_WWW != null || mConnection_Text.Contains("Translating"))
            {
                // Connection Status Bar
                int    time    = (int)((Time.realtimeSinceStartup % 2) * 2.5);
                string Loading = mConnection_Text + ".....".Substring(0, time);
                GUI.color = Color.gray;
                GUILayout.BeginHorizontal(LocalizeInspector.GUIStyle_OldTextArea);
                GUILayout.Label(Loading, EditorStyles.miniLabel);
                GUI.color = Color.white;
                if (GUILayout.Button("Cancel", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false)))
                {
                    GoogleTranslation.CancelCurrentGoogleTranslations();
                    StopConnectionWWW();
                }
                GUILayout.EndHorizontal();
                Repaint();
            }

            if (IndexLanguageToDelete >= 0)
            {
                if (EditorUtility.DisplayDialog("Confirm delete", "Are you sure you want to delete the selected language", "Yes", "Cancel"))
                {
                    mLanguageSource.RemoveLanguage(mLanguageSource.mLanguages [IndexLanguageToDelete].Name);
                    serializedObject.Update();
                    ParseTerms(true, false, false);
                }
            }

            if (LanguageToMoveUp >= 0)
            {
                SwapLanguages(LanguageToMoveUp, LanguageToMoveUp - 1);
            }
            if (LanguageToMoveDown >= 0)
            {
                SwapLanguages(LanguageToMoveDown, LanguageToMoveDown + 1);
            }
        }
コード例 #21
0
        public static void ApplyLocalizationParams(ref string translation, _GetParam getParam)
        {
            if (translation == null)
            {
                return;
            }

            string pluralType = null;
            int    idx0       = 0;
            int    idx1       = translation.Length;

            int index = 0;

            while (index >= 0 && index < translation.Length)
            {
                int iParamStart = translation.IndexOf("{[", index);
                if (iParamStart < 0)
                {
                    break;
                }

                int iParamEnd = translation.IndexOf("]}", iParamStart);
                if (iParamEnd < 0)
                {
                    break;
                }

                // there is a sub param, so, skip this one:   "this {[helo{[hi]} end"
                int isubParam = translation.IndexOf("{[", iParamStart + 1);
                if (isubParam > 0 && isubParam < iParamEnd)
                {
                    index = isubParam;
                    continue;
                }

                var param  = translation.Substring(iParamStart + 2, iParamEnd - iParamStart - 2);
                var result = (string)getParam(param);
                if (result != null)
                {
                    var paramTag = translation.Substring(iParamStart, iParamEnd - iParamStart + 2);
                    translation = translation.Replace(paramTag, result);

                    int amount = 0;
                    if (int.TryParse(result, out amount))
                    {
                        pluralType = GoogleLanguages.GetPluralType(CurrentLanguageCode, amount).ToString();
                    }

                    index = iParamStart + result.Length;
                }
                else
                {
                    index = iParamEnd + 2;
                }
            }

            if (pluralType != null)
            {
                var tag = "[i2p_" + pluralType + "]";
                idx0 = translation.IndexOf(tag, System.StringComparison.OrdinalIgnoreCase);
                if (idx0 < 0)
                {
                    idx0 = 0;
                }
                else
                {
                    idx0 += tag.Length;
                }

                idx1 = translation.IndexOf("[i2p_", idx0 + 1, System.StringComparison.OrdinalIgnoreCase);
                if (idx1 < 0)
                {
                    idx1 = translation.Length;
                }

                translation = translation.Substring(idx0, idx1 - idx0);
            }
        }