资源文件似乎非常适合本地化标签和消息,但它们是否完美?
例如:
- 如果有大量资源(例如100,000个字符串在.resx文件中),是否有更好的解决方案?(从理论上讲,我实际上没有这个问题)
- 对于存储其他类型的数据(例如图像、图标、音频文件、常规文件等),这是一个好的方法吗?
- 将.resx文件存储在独立项目中以便更轻松地进行更新/编译,这是最佳实践吗?
- 在使用.resx文件时,是否遇到过其他任何问题?
资源文件似乎非常适合本地化标签和消息,但它们是否完美?
例如:
1. 如果有大量资源,例如.resx文件中的100,000个字符串,是否有更好的解决方案?(理论上,我实际上没有这个问题)
我在Java项目中使用Alfresco作为替代内容库。由于编码问题,从维护的角度来看,RESX文件可能会非常麻烦。
2. 这是存储其他类型数据(如图像、图标、音频文件、常规文件等)的好方法吗?
我见过它可以用于图像...但仅限于此。 (不确定其他媒体/文件)
3. 将.resx文件存储在独立的项目中以便更轻松地更新/编译是否是最佳实践?
我不这样做,但是您可以在现场编辑resx文件,然后我认为编辑将通过。 当然,在开发中也是这样工作的(除全局resx外,我想)
4. 在使用.resx文件时,您遇到的其他问题有哪些?
除了维护起来非常恼人以及Visual Studio没有提供最整洁的工具来处理它们之外...没有。
我最近使用了一个具有500万个字符串(像这个句子一样普通长度)的.resx文件,编译在不同的DLL中,大约大小为1GB。它仍然可以在Azure Web项目中正常运行。
加载时间未知,可能是几秒钟左右,因为它总是可以分阶段预热,我从未注意到它。
我从未遇到过与resx资源相关的问题,它们被完美地缓存了。我们在WinForms、asp.net mvc、wpf等方面使用它们...
你应该做的一件事是使用Visual Studio的Microsoft MAT(多语言应用工具包)扩展。
你可以控制你的翻译,将它们导出以发送给翻译人员(例如未锁定的翻译),再次导入并验证或评论它,回收现有的翻译(节省大量时间!)
而且它还支持行业标准的xlf格式!
如果你注册Azure api,甚至可以自动翻译资源(每月免费使用几千个单词的信用额度)。参见:https://multilingualapptoolkit.uservoice.com/knowledgebase/articles/1167898-microsoft-translator-moves-to-the-azure-portal
你甚至可以看到项目中已经完成了多少工作:
另外,它还配备了一个方便的编辑器,您的翻译人员也可以使用!
开始操作:
现在你只需要将字符串添加到默认的Resources.resx文件中(语言应与AssemblyInfo.cs中添加的“NeutralResourcesLanguage”相同)。 对于翻译,您不需要将字符串添加到...nl.resx文件中,而是使用位于MultiLingualResources文件夹中的.xlf文件进行工作。
(在完成大量翻译后,可能需要重新构建,以便已翻译的.xlf文件更新已翻译的.resx文件)
获取位置:
关于第四点。
我一直在使用.resx文件来存储我们网站上需要本地化到多种语言的所有字符串,并且没有遇到任何重大问题。
你需要考虑的一件事是,如果你想让这些文本可以被搜索到。对于我所工作的一些网站,有一些需要进行本地化的资源需要被搜索,因此我必须将它们保留在数据库中。然而,当我有选择时,出于类似上述原因,我更喜欢使用.resx文件。
以下是我对资源文件的看法:
如果有大量字符串需要处理,我会认为使用数据库可能是最好的方法,以便搜索和排序数据。在资源表中考虑多种语言可能不太困难,而且速度应该很快。
我认为这是存储静态资源或可能由客户端更改的内容的良好方法。至于动态资源,最好使用数据库,单独使用或与文件系统结合使用。我认为在新的SQL Server中,有一种新类型是使用数据库和文件系统的最佳混合。
我在另一个问题中读到(不知道是哪个问题),在外部项目中使用资源文件是一个好习惯,因为当资源发生变化时,您不必重新编译整个项目。只需重新编译资源项目即可。这也允许客户进行(相当)容易的编辑,他们只需要“源代码”资源项目,而不是您的其他真实代码(API代码等)。
我没有使用过资源文件,无法对它们的可靠性、可扩展性或可能在使用它们时遇到的任何潜在问题做出任何声明。
在放弃使用自定义正则表达式语言替换字符串的代理服务器后,我在 .net razor 页面应用程序中使用资源文件。
我们放弃了代理方法,因为它更适合大型字符串(段落),对于所有动态片段和其他内容,它非常棘手。
到目前为止,我没有遇到任何问题,而且速度比代理服务器快。我将所有目标页面、注释、名称、英文和所有其他可用语言存储在数据库中...添加新语言的新列非常简单。
到目前为止,我们在多个 resx 文件中有约 5k 条条目。
然后,我使用构建器进程创建所有的 resx 文件,并在更新时将它们放置在正确的本地和全局文件夹中。
为翻译人员构建一个简单的界面来搜索页面、语言、注释、名称等并进行更新非常容易。我们选择不在更改时自动重建 resx 文件,但如果您信任您的翻译人员,您可以这样做 ;)
我们还允许翻译人员添加要翻译的新片段/文本,但迄今为止,我们还没有想出如何自动包含它们,并且必须手动替换源文件中的字符串并重新编译。
对于编辑 resx 文件,我使用了 zeta。
https://www.zeta-resource-editor.com/index.html
这个工具可以一次性打开所有语言文件,并且突出显示占位符的差异和缺失的翻译。您可以在同一行上编辑所有语言,并一次性保存所有文件。虽然我们现在不再使用它,因为所有内容都在数据库中,但我们仍然推荐使用。