关于如何组织.net应用本地化的非字符串资源,有什么指导方针吗?
本文关键字:字符串资源 什么 指导方针 于如何 net 本地化 应用 | 更新日期: 2023-09-27 18:04:40
假设
My.dll
- Resources
- MyResources.resx
embeds MyFile.ext with key MyFile
- MyResources.de.resx
should embed MyFile.de.ext with key MyFile
我试过用搜索引擎,但是没有用。
我发现除非两个resx文件在同一个文件夹中,否则整个文化切换机制由于某种原因不起作用。所以,这扼杀了我的想法,有一个名为de
的子文件夹包含resX和所有链接的资源。
My.dll
- Resources
- MyResources.resx
- MyResources.de.resx
- en-US
- all en-US non-string resources
- de
- all de non-string resources
对于de
版本,我复制粘贴中性(en-US
)版本。然后我必须手动删除en-US
[Res],添加de
[Res],然后为每个非字符串资源(例如图像,csv或其他文件)重命名
应该是这样的吗?
我发现,除非两个resx文件都在同一个文件夹中,否则整个由于某些原因,文化转换机制不起作用。如此......以至于......扼杀了我的想法,有一个名为de的子文件夹包含resX和所有链接资源
这是正确的。这是因为当您将.resx文件移动到其他文件夹VS 自动生成命名空间名称为.resx生成的类作为.resx文件的完整路径。例如,如果LocResources。resx在$PROJECT$'MyResources'de'文件夹中,那么自动生成的类完整类型名称将是$PROJECT_BASE_NAMESPACE$.MyResources.de. locresources。
这里的关键1是每个. resx的嵌入式资源名称将等于其代码隐藏类型的全名+ '.resources'。
这里的关键2是使用基于附属程序集的本地化(默认),ResourceManager通过其(静态)全名加载资源,但每种语言都来自不同的附属程序集。
因此,如果您将xxx.de.resx移出存储所有.resx的文件夹,则该资源的命名空间(和嵌入的资源名称)将被更改,并且ResourceManager将无法在卫星组件中找到它。