123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #if UNITY_IOS || UNITY_IPHONE
- using UnityEditor.Callbacks;
- using System.Collections;
- using UnityEditor.iOS_I2Loc.Xcode;
- using System.IO;
- using UnityEditor;
- using UnityEngine;
- using System.Linq;
- namespace I2.Loc
- {
- public class PostProcessBuild_IOS
- {
- [PostProcessBuild(10000)]
- public static void ChangeXcodePlist(BuildTarget buildTarget, string pathToBuiltProject)
- {
- if (buildTarget != BuildTarget.iOS)
- return;
- if (LocalizationManager.Sources.Count <= 0)
- LocalizationManager.UpdateSources();
- var langCodes = LocalizationManager.GetAllLanguagesCode(false).Concat(LocalizationManager.GetAllLanguagesCode(true)).Distinct().ToList();
- if (langCodes.Count <= 0)
- return;
-
- try
- {
- //----[ Export localized languages to the info.plist ]---------
- string plistPath = pathToBuiltProject + "/Info.plist";
- PlistDocument plist = new PlistDocument();
- plist.ReadFromString(File.ReadAllText(plistPath));
- PlistElementDict rootDict = plist.root;
- // Get Language root
- var langArray = rootDict.CreateArray("CFBundleLocalizations");
- // Set the Language Codes
- foreach (var code in langCodes)
- {
- if (code == null || code.Length < 2)
- continue;
- langArray.AddString(code);
- }
- rootDict.SetString("CFBundleDevelopmentRegion", langCodes[0]);
- // Write to file
- File.WriteAllText(plistPath, plist.WriteToString());
- //--[ Localize App Name ]----------
- string LocalizationRoot = pathToBuiltProject + "/I2Localization";
- if (!Directory.Exists(LocalizationRoot))
- Directory.CreateDirectory(LocalizationRoot);
-
- var project = new PBXProject();
- string projPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
- //if (!projPath.EndsWith("xcodeproj"))
- //projPath = projPath.Substring(0, projPath.LastIndexOfAny("/\\".ToCharArray()));
- project.ReadFromFile(projPath);
- //var targetName = PBXProject.GetUnityTargetName();
- //string projBuild = project.TargetGuidByName( targetName );
- project.RemoveLocalizationVariantGroup("I2 Localization");
- // Set the Language Overrides
- foreach (var code in langCodes)
- {
- if (code == null || code.Length < 2)
- continue;
- var LanguageDirRoot = LocalizationRoot + "/" + code + ".lproj";
- if (!Directory.Exists(LanguageDirRoot))
- Directory.CreateDirectory(LanguageDirRoot);
- var infoPlistPath = LanguageDirRoot + "/InfoPlist.strings";
- var InfoPlist = string.Format("CFBundleDisplayName = \"{0}\";", LocalizationManager.GetAppName(code));
- File.WriteAllText(infoPlistPath, InfoPlist);
- var langProjectRoot = "I2Localization/"+code+".lproj";
- var stringPaths = LanguageDirRoot + "/Localizable.strings";
- File.WriteAllText(stringPaths, string.Empty);
-
- project.AddLocalization(langProjectRoot + "/Localizable.strings", langProjectRoot + "/Localizable.strings", "I2 Localization");
- project.AddLocalization(langProjectRoot + "/InfoPlist.strings", langProjectRoot + "/InfoPlist.strings", "I2 Localization");
- }
- project.WriteToFile(projPath);
-
- }
- catch (System.Exception e)
- {
- Debug.Log (e);
- }
- }
- }
- }
- #endif
|