如何在wicket中本地化javascript文件

时间:2010-10-20 08:08:31

标签: java javascript localization wicket

Hallo,一个Wicket i18n问题: 我有一个javaScript文件,它包含我想要本地化的字符串。 理想情况下,我想本地化整个文件。像

这样的东西
  • my.js
  • my_de.js
  • my_fr.js
  • ...

wicket自动选择正确的js文件,就像属性文件一样。

任何人都知道该怎么做?

2 个答案:

答案 0 :(得分:8)

将语言环境传递给资源引用:

class MyPage extends WebPage implements IHeaderContributor {
    public void renderHead(IHeaderResponse response) {
        response.renderJavascriptReference(new ResourceReference(
        MyPage.class, "my.js", getLocale(), getStyle()));
    }
}

答案 1 :(得分:0)

如果字符串已经存在于Javascript文件中,则实际解决方案有效。但是当您在数据库中使用本地化字符串并希望将它们传递给您的Javascript代码时会发生什么?您可以创建一个名为XML的{​​{1}}文件,并存储由某些密钥标识的Javascript代码。

YourPageJS.xml

您可以通过以下方法调用此代码,该方法位于实用程序类中,并传递参数:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>

    <entry key="showModal">
    <![CDATA[ 

        $(''#{0}'').modal(''show'',{1});

    ]]>
    </entry>
</properties>

电话看起来像这样:

    public static String getJsByClass(Class clazz, String name, Object... params)
    {
        ResourceBundle resources = ResourceBundle.getBundle(clazz.getName()
                + "JS", Locale.getDefault(),
                new XMLResourceBundleControl());

        String mesaj = resources.getString(name);
        mesaj = MessageFormat.format(mesaj, params);

        return mesaj;
    }

其中参数可以是你的本地化字符串。在上面的例子中,第一个参数是标记ID。你可以像这样将它添加到你的html头:

YourUtils.getJsByClass(YourPage.class, "showModal" ,"firstParameter","secondParameter"); (Wicket 6)

此外,在response.render(JavaScriptHeaderItem.forScript(YourUtils.getJsByClass(YourPage.class, "showModal" ,"firstParameter","secondParameter"), "yourJSid"));中,您必须转换两个字符:XML变为'''变为{以解析原因。