是否有关于如何组织非字符串资源以进行 .net 应用程序本地化的指南?

发布于 2024-11-28 05:12:00 字数 672 浏览 0 评论 0原文

假设

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 或其他文件)重命名)

这是应该这样做的吗?

Assume

My.dll 
- Resources
  - MyResources.resx
    embeds MyFile.ext with key MyFile
  - MyResources.de.resx
    should embed MyFile.de.ext with key MyFile

I've tried using search engines but to no avail.

I find that unless both resx files are in the same folder, the whole culture switching mechanism doesn't work for some reason. So that killed my idea to have a subfolder called de containing the resX and all linked resources.

My.dll
- Resources
  - MyResources.resx
  - MyResources.de.resx
  - en-US
    - all en-US non-string resources
  - de
    - all de non-string resources

For the de version, I copy-paste the neutral (en-US) version. I then have to manually delete the en-US [Res], add de [Res] and then rename for each non-string resource (e.g. images,csv or other files)

Is this how it is supposed to be done ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鯉魚旗 2024-12-05 05:12:00

我发现除非两个 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 将无法在附属程序集中找到它。

I find that unless both resx files are in the same folder, the whole
culture switching mechanism doesn't work for some reason. So that
killed my idea to have a subfolder called de containing the resX and
all linked resources.

That's correct. That's because when you move the .RESX file into other folder VS auto-generates namespace name for .resx`s generated class as full path to the .RESX file. I.e. if LocResources.resx is in $PROJECT$\MyResources\de\ folder then the auto-generated class full type name would be $PROJECT_BASE_NAMESPACE$.MyResources.de.LocResources.

The key 1 here is that embedded resource name for every .RESX will be equal its code-behind type full name + '.resources'.

The key 2 here is that using localization based on satellite assemblies (default), ResourceManager loads resources by its (static) full name but from different satellite assemblies for every language.

So if you move xxx.de.resx out of folder where all .RESX are stored, namespace (and embedded resource name) for this resource will be changed and ResourceManager won`t find it in the satellite assembly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文