From 617a0214f132f34b8c71f686e5d73c67ff5efd21 Mon Sep 17 00:00:00 2001 From: Vincent Siveton Date: Tue, 19 Feb 2008 11:48:48 +0000 Subject: [PATCH] MPLUGIN-75: Internationalize PluginXdocGenerator o added i18n support git-svn-id: https://svn.apache.org/repos/asf/maven/plugin-tools/trunk@629078 13f79535-47bb-0310-9956-ffa450edef68 --- .../maven/plugin/plugin/PluginReport.java | 6 +- .../plugin/generator/PluginXdocGenerator.java | 125 ++++++++++++------ .../src/main/resources/pluginxdoc.properties | 50 +++++++ .../main/resources/pluginxdoc_en.properties | 23 ++++ .../main/resources/pluginxdoc_fr.properties | 50 +++++++ 5 files changed, 214 insertions(+), 40 deletions(-) create mode 100644 maven-plugin-tools-api/src/main/resources/pluginxdoc.properties create mode 100644 maven-plugin-tools-api/src/main/resources/pluginxdoc_en.properties create mode 100644 maven-plugin-tools-api/src/main/resources/pluginxdoc_fr.properties diff --git a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java index bbfc30e..f2720e4 100644 --- a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java +++ b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java @@ -155,7 +155,7 @@ public class PluginReport mojoScanner.populatePluginDescriptor( project, pluginDescriptor ); // Generate the plugin's documentation - generatePluginDocumentation( pluginDescriptor ); + generatePluginDocumentation( pluginDescriptor, locale ); // Write the overview PluginOverviewRenderer r = new PluginOverviewRenderer( project, requirements, getSink(), pluginDescriptor, @@ -192,7 +192,7 @@ public class PluginReport return "plugin-info"; } - private void generatePluginDocumentation( PluginDescriptor pluginDescriptor ) + private void generatePluginDocumentation( PluginDescriptor pluginDescriptor, Locale locale ) throws MavenReportException { try @@ -200,7 +200,7 @@ public class PluginReport File outputDir = new File( getOutputDirectory() ); outputDir.mkdirs(); - PluginXdocGenerator generator = new PluginXdocGenerator(); + PluginXdocGenerator generator = new PluginXdocGenerator( locale ); generator.execute( outputDir, pluginDescriptor ); } catch ( IOException e ) diff --git a/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java index bc3cac8..75d0098 100644 --- a/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java +++ b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/generator/PluginXdocGenerator.java @@ -25,6 +25,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Locale; +import java.util.ResourceBundle; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -45,6 +47,31 @@ import org.w3c.tidy.Tidy; public class PluginXdocGenerator implements Generator { + private final Locale locale; + + /** + * Default constructor using Locale.ENGLISH as locale. + */ + public PluginXdocGenerator() + { + this.locale = Locale.ENGLISH; + } + + /** + * @param locale not null wanted locale. + */ + public PluginXdocGenerator( Locale locale ) + { + if ( locale == null ) + { + this.locale = Locale.ENGLISH; + } + else + { + this.locale = locale; + } + } + /** {@inheritDoc} */ public void execute( File destinationDirectory, PluginDescriptor pluginDescriptor ) throws IOException @@ -111,14 +138,26 @@ public class PluginXdocGenerator w.addAttribute( "name", mojoDescriptor.getFullGoalName() ); w.startElement( "p" ); + w.writeMarkup( ""+ getBundle( locale ).getString( "pluginxdoc.fullname" ) + ":" ); + w.endElement(); //p + w.startElement( "p" ); + w.writeMarkup( mojoDescriptor.getPluginDescriptor().getGroupId() + ":" + + mojoDescriptor.getPluginDescriptor().getArtifactId() + ":" + + mojoDescriptor.getPluginDescriptor().getVersion() + ":" + mojoDescriptor.getFullGoalName() ); + w.endElement(); //p + w.startElement( "p" ); + w.writeMarkup( ""+ getBundle( locale ).getString( "pluginxdoc.description" ) + ":" ); + w.endElement(); //p + + w.startElement( "p" ); if ( mojoDescriptor.getDescription() != null ) { w.writeMarkup( makeHtmlValid( mojoDescriptor.getDescription() ) ); } else { - w.writeText( "No description." ); + w.writeText( getBundle( locale ).getString( "pluginxdoc.nodescription" ) ); } w.endElement(); // p @@ -137,36 +176,37 @@ public class PluginXdocGenerator private void writeGoalAttributes( MojoDescriptor mojoDescriptor, XMLWriter w ) { w.startElement( "p" ); - w.writeMarkup( "Mojo Attributes:" ); + w.writeMarkup( ""+ getBundle( locale ).getString( "pluginxdoc.mojodescriptor.attributes" ) + ":" ); w.endElement(); //p + w.startElement( "ul" ); String value = mojoDescriptor.getDeprecated(); if ( StringUtils.isNotEmpty( value ) ) { w.startElement( "li" ); - w.writeMarkup( "This plugin goal has been deprecated: " + value + "" ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.deprecated" ) + ": " + value + "." ); w.endElement(); //li } if ( mojoDescriptor.isProjectRequired() ) { w.startElement( "li" ); - w.writeMarkup( "Requires a Maven 2.0 project to execute." ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.projectRequired" ) ); w.endElement(); //li } if ( mojoDescriptor.isAggregator() ) { w.startElement( "li" ); - w.writeMarkup( "Executes as an aggregator plugin." ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.aggregator" ) ); w.endElement(); //li } if ( mojoDescriptor.isDirectInvocationOnly() ) { w.startElement( "li" ); - w.writeMarkup( "Executes by direct invocation only." ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.directInvocationOnly" ) ); w.endElement(); //li } @@ -174,7 +214,7 @@ public class PluginXdocGenerator if ( StringUtils.isNotEmpty( value ) ) { w.startElement( "li" ); - w.writeMarkup( "Requires dependency resolution of artifacts in scope: " + value + "" ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.dependencyResolutionRequired" ) + ": " + value + "." ); w.endElement(); //li } @@ -182,7 +222,7 @@ public class PluginXdocGenerator if ( StringUtils.isNotEmpty( value ) ) { w.startElement( "li" ); - w.writeMarkup( "Since version: " + value + "" ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.since" ) + ": " + value + "." ); w.endElement(); //li } @@ -190,7 +230,7 @@ public class PluginXdocGenerator if ( StringUtils.isNotEmpty( value ) ) { w.startElement( "li" ); - w.writeMarkup( "Automatically executes within the lifecycle phase: " + value + "" ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.phase" ) + ": " + value + "." ); w.endElement(); //li } @@ -198,8 +238,8 @@ public class PluginXdocGenerator if ( StringUtils.isNotEmpty( value ) ) { w.startElement( "li" ); - w.writeMarkup( "Invokes the execution of the lifecycle phase " + value - + " prior to executing itself." ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.executePhase1" ) + " " + value + + "" + getBundle( locale ).getString( "pluginxdoc.mojodescriptor.executePhase2" ) + "." ); w.endElement(); //li } @@ -207,8 +247,8 @@ public class PluginXdocGenerator if ( StringUtils.isNotEmpty( value ) ) { w.startElement( "li" ); - w.writeMarkup( "Invokes the execution of this plugin's goal " + value - + " prior to executing itself." ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.executeGoal1" ) + " " + value + + " " + getBundle( locale ).getString( "pluginxdoc.mojodescriptor.executeGoal2" ) + "." ); w.endElement(); //li } @@ -216,21 +256,21 @@ public class PluginXdocGenerator if ( StringUtils.isNotEmpty( value ) ) { w.startElement( "li" ); - w.writeMarkup( "Executes in its own lifecycle: " + value + "" ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.executeLifecycle" ) + ": " + value + "." ); w.endElement(); //li } if ( mojoDescriptor.isOnlineRequired() ) { w.startElement( "li" ); - w.writeMarkup( "Requires that mvn runs in online mode." ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.onlineRequired" ) ); w.endElement(); //li } if ( !mojoDescriptor.isInheritedByDefault() ) { w.startElement( "li" ); - w.writeMarkup( "Is NOT inherited by default in multi-project builds." ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.inheritedByDefault" ) ); w.endElement(); //li } @@ -280,20 +320,20 @@ public class PluginXdocGenerator private void writeParameterDetails( MojoDescriptor mojoDescriptor, List parameterList, XMLWriter w ) { w.startElement( "subsection" ); - w.addAttribute( "name", "Parameter Details" ); + w.addAttribute( "name", getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.details" ) ); for ( Iterator parameters = parameterList.iterator(); parameters.hasNext(); ) { Parameter parameter = (Parameter) parameters.next(); w.startElement( "p" ); - w.writeMarkup( "" + parameter.getName() + "" ); + w.writeMarkup( "" + parameter.getName() + ":" ); w.endElement(); //p String description = parameter.getDescription(); if ( StringUtils.isEmpty( description ) ) { - description = "No Description."; + description = getBundle( locale ).getString( "pluginxdoc.nodescription" ); } else { @@ -305,34 +345,34 @@ public class PluginXdocGenerator w.startElement( "ul" ); - writeDetail( "Deprecated", parameter.getDeprecated(), w ); + writeDetail( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.deprecated" ), parameter.getDeprecated(), w ); - writeDetail( "Type", parameter.getType(), w ); + writeDetail( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.type" ), parameter.getType(), w ); if ( StringUtils.isNotEmpty( parameter.getSince() ) ) { - writeDetail( "Since", parameter.getSince(), w ); + writeDetail( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.since" ), parameter.getSince(), w ); } else { if ( StringUtils.isNotEmpty( mojoDescriptor.getSince() ) ) { - writeDetail( "Since", mojoDescriptor.getSince(), w ); + writeDetail( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.since" ), mojoDescriptor.getSince(), w ); } } if ( parameter.isRequired() ) { - writeDetail( "Required", "Yes", w ); + writeDetail( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.required" ), getBundle( locale ).getString( "pluginxdoc.yes" ), w ); } else { - writeDetail( "Required", "No", w ); + writeDetail( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.required" ), getBundle( locale ).getString( "pluginxdoc.no" ), w ); } - writeDetail( "Expression", parameter.getExpression(), w ); + writeDetail( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.expression" ), parameter.getExpression(), w ); - writeDetail( "Default", parameter.getDefaultValue(), w ); + writeDetail( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.default" ), parameter.getDefaultValue(), w ); w.endElement();//ul @@ -362,13 +402,13 @@ public class PluginXdocGenerator List requiredParams = getParametersByRequired( true, parameterList ); if ( requiredParams.size() > 0 ) { - writeParameterList( mojoDescriptor, "Required Parameters", requiredParams, w ); + writeParameterList( mojoDescriptor, getBundle( locale ).getString( "pluginxdoc.mojodescriptor.requiredParameters" ), requiredParams, w ); } List optionalParams = getParametersByRequired( false, parameterList ); if ( optionalParams.size() > 0 ) { - writeParameterList( mojoDescriptor, "Optional Parameters", optionalParams, w ); + writeParameterList( mojoDescriptor, getBundle( locale ).getString( "pluginxdoc.mojodescriptor.optionalParameters" ), optionalParams, w ); } } @@ -381,16 +421,16 @@ public class PluginXdocGenerator w.startElement( "tr" ); w.startElement( "th" ); - w.writeText( "Name" ); + w.writeText( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.name" ) ); w.endElement();//th w.startElement( "th" ); - w.writeText( "Type" ); + w.writeText( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.type" ) ); w.endElement();//th w.startElement( "th" ); - w.writeText( "Since" ); + w.writeText( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.since" ) ); w.endElement();//th w.startElement( "th" ); - w.writeText( "Description" ); + w.writeText( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.description" ) ); w.endElement();//th w.endElement();//tr @@ -427,7 +467,7 @@ public class PluginXdocGenerator String description = parameter.getDescription(); if ( StringUtils.isEmpty( description ) ) { - description = "No description."; + description = getBundle( locale ).getString( "pluginxdoc.nodescription" ); } else { @@ -435,13 +475,13 @@ public class PluginXdocGenerator } if ( StringUtils.isNotEmpty( parameter.getDeprecated() ) ) { - description = "Deprecated. " + description; + description = "" + getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.deprecated" ) + ". " + description; } - w.writeMarkup( description ); + w.writeMarkup( description + " " ); if ( StringUtils.isNotEmpty( parameter.getDefaultValue() ) ) { - w.writeMarkup( " Default value is " ); + w.writeMarkup( getBundle( locale ).getString( "pluginxdoc.mojodescriptor.parameter.defaultValue" ) + ": " ); w.writeText( parameter.getDefaultValue() ); w.writeMarkup( "." ); } @@ -617,4 +657,15 @@ public class PluginXdocGenerator } return sb.toString(); } + + /** + * Gets the resource bundle for the specified locale. + * + * @param locale The locale of the currently generated report. + * @return The resource bundle for the requested locale. + */ + private ResourceBundle getBundle( Locale locale ) + { + return ResourceBundle.getBundle( "pluginxdoc", locale, getClass().getClassLoader() ); + } } diff --git a/maven-plugin-tools-api/src/main/resources/pluginxdoc.properties b/maven-plugin-tools-api/src/main/resources/pluginxdoc.properties new file mode 100644 index 0000000..3ee3d5d --- /dev/null +++ b/maven-plugin-tools-api/src/main/resources/pluginxdoc.properties @@ -0,0 +1,50 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You 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. See the License for the +# specific language governing permissions and limitations +# under the License. + +pluginxdoc.yes=Yes +pluginxdoc.no=No + +pluginxdoc.description=Description +pluginxdoc.nodescription=None. +pluginxdoc.fullname=Full name +pluginxdoc.mojodescriptor.attributes=Attributes +pluginxdoc.mojodescriptor.deprecated=This plugin goal has been deprecated +pluginxdoc.mojodescriptor.projectRequired=Requires a Maven 2.0 project to be executed. +pluginxdoc.mojodescriptor.aggregator=Executes as an aggregator plugin. +pluginxdoc.mojodescriptor.directInvocationOnly=Executes by direct invocation only. +pluginxdoc.mojodescriptor.dependencyResolutionRequired=Requires dependency resolution of artifacts in scope +pluginxdoc.mojodescriptor.since=Since version +pluginxdoc.mojodescriptor.phase=Automatically executes within the lifecycle phase +pluginxdoc.mojodescriptor.executePhase1=Invokes the execution of the lifecycle phase +pluginxdoc.mojodescriptor.executePhase2=prior to executing itself. +pluginxdoc.mojodescriptor.executeGoal1=Invokes the execution of this plugin's goal +pluginxdoc.mojodescriptor.executeGoal2=prior to executing itself. +pluginxdoc.mojodescriptor.executeLifecycle=Executes in its own lifecycle +pluginxdoc.mojodescriptor.onlineRequired=Requires that Maven runs in online mode. +pluginxdoc.mojodescriptor.inheritedByDefault=Is NOT inherited by default in multi-project builds. +pluginxdoc.mojodescriptor.parameter.details=Parameter Details +pluginxdoc.mojodescriptor.parameter.deprecated=Deprecated +pluginxdoc.mojodescriptor.parameter.name=Name +pluginxdoc.mojodescriptor.parameter.description=Description +pluginxdoc.mojodescriptor.parameter.type=Type +pluginxdoc.mojodescriptor.parameter.since=Since +pluginxdoc.mojodescriptor.parameter.required=Required +pluginxdoc.mojodescriptor.parameter.expression=Expression +pluginxdoc.mojodescriptor.parameter.default=Default +pluginxdoc.mojodescriptor.parameter.defaultValue=Default value is +pluginxdoc.mojodescriptor.requiredParameters=Required Parameters +pluginxdoc.mojodescriptor.optionalParameters=Optional Parameters diff --git a/maven-plugin-tools-api/src/main/resources/pluginxdoc_en.properties b/maven-plugin-tools-api/src/main/resources/pluginxdoc_en.properties new file mode 100644 index 0000000..96cf407 --- /dev/null +++ b/maven-plugin-tools-api/src/main/resources/pluginxdoc_en.properties @@ -0,0 +1,23 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You 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. See the License for the +# specific language governing permissions and limitations +# under the License. + +# NOTE: +# This bundle is intentionally empty because English strings are provided by the base bundle via the parent chain. It +# must be provided nevertheless such that a request for locale "en" will not errorneously pick up the bundle for the +# JVM's default locale (which need not be "en"). See the method javadoc about +# ResourceBundle.getBundle(String, Locale, ClassLoader) +# for a full description of the lookup strategy. diff --git a/maven-plugin-tools-api/src/main/resources/pluginxdoc_fr.properties b/maven-plugin-tools-api/src/main/resources/pluginxdoc_fr.properties new file mode 100644 index 0000000..01823cf --- /dev/null +++ b/maven-plugin-tools-api/src/main/resources/pluginxdoc_fr.properties @@ -0,0 +1,50 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You 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. See the License for the +# specific language governing permissions and limitations +# under the License. + +pluginxdoc.yes=Oui +pluginxdoc.no=Non + +pluginxdoc.description=Description +pluginxdoc.nodescription=Aucune. +pluginxdoc.fullname=Nom complet +pluginxdoc.mojodescriptor.attributes=Attributs +pluginxdoc.mojodescriptor.deprecated=Le goal de ce plugin goal est obsol\u00e8te +pluginxdoc.mojodescriptor.projectRequired=Exige un projet Maven 2.0 pour \u00eatre ex\u00e9cut\u00e9. +pluginxdoc.mojodescriptor.aggregator=S'ex\u00e9cute comme un plugin agr\u00e9g\u00e9. +pluginxdoc.mojodescriptor.directInvocationOnly=S'ex\u00e9cute par l'invocation directe seulement. +pluginxdoc.mojodescriptor.dependencyResolutionRequired=Exige une r\u00e9solution de d\u00e9pendances des artefacts dans le scope +pluginxdoc.mojodescriptor.since=Depuis la version +pluginxdoc.mojodescriptor.phase=S'ex\u00e9cute automatiquement dans la phase du cycle de vie +pluginxdoc.mojodescriptor.executePhase1=Appelle l'ex\u00e9cution de la phase du cycle de vie +pluginxdoc.mojodescriptor.executePhase2=avant de s'ex\u00e9cuter. +pluginxdoc.mojodescriptor.executeGoal1=Appelle l'ex\u00e9cution du goal de ce plugin +pluginxdoc.mojodescriptor.executeGoal2=avant de s'ex\u00e9cuter. +pluginxdoc.mojodescriptor.executeLifecycle=S'ex\u00e9cute dans son propre cycle de vie +pluginxdoc.mojodescriptor.onlineRequired=Exige que Maven s'ex\u00e9cute en ligne. +pluginxdoc.mojodescriptor.inheritedByDefault=N'est PAS h\u00e9rit\u00e9 par d\u00e9faut dans une construction multi-projet. +pluginxdoc.mojodescriptor.parameter.details=D\u00e9tails des param\u00e8tres +pluginxdoc.mojodescriptor.parameter.deprecated=Obsol\u00e8te +pluginxdoc.mojodescriptor.parameter.name=Nom +pluginxdoc.mojodescriptor.parameter.description=Description +pluginxdoc.mojodescriptor.parameter.type=Type +pluginxdoc.mojodescriptor.parameter.since=Depuis +pluginxdoc.mojodescriptor.parameter.required=Exig\u00e9 +pluginxdoc.mojodescriptor.parameter.expression=Expression +pluginxdoc.mojodescriptor.parameter.default=D\u00e9faut +pluginxdoc.mojodescriptor.parameter.defaultValue=Valeur par d\u00e9faut est +pluginxdoc.mojodescriptor.requiredParameters=Param\u00e8tres requis +pluginxdoc.mojodescriptor.optionalParameters=Param\u00e8tres optionnels