| 
001 /*002  * Copyright 2008-2015 the original author or authors.
 003  *
 004  * Licensed under the Apache License, Version 2.0 (the "License");
 005  * you may not use this file except in compliance with the License.
 006  * You may obtain a copy of the License at
 007  *
 008  *     http://www.apache.org/licenses/LICENSE-2.0
 009  *
 010  * Unless required by applicable law or agreed to in writing, software
 011  * distributed under the License is distributed on an "AS IS" BASIS,
 012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 013  * See the License for the specific language governing permissions and
 014  * limitations under the License.
 015  */
 016 package griffon.core.i18n;
 017
 018 import javax.annotation.Nonnull;
 019 import javax.annotation.Nullable;
 020 import java.util.List;
 021 import java.util.Locale;
 022 import java.util.Map;
 023 import java.util.ResourceBundle;
 024
 025 /**
 026  * Interface for resolving messages, with support for the parameterization and internationalization of such messages.
 027  *
 028  * @author Andres Almiray
 029  * @author Alexander Klein
 030  * @since 2.0.0
 031  */
 032 public interface MessageSource {
 033     /**
 034      * "@["
 035      */
 036     String REF_KEY_START = "@[";
 037
 038     /**
 039      * "]"
 040      */
 041     String REF_KEY_END = "]";
 042
 043     /**
 044      * Try to resolve the message.
 045      *
 046      * @param key Key to lookup, such as 'log4j.appenders.console'
 047      * @return The resolved message at the given key for the default locale
 048      * @throws NoSuchMessageException if no message is found
 049      */
 050     @Nonnull
 051     String getMessage(@Nonnull String key) throws NoSuchMessageException;
 052
 053     /**
 054      * Try to resolve the message.
 055      *
 056      * @param key    Key to lookup, such as 'log4j.appenders.console'
 057      * @param locale Locale in which to lookup
 058      * @return The resolved message at the given key for the given locale
 059      * @throws NoSuchMessageException if no message is found
 060      */
 061     @Nonnull
 062     String getMessage(@Nonnull String key, @Nonnull Locale locale) throws NoSuchMessageException;
 063
 064     /**
 065      * Try to resolve the message.
 066      *
 067      * @param key  Key to lookup, such as 'log4j.appenders.console'
 068      * @param args Arguments that will be filled in for params within the message (params look like "{0}" within a
 069      *             message, but this might differ between implementations), or null if none.
 070      * @return The resolved message at the given key for the default locale
 071      * @throws NoSuchMessageException if no message is found
 072      */
 073     @Nonnull
 074     String getMessage(@Nonnull String key, @Nonnull Object[] args) throws NoSuchMessageException;
 075
 076     /**
 077      * Try to resolve the message.
 078      *
 079      * @param key    Key to lookup, such as 'log4j.appenders.console'
 080      * @param args   Arguments that will be filled in for params within the message (params look like "{0}" within a
 081      *               message, but this might differ between implementations), or null if none.
 082      * @param locale Locale in which to lookup
 083      * @return The resolved message at the given key for the given locale
 084      * @throws NoSuchMessageException if no message is found
 085      */
 086     @Nonnull
 087     String getMessage(@Nonnull String key, @Nonnull Object[] args, @Nonnull Locale locale) throws NoSuchMessageException;
 088
 089     /**
 090      * Try to resolve the message.
 091      *
 092      * @param key  Key to lookup, such as 'log4j.appenders.console'
 093      * @param args Arguments that will be filled in for params within the message (params look like "{0}" within a
 094      *             message, but this might differ between implementations), or null if none.
 095      * @return The resolved message at the given key for the default locale
 096      * @throws NoSuchMessageException if no message is found
 097      */
 098     @Nonnull
 099     String getMessage(@Nonnull String key, @Nonnull List<?> args) throws NoSuchMessageException;
 100
 101     /**
 102      * Try to resolve the message.
 103      *
 104      * @param key    Key to lookup, such as 'log4j.appenders.console'
 105      * @param args   Arguments that will be filled in for params within the message (params look like "{0}" within a
 106      *               message, but this might differ between implementations), or null if none.
 107      * @param locale Locale in which to lookup
 108      * @return The resolved message at the given key for the given locale
 109      * @throws NoSuchMessageException if no message is found
 110      */
 111     @Nonnull
 112     String getMessage(@Nonnull String key, @Nonnull List<?> args, @Nonnull Locale locale) throws NoSuchMessageException;
 113
 114     /**
 115      * Try to resolve the message. Return default message if no message was found.
 116      *
 117      * @param key            Key to lookup, such as 'log4j.appenders.console'
 118      * @param defaultMessage Message to return if the lookup fails
 119      * @return The resolved message at the given key for the default locale
 120      */
 121     @Nullable
 122     String getMessage(@Nonnull String key, @Nullable String defaultMessage);
 123
 124     /**
 125      * Try to resolve the message. Return default message if no message was found.
 126      *
 127      * @param key            Key to lookup, such as 'log4j.appenders.console'
 128      * @param locale         Locale in which to lookup
 129      * @param defaultMessage Message to return if the lookup fails
 130      * @return The resolved message at the given key for the given locale
 131      */
 132     @Nullable
 133     String getMessage(@Nonnull String key, @Nonnull Locale locale, @Nullable String defaultMessage);
 134
 135     /**
 136      * Try to resolve the message. Return default message if no message was found.
 137      *
 138      * @param key            Key to lookup, such as 'log4j.appenders.console'
 139      * @param args           Arguments that will be filled in for params within the message (params look like "{0}"
 140      *                       within a message, but this might differ between implementations), or null if none.
 141      * @param defaultMessage Message to return if the lookup fails
 142      * @return The resolved message at the given key for the default locale
 143      */
 144     @Nullable
 145     String getMessage(@Nonnull String key, @Nonnull Object[] args, @Nullable String defaultMessage);
 146
 147     /**
 148      * Try to resolve the message. Return default message if no message was found.
 149      *
 150      * @param key            Key to lookup, such as 'log4j.appenders.console'
 151      * @param args           Arguments that will be filled in for params within the message (params look like "{0}"
 152      *                       within a message, but this might differ between implementations), or null if none.
 153      * @param locale         Locale in which to lookup
 154      * @param defaultMessage Message to return if the lookup fails
 155      * @return The resolved message at the given key for the given locale
 156      */
 157     @Nullable
 158     String getMessage(@Nonnull String key, @Nonnull Object[] args, @Nonnull Locale locale, @Nullable String defaultMessage);
 159
 160     /**
 161      * Try to resolve the message. Return default message if no message was found.
 162      *
 163      * @param key            Key to lookup, such as 'log4j.appenders.console'
 164      * @param args           Arguments that will be filled in for params within the message (params look like "{0}"
 165      *                       within a message, but this might differ between implementations), or null if none.
 166      * @param defaultMessage Message to return if the lookup fails
 167      * @return The resolved message at the given key for the default locale
 168      */
 169     @Nullable
 170     String getMessage(@Nonnull String key, @Nonnull List<?> args, @Nullable String defaultMessage);
 171
 172     /**
 173      * Try to resolve the message. Return default message if no message was found.
 174      *
 175      * @param key            Key to lookup, such as 'log4j.appenders.console'
 176      * @param args           Arguments that will be filled in for params within the message (params look like "{0}"
 177      *                       within a message, but this might differ between implementations), or null if none.
 178      * @param locale         Locale in which to lookup
 179      * @param defaultMessage Message to return if the lookup fails
 180      * @return The resolved message at the given key for the given locale
 181      */
 182     @Nullable
 183     String getMessage(@Nonnull String key, @Nonnull List<?> args, @Nonnull Locale locale, @Nullable String defaultMessage);
 184
 185     /**
 186      * Try to resolve the message.
 187      *
 188      * @param key  Key to lookup, such as 'log4j.appenders.console'
 189      * @param args Arguments that will be filled in for params within the message (params look like "{:key}"
 190      *             within a message, but this might differ between implementations), or null if none.
 191      * @return The resolved message at the given key for the default locale
 192      * @throws NoSuchMessageException if no message is found
 193      */
 194     @Nonnull
 195     String getMessage(@Nonnull String key, @Nonnull Map<String, Object> args) throws NoSuchMessageException;
 196
 197     /**
 198      * Try to resolve the message.
 199      *
 200      * @param key    Key to lookup, such as 'log4j.appenders.console'
 201      * @param args   Arguments that will be filled in for params within the message (params look like "{:key}"
 202      *               within a message, but this might differ between implementations), or null if none.
 203      * @param locale Locale in which to lookup
 204      * @return The resolved message at the given key for the given locale
 205      * @throws NoSuchMessageException if no message is found
 206      */
 207     @Nonnull
 208     String getMessage(@Nonnull String key, @Nonnull Map<String, Object> args, @Nonnull Locale locale) throws NoSuchMessageException;
 209
 210     /**
 211      * Try to resolve the message. Return default message if no message was found.
 212      *
 213      * @param key            Key to lookup, such as 'log4j.appenders.console'
 214      * @param args           Arguments that will be filled in for params within the message (params look like "{:key}"
 215      *                       within a message, but this might differ between implementations), or null if none.
 216      * @param defaultMessage Message to return if the lookup fails
 217      * @return The resolved message at the given key for the default locale
 218      */
 219     @Nullable
 220     String getMessage(@Nonnull String key, @Nonnull Map<String, Object> args, @Nullable String defaultMessage);
 221
 222     /**
 223      * Try to resolve the message. Return default message if no message was found.
 224      *
 225      * @param key            Key to lookup, such as 'log4j.appenders.console'
 226      * @param args           Arguments that will be filled in for params within the message (params look like "{:key}"
 227      *                       within a message, but this might differ between implementations), or null if none.
 228      * @param locale         Locale in which to lookup
 229      * @param defaultMessage Message to return if the lookup fails
 230      * @return The resolved message at the given key for the given locale
 231      */
 232     @Nullable
 233     String getMessage(@Nonnull String key, @Nonnull Map<String, Object> args, @Nonnull Locale locale, @Nullable String defaultMessage);
 234
 235     /**
 236      * <p>Resolve a message given a key and a Locale.</p>
 237      * <p>
 238      * This method should use the default Locale if the locale argument is null. The {@code key} argument may refer to
 239      * another key if the resolved value results in a {@code CharSequence} that begins with "@[" and ends with "]". In this
 240      * case the method will use the enclosed value as the next key to be resolved. For example, given the following key/value
 241      * definitions
 242      * <p/>
 243      * <pre>
 244      *     some.key = Hello {0}
 245      *     other.key = @[some.key]
 246      * </pre>
 247      * <p/>
 248      * Evaluating the keys results in
 249      * <p/>
 250      * <pre>
 251      *    assert resolveMessageValue('some.key', Locale.default) == 'Hello {0}'
 252      *    assert resolveMessageValue('other.key', Locale.default) == 'Hello {0}'
 253      * </pre>
 254      * <p/>
 255      * </p>
 256      *
 257      * @param key    Key to lookup, such as 'log4j.appenders.console'
 258      * @param locale Locale in which to lookup
 259      * @return the resolved message value at the given key for the given locale
 260      * @throws NoSuchMessageException if no message is found
 261      */
 262     @Nonnull
 263     Object resolveMessageValue(@Nonnull String key, @Nonnull Locale locale) throws NoSuchMessageException;
 264
 265     /**
 266      * Formats the given message using supplied args to substitute placeholders.
 267      *
 268      * @param message The message following a predefined format.
 269      * @param args    Arguments that will be filled in for params within the message (params look like "{0}"
 270      *                within a message, but this might differ between implementations), or null if none.
 271      * @return the formatted message with all matching placeholders with their substituted values.
 272      */
 273     @Nonnull
 274     String formatMessage(@Nonnull String message, @Nonnull List<?> args);
 275
 276     /**
 277      * Formats the given message using supplied args to substitute placeholders.
 278      *
 279      * @param message The message following a predefined format.
 280      * @param args    Arguments that will be filled in for params within the message (params look like "{0}"
 281      *                within a message, but this might differ between implementations), or null if none.
 282      * @return the formatted message with all matching placeholders with their substituted values.
 283      */
 284     @Nonnull
 285     String formatMessage(@Nonnull String message, @Nonnull Object[] args);
 286
 287     /**
 288      * Formats the given message using supplied args to substitute placeholders.
 289      *
 290      * @param message The message following a predefined format.
 291      * @param args    Arguments that will be filled in for params within the message (params look like "{:key}"
 292      *                within a message, but this might differ between implementations), or null if none.
 293      * @return the formatted message with all matching placeholders with their substituted values.
 294      */
 295     @Nonnull
 296     String formatMessage(@Nonnull String message, @Nonnull Map<String, Object> args);
 297
 298     /**
 299      * Offers a view of this {@code MessageSource} as a {@code ResourceBundle}.
 300      *
 301      * @return a {@code ResourceBundle} containing the keys this {@code MessageSource}
 302      *         can resolve.
 303      */
 304     @Nonnull
 305     ResourceBundle asResourceBundle();
 306 }
 |