首页 > 解决方案 > 如何使用cultureInfo 获取国家名称并进行翻译?

问题描述

如何获取保存在手机或平板电脑(Android 和 iOS 设备)设备设置中的国家名称?可以用cultureInfo 做到这一点吗?

我想用一种以上的语言显示国家/地区的名称。我需要用英语、法语和德语显示国家名称。是否可以自动显示英文、法文和德文国家名称的翻译版本,或者是否有必要我自己翻译所有国家名称?

例如,如果我有这个cultureInfo =“nl-BE”。

结果应如下所示:

string English_name = "Belgium";
string French_name = "Belgique";
string German_name = "Belgien";

我怎样才能做到这一点?

标签: c#xna

解决方案


这并不完美。它以 .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;

推荐阅读