关于如何组织.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或其他文件)重命名

应该是这样的吗?

关于如何组织.net应用本地化的非字符串资源,有什么指导方针吗?

我发现,除非两个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将无法在卫星组件中找到它。