【Unity】iOS本地化游戏应用名称

目录

原理:在构建出Xcode工程后使用XcodeAPI插件的API动态添加InfoPlist.strings文件到Xcode工程中,以此实现本地化应用名称。(最下方有效果演示)

运行打包出的测试包:


原理:在构建出Xcode工程后使用XcodeAPI插件的API动态添加InfoPlist.strings文件到Xcode工程中,以此实现本地化应用名称。(最下方有效果演示)

为什么要这么做?因为工程往往都是自动构建的,而InfoPlist.string是需要打出Xcode后手动创建的,会比较麻烦(无法一键化打包了)。

https://github.com/zeyangl/UnityAppNameLocalizationForIOS

将github下载的工程里如上方文件夹整个拷贝到您的Unity工程 Editor 文件夹下

新建一个脚本放在Editor文件夹下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using ChillyRoom.UnityEditor.iOS.Xcode; //引用xcode头文件
using System.IO;
using UnityEditor.Callbacks;//[PostProcessBuild]特性所需的头文件

public class MYIOSBuilder : Editor {

	/// <summary>
	/// 构建ios前允许我们进行的操作
	/// </summary>
	/// <param name="BuildTarget">Build target.</param>
	/// <param name="path">Path.</param>
	[PostProcessBuild]
	public static void OnPostprocessBuild (BuildTarget BuildTarget, string path)
	{
		if (BuildTarget == BuildTarget.iOS) 
		{			
			//1.根据build_path获取proj_path
			string projpath = PBXProject.GetPBXProjectPath (path);
			//创建proj对象
			PBXProject proj = new PBXProject ();
			//加载proj
			proj.ReadFromString (File.ReadAllText (projpath));
			//生成本地化文件配置
			generateProjFile (proj);
			//保存
			proj.WriteToFile (projpath);
		}
	}

	/// <summary>
	/// 生成InfoPlist本地化文件到xcode上,发布出去的包就会带上我们的本地化文件并且生效
	/// </summary>
	/// <param name="proj">Proj.</param>
	private static void generateProjFile(PBXProject proj)
	{		
		string targetGuid = proj.TargetGuidByName (PBXProject.GetUnityTargetName ());
		var codesign = Debug.isDebugBuild ? "iOS Developer":"iOS Distribution"; 
		proj.SetBuildProperty (targetGuid, "CODE_SIGN_IDENTITY", codesign);//非发布版本为Develper,发布版为Distribution (代码标签)
		proj.SetBuildProperty (targetGuid, "PROVISIONING_PROFILE_SPECIFIER", "Automatic");//自动

		//localizable  自动添加Xcode语言文件 (这个目录下有.lproj ,每一个.lproj文件夹下都有 .strings本地化文件
		var infoDirs = Directory.GetDirectories (Application.dataPath + "/IOSFile/lang/infoplist/");
		for (var i = 0; i < infoDirs.Length; ++i) {						
			var files = Directory.GetFiles (infoDirs [i], "*.strings");
			if (files != null & files.Length > 0) {
				string filepath = files [0];
				//个人理解:
				//参数1:文件群组名(本地化文件群组名为"InfoPlist.strings"
				//参数2:本地化文件名(保存于文件群组的文件名(Xcode上表现的名称?);
				//参数3:本地化文件绝对路径(unity工程上的?)
				proj.AddLocalization ("InfoPlist.strings", "InfoPlists.strings", filepath); 
			}
		}
	}
}

IOSFile/lang/infoplist下的三个文件夹en.lproj, zh-Hans.lproj , zh-Hant.lproj 分别是英文,简体,繁体文件夹,它们的命名是固定的,每一个文件夹下都有一个名为InfoPlist.strings的文件,这个就是本地化文件。这些文件夹都是要事先从Xcode工程里创建的,创建方法如下:

创建成功后如上图,右键打开本地

然后将创建好的这些.lproj文件拷贝到Unity下就完成了。

运行打包出的测试包:

2020年即将到来,辛苦了!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值