我有一个小的WPF应用程序,我没有完全本地化,但也没有硬编码资源。我知道WPF没有为此使用.resx文件,但我将资源字符串公开为视图控件绑定到的公共ViewModel属性:
using resx = MyApp.Properties.Resources;
...
public string InterferingProcessesText { get { return resx.InterferingProcessesText; } }
public string SettingsText { get { return resx.SettingsText; } }
public string ExecuteInstallerCommandText { get { return resx.ExecuteInstallerCommandText; } }
public string SaveSettingsCommandText { get { return resx.SaveSettingsCommandText; } }
public string RefreshProcessesCommandText { get { return resx.RefreshProcessesCommandText; } }
public string KillInterferingProcessesCommandText { get { return resx.KillInterferingProcessesCommandText; } }然后,如果我决定翻译字符串,我就可以复制我的.resx文件并用一个区域性后缀重命名它,就像我在WinForms或任何其他Web应用程序中所做的那样。
我知道我应该把x:Uid放在我的XAML上,并像WPF那样本地化我的应用程序,但是这到底有多糟糕,为什么呢?
是的,它将我的ViewModels中的公共字符串属性(#region )弄得乱七八糟。但是,它是否违反了MVVM的一些原则,它会来咬我的*?
发布于 2013-06-04 04:31:13
在WPF中实现本地化时,我也有同样的想法,并得出结论:.resx文件很好。我得出这个结论,是因为替代方案很快变得比我费心的更复杂,而基于RESX的解决方案对我来说是可行的。
因此,在我的各种View.xaml文件中,我使用这样的绑定;
<MenuItem Name="Exit" Header="{x:Static Resources:Strings.MENU_HEADER_EXIT}" />更改语言只是创建RESX条目特定于语言的版本的问题。(http://msdn.microsoft.com/en-us/library/vstudio/aa992030%28v=vs.100%29.aspx)。
现在,关于您的实际问题,我不认为这类数据属于ViewModel。没有对这些字符串进行“建模”;它们只是标签文本,因此是纯视图的数据。如果我们遵循您的上述建议,得出一个过于热心的结论,我们不妨添加ViewModel属性(和绑定);
Font InterferingProcessesFont { get { return FontFamily.Arial; }
Color InterferingProcessesFontColor { get { return Color.Black; }
FontStyle InterferingProcessesFontStyle { get { return FontStyle.Normal; }
.
etc.
. 在我看来,像这样的本地化标签是固定的显示设置,在应用程序的生命周期内是不会改变的,而且在大多数情况下,对于特定的用户来说是永远不会改变的。为什么ViewModel与静态文本杂乱无章?
发布于 2018-07-12 07:01:43
RESX文件非常好!如果您为visual studio安装了Microsoft MAT (多语言应用程序工具包)(免费扩展),它简化了翻译的管理;
https://codereview.stackexchange.com/questions/26928
复制相似问题