C# 翻译东西的最佳方式是什么(例如:几天)

C# 翻译东西的最佳方式是什么(例如:几天),c#,enumeration,C#,Enumeration,我目前正在尝试用C语言将不同的东西翻译成不同的语言。我确信有一种比我目前使用的方式更好的方法来实现这一点。我在枚举文档中进行了搜索,但没有真正找到我要查找的内容。我想要英文的索引,但要以我作为参数传递的语言的值。有没有一种方法可以让你像这样。。一行 i、 dayMO:fr=lundi,eng=monday,de=montag或类似的东西我愿意接受建议 private void SetDays(string language) { switch(language) { case

我目前正在尝试用C语言将不同的东西翻译成不同的语言。我确信有一种比我目前使用的方式更好的方法来实现这一点。我在枚举文档中进行了搜索,但没有真正找到我要查找的内容。我想要英文的索引,但要以我作为参数传递的语言的值。有没有一种方法可以让你像这样。。一行

i、 dayMO:fr=lundi,eng=monday,de=montag或类似的东西我愿意接受建议

private void SetDays(string language)
{
  switch(language)
    {
    case "french":
      days.Add( "MO", "lundi");
      days.Add( "TU", "mardi" );
      days.Add( "WE", "mercredi" );
      days.Add( "TH", "jeudi" );
      days.Add( "FR", "vendredi" );
      days.Add( "SA", "samedi" );
      days.Add( "SU", "dimanche" );
      break;
    case "english":
      days.Add( "MO", "monday" );
      days.Add( "TU", "tuesday" );
      days.Add( "WE", "wednesday" );
      days.Add( "TH", "thursday" );
      days.Add( "FR", "friday" );
      days.Add( "SA", "saturday" );
      days.Add( "SU", "sunday" );
      break;
    case "german":
      days.Add( "MO", "montag" );
      days.Add( "TU", "dienstag" );
      days.Add( "WE", "mittwoch" );
      days.Add( "TH", "donnerstag" );
      days.Add( "FR", "freitag" );
      days.Add( "SA", "samstag" );
      days.Add( "SU", "sonntag" );
      break;
    default:
       //Fixme what do we do in this default case ?
      break;
  }
}
您可以基于语言创建对象,并使用此对象的DateTimeFormat属性。有一个属性,它包含工作日名称。代码段可以如下所示

CultureInfo ci=CultureInfo.CreateSpecificCulturefr; DateTimeFormatInfo dtfi=ci.DateTimeFormat; var dayNames=dtfi.缩写的dDaynames; var dayName=dtfi.GetDayNameDayOfWeek.Monday; 请记住的备注部分。支持的区域性标记取决于使用的操作系统版本Windows 10或更早版本

另一个选项是使用,它根据DayOfWeek值返回全天名称,如上面的示例所示。这两个选项取决于您的需求,比手动维护日期名称更容易

如果需要在字典中存储日期名称,使用下面的某种代码是有意义的。使用DayOfWeek is键比使用字符串更容易。结果字典包含每个传递语言的本地化日名称列表,可按键使用

var字典=新字典; AddDayNamesen; AddDayNamesde; AddDayNamesfr; void AddDayNamesstring语言 { CultureInfo ci=CultureInfo.CreateSpecificCulturelanguage; DateTimeFormatInfo dtfi=ci.DateTimeFormat; Enum.GetValueStyPeopOfDayOfWeek中的每周每一天 { 如果dictionary.ContainsKeyday 字典[day].Adddtfi.GetDayNameday; 其他的 { dictionary.Addday,新列表{dtfi.GetDayNameday}; } } } 如果您想对月份执行相同的操作,此代码将非常有用—使用缩写的固定月份名称作为键,并使用特定于区域性的月份名称列表作为值

void AddMonthNamesstring语言 { CultureInfo ci=CultureInfo.CreateSpecificCulturelanguage; DateTimeFormatInfo dtfi=ci.DateTimeFormat; 对于int i=1;i您可以基于语言创建对象,并使用此对象的DateTimeFormat属性。有一个属性,它包含工作日名称。代码段可以如下所示

CultureInfo ci=CultureInfo.CreateSpecificCulturefr; DateTimeFormatInfo dtfi=ci.DateTimeFormat; var dayNames=dtfi.缩写的dDaynames; var dayName=dtfi.GetDayNameDayOfWeek.Monday; 请记住的备注部分。支持的区域性标记取决于使用的操作系统版本Windows 10或更早版本

另一个选项是使用,它根据DayOfWeek值返回全天名称,如上面的示例所示。这两个选项根据您的要求都比手动维护天名称更容易

如果需要在字典中存储日期名称,则使用以下某种代码是有意义的。使用DayOfWeek is键比使用字符串更容易。结果字典包含每个传递语言的本地化日期名称列表,可按键使用

var字典=新字典; AddDayNamesen; AddDayNamesde; AddDayNamesfr; void AddDayNamesstring语言 { CultureInfo ci=CultureInfo.CreateSpecificCulturelanguage; DateTimeFormatInfo dtfi=ci.DateTimeFormat; Enum.GetValueStyPeopOfDayOfWeek中的每周每一天 { 如果dictionary.ContainsKeyday 字典[day].Adddtfi.GetDayNameday; 其他的 { dictionary.Addday,新列表{dtfi.GetDayNameday}; } } } 如果您想对月份执行相同的操作,此代码将非常有用—使用缩写的固定月份名称作为键,并使用特定于区域性的月份名称列表作为值

void AddMonthNamesstring语言 { CultureInfo ci=CultureInfo.CreateSpecificCulturelanguage; DateTimeFormatInfo dtfi=ci.DateTimeFormat;
对于int i=1;iResx文件是最好的方法,但是此修正方法按照原始问题设置集合

private void SetDays(string name)
{
    CultureInfo ci = CultureInfo.CreateSpecificCulture(name);
    DateTimeFormatInfo dtfi = ci.DateTimeFormat;

    string[] dayNames = dtfi.DayNames;
    string[] dayKeys = { "SU", "MO", "TU", "WE", "TH", "FR", "SA" };

    for (int dayIndex = 0; dayIndex < 7; dayIndex++)
    {
        days.Add(dayKeys[dayIndex], dayNames[dayIndex]);
    }
}

您需要传入一个有效的区域性名称,请参见此。

Resx文件是最好的方法,但是此修改的方法按照原始问题设置集合

private void SetDays(string name)
{
    CultureInfo ci = CultureInfo.CreateSpecificCulture(name);
    DateTimeFormatInfo dtfi = ci.DateTimeFormat;

    string[] dayNames = dtfi.DayNames;
    string[] dayKeys = { "SU", "MO", "TU", "WE", "TH", "FR", "SA" };

    for (int dayIndex = 0; dayIndex < 7; dayIndex++)
    {
        days.Add(dayKeys[dayIndex], dayNames[dayIndex]);
    }
}
您需要传入一个有效的区域性名称,请参见此。

以下是一种方法:

首先,使用所需语言的ISO 639-1代码创建一个枚举

public enum Language
{
    FR, //French
    EN, //English
    DE  //German
}
然后创建自定义类以所需格式存储翻译,例如:

public class Translation
{
    public string Key { get; set; }
    public Dictionary<Language, string> Values { get; set; }
}
以下是一种方法:

首先,使用所需语言的ISO 639-1代码创建一个枚举

public enum Language
{
    FR, //French
    EN, //English
    DE  //German
}
然后创建自定义类以所需格式存储翻译,例如:

public class Translation
{
    public string Key { get; set; }
    public Dictionary<Language, string> Values { get; set; }
}

您可能需要使用resx文件。另请参阅此问题:您需要c
谷歌i18N或C国际化,它将向你展示如何使用resx翻译成不同的语言。不同的东西意味着什么?你想翻译天还是其他东西?没有一家一站式的翻译店你想要一本字典吗?要有一个像MO这样的键值对,[Monday,Montag,…]我的假设正确吗?@Zohnya诀窍是确保所有resx文件都保持相同的关键字,并且它们不会丢失任何关键字。使用resx进行本地化的公司通常会创建一些过程,以确保更新后的resx文件不能合并到主存储库中,除非满足要求。您可以为自己创建这样的标准。您可能需要使用resx文件。另请看这个问题:您可以通过谷歌i18N或C国际化来展示如何使用resx翻译成不同的语言。不同的东西意味着什么?你想翻译天还是其他东西?没有一家一站式的翻译店你想要一本字典吗?要有一个像MO这样的键值对,[Monday,Montag,…]我的假设正确吗?@Zohnya诀窍是确保所有resx文件都保持相同的关键字,并且它们不会丢失任何关键字。使用resx进行本地化的公司通常会创建一些过程,以确保更新后的resx文件不能合并到主存储库中,除非满足要求。你可以为自己创建这样一个标准。我有点困惑,也担心投票率上升,这是如何回答这个问题的,因为缩写的Daynames从你每天共享的链接中为你提供了三个字母的缩写名称,而OP要求的是本地化名称。如果我不高兴,请纠正我wrong@sujithkarivelilGetDayName返回全天名称,根据答案UpdateAnks,它是有用的。但我有一个问题。这个月是否存在同样的东西@PavelAnikhouski@Zohnya是的,当然,它是存在的。您可以以相同的方式使用缩写的MonthNames属性和GetMonthName方法。我可以更新一个答案,如果需要的话。我有点困惑,也担心投票率上升,这是如何回答这个问题的,因为缩写的名字给了你每天分享的链接中的三个字母的缩写名,而OP要求的是本地化的名字。如果我不高兴,请纠正我wrong@sujithkarivelilGetDayName返回全天名称,根据答案UpdateAnks,它是有用的。但我有一个问题。这个月是否存在同样的东西@PavelAnikhouski@Zohnya是的,当然,它是存在的。您可以以相同的方式使用缩写的MonthNames属性和GetMonthName方法。如果需要,我可以更新答案