예제 #1
0
	/// <summary>
	/// Checks all the created languages and Saves the AvailableCultures xml.
	/// </summary>
	/// <param name="allCultures">A list of all the available cultures</param>
	/// <returns>A list of all the created languages</returns>
	public static SmartCultureInfoCollection CheckAndSaveAvailableLanguages(SmartCultureInfoCollection allCultures)
	{
		SmartCultureInfoCollection createdCultures = new SmartCultureInfoCollection();
		
		foreach(SmartCultureInfo cultureInfo in allCultures.cultureInfos)
		{
			if(FileUtility.Exists(LocalizationWorkspace.LanguageFilePath(cultureInfo.languageCode)))
			{
				createdCultures.AddCultureInfo(cultureInfo);
			}
		}

		createdCultures.Serialize(LocalizationWorkspace.AvailableCulturesFilePath());
		
		return createdCultures;
	}
        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);
        }
        /// <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);
        }
예제 #4
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);
            }
        }