WPF 中的多语言 [英] Multilanguage in WPF
问题描述
您能推荐一种为 WPF 应用程序实现多语言系统的好方法吗?我现在使用的方法涉及 XML、类和 xaml 扩展.它在大多数情况下都可以正常工作,但是当我必须处理动态标签或动态文本时,通常需要一些额外的努力.我想让程序员只在主要问题上工作而忘记了语言问题.
我正在使用 WPF 本地化扩展
一>.这是在 DependencyObject
s 上本地化任何类型的 DependencyProperty
的非常简单的方法.
- 处于真正稳定的状态
- 支持类似绑定的书写风格,如
Text = {LocText ResAssembly:ResFile:ResKey}
- 使用 .resx-fallback 机制(例如 en-us -> en -> 独立文化)
- 支持文化强制(例如这必须一直是英语")
- 使用正常的依赖属性
- 使用控件模板
- 无需任何额外的命名空间即可在 XAML 中使用(真的:P)
- 可以在后面的代码中使用,将本地化的值绑定到动态生成的控件
- 实现
INotifyPropertyChanged
以供高级使用 - 支持字符串格式,例如
这是‘{0}’值"
- 支持前缀和后缀值(目前带有
LocText
扩展) - 用于生产系统(例如我的公关产品)
- 将语言切换到运行时会影响NO时间片
- 可以与所有程序集中的任何资源文件(
.resx
)一起使用(也是在运行时动态加载的) - 不需要任何初始化过程(比如调用 xyz 来注册一个特殊的本地化字典")
- 在设计时可用(MS Expression Blend、MS Visual Studio 2008(普通和 SP1)
- 可以在设计时更改所选语言
- 可以本地化任何类型的数据类型,只要它的转换器(
TypeConverter
)存在(扩展LocalizeExtension
) - 内置了对
Text
、上Text
、下Text
、Image
s、的支持刷
es,Double
和Thickness
- 不会影响任何内存泄漏
- 保持
UID
属性不变 - 提供一个
SpecificCulture
用作IFormatProvider
(例如(123.20).ToString(LocalizeDictionary.SpecificCulture) = "123.20"
或>"123,20"
) - 提供一些功能来检查和获取背后代码中的资源值
- 不会改变
Thread.CurrentCulture
或Thread.CurrentUICulture
上的文化(可以轻松更改)
Can you recommend a good way to implement a Multilanguage system for a WPF app? The method I'm using right now involves XML, classes and a xaml extension. It Works fine in most of cases, but when I have to deal with dynamic labels or dynamic text in general it require some extra effort. I would like to let the programmer working only in the main problem and forgot the lang issues.
I am using the WPF Localization Extension. It is a really easy way to localize any type of DependencyProperty
on DependencyObject
s.
- is in a real stable state
- supports binding-like writing style like
Text = {LocText ResAssembly:ResFile:ResKey}
- works with the .resx-fallback mechanism (e.g. en-us -> en -> independent culture)
- supports culture forcing (e.g. "this has to be English all the time")
- works with normal dependency properties
- works with control templates
- can be used in XAML (really :P) without any additional namespaces
- can be used in code behind to bind localized values to dynamic generated controls
- implements
INotifyPropertyChanged
for advanced use - supports string formatting e.g.
"this is the '{0}' value"
- supports prefix and suffix values (currently with
LocText
extension) - is in use in productive systems (like my public relation product)
- switching of the language to runtime affects NO timeslice
- can be used with any resource file (
.resx
) across all assemblies (also the dynamic loaded one at runtime) - doesn't need any initializing process (like "call xyz to register a special localize dictionary")
- is available at design-time (MS Expression Blend, MS Visual Studio 2008 (Normal and SP1)
- change of the chosen language is possible at design-time
- can localize any type of data type, as long as a converter (
TypeConverter
) for it exists (extendsLocalizeExtension
) - has built in support for
Text
, upperText
, lowerText
,Image
s,Brush
es,Double
andThickness
- doesn't affects any memory leaks
- leaves the
UID
property untouched - offers a
SpecificCulture
to use asIFormatProvider
(e.g.(123.20).ToString(LocalizeDictionary.SpecificCulture) = "123.20"
or"123,20"
) - offers some functionality to check and get resource values in code behind
- doesn't alter the culture on
Thread.CurrentCulture
orThread.CurrentUICulture
(can be changed easily)
这篇关于WPF 中的多语言的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!