c# - 如何在 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());
推荐阅读
- python - 我可以编写代码来计算每个整数的频率,然后打印每个整数的频率吗?
- android - 文本放置在屏幕上,但它滚动
- java - java.lang.NoSuchMethodError: org.jboss.resteasy.specimpl.BuiltResponse.getHeaders()Ljavax/ws/rs/core/MultivaluedMap;
- nginx - centos 7 上的 nginx 使用 www.domain.tld 而不是 domain.tld 为页面提供服务(所有请求都是端口 80 上的 http)
- multithreading - 诊断 ASP.NET Azure WebApp 问题
- z3 - 在 Z3Py 中获取布尔表达式的所有解决方案永远不会结束
- java - 由于守护线程,Jmeter 未完成
- javascript - 在 discord.js 中读取文件并执行功能 - 为什么我的不起作用?- 关闭
- angular-material - Angular CLI 8 - json 模式的正式自定义选择(草案 4)
- angular - ng 服务冻结在 92%