38277 TVT2.1- Description text not translated in code Generation option
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/CodeTemplates.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/CodeTemplates.java
index 652e8e5..7c43fc4 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/CodeTemplates.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/CodeTemplates.java
@@ -64,7 +64,7 @@
 	
 	private void create() {
 		try {
-			addFromStream(getDefaultsAsStream(), false);
+			addFromStream(getDefaultsAsStream(), false, true);
 			File templateFile= getTemplateFile();
 			if (templateFile.exists()) {
 				addFromFile(templateFile, false);
@@ -95,7 +95,7 @@
 	 */
 	public void restoreDefaults() throws CoreException {
 		clear();
-		addFromStream(getDefaultsAsStream(), false);
+		addFromStream(getDefaultsAsStream(), false, true);
 	}
 
 	/**
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/TemplateMessages.properties b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/TemplateMessages.properties
index 576811a..5cebd2d 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/TemplateMessages.properties
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/TemplateMessages.properties
@@ -145,3 +145,61 @@
 TemplateSet.error.missing.attribute=Missing required attribute
 
 CodeTemplates.error.title=Error accessing code templates.
+
+# strings in default templates (default-codetemplates.xml & default-templates.xml)
+CodeTemplates.constructorcomment=Comment for created constructors
+CodeTemplates.typecomment=Comment for created types
+CodeTemplates.nonoverridingcomment=Comment for non-overriding methods
+CodeTemplates.overridecomment=Comment for overriding methods
+CodeTemplates.newfile=Newly created files
+CodeTemplates.catchblock=Code in new catch blocks
+CodeTemplates.methodstub=Code in created method stubs
+CodeTemplates.constructorstub=Code in created constructor stubs
+
+CodeTemplates.typecomment.content1=To change the template for this generated type comment go to
+CodeTemplates.typecomment.content2=Window>Preferences>Java>Code Generation>Code and Comments
+
+CodeTemplates.overridecomment.nonjd=(non-Javadoc)
+
+CodeTemplates.newfile.content1=Created on ${date}
+CodeTemplates.newfile.content2=To change the template for this generated file go to
+CodeTemplates.newfile.content3=Window>Preferences>Java>Code Generation>Code and Comments
+
+CodeTemplates.catchblock.tododesc=Auto-generated catch block
+CodeTemplates.methodstub.tododesc=Auto-generated method stub
+CodeTemplates.constructorstub.tododesc=Auto-generated constructor stub
+
+Templates.for_array=iterate over array
+Templates.for_temp=iterate over array with temporary variable
+Templates.for_collection=iterate over collection
+Templates.while_enumeration=iterate with enumeration
+Templates.while_iterator=iterate with iterator
+Templates.do=do while statement
+Templates.switch=switch case statement
+Templates.if=if statement
+Templates.ifelse=if else statement
+Templates.elseif=else if block
+Templates.else=else block
+Templates.try=try catch block
+Templates.catch=catch block
+Templates.main=main method
+Templates.public_method=public method
+Templates.protected_method=protected method
+Templates.private_method=private method
+Templates.private_static_method=private static method
+Templates.instanceof=dynamic type test and cast
+Templates.cast=dynamic cast
+Templates.toarray=convert collection to array
+Templates.test=test method
+Templates.systrace=print current method to standard out
+Templates.sysout=print to standard out
+Templates.syserr=print to standard error
+Templates.code_tag=<code></code>
+Templates.code_tag_null=<code>null</code>
+Templates.pre_tag=<pre></pre>
+Templates.b_tag=<b></b>
+Templates.i_tag=<i></i>
+Templates.author=author name
+Templates.new=create new object
+Templates.lazy=lazy creation
+Templates.while_condition=while loop with condition
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/TemplateSet.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/TemplateSet.java
index 2cc61d9..142d926 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/TemplateSet.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/TemplateSet.java
@@ -27,10 +27,6 @@
 import org.apache.xml.serialize.OutputFormat;
 import org.apache.xml.serialize.Serializer;
 import org.apache.xml.serialize.SerializerFactory;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
@@ -40,6 +36,9 @@
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+
 import org.eclipse.jdt.internal.ui.IJavaStatusConstants;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.JavaUIException;
@@ -73,7 +72,7 @@
 
 		try {
 			stream= new FileInputStream(file);
-			addFromStream(stream, allowDuplicates);
+			addFromStream(stream, allowDuplicates, false);
 
 		} catch (IOException e) {
 			throwReadException(e);
@@ -94,7 +93,7 @@
 	/**
 	 * Reads templates from a XML stream and adds them to the templates
 	 */	
-	public void addFromStream(InputStream stream, boolean allowDuplicates) throws CoreException {
+	public void addFromStream(InputStream stream, boolean allowDuplicates, boolean doTranslations) throws CoreException {
 		try {
 			DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
 			DocumentBuilder parser= factory.newDocumentBuilder();		
@@ -128,6 +127,11 @@
 						buffer.append(value);
 				}
 				String pattern= buffer.toString().trim();
+				
+				if (doTranslations) {
+					pattern= translateString(pattern);
+					description= translateString(description);
+				}				
 
 				Template template= new Template(name, description, context, pattern);
 				
@@ -154,6 +158,26 @@
 		}
 	}
 	
+	private String translateString(String str) {
+		int idx= str.indexOf('%');
+		if (idx == -1) {
+			return str;
+		}
+		StringBuffer buf= new StringBuffer();
+		int k= 0;
+		while (idx != -1) {
+			buf.append(str.substring(k, idx));
+			for (k= idx + 1; k < str.length() && !Character.isWhitespace(str.charAt(k)); k++) {
+				// loop
+			}
+			String key= str.substring(idx + 1, k);
+			buf.append(TemplateMessages.getString(key));
+			idx= str.indexOf('%', k);
+		}
+		buf.append(str.substring(k));
+		return buf.toString();
+	}
+	
 	protected String validateTemplate(Template template) throws CoreException {
 		ContextType type= ContextTypeRegistry.getInstance().getContextType(template.getContextTypeName());
 		if (type == null) {
@@ -162,8 +186,6 @@
 		return type.validate(template.getPattern());
 	}
 	
-
-	
 	private String getAttributeValue(NamedNodeMap attributes, String name) {
 		Node node= attributes.getNamedItem(name);
 
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/Templates.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/Templates.java
index 8447308..3ba0dd9 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/Templates.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/Templates.java
@@ -51,7 +51,7 @@
 			if (templateFile.exists()) {
 				addFromFile(templateFile, true);
 			} else {
-				addFromStream(getDefaultsAsStream(), true);
+				addFromStream(getDefaultsAsStream(), true, true);
 				saveToFile(templateFile);
 			}
 
@@ -79,7 +79,7 @@
 	 */
 	public void restoreDefaults() throws CoreException {
 		clear();
-		addFromStream(getDefaultsAsStream(), true);
+		addFromStream(getDefaultsAsStream(), true, true);
 	}
 
 	/**
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/default-codetemplates.xml b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/default-codetemplates.xml
index c39b887..65825f2 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/default-codetemplates.xml
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/default-codetemplates.xml
@@ -1,33 +1,33 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <templates>
-<codetemplate name="constructorcomment" description="Comment for created constructors" context="constructorcomment_context" enabled="true">/**
+<codetemplate name="constructorcomment" description="%CodeTemplates.constructorcomment" context="constructorcomment_context" enabled="true">/**
  * ${tags}
  */</codetemplate>
- <codetemplate name="typecomment" description="Comment for created types" context="typecomment_context" enabled="true">/**
+ <codetemplate name="typecomment" description="%CodeTemplates.typecomment" context="typecomment_context" enabled="true">/**
  * @author ${user}
  *
- * To change the template for this generated type comment go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ * %CodeTemplates.typecomment.content1
+ * %CodeTemplates.typecomment.content2
  */</codetemplate>
- <codetemplate name="methodcomment" description="Comment for non-overriding methods" context="methodcomment_context" enabled="true">/**
+ <codetemplate name="methodcomment" description="%CodeTemplates.nonoverridingcomment" context="methodcomment_context" enabled="true">/**
  * ${tags}
  */</codetemplate>
-<codetemplate name="overridecomment" description="Comment for overriding methods" context="overridecomment_context" enabled="true">/* (non-Javadoc)
+<codetemplate name="overridecomment" description="%CodeTemplates.overridecomment" context="overridecomment_context" enabled="true">/* %CodeTemplates.overridecomment.nonjd
  * ${see_to_overridden}
  */</codetemplate>
- <codetemplate name="newtype" description="New classes and interfaces" context="newtype_context" enabled="true">/*
- * Created on ${date}
+ <codetemplate name="newtype" description="%CodeTemplates.newfile" context="newtype_context" enabled="true">/*
+ * %CodeTemplates.newfile.content1
  *
- * To change the template for this generated file go to
- * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ * %CodeTemplates.newfile.content2
+ * %CodeTemplates.newfile.content3
  */
 ${package_declaration}
 
 ${typecomment}
 ${type_declaration}</codetemplate>
-<codetemplate name="catchblock" description="Code in new catch blocks" context="catchblock_context" enabled="true">// ${todo} Auto-generated catch block
-${exception_var}.printStackTrace();</codetemplate><codetemplate name="methodbody" description="Code in created method stubs" context="methodbody_context" enabled="true">// ${todo} Auto-generated method stub
+<codetemplate name="catchblock" description="%CodeTemplates.catchblock" context="catchblock_context" enabled="true">// ${todo} %CodeTemplates.catchblock.tododesc
+${exception_var}.printStackTrace();</codetemplate><codetemplate name="methodbody" description="%CodeTemplates.methodstub" context="methodbody_context" enabled="true">// ${todo} %CodeTemplates.methodstub.tododesc
 ${body_statement}</codetemplate>
-<codetemplate name="constructorbody" description="Code in created constructor stubs" context="constructorbody_context" enabled="true">${body_statement}
-// ${todo} Auto-generated constructor stub</codetemplate>
+<codetemplate name="constructorbody" description="%CodeTemplates.constructorstub" context="constructorbody_context" enabled="true">${body_statement}
+// ${todo} %CodeTemplates.constructorstub.tododesc</codetemplate>
 </templates>
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/default-templates.xml b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/default-templates.xml
index 48fbdac..7064a25 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/default-templates.xml
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/default-templates.xml
@@ -5,67 +5,99 @@
 All Rights Reserved.
 -->
 
-<templates><template name="for" description="iterate over array" context="java" enabled="true">for (int ${index} = 0; ${index} &lt; ${array}.length; ${index}++) {
+<templates><template name="for" description="%Templates.for_array" context="java" enabled="true">for (int ${index} = 0; ${index} &lt; ${array}.length; ${index}++) {
 	${line_selection}${cursor}
-}</template><template name="for" description="iterate over array w/ temporary variable" context="java" enabled="true">for (int ${index} = 0; ${index} &lt; ${array}.length; ${index}++) {
+}</template>
+<template name="for" description="%Templates.for_temp" context="java" enabled="true">for (int ${index} = 0; ${index} &lt; ${array}.length; ${index}++) {
 	${array_type} ${array_element} = ${array}[${index}];
 	${cursor}
-}</template><template name="for" description="iterate over collection" context="java" enabled="true">for (Iterator ${iterator} = ${collection}.iterator(); ${iterator}.hasNext(); ) {
+}</template>
+<template name="for" description="%Templates.for_collection" context="java" enabled="true">for (Iterator ${iterator} = ${collection}.iterator(); ${iterator}.hasNext(); ) {
 	${type} ${element} = (${type}) ${iterator}.next();
 	${cursor}
-}</template><template name="while" description="iterate with enumeration" context="java" enabled="true">while (${enumeration}.hasMoreElements()) {
+}</template>
+<template name="while" description="%Templates.while_enumeration" context="java" enabled="true">while (${enumeration}.hasMoreElements()) {
 	${type} ${element} = (${type}) ${enumeration}.nextElement();
 	${cursor}
-}</template><template name="while" description="iterate with iterator" context="java" enabled="true">while (${iterator}.hasNext()) {
+}</template>
+<template name="while" description="%Templates.while_iterator" context="java" enabled="true">while (${iterator}.hasNext()) {
 	${type} ${element} = (${type}) ${iterator}.next();
 	${cursor}
-}</template><template name="do" description="do while statement" context="java" enabled="true">do {
+}</template>
+<template name="do" description="%Templates.do" context="java" enabled="true">do {
 	${line_selection}${cursor}
-} while (${condition});</template><template name="switch" description="switch case statement" context="java" enabled="true">switch (${key}) {
+} while (${condition});</template>
+<template name="switch" description="%Templates.switch" context="java" enabled="true">switch (${key}) {
 	case ${value}:
 		${cursor}
 		break;
 
 	default:
 		break;
-}</template><template name="if" description="if statement" context="java" enabled="true">if (${condition}) {
+}</template>
+<template name="if" description="%Templates.if" context="java" enabled="true">if (${condition}) {
 	${line_selection}${cursor}
-}</template><template name="ifelse" description="if else statement" context="java" enabled="true">if (${condition}) {
+}</template>
+<template name="ifelse" description="%Templates.ifelse" context="java" enabled="true">if (${condition}) {
 	${cursor}
 } else {
 	
-}</template><template name="elseif" description="else if block" context="java" enabled="true">else if (${condition}) {
+}</template>
+<template name="elseif" description="%Templates.elseif" context="java" enabled="true">else if (${condition}) {
 	${cursor}
-}</template><template name="else" description="else block" context="java" enabled="true">else {
+}</template>
+<template name="else" description="%Templates.else" context="java" enabled="true">else {
 	${cursor}
-}</template><template name="try" description="try catch block" context="java" enabled="true">try {
+}</template>
+<template name="try" description="%Templates.try" context="java" enabled="true">try {
 	${line_selection}${cursor}
 } catch (${Exception} e) {
 	// ${todo}: handle exception
-}</template><template name="catch" description="catch block" context="java" enabled="true">catch (${Exception} e) {
+}</template>
+<template name="catch" description="%Templates.catch" context="java" enabled="true">catch (${Exception} e) {
 	${cursor}// ${todo}: handle exception
-}</template><template name="main" description="main method" context="java" enabled="true">public static void main(String[] args) {
+}</template>
+<template name="main" description="%Templates.main" context="java" enabled="true">public static void main(String[] args) {
 	${cursor}
-}</template><template name="public_method" description="public method" context="java" enabled="true">public ${return_type} ${name}(${arguments}) {
+}</template>
+<template name="public_method" description="%Templates.public_method" context="java" enabled="true">public ${return_type} ${name}(${arguments}) {
 	${cursor}
-}</template><template name="protected_method" description="protected method" context="java" enabled="true">protected ${return_type} ${name}(${arguments}) {
+}</template>
+<template name="protected_method" description="%Templates.protected_method" context="java" enabled="true">protected ${return_type} ${name}(${arguments}) {
 	${cursor}
-}</template><template name="private_method" description="private method" context="java" enabled="true">private ${return_type} ${name}(${arguments}) {
+}</template>
+<template name="private_method" description="%Templates.private_method" context="java" enabled="true">private ${return_type} ${name}(${arguments}) {
 	${cursor}
-}</template><template name="private_static_method" description="private static method" context="java" enabled="true">private static ${return_type} ${name}(${arguments}) {
+}</template>
+<template name="private_static_method" description="%Templates.private_static_method" context="java" enabled="true">private static ${return_type} ${name}(${arguments}) {
 	${cursor}
-}</template><template name="instanceof" description="dynamic type test and cast" context="java" enabled="true">if (${name} instanceof ${type}) {
+}</template>
+<template name="instanceof" description="%Templates.instanceof" context="java" enabled="true">if (${name} instanceof ${type}) {
 	${type} ${new_name} = (${type})${name};
 	${cursor}
-}</template><template name="cast" description="dynamic cast" context="java" enabled="true">${type} ${new_name} = (${type}) ${name};</template><template name="new" description="create new object" context="java" enabled="true">${type} ${name} = new ${type}(${arguments});</template><template name="lazy" description="lazy creation" context="java" enabled="true">if (${name} == null) {
+}</template>
+<template name="cast" description="%Templates.cast" context="java" enabled="true">${type} ${new_name} = (${type}) ${name};</template>
+<template name="new" description="%Templates.new" context="java" enabled="true">${type} ${name} = new ${type}(${arguments});</template>
+<template name="lazy" description="%Templates.lazy" context="java" enabled="true">if (${name} == null) {
 	${name} = new ${type}(${arguments});
 	${cursor}
 }
 
-return ${name};</template><template name="toarray" description="convert collection to array" context="java" enabled="true">(${type}[]) ${collection}.toArray(new ${type}[${collection}.size()]);</template><template name="sysout" description="print to standard out" context="java" enabled="true">System.out.println(${word_selection}${cursor});</template><template name="syserr" description="print to standard error" context="java" enabled="true">System.err.println(${word_selection}${cursor});</template><template name="&lt;code&gt;" description="&lt;code&gt;&lt;/code&gt;" context="javadoc" enabled="true">&lt;code&gt;${word_selection}${cursor}&lt;/code&gt;</template><template name="&lt;code&gt;" description="&lt;code&gt;null&lt;/code&gt;" context="javadoc" enabled="true">&lt;code&gt;null&lt;/code&gt;</template><template name="&lt;pre&gt;" description="&lt;pre&gt;&lt;/pre&gt;" context="javadoc" enabled="true">&lt;pre&gt;${word_selection}${cursor}&lt;/pre&gt;</template><template name="&lt;b&gt;" description="&lt;b&gt;&lt;/b&gt;" context="javadoc" enabled="true">&lt;b&gt;${word_selection}${cursor}&lt;/b&gt;</template><template name="&lt;i&gt;" description="&lt;i&gt;&lt;/i&gt;" context="javadoc" enabled="true">&lt;i&gt;${word_selection}${cursor}&lt;/i&gt;</template><template name="@author" description="author name" context="javadoc" enabled="true">@author ${user}</template><template name="while" description="while loop with condition" context="java" enabled="true">while (${condition}) {
+return ${name};</template>
+<template name="toarray" description="%Templates.toarray" context="java" enabled="true">(${type}[]) ${collection}.toArray(new ${type}[${collection}.size()]);</template>
+<template name="sysout" description="%Templates.sysout" context="java" enabled="true">System.out.println(${word_selection}${cursor});</template>
+<template name="syserr" description="%Templates.syserr" context="java" enabled="true">System.err.println(${word_selection}${cursor});</template>
+<template name="&lt;code&gt;" description="%Templates.code_tag" context="javadoc" enabled="true">&lt;code&gt;${word_selection}${cursor}&lt;/code&gt;</template>
+<template name="&lt;code&gt;" description="%Templates.code_tag_null" context="javadoc" enabled="true">&lt;code&gt;null&lt;/code&gt;</template>
+<template name="&lt;pre&gt;" description="%Templates.pre_tag" context="javadoc" enabled="true">&lt;pre&gt;${word_selection}${cursor}&lt;/pre&gt;</template>
+<template name="&lt;b&gt;" description="%Templates.b_tag" context="javadoc" enabled="true">&lt;b&gt;${word_selection}${cursor}&lt;/b&gt;</template>
+<template name="&lt;i&gt;" description="%Templates.i_tag" context="javadoc" enabled="true">&lt;i&gt;${word_selection}${cursor}&lt;/i&gt;</template>
+<template name="@author" description="%Templates.author" context="javadoc" enabled="true">@author ${user}</template>
+<template name="while" description="%Templates.while_condition" context="java" enabled="true">while (${condition}) {
 	${line_selection}${cursor}
-}</template><template name="test" description="test method" context="java" enabled="true">public void test${name}() {
+}</template>
+<template name="test" description="%Templates.test" context="java" enabled="true">public void test${name}() {
 	${cursor} 
 }</template>
-<template name="systrace" description="print current method to standard out" context="java" enabled="true">System.out.println(&quot;${enclosing_type}.${enclosing_method}()&quot;);</template>
+<template name="systrace" description="%Templates.systrace" context="java" enabled="true">System.out.println(&quot;${enclosing_type}.${enclosing_method}()&quot;);</template>
 </templates>
\ No newline at end of file