繁体   English   中英

如何在Unity C#中获取语言环境信息?

[英]How can i get locale info in Unity C#?

我正在使用Unity 2019.2b开发一个项目,它有望在所有平台(android,ios,windows,macos)上工作,我正在尝试获取设备区域设置信息(例如en-us,en-au,en-bz)但我能找到的只是Application.systemLanguage定义。 即使我决定使用这些信息,我仍然需要区域信息。 是否有任何样本或方法可以在Unity中获取区域设置信息或获取设备区域信息? (如果只有区域信息的解决方案;我不想使用设备位置或不想使用用户IP地址,我想从设置中获取它)

我尝试使用RegionInfo,CultureInfo,System.Threading.Thread.CurrentThread.CurrentUICulture和System.Threading.Thread.CurrentThread.CurrentCulture定义获取区域设置或至少设备区域信息,但它不起作用。

string regionName = System.Globalization.RegionInfo.CurrentRegion.Name;
string cultureName = System.Globalization.CultureInfo.CurrentCulture.Name;
string cname = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
string uiname = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;

根据平台(ios,android,windows,macos),有时结果是InvariantCulture,有时总是en-US甚至设备区域设置不是en-US。

问题来自Unity使用的Mono。

我在这个论坛帖子中找到了一些解决方案。

如果您正在使用Windows,则解决方法可能是使用PInvoke:

 [System.Runtime.InteropServices.DllImport("KERNEL32.DLL")]
 private static extern int GetSystemDefaultLCID();

然后像这样检查全球文化:

var currentCulture = new CultureInfo(GetSystemDefaultLCID());

这可能用于设置文化:

 Thread.CurrentThread.CurrentCulture = new CultureInfo(GetSystemDefaultLCID());
 Thread.CurrentThread.CurrentUICulture = new CultureInfo(GetSystemDefaultLCID());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM