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