void Export_Local(string File, eLocalSpreadsheeet CurrentExtension, eSpreadsheetUpdateMode UpdateMode) { try { serializedObject.ApplyModifiedProperties(); serializedObject.Update(); ClearErrors(); string sPath = string.Empty; if (!System.IO.Path.IsPathRooted(File)) { File = string.Concat(Application.dataPath, "/", File); } try { sPath = System.IO.Path.GetDirectoryName(File); } catch (System.Exception) {} if (string.IsNullOrEmpty(sPath)) { sPath = Application.dataPath + "/"; } File = System.IO.Path.GetFileName(File); if (string.IsNullOrEmpty(File)) { File = "Localization.csv"; } if (Application.platform == RuntimePlatform.OSXEditor) { File = EditorUtility.SaveFilePanel("Select a CSV file renamed as TXT", sPath, File, "txt"); } else { File = EditorUtility.SaveFilePanel("Select a CSV or TXT file", sPath, File, "csv;*.txt"); } if (!string.IsNullOrEmpty(File)) { mLanguageSource.Spreadsheet_LocalFileName = TryMakingPathRelativeToProject(File); char Separator = mProp_Spreadsheet_LocalCSVSeparator.stringValue.Length > 0 ? mProp_Spreadsheet_LocalCSVSeparator.stringValue[0] : ','; var encoding = System.Text.Encoding.GetEncoding(mProp_Spreadsheet_LocalCSVEncoding.stringValue); if (encoding == null) { encoding = System.Text.Encoding.UTF8; } switch (CurrentExtension) { case eLocalSpreadsheeet.CSV: Export_CSV(File, UpdateMode, Separator, encoding); break; } } } catch (System.Exception) { ShowError("Unable to export file\nCheck it is not READ-ONLY and that\nits not opened in an external viewer"); } }
void OnGUI_GoogleButtons_ImportExport(string SpreadsheetKey) { GUI.enabled = !string.IsNullOrEmpty(SpreadsheetKey) && mConnection_WWW == null; GUILayout.BeginHorizontal(); GUILayout.Space(10); eSpreadsheetUpdateMode Mode = SynchronizationButtons("Import"); if (Mode != eSpreadsheetUpdateMode.None) { ClearErrors(); serializedObject.ApplyModifiedProperties(); Import_Google(Mode); } GUILayout.FlexibleSpace(); Mode = SynchronizationButtons("Export"); if (Mode != eSpreadsheetUpdateMode.None) { ClearErrors(); serializedObject.ApplyModifiedProperties(); Export_Google(Mode); } GUILayout.Space(10); GUILayout.EndHorizontal(); GUI.enabled = true; }
void OnGUI_Spreadsheet_Local_ImportExport(eLocalSpreadsheeet CurrentExtension, string File) { GUI.enabled = (CurrentExtension != eLocalSpreadsheeet.NONE); GUILayout.BeginHorizontal(); GUILayout.Space(10); GUI.backgroundColor = Color.Lerp(Color.gray, Color.white, 0.5f); eSpreadsheetUpdateMode Mode = SynchronizationButtons("Import"); if (Mode != eSpreadsheetUpdateMode.None) { Import_Local(File, CurrentExtension, Mode); } GUILayout.FlexibleSpace(); GUI.backgroundColor = Color.Lerp(Color.gray, Color.white, 0.5f); Mode = SynchronizationButtons("Export", true); if (Mode != eSpreadsheetUpdateMode.None) { Export_Local(File, CurrentExtension, Mode); } GUILayout.Space(10); GUILayout.EndHorizontal(); GUI.enabled = true; }
void Import_Google(eSpreadsheetUpdateMode UpdateMode) { StopConnectionWWW(); LanguageSource source = ((LanguageSource)target); mConnection_WWW = source.Import_Google_CreateWWWcall(true); if (mConnection_WWW == null) { OnImported_Google(string.Empty, "Unable to import from google", eSpreadsheetUpdateMode.Replace); } else { mConnection_Callback = null; switch (UpdateMode) { case eSpreadsheetUpdateMode.Replace: mConnection_Callback += OnImported_Google_Replace; break; case eSpreadsheetUpdateMode.Merge: mConnection_Callback += OnImported_Google_Merge; break; case eSpreadsheetUpdateMode.AddNewTerms: mConnection_Callback += OnImported_Google_AddNewTerms; break; } EditorApplication.update += CheckForConnection; mConnection_Text = "Downloading spreadsheet"; //mConnection_TimeOut = Time.realtimeSinceStartup + 10; } }
void OnImported_Google(string Result, string Error, eSpreadsheetUpdateMode UpdateMode) { if (!string.IsNullOrEmpty(Error)) { Debug.Log(Error); ShowError("Unable to access google"); return; } LanguageSource source = ((LanguageSource)target); string ErrorMsg = source.Import_Google_Result(Result, UpdateMode); bool HasErrors = !string.IsNullOrEmpty(ErrorMsg); if (HasErrors) { ShowError(ErrorMsg); } serializedObject.Update(); ParseTerms(true, !HasErrors); mSelectedKeys.Clear(); mSelectedCategories.Clear(); ScheduleUpdateTermsToShowInList(); mLanguageSource.GetCategories(false, mSelectedCategories); EditorUtility.SetDirty(target); AssetDatabase.SaveAssets(); }
public void Export_CSV(string FileName, eSpreadsheetUpdateMode UpdateMode, char Separator = ',') { LanguageSource source = (LanguageSource)target; string CSVstring = source.Export_CSV(null, Separator); System.IO.File.WriteAllText(FileName, CSVstring, System.Text.Encoding.UTF8); }
public void Export_CSV(string FileName, eSpreadsheetUpdateMode UpdateMode, char Separator, System.Text.Encoding encoding) { LanguageSource source = (LanguageSource)target; string CSVstring = source.Export_CSV(null, Separator, mProp_Spreadsheet_SpecializationAsRows.boolValue); System.IO.File.WriteAllText(FileName, CSVstring, encoding); }
public WWW Export_Google_CreateWWWcall(eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace) { string value = Export_Google_CreateData(); WWWForm wWWForm = new WWWForm(); wWWForm.AddField("key", Google_SpreadsheetKey); wWWForm.AddField("action", "SetLanguageSource"); wWWForm.AddField("data", value); wWWForm.AddField("updateMode", UpdateMode.ToString()); return(new WWW(LocalizationManager.GetWebServiceURL(this), wWWForm)); }
void OnGUI_GoogleButtons_ImportExport(string SpreadsheetKey) { GUI.enabled = !string.IsNullOrEmpty(SpreadsheetKey) && mConnection_WWW == null; GUILayout.BeginHorizontal(); GUILayout.Space(10); eSpreadsheetUpdateMode Mode = SynchronizationButtons("Import"); if (Mode != eSpreadsheetUpdateMode.None || InTestAction(eTest_ActionType.Button_GoogleSpreadsheet_Import)) { if (mTestAction == eTest_ActionType.Button_GoogleSpreadsheet_Import) { Mode = (eSpreadsheetUpdateMode)mTestActionArg; } serializedObject.ApplyModifiedProperties(); var modeCopy = Mode; GUITools.DelayedCall(() => Import_Google(modeCopy)); } GUILayout.FlexibleSpace(); Mode = SynchronizationButtons("Export"); if (Mode != eSpreadsheetUpdateMode.None || InTestAction(eTest_ActionType.Button_GoogleSpreadsheet_Export)) { if (mTestAction == eTest_ActionType.Button_GoogleSpreadsheet_Export) { Mode = (eSpreadsheetUpdateMode)mTestActionArg; } serializedObject.ApplyModifiedProperties(); var modeCopy = Mode; GUITools.DelayedCall(() => Export_Google(modeCopy)); } GUILayout.Space(10); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); EditorGUIUtility.labelWidth += 10; EditorGUILayout.PropertyField(mProp_Spreadsheet_SpecializationAsRows, new GUIContent("Show Specializations as Rows", "true: Make each specialization a separate row (e.g. Term[VR]..., Term[Touch]....\nfalse: Merge specializations into same cell separated by [i2s_XXX]")); EditorGUIUtility.labelWidth -= 10; GUILayout.EndHorizontal(); GUILayout.Space(10); GUI.enabled = true; }
void Import_CSV(string FileName, eSpreadsheetUpdateMode UpdateMode) { LanguageSource source = (LanguageSource)target; string CSVstring = LocalizationReader.ReadCSVfile(FileName); char Separator = mProp_Spreadsheet_LocalCSVSeparator.stringValue.Length > 0 ? mProp_Spreadsheet_LocalCSVSeparator.stringValue[0] : ','; string sError = source.Import_CSV(string.Empty, CSVstring, UpdateMode, Separator); if (!string.IsNullOrEmpty(sError)) { ShowError(sError); } LocalizationEditor.mSelectedCategories = source.GetCategories(); mShouldDetectStoreIntegration = true; }
eSpreadsheetUpdateMode SynchronizationButtons(string Operation, bool ForceReplace = false) { eSpreadsheetUpdateMode Result = eSpreadsheetUpdateMode.None; GUILayout.BeginVertical(EditorStyles.textArea, GUILayout.Width(1)); GUI.backgroundColor = Color.white; GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label(Operation, EditorStyles.miniLabel); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Replace", EditorStyles.toolbarButton, GUILayout.Width(60))) { Result = eSpreadsheetUpdateMode.Replace; } if (ForceReplace) { GUI.enabled = false; } if (GUILayout.Button("Merge", EditorStyles.toolbarButton, GUILayout.Width(60))) { Result = eSpreadsheetUpdateMode.Merge; } if (GUILayout.Button("Add New", EditorStyles.toolbarButton, GUILayout.Width(60))) { Result = eSpreadsheetUpdateMode.AddNewTerms; } GUI.enabled = mConnection_WWW == null; GUILayout.Space(1); GUILayout.EndHorizontal(); GUILayout.Space(2); GUILayout.EndVertical(); if (Result != eSpreadsheetUpdateMode.None) { ClearErrors(); } return(Result); }
private void OnGUI_ExportButtons() { eSpreadsheetUpdateMode Mode = SynchronizationButtons("Export"); if (Mode != eSpreadsheetUpdateMode.None || InTestAction(eTest_ActionType.Button_GoogleSpreadsheet_Export)) { if (mTestAction == eTest_ActionType.Button_GoogleSpreadsheet_Export) { Mode = (eSpreadsheetUpdateMode)mTestActionArg; } serializedObject.ApplyModifiedProperties(); var modeCopy = Mode; GUITools.DelayedCall(() => Export_Google(modeCopy)); } }
void Import_Local(string File, eLocalSpreadsheeet CurrentExtension, eSpreadsheetUpdateMode UpdateMode) { try { serializedObject.ApplyModifiedProperties(); serializedObject.Update(); LocalizationEditor.ClearErrors(); if (string.IsNullOrEmpty(File)) { File = Application.dataPath + "/Localization.csv"; } else if (!System.IO.Path.IsPathRooted(File)) { File = string.Concat(Application.dataPath, "/", File); } // On Mac there is an issue with previewing CSV files, so its forced to only TXT if (Application.platform == RuntimePlatform.OSXEditor) { File = EditorUtility.OpenFilePanel("Select a CSV file renamed as TXT", File, "txt"); } else { File = EditorUtility.OpenFilePanel("Select a CSV file or a CSV file renamed as TXT", File, "csv;*.txt"); } //File = EditorUtility.OpenFilePanel("Select CSV, XLS or XLSX File", File, "csv;*.xls;*.xlsx"); if (!string.IsNullOrEmpty(File)) { mLanguageSource.Spreadsheet_LocalFileName = TryMakingPathRelativeToProject(File); switch (CurrentExtension) { case eLocalSpreadsheeet.CSV: Import_CSV(File, UpdateMode); break; } ParseTerms(true); UnityEditor.EditorUtility.SetDirty(target); AssetDatabase.SaveAssets(); } } catch (System.Exception ex) { LocalizationEditor.ShowError("Unable to import file"); Debug.LogError(ex.Message); } }
void Export_Google(eSpreadsheetUpdateMode UpdateMode) { StopConnectionWWW(); LanguageSource source = ((LanguageSource)target); mConnection_WWW = source.Export_Google_CreateWWWcall(UpdateMode); if (mConnection_WWW == null) { OnExported_Google(string.Empty, "WebPlayer can't contact Google"); } else { mConnection_Callback = OnExported_Google; EditorApplication.update += CheckForConnection; mConnection_Text = "Uploading spreadsheet"; //mConnection_TimeOut = Time.realtimeSinceStartup + 10; } }
public WWW Export_Google_CreateWWWcall(eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace) { #if UNITY_WEBPLAYER Debug.Log("Contacting google translation is not yet supported on WebPlayer"); return(null); #else string Data = Export_Google_CreateData(); WWWForm form = new WWWForm(); form.AddField("key", Google_SpreadsheetKey); form.AddField("action", "SetLanguageSource"); form.AddField("data", Data); form.AddField("updateMode", UpdateMode.ToString()); WWW www = new WWW(Google_WebServiceURL, form); return(www); #endif }
void OnGUI_GoogleButtons_ImportExport(string SpreadsheetKey) { GUI.enabled = !string.IsNullOrEmpty(SpreadsheetKey) && mConnection_WWW == null; GUILayout.BeginHorizontal(); GUILayout.Space(10); eSpreadsheetUpdateMode Mode = SynchronizationButtons("Import"); if (Mode != eSpreadsheetUpdateMode.None || InTestAction(eTest_ActionType.Button_GoogleSpreadsheet_Import)) { if (mTestAction == eTest_ActionType.Button_GoogleSpreadsheet_Import) { Mode = (eSpreadsheetUpdateMode)mTestActionArg; } serializedObject.ApplyModifiedProperties(); var modeCopy = Mode; GUITools.DelayedCall(() => Import_Google(modeCopy)); } GUILayout.FlexibleSpace(); Mode = SynchronizationButtons("Export"); if (Mode != eSpreadsheetUpdateMode.None || InTestAction(eTest_ActionType.Button_GoogleSpreadsheet_Export)) { if (mTestAction == eTest_ActionType.Button_GoogleSpreadsheet_Export) { Mode = (eSpreadsheetUpdateMode)mTestActionArg; } serializedObject.ApplyModifiedProperties(); var modeCopy = Mode; GUITools.DelayedCall(() => Export_Google(modeCopy)); } GUILayout.Space(10); GUILayout.EndHorizontal(); GUI.enabled = true; }
void Import_CSV(string FileName, eSpreadsheetUpdateMode UpdateMode) { LanguageSource source = (LanguageSource)target; var encoding = System.Text.Encoding.GetEncoding(mProp_Spreadsheet_LocalCSVEncoding.stringValue); if (encoding == null) { encoding = System.Text.Encoding.UTF8; } string CSVstring = LocalizationReader.ReadCSVfile(FileName, encoding); char Separator = mProp_Spreadsheet_LocalCSVSeparator.stringValue.Length > 0 ? mProp_Spreadsheet_LocalCSVSeparator.stringValue[0] : ','; string sError = source.Import_CSV(string.Empty, CSVstring, UpdateMode, Separator); if (!string.IsNullOrEmpty(sError)) { ShowError(sError); } mSelectedCategories = source.GetCategories(); }
void OnGUI_Spreadsheet_Local_ImportExport(eLocalSpreadsheeet CurrentExtension, string File) { GUI.enabled = (CurrentExtension != eLocalSpreadsheeet.NONE); GUILayout.BeginHorizontal(); GUILayout.Space(10); GUI.backgroundColor = Color.Lerp(Color.gray, Color.white, 0.5f); eSpreadsheetUpdateMode Mode = SynchronizationButtons("Import"); if (Mode != eSpreadsheetUpdateMode.None) { Import_Local(File, CurrentExtension, Mode); } GUILayout.FlexibleSpace(); GUI.backgroundColor = Color.Lerp(Color.gray, Color.white, 0.5f); Mode = SynchronizationButtons("Export", true); if (Mode != eSpreadsheetUpdateMode.None) { Export_Local(File, CurrentExtension, Mode); } GUILayout.Space(10); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); EditorGUIUtility.labelWidth += 10; EditorGUILayout.PropertyField(mProp_Spreadsheet_SpecializationAsRows, new GUIContent("Show Specializations as Rows", "true: Make each specialization a separate row (e.g. Term[VR]..., Term[Touch]....\nfalse: Merge specializations into same cell separated by [i2s_XXX]")); EditorGUIUtility.labelWidth -= 10; GUILayout.EndHorizontal(); GUI.enabled = true; }
public UnityWebRequest Export_Google_CreateWWWcall(eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace) { #if UNITY_WEBPLAYER Debug.Log("Contacting google translation is not yet supported on WebPlayer"); return(null); #else string Data = Export_Google_CreateData(); WWWForm form = new WWWForm(); form.AddField("key", Google_SpreadsheetKey); form.AddField("action", "SetLanguageSource"); form.AddField("data", Data); form.AddField("updateMode", UpdateMode.ToString()); #if UNITY_EDITOR form.AddField("password", Google_Password); #endif UnityWebRequest www = UnityWebRequest.Post(LocalizationManager.GetWebServiceURL(this), form); I2Utils.SendWebRequest(www); return(www); #endif }
public string Import_I2CSV(string Category, string I2CSVstring, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace) { List <string[]> CSV = LocalizationReader.ReadI2CSV(I2CSVstring); return(Import_CSV(Category, CSV, UpdateMode)); }
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); }
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()); } }
public string Import_Google_Result(string JsonString, eSpreadsheetUpdateMode UpdateMode, bool saveInPlayerPrefs = false) { string empty = string.Empty; if (string.IsNullOrEmpty(JsonString) || JsonString == "\"\"") { return(empty); } int num = JsonString.IndexOf("version=", StringComparison.Ordinal); int num2 = JsonString.IndexOf("script_version=", StringComparison.Ordinal); if (num < 0 || num2 < 0) { return("Invalid Response from Google, Most likely the WebService needs to be updated"); } num += "version=".Length; num2 += "script_version=".Length; string text = JsonString.Substring(num, JsonString.IndexOf(",", num, StringComparison.Ordinal) - num); int num3 = int.Parse(JsonString.Substring(num2, JsonString.IndexOf(",", num2, StringComparison.Ordinal) - num2)); if (text.Length > 19) { text = string.Empty; } if (num3 != LocalizationManager.GetRequiredWebServiceVersion()) { return("The current Google WebService is not supported.\nPlease, delete the WebService from the Google Drive and Install the latest version."); } if (saveInPlayerPrefs && !IsNewerVersion(Google_LastUpdatedVersion, text)) { return("LanguageSource is up-to-date"); } if (saveInPlayerPrefs) { string sourcePlayerPrefName = GetSourcePlayerPrefName(); PlayerPrefs.SetString("I2Source_" + sourcePlayerPrefName, JsonString); PlayerPrefs.SetString("I2SourceVersion_" + sourcePlayerPrefName, text); PlayerPrefs.Save(); } Google_LastUpdatedVersion = text; if (UpdateMode == eSpreadsheetUpdateMode.Replace) { ClearAllData(); } int num4 = JsonString.IndexOf("[i2category]", StringComparison.Ordinal); while (num4 > 0) { num4 += "[i2category]".Length; int num5 = JsonString.IndexOf("[/i2category]", num4, StringComparison.Ordinal); string category = JsonString.Substring(num4, num5 - num4); num5 += "[/i2category]".Length; int num6 = JsonString.IndexOf("[/i2csv]", num5, StringComparison.Ordinal); string i2CSVstring = JsonString.Substring(num5, num6 - num5); num4 = JsonString.IndexOf("[i2category]", num6, StringComparison.Ordinal); Import_I2CSV(category, i2CSVstring, UpdateMode); if (UpdateMode == eSpreadsheetUpdateMode.Replace) { UpdateMode = eSpreadsheetUpdateMode.Merge; } } return(empty); }
public string Import_CSV(string Category, string CSVstring, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace, char Separator = ',') { List <string[]> CSV = LocalizationReader.ReadCSV(CSVstring, Separator); return(Import_CSV(Category, CSV, UpdateMode)); }
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'"); }
public string Import_Google_Result(string JsonString, eSpreadsheetUpdateMode UpdateMode, bool saveInPlayerPrefs = false) { string ErrorMsg = string.Empty; if (string.IsNullOrEmpty(JsonString) || JsonString == "\"\"") { return(ErrorMsg); } int idxV = JsonString.IndexOf("version="); int idxSV = JsonString.IndexOf("script_version="); 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) - idxV); var scriptVersion = int.Parse(JsonString.Substring(idxSV, JsonString.IndexOf(",", idxSV) - idxSV)); 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 && newSpreadsheetVersion.CompareTo(Google_LastUpdatedVersion) <= 0) #if UNITY_EDITOR { return(""); } #else { return("LanguageSource is up-to-date"); } #endif if (saveInPlayerPrefs) { string PlayerPrefName = GetSourcePlayerPrefName(); PlayerPrefs.SetString("I2Source_" + PlayerPrefName, JsonString); PlayerPrefs.SetString("I2SourceVersion_" + PlayerPrefName, newSpreadsheetVersion); PlayerPrefs.Save(); } Google_LastUpdatedVersion = newSpreadsheetVersion; if (UpdateMode == eSpreadsheetUpdateMode.Replace) { ClearAllData(); } int CSVstartIdx = JsonString.IndexOf("[i2category]"); while (CSVstartIdx > 0) { CSVstartIdx += "[i2category]".Length; int endCat = JsonString.IndexOf("[/i2category]", CSVstartIdx); string category = JsonString.Substring(CSVstartIdx, endCat - CSVstartIdx); endCat += "[/i2category]".Length; int endCSV = JsonString.IndexOf("[/i2csv]", endCat); string csv = JsonString.Substring(endCat, endCSV - endCat); CSVstartIdx = JsonString.IndexOf("[i2category]", endCSV); Import_I2CSV(category, csv, UpdateMode); // Only the first CSV should clear the Data if (UpdateMode == eSpreadsheetUpdateMode.Replace) { UpdateMode = eSpreadsheetUpdateMode.Merge; } } #if UNITY_EDITOR if (!string.IsNullOrEmpty(ErrorMsg)) { UnityEditor.EditorUtility.SetDirty(this); } #endif return(ErrorMsg); }
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); }
public string Import_Google_Result(string JsonString, eSpreadsheetUpdateMode UpdateMode) { string ErrorMsg = string.Empty; if (string.IsNullOrEmpty(JsonString) || JsonString == "\"\"") { Debug.Log("Language Source was up to date"); return(ErrorMsg); } if (UpdateMode == eSpreadsheetUpdateMode.Replace) { ClearAllData(); } int idxV = JsonString.IndexOf("version="); int idxSV = JsonString.IndexOf("script_version="); 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; Google_LastUpdatedVersion = JsonString.Substring(idxV, JsonString.IndexOf(",", idxV) - idxV); var version = int.Parse(JsonString.Substring(idxSV, JsonString.IndexOf(",", idxSV) - idxSV)); if (version < LocalizationManager.GetRequiredWebServiceVersion()) { return("The current Google WebService is not supported.\nPlease, delete the WebService from the Google Drive and Install the latest version."); } int CSVstartIdx = JsonString.IndexOf("[i2category]"); while (CSVstartIdx > 0) { CSVstartIdx += "[i2category]".Length; int endCat = JsonString.IndexOf("[/i2category]", CSVstartIdx); string category = JsonString.Substring(CSVstartIdx, endCat - CSVstartIdx); endCat += "[/i2category]".Length; int endCSV = JsonString.IndexOf("[/i2csv]", endCat); string csv = JsonString.Substring(endCat, endCSV - endCat); CSVstartIdx = JsonString.IndexOf("[i2category]", endCSV); Import_CSV(category, csv, UpdateMode, ','); // Only the first CSV should clear the Data if (UpdateMode == eSpreadsheetUpdateMode.Replace) { UpdateMode = eSpreadsheetUpdateMode.Merge; } } #if UNITY_EDITOR if (!string.IsNullOrEmpty(ErrorMsg)) { UnityEditor.EditorUtility.SetDirty(this); } #endif return(ErrorMsg); }