[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("%", " ");
+ 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("%", " ");
+ 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("%", " ");
+ 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