Unity Android 之 获取系统语言(手机设备设置的系统语言)的二种方式(中文区分简体、繁体)

 

 

Unity Android 之 获取系统语言的二种方式(中文区分简体、繁体)

 

目录

Unity Android 之 获取系统语言的二种方式(中文区分简体、繁体)

一、简单介绍

二、实现原理

三、注意事项

四、效果预览

五、实现步骤

六、关键代码

七、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();
        }

    }
}

 

猜你喜欢

转载自blog.csdn.net/u014361280/article/details/107677004
今日推荐