2011-05-18 53 views
8

Somewhere else,有人指出控件的“可见”属性不能本地化。这是半真半假。但是,“可见”属性将LocalizableAttribute设置为true。但这只是意味着该属性被序列化为资源文件。我编写了一个测试程序,对于不变文化,标签的可见属性设置为“false”。使表格可本地化,我将德国文化的可见属性更改为“真实”。现在如果我在系统设置为德语区域设置的情况下启动程序会发生什么情况?标签保持不可见。 检查资源文件Form1.de.resx我可以看到visible属性没有被序列化。但是,如果我手动将此添加到资源文件:如何检测WinForms中的可本地化的属性?

<data name="label1.Visible" type="System.Boolean, mscorlib"> 
    <value>True</value> 
</data> 

标签出现。我承认会有些困惑。 有两个问题:

  • 如何使用内置序列化程序检测属性是否“真正”可本地化?
  • 什么是推荐的方式来覆盖默认行为?

编辑: 也许我需要澄清我的问题。 我的示例程序是一个简单的表单,其默认语言设置为不变。我通过表单设计器手动添加了德语资源。程序在区域设置设置为德语的系统上运行。

案例1

可见” 的面板的属性添加到形式:
1)在德国培养不变培养,true(默认)设置为false。 =>面板不可见
2.)在Invariant文化中设置为true,在德国文化中设为false。 =>面板不可见(按预期工作)
显然,如果该值不是默认值,则该值仅写入特定于语言的资源文件。

案例2

字体”标签的属性添加到窗体:
1)设置为固定区域性大胆,属性重置在德国文化为默认值。 =>标签不是粗体
2.)在Invariant文化中设置为默认值,在德国文化中为粗体。 =>标签为粗体
现在,这里的属性按预期序列化。

这是一个错误还是我错过了什么?

+0

我们已将此作为MS支持的错误提交。支持工程师已经证实了这一点。我会让你知道这是怎么回事; ;-) – puls200 2011-06-07 06:12:24

回答

2

我们收到的回应微软:

我可以看到,这可能是为这个本地化方案问题 ,但 一般情况下,这是通向 大大减少的大小一个resx 文件,所以我们不想更改 这个实现。这个设计缺陷 不符合我们目前的条形,所以这个 将不会在下一个版本中修复。

所以答案是:目前没有解决方案。

0

我不认为微软会将此分类为错误。它按设计工作;但它绝对是一个脖子上的痛苦。

有没有一种简单的解决方案,我知道短的分类Label控件和添加属性 - 恶作剧。

作为一种解决方法,您可以简单地设置宽度或文本属性而不是可见性吗?

0

我仍然相信Visible属性不可本地化。当我切换到默认语言,然后返回到特定语言时,它总是被重置为默认语言的设置,不管它是否是默认设置。

+0

如果你尝试案例1编号2,你会看到为特定语言生成了“可见”属性的条目。所以它是本地化的...有点。 :) – puls200 2011-05-26 08:57:11

+0

是的,你正在写...但这绝对看起来像一个错误。 – LoBo 2011-05-26 10:29:08

+0

将特定语言的字体重置为非粗体时,它仍显示为在“属性”窗口中更改。这可能是序列化的原因。 – LoBo 2011-05-26 10:37:15

1

当我尝试时,这工作得很好。考虑到测试步骤:

  • 在窗体上放置一个TextBox
  • 设置窗体的Localizable属性为True
  • 设置窗体的语言南非语
  • 设置TextBox” Visible属性为True
  • 修改这样的构造:

    public Form1() { 
        System.Threading.Thread.CurrentThread.CurrentUICulture = 
         System.Globalization.CultureInfo.GetCultureInfo("af"); 
        InitializeComponent(); 
    } 
    

当我运行表单时,文本框不可见。我将CurrentUICulture的任务注释掉以切换回英文:文本框是可见的。

+0

尝试相反。当文化是南非荷兰语时,它是可见的,当它是默认(英语)时不可见。 – codeConcussion 2011-05-27 05:07:57