add javadoc
[jSite.git] / src / de / todesbaum / jsite / i18n / I18n.java
1 /*
2  * jSite - a tool for uploading websites into Freenet
3  * Copyright (C) 2006 David Roden
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18  */
19
20 package de.todesbaum.jsite.i18n;
21
22 import java.util.Locale;
23 import java.util.MissingResourceException;
24 import java.util.ResourceBundle;
25
26 /**
27  * Maps i18n keys to translated texts, depending on a current locale.
28  * 
29  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
30  */
31 public class I18n {
32
33         /** The default locale, English. */
34         private static Locale defaultLocale = new Locale("en");
35
36         /** The current locale. */
37         private static Locale currentLocale;
38
39         /**
40          * Returns the currently set locale.
41          * 
42          * @return The current locale
43          */
44         public static Locale getLocale() {
45                 if (currentLocale == null) {
46                         currentLocale = Locale.getDefault();
47                 }
48                 return currentLocale;
49         }
50
51         /**
52          * Sets the current locale.
53          * 
54          * @param locale
55          *            The new current locale
56          */
57         public static void setLocale(Locale locale) {
58                 currentLocale = locale;
59                 Locale.setDefault(locale);
60         }
61
62         /**
63          * Returns the resource bundle for the current locale.
64          * 
65          * @return The resource bundle for the current locale
66          */
67         public static ResourceBundle getResourceBundle() {
68                 return getResourceBundle(getLocale());
69         }
70
71         /**
72          * Returns the resource bundle for the given locale.
73          * 
74          * @param locale
75          *            The locale to get the resource bundle for
76          * @return The resource bundle for the given locale
77          */
78         public static ResourceBundle getResourceBundle(Locale locale) {
79                 return ResourceBundle.getBundle("de.todesbaum.jsite.i18n.jSite", locale);
80         }
81
82         /**
83          * Retrieves a translated text for the given i18n key. If the resource
84          * bundle for the current locale does not have a translation for the given
85          * key, the default locale is tried. If that fails, the key is returned.
86          * 
87          * @param key
88          *            The key to get the translation for
89          * @return The translated value, or the key itself if not translation can be
90          *         found
91          */
92         public static String getMessage(String key) {
93                 try {
94                         return getResourceBundle().getString(key);
95                 } catch (MissingResourceException mre1) {
96                         try {
97                                 return getResourceBundle(defaultLocale).getString(key);
98                         } catch (MissingResourceException mre2) {
99                                 return key;
100                         }
101                 }
102         }
103
104 }