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
中文 (台湾)