【发布时间】:2011-05-18 13:45:21
【问题描述】:
Somewhere else,有人说控件的“可见”属性无法本地化。这是半真半假。但是,“可见”属性的 LocalizableAttribute 设置为 true。但这仅仅意味着属性被序列化到资源文件中。我编写了一个测试程序,该程序将标签的可见属性设置为不变文化的“false”。使表单可本地化我将德国文化的可见属性更改为“true”。现在,如果我在系统设置为德语区域设置的情况下启动程序会发生什么?标签保持不可见。 检查资源文件 Form1.de.resx 可以看到 visible 属性没有被序列化。但是如果我手动将其添加到资源文件中:
<data name="label1.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
标签出现。我承认有点困惑。 两个问题:
- 如何使用内置序列化程序检测属性是否“真正”可本地化?
- 推荐的覆盖默认行为的方法是什么?
编辑: 也许我需要澄清我的问题。 我的示例程序是一个简单的表单,它的默认语言设置为不变。我通过表单设计器手动添加了德语资源。程序在区域设置设置为德语的系统上运行。
案例一
"Visible" 添加到表单的面板属性:
1.) 在不变文化中设置为 false,在德国文化中设置为 true(默认)。 => 面板不可见
2.) 在 Invariant 文化中设置为 true,在德国文化中设置为 false。 => 面板不可见(按预期工作)
显然,如果它不是默认值,则该值仅写入特定于语言的资源文件。
案例 2
"字体" 添加到表单的标签属性:
1.) 在不变文化中设置为粗体,在德语文化中属性被重置为默认值。 => 标签不是粗体
2.) 在不变文化中设置为默认值,在德国文化中设置为粗体。 => 标签为粗体
现在这里的属性按预期序列化了。
这是一个错误还是我错过了什么?
【问题讨论】:
-
我们已将此作为错误提交给 MS 支持。支持工程师已确认。我会让你知道这是怎么回事.. ;-)
标签: c# winforms localization