public void InitializeCultureCollections(bool reloadAllCultures = false)
        {
            if (reloadAllCultures)
            {
                allCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath());
            }

            availableCultures    = LanguageHandlerEditor.CheckAndSaveAvailableLanguages(allCultures);
            nonAvailableCultures = LanguageHandlerEditor.GetNonAvailableLanguages(allCultures);

            availableCultures.cultureInfos.Sort((a, b) =>
            {
                return(a.englishName.CompareTo(b.englishName));
            });
            nonAvailableCultures.cultureInfos.Sort((a, b) =>
            {
                return(a.englishName.CompareTo(b.englishName));
            });

            availableCultures.cultureInfos.Insert(0, new SmartCultureInfo(string.Empty, "ROOT", "ROOT", false));

            languageListAdaptor     = new SmartCultureInfoListAdaptor(availableCultures.cultureInfos, DrawAvailableLanguageItem, 28);
            languageListContextMenu = new SmartCultureInfoMenuControl();

            createListAdaptor     = new CreateLanguageListAdaptor(nonAvailableCultures.cultureInfos, DrawCreateLanguageItem, 15);
            createListContextMenu = new CreateLanguageMenuControl();

            settingsAdaptor     = new SettingsListAdaptor(settingsList, DrawSettingsItem, 110);
            settingsContextMenu = new SettingsMenuControl();
        }
Esempio n. 2
0
	/// <summary> Deletes the language. </summary>
	public static void DeleteLanguage(SmartCultureInfo cultureInfo)
	{
		string filePath = LocalizationWorkspace.LanguageFilePath(cultureInfo.languageCode);
		if(FileUtility.Exists(filePath))
		{
			FileUtility.Delete(filePath);
			FileUtility.Delete(filePath + LocalizationWorkspace.metaFileEnding);
		}
		//The text file
		filePath = LocalizationWorkspace.ResourcesFolderFilePath() + "/" + LocalizationWorkspace.rootLanguageName + "." + cultureInfo.languageCode + LocalizationWorkspace.txtFileEnding;
		if(FileUtility.Exists(filePath))
		{
			FileUtility.Delete(filePath);
			FileUtility.Delete(filePath + LocalizationWorkspace.metaFileEnding);
		}
		
		//The assets directory
		filePath = LocalizationWorkspace.LanguageRuntimeFolderPath(cultureInfo.languageCode);
		if(Directory.Exists(filePath))
		{
			Directory.Delete(filePath + "/", true);
			FileUtility.Delete(filePath + LocalizationWorkspace.metaFileEnding);
		}

		SmartCultureInfoCollection allCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath());
		LanguageHandlerEditor.CheckAndSaveAvailableLanguages(allCultures);
		AssetDatabase.Refresh();
	}
Esempio n. 3
0
	/// <summary>
	/// Loads all the language files with their raw values
	/// </summary>
	/// <returns>A dictionary with all the language dictionaries. The language codes are being used as keys</returns>
	public static Dictionary<string,Dictionary<string,string>> LoadAllLanguageFiles()
	{
		var allLanguages = new Dictionary<string,Dictionary<string,string>>();
		var availableCultures = LanguageHandlerEditor.CheckAndSaveAvailableLanguages(SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath()));

		foreach(SmartCultureInfo info in availableCultures.cultureInfos)
		{
			allLanguages.Add(info.languageCode, LoadLanguageFile(info.languageCode, false));
		}

		return allLanguages;
	}
        void OnGotAvailableLanguages(bool success, List <string> availableLanguages)
        {
            if (!success)
            {
                return;
            }

            availableTranslateFromLanguages.Clear();
            //Clear the array
            if (availableTranslateLangEnglishNames != null)
            {
                Array.Clear(availableTranslateLangEnglishNames, 0, availableTranslateLangEnglishNames.Length);
                availableTranslateLangEnglishNames = null;
            }

            if (translateFromDictionary != null)
            {
                translateFromDictionary.Clear();
                translateFromDictionary = null;
            }
            translateFromLanguageValue    = 0;
            oldTranslateFromLanguageValue = 0;

            List <string> englishNames = new List <string>();

            englishNames.Add("None");
            if (availableLanguages.Contains(currentCultureInfo.languageCode))
            {
                canLanguageBeTranslated = true;

                SmartCultureInfoCollection allCultures       = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath());
                SmartCultureInfoCollection availableCultures = LanguageHandlerEditor.CheckAndSaveAvailableLanguages(allCultures);

                foreach (SmartCultureInfo cultureInfo in availableCultures.cultureInfos)
                {
                    if (cultureInfo.languageCode != currentCultureInfo.languageCode && availableLanguages.Contains(cultureInfo.languageCode))
                    {
                        availableTranslateFromLanguages.Add(cultureInfo);
                        englishNames.Add(cultureInfo.englishName);
                    }
                }
            }
            else
            {
                canLanguageBeTranslated = false;
            }
            availableTranslateLangEnglishNames = englishNames.ToArray();
        }
        static bool CheckStorePresence()
        {
            string pluginDirectory   = "/" + PluginFolderName;
            string androidDirectory  = pluginDirectory + "/" + AndroidFolderName;
            string resourceDirectory = androidDirectory + "/" + ResourceFolderName;

            if (DirectoryUtility.ExistsRelative(pluginDirectory) &&
                DirectoryUtility.ExistsRelative(androidDirectory) &&
                DirectoryUtility.ExistsRelative(resourceDirectory) &&
                DirectoryUtility.ExistsRelative(resourceDirectory + "/" + ValuesFolderName) &&
                FileUtility.ExistsRelative(resourceDirectory + "/" + ValuesFolderName + "/" + StringsFileName))
            {
                if (!DoesFileHavePresence(Application.dataPath + "/" + resourceDirectory + "/" + ValuesFolderName + "/" + StringsFileName))
                {
                    return(false);
                }

                var availableCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.AvailableCulturesFilePath());

                foreach (SmartCultureInfo cultureInfo in availableCultures.cultureInfos)
                {
                    if (!IsLanguageSupported(cultureInfo.languageCode))
                    {
                        continue;
                    }

                    string currentLanguageFolderPath = GetValueFolderPath(resourceDirectory, cultureInfo);

                    if (!DirectoryUtility.ExistsRelative(currentLanguageFolderPath))
                    {
                        return(false);
                    }
                    if (!FileUtility.ExistsRelative(currentLanguageFolderPath + "/" + StringsFileName))
                    {
                        return(false);
                    }
                    else if (!DoesFileHavePresence(Application.dataPath + "/" + currentLanguageFolderPath + "/" + StringsFileName))
                    {
                        return(false);
                    }
                }

                return(true);
            }

            return(false);
        }
        void SaveRootLanguageFile()
        {
            var changeNewRootKeys   = new Dictionary <string, string>();
            var changeNewRootValues = new Dictionary <string, string>();

            for (int i = 0; i < changedRootKeys.Count; i++)
            {
                SerializableStringPair             rootKey   = changedRootKeys[i];
                SerializableLocalizationObjectPair rootValue = changedRootValues[i];
                //Check for possible duplicates and rename them
                string newKeyValue = LanguageDictionaryHelper.AddNewKeyPersistent(changeNewRootKeys,
                                                                                  rootKey.originalValue,
                                                                                  rootValue.changedValue.GetFullKey(rootKey.changedValue));

                //Check for possible duplicates and rename them(same as above)
                LanguageDictionaryHelper.AddNewKeyPersistent(changeNewRootValues, newKeyValue, rootValue.changedValue.TextValue);
            }

            //Add the full values before saving
            var changeNewRootKeysToSave   = new Dictionary <string, string>();
            var changeNewRootValuesToSave = new Dictionary <string, string>();

            foreach (var rootKey in changeNewRootKeys)
            {
                LocalizedObject thisLocalizedObject = parsedRootValues[rootKey.Key];
                changeNewRootKeysToSave.Add(thisLocalizedObject.GetFullKey(rootKey.Key), rootKey.Value);
                changeNewRootValuesToSave.Add(thisLocalizedObject.GetFullKey(rootKey.Key), changeNewRootValues[rootKey.Key]);
            }



            SmartCultureInfoCollection allCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath());

            LanguageHandlerEditor.SaveRootLanguageFile(changeNewRootKeysToSave, changeNewRootValuesToSave, LanguageHandlerEditor.CheckAndSaveAvailableLanguages(allCultures));

            //Fire the root language changed event
            if (OnRootFileChanged != null)
            {
                OnRootFileChanged();
            }

            //Reload the window(in case of duplicate keys)
            SetRootValues(LanguageHandlerEditor.LoadParsedLanguageFile(null, true));
        }
Esempio n. 7
0
        /// <summary>
        /// Checks .resx files and converts them into text assets that can be used at runtime
        /// </summary>
        public static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
        {
            //Only use this if there's a localization system created
            if (!LocalizationWorkspace.Exists())
            {
                return;
            }

            foreach (string asset in importedAssets)
            {
                if (asset.EndsWith(LocalizationWorkspace.resXFileEnding))
                {
                    string newFileName = LocalizationWorkspace.ResourcesFolderFilePath() + "/" + Path.GetFileNameWithoutExtension(asset) + LocalizationWorkspace.txtFileEnding;

                    if (!DirectoryUtility.CheckAndCreate(LocalizationWorkspace.ResourcesFolderFilePath()))
                    {
                        return;
                    }

                    //Delete the file if it already exists
                    if (FileUtility.Exists(newFileName))
                    {
                        FileUtility.Delete(newFileName);
                    }

                    string fileData = "";
                    using (StreamReader reader = new StreamReader(asset))
                    {
                        fileData = reader.ReadToEnd();
                    }


                    FileUtility.WriteToFile(newFileName, fileData);

                    SmartCultureInfoCollection allCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath());
                    LanguageHandlerEditor.CheckAndSaveAvailableLanguages(allCultures);

                    AssetDatabase.Refresh(ImportAssetOptions.Default);
                }
            }
        }
Esempio n. 8
0
        void Initialize()
        {
            if (undoManager == null)
            {
                undoManager = new HOEditorUndoManager(this, "SmartLocalization-Main");
            }

            if (availableCultures == null)
            {
                allCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath());

                if (allCultures.version != SmartCultureInfoCollection.LatestVersion)
                {
                    LocalizationWorkspace.GenerateCultureInfoCollection(allCultures);
                    allCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath());
                }
                InitializeCultureCollections();
            }

            if (EditorPrefs.HasKey(MicrosoftTranslatorIDSaveKey) && EditorPrefs.HasKey(MicrosoftTranslatorSecretSaveKey) && EditorPrefs.HasKey(KeepAuthenticatedSaveKey))
            {
                mtClientID     = EditorPrefs.GetString(MicrosoftTranslatorIDSaveKey);
                mtClientSecret = EditorPrefs.GetString(MicrosoftTranslatorSecretSaveKey);
                keepTranslatorAuthenticated = EditorPrefs.GetBool(KeepAuthenticatedSaveKey);
            }

            InitializeTranslator();

            generateAndroidPresence = AndroidStorePresenceGenerator.GenerateStorePresence;
            generateiOSPresence     = IOSStorePresenceGenerator.GenerateStorePresence;

            settingsList.Clear();
            settingsList.Add("SETTINGS");
            settingsList.Add("STOREPRESENCE");
            settingsList.Add("AUTOTRANSLATE");

            isInitialized = true;

            GUIUtility.keyboardControl = 0;
        }
Esempio n. 9
0
        void OnGUI()
        {
            if (LocalizationWindowUtility.ShouldShowWindow())
            {
                GUILayout.Label("Create a new culture info", EditorStyles.boldLabel);

                languageCode = EditorGUILayout.TextField("Language Code", languageCode);
                if (languageCode != null)
                {
                    languageCode = languageCode.RemoveWhitespace();
                }

                englishName   = EditorGUILayout.TextField("English Name", englishName);
                nativeName    = EditorGUILayout.TextField("Native Name", nativeName);
                isRightToLeft = EditorGUILayout.Toggle("Is Right To Left", isRightToLeft);

                if (GUILayout.Button("Create"))
                {
                    SmartCultureInfo newInfo = new SmartCultureInfo();
                    newInfo.languageCode  = languageCode;
                    newInfo.englishName   = englishName.Trim();
                    newInfo.nativeName    = nativeName.Trim();
                    newInfo.isRightToLeft = isRightToLeft;

                    SmartCultureInfoCollection allCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath());
                    if (!allCultures.IsCultureInCollection(newInfo))
                    {
                        allCultures.AddCultureInfo(newInfo);
                        allCultures.Serialize(LocalizationWorkspace.CultureInfoCollectionFilePath());
                        LanguageHandlerEditor.CheckAndSaveAvailableLanguages(allCultures);

                        showHelpMessage = true;
                        helpMessageType = MessageType.Info;
                        helpMessage     = string.Format("Successfully created language!\n Language Code: {0}\n English Name:{1}\n Native Name:{2}\n IsRightToLeft:{3}",
                                                        newInfo.languageCode, newInfo.englishName, newInfo.nativeName, newInfo.isRightToLeft);

                        if (parentWindow != null)
                        {
                            parentWindow.InitializeCultureCollections(true);
                        }

                        this.Close();
                    }
                    else
                    {
                        SmartCultureInfo conflictingCulture  = allCultures.FindCulture(newInfo);
                        string           conflictingVariable = null;

                        if (conflictingCulture.languageCode.ToLower() == newInfo.languageCode.ToLower())
                        {
                            conflictingVariable = "Language Code:" + newInfo.languageCode;
                        }
                        else if (conflictingCulture.englishName.ToLower() == newInfo.englishName.ToLower())
                        {
                            conflictingVariable = "English Name:" + newInfo.englishName;
                        }

                        showHelpMessage = true;
                        helpMessageType = MessageType.Error;
                        helpMessage     = string.Format("Failed to create language!\n Conflicting variable - {0}\n\n",
                                                        conflictingVariable);

                        helpMessage += string.Format("Conflicting Culture \n Language Code: {0}\n English Name:{1}\n Native Name:{2}",
                                                     conflictingCulture.languageCode, conflictingCulture.englishName, conflictingCulture.nativeName);
                    }
                }

                if (showHelpMessage)
                {
                    EditorGUILayout.HelpBox(helpMessage, helpMessageType);
                }
            }
        }
        /// <summary>
        /// Generates all the files for store presence
        /// </summary>
        /// <returns>If the operation was successful</returns>
        public static bool GeneratePresence()
        {
            if (HasStorePresence)
            {
                return(true);
            }

            string currentDirectory = Application.dataPath + "/" + PluginFolderName;

            if (!DirectoryUtility.CheckAndCreate(currentDirectory))
            {
                return(false);
            }

            currentDirectory += "/" + AndroidFolderName;
            if (!DirectoryUtility.CheckAndCreate(currentDirectory))
            {
                return(false);
            }

            currentDirectory += "/" + ResourceFolderName;
            if (!DirectoryUtility.CheckAndCreate(currentDirectory))
            {
                return(false);
            }

            //Create the default directory
            if (!DirectoryUtility.CheckAndCreate(currentDirectory + "/" + ValuesFolderName))
            {
                return(false);
            }

            if (!AppendOrCreateStringsFile(currentDirectory + "/" + ValuesFolderName + "/" + StringsFileName))
            {
                return(false);
            }

            var availableCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.AvailableCulturesFilePath());

            foreach (SmartCultureInfo cultureInfo in availableCultures.cultureInfos)
            {
                if (!IsLanguageSupported(cultureInfo.languageCode))
                {
                    continue;
                }

                string currentLanguageFolderPath = GetValueFolderPath(currentDirectory, cultureInfo);

                if (!DirectoryUtility.CheckAndCreate(currentLanguageFolderPath))
                {
                    return(false);
                }

                if (!AppendOrCreateStringsFile(currentLanguageFolderPath + "/" + StringsFileName))
                {
                    return(false);
                }
            }

            AssetDatabase.Refresh();

            return(true);
        }
Esempio n. 11
0
        public static void OnPostProcessBuild(BuildTarget target, string path)
        {
#if UNITY_4_6 || UNITY_4_7
            if (target != BuildTarget.iPhone)
#else
            if (target != BuildTarget.iOS)
#endif
            {
                return;
            }

            if (!GenerateStorePresence)
            {
                return;
            }

            const string fileName = "Info.plist";
            string       fullPath = Path.Combine(path, fileName);

            var doc = new XmlDocument();
            doc.Load(fullPath);

            var dict = FindPlistDictNode(doc);
            if (dict == null)
            {
                Debug.LogError("[Smartlocalization] Error parsing " + fullPath);
                return;
            }

            AddChildElement(doc, dict, "key", "CFBundleLocalizations");
            var arrayKey = AddChildElement(doc, dict, "array");

            var availableCultures = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.AvailableCulturesFilePath());

            foreach (var cultureInfo in availableCultures.cultureInfos)
            {
                AddChildElement(doc, arrayKey, "string", cultureInfo.languageCode);
            }

            doc.Save(fullPath);

            //the xml writer barfs writing out part of the plist header.
            //so we replace the part that it wrote incorrectly here
            string textPlist = null;
            using (var reader = new StreamReader(fullPath))
            {
                textPlist = reader.ReadToEnd();
            }

            int fixupStart = textPlist.IndexOf("<!DOCTYPE plist PUBLIC", System.StringComparison.Ordinal);
            if (fixupStart <= 0)
            {
                return;
            }
            int fixupEnd = textPlist.IndexOf('>', fixupStart);
            if (fixupEnd <= 0)
            {
                return;
            }

            string fixedPlist = textPlist.Substring(0, fixupStart);
            fixedPlist += "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">";
            fixedPlist += textPlist.Substring(fixupEnd + 1);

            using (var writer = new StreamWriter(fullPath, false))
            {
                writer.Write(fixedPlist);
            }
        }
        public void Initialize(SmartCultureInfo thisCultureInfo, bool forceNewLanguage = false)
        {
            if (thisCultureInfo != null)
            {
                if (undoManager == null)
                {
                    // Instantiate Undo Manager
                    undoManager = new HOEditorUndoManager(this, "Smart Localization - Translate Language Window");
                }

                if (thisCultureInfo != null)
                {
                    bool newLanguage = thisCultureInfo != this.currentCultureInfo ? true : false;

                    if (Application.isPlaying || forceNewLanguage)
                    {
                        newLanguage = true;
                    }

                    this.currentCultureInfo = thisCultureInfo;
                    if (loadedLanguageValues == null || loadedLanguageValues.Count < 1 || newLanguage)
                    {
                        InitializeLanguage(thisCultureInfo,
                                           LanguageHandlerEditor.LoadParsedLanguageFile(null, true),
                                           LanguageHandlerEditor.LoadParsedLanguageFile(thisCultureInfo.languageCode,
                                                                                        false));
                    }
                }

                settingsList.Clear();
                settingsList.Add("SETTINGS");
                settingsList.Add("CONVERTLINEBREAK");
                settingsList.Add("WATCHFILE");
                settingsList.Add("AUTOTRANSLATE");
                settingsList.Add("GENERAL");

#if UNITY_4_6 || UNITY_4_7 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5_3
                if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.WebPlayer &&
                    EditorUserBuildSettings.activeBuildTarget != BuildTarget.WebPlayerStreamed)
#endif
                {
                    settingsList.Add("SORT");
                }

                settingsList.Add("SEARCH");

                settingsAdaptor     = new SettingsListAdaptor(settingsList, DrawSettingsItem, 20);
                settingsContextMenu = new SettingsMenuControl();

                listColumns = new EditorColumns(0.02f, true);
                listColumns.AddColumn("Copy", 0.1f);
                listColumns.AddColumn("Translate", 0.1f);
                listColumns.AddColumn("Key", 0.21f);
                listColumns.AddColumn("Comment", 0.21f);
                listColumns.AddColumn("Override", 0.07f);
                listColumns.AddColumn("Value", 0.25f);
                listColumns.RecalculateColumnWidths();

                if (EditorPrefs.HasKey(CollapseMultilineSaveKey))
                {
                    collapseMultilineFields = EditorPrefs.GetBool(CollapseMultilineSaveKey);
                }

                GUIUtility.keyboardControl = 0;

                SmartCultureInfoCollection allCultures       = SmartCultureInfoEx.Deserialize(LocalizationWorkspace.CultureInfoCollectionFilePath());
                SmartCultureInfoCollection availableCultures = LanguageHandlerEditor.CheckAndSaveAvailableLanguages(allCultures);
                otherAvailableLanguageCodes.Clear();
                otherAvailableLanguageCodesArray = null;
                foreach (SmartCultureInfo otherCulture in availableCultures.cultureInfos)
                {
                    if (otherCulture.languageCode != thisCultureInfo.languageCode)
                    {
                        otherAvailableLanguageCodes.Add(otherCulture.languageCode);
                    }
                }

                if (otherAvailableLanguageCodes.Count > 0)
                {
                    otherAvailableLanguageCodesArray = otherAvailableLanguageCodes.ToArray();
                }
            }
        }