我有一些字符串资源,例如用户欢迎字符串。默认情况下它应该是“你好”,但对于客户 X 它应该是“问候”。
我想使用 .NET's resources implementation ,并将字符串放在常量或文件中或我喜欢的任何位置,加上层次结构模型满足我的需要:客户 X 的资源覆盖用户欢迎字符串。
唯一的问题 - .NET 的资源似乎是面向 i18n 的,并且他们从基于当前文化的层次结构中进行选择。
目前,我将为每个客户保留固定资源并自行映射层次结构,但是否有更好的解决方案?
最佳答案
确实没有什么可以阻止您拥有多个 ResourceManager,但正如您所说,它是为 l18n 设计的。就我个人而言,我在 resx 方面遇到了很多麻烦,尤其是在涉及 GAC 和部署的卫星程序集时。我遇到的另一个问题是这个系统的刚性,如果你需要一个新的字符串,你需要重新编译一个 dll 并用 xml 搞砸,你的客户在修复东西方面没有灵 active ,这确实会占用支持时间。
resx 的基于层次结构的解决方案意味着它会从“en-US”退回到“en”,最后退回到不变,你没有比这更多的退路,你不能定义两个不同的“en-” US"在同一个字符串的一个资源文件中。您可以修改此解决方案,为客户 X 使用“en-US”,为客户 Y 使用“en-AU”,然后作为一个资源发送,但这太麻烦了。
您可以为每个客户编译一个不同的附属程序集,并让它以某种方式工作。
就个人而言,我更喜欢使用 sqlite 或 mssql 进行本地化的数据库支持解决方案,并确保在初始字符串查找后执行一些缓存。
关于.NET 资源层次结构与文化无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/446396/