我的 .resx 资源文件痛点

Posted

技术标签:

【中文标题】我的 .resx 资源文件痛点【英文标题】:My .resx Resource File Pain Points 【发布时间】:2016-12-21 17:26:01 【问题描述】:

使用 .resx 资源文件进行本地化时,我有以下痛点:

    对于每个标签,我需要在每个不同的语言文件中创建一个条目。在复制条目名称方面容易出现人为错误,并且在一个地方添加相同标签的不同语言版本会更容易。例如:

    var lbl_Hello = new en = "Hello, fr = "Bonjour" ;

    我似乎无法使用 Visual Studio 搜索在 resx 可视化编辑器中搜索名称或值。

有没有办法克服这些问题?

【问题讨论】:

请看我回答的编辑。咻 【参考方案1】:

我感觉到你的痛苦。微软这么多年都没有为此提供更好的选择,这太荒谬了。甚至 .NET Core 本地化也使用 .resx 文件。我的替代方法是创建一个表,其中包含您要跟踪的每种语言的一列。然后在管道中(在 .NET Core 中)或在配置阶段(旧 ASP)中以静态变量(字典)的形式将其加载到内存中,或者我将其插入到本地/共享缓存中,没有过期日期。

编辑

如果要本地化的字符串数量不是很大,并且您可以在所有语言中使用它们,您可以完美地将它们内联到静态类本身,而不是将它们放在外部资源(数据库或文件)。但是在外部资源上使用这个字符串有一个明显的优势,您可以在不重新编译应用程序的情况下替换它们。

此外,有时您不会将所有字符串翻译成您想要提供的所有可用语言。然后,如果您在数据库或外部文件中分配了资源,那么您可以提供一个用户界面,以允许一些具有所需权限的用户修改/完成翻译。

【讨论】:

您对将字典保存在静态类本身而不是使用数据库加载它有何看法?它还将提供静态类型。

以上是关于我的 .resx 资源文件痛点的主要内容,如果未能解决你的问题,请参考以下文章

更改资源文件 (resx) 命名空间和访问修饰符

循环遍历 .resx 文件中的所有资源

防止资源 [.resx] 文件预编译。 .NET 核心 2.0

如何继承资源文件(resx)

为啥仅在更改表单大小和添加不是资源的按钮时添加资源 (.resx) 文件

如何在不捕获MissingManifestResourceException的情况下知道是否找不到资源文件