102 lines
3.4 KiB
C#
102 lines
3.4 KiB
C#
|
#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
|