我有一个 wpf 应用程序,我开始对其进行本地化。我选择的本地化策略是创建我的自定义 MarkupExtension 类。
我不会使用 .res 文件,因为在我的公司已经制定了一个解决方案,它创建一个包含所有字符串的加密映射,并且它需要 int 键来引用每个字符串。所以我编写了一个自定义生成器,它使用所有“int”键创建一个枚举(可能是一个带有整数的静态类,这并不重要)。
所以我想在我的 XAML 文件中引用这些枚举键中的每一个,执行以下操作:
<Label Content="{l:Translator {x:Static l:TranslatedEnums.MainWindow_WelcomeMessage}}" />
创建的枚举是TranslatedEnums
,我的翻译类称为Translator
(dhu)。
但是在阅读了 x:Static文档和类型转换器文档之后,我想到了以下问题:
“已编译的 xaml”(baml)是否在运行时或编译时实际评估每种类型(通过 x:Static)?
我问这个是因为我静态引用枚举值的原因之一是我没有确切的枚举字符串键,而是它的值,这会使破解应用程序变得更加困难。
如果解析是在运行时完成的,那么我可以将以前的代码缩小到:
<Label Content="{l:Translator MainWindow_WelcomeMessage}" />
这需要我自己查找枚举值,但这是单行的:
TranslatedEnums result;
Enum.TryParse(key, out result);
这将使 Xaml 代码更小(这很好),但如果密钥不存在(这不是问题),它将在编译时失败。