2015-05-18 2 views
0

Как говорится в названии, мне нужна помощь с i18n GWT, используемым с UiBinder. Я хочу интернационализировать свое приложение, используя статический i18n. Книга, которую я использую для обучения, представляет собой способ интернационализации файлов ui.xml, если компилятор сгенерирует ключи для констант/сообщений и файл по умолчанию, но должен быть более простой способ сделать это. Вот почему я попытался с помощью пользовательского интерфейса: с биркой, как это использовать мои локализованные константы (внутри upFace):GWT UiBinder I18n

<ui:with type="havis.ui.shared.resourcebundle.ConstantsResource" field="lang"></ui:with>  
<g:ToggleButton ui:field="observeButton"> 
     <g:upFace>{lang.observe}</g:upFace> 
     <g:downFace>Observing</g:downFace> 
</g:ToggleButton> 

Это не работает, кнопка показывает текст {lang.observe}, который также кажется логичным , но теперь мой вопрос: есть ли способ использовать такие константы? И если бы не кто-нибудь мог объяснить, как использовать константы в файлах UiBinder вместо того, чтобы компилятор не сгенерировал файлы и ключи?

ответ

2

Anywhere HTML принимается (например, в пределах upFace), вы можете использовать <ui:msg>, <ui:text> и <ui:safehtml> (и в любом месте обычного текста, как ожидается, вы можете использовать <ui:msg> и <ui:text>).

Так что в вашем случае:

<ui:with type="havis.ui.shared.resourcebundle.ConstantsResource" field="lang"></ui:with>  
<g:ToggleButton ui:field="observeButton"> 
    <g:upFace><ui:text from="{lang.observe}"/></g:upFace> 
    <g:downFace>Observing</g:downFace> 
</g:ToggleButton> 

См http://www.gwtproject.org/doc/latest/DevGuideUiBinder.html#Hello_Text_Resources и http://www.gwtproject.org/doc/latest/DevGuideUiBinder.html#Hello_Html_Resources о ui:text и ui:safehtml.

+0

Спасибо, все работает отлично! – Lunaetic

0

Вы можете использовать константы, как это:

.ui.xml:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'> 
<ui:with field="constants" type="my.client.resources.AppResources.AppConstants"/> 

<g:FlowPanel> 
    <g:Label text="{constants.label}"/> 
</g:FlowPanel> 

и интерфейс AppResources:

public interface ApplicationResources extends ClientBundle { 

public static final ApplicationConstants CONSTANTS = GWT.create(ApplicationConstants.class); 

    public interface ApplicationConstants extends com.google.gwt.i18n.client.Constants { 

    @DefaultStringValue("my label") 
    String label(); 
    } 
} 

Но i18n вы действительно должны следовать тому, что руководство GWT говорит, то есть не является другим (чистым) способом, чем подготовить все файлы свойств (по одному для каждого языка) и сгенерировать все необходимые перестановки. Это прежде всего делегирует GWT всем связанным с определением языка материалу, а решение, предоставленное GWT, достаточно хорошо работает во время выполнения. Единственным недостатком является то, что время компиляции немного выше (поскольку у вас будут перестановки для каждого браузера на каждом указанном вами языке).

+0

Я уже узнал об этом, но мне это не нравится /: Но спасибо за попытку помочь, я ценю это (: – Lunaetic