【问题标题】:Are there any guidelines on how to organize non-string resources for localization for .net apps?是否有关于如何为 .net 应用程序本地化组织非字符串资源的指南?
【发布时间】:2011-08-04 06:00:08
【问题描述】:

假设

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

这是应该的吗?

【问题讨论】:

    标签: c# .net localization internationalization


    【解决方案1】:

    我发现除非两个 resx 文件都在同一个文件夹中,否则整个 文化转换机制由于某种原因不起作用。以便 扼杀了我的想法,即拥有一个名为 de 的子文件夹,其中包含 resX 和 所有链接的资源。

    没错。这是因为当您将 .RESX 文件移动到其他文件夹时,VS auto-generates .resx 生成的类的命名空间名称作为 .RESX 文件的完整路径。 IE。如果 LocResources.resx 位于 $PROJECT$\MyResources\de\ 文件夹中,则自动生成的类完整类型名称将为 $PROJECT_BASE_NAMESPACE$.MyResources.de.LocResources。

    这里的关键 1 是每个 .RESX 的嵌入资源名称将等于其代码隐藏类型全名 + '.resources'。

    这里的关键 2 是使用基于附属程序集的本地化(默认),ResourceManager 按其(静态)全名但从每种语言的不同附属程序集加载资源。

    因此,如果您将 xxx.de.resx 移出存储所有 .RESX 的文件夹,则此资源的命名空间(和嵌入式资源 name)将被更改,并且 ResourceManager 将无法在其中找到它卫星组件。

    【讨论】:

    • 啊哈!我忘记了 - 类型全名中的嵌入文件夹名称。谢谢。有关组织内容文件的指南的任何链接?
    • 我不要t remember any but it is easy to define it: when you add a resource file (image,etc.) to the .resx, VS store this file in the Resources folder and those files should have unique names for all languages obviously. So: dont 将 .resx 文件存储在 Resources 项目文件夹中(以免弄乱 .resx 和资源)并在项目中保持资源名称的唯一性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多