svnno****@sourc*****
svnno****@sourc*****
2008年 1月 6日 (日) 21:23:45 JST
Revision: 772 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=pal&view=rev&rev=772 Author: shinsuke Date: 2008-01-06 21:23:45 +0900 (Sun, 06 Jan 2008) Log Message: ----------- i18ned. added resource bundle factory. Modified Paths: -------------- pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/ActionLayoutPortlet.java pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/decorator-macros.vm pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/header.vm Added Paths: ----------- pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/util/ pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/util/ResourceBundleFactory.java pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/ pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages.properties pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages_ja.properties -------------- next part -------------- Modified: pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/ActionLayoutPortlet.java =================================================================== --- pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/ActionLayoutPortlet.java 2008-01-03 12:42:43 UTC (rev 771) +++ pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/ActionLayoutPortlet.java 2008-01-06 12:23:45 UTC (rev 772) @@ -9,6 +9,8 @@ import javax.portlet.ActionResponse; import javax.portlet.PortletConfig; import javax.portlet.PortletException; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.StringUtils; @@ -29,6 +31,7 @@ import org.apache.jetspeed.page.PageNotUpdatedException; import org.apache.jetspeed.page.document.DocumentException; import org.apache.jetspeed.page.document.NodeException; +import org.apache.jetspeed.portlets.layout.util.ResourceBundleFactory; import org.apache.jetspeed.request.RequestContext; public class ActionLayoutPortlet extends MultiColumnPortlet { @@ -62,8 +65,14 @@ public static final String DEFAULT_PORTLET_DECORATOR = "default"; + public static final String RESOURCE_TIMEOUT = "resourceTimeout"; + + public static final String RESOURCE_BUNDLE_FACTORY = "org.apache.jetspeed.portlets.layout.util.ResourceBundleFactory"; + private PageManager pageManager = null; + private ResourceBundleFactory resourceBundleFactory; + public void init(PortletConfig config) throws PortletException { super.init(config); @@ -74,8 +83,24 @@ throw new PortletException( "Failed to find the Page Manager on portlet initialization"); } + + long timeToLive = 1 * 60 * 60 * 1000; + String value = config.getInitParameter(RESOURCE_TIMEOUT); + if (value != null && !value.equals("")) { + try { + timeToLive = Long.parseLong(value); + } catch (NumberFormatException e) { + } + } + resourceBundleFactory = new ResourceBundleFactory(timeToLive); } + public void render(RenderRequest request, RenderResponse response) + throws PortletException, IOException { + request.setAttribute(RESOURCE_BUNDLE_FACTORY, resourceBundleFactory); + super.render(request, response); + } + public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException { String targetClass = request.getParameter(TARGET_CLASS); Added: pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/util/ResourceBundleFactory.java =================================================================== --- pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/util/ResourceBundleFactory.java 2008-01-03 12:42:43 UTC (rev 771) +++ pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/util/ResourceBundleFactory.java 2008-01-06 12:23:45 UTC (rev 772) @@ -0,0 +1,70 @@ +package org.apache.jetspeed.portlets.layout.util; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +import org.apache.jetspeed.request.RequestContext; + +public class ResourceBundleFactory { + + private long timeToLive; + + private Map resourceBundleCache; + + public ResourceBundleFactory(long timeToLive) { + this.timeToLive = timeToLive; + resourceBundleCache = new HashMap(); + } + + public ResourceBundle getResourceBundle(RequestContext requestContext, + String resourcePath, String resourceName, Locale locale) { + long now = new Date().getTime(); + String resourceKey = resourcePath + "/" + resourceName + "_" + + locale.toString(); + List resource = (List) resourceBundleCache.get(resourceKey); + if (resource != null) { + // a cached resource is available + if (now - ((Long) resource.get(0)).longValue() < timeToLive) { + return (ResourceBundle) resource.get(1); + } + // expired + } + + String resourceDirName = requestContext.getConfig().getServletContext() + .getRealPath(resourcePath); + File resourceDir = new File(resourceDirName); + if (resourceName == null) { + throw new NullPointerException("The resource file is null."); + } + if (!resourceDir.isDirectory()) { + throw new MissingResourceException( + "Can't find the resource directory: " + resourceDirName, + resourceName + "_" + locale, ""); + } + URL[] urls = new URL[1]; + try { + urls[0] = resourceDir.toURL(); + } catch (MalformedURLException e) { + throw new MissingResourceException( + "The resource directory cannot be parsed as a URL: " + + resourceDirName, resourceName + "_" + locale, ""); + } + ResourceBundle resourceBundle = ResourceBundle.getBundle(resourceName, + locale, new URLClassLoader(urls)); + resource = new ArrayList(2); + resource.add(0, new Long(now)); + resource.add(1, resourceBundle); + resourceBundleCache.put(resourceKey, resource); + return resourceBundle; + } +} Property changes on: pal-portal/trunk/portal/files/layout-portlets/src/java/org/apache/jetspeed/portlets/layout/util/ResourceBundleFactory.java ___________________________________________________________________ Name: svn:eol-style + native Modified: pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/decorator-macros.vm =================================================================== --- pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/decorator-macros.vm 2008-01-03 12:42:43 UTC (rev 771) +++ pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/decorator-macros.vm 2008-01-06 12:23:45 UTC (rev 772) @@ -1,309 +1,6 @@ - - - - - - - - - -#* define navigation constants *# -#macro (defineNavigationConstants) - #set($LEFT_TO_RIGHT = "LeftToRight") - #set($RIGHT_TO_LEFT = "RightToLeft") - #set($TOP_TO_BOTTOM = "TopToBottom") - #set($BOTTOM_TO_TOP = "BottomToTop") - #set($TITLE_FIRST = "TitleFirst") - #set($TITLE_LAST = "TitleLast") - #set($BREADCRUMBS_STYLE = "BreadcrumbsStyle") -#end - -#* include tabs navigation component *# -#macro (includeTabsNavigation $_menu $_orientation) - <ul> - #foreach($element in $_menu.elements.iterator()) - #if($element.elementType == "option") - #set($tabTitle = $element.getTitle($preferedLocale)) - #set($tabName = $element.getShortTitle($preferedLocale)) - #if($_orientation == $LEFT_TO_RIGHT) - #if($element.isSelected($site)) - <li><span>${tabName}</span></li> - #else - #set($tabUrl = $jetspeed.getAbsoluteUrl($element.url)) - <li><a href="$tabUrl">${tabName}</a></li> - #end - #end - #end - #end - <li></li> - </ul> -#end - -#macro (includeMenuNavigation $_menu $_orientation) - #set($sepa="") - <ul> - #foreach($element in $_menu.elements.iterator()) - #if($element.elementType == "option") - #set($tabTitle = $element.getTitle($preferedLocale)) - #set($tabName = $element.getShortTitle($preferedLocale)) - #if($_orientation == $TOP_TO_BOTTOM) - #if($element.isSelected($site)) - <li><div>» ${tabName}</div></li> - #else - #set($tabUrl = $jetspeed.getAbsoluteUrl($element.url)) - <li><div><a href="$tabUrl">» ${tabName}</a></div></li> - #end - #end - #if($_orientation == $LEFT_TO_RIGHT) - ${sepa} - #if($element.isSelected($site)) - <li><span>${tabName}</span></li> - #else - #set($tabUrl = $jetspeed.getAbsoluteUrl($element.url)) - <li><span><a href="$tabUrl">${tabName}</a></span></li> - #end - #end - #end - #set($sepa="<li><span class='sepa'>|</span></li>") - #end - </ul> -#end - -#* include links navigation component *# -#macro (includeLinksNavigation $_menu $_orientation $_title $_style $_delimiter) - #if(!$_delimiter || $_delimiter == "") - #if($_style != $BREADCRUMBS_STYLE) - #set($_delimiter = " ") - #else - #set($_delimiter = " >> ") - #end - #end - #set($menuTitle = $_menu.getTitle($preferedLocale)) - #set($menuName = $_menu.getShortTitle($preferedLocale)) - - <div class="FolderList"> - #if($_title == $TITLE_FIRST) - #if($_orientation == $LEFT_TO_RIGHT) - - <span title="$!menuTitle">${menuName} </span> - #elseif($_orientation == $TOP_TO_BOTTOM) - - <div class="pagetitle" title="$!menuTitle">${menuName}</div> - #end - #end - #foreach($element in $_menu.elements.iterator()) - #if($element.elementType == "option") - #set($linkTitle = $element.getTitle($preferedLocale)) - #set($linkName = $element.getShortTitle($preferedLocale)) - #set($linkUrl = $jetspeed.getAbsoluteUrl($element.url)) - #if($_style != $BREADCRUMBS_STYLE || $element.type != "page" || $velocityCount < $_menu.elements.size()) - #if($_orientation == $LEFT_TO_RIGHT) - - <span> - #elseif($_orientation == $TOP_TO_BOTTOM) - - <div> - #end - #if($element.type == "page") - - <a href="$linkUrl" class="LinkPage" title="$!linkTitle">${linkName}</a> - #elseif($element.type == "link") - - <a href="$linkUrl" class="Link" title="$!linkTitle">${linkName}</a> - #elseif($element.type == "folder") - - <a href="$linkUrl" class="LinkFolder" title="$!linkTitle">${linkName}</a> - #else - - <a href="$linkUrl" title="$!linkTitle">${linkName}</a> - #end - #if($_orientation == $LEFT_TO_RIGHT) - ${_delimiter}</span> - #elseif($_orientation == $TOP_TO_BOTTOM) - - </div> - #end - #else - #if($_orientation == $LEFT_TO_RIGHT) - - <span title="$!linkTitle">${linkName} </span> - #elseif($_orientation == $TOP_TO_BOTTOM) - - <div title="$!linkTitle">${linkName}</div> - #end - #end - #elseif($element.elementType == "separator") - #set($separatorTitle = $element.getTitle($preferedLocale)) - #set($separatorText = $element.getText($preferedLocale)) - #if($_orientation == $LEFT_TO_RIGHT) - - <span title="$!separatorTitle">${separatorText}${_delimiter}</span> - #elseif($_orientation == $TOP_TO_BOTTOM) - - <div class="pagetitle" title="$!separatorTitle">${separatorText}</div> - #end - #end - #end - #if($_title == $TITLE_LAST) - #if($_orientation == $LEFT_TO_RIGHT) - - <span title="$!menuTitle">${menuName} </span> - #elseif($_orientation == $TOP_TO_BOTTOM) - - <div class="pagetitle" title="$!menuTitle">${menuName}</div> - #end - #end - - </div> -#end - -#* include nested menu links navigation component *# -#macro (includeNestedLinksWithIconNavigation $_menu $_orientation) - #set($menuTitle = $_menu.getTitle($preferedLocale)) - #set($menuName = $_menu.getShortTitle($preferedLocale)) - #if($menuName) - <div class="pagetitle" title="$!menuTitle">${menuName}</div> - #end - <div> - #foreach($element in $_menu.elements.iterator()) - #if($element.elementType == "option") - #set($linkTitle = $element.getTitle($preferedLocale)) - #set($linkName = $element.getShortTitle($preferedLocale)) - #set($linkUrl = $jetspeed.getAbsoluteUrl($element.url)) - #if($element.type == "page") - <div><a href="$linkUrl" class="LinkPage" title="$!linkTitle">${linkName}</a></div> - #elseif($element.type == "link") - #set($linkTarget = $element.target) - <div><a href="$linkUrl" target="$linkTarget" class="Link" title="$!linkTitle">${linkName}</a></div> - #elseif($element.type == "folder") - <div><a href="$linkUrl" class="LinkFolder" title="$!linkTitle">$linkName</a></div> - #end - #elseif($element.elementType == "menu") - #includeNestedLinksWithIconNavigation($element $_orientation) - #elseif($element.elementType == "separator") - #set($separatorTitle = $element.getTitle($preferedLocale)) - #set($separatorText = $element.getText($preferedLocale)) - <div class="pagetitle" title="$!separatorTitle">${separatorText}</div> - #end - #end - </div> -#end - -#* include top level menu links navigation component *# -#macro (includeLinksWithIconNavigation $_menu $_orientation) - #set($itemIndex = 1) - #set($rowStarted = false) - #set($elementsStarted = false) -<script type="text/javascript"><!-- -var prevNode; -function showPopupTopMenu(node) { - if(prevNode) { - prevNode.style.display='none'; - } - node.style.display='block'; - prevNode=node; -} -function hidePopupTopMenu(node) { - node.style.display='none'; -} -//--></script> - <ul class="main"> - #foreach($element in $_menu.elements.iterator()) - #if($element.elementType == "option") - #if(!$rowStarted) -<!-- 1 --> -#* - <tr> - <td> - <div class="toolgroup"> - <div class="body"> - <div class="FolderList"> -*# - #elseif(!$elementsStarted) - <ol id="topMenu$itemIndex" class="sub" onmouseout="hidePopupTopMenu(this);"> -#* - <div class="body"> - <div class="FolderList"> -*# - #end - #set($linkTitle = $element.getTitle($preferedLocale)) - #set($linkName = $element.getShortTitle($preferedLocale)) - #set($linkUrl = $jetspeed.getAbsoluteUrl($element.url)) - #if($element.type == "page") - <li><a href="$linkUrl" class="LinkPage" title="$!linkTitle">» ${linkName}</a></li> - #elseif($element.type == "link") - #set($linkTarget = $element.target) - <li><a href="$linkUrl" target="$!linkTarget" class="Link" title="$!linkTitle">» ${linkName}</a></li> - #elseif($element.type == "folder") - <li><a href="$linkUrl" class="LinkFolder" title="$!linkTitle">» $linkName</a></li> - #end - #set($rowStarted = true) - #set($elementsStarted = true) - #elseif($element.elementType == "menu") - #if(!$rowStarted) -<!-- 3 --> -#* - <tr> - <td> - <div class="toolgroup"> - <div class="body"> - <div class="FolderList"> -*# - #elseif(!$elementsStarted) -<!-- 4 --> -#* - <div class="body"> - <div class="FolderList"> -*# - #end - #includeNestedLinksWithIconNavigation($element $_orientation) - #set($rowStarted = true) - #set($elementsStarted = true) - #elseif($element.elementType == "separator") - #if(!$rowStarted) -<!-- 5 --> -#* - <tr> - <td> - <div class="toolgroup"> -*# - #elseif($elementsStarted) - </ol> - </li> - #set($itemIndex = $itemIndex + 1) -#* - </div> - </div> -*# - #end - #set($separatorTitle = $element.getTitle($preferedLocale)) - #set($separatorText = $element.getText($preferedLocale)) - <li class="menuItem" onmouseover="showPopupTopMenu(document.getElementById('topMenu$itemIndex'));"> - <span>» ${separatorText}</span> -#* - <div class="label"> - ${separatorText} - </div> -*# - #set($rowStarted = true) - #set($elementsStarted = false) - #end - #end - #if($elementsStarted) - </ol> - </li> -#* - </div> - </div> -*# - #end - #if($rowStarted) -<!-- 8 --> -#* - </div> - </td> - </tr> -*# - #end - </ul> -#end +#macro (initMessageResourceBundles) + #set($resourceBundleFactory = $request.getAttribute("org.apache.jetspeed.portlets.layout.util.ResourceBundleFactory")) + #set($resourcePath = $layoutDecoration.getResource("resources")) + #set($msgs= $resourceBundleFactory.getResourceBundle($JS2RequestContext,$resourcePath,"messages",$JS2RequestContext.locale)) +#end + Modified: pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/header.vm =================================================================== --- pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/header.vm 2008-01-03 12:42:43 UTC (rev 771) +++ pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/header.vm 2008-01-06 12:23:45 UTC (rev 772) @@ -18,8 +18,6 @@ #defineLayoutObjects() ## Loads our custom macros #parse($layoutDecoration.getResource("decorator-macros.vm")) -## Add all template constants to the current context -#defineNavigationConstants() ## Username #set($username = $JS2RequestContext.request.remoteUser) ## Check edit @@ -30,6 +28,7 @@ #end #end #set($layoutId = $jetspeed.currentFragment.id)## +#initMessageResourceBundles()## <html> <head> #includeHeaderResource() @@ -76,9 +75,9 @@ <div class="folder"> <nobr> #set($navigationsStandardMenu = $site.getMenu("navigations")) -#if(!$navigationsStandardMenu.empty) <ul> - <li><span class="title">フォルダ</span></li> +#if(!$navigationsStandardMenu.empty) + <li><span class="title">$msgs.getString("header.topbar.folder.folder")</span></li> #foreach($element in $navigationsStandardMenu.elements.iterator()) #if($element.elementType == "option") #set($tabTitle = $element.getTitle($preferedLocale)) @@ -91,12 +90,12 @@ #end #end #end - #if($editable) - <li><a id="new-folder-link" href="javascript:void(0)"><img src="#GetPageResource('images/folder-new.gif')" border="0"/>フォルダを追加</a></li> - #end +#end +#if($editable) + <li><a id="new-folder-link" href="javascript:void(0)"><img src="#GetPageResource('images/folder-new.gif')" border="0"/>$msgs.getString("header.topbar.folder.add.folder")</a></li> +#end <li></li> </ul> -#end </nobr> </div> </div> @@ -108,13 +107,13 @@ <div class="info"> #if($username) <div class="login"> - <a href="#BaseHref()portal/my-account.psml">$messages.getString("portal.loginform.change_password")</a> - <a href="#BaseHref()login/logout">$messages.getString("portal.loginform.logout")</a> + <a href="#BaseHref()portal/my-account.psml">$msgs.getString("header.body.info.change.password")</a> + <a href="#BaseHref()login/logout">$msgs.getString("header.body.info.logout")</a> </div> - <div class="hello">$messages.getString("portal.loginform.username") $username</div> + <div class="hello">$msgs.getString("header.body.info.username") $username</div> #else <div class="login"> - <a href="#BaseHref()login/proxy?org.apache.jetspeed.login.username=&org.apache.jetspeed.login.password=">$messages.getString("portal.loginform.login")</a> + <a href="#BaseHref()login/proxy?org.apache.jetspeed.login.username=&org.apache.jetspeed.login.password=">$msgs.getString("header.body.info.login")</a> </div> #end </div> @@ -141,14 +140,14 @@ #end <li class="new-page"> #if($editable) - <span><a id="new-page-link" href="javascript:void(0)"><img src="#GetPageResource('images/page-new.gif')" border="0"/>ページを追加</a></span> + <span><a id="new-page-link" href="javascript:void(0)"><img src="#GetPageResource('images/page-new.gif')" border="0"/>$msgs.getString("header.bottombar.add.page")</a></span> #end </li> <li class="menu"> #if($editable) #set ($pagePref = "${jetspeed.basePath}/system/customizer/site-editor.psml?mode=${rc.request.servletPath}&path=${psrc.managedPage}&returnPath=${profiledPage}") - <span><a id="add-portlet-link" href="javascript:void(0)"><img src="#GetPageResource('images/add-portlet.gif')" border="0"/>コンテンツを追加</a></span> - <span><a id="edit-page-link" href="$pagePref"><img src="#GetPageResource('images/edit-page.gif')" border="0"/>ページを編集</a></span> + <span><a id="add-portlet-link" href="javascript:void(0)"><img src="#GetPageResource('images/add-portlet.gif')" border="0"/>$msgs.getString("header.bottombar.add.content")</a></span> + <span><a id="edit-page-link" href="$pagePref"><img src="#GetPageResource('images/edit-page.gif')" border="0"/>$msgs.getString("header.bottombar.edit.page")</a></span> #end </li> </ul> Added: pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages.properties =================================================================== --- pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages.properties 2008-01-03 12:42:43 UTC (rev 771) +++ pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages.properties 2008-01-06 12:23:45 UTC (rev 772) @@ -0,0 +1,10 @@ +header.topbar.folder.folder=Folder +header.topbar.folder.add.folder=Add Folder +header.body.info.change.password=Change Password +header.body.info.logout=Logout +header.body.info.username=Username: +header.body.info.login=Login +header.bottombar.add.page=Add Page +header.bottombar.add.content=Add Content +header.bottombar.edit.page=Edit Page + Property changes on: pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages.properties ___________________________________________________________________ Name: svn:eol-style + native Added: pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages_ja.properties =================================================================== --- pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages_ja.properties 2008-01-03 12:42:43 UTC (rev 771) +++ pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages_ja.properties 2008-01-06 12:23:45 UTC (rev 772) @@ -0,0 +1,10 @@ +header.topbar.folder.folder=\u30d5\u30a9\u30eb\u30c0 +header.topbar.folder.add.folder=\u30d5\u30a9\u30eb\u30c0\u3092\u8ffd\u52a0 +header.body.info.change.password=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5909\u66f4 +header.body.info.logout=\u30ed\u30b0\u30a2\u30a6\u30c8 +header.body.info.username=\u30e6\u30fc\u30b6\u30fc\u540d: +header.body.info.login=\u30ed\u30b0\u30a4\u30f3 +header.bottombar.add.page=\u30da\u30fc\u30b8\u3092\u8ffd\u52a0 +header.bottombar.add.content=\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8ffd\u52a0 +header.bottombar.edit.page=\u30da\u30fc\u30b8\u3092\u7de8\u96c6 + Property changes on: pal-portal/trunk/portal/files/src/webapp/decorations/layout/default/resources/messages_ja.properties ___________________________________________________________________ Name: svn:eol-style + native