如何使用子目录中的 RESX 文件本地化 WPF 应用程序
How to localize WPF Application with RESX files in subdirectories
我的团队有一些使用 XAML 编写的 WPF 项目。我们最近向每个项目添加了大量本地特定的 RESX 文件。为了保持整洁,我被要求将这些文件存储在 [Project]>Localization>[locale]
现在,当我们 运行 非 en-US 语言环境中的应用程序时,会从相应的 RESX 文件中提取字符串。我们已尝试更新 RESX 文件属性中的命名空间,并将它们设置为 Public,以便创建生成的设计器。
使事情正常进行的唯一方法是将区域设置 RESX 文件直接移动到项目的属性目录中。
是否有更新 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,并且两个构建操作都显示 "Embedded Resource"
感谢您的帮助!
我的同事实际上在这里偶然发现了另一个 post,我们在无数次搜索中以某种方式错过了它:
简而言之,我们正在考虑将项目搜索到 RESX 文件的子目录中。实际上,我们需要 RESX 文件来在链中进一步搜索已经创建的设计器。
<ItemGroup>
<EmbeddedResource Include="Localization\ar\Resources.ar.resx" >
<ManifestResourceName>$(TargetName).Properties.%(Filename)</ManifestResourceName>
</EmbeddedResource>
输入 ManifestResourceName 似乎是在告诉 RESX 文件我们已经创建了一个 Designer 而不是创建一个新的。
再次感谢大家的帮助!
您必须首先将您的文件夹包含在命名空间中并提及项目名称,例如:
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}" }" />
将 .resx 文件移动到另一个 folder/project 时,公开资源成员的 .Designer.cs 文件仍将指向旧的命名空间,并且 Visual Studio 会将其放在 .Designer.cs 文件之外。 resx 文件。
为了解决这个问题,我只是删除了生成的 .Designer.cs 文件,然后在打开并保存 .resx 文件后,生成了具有正确命名空间的 Designer.cs 文件,我可以正常引用它甚至来自其他项目。要为具有 none 的资源 languages/files 生成 .Designer.cs 文件,只需打开 .resx 文件并使用访问修饰符组合框,VS 将为您创建它。
希望对您有所帮助。
我的团队有一些使用 XAML 编写的 WPF 项目。我们最近向每个项目添加了大量本地特定的 RESX 文件。为了保持整洁,我被要求将这些文件存储在 [Project]>Localization>[locale]
现在,当我们 运行 非 en-US 语言环境中的应用程序时,会从相应的 RESX 文件中提取字符串。我们已尝试更新 RESX 文件属性中的命名空间,并将它们设置为 Public,以便创建生成的设计器。 使事情正常进行的唯一方法是将区域设置 RESX 文件直接移动到项目的属性目录中。
是否有更新 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,并且两个构建操作都显示 "Embedded Resource"
感谢您的帮助!
我的同事实际上在这里偶然发现了另一个 post,我们在无数次搜索中以某种方式错过了它:
简而言之,我们正在考虑将项目搜索到 RESX 文件的子目录中。实际上,我们需要 RESX 文件来在链中进一步搜索已经创建的设计器。
<ItemGroup>
<EmbeddedResource Include="Localization\ar\Resources.ar.resx" >
<ManifestResourceName>$(TargetName).Properties.%(Filename)</ManifestResourceName>
</EmbeddedResource>
输入 ManifestResourceName 似乎是在告诉 RESX 文件我们已经创建了一个 Designer 而不是创建一个新的。
再次感谢大家的帮助!
您必须首先将您的文件夹包含在命名空间中并提及项目名称,例如:
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}" }" />
将 .resx 文件移动到另一个 folder/project 时,公开资源成员的 .Designer.cs 文件仍将指向旧的命名空间,并且 Visual Studio 会将其放在 .Designer.cs 文件之外。 resx 文件。
为了解决这个问题,我只是删除了生成的 .Designer.cs 文件,然后在打开并保存 .resx 文件后,生成了具有正确命名空间的 Designer.cs 文件,我可以正常引用它甚至来自其他项目。要为具有 none 的资源 languages/files 生成 .Designer.cs 文件,只需打开 .resx 文件并使用访问修饰符组合框,VS 将为您创建它。
希望对您有所帮助。