如何从 WPF 应用程序代码导出字符串以进行国际化?
How to exports strings from a WPF application code for internationalization?
我正在尝试修改现有的 C# 应用程序以实现国际化。 WPF 的过程有一些 documentation here 并且看起来相当透明,因为我可以继续正常开发并且 运行 msbuild
不时检查是否一切正常。然而,在浏览示例项目时,我意识到它不会涵盖代码中定义的字符串。在我的例子中,它们中的大多数用于日志记录,并且可以或多或少地使用正则表达式轻松导出。这似乎有点危险,而且我不确定如果我尝试使用正则表达式提取 C# 源代码,中心是否会保留。我想我可以将每个字符串包装在一个翻译函数中,该函数将在资源中执行查找。
我不确定如何从那里继续。我将有一堆可以转储到 resx 文件中的字符串,以及从以另一种方式国际化的 baml 文件中提取的另一组字符串。由于我预计每种方法都会带来自己的并发症,因此如果可能的话,我宁愿只处理其中一半的并发症。
有没有办法让这两种方法都适用?老实说,我更喜欢第二个,因为它对我来说更有意义,但我想我可以生成大量的 Uid,并且只使用其中的 5% - 10%。
我为世界上最繁忙的国际机场之一开发多语言登机亭(#1 或#3,具体取决于您如何定义它),根据我的经验,WPF 应用程序中的最佳解决方案是 custom markup extensions. First, you can use regular language as your key, which means all of your XAML can be written in whatever language is most convenient for your developers. Secondly, you can add custom namespaces to the XAML namespaces,这有助于让您的 XAML 保持整洁。第三,很容易编写实用程序来提取 XAML 扩展并将它们整理成 Excel 电子表格(例如)供翻译人员使用,然后将翻译本身合并回您的应用程序。最后,翻译表本身可以在运行时轻松切换,让您可以即时更改语言。
将所有这些放在一起,您的所有 XAML 看起来像这样:
<TextBlock Text="{Translate 'Text to be translated appears here'}" />
当然,控制哪些文本通过您的翻译引擎以及哪些文本不通过是很容易的,只需准确控制您使用 Translate
标记扩展的位置。
我正在尝试修改现有的 C# 应用程序以实现国际化。 WPF 的过程有一些 documentation here 并且看起来相当透明,因为我可以继续正常开发并且 运行 msbuild
不时检查是否一切正常。然而,在浏览示例项目时,我意识到它不会涵盖代码中定义的字符串。在我的例子中,它们中的大多数用于日志记录,并且可以或多或少地使用正则表达式轻松导出。这似乎有点危险,而且我不确定如果我尝试使用正则表达式提取 C# 源代码,中心是否会保留。我想我可以将每个字符串包装在一个翻译函数中,该函数将在资源中执行查找。
我不确定如何从那里继续。我将有一堆可以转储到 resx 文件中的字符串,以及从以另一种方式国际化的 baml 文件中提取的另一组字符串。由于我预计每种方法都会带来自己的并发症,因此如果可能的话,我宁愿只处理其中一半的并发症。
有没有办法让这两种方法都适用?老实说,我更喜欢第二个,因为它对我来说更有意义,但我想我可以生成大量的 Uid,并且只使用其中的 5% - 10%。
我为世界上最繁忙的国际机场之一开发多语言登机亭(#1 或#3,具体取决于您如何定义它),根据我的经验,WPF 应用程序中的最佳解决方案是 custom markup extensions. First, you can use regular language as your key, which means all of your XAML can be written in whatever language is most convenient for your developers. Secondly, you can add custom namespaces to the XAML namespaces,这有助于让您的 XAML 保持整洁。第三,很容易编写实用程序来提取 XAML 扩展并将它们整理成 Excel 电子表格(例如)供翻译人员使用,然后将翻译本身合并回您的应用程序。最后,翻译表本身可以在运行时轻松切换,让您可以即时更改语言。
将所有这些放在一起,您的所有 XAML 看起来像这样:
<TextBlock Text="{Translate 'Text to be translated appears here'}" />
当然,控制哪些文本通过您的翻译引擎以及哪些文本不通过是很容易的,只需准确控制您使用 Translate
标记扩展的位置。