在ASP.NET中本地化图像

在ASP.NET中本地化图像,asp.net,image,localization,globalization,Asp.net,Image,Localization,Globalization,几年前,我们有一位平面设计师对我们的网站进行了改造。他的结果看起来不错,但不幸的是,他在web浏览器中引入了一种新的不受支持的字体 起初我想,“什么!?!”。。。因为我们的大部分内容都是动态的,并且没有真正的方法来预先制作所有的图像。还有多种语言的问题(因为我们知道西班牙语即将问世) 无论如何,我决定创建一些类,通过GDI+自动生成图像,并根据需要编程缓存它们。这解决了我们最初的大部分问题。然而,现在我们的负载已经显著增加,UI服务器上出现了消耗 现在来谈谈这个问题。。。我希望用标准的web浏览

几年前,我们有一位平面设计师对我们的网站进行了改造。他的结果看起来不错,但不幸的是,他在web浏览器中引入了一种新的不受支持的字体

起初我想,“什么!?!”。。。因为我们的大部分内容都是动态的,并且没有真正的方法来预先制作所有的图像。还有多种语言的问题(因为我们知道西班牙语即将问世)

无论如何,我决定创建一些类,通过GDI+自动生成图像,并根据需要编程缓存它们。这解决了我们最初的大部分问题。然而,现在我们的负载已经显著增加,UI服务器上出现了消耗

现在来谈谈这个问题。。。我希望用标准的web浏览器字体替换大多数动态GDI+图像。我正在考虑保留一些渲染的GDI+图像,并将它们放在一个resx文件中,但计划通过asp:Labels将其中大部分替换为Tahoma或Arial字体

您发现哪种本地化图像解决方案更好

  • 将图像嵌入resx
  • 仅将图像url添加到resx中
  • 其他解决方案

我主要关心的是限制UI服务器上的处理。如果是这样的话,与将图像嵌入到resx中相比,将图像url添加到resx是更好的解决方案吗?

由于缓存的原因,我宁愿只将图像url添加到resx中。静态内容(即普通文件)的缓存比生成的内容好得多。

请参阅我的回答

这可以手动或使用某种自动(CMS)系统来完成

基本方法是将图像缓存在特定于语言的目录结构中,然后编写一个HTTP处理程序,有效地删除额外的目录层。例如:

/images/
    /en/
        header1.gif
    /es/
        header1.gif
在标记或CSS中,您只需引用/images/header1.gif。http hander然后使用会话(如果语言特定于用户)或配置(如果特定于站点)来选择从哪个目录提供映像


这为代码和内容提供了一条清晰的界线,并允许客户端缓存。Resx对于小字符串来说非常好,但是对于图像和更大的内容,我更喜欢这样的系统。尤其是在网络上,通常很容易切换图像。

几年前我也遇到过同样的问题,我们的界面团队向我们推荐了SIFr

将字体嵌入Flash电影,然后使用SIFr JavaScript将文本动态转换为字体。因为它是客户端的,所以不会对服务器端造成影响

如果用户没有安装Flash或JavaScript,他们会得到最接近的web友好字体


还有一个额外的好处:因为你的内容仍然是文本——谷歌可以搜索和索引这些内容——这是一个巨大的SEO优化。

你只需要生成每个图像一次,然后将其保存在硬盘上。站点上的负载不应该增加您必须执行的处理量。话虽如此,听起来你似乎在用图像来做你不该做的事情。如果有太多不同的图像,你无法跟上生成它们的速度,那么现在是时候放弃你的幻想图像,去做那些不应该是图像的事情,回到纯文本。如果用户没有安装指定的字体,它应该返回到外观类似的字体。CSS对这一点有很好的支持。

我会非常谨慎地在图片中添加文本,在可访问性和良好的MVC基础上,具有适当字体系列回退的CSS可能是正确的响应


在真正需要生成的地方,我认为KibleeJayArr概述了好的解决方案

但我在这里能想到的唯一一件事是,如果用户更改语言,他们必须清除缓存以查看不同的内容。这不一定有什么大不了的,但需要注意的是,我不得不说,在质量和性能方面,我和SIFR的结果非常复杂。警告买主。