具有特定于语言环境的URL的GWT ImageResource

时间:2013-09-22 04:40:32

标签: gwt

是否可以将GWT ImageResource 区域设置特定的网址一起使用,而无需复制基础图像?

我读到影响SEO的图像网址,应该选择好的有意义的关键词来提高排名。所以我最好在图片网址中使用特定于区域设置的关键字,即来自i18n Constants类的图片名称。

它可以像调用myImageResource.setUrl一样简单吗?如果是这样,什么时候打电话呢?

或者是否有注释来设置网址?

下面是一些代码上下文。

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();
}

在浏览器中,我希望网址看起来像这样:

  • 法语:
    • 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中设置网址?

2 个答案:

答案 0 :(得分:2)

您似乎缺少ClientBundle的基础逻辑 我将尽快解释,但你应该看一下TLTR版本的GWT规范。

简而言之,在编译你的应用程序时,gwt编译将获取位于MyImageBundle类中由ImageResource注释的所有图像文件,并将其打包到一个单个精灵表图像文件(带有乱码的SHA1哈希文件名)中节省下载空间和时间。

此文件保存在GWT编译目录下,GWT Image类知道如何使用它来正确显示图像。

似乎你应该为此目的跳过使用ImageResource:

修复您的代码:

Image foo1Image = new Image();
foo1Image.setUrl(myConstant.path() + "/" + myConstant.keywordFoo1() + ".png");

而不是在服务器端克隆文件,你可以编写(或在网上找到)一个非常简单的http路由器,它为两个内容调用提供: mydomain.com/myFrenchPath/myFrenchKeywordFoo1.png mydomain.com/myEnglishPath/myEnglishKeywordFoo1.png 从: mydomain.com/images/KeywordFoo1.png

答案 1 :(得分:-2)

所有ClientBundle都可以自动国际化: http://www.gwtproject.org/doc/latest/DevGuideClientBundle.html#I18N

为默认版本创建foo1.png,为法语版本创建foo1_FR.png。