【问题标题】:Why localization doesn't work为什么本地化不起作用
【发布时间】:2017-11-26 19:13:25
【问题描述】:

我尝试编写简单的 C# 项目来测试本地化的工作方式。 我做了这里是怎么写的。

How to use localization in C#

我想我在问题/1142802 中使用了相同的方法。 但它在我的演示项目中不起作用。 我无法解释为什么。 这就是我附上演示项目的原因。

我有两个 FRA 和 RUS 语言的资源文件。

并尝试使用下一个代码切换语言

private void rbFra_Click(object sender, EventArgs e)
{
  System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("fr-Fr");
  Thread.CurrentThread.CurrentUICulture = cultureInfo;
  Thread.CurrentThread.CurrentCulture = cultureInfo;

  textBox1.Text = Properties.Resources.String1;
}

private void rgEng_Click(object sender, EventArgs e)
{
  System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US");
  Thread.CurrentThread.CurrentUICulture = cultureInfo;
  Thread.CurrentThread.CurrentCulture = cultureInfo;

  textBox1.Text = Properties.Resources.String1;
}

private void rbRus_Click(object sender, EventArgs e)
{
  System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ru-RU");
  Thread.CurrentThread.CurrentUICulture = cultureInfo;
  Thread.CurrentThread.CurrentCulture = cultureInfo;

  textBox1.Text = Properties.Resources.String1;
}

但结果总是英文的。

我认为 Thread.CurrentThread.CurrentUICulture = ... 应该强制重新加载资源文件和 String1 从加载的资源返回文本。

这里是演示项目https://yadi.sk/d/4zEWVhso3Q4eqV

【问题讨论】:

  • 我会在单个资源中添加字符串并以这种方式索引它们 Resource.String1...String3 试试看..
  • 不完全清楚为什么。如果有一个处理资源本地化的标准机制,那么为什么不使用它。 2. 一个文件对于想要添加新语言的开发者来说并不方便。
  • 那么你需要弄清楚如何访问 3 个不同资源文件中的 1 个。然后做一个简单的谷歌搜索
  • 没有代码 自动执行?
  • 它如何知道您尝试引用的资源文件...?问问自己..

标签: c# .net winforms localization


【解决方案1】:

你的设置有两个问题:

  • 您将语言资源文件放在与中性资源文件不同的文件夹中。所以命名空间会有所不同。目前您的中性资源文件位于Properties 文件夹中,其他资源位于项目的根文件夹中。

  • 语言资源文件名的第一部分应与中性资源文件相同。所以由于中性资源文件名是Resources.resx,那些语言文件应该是Resources.ru.resxResources.fr.resx。它们在文件名末尾缺少s 字符。

解决这些问题后,它会运行良好。

除了你想做的,你可以看看 Windows 窗体本地化功能:

【讨论】:

  • 非常感谢。有用。我不知道文件名是资源命名空间的一部分。
猜你喜欢
  • 1970-01-01
  • 2014-02-16
  • 2016-12-13
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多