如何在字符串c#上强制使用某种文化

时间:2016-11-08 19:11:29

标签: c# visual-studio

我正致力于在具有30个以上项目的解决方案中本地化硬编码字符串消息。 除了日志消息之外,所有用户消息都应该被本地化,因为这些消息将由美国开发人员阅读,因此他们必须保持美国英语。在所有解决方案项目中,在每个文件中创建了具有相同消息的字符串(每个中都有不同的变量名称,也可以进入用户和日志消息。

String s = "Unable to populate list: "
Log.Warning(LogCategory.NameLookupDialog, s + ex.Message + ex.StackTrace);
TXMessageBox.Show(s);

TXMessageBox中的字符串将从资源文件中拉出,但进入日志消息的字符串应保留为美国英语。

当它进入日志消息时,有没有办法强制美国英语文化在s字符串上?换句话说,如果应用程序的文化改变为例如印度语,则日志消息应该保留在美国英语中。 这是我到目前为止所尝试的: 我将应用程序的文化改为印度语,然后我尝试将标签文本的文化仅设置为美国英语,但它不起作用:

public void SwitchCulture()
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-IN");
            Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
            this.lblLogMessage.Text = string.Format(new CultureInfo("en-US"), this.lblLogMessage.Text);
        }

当我跑步时,我仍然看到印度人的所有标签。 那么任何想法如何强迫文化在字符串上?

2 个答案:

答案 0 :(得分:0)

可能是您在标签上使用的字体不能接受拉丁字符。请参阅上一个答案:How to get Hindi (Unicode) Text From Textbox?

如果这不起作用,请尝试在设置标签文本之前将当前主题上的CultureInfo设置为EN-US 。然后在你完成后将其重新设置为印地语。

答案 1 :(得分:0)

AppResources.ResourceManager.GetString(" ResourceKey",new CultureInfo(" en-US"))

其中AppResources是资源的文件名和类名,ResourceKey是resx文件中的资源键名。