[ https://issues.apache.org/jira/browse/FELIX-2158?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12841126#action_12841126 ]
Valentin Valchev commented on FELIX-2158: ----------------------------------------- It' really doesn't matter to me how this feature is achieved - through directly open the cached resource bundle, or through the manifest headers ... But what if a bundle contains multiple plugins like Web Console itself? I will expect manifest entries like: X-WebConsole-Plugin-<label>-Title: %title Usually the label is lowercase, so the manifest entry will look ugly. As example X-WebConsole-Plugin-log-Title: %log.title > Localization of plugin titles > ----------------------------- > > Key: FELIX-2158 > URL: https://issues.apache.org/jira/browse/FELIX-2158 > Project: Felix > Issue Type: Improvement > Components: Web Console > Reporter: Valentin Valchev > > We have added localization support, but there is one thing missing - the > titles of the plugins, that are rendered on top. > So now, even though the plugins are completely localized, the navigation > between the plugins is not. However, we need to keep the web console > compatible with the old API, so the change should be transparent. > I've been thinking about the problem and came to the following solution: > when request is made, the webconsole will: > 1. obtain the resource bundle for plugins > 2. for each plugin > 3. get the localized title, which is a resource key <pluginLabel>.pluginTitle > 4. if the localized title doesn't exist - then use the default title > 5. fill in the labelMap table > the reason for using <pluginLabel>.pluginTitle instead of some other constant > name is that a bundle can provide more than one plugins, as example > webconsole itself. In this case we need to provide titles for all plugins and > this involves the label. > This can be achieved easily by adding the following method in OsgiManager: > private final Map localizedLabelMap(final Locale locale) > { > Map map = new HashMap(); > ResourceBundle resourceBundle; > AbstractWebConsolePlugin plugin; > String label; > String title; > for (Iterator pi = plugins.values().iterator(); pi.hasNext();) > { > plugin = (AbstractWebConsolePlugin) pi.next(); > resourceBundle = > resourceBundleManager.getResourceBundle(plugin.getBundle(), > locale); > label = plugin.getLabel(); > title = plugin.getTitle(); > try > { > final String res = plugin.getLabel() + ".pluginTitle"; > title = resourceBundle.getString(res); > // our Resource Bundle doesn't throw exception, so if > // the value is same as the property key - revert to > // the original title > if (title.equals(res)) > { > title = plugin.getTitle(); > } > } > catch (Throwable e) > { > /* ignore missing resource - use default title */ > } > map.put(label, title); > } > return map; > } > and modify the service() method as follows: > Map labelMap = localizedLabelMap(request.getLocale()); > // the official request attributes > req.setAttribute( WebConsoleConstants.ATTR_LABEL_MAP, labelMap ); -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.