具有特定于区域设置的url的GWT ImageResource
是否可以让GWTImageResource具有特定于语言环境的url,而不必复制底层图像 我读了一个影响SEO的图片的url,人们应该选择好的有意义的关键词来提高排名。因此,理想情况下,我希望在图像url中包含特定于语言环境的关键字,即来自i18n Constants类的图像名称 它能像调用myImageResource.setUrl那样简单吗?如果是的话,什么时候打电话有关系吗 或者是否有用于设置url的注释 下面是一些代码上下文具有特定于区域设置的url的GWT ImageResource,gwt,Gwt,是否可以让GWTImageResource具有特定于语言环境的url,而不必复制底层图像 我读了一个影响SEO的图片的url,人们应该选择好的有意义的关键词来提高排名。因此,理想情况下,我希望在图像url中包含特定于语言环境的关键字,即来自i18n Constants类的图像名称 它能像调用myImageResource.setUrl那样简单吗?如果是的话,什么时候打电话有关系吗 或者是否有用于设置url的注释 下面是一些代码上下文 public interface MyImageBundle
public interface MyImageBundle extends ClientBundle
{
public static final MyImageBundle INSTANCE = GWT.create(MyImageBundle.class);
public static final String IMAGE_PATH = "image/";
@Source(IMAGE_PATH + "foo1.png")
ImageResource foo1();
@Source(IMAGE_PATH + "foo2.png")
ImageResource foo2();
}
在浏览器中,我希望url的外观如下所示:
- 法语:
- foo1:mydomain.com/myFrenchPath/myFrenchKeywordFoo1.png
- foo2:mydomain.com/myFrenchPath/myFrenchKeywordFoo2.png
- 中文:
- foo1:mydomain.com/myEnglishPath/myEnglishKeywordFoo1.png
- foo2:mydomain.com/myEnglishPath/myEnglishKeywordFoo2.png
public interface MyConstants extends com.google.gwt.i18n.client.Constants
{
String path();
String keywordFoo1();
String keywordFoo2();
}
MyConstants myConstant = (MyConstants) GWT.create(MyConstants.class);
下面的方法行吗?这样做对吗
Image foo1Image = new Image(MyImageBundle.INSTANCE.foo1());
foo1Image.setUrl(myConstant.path() + "/" + myConstant.keywordFoo1() + ".png");
或者在MyImageBundle中是否有设置url的注释?您似乎缺少ClientBundle的底层逻辑 我将很快解释,但您应该看看TLTR版本的GWT规范 简言之,在编译你的应用程序时,gwt编译将获取MyImageBundle类中ImageResource注释的所有图像文件,并将其打包到一个单独的sprite sheet图像文件中(带有加扰的SHA1哈希文件名),以节省下载空间和时间。 该文件保存在GWT编译目录下,GWT Image类知道如何使用它来正确显示图像 似乎您应该跳过为此目的使用ImageResource: 修复您的代码:
Image foo1Image = new Image();
foo1Image.setUrl(myConstant.path() + "/" + myConstant.keywordFoo1() + ".png");
您可以编写(或在web上找到)一个非常简单的http路由器,为以下两者提供内容调用,而不是在服务器端克隆文件:
mydomain.com/myFrenchPath/myFrenchKeywordFoo1.png
mydomain.com/myEnglishPath/myEnglishKeywordFoo1.png
发件人:
mydomain.com/images/KeywordFoo1.png所有ClientBundle都可以自动国际化:
只需为默认版本创建foo1.png,为法语版本创建foo1_FR.png。谢谢。因此,我发现使用ClientBundle是不可能的。我不明白为什么不可能:不管是不是sprite,在Firebug中我看到了一个url,那么为什么那个url,或者至少它的某些部分,不能被参数化呢?@Patrick,如果你想深入挖掘,你可能可以扩展ImageResourceGenerator类,并以不同的方式处理sprite表的生成。对我来说,这似乎是一个真正的过度杀伤力——但是如果你想沿着这条路走下去,你可以从一个极好的例子开始,说明如何在这里扩展ImageResourceGenerator:当你每个语言环境有一个图像版本时,对于图像的内容为True。但我的问题是关于国际化url(即,同一图像的ClientBundle中的多个本地化url),而不是图像内容。在ClientBundle中,您将没有图像url,图像将自动合并到一个具有md5名称的文件或数据url中。@source anotion就是GWT在编译时查找图像的文件夹。