/** * Get a localized string, and replace on-the-fly a value. * @param key Key to search for. * @param pattern Pattern to replace, ${ and } not included. * @param value Replacement value. * @return String */ public String getString(String key, String pattern, String value) { return getString(key, new String[]{pattern}, new String[]{value}); // FIXME code efficiently! }
/** * Initialize the Node localization. You must also call that constructor * if you want to change the language. * @param lang Language to use. * @see LANGUAGE#mapToLanguage(String) */ public NodeL10n(final LANGUAGE lang, File overrideDir) { NodeL10n.b = new BaseL10n("freenet/l10n/", "freenet.l10n.${lang}.properties", overrideDir.getPath()+File.separator+"freenet.l10n.${lang}.override.properties", lang); }
@Override public String next() { if (state == FallbackState.CURRENT_LANG) { state = FallbackState.FALLBACK_LANG; String value = getString(key, true); if (value != null) { return value; } } if (state == FallbackState.FALLBACK_LANG) { state = FallbackState.KEY; if (getSelectedLanguage() != LANGUAGE.getDefault()) { String value = getFallbackString(key); if (value != null) { return value; } } } if (state == FallbackState.KEY) { state = FallbackState.END; return key; } throw new NoSuchElementException(); }
/** * Returns the javascript code that initializes the l10n on the client side. It must be inserted to the page. * * @return The javascript code that needs to be inserted in order to l10n work */ public static String getClientSideLocalizationScript() { StringBuilder l10nBuilder = new StringBuilder("var l10n={\n"); boolean isNamePresentAtLeastOnce=false; for (String key : NodeL10n.getBase().getAllNamesWithPrefix("fproxy.push")) { l10nBuilder.append(key.substring("fproxy.push".length() + 1) + ": \"" + HTMLEncoder.encode(NodeL10n.getBase().getString(key)) + "\",\n"); isNamePresentAtLeastOnce=true; } String l10n = isNamePresentAtLeastOnce?l10nBuilder.substring(0, l10nBuilder.length() - 2):l10nBuilder.toString(); l10n = l10n.concat("\n};"); return l10n; }
if(!oneLine) { summaryContent.addChild("#", alertSummaryString.toString() + separator + " "); NodeL10n.getBase().addL10nSubstitution(summaryContent, "UserAlertManager.alertsOnAlertsPage", new String[] { "link" }, new HTMLNode[] { ALERTS_LINK }); } else { summaryContent.addChild("a", "href", "/alerts/", NodeL10n.getBase().getString("StatusBar.alerts") + " " + alertSummaryString.toString());
@Override public HTMLNode getHTMLText() { HTMLNode n = new HTMLNode("div"); NodeL10n.getBase().addL10nSubstitution(n, "BookmarkItem.bookmarkUpdatedWithLink", new String[]{"link", "name", "edition"}, new HTMLNode[] { HTMLNode.link("/"+key), HTMLNode.text(name), HTMLNode.text(key.getSuggestedEdition()) }); return n; }
SimpleFieldSet sfs = this.base.getOverrideForCurrentLanguageTranslation(); if(sfs == null) { super.sendErrorPage(ctx, 503 /* Service Unavailable */, "Service Unavailable", l10n("noCustomTranslations")); head.put("Content-Disposition", "attachment; filename=\"" + this.base.getL10nOverrideFileName(this.base.getSelectedLanguage()) + '"'); ctx.sendReplyHeaders(200, "Found", head, "text/plain; charset=utf-8", data.length); ctx.writeData(data); ); contentRow.addChild("td", "class", "translation-orig", this.base.getDefaultString(key) ); contentRow.addChild("td", "class", "translation-new", this.base.getString(key) ); ); contentRow.addChild("td", "class", "translation-orig", this.base.getDefaultString(key) ); new String[] { "name", "rows", "cols" }, new String[] { "trans", "20", "80" }, this.base.getString(key)); updateForm.addChild("input", new String[] { "type", "name", "value" }, new String[] { "submit", "cancel", NodeL10n.getBase().getString("Toadlet.cancel") }); this.writeHTMLReply(ctx, 200, "OK", pageNode.generate()); return;
/** * Create a new PluginL10n object using the node's selected * language. * @param plugin Plugin to use. */ public PluginL10n(FredPluginBaseL10n plugin) { this(plugin, NodeL10n.getBase().getSelectedLanguage()); }
@Override public void set(String val) throws InvalidConfigValueException { if(val == null || get().equalsIgnoreCase(val)) return; try { NodeL10n.getBase().setLanguage(BaseL10n.LANGUAGE.mapToLanguage(val)); } catch (MissingResourceException e) { throw new InvalidConfigValueException(e.getLocalizedMessage()); } PluginManager.setLanguage(NodeL10n.getBase().getSelectedLanguage()); }
public void testStrings() throws Exception { for (LANGUAGE lang : LANGUAGE.values()) { BaseL10n l10n = createL10n(lang); SimpleFieldSet fields = l10n.getCurrentLanguageTranslation(); if (fields != null) { for (Iterator<String> itr = fields.keyIterator(); itr.hasNext();) { String key = itr.next(); String value = fields.get(key); try { l10n.attemptParse(value); } catch (L10nParseException e) { fail("Error in "+key+" for "+lang+": "+e.getMessage()); } } } } }
/** * Convert a string to a list of {@link HTMLNode}s, replacing substitution variables found in * {@code patterns} with corresponding nodes from {@code values}. */ private List<HTMLNode> performHTMLSubstitutions(String value, String[] patterns, HTMLNode[] values) throws L10nParseException { HTMLNode tempNode = new HTMLNode("#"); addHTMLSubstitutions(tempNode, value, patterns, values); return tempNode.getChildren(); }
public BaseL10n(String l10nFilesBasePath, String l10nFilesMask, String l10nOverrideFilesMask, final LANGUAGE lang) { this(l10nFilesBasePath, l10nFilesMask, l10nOverrideFilesMask, lang, getClassLoaderFallback()); }
HTMLNode headerReferenceInfobox = referenceInfobox.addChild("div", "class", "infobox-header"); NodeL10n.getBase().addL10nSubstitution(headerReferenceInfobox, "DarknetConnectionsToadlet.myReferenceHeader", new String[] { "linkref", "linktext" }, new HTMLNode[] { REF_LINK, REFTEXT_LINK }); HTMLNode myName = referenceInfoboxContent.addChild("p"); myName.addChild("span", NodeL10n.getBase().getString("DarknetConnectionsToadlet.myName", "name", fs.get("myName"))); myName.addChild("span", " ["); myName.addChild("span").addChild("a", "href", "/config/node#name", NodeL10n.getBase().getString("DarknetConnectionsToadlet.changeMyName")); myName.addChild("span", "]"); NodeL10n.getBase().addL10nSubstitution(warningSentence, "DarknetConnectionsToadlet.referenceCopyWarning", new String[] { "bold" }, new HTMLNode[] { HTMLNode.STRONG });
/** * Adds to the given parent node description and a radio button for the selected security level. * @param parent to add content to. * @param level to add content about. */ private void securityLevelChoice(HTMLNode parent, SecurityLevels.NETWORK_THREAT_LEVEL level) { HTMLNode input = parent.addChild("p").addChild("input", new String[] { "type", "name", "value" }, new String[] { "radio", "security-levels.networkThreatLevel", level.name() }); input.addChild("b", WizardL10n.l10nSec("networkThreatLevel.name."+level)); input.addChild("#", ": "); NodeL10n.getBase().addL10nSubstitution(input, "SecurityLevels.networkThreatLevel.choice."+level, new String[] { "bold" }, new HTMLNode[] { HTMLNode.STRONG }); HTMLNode inner = input.addChild("p").addChild("i"); NodeL10n.getBase().addL10nSubstitution(inner, "SecurityLevels.networkThreatLevel.desc."+level, new String[] { "bold" }, new HTMLNode[] { HTMLNode.STRONG }); }
@Override public String get() { return NodeL10n.getBase().getSelectedLanguage().fullName; }
subnode = node; addHTMLSubstitutions(subnode, inner, patterns, values); value = rest;
/** * Returns the translation of the given key, prefixed by the short name of * the current class. * * @param key * The key to fetch * @return The translation */ static String l10n(String key) { return NodeL10n.getBase().getString("PluginManager." + key); }
@Override public HTMLNode getHTMLText() { SubConfig sc = node.config.get("node"); Option<?> o = sc.getOption("ipAddressOverride"); HTMLNode textNode = new HTMLNode("div"); NodeL10n.getBase().addL10nSubstitution(textNode, "InvalidAddressOverrideUserAlert.unknownAddressWithConfigLink", new String[] { "link" }, new HTMLNode[] { HTMLNode.link("/config/node")}); HTMLNode formNode = textNode.addChild("form", new String[] { "action", "method" }, new String[] { "/config/node", "post" }); formNode.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "formPassword", node.clientCore.formPassword }); formNode.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "subconfig", sc.getPrefix() }); HTMLNode listNode = formNode.addChild("ul", "class", "config"); HTMLNode itemNode = listNode.addChild("li"); itemNode.addChild("span", "class", "configshortdesc", o.getLocalisedShortDesc()).addChild("input", new String[] { "type", "name", "value" }, new String[] { "text", sc.getPrefix() + ".ipAddressOverride", o.getValueDisplayString() }); itemNode.addChild("span", "class", "configlongdesc", o.getLocalisedLongDesc()); formNode.addChild("input", new String[] { "type", "value" }, new String[] { "submit", NodeL10n.getBase().getString("UserAlert.apply") }); formNode.addChild("input", new String[] { "type", "value" }, new String[] { "reset", NodeL10n.getBase().getString("UserAlert.reset") }); return textNode; }
@Override public HTMLNode getHTMLText() { HTMLNode div = new HTMLNode("div"); String url = ExternalLinkToadlet.escape(HTMLEncoder.encode(l10n("portForwardHelpURL"))); boolean maybeForwarded = true; for(int portNotForwarded: portsNotForwarded) { if(portNotForwarded < 0) maybeForwarded = false; } String keySuffix = maybeForwarded ? "MaybeForwarded" : "NotForwarded"; if(portsNotForwarded.length == 1) { NodeL10n.getBase().addL10nSubstitution(div, "IPDetectorPluginManager.forwardPort"+keySuffix, new String[] { "port", "link" }, new HTMLNode[] { HTMLNode.text(Math.abs(portsNotForwarded[0])), HTMLNode.link(url) }); } else if(portsNotForwarded.length == 2) { NodeL10n.getBase().addL10nSubstitution(div, "IPDetectorPluginManager.forwardTwoPorts"+keySuffix, new String[] { "port1", "port2", "link", "connectivity" }, new HTMLNode[] { HTMLNode.text(Math.abs(portsNotForwarded[0])), HTMLNode.text(Math.abs(portsNotForwarded[1])), HTMLNode.link(url), HTMLNode.link(ConnectivityToadlet.PATH) }); } else { Logger.error(this, "Unknown number of ports to forward: "+portsNotForwarded.length); } if(innerGetPriorityClass() == UserAlert.ERROR) { div.addChild("#", " " + l10n("symmetricPS")); } return div; }
/** * {@inheritDoc} */ @Override public String format(TemplateContext templateContext, Object data, Map<String, Object> parameters) { List<Object> parameterValues = getParameters(data, parameters); String text = getText(data); if (parameterValues.isEmpty()) { return webInterface.getL10n().getString(text); } return new MessageFormat(webInterface.getL10n().getString(text), new Locale(webInterface.getL10n().getSelectedLanguage().shortCode)).format(parameterValues.toArray()); }