Tapestry之国际化的实现TWO

前面按照别人的想法做了一个,这次按照自己的想法自己做了一个。

tml如下

        <t:form t:id="locale">
            <t:loop source="LocalesSource" value="selectedLocale" formState="ITERATION">
                <t:test server="currentLocale" client="${selectedLocale.locale.language}">
                    <img src="${selectedLocale.asset}" class="currentFlag" />
                    <p:else>
                        <a t:type="actionLink" t:id="changeLocale" context="${selectedLocale.locale.language}" href="#">
                            <img src="${selectedLocale.asset}" class="notCurrentFlag" />
                        </a>
                    </p:else>
                </t:test>
            </t:loop>
            <div class="message">
                ${message:greeting_message}
            </div>
        </t:form>

java如下:

public class LocaleSwitcher2
{
    @Inject
    @Property
    @Symbol(SymbolConstants.SUPPORTED_LOCALES)
    private String locales;

    @Inject
    private PersistentLocale persistentLocale;

    @Property
    private LocaleBean selectedLocale;

    @Inject
    @Path("context:images/country_zh.png")
    private Asset assetZh;

    @Inject
    @Path("context:images/country_it.png")
    private Asset assetIt;

    @Inject
    @Path("context:images/country_ja.png")
    private Asset assetJa;

    @Inject
    @Path("context:images/country_en.png")
    private Asset assetEn;

    public List<LocaleBean> getLocalesSource()
    {
        String[] countrys = locales.split(",");
        List<LocaleBean> localeList = new ArrayList<LocaleBean>();
        for (String country : countrys) {
            LocaleBean addBean = new LocaleBean();
            addBean.setLocale(new Locale(country));
            if (country.equalsIgnoreCase("en")) {
                addBean.setAsset(assetEn);
            } else if (country.equalsIgnoreCase("ja")) {
                addBean.setAsset(assetJa);
            } else if (country.equalsIgnoreCase("zh")) {
                addBean.setAsset(assetZh);
            } else if (country.equalsIgnoreCase("it")) {
                addBean.setAsset(assetIt);
            } else {
                addBean.setAsset(assetEn);
            }
            localeList.add(addBean);
        }
        return localeList;
    }

    public ValueEncoder<Locale> getLocaleEncoder()
    {
        return new ValueEncoder<Locale>() {
            public String toClient(Locale locale)
            {
                return locale.getLanguage();
            }

            public Locale toValue(String language)
            {
                return new Locale(language);
            }
        };
    }

    void onActionFromChangeLocale(String language)
    {
        persistentLocale.set(new Locale(language));
    }

    public String getCurrentLocale()
    {
        return persistentLocale.get().getLanguage();
    }

}
public class LocaleBean
{

    private Locale locale;

    private Asset asset;

    public Locale getLocale()
    {
        return locale;
    }

    public void setLocale(Locale locale)
    {
        this.locale = locale;
    }

    public Asset getAsset()
    {
        return asset;
    }

    public void setAsset(Asset asset)
    {
        this.asset = asset;
    }

}
public class Test extends AbstractConditional
{
    @Parameter(required = true)
    private String client;

    @Parameter(required = true)
    private String server;

    @Parameter
    private boolean negate;

    @Override
    protected boolean test()
    {
        return client.equalsIgnoreCase(server);
    }

}

效果图:

posted @ 2013-04-02 14:57  VoctrALs  阅读(220)  评论(0编辑  收藏  举报