【问题标题】:How to localize WPF Application with RESX files in subdirectories如何使用子目录中的 RESX 文件本地化 WPF 应用程序
【发布时间】:2019-03-09 00:35:17
【问题描述】:

我的团队有一些使用 XAML 编写的 WPF 项目。我们最近为每个项目添加了大量本地特定的 RESX 文件。为了保持整洁,我被要求将这些文件存储在 [Project]>Localization>[locale]

现在,当我们在非 en-US 语言环境中运行应用程序时,会从相应的 RESX 文件中提取字符串。我们尝试更新 RESX 文件属性中的命名空间,并将它们设置为 Public,以便创建生成的设计器。 我们可以让事情正常工作的唯一方法是将语言环境 RESX 文件直接移动到项目的 Properties 目录中。

是否有更新 XAML 以在子目录中搜索区域设置 RESX 文件?

编辑 XAML Codebase and Solution Explorer

我已附上问题的图片以供澄清。

我们尝试过的一些代码更改:
1) 我们尝试为 xmlns:res="clr-namespace:[PROJECT].CoreUI.Localization"
设置命名空间 2) 尝试将命名空间设置为 xmlns:res="clr-namespace:[PROJECT].CoreUI"
3) 我们还尝试更改 RESX 文件的自定义工具命名空间以匹配当前命名空间 My.Properties 以及 CoreUI.Properties

我们还确认 Resources.resx 和 Resources.ru.resx(例如)的访问修饰符都设置为 Public,并且两个 Build Actions 都显示“嵌入式资源”

【问题讨论】:

  • 到目前为止,您进行了哪些编码尝试?请使用与您的问题相关的所有代码更新您的问题。
  • 请检查 Resx 文件的构建操作。当文件位于属性以外的不同文件夹中时有什么区别吗?

标签: c# wpf localization resx


【解决方案1】:

感谢您的帮助!

我的同事实际上偶然发现了这里的另一个帖子,我们在无数次搜索中不知何故错过了:

Put translated resx files in a different folder in Visual Studio?

简而言之,我们正在考虑让项目搜索到 RESX 文件的子目录。实际上,我们需要 RESX 文件来搜索链中更靠前的已创建设计器。

<ItemGroup>
<EmbeddedResource Include="Localization\ar\Resources.ar.resx" >
<ManifestResourceName>$(TargetName).Properties.%(Filename)</ManifestResourceName>
</EmbeddedResource>

输入 ManifestResourceName 似乎告诉 RESX 文件我们已经创建了一个 Designer,而不是创建一个新的。

再次感谢大家的帮助!

【讨论】:

  • 只是补充一点,我编辑了这个项目,使它对任何新语言都更具前瞻性。 允许我导入所有 resx 文件并将清单引用用于任何新添加的 resx 文件。
【解决方案2】:

您必须首先将您的文件夹包含在命名空间中并提及项目名称,例如:

xmlns:resx="clr-namespace:Prism_Modules.MyResources;assembly=Prism_Modules"

您还必须包括:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

最后,您应该将资源中的值称为:

<dxb:BarButtonItem x:Name="menuFile" Content="{x:Static resx:Resources.mnuFile}"  }" />

【讨论】:

    【解决方案3】:

    将 .resx 文件移动到另一个文件夹/项目时,公开资源成员的 .Designer.cs 文件仍将指向旧命名空间,并且 Visual Studio 会将其置于 .resx 文件之外。

    为了解决这个问题,我只是删除了生成的 .Designer.cs 文件,然后在打开并保存 .resx 文件后,生成了带有适当命名空间的 Designer.cs 文件,我通常可以从其他项目中引用它。要为没有的资源语言/文件生成 .Designer.cs 文件,只需打开 .resx 文件并使用 Access Modifier 组合框,VS 将为您创建它。

    希望能帮到你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多