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

27 篇文章 3 订阅
17 篇文章 7 订阅

 

 

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 及以上

 

四、效果预览

 

五、实现步骤

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 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

中文 (台湾)

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 在Unity开发中,要获取设置Android系统的音量,可以通过使用AndroidJavaObject类来实现。 要获取当前的音量设置,可以使用以下代码: ``` // 创建一个Android的AudioManager对象 AndroidJavaObject audioManager = new AndroidJavaObject("android.media.AudioManager"); // 调用getStreamVolume方法获取音量 int currentVolume = audioManager.Call<int>("getStreamVolume", audioManager.GetStatic<int>("STREAM_MUSIC")); // 输出当前音量 Debug.Log("当前音量:" + currentVolume); ``` 要设置音量,可以使用以下代码: ``` // 创建一个Android的AudioManager对象 AndroidJavaObject audioManager = new AndroidJavaObject("android.media.AudioManager"); // 设置音量 // 调用setStreamVolume方法设置音量 audioManager.Call("setStreamVolume", audioManager.GetStatic<int>("STREAM_MUSIC"), targetVolume, 0); ``` 在上述代码中,targetVolume表示要设置的目标音量,0表示设置音量的标志位,可根据需要进行调整。 需要注意的是,以上代码需要在Unity中通过AndroidJNI类来调用Android的相关方法,因此需要将以上代码放置在一个C#脚本中,并确保该脚本绑定到一个GameObject上才能在Unity中正常运行。 ### 回答2: 使用Unity开发获取设置Android系统的音量可以通过使用AndroidJavaObject和AndroidJavaClass来实现。首先,我们需要获取Context对象来访问系统的AudioManager。 获取音量: 首先,我们需要使用UnityAndroidJavaClass类获取当前活动的Context对象,并使用该对象获取系统的AudioManager对象。 ```csharp AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject audioManager = currentActivity.Call<AndroidJavaObject>("getSystemService", "audio"); int volume = audioManager.Call<int>("getStreamVolume", AudioManager.STREAM_MUSIC); ``` 上述代码中,我们使用UNITYAndroidJavaClass类获取了当前活动的Context对象,然后使用该对象获取系统的AudioManager对象。最后,我们调用AudioManager的getStreamVolume方法获取音量。 设置音量: 要设置音量,我们可以使用AudioManager的setStreamVolume方法将音量设置为所需的值。 ```csharp audioManager.Call("setStreamVolume", AudioManager.STREAM_MUSIC, desiredVolume, 0); ``` 上述代码中,我们使用audioManager对象的setStreamVolume方法将音量设置为desiredVolume。 需要注意的是,上述代码需要在Android平台上运行。在Unity中,你可以将该代码放入一个自定义脚本中,并将该脚本附加到一个空的GameObject上以确保脚本在运行时得到执行。 ### 回答3: 在Unity开发中获取设置Android系统的音量可以通过使用AndroidJavaObject类和调用Android的相关API来实现。 首先,通过AndroidJavaClass类和AndroidJavaObject类来获取当前的Activity对象。然后使用Activity对象调用getSystemService方法获取一个AudioManager对象。 获取音量可以调用AudioManager对象的getStreamVolume方法,并传入对应音频类型的常量参数。例如,如果要获取媒体音量,可以将参数设置为AudioManager.STREAM_MUSIC。该方法将返回当前设备的音量值。 设置音量可以调用AudioManager对象的setStreamVolume方法,并传入对应音频类型的常量参数,以及要设置的音量值。例如,如果要设置媒体音量,可以将参数设置为AudioManager.STREAM_MUSIC,将第二个参数设置为期望的音量值。 具体代码如下: ```csharp using UnityEngine; public class VolumeController : MonoBehaviour { void Start() { // 获取当前的Activity对象 AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activityObject = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity"); // 获取AudioManager对象 AndroidJavaObject audioManager = activityObject.Call<AndroidJavaObject>("getSystemService", "audio"); // 获取媒体音量 int mediaVolume = audioManager.Call<int>("getStreamVolume", AudioManager.STREAM_MUSIC); Debug.Log("媒体音量:" + mediaVolume); // 设置媒体音量 audioManager.Call("setStreamVolume", AudioManager.STREAM_MUSIC, 7); } } ``` 上述代码首先通过获取当前的Activity对象,并调用getSystemService方法获取到AudioManager对象。然后使用AudioManager对象调用getStreamVolume方法获取媒体音量,并使用setStreamVolume方法设置媒体音量为7。 请注意,上述代码需要在Android平台上运行才能生效,并且需要在Unity中的GameObject上添加上述脚本。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙魁XAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值