0

是否可以使用具有特定于语言环境的 url 的 GWT ImageResource,而不必复制底层图像?

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

可以像调用 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();
}

在浏览器中,我希望 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?

4

2 回答 2

2

似乎您缺少 ClientBundle 的底层逻辑,我将尝试稍后解释,但您应该查看 TLTR 版本的 GWT 规范。

简而言之,在编译您的应用程序时,gwt compile 会将位于 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

于 2013-09-22T20:24:23.173 回答
-2

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

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

于 2013-09-23T09:00:12.773 回答