improve i18n support

This commit is contained in:
Sebastian Sdorra
2011-05-14 16:27:20 +02:00
parent 8fc95a5689
commit 8e9da8f448
5 changed files with 100 additions and 23 deletions

View File

@@ -139,9 +139,11 @@ public class App
System.exit(1); System.exit(1);
} }
I18n i18n = new I18n();
if ((args.length == 0) || (subcommand == null) || help) if ((args.length == 0) || (subcommand == null) || help)
{ {
parser.printUsage(output, I18n.getBundle()); parser.printUsage(output, i18n.getBundle());
} }
else else
{ {
@@ -152,7 +154,7 @@ public class App
session = createSession(); session = createSession();
} }
subcommand.init(input, output, session); subcommand.init(input, output, i18n, session);
subcommand.run(arguments); subcommand.run(arguments);
} }
} }

View File

@@ -47,7 +47,7 @@ import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
public @interface Command public @interface Command
{ {
String value() default ""; String value() default "";
String usage() default ""; String usage() default "";
boolean sessionRequired() default true; boolean sessionRequired() default true;
} }

View File

@@ -1,10 +1,10 @@
/** /**
* Copyright (c) 2010, Sebastian Sdorra * Copyright (c) 2010, Sebastian Sdorra
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* *
* 1. Redistributions of source code must retain the above copyright notice, * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. * this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice, * 2. Redistributions in binary form must reproduce the above copyright notice,
@@ -13,7 +13,7 @@
* 3. Neither the name of SCM-Manager; nor the names of its * 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this * contributors may be used to endorse or promote products derived from this
* software without specific prior written permission. * software without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -24,12 +24,23 @@
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* http://bitbucket.org/sdorra/scm-manager * http://bitbucket.org/sdorra/scm-manager
* *
*/ */
package sonia.scm.cli; package sonia.scm.cli;
//~--- non-JDK imports --------------------------------------------------------
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//~--- JDK imports ------------------------------------------------------------
import java.util.MissingResourceException;
import java.util.ResourceBundle; import java.util.ResourceBundle;
/** /**
@@ -38,9 +49,63 @@ import java.util.ResourceBundle;
*/ */
public class I18n public class I18n
{ {
public static ResourceBundle getBundle(){ /** Field description */
return null; public static final String RESOURCE_BUNDLE = "sonia.resources.i18n";
};
/** the logger for I18n */
private static final Logger logger = LoggerFactory.getLogger(I18n.class);
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
*/
public I18n()
{
bundle = ResourceBundle.getBundle(RESOURCE_BUNDLE);
}
//~--- get methods ----------------------------------------------------------
/**
* Method description
*
*
* @return
*/
public ResourceBundle getBundle()
{
return bundle;
}
/**
* Method description
*
*
* @param key
*
* @return
*/
public String getMessage(String key)
{
String value = key;
try
{
key = bundle.getString(key);
}
catch (MissingResourceException ex)
{
logger.warn("could not find resource for key {}", key);
}
return value;
}
//~--- fields ---------------------------------------------------------------
/** Field description */
private ResourceBundle bundle;
} }

View File

@@ -76,13 +76,15 @@ public abstract class SubCommand
* *
* @param input * @param input
* @param output * @param output
* @param i18n
* @param session * @param session
*/ */
public void init(BufferedReader input, PrintWriter output, public void init(BufferedReader input, PrintWriter output, I18n i18n,
ScmClientSession session) ScmClientSession session)
{ {
this.input = input; this.input = input;
this.output = output; this.output = output;
this.i18n = i18n;
this.session = session; this.session = session;
} }
@@ -102,7 +104,7 @@ public abstract class SubCommand
if (help) if (help)
{ {
parser.printUsage(output, I18n.getBundle()); parser.printUsage(output, i18n.getBundle());
System.exit(1); System.exit(1);
} }
else else
@@ -168,6 +170,9 @@ public abstract class SubCommand
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */
protected I18n i18n;
/** Field description */ /** Field description */
protected BufferedReader input; protected BufferedReader input;

View File

@@ -95,7 +95,8 @@ public class SubCommandHandler extends OptionHandler<SubCommand>
* Method description * Method description
* *
* *
* @param prmtrs *
* @param parameters
* *
* @return * @return
* *
@@ -106,15 +107,19 @@ public class SubCommandHandler extends OptionHandler<SubCommand>
{ {
String name = parameters.getParameter(0); String name = parameters.getParameter(0);
CommandDescriptor desc = subCommands.get(name); CommandDescriptor desc = subCommands.get(name);
if ( desc != null )
if (desc != null)
{ {
// owner.stopOptionParsing(); // owner.stopOptionParsing();
setter.addValue( desc.createSubCommand() ); setter.addValue(desc.createSubCommand());
}
else
{
throw new CmdLineException(owner, "command ".concat(name).concat(" not found"));
} }
else
{
throw new CmdLineException(owner,
"command ".concat(name).concat(" not found"));
}
return 1; return 1;
} }