gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:37:03 24 4
gpt4 key购买 nike

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

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

我已经了解 RCWinTrans 等产品并在 VC++/MFC 应用程序中处理多种语言。然而,我们在这里面临的要求更为广泛,因此需要我们做出一些可能难以长期改变的预先决定,因此理想情况下,我们希望现在做出最佳选择。

根据我自己的知识,我有几个问题,尽管我可能遗漏了一些 .net 的技巧,但这些技巧很受欢迎。这是我的问题:

  1. 什么最好?将我们所有的资源放在每个 VS 解决方案的单独 DLL 中,或者将资源放在每个 VS 项目中。我对每个解决方案的看法更易于管理、修改和允许客户访问。 per project 解决方案看起来更干净,并且使单个项目更便携。此方法适用于我们基于共享库的解决方案以及我们基于最终应用程序的解决方案。
  2. 上述解决方案是否仍然适用于网站?有没有更好的办法?这种方式需要停机吗?
  3. 是否可以同时加载两个单独的资源文件,即如果我们想用英语记录异常,但用翻译的语言将它们提供给食物链(作为异常中的消息)?我们可以使用任何技巧来像 AOP 一样自动化吗?

提前致谢

罗杰

最佳答案

您是否考虑过使用 Inversion of Control container喜欢StructureMapUnity ?这可能允许您将默认资源与项目保持在一起(恕我直言,这是最有意义的),同时仍允许客户根据需要在本地覆盖资源。

例如,假设您有以下接口(interface):

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 确实具有优势,只要接口(interface)不变,插入替代实现可能是一项相对微不足道的任务。

这有帮助吗?

关于c# - 跨多个应用程序和共享库 (.net) 处理多种语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2086812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com