Unity Android 之 获取系统语言的二种方式(中文区分简体、繁体)
目录
Unity Android 之 获取系统语言的二种方式(中文区分简体、繁体)
一、简单介绍
整理一些在Unity上可以方便调用 Android 方法的一些接口脚本,便于后期开发使用。
本文介绍在Unity,调用Android的接口,获得当前系统的语言的方法,仅供参考。
二、实现原理
1、Unity 调用 Android 接口 Locale ,然后对应的获取相应的语言信息
2、local 获得方式的不同,解析语言的方式也就不同
三、注意事项
1、有一种方法,Android API 使用要求 21 或以上,所以打包 Android Apk 建议 Minimun API Level 为 21 及以上
四、效果预览
五、实现步骤
1、打开Unity ,新建一个空工程
2、在场景中添加脚本,GetSystemLanguageWrapper 编写代码获取系统
3、在工程中挂载测试脚本
4、运行场景,(打包到手机设备上运行)效果如上
六、关键代码
1、GetSystemLanguageWrapper.cs
using UnityEngine;
/// <summary>
/// 获得系统设置语言的方法
/// </summary>
public class GetSystemLanguageWrapper
{
// Unity Android 上下文
private static AndroidJavaObject _unityContext;
public static AndroidJavaObject UnityContext {
get {
if (_unityContext ==null)
{
AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
_unityContext = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
}
return _unityContext;
}
}
/// <summary>
/// 获取系统语言
/// 这种方法目前:不能区分中文简体繁体
/// </summary>
/// <returns>Chinese/English</returns>
public static string GetSystemLanguage()
{
string systemLanguage;
if (Application.platform == RuntimePlatform.Android)
{
AndroidJavaClass localeClass = new AndroidJavaClass("java/util/Locale");
AndroidJavaObject defaultLocale = localeClass.CallStatic<AndroidJavaObject>("getDefault");
AndroidJavaObject usLocale = localeClass.GetStatic<AndroidJavaObject>("US");
systemLanguage = defaultLocale.Call<string>("getDisplayLanguage", usLocale);
}
else
{
systemLanguage = Application.systemLanguage.ToString();
}
return systemLanguage;
}
/// <summary>
/// 区分中文的简体繁体
/// 情况分为2种:
/// 1、
/// String ZH = "zh";
/// 中文简体
/// String CN_HANS = "zh-Hans";
/// 中文繁体
/// String CN_HANT = "zh-Hant";
/// 2、
/// locale.toLanguageTag()
/// 中国 zh-Hans-CN
/// 台湾 zh-Hans-TW
/// 澳门 zh-Hans-MO
/// 香港 zh-Hans-HK
/// </summary>
/// <returns></returns>
public static string GetSystemLanguage_STCN()
{
string systemLanguage;
if (Application.platform == RuntimePlatform.Android)
{
AndroidJavaObject locale = UnityContext.Call<AndroidJavaObject>("getResources").Call<AndroidJavaObject>("getConfiguration").Get<AndroidJavaObject>("locale");
if (locale.Call<string>("getLanguage").Equals("zh"))
{
if (locale.Call<string>("toLanguageTag").Equals("zh-Hans"))
{
systemLanguage = "简体中文 " + locale.Call<string>("toLanguageTag");
}
else if (locale.Call<string>("toLanguageTag").Equals("zh-Hant"))
{
systemLanguage = "繁体中文 " + locale.Call<string>("toLanguageTag");
}
else
{ // 第二种简繁中文情况
switch (locale.Call<string>("getCountry"))
{
case "CN":
systemLanguage = "简体中文 " + locale.Call<string>("toLanguageTag");
break;
default:
systemLanguage = "繁体中文 " + locale.Call<string>("toLanguageTag");
break;
}
}
}
else {
systemLanguage = "非中文 " + locale.Call<string>("toLanguageTag");
}
}
else
{
systemLanguage = Application.systemLanguage.ToString();
}
return systemLanguage;
}
}
2、TestGetSystemLanguageWrapper.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestGetSystemLanguageWrapper : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Debug.Log(GetSystemLanguageWrapper.GetSystemLanguage());
Debug.Log(GetSystemLanguageWrapper.GetSystemLanguage_STCN());
}
}
七、Android 代码附注:
package com.example.getsystemlanguage;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeyLanguage();
}
void GeyLanguage(){
Locale locale = getResources().getConfiguration().locale;
// 获取当前系统语言
String ZH = "zh";
//中文简体
String CN_HANS = "zh-Hans";
//中文繁体
String CN_HANT = "zh-Hant";
//如果是中文
if (locale.getLanguage().equals(ZH)) {
//locale.toLanguageTag()
//中国 zh-Hans-CN
//台湾 zh-Hans-TW
//澳门 zh-Hans-MO
//香港 zh-Hans-HK
if (locale.toLanguageTag().contains(CN_HANS)) {
//简体
Toast.makeText(this,"当前手机语言环境是 简体",Toast.LENGTH_LONG).show();
} else if (locale.toLanguageTag().contains(CN_HANT)){
//繁体
Toast.makeText(this,"当前手机语言环境是 繁体",Toast.LENGTH_LONG).show();
} else {
switch (locale.getCountry()) {
case "CN":
//简体
Toast.makeText(this,"当前手机语言环境是 简体",Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(this,"当前手机语言环境是 繁体",Toast.LENGTH_LONG).show();
break;
}
}
} else {
Toast.makeText(this,"当前手机语言环境是 不是中文",Toast.LENGTH_LONG).show();
}
}
}