<!--
  Copyright 2010 Google Inc.
  Licensed under the Apache License, Version 2.0 (the "License"); you
  may not use this file except in compliance with the License. You may
  may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  implied. License for the specific language governing permissions and
  limitations under the License.
-->

<ui:UiBinder
    xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:gwt="urn:import:com.google.gwt.user.client.ui">

  <ui:with field="msg"
      type="com.google.gwt.uibinder.test.client.I18nMessageTest.TestMessages" />

  <gwt:HTMLPanel>

    <hr />
    <h1>Test</h1>
    <h2><ui:text from="{msg.messageBrazil}" /></h2>
    <h2 /><ui:text from="{msg.messageUsa}" />

    <hr />

    <gwt:Label>Brazil</gwt:Label>
    <gwt:Label><ui:text from="{msg.messageBrazil}" /></gwt:Label>
    <gwt:Label>
      Label =
      <ui:text from="{msg.messageBrazil}" />
      <ui:text from="{msg.messageUsa}" />
    </gwt:Label>

      <gwt:HTML text="{msg.messageUsa}"/>
      <gwt:HTML>USA</gwt:HTML>
      <gwt:HTML>
        HTML =
        <ui:text from="{msg.messageBrazil}" />
        <ui:text from="{msg.messageUsa}" />
      </gwt:HTML>
      <gwt:HTML><ui:text from="{msg.messageBrazil}" /></gwt:HTML>

    </gwt:HTMLPanel>

</ui:UiBinder>
