Somewhere else,有人说控件的“可见”属性无法本地化。这是半真的。但是,“Visible”属性将LocalizableAttribute设置为true。但这只是意味着该属性被序列化为资源文件。我编写了一个测试程序,该程序具有标签设置为“false”的可见属性,用于Invariant Culture。使表单可本地化我将可见属性更改为德国文化的“true”。如果我在系统设置为德语语言环境的情况下启动程序会发生什么?标签保持不可见。 检查资源文件Form1.de.resx我可以看到visible属性尚未序列化。但是,如果我手动将其添加到资源文件中:
<data name="label1.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
标签出现。我承认有点困惑。 两个问题:
修改: 也许我需要澄清我的问题。 我的示例程序是一个简单的表单,其默认语言设置为不变。我通过表单设计器手动添加了德语资源。程序在区域设置为german的系统上运行。
案例1
“可见”添加到表单中的面板属性:
1.)在Invariant文化中设置为false,在德国文化中设置为true(默认)。 =&GT;面板是看不见的
2.)在不变文化中设置为true,在德国文化中设置为false。 =&GT;面板是不可见的(按预期工作)
显然,如果该值不是默认值,则该值仅写入特定于语言的资源文件。
案例2
“字体”添加到表单的标签属性:
1.)在Invariant文化中设置为粗体,属性在德国文化中被重置为默认值。 =&GT;标签不粗体
2.)在Invariant文化中设置默认,在德国文化中大胆。 =&GT;标签是大胆的
现在,这些属性按预期序列化。
这是一个错误还是我错过了什么?
答案 0 :(得分:2)
我们收到了微软的回复:
我可以看到这可能是一个问题 对于这种本地化方案,但在 一般情况下,这是方法 大大减少了resx的大小 文件,所以我们不想改变 这个实现。这个设计缺陷 不符合我们目前的标准,所以这个 将不会在下一个版本中修复。
所以答案是:目前没有解决方案。
答案 1 :(得分:1)
当我尝试它时,这很好用。采取的步骤:
修改了这样的构造函数:
public Form1() {
System.Threading.Thread.CurrentThread.CurrentUICulture =
System.Globalization.CultureInfo.GetCultureInfo("af");
InitializeComponent();
}
运行表单时,文本框不可见。我注释掉CurrentUICulture分配以切换回英文:文本框可见。
答案 2 :(得分:0)
我不认为微软会将此归类为错误。它按设计工作;但这绝对是一个痛苦的脖子。
我没有一个简单的解决方案,我知道没有对Label控件进行子类化并添加属性 - 哎呀。
作为一种解决方法,您可以简单地设置宽度或文本属性而不是可见性吗?
答案 3 :(得分:0)
我仍然认为Visible属性不可本地化。当我切换到默认语言然后回到特定语言时,它总是被重置为默认语言的设置,无论是否是默认设置都无关紧要。