public void UpdateDictionary(bool force = false) { if (!force && mDictionary != null && mDictionary.Count == mTerms.Count) { return; } StringComparer comparer = (CaseInsensitiveTerms ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal); if (mDictionary.Comparer != comparer) { mDictionary = new Dictionary <string, TermData>(comparer); } else { mDictionary.Clear(); } for (int i = 0, imax = mTerms.Count; i < imax; ++i) { var termData = mTerms[i]; ValidateFullTerm(ref termData.Term); mDictionary[termData.Term] = mTerms[i]; mTerms[i].Validate(); } if (I2Utils.IsPlaying()) { SaveLanguages(true); } }
public void UnloadLanguage(int languageIndex) { if (!AllowUnloadingLanguages()) { return; } // Some consoles don't allow IO access if (!PersistentStorage.CanAccessFiles()) { return; } if (!I2Utils.IsPlaying() || !mLanguages[languageIndex].IsLoaded() || !mLanguages[languageIndex].CanBeUnloaded() || IsCurrentLanguage(languageIndex) || !PersistentStorage.HasFile(PersistentStorage.eFileType.Temporal, GetSavedLanguageFileName(languageIndex))) { return; } foreach (var termData in mTerms) { termData.Languages[languageIndex] = null; } mLanguages[languageIndex].SetLoaded(false); }
public void LoadLanguage(int languageIndex, bool UnloadOtherLanguages, bool useFallback, bool onlyCurrentSpecialization, bool forceLoad) { if (!AllowUnloadingLanguages()) { return; } // Some consoles don't allow IO access if (!PersistentStorage.CanAccessFiles()) { return; } if (languageIndex >= 0 && (forceLoad || !mLanguages[languageIndex].IsLoaded())) { var tempPath = GetSavedLanguageFileName(languageIndex); var langData = PersistentStorage.LoadFile(PersistentStorage.eFileType.Temporal, tempPath, false); if (!string.IsNullOrEmpty(langData)) { Import_Language_from_Cache(languageIndex, langData, useFallback, onlyCurrentSpecialization); mLanguages[languageIndex].SetLoaded(true); } } if (UnloadOtherLanguages && I2Utils.IsPlaying()) { for (int lan = 0; lan < mLanguages.Count; ++lan) { if (lan != languageIndex) { UnloadLanguage(lan); } } } }
public void Import_Google_FromCache() { if (GoogleUpdateFrequency == eGoogleUpdateFrequency.Never) { return; } if (!I2Utils.IsPlaying()) { return; } string PlayerPrefName = GetSourcePlayerPrefName(); string I2SavedData = PersistentStorage.LoadFile(PersistentStorage.eFileType.Persistent, "I2Source_" + PlayerPrefName + ".loc", false); if (string.IsNullOrEmpty(I2SavedData)) { return; } if (I2SavedData.StartsWith("[i2e]", StringComparison.Ordinal)) { I2SavedData = StringObfucator.Decode(I2SavedData.Substring(5, I2SavedData.Length - 5)); } //--[ Compare with current version ]----- bool shouldUpdate = false; string savedSpreadsheetVersion = Google_LastUpdatedVersion; if (PersistentStorage.HasSetting("I2SourceVersion_" + PlayerPrefName)) { savedSpreadsheetVersion = PersistentStorage.GetSetting_String("I2SourceVersion_" + PlayerPrefName, Google_LastUpdatedVersion); // Debug.Log (Google_LastUpdatedVersion + " - " + savedSpreadsheetVersion); shouldUpdate = IsNewerVersion(Google_LastUpdatedVersion, savedSpreadsheetVersion); } if (!shouldUpdate) { PersistentStorage.DeleteFile(PersistentStorage.eFileType.Persistent, "I2Source_" + PlayerPrefName + ".loc", false); PersistentStorage.DeleteSetting("I2SourceVersion_" + PlayerPrefName); return; } if (savedSpreadsheetVersion.Length > 19) // Check for corruption from previous versions { savedSpreadsheetVersion = string.Empty; } Google_LastUpdatedVersion = savedSpreadsheetVersion; //Debug.Log ("[I2Loc] Using Saved (PlayerPref) data in 'I2Source_"+PlayerPrefName+"'" ); Import_Google_Result(I2SavedData, eSpreadsheetUpdateMode.Replace); }
public void UnloadLanguage(int languageIndex) { if (!I2Utils.IsPlaying() || !mLanguages[languageIndex].IsLoaded() || !mLanguages[languageIndex].CanBeUnloaded() || IsCurrentLanguage(languageIndex) || !PersistentStorage.HasFile(GetSavedLanguageFileName(languageIndex))) { return; } foreach (var termData in mTerms) { termData.Languages[languageIndex] = termData.Languages_Touch[languageIndex] = null; } mLanguages[languageIndex].SetLoaded(false); }
void FillValues() { var _Dropdown = GetComponent <Dropdown>(); if (_Dropdown == null && I2Utils.IsPlaying()) { #if TextMeshPro FillValuesTMPro(); #endif return; } foreach (var term in _Dropdown.options) { _Terms.Add(term.text); } }
public void LoadLanguage(int languageIndex, bool UnloadOtherLanguages, bool useFallback) { if (languageIndex >= 0 && !mLanguages[languageIndex].IsLoaded()) { var tempPath = GetSavedLanguageFileName(languageIndex); var langData = PersistentStorage.LoadFile(tempPath); if (!string.IsNullOrEmpty(langData)) { Import_Language(languageIndex, langData, useFallback); mLanguages[languageIndex].SetLoaded(true); } } if (UnloadOtherLanguages && I2Utils.IsPlaying()) { for (int lan = 0; lan < mLanguages.Count; ++lan) { if (lan != languageIndex) { UnloadLanguage(lan); } } } }
public string Import_Google_Result(string JsonString, eSpreadsheetUpdateMode UpdateMode, bool saveInPlayerPrefs = false) { try { string ErrorMsg = string.Empty; if (string.IsNullOrEmpty(JsonString) || JsonString == "\"\"") { return(ErrorMsg); } int idxV = JsonString.IndexOf("version=", StringComparison.Ordinal); int idxSV = JsonString.IndexOf("script_version=", StringComparison.Ordinal); if (idxV < 0 || idxSV < 0) { return("Invalid Response from Google, Most likely the WebService needs to be updated"); } idxV += "version=".Length; idxSV += "script_version=".Length; string newSpreadsheetVersion = JsonString.Substring(idxV, JsonString.IndexOf(",", idxV, StringComparison.Ordinal) - idxV); var scriptVersion = int.Parse(JsonString.Substring(idxSV, JsonString.IndexOf(",", idxSV, StringComparison.Ordinal) - idxSV)); if (newSpreadsheetVersion.Length > 19) // Check for corruption { newSpreadsheetVersion = string.Empty; } if (scriptVersion != LocalizationManager.GetRequiredWebServiceVersion()) { return("The current Google WebService is not supported.\nPlease, delete the WebService from the Google Drive and Install the latest version."); } //Debug.Log (Google_LastUpdatedVersion + " - " + newSpreadsheetVersion); if (saveInPlayerPrefs && !IsNewerVersion(Google_LastUpdatedVersion, newSpreadsheetVersion)) #if UNITY_EDITOR { return(""); } #else { return("LanguageSource is up-to-date"); } #endif if (saveInPlayerPrefs) { string PlayerPrefName = GetSourcePlayerPrefName(); PersistentStorage.SaveFile(PersistentStorage.eFileType.Persistent, "I2Source_" + PlayerPrefName, "[i2e]" + StringObfucator.Encode(JsonString) + ".loc"); PersistentStorage.SetSetting_String("I2SourceVersion_" + PlayerPrefName, newSpreadsheetVersion); PersistentStorage.ForceSaveSettings(); } Google_LastUpdatedVersion = newSpreadsheetVersion; if (UpdateMode == eSpreadsheetUpdateMode.Replace) { ClearAllData(); } int CSVstartIdx = JsonString.IndexOf("[i2category]", StringComparison.Ordinal); while (CSVstartIdx > 0) { CSVstartIdx += "[i2category]".Length; int endCat = JsonString.IndexOf("[/i2category]", CSVstartIdx, StringComparison.Ordinal); string category = JsonString.Substring(CSVstartIdx, endCat - CSVstartIdx); endCat += "[/i2category]".Length; int endCSV = JsonString.IndexOf("[/i2csv]", endCat, StringComparison.Ordinal); string csv = JsonString.Substring(endCat, endCSV - endCat); CSVstartIdx = JsonString.IndexOf("[i2category]", endCSV, StringComparison.Ordinal); Import_I2CSV(category, csv, UpdateMode); // Only the first CSV should clear the Data if (UpdateMode == eSpreadsheetUpdateMode.Replace) { UpdateMode = eSpreadsheetUpdateMode.Merge; } } if (I2Utils.IsPlaying()) { SaveLanguages(true); } #if UNITY_EDITOR if (!string.IsNullOrEmpty(ErrorMsg)) { UnityEditor.EditorUtility.SetDirty(this); } #endif return(ErrorMsg); } catch (System.Exception e) { Debug.LogWarning(e); return(e.ToString()); } }
// When JustCheck is true, importing from google will not download any data, just detect if the Spreadsheet is up-to-date public void Import_Google(bool ForceUpdate, bool justCheck) { if (!ForceUpdate && GoogleUpdateFrequency == eGoogleUpdateFrequency.Never) { return; } if (!I2Utils.IsPlaying()) { return; } #if UNITY_EDITOR if (justCheck && GoogleInEditorCheckFrequency == eGoogleUpdateFrequency.Never) { return; } #endif #if UNITY_EDITOR var updateFrequency = GoogleInEditorCheckFrequency; #else var updateFrequency = GoogleUpdateFrequency; #endif string PlayerPrefName = GetSourcePlayerPrefName(); if (!ForceUpdate && updateFrequency != eGoogleUpdateFrequency.Always) { #if UNITY_EDITOR string sTimeOfLastUpdate = UnityEditor.EditorPrefs.GetString("LastGoogleUpdate_" + PlayerPrefName, ""); #else string sTimeOfLastUpdate = PersistentStorage.GetSetting_String("LastGoogleUpdate_" + PlayerPrefName, ""); #endif DateTime TimeOfLastUpdate; try { if (DateTime.TryParse(sTimeOfLastUpdate, out TimeOfLastUpdate)) { double TimeDifference = (DateTime.Now - TimeOfLastUpdate).TotalDays; switch (updateFrequency) { case eGoogleUpdateFrequency.Daily: if (TimeDifference < 1) { return; } break; case eGoogleUpdateFrequency.Weekly: if (TimeDifference < 8) { return; } break; case eGoogleUpdateFrequency.Monthly: if (TimeDifference < 31) { return; } break; case eGoogleUpdateFrequency.OnlyOnce: return; } } } catch (Exception) { } } #if UNITY_EDITOR UnityEditor.EditorPrefs.SetString("LastGoogleUpdate_" + PlayerPrefName, DateTime.Now.ToString()); #else PersistentStorage.SetSetting_String("LastGoogleUpdate_" + PlayerPrefName, DateTime.Now.ToString()); #endif //--[ Checking google for updated data ]----------------- CoroutineManager.Start(Import_Google_Coroutine(justCheck)); }
public void OnLocalize(bool Force = false) { if (!Force && (!enabled || gameObject == null || !gameObject.activeInHierarchy)) { return; } if (string.IsNullOrEmpty(LocalizationManager.CurrentLanguage)) { return; } if (!AlwaysForceLocalize && !Force && !HasCallback() && LastLocalizedLanguage == LocalizationManager.CurrentLanguage) { return; } LastLocalizedLanguage = LocalizationManager.CurrentLanguage; // These are the terms actually used (will be mTerm/mSecondaryTerm or will get them from the objects if those are missing. e.g. Labels' text and font name) if (string.IsNullOrEmpty(FinalTerm) || string.IsNullOrEmpty(FinalSecondaryTerm)) { GetFinalTerms(out FinalTerm, out FinalSecondaryTerm); } bool hasCallback = I2Utils.IsPlaying() && HasCallback(); if (!hasCallback && string.IsNullOrEmpty(FinalTerm) && string.IsNullOrEmpty(FinalSecondaryTerm)) { return; } CallBackTerm = FinalTerm; CallBackSecondaryTerm = FinalSecondaryTerm; MainTranslation = (string.IsNullOrEmpty(FinalTerm) || FinalTerm == "-") ? null : LocalizationManager.GetTranslation(FinalTerm, false); SecondaryTranslation = (string.IsNullOrEmpty(FinalSecondaryTerm) || FinalSecondaryTerm == "-") ? null : LocalizationManager.GetTranslation(FinalSecondaryTerm, false); if (!hasCallback && /*string.IsNullOrEmpty (MainTranslation)*/ string.IsNullOrEmpty(FinalTerm) && string.IsNullOrEmpty(SecondaryTranslation)) { return; } CurrentLocalizeComponent = this; { LocalizeCallBack.Execute(this); // This allows scripts to modify the translations : e.g. "Player {0} wins" -> "Player Red wins" LocalizeEvent.Invoke(); if (AllowParameters) { LocalizationManager.ApplyLocalizationParams(ref MainTranslation, gameObject, AllowLocalizedParameters); } } if (!FindTarget()) { return; } bool applyRTL = LocalizationManager.IsRight2Left && !IgnoreRTL; if (MainTranslation != null) { switch (PrimaryTermModifier) { case TermModification.ToUpper: MainTranslation = MainTranslation.ToUpper(); break; case TermModification.ToLower: MainTranslation = MainTranslation.ToLower(); break; case TermModification.ToUpperFirst: MainTranslation = GoogleTranslation.UppercaseFirst(MainTranslation); break; case TermModification.ToTitle: MainTranslation = GoogleTranslation.TitleCase(MainTranslation); break; } if (!string.IsNullOrEmpty(TermPrefix)) { MainTranslation = applyRTL ? MainTranslation + TermPrefix : TermPrefix + MainTranslation; } if (!string.IsNullOrEmpty(TermSuffix)) { MainTranslation = applyRTL ? TermSuffix + MainTranslation : MainTranslation + TermSuffix; } if (AddSpacesToJoinedLanguages && LocalizationManager.HasJoinedWords && !string.IsNullOrEmpty(MainTranslation)) { var sb = new System.Text.StringBuilder(); sb.Append(MainTranslation[0]); for (int i = 1, imax = MainTranslation.Length; i < imax; ++i) { sb.Append(' '); sb.Append(MainTranslation[i]); } MainTranslation = sb.ToString(); } if (applyRTL && mLocalizeTarget.AllowMainTermToBeRTL() && !string.IsNullOrEmpty(MainTranslation)) { MainTranslation = LocalizationManager.ApplyRTLfix(MainTranslation, MaxCharactersInRTL, IgnoreNumbersInRTL); } } if (SecondaryTranslation != null) { switch (SecondaryTermModifier) { case TermModification.ToUpper: SecondaryTranslation = SecondaryTranslation.ToUpper(); break; case TermModification.ToLower: SecondaryTranslation = SecondaryTranslation.ToLower(); break; case TermModification.ToUpperFirst: SecondaryTranslation = GoogleTranslation.UppercaseFirst(SecondaryTranslation); break; case TermModification.ToTitle: SecondaryTranslation = GoogleTranslation.TitleCase(SecondaryTranslation); break; } if (applyRTL && mLocalizeTarget.AllowSecondTermToBeRTL() && !string.IsNullOrEmpty(SecondaryTranslation)) { SecondaryTranslation = LocalizationManager.ApplyRTLfix(SecondaryTranslation); } } if (LocalizationManager.HighlightLocalizedTargets) { MainTranslation = "LOC:" + FinalTerm; } mLocalizeTarget.DoLocalize(this, MainTranslation, SecondaryTranslation); CurrentLocalizeComponent = null; }