You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity WebGL项目语言本地化:实现浏览器跟随Windows系统语言

解决Unity WebGL项目跟随Windows系统语言的问题

问题原因

在WebGL环境中,Unity的Application.systemLanguage会读取浏览器的语言设置,而非Windows系统原生语言,这就导致浏览器端和编辑器的语言切换行为不一致。要获取系统语言,需要借助JavaScript来读取系统的语言偏好。

实现方案

1. 编写JS桥接文件

在Unity项目的Assets/Plugins/WebGL目录下新建一个SystemLanguage.jslib文件,代码如下:

mergeInto(LibraryManager.library, {
    GetSystemLanguage: function() {
        // 优先获取Windows系统语言,兼容不同浏览器
        var systemLang = navigator.userLanguage || navigator.language;
        return Pointer_stringify(UTF8ToString(systemLang));
    }
});

2. 修改C#本地化逻辑

更新你的语言管理脚本,替换原有的系统语言识别逻辑,改为调用JS获取系统语言:

using UnityEngine;
using UnityEngine.UI;
using System.Runtime.InteropServices;

public class LanguageManager : MonoBehaviour
{
    [SerializeField] private Dropdown dropdown;

    // 导入JS方法
    [DllImport("__Internal")]
    private static extern string GetSystemLanguage();

    public void SetLanguage(int value)
    {
        Lean.Localization.LeanLocalization.CurrentLanguage = value == 0 ? "Russian" : "English";
    }

    private string DefineCurrentLanguage()
    {
        string systemLangCode = "";
        // WebGL环境调用JS,编辑器环境保留原有逻辑
        #if UNITY_WEBGL && !UNITY_EDITOR
        systemLangCode = GetSystemLanguage().ToLower();
        #else
        systemLangCode = Application.systemLanguage.ToString().ToLower();
        #endif

        if (systemLangCode.StartsWith("ru"))
        {
            Debug.Log("系统语言为俄语");
            return "Russian";
        }
        else if (systemLangCode.StartsWith("en"))
        {
            Debug.Log("系统语言为英语");
            return "English";
        }
        else
        {
            Debug.Log("未识别系统语言,默认使用英语");
            return "English";
        }
    }

    private void SetLanguage(string lang)
    {
        Lean.Localization.LeanLocalization.CurrentLanguage = lang;
    }

    private void Awake()
    {
        SetLanguage(DefineCurrentLanguage());
        dropdown.value = Lean.Localization.LeanLocalization.CurrentLanguage == "Russian" ? 0 : 1;
    }
}

3. 关键说明

  • navigator.userLanguage是针对Windows系统的浏览器属性,能直接获取系统语言;navigator.language作为兼容兜底,覆盖更多浏览器场景。
  • 通过宏判断区分WebGL和编辑器环境,保证两端逻辑各自正常运行。
  • 用StartsWith判断语言代码,兼容带地区后缀的格式(如ru-RU、en-US)。

内容的提问来源于stack exchange,提问作者gojim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:55:34