具有特定于区域设置的url的GWT ImageResource

具有特定于区域设置的url的GWT ImageResource,gwt,Gwt,是否可以让GWTImageResource具有特定于语言环境的url,而不必复制底层图像 我读了一个影响SEO的图片的url,人们应该选择好的有意义的关键词来提高排名。因此,理想情况下,我希望在图像url中包含特定于语言环境的关键字,即来自i18n Constants类的图像名称 它能像调用myImageResource.setUrl那样简单吗?如果是的话,什么时候打电话有关系吗 或者是否有用于设置url的注释 下面是一些代码上下文 public interface MyImageBundle

是否可以让GWTImageResource具有特定于语言环境的url,而不必复制底层图像

我读了一个影响SEO的图片的url,人们应该选择好的有意义的关键词来提高排名。因此,理想情况下,我希望在图像url中包含特定于语言环境的关键字,即来自i18n Constants类的图像名称

它能像调用myImageResource.setUrl那样简单吗?如果是的话,什么时候打电话有关系吗

或者是否有用于设置url的注释

下面是一些代码上下文

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
图像foo1和foo2在所有地区都是相同的,我只希望url是特定于地区的

理想情况下,我希望形成url的路径和关键字来自常量,例如:

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在编译时查找图像的文件夹。