## com.google.gwt.i18n.client
Interface Messages

All Superinterfaces:
  Localizable

    public interface Messages

extends Localizable

A tag interface that facilitates locale-sensitive, compile-time binding of messages supplied from properties files. Using `GWT.create(class)` to "instantiate" an interface that extends `Messages` returns an instance of an automatically generated subclass that is implemented using message templates from a property file selected based on locale. Message templates are based on a subset of the format used by `MessageFormat`.

Locale is specified at run time using a meta tag or query string as described for `Localizable`.

### Extending `Messages`

To use `Messages`, begin by defining an interface that extends it. Each interface method is referred to as a message accessor, and the name of each message accessor is assumed to match the name of a property defined in a properties file. For example,

>     public interface GameStatusMessages extends Messages {
>       /**
>        * @param username the name of a player
>        * @param numTurns the number of turns remaining
>        * @return a message specifying the remaining turns for a player
>        */
>       String turnsLeft(String username, int numTurns);

>       /**
>        * @param numPoints the number of points
>        * @return a message describing the current score for the current player
>        */
>       String currentScore(int numPoints);
>     }

expects to find properties named `turnsLeft` and `currentScore` in an associated properties file, formatted as message templates taking two arguments and one argument, respectively. For example, the following properties would correctly bind to the `GameStatusMessages` interface:

>     turnsLeft = Turns left for player ''{0}'': {1}
>     currentScore = Current score: {0}

The following example demonstrates how to use constant accessors defined in the interface above:

>     public void beginNewGameRound(String username) {
>       GameStatusMessages messages = (GameStatusMessages) GWT.create(GameStatusMessages.class);

>       // Tell the new player how many turns he or she has left.
>       int turnsLeft = computeTurnsLeftForPlayer(username);
>       showMessage(messages.turnsLeft(username, turnsLeft));

>       // Tell the current player his or her score.
>       int currentScore = computeScore(username);
>       setCurrentPlayer(username);
>       showMessage(messages.currentScore(currentScore));
>     }

It is possible to change the property name bound to a message accessor using the `gwt.key` doc comment, exactly as is done for constant accessors. See `Constants` for an example.

### Defining Message Accessors

Message accessors must be of the form

    String methodName(optional-params)

and parameters may be of any type. Arguments are converted into strings at runtime using Java string concatenation syntax (the '+' operator), which uniformly handles primitives, `null`, and invoking `toString()` to format objects.

Compile-time checks are performed to ensure that the number of placeholders in a message template (e.g. `{0}`) matches the number of parameters supplied.

### Binding to Properties Files

Interfaces extending `Messages` are bound to properties file using the same algorithm as interfaces extending `Constants`. See the documentation for `Constants` for a description of the algorithm.

### Required Module

Modules that use this interface should inherit `com.google.gwt.i18n.I18N`.

>     <!--                                                                        -->
>     <!-- Copyright 2007 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.                                         -->

>     <module>
>       <!-- other inherited modules, such as com.google.gwt.user.User -->
>       <inherits name="com.google.gwt.i18n.I18N"/>
>       <!-- additional module settings -->
>     </module>

### Note

You should not directly implement this interface or interfaces derived from it since an implementation is generated automatically when message interfaces are created using `GWT.create(Class)`.