资源(.resx)文件是否存在任何性能问题或警告?

资源文件似乎很适合标签和消息的本地化,但它们是否完美?

例如:

  1. 如果有大量资源,是否有更好的解决方案? 像.resx文件中的100,000个字符串一样? (理论上,我实际上没有这个问题)
  2. 这是存储其他类型数据的好方法,例如图像,图标,音频文件,常规文件等吗?
  3. 将.resx文件存储在独立项目中以便于更新/编译是最佳做法吗?
  4. 使用.resx文件时是否还有其他问题?

1.如果有大量资源,是否有更好的解决方案? 像.resx文件中的100,000个字符串一样? (理论上,我实际上没有这个问题)

我使用Alfresco作为Java项目的替代内容存储库。 RESX文件,从维护的角度来看(因为编码问题,我猜)可能真的很臭。

2.这是存储其他类型数据的好方法,例如图像,图标,音频文件,常规文件等吗?

我已经看到它与图像一起工作……但就是这样。 (不确定与其他媒体/文件)

3.将.resx文件存储在独立项目中以便于更新/编译是最佳做法吗?

我没有,但你可以在现场网站上编辑一个resx文件然后编辑将完成,我相信。 当然,这是它在开发中的工作方式(我认为全球resx除外)

4.使用.resx文件时是否还有其他问题?

除了真的很难维护,以及视觉工作室不提供与他们合作的最佳工具的事实……没有。

我最近使用了一个包含500万字符串(正常长度,就像这句话)的.resx文件,在不同的DLLS中编译,大小约为1 GB。 它仍然可以在Azure Web项目中正常工作。

加载时间未知,可能只有几秒左右,因为它总是可以分阶段加热,我从来没有注意到它。

我们一直在相对较大的.NET Windows Forms应用程序上使用资源文件(超过500种不同的表单,每个表单大约20个资源字符串),我们没有关于来自.resx文件的资源的性能问题。 我们使用Babylon.NET作为管理翻译的工具(仅为翻译人员提供免费版本)。 您没有指定您的项目是Web应用程序还是桌面应用程序。 资源文件为桌面应用程序提供的一个function是还能够使用其他工具来定位控制位置和大小,这是不可能的(除非您使用具有自动大小调整的DevExpress布局控件)。

我有两个资源文件问题,都是关于翻译人员 (人)的性能,而不是字符串查找的速度。

执行翻译的监督办公室的销售人员无法处理编辑XML或学习任何新工具。

所以他们只是使用Excel来编辑翻译。 因此,我们可能已将已翻译的字符串存储为CVS文件,因此避免将已翻译的字符串复制到资源文件中。

需要进行新的构建,以便需要任何翻译的效果。

如果翻译的字符串存储为CSV文件,我们可以将它们缓存在ASP.NET缓存中。 然后,对翻译的任何更改都会显示在下一页加载中。


因此,我们可以使用资源提供程序的自定义实现并保持标准的ASP.NET资源查找系统。 或者只是忽略标准资源查找系统,如果它对您的情况没有帮助 – 这取决于您的页面的编写方式。


您可能会在某些时候发现您希望能够覆盖单个客户的字符串,如果是这样,您将需要一个多阶段查找系统。 否则,每次发布新版本的系统时,都必须将客户的自定义字符串与已翻译的字符串合并。

对于第4点。
我一直在为我们网站上的所有字符串使用.resx文件,这些文件必须本地化为多种语言,并且没有任何重大问题。

您需要考虑的一件事是,您是否希望此文本可搜索。 对于我工作的一些站点,有一些需要搜索的本地化资源,所以我必须将它们保存在数据库中。 但是,当我选择时,我更喜欢.resx文件,原因与上述类似。

我将简单地补充一点,您应该寻找资源提供者(提供者模型,如成员资​​格提供者)的自定义实现(或您拥有),以将您的资源存储在数据库中。 这就是我们为CMS做的,它非常有用。

当我们第一次查找示例时,我们发现创建数据驱动的ASP.NET本地化资源提供程序和编辑器

这是我对资源文件的看法:

  1. 我假设如果有大量的字符串,那么使用数据库可能是允许搜索和排序数据的最佳方法。 在资源表中考虑多种语言可能并不太困难,速度应该最快。

  2. 我认为这是存储静态资源的好方法,也可能是客户端可能更改的内容。 对于动态资源,单独使用数据库或与文件系统结合使用可能更好。 我认为在新的SQL Server中有一种新类型,它是使用数据库和文件系统的最佳混合。

  3. 我在另一个问题中读到(不知道是哪个)在外部项目中使用资源文件是一种很好的做法,因为在资源发生变化时你不必重新编译整个项目。 只需重新编译资源项目。 这也允许客户进行(相当)简单的编辑,他们只需要为资源项目“源代码”,而不需要你的其他真实代码(API代码等)。

  4. 我没有充分利用资源文件来声明它们的可靠性,可扩展性或使用它们时可能遇到的任何潜在问题。

从未见过resx资源的任何问题,它们被完美地缓存。 我们在WinForms,asp.net mvc,wpf等中使用它们……

您应该做的一件事是使用Visual Studio的Microsoft MAT(多语言应用程序工具包)扩展。

您可以控制您的翻译,导出它们以发送给译员(例如,不是锁定的翻译),再次导入它们并validation它们或对其进行评论,回收现有翻译(节省您大量时间!)

它符合行业标准的xlf格式!

如果您使用Azure api注册,您甚至可以自动翻译资源(您可以在azure上免费获得每月几千个字)。 请参阅: https : //multilingualapptoolkit.uservoice.com/knowledgebase/articles/1167898-microsoft-translator-moves-to-the-azure-portal

你甚至可以看到项目已经完成了多少工作:

在此处输入图像描述

哦,它带有一个方便的编辑器,你的翻译也可以使用!

在此处输入图像描述

开始:

  1. 安装MAT Visual Studio扩展
  2. 转到Visual Studio中的项目
  3. 单击属性 – >打开AssemblyInfo.cs
  4. 添加此属性:[assembly:System.Resources.NeutralResourcesLanguage(“en”)]
  5. 在解决方案资源管理器中选择项目,在Visual Studio中选择[工具] – > [多语言应用程序工具包] – > [启用选择]
  6. 这将为您的项目添加一个新文件夹“MultilingualResources”
  7. 用鼠标右键单击您的项目 – > [多语言应用程序工具包] – > [添加翻译语言…] – >选择要翻译的语言(例如荷兰语)。
  8. 在“MultilingualResources”文件夹中,您将看到一个新文件“…. nl.xlf”,双击它,它将打开多语言编辑器。 (如果没有右键单击并将默认的“打开方式”更改为多语言编辑器)

现在您只需将字符串添加到默认的Resources.resx文件中(该语言应与您在AssemblyInfo.cs中添加的“NeutralResourcesLanguage”相同。对于您不能将字符串添加到… nl.resx文件的翻译,您可以使用.xlf文件,位于MultiLingualResources文件夹中。

(在完成大量翻译之后,可能需要重建,以便翻译的.xlf文件更新翻译的.resx文件)

在哪里得到它:

  • 反馈: https : //multilingualapptoolkit.uservoice.com/
  • visual studio扩展 : https : //marketplace.visualstudio.com/items?itemName = MultilingualAppToolkit.MultilingualAppToolkit-18308
  • 知识库: https : //multilingualapptoolkit.uservoice.com/knowledgebase
  • 管理这个项目的Cameron(微软)的github: https : //github.com/TheMATDude