[freenet-cvs] r12517 - in trunk: freenet/src/freenet/l10n plugins plugins/TranslationHelper

nextgens at freenetproject.org nextgens at freenetproject.org
Sun Apr 1 19:39:00 UTC 2007


Author: nextgens
Date: 2007-04-01 19:39:00 +0000 (Sun, 01 Apr 2007)
New Revision: 12517

Added:
   trunk/plugins/TranslationHelper/
   trunk/plugins/TranslationHelper/TranslationHelper.java
Modified:
   trunk/freenet/src/freenet/l10n/L10n.java
Log:
new plugin : TranslationHelper... it provides only basic stuffs... and ought to be improved (the CSS hasn't been touched and I'm not a XHTML expert ;))

see http://archives.freenetproject.org/message/20070401.001318.cbb0ddd3.en.html

Modified: trunk/freenet/src/freenet/l10n/L10n.java
===================================================================
--- trunk/freenet/src/freenet/l10n/L10n.java	2007-04-01 19:15:52 UTC (rev 12516)
+++ trunk/freenet/src/freenet/l10n/L10n.java	2007-04-01 19:39:00 UTC (rev 12517)
@@ -4,6 +4,7 @@
 package freenet.l10n;
 
 import java.io.InputStream;
+import java.util.Enumeration;
 import java.util.MissingResourceException;
 import java.util.Properties;
 
@@ -69,11 +70,19 @@
 	 */
 	public static String getString(String key) {
 		String result = currentProperties.getProperty(key);
-		if(result != null) return result;
-		
+		if(result != null) 
+			return result;
+		else
+			return getDefaultString(key);
+	}
+	
+	public static String getDefaultString(String key) {
+		String result = null;
 		// We instanciate it only if necessary
 		if(fallbackProperties == null) fallbackProperties = loadProperties(availableLanguages[0]);
+		
 		result = fallbackProperties.getProperty(key);
+		
 		if(result != null) {
 			Logger.normal(CLASS_NAME, "The translation for " + key + " hasn't been found! please tell the maintainer.");
 			return result; 
@@ -107,7 +116,7 @@
 	 * @param name
 	 * @return the Properties object or null if not found
 	 */
-	private static Properties loadProperties (String name) {
+	public static Properties loadProperties (String name) {
         name = prefix.replace ('.', '/').concat(prefix.concat(name.concat(".properties")));
             
         Properties result = null;
@@ -134,6 +143,10 @@
 		return currentClass.selectedLanguage;
 	}
 	
+	public static Enumeration getKeys() {
+		return currentProperties.propertyNames();
+	}
+	
 	public static void main(String[] args) {
 		L10n.setLanguage("en");
 		System.out.println(L10n.getString("testing.test"));

Added: trunk/plugins/TranslationHelper/TranslationHelper.java
===================================================================
--- trunk/plugins/TranslationHelper/TranslationHelper.java	                        (rev 0)
+++ trunk/plugins/TranslationHelper/TranslationHelper.java	2007-04-01 19:39:00 UTC (rev 12517)
@@ -0,0 +1,203 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package plugins.TranslationHelper;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import freenet.l10n.L10n;
+import freenet.pluginmanager.FredPlugin;
+import freenet.pluginmanager.FredPluginHTTP;
+import freenet.pluginmanager.FredPluginThreadless;
+import freenet.pluginmanager.PluginHTTPException;
+import freenet.pluginmanager.PluginRespirator;
+import freenet.support.HTMLNode;
+import freenet.support.api.HTTPRequest;
+
+/**
+ * This plugin is a helper to manage freenet translation files.
+ * 
+ * @author Florent Daignière <nextgens at freenetproject.org>
+ */
+public class TranslationHelper implements FredPlugin, FredPluginHTTP, FredPluginThreadless {
+	public static String PLUGIN_NAME = "TranslationHelper";
+	public static String PLUGIN_BASE_URL = "/plugins/plugins." + PLUGIN_NAME + '.' + PLUGIN_NAME + '/';
+	private PluginRespirator pr;
+	private Properties editedProperties;
+	private String editedLang;
+	
+	public void runPlugin(PluginRespirator pr) {
+		this.pr = pr;
+		editedLang = L10n.availableLanguages[0];
+		editedProperties = L10n.loadProperties(editedLang);
+	}
+
+	public void terminate() {
+		// TODO Auto-generated method stub
+
+	}
+
+	public String handleHTTPGet(HTTPRequest request) throws PluginHTTPException {
+		if(request.isParameterSet("reload")) {
+			editedLang = request.getParam("reload");
+			HTMLNode pageNode = pr.getPageMaker().getPageNode(PLUGIN_NAME+" page : warning", false, null);
+			HTMLNode contentNode = pr.getPageMaker().getContentNode(pageNode);
+
+			HTMLNode availableLanguagesInfobox = contentNode.addChild("div", "class", "infobox infobox-warning");
+			HTMLNode availableLanguagesInfoboxHeader = availableLanguagesInfobox.addChild("div", "class", "infobox-header");
+			HTMLNode availableLanguagesInfoboxContent = availableLanguagesInfobox.addChild("div", "class", "infobox-content");
+
+			availableLanguagesInfoboxHeader.addChild("#", "Please confirm!");
+
+			availableLanguagesInfoboxContent.addChild("#", "Please confirm that you want to reload the default translations from " + editedLang);
+			HTMLNode updateForm =  pr.addFormChild(availableLanguagesInfoboxContent, PLUGIN_BASE_URL, "reload");
+			
+			updateForm.addChild("input", 
+					new String[] { "type", "name", "value" },
+					new String[] { "hidden", "reload", request.getParam("lang")
+			});
+			updateForm.addChild("input", 
+					new String[] { "type", "name", "value" }, 
+					new String[] { "submit", "confirm", "Confirm and reload!"
+			});
+			
+			return pageNode.generate();
+		}else if(request.isParameterSet("lang")) {
+			editedLang = request.getParam("lang");
+			HTMLNode pageNode = pr.getPageMaker().getPageNode(PLUGIN_NAME+" page for "+editedLang, false, null);
+			HTMLNode contentNode = pr.getPageMaker().getContentNode(pageNode);
+
+			HTMLNode translationNode = contentNode.addChild("div", "class", "translation");
+			HTMLNode updateForm =  pr.addFormChild(translationNode, PLUGIN_BASE_URL, "update");
+			HTMLNode legendTable = updateForm.addChild("table", "class", "translation");
+			
+			HTMLNode legendRow = legendTable.addChild("tr");
+			legendRow.addChild("td", "class", "translation-key", "Translation key");
+			legendRow.addChild("td", "class", "translation-key", "Original translation");
+			legendRow.addChild("td", "class", "translation-key", "Current translation");
+			
+			final Enumeration keys = L10n.getKeys();
+	
+			while(keys.hasMoreElements()){
+				String key = (String)keys.nextElement();
+				HTMLNode contentRow = legendTable.addChild("tr");
+				contentRow.addChild("td", "class", "translation-key",
+						key
+				);
+				contentRow.addChild("td", "class", "translation-orig",
+						L10n.getDefaultString(key)
+				);
+				contentRow.addChild("td", "class", "translation-new").addChild(
+						"input",
+						new String[] { "type", "name", "value" },
+						new String[] { "text", key, editedProperties.getProperty(key) 
+				});
+			}
+			HTMLNode contentRow = legendTable.addChild("tr");
+			contentRow.addChild("input", 
+					new String[] { "type", "name", "value" },
+					new String[] { "hidden", "lang", request.getParam("lang")
+			});
+			contentRow.addChild("input", 
+					new String[] { "type", "name", "value" }, 
+					new String[] { "submit", "update", "Update the translation!"
+			});
+			contentRow.addChild("%", "  ");			
+			contentRow.addChild("a", "href", PLUGIN_BASE_URL+"?getTranlationFile").addChild("#", "Download the translation file");
+			
+			contentRow.addChild("%", "  ");			
+			contentRow.addChild("a", "href", PLUGIN_BASE_URL).addChild("#", "Return to the plugin's main page");
+						
+			return pageNode.generate();
+		} else if(request.isParameterSet("getTranlationFile")) {
+			StringWriter out = new StringWriter();
+			try {
+				editedProperties.store(out, "Translation file for "+editedLang);
+			} catch (IOException e) {} // huh ?
+			return out.toString();
+		}
+		
+		HTMLNode pageNode = pr.getPageMaker().getPageNode(PLUGIN_NAME+" page", false, null);
+		HTMLNode contentNode = pr.getPageMaker().getContentNode(pageNode);
+
+		HTMLNode availableLanguagesInfobox = contentNode.addChild("div", "class", "infobox infobox-normal");
+		HTMLNode availableLanguagesInfoboxHeader = availableLanguagesInfobox.addChild("div", "class", "infobox-header");
+		HTMLNode availableLanguagesInfoboxContent = availableLanguagesInfobox.addChild("div", "class", "infobox-content");
+
+		availableLanguagesInfoboxHeader.addChild("#", "Available languages");
+
+		availableLanguagesInfoboxContent.addChild("#", "Here is the list of available languages on this freenet node :");
+		HTMLNode availableLanguagesList = availableLanguagesInfoboxContent.addChild("ul");
+		for(int i=0; i<L10n.availableLanguages.length; i++){
+			availableLanguagesList.addChild("li").addChild("ul");
+			availableLanguagesList.addChild("a", "href", PLUGIN_BASE_URL + "?lang="+L10n.availableLanguages[i]).addChild("#", L10n.availableLanguages[i]);
+			availableLanguagesList.addChild("%", "&nbsp;&nbsp;");
+			availableLanguagesList.addChild("#", "erase the current translation with the ");
+			availableLanguagesList.addChild("a", "href", PLUGIN_BASE_URL + "?reload=" + L10n.availableLanguages[i] + "&lang="+L10n.availableLanguages[i]).addChild("#", "default template");
+		}
+			
+		availableLanguagesInfoboxContent.addChild("a", "href", PLUGIN_BASE_URL+"?getTranlationFile").addChild("#", "Download the translation file");
+//		availableLanguagesInfoboxContent.addChild(
+//				"#",
+//				"Or create ").addChild(
+//						"a",
+//						"href",
+//						PLUGIN_BASE_URL + "?new").addChild(
+//								"#",
+//								"a new one"
+//		);
+
+
+		return pageNode.generate();
+	}
+
+	public String handleHTTPPost(HTTPRequest request) throws PluginHTTPException {
+		if(request.isPartSet("update")){
+			Enumeration keys = editedProperties.keys();
+			while(keys.hasMoreElements()) {
+				String key = (String)keys.nextElement();
+				editedProperties.setProperty(key, request.getPartAsString(key, 256));
+			}
+			
+			HTMLNode pageNode = pr.getPageMaker().getPageNode(PLUGIN_NAME+" page", false, null);
+			HTMLNode contentNode = pr.getPageMaker().getContentNode(pageNode);
+
+			HTMLNode returnToPluginInfobox = contentNode.addChild("div", "class", "infobox infobox-normal");
+			HTMLNode returnToPluginInfoboxHeader = returnToPluginInfobox.addChild("div", "class", "infobox-header");
+			HTMLNode returnToPluginInfoboxContent = returnToPluginInfobox.addChild("div", "class", "infobox-content");
+
+			returnToPluginInfoboxHeader.addChild("#", "Changes have been taken into account");
+
+			returnToPluginInfoboxContent.addChild("#","Your changes have been taken into account. Please ");
+			returnToPluginInfoboxContent.addChild("a", "href", PLUGIN_BASE_URL+"?lang="+editedLang).addChild("#", "click here to continue.");
+			returnToPluginInfoboxContent.addChild("%", "&nbsp;&nbsp;");			
+			returnToPluginInfoboxContent.addChild("a", "href", PLUGIN_BASE_URL).addChild("#", "Return to the plugin's main page");
+			return pageNode.generate();
+		}else if(request.isPartSet("reload")) {
+			editedProperties = L10n.loadProperties(editedLang);
+			HTMLNode pageNode = pr.getPageMaker().getPageNode(PLUGIN_NAME+" page", false, null);
+			HTMLNode contentNode = pr.getPageMaker().getContentNode(pageNode);
+
+			HTMLNode returnToPluginInfobox = contentNode.addChild("div", "class", "infobox infobox-normal");
+			HTMLNode returnToPluginInfoboxHeader = returnToPluginInfobox.addChild("div", "class", "infobox-header");
+			HTMLNode returnToPluginInfoboxContent = returnToPluginInfobox.addChild("div", "class", "infobox-content");
+
+			returnToPluginInfoboxHeader.addChild("#", "Changes have been taken into account");
+
+			returnToPluginInfoboxContent.addChild("#","Your changes have been taken into account. Please ");
+			returnToPluginInfoboxContent.addChild("a", "href", PLUGIN_BASE_URL+"?lang="+editedLang).addChild("#", "click here to continue.");
+			returnToPluginInfoboxContent.addChild("%", "&nbsp;&nbsp;");			
+			returnToPluginInfoboxContent.addChild("a", "href", PLUGIN_BASE_URL).addChild("#", "Return to the plugin's main page");
+			return pageNode.generate();
+		}
+		return null;
+	}
+
+	public String handleHTTPPut(HTTPRequest request) throws PluginHTTPException {
+		return null;
+	}
+
+}




More information about the cvs mailing list