/// <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); }
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); } }