最近我正在深入研究.NET的本地化.基本上,我学习了如何自定义表单(使用Language和Localizable属性),然后相应地更改文化.
但是,我发现在将我的硬编码英文字符串迁移到自动生成的资源文件中时,使用.GetString("Key") - 好吧,我们只是说它不开心:P.
我决定将一组独立的resx文件专门用于硬编码字符串翻译.他们遵循[name]的惯例/要求.[culture-code] .resx.我为每种相关语言制作了这些; 例如,appstrings.de.resx(德语)和appstrings.resx(作为不变基线).
为了利用这些新资源,我创建了一个ResourceManager和Resource Set实例
Dim resManager As New ResourceManager("LanguageTest.appstrings", Assembly.GetExecutingAssembly)
Dim resSet As ResourceSet = resManager.GetResourceSet(My.Application.UICulture, True, True)
Run Code Online (Sandbox Code Playgroud)
使用当前的UI文化(例如,德语)设置
My.Application.ChangeUICulture("de")
Run Code Online (Sandbox Code Playgroud)
原始问题
除非resSet.GetString("密钥"),在明确定义appstrings.de.resx,它会返回一个空字符串.无论如何,我可以让它回溯到appstrings.resx(其中"Key"确实存在),我认为这将是默认基线?
更新
Rhapsody在下面提出了一个建议,而实际的提示本身并不起作用,事实上它确实引发了一个有趣的点,使用resManager.GetString("Key")而不是resSet.GetString("Key").到目前为止,这似乎没有任何缺陷.也就是说,返回专用语言文件中存在的值,而当通过单个键访问时,"缺失"值会回退到默认文化.
后续问题
唯一剩下的问题是使用ResourceManger而不是缓存的ResourceSet对性能的影响是否会有害?
我一直在VB.NET中开发一个应用程序,它需要将一个控件对象(例如,一个ListViewItem)拖出窗体,然后拖到用户指定的位置(例如,在桌面上或在文件夹中) .
但是,"ListViewItem"表示的"复制"文件尚不存在.需要下载然后将其放在用户指定的位置.我能够获得目的地丢弃的路径/位置吗?然后我会继续下载该文件,然后将其放在指定的用途.
我已经查看了有关类似问题的其他问题,详细说明了表单外的拖动操作,它似乎没有办法确定快捷方式的去向或如何标记目标位置.
从本质上讲,我认为它可能需要某种"动态链接"或"虚拟文件",正如我在别处看到的那样.然后,在删除操作之后,以某种方式从我的应用程序访问此"链接",继续下载文件并将其放在最终的放置目标中.
任何帮助表示赞赏,提前谢谢!
结果:
Roger Lipscombe提供了一个链接,其中包含其他文章的链接,以及看似有希望的信息.以下链接可能在实现拖放操作时非常有用,而无需提供托管代码中所需的确切数据.