我希望根据布尔变量在不同语言中显示“是/否”。
有没有一种通用的方式可以根据传递给它的语言环境进行格式化?
如果没有,除了boolVar ? Resources.Yes : Resources.No
之外,还有什么标准的格式化布尔值的方法。
我猜测boolVar.ToString(IFormatProvider)
会被使用。
我的猜测正确吗?
我希望根据布尔变量在不同语言中显示“是/否”。
有没有一种通用的方式可以根据传递给它的语言环境进行格式化?
如果没有,除了boolVar ? Resources.Yes : Resources.No
之外,还有什么标准的格式化布尔值的方法。
我猜测boolVar.ToString(IFormatProvider)
会被使用。
我的猜测正确吗?
true/false
翻译为yes/no
似乎并不比其他潜在的翻译方式更常见(如on/off
,checked/unchecked
,read-only/read-write
或其他方式)。public static class BooleanExtensions
{
public static string ToYesNoString(this bool value)
{
return value ? Resources.Yes : Resources.No;
}
}
使用方法:
bool someValue = GetSomeValue();
Console.WriteLine(someValue.ToYesNoString());
正如其他答案所述,该框架不允许布尔值具有自定义格式。但是,它允许数字具有自定义格式。布尔值的GetHashCode方法将返回1表示true,0表示false。
根据MSDN自定义数字格式字符串,当有3个";"的部分时,指定的格式将应用于“正数;负数;零”。
可以在bool值上调用GetHashCode方法以返回一个数字,因此您可以使用自定义数字格式字符串返回Yes / No或On / Off或任何其他情况需要的一组单词。
以下是返回on / OFF的示例:
var truth = string.Format("{0:on;0;OFF}", true.GetHashCode());
var unTruth = string.Format("{0:on;0;OFF}", false.GetHashCode());
返回:
truth = on
unTruth = OFF
FormatString
属性来实现这个技巧,比如GridView
的BoundField.DataFormatString
。只需在模型中添加一个Byte(或Int16或Int32等)属性,返回布尔值的数字转换即可。就是这样。非常感谢。 - T-motyBoolean.GetHashCode()
的代码就是 value ? 1 : 0
,所以你只是通过使用它来添加更多的条件评估。我看不出有什么意义。(在速度上你永远不会注意到差别,只会更加混乱而没有任何好处) - Gabriel Luci很遗憾,Boolean.ToString(IFormatProvider)在这里没有帮助:
provider参数是保留的,并不参与此方法的执行。这意味着,与大多数带有provider参数的方法不同,Boolean.ToString(IFormatProvider)方法不反映特定于文化的设置。
无论如何,布尔值表示True和False,而不是Yes和No。如果您想将True映射为Yes和False映射为No(包括本地化),则必须自己完成;框架中没有内置支持。您提议的解决方案(Resources.Yes/No)看起来很好。
我的 Razor 页面中正在运行以下代码:
@(item.Active.GetValueOrDefault() ? "是" : "否")
在这里,重要的是属性是否为必填项(可为 null),如果是必填项,则应使用以下代码:
@(item.Active ? "Yes":"No")
我在另一个帖子上找到了这个,并进行了回复,希望能帮助到某些人。