如何比较C#中的本地化字符串

时间:2012-06-06 12:14:28

标签: c# localization

当用户输入本地化字符串“XXXX”并且我将该字符串与我的本地化资源文件中的值进行比较时,我正在为ASP.NET Web应用程序进行本地化。

示例:

 if ( txtCalender.Text == Resources.START_NOW)
 {
      //do something
 }

但是当我这样做时,即使两个字符串(本地化字符串)相等,它也会返回false。即

txtCalender.Text ="இப்போது தொடங்க"
Resources.START_NOW="இப்போது தொடங்க"

这是针对泰米尔语的本地化。

请帮助..

5 个答案:

答案 0 :(得分:1)

使用带有string.Equals值的StringComparison重载之一 - 这允许您使用当前文化进行比较..

if ( txtCalender.Text.Equals(Resources.START_NOW, StringComparison.CurrentCulture))
{
     //do something
}

或者,如果您想要不区分大小写的比较:

if ( txtCalender.Text.Equals(Resources.START_NOW,
                             StringComparison.CurrentCultureIgnoreCase))
{
     //do something
}

答案 1 :(得分:1)

我找到答案并且有效。这是解决方案,

当我尝试使用Chrome浏览器时,它无法正常工作,而且可以与Firefox配合使用。实际上,当我将两个字符串转换为字符数组时,

txtCalender.Text返回40个字符,Resource.START_NOW返回46.所以我尝试使用Normalize()方法对字符串进行规范化

if(txtCalender.Text.Normalize() == Resources.START_NOW.Normalize())

当我没有使用normalize方法时,它将一个字符解释为两个不同的字符。

它工作得很好。谢谢你的回答。

答案 2 :(得分:0)

您可以与InvariantCulture中的String.Equals进行比较(静态方法):

String.Equals("XXX", "XXX", StringComparison.InvariantCulture);

不确定这是否有帮助,其他人可否评论一下?我从未遇到过你的实际错误。

答案 3 :(得分:0)

您可能需要使用.Equals

if(txt.Calendar.Text.Equals(Resources.START_NOW))
{ //...

如果不区分大小写的比较就是你经常使用StringComparison.OrdinalIgnoreCase作为.Equals调用的第二个参数。

如果这不起作用 - 那么我可以建议你断点这一行并检查Resources.START_NOW的实际值 - 这个相等比较失败的唯一可能原因是两个字符串真的不是相同。所以我的猜测是你的文化管理工作不正常。

答案 4 :(得分:0)

使用String.EqualsString.Compare

这两者之间存在一些性能差异。 String.Compare比String.Equal快,因为String.Compare是静态方法而String.Equals是实例方法。

String.Equal返回一个布尔值。 String.Compare在字符串相等时返回0,但如果它们不同则返回正数或负数,具体取决于第一个字符串是在第二个字符串之前(更少)还是在(更大)第二个字符串之后。因此,当您需要知道它们是否相同时使用String.Equals,或者当您需要基于不等于做出决定时使用String.Compare。