我有一个多语言应用程序,客户想要按照他的意愿编辑 Resources.resx 文件。 我创建了 silverlight 项目并添加了一些文件:
- 资源.resx
- Resources.en-US.resx1。
- Resources.uk-UA.resx2。
它们都有构建操作“嵌入式资源”
一切正常,但这些文件嵌入到 XAP 文件中。并且客户无法编辑它们。
我的资源管理器是这样的:
private static ResourceManager manager;
public static ResourceManager Manager
{
get
{
if (manager == null)
manager = new ResourceManager("Project.Resources", Assembly.GetExecutingAssembly());
return manager;
}
}
我如何从某个文件夹获取这些资源而不将它们构建到 .xap 文件???
最佳答案
由于这只是一个字符串本地化问题,并且您只需要灵活地选择整套本地化内容,因此有多种方法可以将字符串绑定(bind)到资源管理器。 其中大多数对于预期结果来说过于复杂:
鉴于以下情况:
- 我见过的大多数解决方案都需要为每个条目提供大约 80 个字符长的绑定(bind)语句。这包括对转换器的巧妙使用。
- 我见过的大多数解决方案都将每个字符串实现为通知属性(对于几乎不会改变的字符串来说,这似乎是一个巨大的开销)。
- 本地化通常不需要即时更新(您可以随时刷新当前页面)。
一种更简单的方法是简单地将字符串作为名称值对放置在全局应用程序字典中,并通过简短/简单的StaticResource绑定(bind)来引用它们,例如
Text={StaticResource L_MenuHome}
剩下的问题就是如何将另一组语言字符串放入应用程序字典中(实际上很简单):
- 将默认语言字符串直接放入 App.xaml 中(这有助于开发,因为缺少键将导致异常)。
- 通过任何方便的方式(XML 文件、XAML 文件、CSV 或通过网络服务从数据库)从服务器中拉取任何新选择的语言
- 用新加载的数据替换字典条目。您必须做的唯一一件事是确保 key 已经存在,否则您必须添加一个条目或设置一个条目。
- 重新加载当前页面(更改语言后将其返回主页?)
我不知道为什么每个人似乎都喜欢真正复杂的解决方案,而 StaticResources 可以很好地完成工作并且花费更少的精力。我们还倾向于使用 Web 服务从数据库中获取一组语言字符串,因为它通常小于 200K,而且数据库的更新更加灵活。
无论如何,只是试图将一些常识带回到本地化中。它对我们有用。请随意使用、忽略、提出改进建议等。
希望这有帮助。
关于c# - 从 Silverlight 中的文件夹加载资源 ".resx",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3665823/