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

 

目录

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

一、简单介绍

二、实现原理

三、注意事项

四、效果预览

五、实现步骤

六、关键代码

七、Android 代码附注:

八、android资源文件夹的写法规则: 语言缩写-国家地区缩写 语言缩写


 

一、简单介绍

整理一些在Unity上可以方便调用 Android 方法的一些接口脚本,便于后期开发使用。

本文介绍在Unity,调用Android的接口,获得当前系统的语言的方法,仅供参考。

 

二、实现原理

1、Unity 调用 Android 接口 Locale ,然后对应的获取相应的语言信息

2、local 获得方式的不同,解析语言的方式也就不同

 

三、注意事项

1、有一种方法,Android API 使用要求 21 或以上,所以打包 Android Apk 建议 Minimun API Level  为 21 及以上

 

四、效果预览

Android获取系统当前语言 安卓获取语言_Android

Android获取系统当前语言 安卓获取语言_语言环境_02

 

五、实现步骤

1、打开Unity ,新建一个空工程

Android获取系统当前语言 安卓获取语言_Android获取系统当前语言_03

 

2、在场景中添加脚本,GetSystemLanguageWrapper 编写代码获取系统

Android获取系统当前语言 安卓获取语言_语言环境_04

 

3、在工程中挂载测试脚本

Android获取系统当前语言 安卓获取语言_获取系统语言_05

 

4、运行场景,(打包到手机设备上运行)效果如上

Android获取系统当前语言 安卓获取语言_获取系统语言_06

 

六、关键代码

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 if (locale.Call<string>("getLanguage").Equals("ko")|| locale.Call<string>("getLanguage").StartsWith("ja")) {
                systemLanguage = "日文" + locale.Call<string>("toLanguageTag");
            }
            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();
        }

    }
}

 

八、android资源文件夹的写法规则: 语言缩写-国家地区缩写 语言缩写

android资源文件夹的写法规则: 语言缩写-国家地区缩写 语言缩写

藏语:bo_CN en

英文 en_US

英文 (美国) ar

阿拉伯文 ar_AE

阿拉伯文 (阿拉伯联合酋长国) ar_BH

阿拉伯文 (巴林) ar_DZ

阿拉伯文 (阿尔及利亚) ar_EG

阿拉伯文 (埃及) ar_IQ

阿拉伯文 (伊拉克) ar_JO

阿拉伯文 (约旦) ar_KW

阿拉伯文 (科威特) ar_LB

阿拉伯文 (黎巴嫩) ar_LY

阿拉伯文 (利比亚) ar_MA

阿拉伯文 (摩洛哥) ar_OM

阿拉伯文 (阿曼) ar_QA

阿拉伯文 (卡塔尔) ar_SA

阿拉伯文 (沙特阿拉伯) ar_SD

阿拉伯文 (苏丹) ar_SY

阿拉伯文 (叙利亚) ar_TN

阿拉伯文 (突尼斯) ar_YE

阿拉伯文 (也门) be

白俄罗斯文 be_BY

白俄罗斯文 (白俄罗斯) bg

保加利亚文 bg_BG

保加利亚文 (保加利亚) ca

加泰罗尼亚文 ca_ES

加泰罗尼亚文 (西班牙) ca_ES_EURO

加泰罗尼亚文 (西班牙,Euro) cs

捷克文 cs_CZ

捷克文 (捷克共和国) da

丹麦文 da_DK

丹麦文 (丹麦) de

德文 de_AT

德文 (奥地利) de_AT_EURO

德文 (奥地利,Euro) de_CH

德文 (瑞士) de_DE

德文 (德国) de_DE_EURO

德文 (德国,Euro) de_LU

德文 (卢森堡) de_LU_EURO

德文 (卢森堡,Euro) el

希腊文 el_GR 希腊文 (希腊) en_AU

英文 (澳大利亚) en_CA 英文

(加拿大) en_GB 英文 (英国) en_IE

英文 (爱尔兰) en_IE_EURO

英文 (爱尔兰,Euro) en_NZ

英文 (新西兰) en_ZA

英文 (南非) es 西班牙文 es_BO

西班牙文 (玻利维亚) es_AR

西班牙文 (阿根廷) es_CL

西班牙文 (智利) es_CO

西班牙文 (哥伦比亚) es_CR

西班牙文 (哥斯达黎加) es_DO

西班牙文 (多米尼加共和国) es_EC

西班牙文 (厄瓜多尔) es_ES

西班牙文 (西班牙) es_ES_EURO

西班牙文 (西班牙,Euro) es_GT

西班牙文 (危地马拉) es_HN

西班牙文 (洪都拉斯) es_MX

西班牙文 (墨西哥) es_NI

西班牙文 (尼加拉瓜) et

爱沙尼亚文 es_PA

西班牙文 (巴拿马) es_PE

西班牙文 (秘鲁) es_PR

西班牙文 (波多黎哥) es_PY

西班牙文 (巴拉圭) es_SV

西班牙文 (萨尔瓦多) es_UY

西班牙文 (乌拉圭) es_VE

西班牙文 (委内瑞拉) et_EE

爱沙尼亚文 (爱沙尼亚) fi

芬兰文 fi_FI

芬兰文 (芬兰) fi_FI_EURO

芬兰文 (芬兰,Euro) fr

法文 fr_BE 法文

(比利时) fr_BE_EURO

法文 (比利时,Euro) fr_CA

法文 (加拿大) fr_CH

法文 (瑞士) fr_FR

法文 (法国) fr_FR_EURO

法文 (法国,Euro) fr_LU

法文 (卢森堡) fr_LU_EURO

法文 (卢森堡,Euro) hr

克罗地亚文 hr_HR

克罗地亚文 (克罗地亚) hu

匈牙利文 hu_HU

匈牙利文 (匈牙利) is

冰岛文 is_IS

冰岛文 (冰岛) it

意大利文 it_CH

意大利文 (瑞士) it_IT

意大利文 (意大利) it_IT_EURO

意大利文 (意大利,Euro) iw

希伯来文 iw_IL

希伯来文 (以色列) ja

日文 ja_JP

日文 (日本) ko

朝鲜文 ko_KR

朝鲜文 (南朝鲜) lt

立陶宛文 lt_LT

立陶宛文 (立陶宛) lv

拉托维亚文(列托) lv_LV

拉托维亚文(列托) (拉脱维亚) mk

马其顿文 mk_MK

马其顿文 (马其顿王国) nl

荷兰文 nl_BE

荷兰文 (比利时) nl_BE_EURO

荷兰文 (比利时,Euro) nl_NL

荷兰文 (荷兰) nl_NL_EURO

荷兰文 (荷兰,Euro) no

挪威文 no_NO

挪威文 (挪威) no_NO_NY

挪威文 (挪威,Nynorsk) pl

波兰文 pl_PL

波兰文 (波兰) pt

葡萄牙文 pt_BR

葡萄牙文 (巴西) pt_PT

葡萄牙文 (葡萄牙) pt_PT_EURO

葡萄牙文 (葡萄牙,Euro) ro

罗马尼亚文 ro_RO 罗马尼亚文 (罗马尼亚) ru

俄文 ru_RU 俄文 (俄罗斯) sh

塞波尼斯-克罗地亚文 sh_YU

塞波尼斯-克罗地亚文 (南斯拉夫) sk

斯洛伐克文 sk_SK

斯洛伐克文 (斯洛伐克) sl

斯洛文尼亚文 sl_SI

斯洛文尼亚文 (斯洛文尼亚) sq

阿尔巴尼亚文 sq_AL

阿尔巴尼亚文 (阿尔巴尼亚) sr

塞尔维亚文 sr_YU

塞尔维亚文 (南斯拉夫) sv

瑞典文 sv_SE

瑞典文 (瑞典) th

泰文 th_TH

泰文 (泰国) tr

土耳其文 tr_TR

土耳其文 (土耳其) uk

乌克兰文 uk_UA

乌克兰文 (乌克兰) zh

中文 zh_CN

中文 (中国) zh_HK

中文 (香港) zh_TW

中文 (台湾)