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;
+       }
+
+}


Reply via email to