c# - 如何使用cultureInfo 获取国家名称并进行翻译?
问题描述
如何获取保存在手机或平板电脑(Android 和 iOS 设备)设备设置中的国家名称?可以用cultureInfo 做到这一点吗?
我想用一种以上的语言显示国家/地区的名称。我需要用英语、法语和德语显示国家名称。是否可以自动显示英文、法文和德文国家名称的翻译版本,或者是否有必要我自己翻译所有国家名称?
例如,如果我有这个cultureInfo =“nl-BE”。
结果应如下所示:
string English_name = "Belgium";
string French_name = "Belgique";
string German_name = "Belgien";
我怎样才能做到这一点?
解决方案
这并不完美。它以 .NET Framework 的本地化版本的语言获取国家/地区的全名。只有当 .NET Framework 的本地化版本对应于所需的语言时,它才会起作用。
显然,.NET Framework 仅以一种语言存储国家/地区名称。
var culture = CultureInfo.CurrentUICulture; // Other get any desired culture info.
var regionInfo = new RegionInfo(culture.Name);
string countryName = regionInfo.DisplayName;
您必须自己实现此翻译功能。您可以使用新的ValueTuple
(自 C# 7.0 起)创建由国家代码和语言代码组成的复合字典键。
public static readonly Dictionary<(string language, string country), string> _countryNames =
new Dictionary<(string language, string country), string> {
[("en","BE")] = "Belgium",
[("fr", "BE")] = "Belgique",
[("de", "BE")] = "Belgien",
[("en", "CH")] = "Switzerland",
[("fr", "CH")] = "Suisse",
[("de", "CH")] = "Schweiz",
// ...
};
示例:获取比利时的英文名称。
string name = _countryNames[("en", "BE")];
或者,当您不确定条目是否存在时:
if (_countryNames.TryGetValue(("en", "BE"), out string name)) {
//TODO: use name
}
您可以通过以下方式获取当前的 UI 语言
string language = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
推荐阅读
- javascript - 使用 jQuery 或 Vanilla JavaScript 在文本和文件类型之间的源代码中插入文本
- orientdb - 如何更改 OrientDb Studio 端口
- reactjs - 使用 Isomarpic-fetch 获取 POST API 时忽略标头
- laravel - laravel - 如何创建自定义消息包,错误数组
- sql - SQL Server,用填充空值组合表
- javascript - 回调帖子的内部服务器错误
- php - PHP scandir 看到旧的已删除文件,fopen 看到它的内容
- c# - 从 XAML 创建的 GUI 获取先前的文本值
- python - Python-CV2:录制视频速度的问题
- c++ - char 指针有不同的值