繁体   English   中英

跨多个应用程序和共享库(.net)处理多种语言

[英]Handling multiple languages across multiple applications and shared libraries (.net)

我们正在开发将以以下方式使用的产品:

  • 可以由多种产品使用的各种共享库。 我预计这些库将最需要访问包含错误消息/异常的字符串资源。
  • 各种基于最终用户的应用程序,旨在作为独立应用程序在PC上运行。 在部署/安装时,将要求他们支持多种语言。
  • 可能需要在部署时或在运行时(即最少的停机时间或零停机时间)支持多种语言的各种网站。 如果全局访问该站点,则可能需要同时支持多种语言。
  • 可能需要我们允许客户访问我们的语言文件以进行自我编辑。 我们不希望允许他们访问我们的源代码(资源文件/ dll除外)以实现此目的。
  • 我们可能需要合并一种功能,以我们的母语(在这种情况下为英语)记录异常并以翻译后的语言显示它们。 这将帮助我们调试现场的客户解决方案。

我已经知道诸如RCWinTrans之类的产品,并且可以在VC ++ / MFC应用程序中处理多种语言。 但是,我们在这里面临的要求更加广泛,因此要求我们做出一些长期的决定,这些决定可能很难长期改变,因此理想情况下,我们希望现在做出最佳选择。

根据我自己的知识,我有几个问题,尽管我可能会缺少一些将很高兴获得的.net技巧。 这是我的问题:

  1. 什么是最好的? 每个VS解决方案将所有资源放入单独的DLL中,或者将资源放入每个VS项目中。 我对每个解决方案的查看方式更易于管理,修改和允许客户访问。 每个项目的解决方案看起来更干净,并且使单个项目更具可移植性。 此方法将适用于我们基于共享库的解决方案以及基于最终应用程序的解决方案。
  2. 上面的解决方案仍然适用于网站吗? 有没有更好的办法? 这样是否需要停机?
  3. 是否可以一次加载两个单独的资源文件,即如果我们要用英语记录例外情况,但以翻译后的语言将它们提供给整个食物链(作为例外情况的消息)? 有什么技巧可以像AOP一样自动执行吗?

提前致谢,

罗杰

您是否考虑过使用Inversion of Control容器(例如StructureMapUnity) 这可能使您可以将默认资源与项目(IMHO最有意义)保持在一起,同时仍允许客户根据需要在本地覆盖资源。

例如,假设您具有以下界面:

public interface IResourceSupplier
{
    // Returns the localized text for a given identifier.
    string Localized(string identifier);

    // Returns the invariant (English) text for a given identifier.
    string Invariant(string identifier);
}

使用IOC,您可以为解决方案创建集中式资源供应商,该供应商将检查用户提供的替代。 如果没有提供用户替代,则可以查询每个特定于项目的资源供应商(在应用程序启动时检测到),直到找到一个返回所需资源的供应商为止。

显然,根据您的需求,您可能需要调整性能,例如,通过缓存常用资源。 使用IOC的确具有以下优点:只要接口不变,插入替代实现可能是相对琐碎的任务。

这有帮助吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM