为了账号安全,请及时绑定邮箱和手机立即绑定

获取不同语言的语言名称

获取不同语言的语言名称

C#
慕运维8079593 2023-08-20 11:02:48
我有以下内容:if (currentUICulture.Equals(CultureInfo.GetCultureInfo("fr-FR")))    _EnglishLabel = "Anglais";else    _EnglishLabel = "English";问问自己这段代码是否可以针对任意数量的当前文化进行优化。我可以尝试针对当前的 UI 文化来实现这一点,如下所示:_EnglishLabel = new CultureInfo("en-US").DisplayName;但是如果我不应该通过 给出英语currentUICulture,而是通过作为参数传递的任意文化......换句话说,如何获得new CultureInfo("en-US").GetDisplayName(myArbitraryCulture);附言。
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

可以检索已安装框架语言的翻译。工作原理没有记录,但内部实现可以在参考源中看到(例如CultureData)。对于已安装文化以外的目标文化,将返回英语后备语言。

在此基础上,我们可以使用以下内容(同样,仅适用于已安装的框架语言):

public static string GetDisplayName(this CultureInfo culture, CultureInfo locale)

{

    var rm = new ResourceManager("mscorlib", typeof(object).Assembly);

    var resourceKey = $"Globalization.ci_{culture.Name}";

    return rm.GetString(resourceKey, locale);

}

例如,安装了瑞典语和英语:


var culture = CultureInfo.GetCultureInfo("en");

var swedishName = culture.GetDisplayName(CultureInfo.GetCultureInfo("sv")); // Engelska

var englishName = culture.GetDisplayName(CultureInfo.GetCultureInfo("en")); // English

var germanName = culture.GetDisplayName(CultureInfo.GetCultureInfo("de")); // English <- German not installed

为了涵盖所有语言(或任意语言集合),我建议使用非本机方法,因为内置方法并不真正支持您的用例。


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信