unity3d 更改WebGL中的语言

z0qdvdin  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(181)

我有一个webgl项目的语言本地化。在统一,它改变语言取决于什么语言格式是在窗口。但在浏览器,他把语言是在浏览器。如何改变语言在浏览器从语言格式在windows

[SerializeField] private Dropdown dropdown;

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

    private string DefineCurrentLanguage()
    {
        if (Application.systemLanguage == SystemLanguage.Russian)
        {
            Debug.Log("This system is in Russian. ");
            return "Russian";
        } 
        else if (Application.systemLanguage == SystemLanguage.English)
        {
            Debug.Log("This system is in English. ");
            return "English";
        }
        else
        {
            Debug.Log("System Language not defined. ");
            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;
    }
}
kr98yfug

kr98yfug1#

我很确定他们会在内部使用navigator.language
返回一个字符串,表示用户的首选语言,通常是浏览器UI的语言。
另请参阅this post

无法跨浏览器执行此操作Internet Explorer支持以下功能:

navigator.browserLanguage: browser language
navigator.systemLanguage: Windows system language
navigator.userLanguage: Windows user-specific language

但是没有办法从任何其他浏览器访问这些设置(我可以告诉),所以不要使用它们:如果您希望保持跨浏览器功能,请坚持使用标准的navigator.language(对应于浏览器语言)。
还有navigator.languages,它列出了所有可用的首选项,其中可能包括系统语言等
在返回的数组中,它们按首选项排序,首选语言排在最前面。
但是,navigator.language已经返回了第一个最首选项,它通常也是浏览器语言
=〉也没有一种方法来判断哪一种语言是系统语言。
当然,您可以遵循this post,至少尝试在支持它的地方使用它

var language = window.navigator.systemLanguage || window.navigator.language;

您可以专门搜索您要支持的每个浏览器,并研究是否有特定的方法来获取系统语言,并为每个浏览器实现||情况-总是将navigator.language作为最坏情况。
然后,为了实际使用它,您将有您的自定义jslib插件,如。

WebGL语言.jslib

mergeInto(LibraryManager.library, 
{    
    GetLanguageJS : function()
    {
        const language = navigator.systemLanguage || navigator.language;

        const languageString = language.toLowerCase();
        const bufferSize = lengthBytesUTF8(languageString) + 1;
        const buffer = _malloc(bufferSize);
        stringToUTF8(languageString, buffer, bufferSize);
        
        return buffer;
    }
}

网页GL语言.cs

public static class WebGLLanguage
{
    [DllImport("__Internal")]
    private static string GetLanguageJS();

    public static SystemLanguage GetLanguage()
    {
        var language = GetLanguageJS();

        // well and now you need to map the string to the enum
        // I am too lazy but I hope you get the idea ;)

        if(language.StartsWith("en")) return SystemLanguage.English;
        if(language.StartsWith("fr")) return SystemLanguage.French;
        if(language.StartsWith("es")) return SystemLanguage.Spanish;
        ......
    }
}

相关问题