【发布时间】:2011-11-08 20:44:20
【问题描述】:
在我的应用程序中,我使用WpfLocalization 在应用程序运行时提供翻译。该库基本上会维护一个属性列表及其分配的本地化关键字,并在活动语言更改时使用DependencyObject.SetValue() 更新其值。
我注意到我的问题的场景是:我有一个简单的TextBlock,并为其Text 属性分配了一个本地化关键字。现在,当我的应用程序启动时,它会将初始值写入其中,并且它会在屏幕上正常显示。现在我切换语言并将新值设置为Text 属性,但实际上只有一半文本会显示在屏幕上。来回切换语言没有任何效果。第一种语言总是显示得很好,第二种语言被截断(在单词中间,但总是完整的字符)。
这两种语言的相对长度似乎与此无关。在我的测试用例中,工作语言字符串是 498 字节,被截断的是 439 字节,在 257 字节后被截断)。
当我在通过本地化代码更改其值之前检查所述TextBlock 的Text 属性的当前值时,无论哪种语言,它都将始终具有预期值(而不是截断)。
在运行时通过 WPF Inspector 检查 TextBlock 时,它会将截断的文本显示为第二语言的 Text 属性。
到目前为止,这对我来说毫无意义。不过现在好多了。
原始的 WpfLocalization 库从标准资源文件中读取本地化字符串,但我们使用修改后的版本,它也可以从 Excel 文件中读取这些字符串。它通过使用 Microsoft OLE DB 驱动程序打开一个OleDbConnection 并通过它读取字符串来做到这一点。在调试器中,我可以看到所有值都被读取得很好。
现在,当一位同事找到解决“截断文本”问题的方法时,我感到非常惊讶。他对 Excel 工作表中的行重新排序。我看不出这有什么关系,但是在该文件的两个版本之间切换会对问题产生影响。
【问题讨论】:
标签: c# .net wpf localization oledb