From 2b55e1daad1cbc3ebd5d5946d3e17f426e3f92cb Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 8 Apr 2013 15:41:31 +0200
Subject: [PATCH] OO-420: bookmarks list and portlet based on the mark service

---
 .../org/olat/bookmark/BookmarkImpl.hbm.xml    |  38 --
 .../olat/core/commons/services/mark/Mark.java |   2 +
 .../commons/services/mark/ui/Bookmark.java    |  97 ++++
 .../services/mark/ui/BookmarksController.java | 229 ++++++++++
 .../services/mark/ui/BookmarksPortlet.java    | 114 +++++
 .../ui/BookmarksPortletRunController.java     | 415 ++++++++++++++++++
 .../mark/ui/_content/bookmarksPortlet.html    |   4 +
 .../mark/ui/_i18n/LocalStrings_ar.properties  |  30 ++
 .../mark/ui/_i18n/LocalStrings_bg.properties  |  30 ++
 .../mark/ui/_i18n/LocalStrings_cs.properties  |  30 ++
 .../mark/ui/_i18n/LocalStrings_da.properties  |  24 +
 .../mark/ui/_i18n/LocalStrings_de.properties  |  30 ++
 .../mark/ui/_i18n/LocalStrings_el.properties  |  30 ++
 .../mark/ui/_i18n/LocalStrings_en.properties  |  30 ++
 .../mark/ui/_i18n/LocalStrings_es.properties  |  30 ++
 .../ui/_i18n/LocalStrings_et_EE.properties    |   6 +
 .../mark/ui/_i18n/LocalStrings_fa.properties  |  24 +
 .../mark/ui/_i18n/LocalStrings_fr.properties  |  30 ++
 .../mark/ui/_i18n/LocalStrings_it.properties  |  30 ++
 .../mark/ui/_i18n/LocalStrings_jp.properties  |  29 ++
 .../mark/ui/_i18n/LocalStrings_lt.properties  |  24 +
 .../ui/_i18n/LocalStrings_nl_NL.properties    |  30 ++
 .../mark/ui/_i18n/LocalStrings_pl.properties  |  30 ++
 .../ui/_i18n/LocalStrings_pt_BR.properties    |  30 ++
 .../ui/_i18n/LocalStrings_pt_PT.properties    |  24 +
 .../mark/ui/_i18n/LocalStrings_ru.properties  |  30 ++
 .../mark/ui/_i18n/LocalStrings_sq.properties  |  30 ++
 .../ui/_i18n/LocalStrings_zh_CN.properties    |  30 ++
 .../ui/_i18n/LocalStrings_zh_TW.properties    |  30 ++
 .../ui/_i18n/i18nBundleMetadata.properties    |   2 +
 .../org/olat/home/_spring/homeContext.xml     |  21 +
 .../org/olat/_spring/portalContext.xml        |   4 +
 32 files changed, 1499 insertions(+), 38 deletions(-)
 delete mode 100644 src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/Bookmark.java
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortlet.java
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_content/bookmarksPortlet.html
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_ar.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_bg.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_cs.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_da.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_de.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_el.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_en.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_es.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_et_EE.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_fa.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_fr.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_it.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_jp.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_lt.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_nl_NL.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pl.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pt_BR.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pt_PT.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_ru.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_sq.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_zh_CN.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_zh_TW.properties
 create mode 100644 src/main/java/org/olat/core/commons/services/mark/ui/_i18n/i18nBundleMetadata.properties

diff --git a/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml b/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml
deleted file mode 100644
index ef8646876de..00000000000
--- a/src/main/java/org/olat/bookmark/BookmarkImpl.hbm.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE hibernate-mapping PUBLIC 
-        "-//Hibernate/Hibernate Mapping DTD//EN"
-        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
-
-<hibernate-mapping default-lazy="false">
-  <class name="org.olat.bookmark.BookmarkImpl" table="o_bookmark">  
-  
-		<cache usage="transactional" />
-
-    <id name="key" column="bookmark_id" type="long" unsaved-value="null">
-      <generator class="hilo"/>
-    </id>
-    
-    <version name="version" access="field" column="version" type="int"/>
-	<property  name="creationDate" column="creationdate" type="timestamp" />   
-  
-   	<many-to-one
-			name="owner"
-			class="org.olat.basesecurity.IdentityImpl" 
-			column="owner_id"
-			outer-join="true"
-			cascade="none"
-			not-null="true"/> 
-
-    <property name="title" unique="false" not-null="true" length="255" />
-    <property name="description" type="string">
-    		<column name="description" unique="false" not-null="false" length="16777210"/>
-    </property>
-    <property name="detaildata" unique="false" not-null="false" length="255" />
-
-	<property name="displayrestype" unique="false" not-null="true" length="50" />
-    <property name="olatrestype" unique="false" not-null="true" length="50" />
-    <property name="olatreskey" type="long" not-null="false" />
-
-  </class>  
-</hibernate-mapping>
-
diff --git a/src/main/java/org/olat/core/commons/services/mark/Mark.java b/src/main/java/org/olat/core/commons/services/mark/Mark.java
index 6fbd2dd285a..c53592e2a4e 100644
--- a/src/main/java/org/olat/core/commons/services/mark/Mark.java
+++ b/src/main/java/org/olat/core/commons/services/mark/Mark.java
@@ -33,6 +33,8 @@ import org.olat.core.id.OLATResourceable;
  */
 public interface Mark {
 	
+	public Long getKey();
+	
 	public boolean isMarked();
 	
 	public OLATResourceable getOLATResourceable();
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/Bookmark.java b/src/main/java/org/olat/core/commons/services/mark/ui/Bookmark.java
new file mode 100644
index 00000000000..94d3ca7e1e6
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/Bookmark.java
@@ -0,0 +1,97 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.commons.services.mark.ui;
+
+import java.util.Date;
+
+import org.olat.core.commons.services.mark.Mark;
+import org.olat.core.id.OLATResourceable;
+import org.olat.group.BusinessGroup;
+import org.olat.repository.RepositoryEntry;
+
+/**
+ * Internal wrapper
+ * 
+ * @author srosse
+ *
+ */
+class Bookmark {
+
+	private final Mark mark;
+	private final String title;
+	private final String description;
+	private final Date creationDate;
+	private final String displayrestype;
+	private int statusCode;
+	
+	public Bookmark(Mark mark, RepositoryEntry entry) {
+		this.mark = mark;
+		title = entry.getDisplayname();
+		description = entry.getDescription();
+		statusCode = entry.getStatusCode();
+		creationDate = entry.getCreationDate();
+		displayrestype = entry.getOlatResource().getResourceableTypeName();
+	}
+	
+	public Bookmark(Mark mark, BusinessGroup group) {
+		this.mark = mark;
+		title = group.getName();
+		description = group.getDescription();
+		statusCode = -1;
+		creationDate = group.getCreationDate();
+		displayrestype = group.getResourceableTypeName();
+	}
+	
+	public Long getKey() {
+		return mark.getKey();
+	}
+	
+	public String getTitle() {
+		return title;
+	}
+	
+	public String getDescription() {
+		return description;
+	}
+	
+	public Date getCreationDate() {
+		return creationDate;
+	}
+	
+	public String getDisplayrestype() {
+		return displayrestype;
+	}
+	
+	public int getStatusCode() {
+		return statusCode;
+	}
+	
+	public OLATResourceable getOLATResourceable() {
+		return mark.getOLATResourceable();
+	}
+	
+	public String getResSubPath() {
+		return mark.getResSubPath();
+	}
+	
+	public String getBusinessPath() {
+		return mark.getBusinessPath();
+	}
+}
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java
new file mode 100644
index 00000000000..a701176da78
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java
@@ -0,0 +1,229 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.org
+* <p>
+* Licensed under the Apache License, Version 2.0 (the "License"); <br>
+* you may not use this file except in compliance with the License.<br>
+* You may obtain a copy of the License at
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <p>
+* Unless required by applicable law or agreed to in writing,<br>
+* software distributed under the License is distributed on an "AS IS" BASIS, <br>
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+* See the License for the specific language governing permissions and <br>
+* limitations under the License.
+* <p>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <hr>
+* <a href="http://www.openolat.org">
+* OpenOLAT - Online Learning and Training</a><br>
+* This file has been modified by the OpenOLAT community. Changes are licensed
+* under the Apache 2.0 license as the original file.
+*/
+
+package org.olat.core.commons.services.mark.ui;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
+import org.olat.core.CoreSpringFactory;
+import org.olat.core.commons.services.mark.Mark;
+import org.olat.core.commons.services.mark.MarkManager;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.table.DefaultColumnDescriptor;
+import org.olat.core.gui.components.table.DefaultTableDataModel;
+import org.olat.core.gui.components.table.StaticColumnDescriptor;
+import org.olat.core.gui.components.table.Table;
+import org.olat.core.gui.components.table.TableController;
+import org.olat.core.gui.components.table.TableDataModel;
+import org.olat.core.gui.components.table.TableEvent;
+import org.olat.core.gui.components.table.TableGuiConfiguration;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.gui.control.generic.modal.DialogBoxController;
+import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
+import org.olat.core.gui.translator.PackageTranslator;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryEntryStatus;
+import org.olat.repository.RepositoryManager;
+
+/**
+ * Description:
+ * 
+ * @author Sabina Jeger
+ */
+public class BookmarksController extends BasicController {
+
+	private TableController tableCtr;
+	private DialogBoxController dc;
+
+	/** constructor constant to search for all repository entry types * */
+	private final List<String> types = Collections.singletonList("RepositoryEntry");
+	
+	private final MarkManager markManager;
+	private final RepositoryManager repositoryManager;
+
+	/**
+	 * Constructor for bookmark list and manage controller. The controller can be
+	 * configured using the allowEdit flag in the constructor and restrict the
+	 * search to specific repository entry types using the type attribute.
+	 * 
+	 * @param ureq The user request
+	 * @param wControl The window controller
+	 */
+	public BookmarksController(UserRequest ureq, WindowControl wControl) {
+		super(ureq, wControl);
+		
+		markManager = CoreSpringFactory.getImpl(MarkManager.class);
+		repositoryManager = RepositoryManager.getInstance();
+
+		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
+		tableConfig.setDownloadOffered(false);
+		tableConfig.setTableEmptyMessage(translate("bookmarks.nobookmarks"));
+		tableCtr = new TableController(tableConfig, ureq, getWindowControl(), getTranslator());
+		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.bm.title", 0, "choose", getLocale()));
+		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.bm.resource", 1, null, getLocale()));
+		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.bm.description", 2, null, getLocale()));
+		tableCtr.addColumnDescriptor(new StaticColumnDescriptor("delete", "table.header.delete", translate("action.delete")));
+		listenTo(tableCtr);
+
+		populateBmTable();
+		putInitialPanel(tableCtr.getInitialComponent());
+	}
+
+	/**
+	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
+	 *      org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
+	 */
+	public void event(UserRequest ureq, Component source, Event event) {
+	  // no events		
+	}
+
+	/**
+	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
+	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
+	 */
+	public void event(UserRequest ureq, Controller source, Event event) {
+		// if row has been cklicked
+		if (source == tableCtr) {
+			if (event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
+				TableEvent te = (TableEvent) event;
+				String actionid = te.getActionId();
+				int rowid = te.getRowId();
+				Bookmark bookmark = (Bookmark)tableCtr.getTableDataModel().getObject(rowid);
+				if (actionid.equals("choose")) {
+					String businessPath = bookmark.getBusinessPath();
+					NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
+				} else if (actionid.equals("delete")) {
+					dc = activateYesNoDialog(ureq, null, translate("bookmark.delete.willyou"), dc);
+					dc.setUserObject(bookmark);
+				}
+			}
+		} else if (source == dc) {
+			if (DialogBoxUIFactory.isYesEvent(event)) {
+				Bookmark bookmark = (Bookmark)dc.getUserObject();
+				markManager.deleteMark(bookmark.getOLATResourceable(), bookmark.getResSubPath());
+				showInfo("bookmark.delete.successfull");
+				populateBmTable();
+			}
+		}
+	}
+
+	private void populateBmTable() {
+		List<Mark> marks = markManager.getMarks(getIdentity(), types);
+		List<Bookmark> bookmarks = convertMarkToBookmark(marks);
+		TableDataModel<Bookmark> tdm = new BmTableDataModel(bookmarks, getLocale());
+		tableCtr.setTableDataModel(tdm);
+	}
+	
+	private  List<Bookmark> convertMarkToBookmark(List<Mark> items) {
+		List<Bookmark> convertedList = new ArrayList<Bookmark>();
+		
+		List<Long> reKeys = new ArrayList<Long>();
+		for(Mark mark:items) {
+			reKeys.add(mark.getOLATResourceable().getResourceableId());
+		}
+		
+		List<RepositoryEntry> repositoryEntries = repositoryManager.lookupRepositoryEntries(reKeys);
+		Map<Long,RepositoryEntry> keyToRepositoryEntryMap = new HashMap<Long,RepositoryEntry>();
+		for(RepositoryEntry repositoryEntry:repositoryEntries) {
+			keyToRepositoryEntryMap.put(repositoryEntry.getKey(), repositoryEntry);
+		}
+
+		for(Mark mark:items) {
+			RepositoryEntry repositoryEntry = keyToRepositoryEntryMap.get(mark.getOLATResourceable().getResourceableId());
+			convertedList.add(new Bookmark(mark, repositoryEntry));
+		}
+		return convertedList;
+	}
+
+	/**
+	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
+	 */
+	protected void doDispose() {
+		// disposed by BasicController		
+	}
+	
+	private class BmTableDataModel extends DefaultTableDataModel<Bookmark> {
+		private Locale locale;
+
+		/**
+		 * @param objects
+		 * @param locale
+		 */
+		public BmTableDataModel(List<Bookmark> objects, Locale locale) {
+			super(objects);
+			this.locale = locale;
+		}
+
+		/**
+		 * @see org.olat.core.gui.components.table.TableDataModel#getValueAt(int, int)
+		 */
+		public final Object getValueAt(int row, int col) {
+			Bookmark bm = getObject(row);
+			switch (col) {
+				case 0:
+					return getBookmarkTitle(bm);
+				case 1:
+					String resType = bm.getDisplayrestype();
+					return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale));
+				case 2:
+					String desc = bm.getDescription();
+					return (desc == null ? "n/a" : desc);
+				default:
+					return "error";
+			}
+		}
+
+		/**
+		 * @see org.olat.core.gui.components.table.TableDataModel#getColumnCount()
+		 */
+		public int getColumnCount() {
+			return 3;
+		}
+		
+		/**
+		 * Get displayname of a bookmark entry. If bookmark entry a RepositoryEntry 
+		 * and is this RepositoryEntry closed then add a prefix to the title.
+		 */
+		private String getBookmarkTitle(Bookmark bookmark) {
+			String title = bookmark.getTitle();
+			if (RepositoryManager.getInstance().createRepositoryEntryStatus(bookmark.getStatusCode()).isClosed()) {
+				PackageTranslator pT = new PackageTranslator(RepositoryEntryStatus.class.getPackage().getName(), locale);
+				title = "[" + pT.translate("title.prefix.closed") + "] ".concat(title);
+			}
+			return title;
+		}
+	}
+}
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortlet.java b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortlet.java
new file mode 100644
index 00000000000..9586016ef2f
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortlet.java
@@ -0,0 +1,114 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.org
+* <p>
+* Licensed under the Apache License, Version 2.0 (the "License"); <br>
+* you may not use this file except in compliance with the License.<br>
+* You may obtain a copy of the License at
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <p>
+* Unless required by applicable law or agreed to in writing,<br>
+* software distributed under the License is distributed on an "AS IS" BASIS, <br>
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+* See the License for the specific language governing permissions and <br>
+* limitations under the License.
+* <p>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <hr>
+* <a href="http://www.openolat.org">
+* OpenOLAT - Online Learning and Training</a><br>
+* This file has been modified by the OpenOLAT community. Changes are licensed
+* under the Apache 2.0 license as the original file.
+*/
+
+package org.olat.core.commons.services.mark.ui;
+
+import java.util.Map;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.portal.AbstractPortlet;
+import org.olat.core.gui.control.generic.portal.Portlet;
+import org.olat.core.gui.control.generic.portal.PortletToolController;
+import org.olat.core.gui.translator.Translator;
+import org.olat.core.util.Util;
+/**
+ * Description:<br>
+ * Displays the list of most used bookmarks
+ * <P>
+ * Initial Date:  08.07.2005 <br>
+ * @author gnaegi
+ */
+public class BookmarksPortlet extends AbstractPortlet {
+	
+	private BookmarksPortletRunController runCtr;
+		
+	/**
+	 * @see org.olat.gui.control.generic.portal.AbstractPortlet#createInstance(org.olat.core.gui.control.WindowControl, org.olat.core.gui.UserRequest, java.util.Map)
+	 */
+	public Portlet createInstance(WindowControl wControl, UserRequest ureq, Map<String,String> configuration) {
+		Translator translator = Util.createPackageTranslator(BookmarksPortlet.class, ureq.getLocale());
+		Portlet p = new BookmarksPortlet();
+		p.setName(this.getName());
+		p.setConfiguration(configuration);			
+		p.setTranslator(translator);
+		return p;
+	}
+	
+	/**
+	 * @see org.olat.gui.control.generic.portal.Portlet#getTitle()
+	 */
+	public String getTitle() {
+		return getTranslator().translate("bookmarksPortlet.title");
+	}
+
+	/**
+	 * @see org.olat.gui.control.generic.portal.Portlet#getDescription()
+	 */
+	public String getDescription() {
+		return getTranslator().translate("bookmarksPortlet.description");
+	}
+
+	/**
+	 * @see org.olat.gui.control.generic.portal.Portlet#getInitialRunComponent(org.olat.core.gui.control.WindowControl, org.olat.core.gui.UserRequest)
+	 */
+	public Component getInitialRunComponent(WindowControl wControl, UserRequest ureq) {
+		if(this.runCtr != null) runCtr.dispose();
+		this.runCtr = new BookmarksPortletRunController(wControl, ureq, getTranslator(), this.getName());		
+		return this.runCtr.getInitialComponent();
+	}
+
+	/**
+	 * @see org.olat.core.gui.control.Disposable#dispose(boolean)
+	 */
+	public void dispose() {
+		disposeRunComponent();
+	}
+
+	/**
+	 * @see org.olat.gui.control.generic.portal.Portlet#getCssClass()
+	 */
+	public String getCssClass() {
+		return "o_portlet_bookmark";
+	}
+
+	/**
+	 * @see org.olat.gui.control.generic.portal.Portlet#disposeRunComponent(boolean)
+	 */
+	public void disposeRunComponent() {
+		if (this.runCtr != null) {
+			this.runCtr.dispose();
+			this.runCtr = null;
+		}
+	}
+	
+	public PortletToolController<Bookmark> getTools(UserRequest ureq, WindowControl wControl) {
+		if (runCtr == null ) {
+			this.runCtr = new BookmarksPortletRunController(wControl, ureq, getTranslator(), this.getName());		
+		}
+		return runCtr.createSortingTool(ureq, wControl);	
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java
new file mode 100644
index 00000000000..d31de3a1e83
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java
@@ -0,0 +1,415 @@
+/**
+* OLAT - Online Learning and Training<br>
+* http://www.olat.org
+* <p>
+* Licensed under the Apache License, Version 2.0 (the "License"); <br>
+* you may not use this file except in compliance with the License.<br>
+* You may obtain a copy of the License at
+* <p>
+* http://www.apache.org/licenses/LICENSE-2.0
+* <p>
+* Unless required by applicable law or agreed to in writing,<br>
+* software distributed under the License is distributed on an "AS IS" BASIS, <br>
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+* See the License for the specific language governing permissions and <br>
+* limitations under the License.
+* <p>
+* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
+* University of Zurich, Switzerland.
+* <hr>
+* <a href="http://www.openolat.org">
+* OpenOLAT - Online Learning and Training</a><br>
+* This file has been modified by the OpenOLAT community. Changes are licensed
+* under the Apache 2.0 license as the original file.
+*/
+
+package org.olat.core.commons.services.mark.ui;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
+import org.olat.core.CoreSpringFactory;
+import org.olat.core.commons.services.mark.Mark;
+import org.olat.core.commons.services.mark.MarkManager;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.components.link.LinkFactory;
+import org.olat.core.gui.components.table.ColumnDescriptor;
+import org.olat.core.gui.components.table.DefaultColumnDescriptor;
+import org.olat.core.gui.components.table.Table;
+import org.olat.core.gui.components.table.TableController;
+import org.olat.core.gui.components.table.TableEvent;
+import org.olat.core.gui.components.table.TableGuiConfiguration;
+import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.portal.AbstractPortletRunController;
+import org.olat.core.gui.control.generic.portal.PortletDefaultTableDataModel;
+import org.olat.core.gui.control.generic.portal.PortletEntry;
+import org.olat.core.gui.control.generic.portal.PortletToolSortingControllerImpl;
+import org.olat.core.gui.control.generic.portal.SortingCriteria;
+import org.olat.core.gui.translator.PackageTranslator;
+import org.olat.core.gui.translator.Translator;
+import org.olat.core.id.context.BusinessControl;
+import org.olat.core.id.context.BusinessControlFactory;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryEntryStatus;
+import org.olat.repository.RepositoryManager;
+
+/**
+ * Description:<br>
+ * Run view controller for the groups list portlet
+ * <P>
+ * Initial Date:  11.07.2005 <br>
+ * @author gnaegi
+ */
+public class BookmarksPortletRunController extends AbstractPortletRunController<Bookmark> {
+	
+	private static final String CMD_LAUNCH = "cmd.launch";
+	
+	private TableController tableCtr;
+	private BookmarkPortletTableDataModel bookmarkListModel;
+	private VelocityContainer bookmarksVC;		
+	private Link showAllLink;
+	
+	private final MarkManager markManager;
+	private final RepositoryManager repositoryManager;
+	private final List<String> types = Collections.singletonList("RepositoryEntry");
+			
+	/**
+	 * Constructor
+	 * @param ureq
+	 * @param component
+	 */
+	public BookmarksPortletRunController(WindowControl wControl, UserRequest ureq, Translator trans, String portletName) { 		
+		super(wControl, ureq, trans, portletName);
+		sortingTermsList.add(SortingCriteria.TYPE_SORTING);
+		sortingTermsList.add(SortingCriteria.ALPHABETICAL_SORTING);
+		sortingTermsList.add(SortingCriteria.DATE_SORTING);
+		
+		repositoryManager = RepositoryManager.getInstance();
+		markManager = CoreSpringFactory.getImpl(MarkManager.class);
+		
+		bookmarksVC = createVelocityContainer("bookmarksPortlet");
+		showAllLink = LinkFactory.createLink("bookmarksPortlet.showAll", bookmarksVC, this);
+				
+		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
+		tableConfig.setTableEmptyMessage(trans.translate("bookmarksPortlet.nobookmarks"));
+		tableConfig.setDisplayTableHeader(false);
+		tableConfig.setCustomCssClass("b_portlet_table");
+		tableConfig.setDisplayRowCount(false);
+		tableConfig.setPageingEnabled(false);
+		tableConfig.setDownloadOffered(false);
+		//disable the default sorting for this table
+		tableConfig.setSortingEnabled(false); 
+		tableCtr = new TableController(tableConfig, ureq, getWindowControl(), trans);
+		listenTo(tableCtr);
+		// dummy header key, won't be used since setDisplayTableHeader is set to false
+		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("bookmarksPortlet.bgname", 0, CMD_LAUNCH, trans.getLocale()));
+		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("bookmarksPortlet.type", 1, null, trans.getLocale(), ColumnDescriptor.ALIGNMENT_RIGHT));
+		
+		sortingCriteria = getPersistentSortingConfiguration(ureq);
+		reloadModel(sortingCriteria);
+
+		bookmarksVC.put("table", tableCtr.getInitialComponent());						
+		putInitialPanel(bookmarksVC);
+	}
+	
+	/**
+	 * Gets all bookmarks for this identity and converts the list into an PortletEntry list.
+	 * @param ureq
+	 * @return
+	 */
+	private List<PortletEntry<Bookmark>> getAllPortletEntries() {
+		List<Mark> markList = markManager.getMarks(getIdentity(), types);
+		List<Bookmark> bookmarkList = convertMarkToBookmark(markList);
+		return convertBookmarkToPortletEntryList(bookmarkList);
+	}
+	
+	/**
+	 * Converts list.
+	 * @param items
+	 * @return
+	 */
+	private List<PortletEntry<Bookmark>> convertBookmarkToPortletEntryList(List<Bookmark> items) {
+		List<PortletEntry<Bookmark>> convertedList = new ArrayList<PortletEntry<Bookmark>>();
+		for(Bookmark mark:items) {
+			convertedList.add(new BookmarkPortletEntry(mark));
+		}
+		return convertedList;
+	}
+	
+	private  List<Bookmark> convertMarkToBookmark(List<Mark> items) {
+		List<Bookmark> convertedList = new ArrayList<Bookmark>();
+		
+		List<Long> reKeys = new ArrayList<Long>();
+		for(Mark mark:items) {
+			reKeys.add(mark.getOLATResourceable().getResourceableId());
+		}
+		
+		List<RepositoryEntry> repositoryEntries = repositoryManager.lookupRepositoryEntries(reKeys);
+		Map<Long,RepositoryEntry> keyToRepositoryEntryMap = new HashMap<Long,RepositoryEntry>();
+		for(RepositoryEntry repositoryEntry:repositoryEntries) {
+			keyToRepositoryEntryMap.put(repositoryEntry.getKey(), repositoryEntry);
+		}
+
+		for(Mark mark:items) {
+			RepositoryEntry repositoryEntry = keyToRepositoryEntryMap.get(mark.getOLATResourceable().getResourceableId());
+			convertedList.add(new Bookmark(mark, repositoryEntry));
+		}
+		return convertedList;
+	}
+	
+	/**
+	 * Reloads the bookmarks table model according with the input SortingCriteria.
+	 * It first evaluate the sortingCriteria type; if auto get bookmarks from BookmarkManager
+	 * and sort the item list according with the sortingCriteria. 
+	 * Else get the manually sorted list.
+	 * @param identity
+	 * @param sortingCriteria
+	 */
+	protected void reloadModel(SortingCriteria sortingCriteria) {
+		if (sortingCriteria.getSortingType() == SortingCriteria.AUTO_SORTING) {
+			List<Mark> markList = markManager.getMarks(getIdentity(), types);
+			List<Bookmark> bookmarkList = convertMarkToBookmark(markList);
+			bookmarkList = getSortedList(bookmarkList, sortingCriteria );
+
+			List<PortletEntry<Bookmark>> entries = convertBookmarkToPortletEntryList(bookmarkList);
+			bookmarkListModel = new BookmarkPortletTableDataModel(entries, getLocale());
+			tableCtr.setTableDataModel(bookmarkListModel);
+		} else {
+			reloadModel(this.getPersistentManuallySortedItems());
+		}
+	}
+	
+	/**
+	 * Sets the table model if the sorted items list is already available.
+	 * @param ureq
+	 * @param sortedItems
+	 */
+	protected void reloadModel(List<PortletEntry<Bookmark>> sortedItems) {					
+		bookmarkListModel = new BookmarkPortletTableDataModel(sortedItems, getLocale());
+		tableCtr.setTableDataModel(bookmarkListModel);
+	}
+
+	/**
+	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
+	 */
+	public void event(UserRequest ureq, Component source, Event event) {		
+		if (source == showAllLink){
+			// activate homes tab in top navigation and active bookmarks menu item
+			String resourceUrl = "[HomeSite:" + ureq.getIdentity().getKey() + "][bookmarks:0]";
+			BusinessControl bc = BusinessControlFactory.getInstance().createFromString(resourceUrl);
+			WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, getWindowControl());
+			NewControllerFactory.getInstance().launch(ureq, bwControl);
+		} 
+	}
+
+	/**
+	 * @see org.olat.core.gui.control.ControllerEventListener#dispatchEvent(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
+	 */
+	@Override
+	public void event(UserRequest ureq, Controller source, Event event) {
+		super.event(ureq, source, event);
+		if (source == tableCtr) {
+			if (event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
+				TableEvent te = (TableEvent) event;
+				String actionid = te.getActionId();
+				if (actionid.equals(CMD_LAUNCH)) {
+					int rowid = te.getRowId();
+					PortletEntry<Bookmark> bookmark = bookmarkListModel.getObject(rowid);
+					String businessPath = bookmark.getValue().getBusinessPath();
+					NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
+				}
+			}
+		} 
+	}
+
+  
+  /**
+   * Retrieve the persistent manually sorted items for the current portlet.
+   * @param ureq
+   * @return
+   */
+  private List<PortletEntry<Bookmark>> getPersistentManuallySortedItems() {
+  	List<PortletEntry<Bookmark>> entries = getAllPortletEntries();
+		return getPersistentManuallySortedItems(entries);		
+	}
+	
+	/**
+	 * Retrieves the persistent sortingCriteria and the persistent manually sorted, if any, 
+	 * creates the table model for the manual sorting, and instantiates the PortletToolSortingControllerImpl.
+	 * @param ureq
+	 * @param wControl
+	 * @return a PortletToolSortingControllerImpl istance.
+	 */
+	protected PortletToolSortingControllerImpl<Bookmark> createSortingTool(UserRequest ureq, WindowControl wControl) {
+		if(portletToolsController==null) {			
+			List<PortletEntry<Bookmark>> entries = getAllPortletEntries();
+			PortletDefaultTableDataModel<Bookmark> tableDataModel = new BookmarkManualSortingTableDataModel(entries, ureq.getLocale());
+			
+			List<PortletEntry<Bookmark>> sortedItems = getPersistentManuallySortedItems(); 
+			
+			portletToolsController = new PortletToolSortingControllerImpl<Bookmark>(ureq, wControl, getTranslator(), sortingCriteria, tableDataModel, sortedItems);
+			listenTo(portletToolsController);
+			portletToolsController.setConfigManualSorting(true);
+			portletToolsController.setConfigAutoSorting(true);
+		}		
+		return portletToolsController;
+	}
+	
+	/**
+	 * Comparator implementation used for sorting bookmarks entries according with the
+	 * input sortingCriteria.
+	 * <p>
+	 * @param sortingCriteria
+	 * @return a Comparator for the input sortingCriteria
+	 */
+	protected Comparator<Bookmark> getComparator(final SortingCriteria sortingCriteria) {
+		return new Comparator<Bookmark>(){			
+			public int compare(final Bookmark bookmark1, final Bookmark bookmark2) {	
+				int comparisonResult = 0;
+			  if(sortingCriteria.getSortingTerm()==SortingCriteria.ALPHABETICAL_SORTING) {			  	
+			  	comparisonResult = collator.compare(bookmark1.getTitle(), bookmark2.getTitle());			  				  	
+			  } else if(sortingCriteria.getSortingTerm()==SortingCriteria.DATE_SORTING) {
+			  	comparisonResult = bookmark1.getCreationDate().compareTo(bookmark2.getCreationDate());
+			  } else if(sortingCriteria.getSortingTerm()==SortingCriteria.TYPE_SORTING) {
+			  	comparisonResult = bookmark1.getDisplayrestype().compareTo(bookmark2.getDisplayrestype());
+			  }
+			  if(!sortingCriteria.isAscending()) {
+			  	//if not isAscending return (-comparisonResult)			  	
+			  	return -comparisonResult;
+			  }
+			  return comparisonResult;
+			}};
+	}
+	
+	/**
+	 * 
+	 * PortletDefaultTableDataModel implementation for the current portlet.
+	 * 
+	 * <P>
+	 * Initial Date:  10.12.2007 <br>
+	 * @author Lavinia Dumitrescu
+	 */
+	private static class BookmarkPortletTableDataModel extends PortletDefaultTableDataModel<Bookmark> {
+		private final Locale locale;
+
+		public BookmarkPortletTableDataModel(List<PortletEntry<Bookmark>> objects, Locale locale) {
+			super(objects, 2);
+			this.locale = locale;
+		}
+		
+		public Object getValueAt(int row, int col) {
+			PortletEntry<Bookmark> entry = getObject(row);
+			Bookmark bookmark = entry.getValue();
+			switch (col) {
+			case 0:
+				String name = getBookmarkTitle(bookmark);
+				name = StringEscapeUtils.escapeHtml(name).toString();
+				return name;
+			case 1:
+				String resType = bookmark.getDisplayrestype();
+				return ControllerFactory.translateResourceableTypeName(resType, locale);
+			default:
+				return "ERROR";
+			}
+    }
+		
+		/**
+		 * Get displayname of a bookmark entry. If bookmark entry a RepositoryEntry 
+		 * and is this RepositoryEntry closed then add a prefix to the title.
+		 */
+		private String getBookmarkTitle(Bookmark bookmark) {
+			String title = bookmark.getTitle();
+			if (RepositoryManager.getInstance().createRepositoryEntryStatus(bookmark.getStatusCode()).isClosed()) {
+				PackageTranslator pT = new PackageTranslator(RepositoryEntryStatus.class.getPackage().getName(), locale);
+				title = "[" + pT.translate("title.prefix.closed") + "] ".concat(title);
+			}
+			return title;
+		}
+	}
+	
+	
+	/**
+	 * 
+	 * Description:<br>
+	 * TableDataModel implementation for the bookmark manual sorting.
+	 * 
+	 * <P>
+	 * Initial Date:  23.11.2007 <br>
+	 * @author Lavinia Dumitrescu
+	 */
+	private static class BookmarkManualSortingTableDataModel extends PortletDefaultTableDataModel<Bookmark> {
+		private final Locale locale;
+
+		/**
+		 * @param objects
+		 * @param locale
+		 */
+		public BookmarkManualSortingTableDataModel(List<PortletEntry<Bookmark>> objects, Locale locale) {
+			super(objects, 4);
+			this.locale = locale;
+		}
+
+		/**
+		 * @see org.olat.core.gui.components.table.TableDataModel#getValueAt(int, int)
+		 */
+		public final Object getValueAt(int row, int col) {
+			PortletEntry<Bookmark> entry = getObject(row);
+			Bookmark bm = entry.getValue();
+			switch (col) {
+				case 0:
+					return bm.getTitle();
+				case 1:
+					String desc = bm.getDescription();
+					return (desc == null ? "n/a" : desc);
+				case 2:
+					String resType = bm.getDisplayrestype();
+					return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale));
+				case 3:
+					Date date = bm.getCreationDate();
+					//return DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, getTranslator().getLocale()).format(date);
+					//return date else the sorting doesn't work properly
+					return date;
+				default:
+					return "error";
+			}
+		}
+	}
+	
+	/**
+	 * 
+	 * PortletEntry impl for Bookmark values.
+	 * 
+	 * <P>
+	 * Initial Date:  10.12.2007 <br>
+	 * @author Lavinia Dumitrescu
+	 */
+	private static class BookmarkPortletEntry implements PortletEntry<Bookmark> {
+  	private final Bookmark mark;
+  	
+  	public BookmarkPortletEntry(Bookmark mark) {
+  		this.mark = mark;
+  	}
+  	
+  	public Long getKey() {
+  		return mark.getKey();
+  	}
+  	
+  	public Bookmark getValue() {
+  		return mark;
+  	}
+  }	
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_content/bookmarksPortlet.html b/src/main/java/org/olat/core/commons/services/mark/ui/_content/bookmarksPortlet.html
new file mode 100644
index 00000000000..1a3c570f598
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_content/bookmarksPortlet.html
@@ -0,0 +1,4 @@
+<div class="b_portlet_showall">
+	$r.render("bookmarksPortlet.showAll")
+</div>
+$r.render("table")
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_ar.properties
new file mode 100644
index 00000000000..384a81fd421
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_ar.properties
@@ -0,0 +1,30 @@
+#Wed Feb 24 11:14:37 CET 2010
+action.choose=\u0627\u062E\u062A\u064A\u0627\u0631
+action.delete=\u062D\u0630\u0641
+bookmark.delete.successfull=\u062A\u0645 \u062D\u0630\u0641 \u0627\u0644\u0645\u0641\u0636\u0644\u0629.
+bookmark.delete.unsuccessfull=\u0644\u0627 \u064A\u0645\u0643\u0646 \u062D\u0630\u0641 \u0627\u0644\u0645\u0641\u0636\u0644\u0629.
+bookmark.delete.willyou=\u0647\u0644 \u062A\u0631\u064A\u062F \u062D\u0630\u0641 \u0647\u0630\u0647 \u0627\u0644\u0645\u0641\u0636\u0644\u0629\u061F
+bookmarks.nobookmarks=\u0644\u0645 \u064A\u062A\u0645 \u062D\u0641\u0638 \u0623\u0649 \u0645\u0648\u0627\u0642\u0639 \u0645\u0641\u0636\u0644\u0629 \u0634\u062E\u0635\u064A\u0629.
+bookmarks.title=\u0627\u0644\u0645\u0641\u0636\u0644\u0627\u062A \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0649
+bookmarksPortlet.auto.sorting.title=\u062A\u0631\u062A\u064A\u0628 \u062A\u0644\u0642\u0627\u0626\u0649 \u0644\u0644\u0645\u0648\u0627\u0642\u0639 \u0627\u0644\u0645\u0641\u0636\u0644\u0629
+bookmarksPortlet.description=\u062F\u062E\u0648\u0644 \u0633\u0631\u064A\u0639 \u0625\u0644\u0649 \u0627\u0644\u0645\u0648\u0627\u0642\u0639 \u0627\u0644\u0645\u0641\u0636\u0644\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u0629 \u0628\u0627\u0633\u062A\u0645\u0631\u0627\u0631.
+bookmarksPortlet.manual.sorting.title=\u062A\u0631\u062A\u064A\u0628 \u0627\u0644\u0645\u0648\u0627\u0642\u0639 \u0627\u0644\u0645\u0641\u0636\u0644\u0629 \u064A\u062F\u0648\u064A\u0627\u064B
+bookmarksPortlet.nobookmarks=\u0644\u0627 \u062A\u0648\u062C\u062F \u0644\u062F\u064A\u0643 \u0645\u0648\u0627\u0642\u0639 \u0645\u0641\u0636\u0644\u0629.
+bookmarksPortlet.showAll=\u0639\u0631\u0636 \u0627\u0644\u0643\u0644
+bookmarksPortlet.title=\u0627\u0644\u0645\u0648\u0627\u0642\u0639 \u0627\u0644\u0645\u0641\u0636\u0644\u0629 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0649
+error.title.empty=\u064A\u0631\u062C\u0649 \u0625\u062F\u062E\u0627\u0644 \u0627\u0644\u0639\u0646\u0648\u0627\u0646.
+form.bmdescription=\u0627\u0644\u0648\u0635\u0641
+form.bmtitle=\u0627\u0644\u0639\u0646\u0648\u0627\u0646
+form.bmtype=\u0645\u0635\u062F\u0631 \u0623\u0648\u0644\u0627\u062A
+table.bm.description=\u0627\u0644\u0648\u0635\u0641
+table.bm.resource=\u0646\u0648\u0639 \u0627\u0644\u0645\u0635\u062F\u0631
+table.bm.title=\u0627\u0644\u0639\u0646\u0648\u0627\u0646
+table.header.delete=\u062D\u0630\u0641
+table.header.edit=\u062A\u0639\u062F\u064A\u0644
+table.manual.sorting.date=\u0627\u0644\u062A\u0627\u0631\u064A\u062E
+table.manual.sorting.description=\u0627\u0644\u0648\u0635\u0641
+table.manual.sorting.title=\u0627\u0644\u0639\u0646\u0648\u0627\u0646
+table.manual.sorting.type=\u0627\u0644\u0646\u0648\u0639
+warn.cantlaunch=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0639\u0631\u0636 \u0647\u0630\u0627 \u0627\u0644\u0645\u0635\u062F\u0631\u060C \u0641\u0625\u0645\u0627 \u0623\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u0641\u0636\u0644\u0629 \u0644\u0645 \u062A\u0639\u062F \u0635\u0627\u0644\u062D\u0629 \u0623\u0648 \u0623\u0646\u0643 \u0644\u064A\u0633 \u0644\u062F\u064A\u0643 \u0635\u0644\u0627\u062D\u064A\u0629 \u0627\u0633\u062A\u0639\u0631\u0627\u0636 \u0627\u0644\u0645\u0635\u062F\u0631 \u0630\u0649 \u0627\u0644\u0635\u0644\u0629.
+menu.bookmarks=\u0627\u0644\u0645\u0641\u0636\u0644\u0627\u062A
+menu.bookmarks.alt=\u0628\u062F\u0627\u064A\u0629 \u0648\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0645\u0641\u0636\u0644\u0627\u062A \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0649
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_bg.properties
new file mode 100644
index 00000000000..2c75e4659bf
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_bg.properties
@@ -0,0 +1,30 @@
+#Wed Jun 03 20:15:25 CEST 2009
+action.choose=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435
+action.delete=\u0418\u0437\u0442\u0440\u0438\u0439\u0442\u0435
+bookmark.delete.successfull=\u041B\u044E\u0431\u0438\u043C\u0430\u0442\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0435 \u0438\u0437\u0442\u0440\u0438\u0442\u0430.
+bookmark.delete.unsuccessfull=\u041B\u044E\u0431\u0438\u043C\u0430\u0442\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u044A\u0434\u0435 \u0438\u0437\u0442\u0440\u0438\u0442\u0430.
+bookmark.delete.willyou=\u041D\u0430\u0438\u0441\u0442\u0438\u043D\u0430 \u043B\u0438 \u0438\u0441\u043A\u0430\u0442\u0435 \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0435\u0442\u0435 \u0442\u0430\u0437\u0438 \u043B\u044E\u0431\u0438\u043C\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430?
+bookmarks.nobookmarks=\u0412\u0438\u0435 \u043D\u044F\u043C\u0430\u0442\u0435 \u0437\u0430\u043F\u0430\u0437\u0435\u043D\u0438 \u043B\u044E\u0431\u0438\u043C\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0438.
+bookmarks.title=\u041C\u043E\u0438\u0442\u0435 \u043B\u044E\u0431\u0438\u043C\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0438
+bookmarksPortlet.auto.sorting.title=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E \u0441\u043E\u0440\u0442\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043B\u044E\u0431\u0438\u043C\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0438
+bookmarksPortlet.description=\u0411\u044A\u0440\u0437 \u0434\u043E\u0441\u0442\u044A\u043F \u0434\u043E \u0447\u0435\u0441\u0442\u043E \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u043D\u0438 \u043B\u044E\u0431\u0438\u043C\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0438.
+bookmarksPortlet.manual.sorting.title=\u0420\u044A\u0447\u043D\u043E \u0441\u043E\u0440\u0442\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043B\u044E\u0431\u0438\u043C\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0438
+bookmarksPortlet.nobookmarks=\u041D\u044F\u043C\u0430\u0442\u0435 \u043B\u044E\u0431\u0438\u043C\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0438
+bookmarksPortlet.showAll=\u041F\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0432\u0441\u0438\u0447\u043A\u0438
+bookmarksPortlet.title=\u041C\u043E\u0438\u0442\u0435 \u043B\u044E\u0431\u0438\u043C\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0438
+error.title.empty=\u041C\u043E\u043B\u044F, \u043D\u0430\u043F\u0438\u0448\u0435\u0442\u0435 \u0437\u0430\u0433\u043B\u0430\u0432\u0438\u0435.
+form.bmdescription=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+form.bmtitle=\u0417\u0430\u0433\u043B\u0430\u0432\u0438\u0435
+form.bmtype=\u0421\u0438\u0441\u0442\u0435\u043C\u0435\u043D \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B
+table.bm.description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+table.bm.resource=\u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B
+table.bm.title=\u0417\u0430\u0433\u043B\u0430\u0432\u0438\u0435
+table.header.delete=\u0418\u0437\u0442\u0440\u0438\u0439\u0442\u0435
+table.header.edit=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u0439\u0442\u0435
+table.manual.sorting.date=\u0414\u0430\u0442\u0430
+table.manual.sorting.description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+table.manual.sorting.title=\u0417\u0430\u0433\u043B\u0430\u0432\u0438\u0435
+table.manual.sorting.type=\u0412\u0438\u0434
+warn.cantlaunch=\u0422\u043E\u0437\u0438 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043F\u043E\u043A\u0430\u0437\u0430\u043D. \u0418\u043B\u0438 \u0432\u0435\u0447\u0435 \u0435 \u043D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0438\u043B\u0438 \u0432\u0438\u0435 \u043D\u044F\u043C\u0430\u0442\u0435 \u043F\u0440\u0430\u0432\u043E \u0434\u0430 \u043E\u0442\u0432\u0430\u0440\u044F\u0442\u0435 \u0441\u044A\u043E\u0442\u0432\u0435\u0442\u043D\u0438\u044F \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B.
+menu.bookmarks=\u041B\u044E\u0431\u0438\u043C\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0438
+menu.bookmarks.alt=\u041E\u0442\u0432\u043E\u0440\u0435\u0442\u0435 \u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u0439\u0442\u0435 \u043B\u044E\u0431\u0438\u043C\u0438\u0442\u0435 \u0441\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0438
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_cs.properties
new file mode 100644
index 00000000000..8d292b5c3d6
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_cs.properties
@@ -0,0 +1,30 @@
+#Mon Mar 02 09:54:13 CET 2009
+action.choose=Vybrat
+action.delete=Smazat
+bookmark.delete.successfull=Z\u00E1lo\u017Eka byla smaz\u00E1na
+bookmark.delete.unsuccessfull=Z\u00E1lo\u017Eka nem\u016F\u017Ee b\u00FDt smaz\u00E1na
+bookmark.delete.willyou=Opravdu chcete smazat tuto z\u00E1lo\u017Eku?
+bookmarks.nobookmarks=Nem\u00E1te zat\u00EDm \u017E\u00E1dn\u00E9 vlastn\u00ED z\u00E1lo\u017Eky
+bookmarks.title=M\u00E9 z\u00E1lo\u017Eky
+bookmarksPortlet.auto.sorting.title=Automatick\u00E9 \u0159azen\u00ED z\u00E1lo\u017Eek
+bookmarksPortlet.description=Rychl\u00ED p\u0159\u00EDstup k nejpou\u017E\u00EDvan\u011Bj\u0161\u00EDm z\u00E1lo\u017Ek\u00E1m
+bookmarksPortlet.manual.sorting.title=Ru\u010Dn\u00ED \u0159azen\u00ED z\u00E1lo\u017Eek
+bookmarksPortlet.nobookmarks=Nem\u00E1te z\u00E1lo\u017Eky
+bookmarksPortlet.showAll=Zobrazit v\u0161e
+bookmarksPortlet.title=Moje z\u00E1lo\u017Eky
+error.title.empty=Pros\u00EDm vlo\u017Ete n\u00E1zev
+form.bmdescription=Popis
+form.bmtitle=N\u00E1zev
+form.bmtype=Zdroje OLATu
+table.bm.description=Popis
+table.bm.resource=Zdroj
+table.bm.title=N\u00E1zev
+table.header.delete=Smazat
+table.header.edit=Upravit
+table.manual.sorting.date=Datum
+table.manual.sorting.description=Popis
+table.manual.sorting.title=N\u00E1zev
+table.manual.sorting.type=Typ
+warn.cantlaunch=Zdroj nem\u016F\u017Ee b\u00FDt zobrazen. Z\u00E1lo\u017Eka u\u017E nen\u00ED aktu\u00E1ln\u00ED nebo nem\u00E1te nastavena p\u0159\u00EDstupov\u00E1 pr\u00E1va k tomuto zdroji.
+menu.bookmarks=Z\u00E1lo\u017Eky
+menu.bookmarks.alt=Spustit a upravit z\u00E1lo\u017Eky
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_da.properties
new file mode 100644
index 00000000000..b7a41b95eee
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_da.properties
@@ -0,0 +1,24 @@
+#Mon Mar 02 09:54:08 CET 2009
+action.choose=V\u00E6lg
+action.delete=Slet
+bookmark.delete.successfull=Bogm\u00E6rket blev slettet
+bookmark.delete.unsuccessfull=Bogm\u00E6rket kunne ikke slettes
+bookmark.delete.willyou=Vil du virkelig slette dette bogm\u00E6rke
+bookmarks.nobookmarks=Du har ikke oprettet nogle  bogm\u00E6rker
+bookmarks.title=Mine bogm\u00E6rker
+bookmarksPortlet.description=Hurtig adgang til de bogm\u00E6rker, du bruger mest
+bookmarksPortlet.nobookmarks=Du har ingen bogm\u00E6rker
+bookmarksPortlet.showAll=Vis alle
+bookmarksPortlet.title=Mine bogm\u00E6rker
+error.title.empty=Indtast venligst en titel
+form.bmdescription=Beskrivelse
+form.bmtitle=OLAT-ressource
+form.bmtype=Titel
+table.bm.description=Beskrivelse
+table.bm.resource=Ressource
+table.bm.title=Titel
+table.header.delete=Slet
+table.header.edit=Rediger
+warn.cantlaunch=Ressourcen kunne ikke vises. Enten er bogm\u00E6rket ikke gyldigt l\u00E6ngere, eller ogs\u00E5 har du ikke rettigheder til at tilg\u00E5 denne ressource.
+menu.bookmarks=Bogm\u00E6rker
+menu.bookmarks.alt=Start og tilret mine bogm\u00E6rker
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_de.properties
new file mode 100644
index 00000000000..a31d2561db5
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_de.properties
@@ -0,0 +1,30 @@
+#Mon Mar 02 09:54:04 CET 2009
+action.choose=W\u00E4hlen
+action.delete=L\u00F6schen
+bookmark.delete.successfull=Das Bookmark wurde gel\u00F6scht.
+bookmark.delete.unsuccessfull=Das Bookmark konnte nicht gel\u00F6scht werden.
+bookmark.delete.willyou=Wollen Sie dieses Bookmark wirklich l\u00F6schen? 
+bookmarks.nobookmarks=Sie haben keine pers\u00F6nlichen Bookmarks angelegt.
+bookmarks.title=Meine Bookmarks
+bookmarksPortlet.auto.sorting.title=Bookmarks automatisch sortieren
+bookmarksPortlet.description=Schnellzugriff zu Ihren meistbenutzten Bookmarks
+bookmarksPortlet.manual.sorting.title=Bookmarks manuell sortieren  
+bookmarksPortlet.nobookmarks=Sie haben keine Bookmarks erstellt.
+bookmarksPortlet.showAll=Alle anzeigen
+bookmarksPortlet.title=Meine Bookmarks
+error.title.empty=Bitte geben Sie einen Titel an.
+form.bmdescription=Beschreibung
+form.bmtitle=Titel
+form.bmtype=OLAT-Ressource
+table.bm.description=Beschreibung
+table.bm.resource=Ressource
+table.bm.title=Titel
+table.header.delete=L\u00F6schen
+table.header.edit=Bearbeiten
+table.manual.sorting.date=Date
+table.manual.sorting.description=Beschreibung
+table.manual.sorting.title=Titel
+table.manual.sorting.type=Typ
+warn.cantlaunch=Die Ressource kann nicht angezeigt werden. Entweder ist das Bookmark nicht mehr g\u00FCltig, oder Sie haben nicht gen\u00FCgend Rechte, um das Bookmark auszuf\u00FChren.
+menu.bookmarks=Bookmarks
+menu.bookmarks.alt=Meine Bookmarks starten und editieren
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_el.properties
new file mode 100644
index 00000000000..b58bf2feacf
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_el.properties
@@ -0,0 +1,30 @@
+#Mon Mar 02 09:54:15 CET 2009
+action.choose=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE
+action.delete=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE
+bookmark.delete.successfull=\u039F \u03C3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B7\u03C2 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5
+bookmark.delete.unsuccessfull=\u039F \u03C3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5
+bookmark.delete.willyou=\u0395\u03AF\u03C3\u03C4\u03B5 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03BF\u03B9 \u03CC\u03C4\u03B9 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 \u03C4\u03BF \u03C3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B7?
+bookmarks.nobookmarks=\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C3\u03B5\u03B9 \u03BA\u03AC\u03C0\u03BF\u03B9\u03BF \u03C3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B7 \u03BC\u03AD\u03C7\u03C1\u03B9 \u03C3\u03C4\u03B9\u03B3\u03BC\u03AE\u03C2.
+bookmarks.title=\u03A4\u03B1 \u03B1\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03B1 \u03BC\u03BF\u03C5
+bookmarksPortlet.auto.sorting.title=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03C4\u03B1\u03BE\u03B9\u03BD\u03CC\u03BC\u03B7\u03C3\u03B7 \u03C4\u03C9\u03BD \u0391\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03C9\u03BD \u03BC\u03BF\u03C5
+bookmarksPortlet.description=\u0393\u03C1\u03AE\u03B3\u03BF\u03C1\u03B7 \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 \u03C3\u03C4\u03BF\u03C5\u03C2 \u03C3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B5\u03C2 \u03C0\u03BF\u03C5 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B5 \u03C3\u03C5\u03C7\u03BD\u03CC\u03C4\u03B5\u03C1\u03B1
+bookmarksPortlet.manual.sorting.title=\u03A7\u03B5\u03B9\u03C1\u03BF\u03BA\u03AF\u03BD\u03B7\u03C4\u03B7 \u03C4\u03B1\u03BE\u03B9\u03BD\u03CC\u03BC\u03B7\u03C3\u03B7 \u03C4\u03C9\u03BD \u0391\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03C9\u03BD \u03BC\u03BF\u03C5  
+bookmarksPortlet.nobookmarks=\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03C3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B5\u03C2
+bookmarksPortlet.showAll=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03CC\u03BB\u03C9\u03BD
+bookmarksPortlet.title=\u03A4\u03B1 \u03B1\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03B1 \u03BC\u03BF\u03C5
+error.title.empty=\u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03BF\u03CD\u03BC\u03B5 \u03B5\u03B9\u03C3\u03AC\u03B3\u03B5\u03C4\u03B5 \u03C4\u03AF\u03C4\u03BB\u03BF
+form.bmdescription=\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE
+form.bmtitle=\u03A0\u03CC\u03C1\u03BF\u03C2 OLAT
+form.bmtype=\u03A4\u03AF\u03C4\u03BB\u03BF\u03C2
+table.bm.description=\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE
+table.bm.resource=\u03A0\u03CC\u03C1\u03BF\u03C2
+table.bm.title=\u03A4\u03AF\u03C4\u03BB\u03BF\u03C2
+table.header.delete=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE
+table.header.edit=\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1
+table.manual.sorting.date=\u0397\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1
+table.manual.sorting.description=\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE
+table.manual.sorting.title=\u03A4\u03AF\u03C4\u03BB\u03BF\u03C2
+table.manual.sorting.type=\u03A4\u03CD\u03C0\u03BF\u03C2
+warn.cantlaunch=\u039F \u03C0\u03CC\u03C1\u03BF\u03C2 \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C0\u03C1\u03BF\u03B2\u03BB\u03B7\u03B8\u03B5\u03AF. \u0395\u03AF\u03C4\u03B5 \u03BF \u03C3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF\u03C2, \u03B5\u03AF\u03C4\u03B5 \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03B4\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1 \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7\u03C2 \u03C4\u03BF\u03C5 \u03C3\u03C7\u03B5\u03C4\u03B9\u03BA\u03BF\u03CD \u03C0\u03CC\u03C1\u03BF\u03C5.
+menu.bookmarks=\u0391\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03B1
+menu.bookmarks.alt=\u0395\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03C4\u03C9\u03BD \u03B1\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03C9\u03BD \u03BC\u03BF\u03C5
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_en.properties
new file mode 100644
index 00000000000..4b530df0f57
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_en.properties
@@ -0,0 +1,30 @@
+#Sun Jan 31 17:32:55 CET 2010
+action.choose=Select
+action.delete=Delete
+bookmark.delete.successfull=Bookmark was deleted.
+bookmark.delete.unsuccessfull=Bookmark could not be deleted.
+bookmark.delete.willyou=Do you really want to delete this bookmark?
+bookmarks.nobookmarks=You have no personal bookmarks saved so far.
+bookmarks.title=My bookmarks
+bookmarksPortlet.auto.sorting.title=Automatic sorting of bookmarks 
+bookmarksPortlet.description=Fast access to bookmarks used frequently.
+bookmarksPortlet.manual.sorting.title=Manual sorting of bookmarks  
+bookmarksPortlet.nobookmarks=You have no bookmarks.
+bookmarksPortlet.showAll=Show all
+bookmarksPortlet.title=My bookmarks
+error.title.empty=Please enter a title.
+form.bmdescription=Description
+form.bmtitle=Title
+form.bmtype=OLAT resource
+table.bm.description=Description
+table.bm.resource=Resource
+table.bm.title=Title
+table.header.delete=Delete
+table.header.edit=Edit
+table.manual.sorting.date=Date
+table.manual.sorting.description=Description
+table.manual.sorting.title=Title
+table.manual.sorting.type=Type
+warn.cantlaunch=This resource cannot be displayed. Either this bookmark is not valid anymore or you do not have the right to launch the relevant resource.
+menu.bookmarks=Bookmarks
+menu.bookmarks.alt=Start and edit my bookmarks
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_es.properties
new file mode 100644
index 00000000000..d8378a853b7
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_es.properties
@@ -0,0 +1,30 @@
+#Mon Mar 09 04:29:03 CET 2009
+action.choose=Seleccionar
+action.delete=Eliminar
+bookmark.delete.successfull=El marcador ha sido eliminado
+bookmark.delete.unsuccessfull=El marcador no se puede eliminar
+bookmark.delete.willyou=\u00BFEst\u00E1s seguro de que deseas eliminar esta marcador?
+bookmarks.nobookmarks=No has guardado ningun marcador personal hasta ahora.
+bookmarks.title=Mis marcadores
+bookmarksPortlet.auto.sorting.title=Ordenar marcadores autom\u00E1ticamente
+bookmarksPortlet.description=Acceso r\u00E1pido a tus marcadores m\u00E1s utilizados
+bookmarksPortlet.manual.sorting.title=Ordenar marcadores manualmente
+bookmarksPortlet.nobookmarks=No tienes marcadores
+bookmarksPortlet.showAll=Mostar todos
+bookmarksPortlet.title=Mis marcadores
+error.title.empty=Por favor introduce un t\u00EDtulo
+form.bmdescription=Descripci\u00F3n
+form.bmtitle=T\u00EDtulo
+form.bmtype=Recurso OLAT
+table.bm.description=Descripci\u00F3n
+table.bm.resource=Recurso
+table.bm.title=T\u00EDtulo
+table.header.delete=Eliminar
+table.header.edit=Modificar
+table.manual.sorting.date=Fecha
+table.manual.sorting.description=Descripci\u00F3n
+table.manual.sorting.title=T\u00EDtulo
+table.manual.sorting.type=Tipo
+warn.cantlaunch=El recurso no puede ser mostrado. Puede que este marcador ya no sea v\u00E1lido o que no tengas permiso para lanzar el recurso solicitado.
+menu.bookmarks=Marcadores
+menu.bookmarks.alt=Iniciar y editar mis marcadores
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_et_EE.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_et_EE.properties
new file mode 100644
index 00000000000..e3050bb937d
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_et_EE.properties
@@ -0,0 +1,6 @@
+#Sat May 30 00:01:48 CEST 2009
+bookmarksPortlet.showAll=N\u00E4ita k\u00F5iki
+form.bmdescription=Kirjeldus
+table.header.delete=Kustuta
+table.manual.sorting.date=Kuup\u00E4ev
+table.manual.sorting.description=Kirjeldus
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_fa.properties
new file mode 100644
index 00000000000..4949a372efd
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_fa.properties
@@ -0,0 +1,24 @@
+#Mon Mar 02 09:54:12 CET 2009
+action.choose=\u0627\u0646\u062A\u062E\u0627\u0628
+action.delete=\u062D\u0630\u0641
+bookmark.delete.successfull=\u0641\u0647\u0631\u0633\u062A \u062D\u0630\u0641 \u0634\u062F
+bookmark.delete.unsuccessfull=\u0627\u0645\u06A9\u0627\u0646 \u062D\u0630\u0641 \u0641\u0647\u0631\u0633\u062A \u0648\u062C\u0648\u062F \u0646\u062F\u0627\u0631\u062F
+bookmark.delete.willyou=\u0622\u06CC\u0627 \u0648\u0627\u0642\u0639\u0627 \u0642\u0635\u062F \u062D\u0630\u0641 \u0627\u06CC\u0646 \u0641\u0647\u0631\u0633\u062A \u0631\u0627 \u062F\u0627\u0631\u06CC\u062F\u061F
+bookmarks.nobookmarks=\u062A\u0627 \u06A9\u0646\u0648\u0646 \u0647\u06CC\u0686 \u0641\u0647\u0631\u0633\u062A \u0634\u062E\u0635\u06CC \u0630\u062E\u06CC\u0631\u0647 \u0646\u0634\u062F\u0647 \u0627\u0633\u062A
+bookmarks.title=\u0641\u0647\u0631\u0633\u062A \u0634\u062E\u0635\u06CC
+bookmarksPortlet.description=\u062F\u0633\u062A\u0631\u0633\u06CC \u0633\u0631\u06CC\u0639 \u0628\u0647 \u0641\u0647\u0631\u0633\u062A \u0647\u0627\u06CC\u06CC \u06A9\u0647 \u0628\u06CC\u0634\u062A\u0631 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0634\u062F\u0647
+bookmarksPortlet.nobookmarks=\u0634\u0645\u0627 \u0641\u0647\u0631\u0633\u062A\u06CC \u0646\u062F\u0627\u0631\u06CC\u062F
+bookmarksPortlet.showAll=\u0646\u0645\u0627\u06CC\u0634 \u0647\u0645\u0647
+bookmarksPortlet.title=\u0641\u0647\u0631\u0633\u062A \u0647\u0627\u06CC \u0634\u062E\u0635\u06CC
+error.title.empty=\u0644\u0637\u0641\u0627 \u06CC\u06A9 \u0639\u0646\u0648\u0627\u0646 \u0648\u0627\u0631\u062F \u06A9\u0646\u06CC\u062F
+form.bmdescription=\u0634\u0631\u062D
+form.bmtitle=\u0645\u0646\u0627\u0628\u0639 \u0633\u06CC\u0633\u062A\u0645
+form.bmtype=\u0639\u0646\u0648\u0627\u0646
+table.bm.description=\u0634\u0631\u062D
+table.bm.resource=\u0645\u0646\u0627\u0628\u0639
+table.bm.title=\u0639\u0646\u0648\u0627\u0646
+table.header.delete=\u062D\u0630\u0641
+table.header.edit=\u0648\u06CC\u0631\u0627\u06CC\u0634
+warn.cantlaunch=\u0645\u0646\u0628\u0639 \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06CC\u0634 \u0646\u0645\u06CC \u0628\u0627\u0634\u062F.\u06CC\u0627 \u0627\u06CC\u0646 \u0641\u0647\u0631\u0633\u062A \u0645\u0639\u062A\u0628\u0631 \u0646\u0645\u06CC \u0628\u0627\u0634\u062F \u0648 \u06CC\u0627 \u0634\u0645\u0627 \u0635\u0644\u0627\u062D\u06CC\u062A \u0627\u062C\u0631\u0627\u06CC \u0645\u0646\u0628\u0639 \u0645\u0631\u0628\u0648\u0637 \u0631\u0627 \u0646\u062F\u0627\u0631\u06CC\u062F
+menu.bookmarks=\u0646\u0634\u0627\u0646 \u06AF\u0630\u0627\u0631\u06CC
+menu.bookmarks.alt=Start and edit my bookmarks
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_fr.properties
new file mode 100644
index 00000000000..3291e09727a
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_fr.properties
@@ -0,0 +1,30 @@
+#Sun Sep 05 16:11:43 CEST 2010
+action.choose=S\u00E9lectionner
+action.delete=Supprimer
+bookmark.delete.successfull=Ce favori a \u00E9t\u00E9 supprim\u00E9 avec succ\u00E8s
+bookmark.delete.unsuccessfull=Ce favori n'a pas pu \u00EAtre supprim\u00E9
+bookmark.delete.willyou=Voulez-vous vraiment supprimer ce favori?
+bookmarks.nobookmarks=Vous n'avez enregistr\u00E9 aucun favori personnel.
+bookmarks.title=Mes favoris
+bookmarksPortlet.auto.sorting.title=Trier les favoris automatiquement
+bookmarksPortlet.description=Raccouci vers vos favoris les plus utilis\u00E9s
+bookmarksPortlet.manual.sorting.title=Trier les favoris manuellement
+bookmarksPortlet.nobookmarks=Vous n'avez pas cr\u00E9\u00E9 de favoris.
+bookmarksPortlet.showAll=Afficher tous
+bookmarksPortlet.title=Mes favoris
+error.title.empty=Veuillez donner un titre SVP
+form.bmdescription=Description
+form.bmtitle=Titre
+form.bmtype=Ressource OLAT
+table.bm.description=Description
+table.bm.resource=Ressource
+table.bm.title=Titre
+table.header.delete=Supprimer
+table.header.edit=Editer
+table.manual.sorting.date=Date
+table.manual.sorting.description=Description
+table.manual.sorting.title=Titre
+table.manual.sorting.type=Type
+warn.cantlaunch=La ressource ne peut pas \u00EAtre affich\u00E9e. Soit le favori n'est plus valable, soit vous ne disposez pas assez de droits pour ex\u00E9cuter le favori.
+menu.bookmarks=Mes favoris
+menu.bookmarks.alt=D\u00E9marrer/Editer mes favoris
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_it.properties
new file mode 100644
index 00000000000..ead4ce390db
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_it.properties
@@ -0,0 +1,30 @@
+#Tue Jun 22 18:33:22 CEST 2010
+action.choose=Seleziona
+action.delete=Eliminare
+bookmark.delete.successfull=Il segnalibro \u00E8 stato eliminato.
+bookmark.delete.unsuccessfull=Non \u00E8 stato possibile eliminare il segnalibro.
+bookmark.delete.willyou=Vuole veramente eliminare questo segnalibro?
+bookmarks.nobookmarks=Non ha creato alcun segnalibro personale.
+bookmarks.title=I miei segnalibri
+bookmarksPortlet.auto.sorting.title=Ordinare i segnalibri automaticamente
+bookmarksPortlet.description=Accesso rapido ai Suoi segnalibri pi\u00F9 utilizzati 
+bookmarksPortlet.manual.sorting.title=Ordinare i segnalibri manualmente
+bookmarksPortlet.nobookmarks=Non ha creato alcun segnalibro
+bookmarksPortlet.showAll=Mostrare tutti
+bookmarksPortlet.title=I miei segnalibri
+error.title.empty=Inserisca un titolo, p.f.
+form.bmdescription=Descrizione
+form.bmtitle=Titolo
+form.bmtype=Risorsa OLAT
+table.bm.description=Descrizione
+table.bm.resource=Risorsa
+table.bm.title=Titolo
+table.header.delete=Eliminazione
+table.header.edit=Editazione
+table.manual.sorting.date=Data
+table.manual.sorting.description=Descrizione
+table.manual.sorting.title=Titolo
+table.manual.sorting.type=Tipo
+warn.cantlaunch=La risorsa non pu\u00F2 essere mostrata\: il segnalibro non \u00E8 pi\u00F9 valido, oppure Lei non possiede sufficienti diritti per utilizzarlo.
+menu.bookmarks=Segnalibri
+menu.bookmarks.alt=Avvio ed editazione dei miei segnalibri
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_jp.properties
new file mode 100644
index 00000000000..b2920a8b333
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_jp.properties
@@ -0,0 +1,29 @@
+#Sun Dec 20 08:51:30 CET 2009
+action.choose=\u9078\u629E
+action.delete=\u524A\u9664
+bookmark.delete.successfull=\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u304C\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002
+bookmark.delete.unsuccessfull=\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u3092\u524A\u9664\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002
+bookmark.delete.willyou=\u672C\u5F53\u306B\u3053\u306E\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B?
+bookmarks.nobookmarks=\u73FE\u5728\u306E\u3068\u3053\u308D\u3001\u3042\u306A\u305F\u306E\u30D1\u30FC\u30BD\u30CA\u30EB\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u306F\u3042\u308A\u307E\u305B\u3093\u3002
+bookmarks.title=\u30DE\u30A4\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF
+bookmarksPortlet.auto.sorting.title=\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u306E\u81EA\u52D5\u4E26\u3073\u66FF\u3048
+bookmarksPortlet.description=\u983B\u7E41\u306B\u4F7F\u7528\u3059\u308B\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u306B\u9AD8\u901F\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u308B\u3088\u3046\u306B\u3057\u307E\u3059\u3002
+bookmarksPortlet.manual.sorting.title=\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u306E\u624B\u52D5\u4E26\u3073\u66FF\u3048
+bookmarksPortlet.nobookmarks=\u3042\u306A\u305F\u306E\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u306F\u3042\u308A\u307E\u305B\u3093\u3002
+bookmarksPortlet.showAll=\u3059\u3079\u3066\u3092\u8868\u793A\u3059\u308B
+bookmarksPortlet.title=\u30DE\u30A4\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF
+error.title.empty=\u30BF\u30A4\u30C8\u30EB\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
+form.bmdescription=\u8AAC\u660E
+form.bmtitle=\u30BF\u30A4\u30C8\u30EB
+form.bmtype=OLAT\u30EA\u30BD\u30FC\u30B9
+table.bm.description=\u8AAC\u660E
+table.bm.resource=\u30EA\u30BD\u30FC\u30B9
+table.bm.title=\u30BF\u30A4\u30C8\u30EB
+table.header.delete=\u524A\u9664
+table.header.edit=\u7DE8\u96C6
+table.manual.sorting.date=\u65E5\u4ED8
+table.manual.sorting.description=\u8AAC\u660E
+table.manual.sorting.title=\u30BF\u30A4\u30C8\u30EB
+table.manual.sorting.type=\u30BF\u30A4\u30D7
+warn.cantlaunch=\u3053\u306E\u30EA\u30BD\u30FC\u30B9\u3092\u8868\u793A\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3002\u30EA\u30BD\u30FC\u30B9\u304C\u6709\u52B9\u3067\u306F\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306B\u95A2\u9023\u30EA\u30BD\u30FC\u30B9\u3078\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002
+menu.bookmarks=\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_lt.properties
new file mode 100644
index 00000000000..a3a463572bb
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_lt.properties
@@ -0,0 +1,24 @@
+#Mon Mar 02 09:54:01 CET 2009
+action.choose=Pasirinkti
+action.delete=I\u0161trinti
+bookmark.delete.successfull=\u017Dymeklis i\u0161trintas
+bookmark.delete.unsuccessfull=\u017Dymeklis negali b\u016Bti i\u0161trintas
+bookmark.delete.willyou=Ar j\u016Bs tikrai norite i\u0161trinti \u0161\u012F \u017Eymekl\u012F?
+bookmarks.nobookmarks=J\u016Bs neturite iki \u0161iol i\u0161saugot\u0173 savo asmenini\u0173 \u017Eymekli\u0173.
+bookmarks.title=Mano \u017Eymekliai
+bookmarksPortlet.description=Greitas pri\u0117jimas prie \u017Eymekli\u0173, kuriuos da\u017Eniausiai naudojate
+bookmarksPortlet.nobookmarks=J\u016Bs neturite \u017Eymekli\u0173
+bookmarksPortlet.showAll=Rodyti visus
+bookmarksPortlet.title=Mano \u017Eymekliai
+error.title.empty=Pra\u0161ome \u012Fvesti pavadinim\u0105
+form.bmdescription=Apib\u016Bdinimas
+form.bmtitle=OLAT resursai
+form.bmtype=Pavadinimas
+table.bm.description=Apib\u016Bdinimas
+table.bm.resource=Resursai
+table.bm.title=Pavadinimas
+table.header.delete=I\u0161trinti
+table.header.edit=Redaguoti
+warn.cantlaunch=Resursai negali b\u016Bti parodyti. Arba \u0161is \u017Eymeklis yra negaliojantis arba j\u016Bs neturite teis\u0117s paleisti atatinkamus resursus.
+menu.bookmarks=\u017Dym\u0117s
+menu.bookmarks.alt=Sukurti ir redaguoti savo \u017Eymes
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_nl_NL.properties
new file mode 100644
index 00000000000..36dad5b49a3
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_nl_NL.properties
@@ -0,0 +1,30 @@
+#Thu Jun 03 11:33:14 CEST 2010
+action.choose=Selecteren
+action.delete=Verwijderen
+bookmark.delete.successfull=Bladwijzer is verwijderd. 
+bookmark.delete.unsuccessfull=Bladwijzer kon niet worden verwijderd.
+bookmark.delete.willyou=Bent u zeker dat u deze bladwijzer wil verwijderen?
+bookmarks.nobookmarks=U hebt nog geen persoonlijke bladwijzers opgeslagen
+bookmarks.title=Mijn bladwijzers
+bookmarksPortlet.auto.sorting.title=Automatische sortering van de bladwijzers
+bookmarksPortlet.description=Snelle toegang tot veel gebruikte bladwijzers
+bookmarksPortlet.manual.sorting.title=Handmatige sortering van de bladwijzers
+bookmarksPortlet.nobookmarks=Je hebt geen bladwijzers.
+bookmarksPortlet.showAll=Toon alles
+bookmarksPortlet.title=Mijn bladwijzers
+error.title.empty=Voer een titel in. 
+form.bmdescription=Beschrijving
+form.bmtitle=Titel
+form.bmtype=OLAT-bron
+table.bm.description=\ Beschrijving
+table.bm.resource=Bron
+table.bm.title=Titel
+table.header.delete=Verwijderen
+table.header.edit=Bewerken
+table.manual.sorting.date=Datum
+table.manual.sorting.description=Beschrijving
+table.manual.sorting.title=Titel
+table.manual.sorting.type=Type
+warn.cantlaunch=Deze bron kan niet worden weergegeven.  De bron is ofwel niet langer geldig of u heeft geen rechten om de betreffende bron te openen. 
+menu.bookmarks=Bladwijzers
+menu.bookmarks.alt=Mijn bladwijzers openen en bewerken
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pl.properties
new file mode 100644
index 00000000000..be058391f32
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pl.properties
@@ -0,0 +1,30 @@
+#Tue Sep 07 13:48:15 CEST 2010
+action.choose=Wybierz
+action.delete=Usu\u0144
+bookmark.delete.successfull=Usuni\u0119to zak\u0142adk\u0119.
+bookmark.delete.unsuccessfull=Nie uda\u0142o si\u0119 usun\u0105\u0107 zak\u0142adki.
+bookmark.delete.willyou=Czy na pewno chcesz usun\u0105\u0107 zak\u0142adk\u0119?
+bookmarks.nobookmarks=Nie masz \u017Cadnych zak\u0142adek.
+bookmarks.title=Moje zak\u0142adki
+bookmarksPortlet.auto.sorting.title=Automatyczne sortowanie zak\u0142adek. 
+bookmarksPortlet.description=Szybki dost\u0119p do Twoich najcz\u0119\u015Bciej u\u017Cywanych zak\u0142adek.
+bookmarksPortlet.manual.sorting.title=R\u0119czne sortowanie zak\u0142adek. 
+bookmarksPortlet.nobookmarks=Nie masz zak\u0142adek
+bookmarksPortlet.showAll=Poka\u017C wszystko
+bookmarksPortlet.title=Moje zak\u0142adki
+error.title.empty=Podaj tytu\u0142
+form.bmdescription=Opis
+form.bmtitle=Nazwa
+form.bmtype=Zas\u00F3b OLAT
+table.bm.description=Opis
+table.bm.resource=Zas\u00F3b
+table.bm.title=Tytu\u0142
+table.header.delete=Usu\u0144
+table.header.edit=Edytuj
+table.manual.sorting.date=Data
+table.manual.sorting.description=Opis
+table.manual.sorting.title=Nazwa
+table.manual.sorting.type=Rodzaj
+warn.cantlaunch=Nie mo\u017Cna wy\u015Bwietli\u0107 zasobu. Zak\u0142adka jest niewa\u017Cna, lub nie masz praw do uruchomienia tego zasobu.
+menu.bookmarks=Zak\u0142adki
+menu.bookmarks.alt=Zarz\u0105dzanie zak\u0142adkami
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pt_BR.properties
new file mode 100644
index 00000000000..75258ab1ffc
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pt_BR.properties
@@ -0,0 +1,30 @@
+#Mon Mar 02 09:53:59 CET 2009
+action.choose=Selecionar
+action.delete=Apagar
+bookmark.delete.successfull=O favorito foi apagado
+bookmark.delete.unsuccessfull=O favorito n\u00E3o p\u00F4de ser apagado
+bookmark.delete.willyou=Voc\u00EA realmente quer apagar este favorito?
+bookmarks.nobookmarks=Voc\u00EA n\u00E3o tem lista pessoal de favoritos salva at\u00E9 agora.
+bookmarks.title=Meus favoritos
+bookmarksPortlet.auto.sorting.title=Classifica\u00E7\u00E3o autom\u00E1tica de favoritos 
+bookmarksPortlet.description=Acesso r\u00E1pido aos seus favoritos.
+bookmarksPortlet.manual.sorting.title=Classifica\u00E7\u00E3o manual de favoritos  
+bookmarksPortlet.nobookmarks=Voc\u00EA n\u00E3o tem favoritos
+bookmarksPortlet.showAll=Exibir tudo
+bookmarksPortlet.title=Meus favoritos
+error.title.empty=Favor inserir um t\u00EDtulo
+form.bmdescription=Descri\u00E7\u00E3o
+form.bmtitle=T\u00EDtulo
+form.bmtype=Recurso OLAT
+table.bm.description=Descri\u00E7\u00E3o
+table.bm.resource=Recurso
+table.bm.title=T\u00EDtulo
+table.header.delete=Apagar
+table.header.edit=Editar
+table.manual.sorting.date=Data
+table.manual.sorting.description=Descri\u00E7\u00E3o
+table.manual.sorting.title=T\u00EDtulo
+table.manual.sorting.type=Tipo
+warn.cantlaunch=O recurso n\u00E3o pode ser mostrado. Ou n\u00E3o \u00E9 mais v\u00E1lido, ou voc\u00EA n\u00E3o possui o direito de acessar este recurso.
+menu.bookmarks=Favoritos
+menu.bookmarks.alt=Iniciar e editar meus favoritos
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pt_PT.properties
new file mode 100644
index 00000000000..d296297f567
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_pt_PT.properties
@@ -0,0 +1,24 @@
+#Mon Mar 02 09:54:04 CET 2009
+action.choose=Selecionar
+action.delete=Apagar
+bookmark.delete.successfull=O favorito foi apagado
+bookmark.delete.unsuccessfull=O favorito n\u00E3o p\u00F4de ser apagado
+bookmark.delete.willyou=Voc\u00EA realmente quer apagar este favorito?
+bookmarks.nobookmarks=Voc\u00EA n\u00E3o tem lista pessoal de favoritos salva at\u00E9 agora.
+bookmarks.title=Meus favoritos
+bookmarksPortlet.description=Acesso r\u00E1pido aos seus favoritos.
+bookmarksPortlet.nobookmarks=Voc\u00EA n\u00E3o tem favoritos
+bookmarksPortlet.showAll=Exibir tudo
+bookmarksPortlet.title=Meus favoritos
+error.title.empty=Favor inserir um t\u00EDtulo
+form.bmdescription=Descri\u00E7\u00E3o
+form.bmtitle=T\u00EDtulo
+form.bmtype=Recurso OLAT
+table.bm.description=Descri\u00E7\u00E3o
+table.bm.resource=Recurso
+table.bm.title=T\u00EDtulo
+table.header.delete=Apagar
+table.header.edit=Editar
+warn.cantlaunch=O recurso n\u00E3o pode ser mostrado. Ou n\u00E3o \u00E9 mais v\u00E1lido, ou voc\u00EA n\u00E3o possui o direito de acessar este recurso.
+menu.bookmarks=Favoritos
+menu.bookmarks.alt=Iniciar e editar meus favoritos
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_ru.properties
new file mode 100644
index 00000000000..8605108e6d2
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_ru.properties
@@ -0,0 +1,30 @@
+#Wed Sep 23 23:18:10 CEST 2009
+action.choose=\u0412\u044B\u0431\u0440\u0430\u0442\u044C
+action.delete=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+bookmark.delete.successfull=\u0417\u0430\u043A\u043B\u0430\u0434\u043A\u0430 \u0431\u044B\u043B\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0430
+bookmark.delete.unsuccessfull=\u0417\u0430\u043A\u043B\u0430\u0434\u043A\u0443 \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0431\u044B\u043B\u043E \u0443\u0434\u0430\u043B\u0438\u0442\u044C
+bookmark.delete.willyou=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0434\u0430\u043D\u043D\u0443\u044E \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0443?
+bookmarks.nobookmarks=\u041F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0437\u0430\u043A\u043B\u0430\u0434\u043E\u043A \u043D\u0435 \u0431\u044B\u043B\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E.
+bookmarks.title=\u041C\u043E\u0438 \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0438
+bookmarksPortlet.auto.sorting.title=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0438
+bookmarksPortlet.description=\u0411\u044B\u0441\u0442\u0440\u044B\u0439 \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u0447\u0430\u0441\u0442\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u043C \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0430\u043C
+bookmarksPortlet.manual.sorting.title=\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0438 \u0432\u0440\u0443\u0447\u043D\u0443\u044E
+bookmarksPortlet.nobookmarks=\u0417\u0430\u043A\u043B\u0430\u0434\u043E\u043A \u043D\u0435 \u0431\u044B\u043B\u043E \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E.
+bookmarksPortlet.showAll=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u0441\u0435
+bookmarksPortlet.title=\u041C\u043E\u0438 \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0438
+error.title.empty=\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0438\u043C\u044F, \u043F\u043E\u0436\u0430\u0439\u043B\u0443\u0441\u0442\u0430
+form.bmdescription=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+form.bmtitle=\u0418\u043C\u044F
+form.bmtype=OLAT \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B
+table.bm.description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+table.bm.resource=\u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B
+table.bm.title=\u0418\u043C\u044F
+table.header.delete=\u0423\u0434\u0430\u043B\u0438\u0442\u044C
+table.header.edit=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C
+table.manual.sorting.date=\u0414\u0430\u0442\u0430
+table.manual.sorting.description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+table.manual.sorting.title=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435
+table.manual.sorting.type=\u0422\u0438\u043F
+warn.cantlaunch=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B. \u0418\u043B\u0438 \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0430 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u0430, \u0438\u043B\u0438 \u0443 \u0412\u0430\u0441 \u043D\u0435\u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E \u043F\u0440\u0430\u0432, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u0430\u043D\u043D\u0443\u044E \u0437\u0430\u043A\u043B\u0430\u0434\u043A\u0443. 
+menu.bookmarks=\u0417\u0430\u043A\u043B\u0430\u0434\u043A\u0438
+menu.bookmarks.alt=\u0421\u0442\u0430\u0440\u0442 \u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043C\u043E\u0438\u0445 \u0437\u0430\u043A\u043B\u0430\u0434\u043E\u043A
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_sq.properties
new file mode 100644
index 00000000000..9ecaa0c703f
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_sq.properties
@@ -0,0 +1,30 @@
+#Mon Mar 02 09:54:11 CET 2009
+action.choose=P\u00EBrzgjedh
+action.delete=Fshij
+bookmark.delete.successfull=Referenca u fshi
+bookmark.delete.unsuccessfull=Referenca nuk mund t\u00EB fshihet
+bookmark.delete.willyou=A doni ta fshini k\u00EBt\u00EB referenc\u00EB?
+bookmarks.nobookmarks=Deri m\u00EB tani ju nuk keni ndonj\u00EB referenc\u00EB t\u00EB ruajtur.
+bookmarks.title=Referencat e mia
+bookmarksPortlet.auto.sorting.title=Rendit automatikisht referencat
+bookmarksPortlet.description=Qasje e shpejt\u00EB e referencave t\u00EB p\u00EBrdorura s\u00EB fundi
+bookmarksPortlet.manual.sorting.title=Rendit manualisht referencat  
+bookmarksPortlet.nobookmarks=Ju nuk keni ndonj\u00EB referenc\u00EB
+bookmarksPortlet.showAll=Shfaqi t\u00EB gjitha
+bookmarksPortlet.title=Referenca e mia
+error.title.empty=Ju lutem shkruani nj\u00EB titull
+form.bmdescription=P\u00EBrshkrimi
+form.bmtitle=Titulli
+form.bmtype=Burime t\u00EB OLATit
+table.bm.description=P\u00EBrshkrimi
+table.bm.resource=Burimi
+table.bm.title=Titulli
+table.header.delete=Fshij
+table.header.edit=Redakto
+table.manual.sorting.date=Data
+table.manual.sorting.description=P\u00EBrshkrimi
+table.manual.sorting.title=Titulli
+table.manual.sorting.type=Lloji
+warn.cantlaunch=Burimet nuk mund t\u00EB shfaqen. Ose referenca nuk \u00EBsht\u00EB m\u00EB e vlefshme, ose ju nuk keni t\u00EB drejt\u00EB p\u00EBr t\u00EB nisur nj\u00EB burim relevant.
+menu.bookmarks=Referencat
+menu.bookmarks.alt=Nise dhe redakto referencate e mia
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_zh_CN.properties
new file mode 100644
index 00000000000..7b98d3a0f37
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_zh_CN.properties
@@ -0,0 +1,30 @@
+#Sat Feb 20 14:04:23 CET 2010
+action.choose=\u9009\u62E9
+action.delete=\u5220\u9664
+bookmark.delete.successfull=\u8BE5\u4E66\u7B7E\u5DF2\u5220\u9664
+bookmark.delete.unsuccessfull=\u8BE5\u4E66\u7B7E\u65E0\u6CD5\u5220\u9664
+bookmark.delete.willyou=\u4F60\u662F\u5426\u8981\u5220\u9664\u8BE5\u4E66\u7B7E\uFF1F
+bookmarks.nobookmarks=\u4F60\u76EE\u524D\u8FD8\u672A\u4FDD\u5B58\u4EFB\u4F55\u4E66\u7B7E\u3002
+bookmarks.title=\u6211\u7684\u4E66\u7B7E
+bookmarksPortlet.auto.sorting.title=\u4E66\u7B7E\u81EA\u52A8\u6392\u5E8F
+bookmarksPortlet.description=\u5FEB\u901F\u8BBF\u95EE\u4F60\u6700\u5E38\u4F7F\u7528\u7684\u4E66\u7B7E
+bookmarksPortlet.manual.sorting.title=\u4E66\u7B7E\u4EBA\u5DE5\u6392\u5E8F
+bookmarksPortlet.nobookmarks=\u60A8\u8FD8\u6CA1\u6709\u4E66\u7B7E
+bookmarksPortlet.showAll=\u5168\u90E8\u663E\u793A
+bookmarksPortlet.title=\u6211\u7684\u4E66\u7B7E
+error.title.empty=\u8BF7\u8F93\u5165\u6807\u9898
+form.bmdescription=\u8BF4\u660E
+form.bmtitle=\u6807\u9898
+form.bmtype=OLAT\u8D44\u6E90
+table.bm.description=\u8BF4\u660E
+table.bm.resource=\u8D44\u6E90
+table.bm.title=\u6807\u9898
+table.header.delete=\u5220\u9664
+table.header.edit=\u7F16\u8F91
+table.manual.sorting.date=\u65E5\u671F
+table.manual.sorting.description=\u63CF\u8FF0
+table.manual.sorting.title=\u6807\u9898
+table.manual.sorting.type=\u7C7B\u578B
+warn.cantlaunch=\u65E0\u6CD5\u663E\u793A\u3002\u8BE5\u4E66\u7B7E\u65E0\u6548\uFF0C\u6216\u8005\u4F60\u6743\u9650\u4E0D\u591F\u3002
+menu.bookmarks=\u4E66 \u7B7E
+menu.bookmarks.alt=\u5F00\u59CB\u5E76\u7F16\u8F91\u6211\u7684\u4E66\u7B7E
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_zh_TW.properties
new file mode 100644
index 00000000000..d481ca48926
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/LocalStrings_zh_TW.properties
@@ -0,0 +1,30 @@
+#Mon Sep 21 15:33:07 CEST 2009
+action.choose=\u9078\u64C7
+action.delete=\u522A\u9664
+bookmark.delete.successfull=\u66F8\u7C64\u5DF2\u522A\u9664\u3002
+bookmark.delete.unsuccessfull=\u66F8\u7C64\u7121\u6CD5\u522A\u9664\u3002
+bookmark.delete.willyou=\u60A8\u771F\u7684\u8981\u522A\u9664\u9019\u500B\u66F8\u7C64\u55CE\uFF1F
+bookmarks.nobookmarks=\u5230\u76EE\u524D\u70BA\u6B62\u60A8\u9084\u6C92\u6709\u5132\u5B58\u4EFB\u4F55\u500B\u4EBA\u66F8\u7C64\u3002
+bookmarks.title=\u6211\u7684\u66F8\u7C64
+bookmarksPortlet.auto.sorting.title=\u81EA\u52D5\u6392\u5E8F\u66F8\u7C64 
+bookmarksPortlet.description=\u5FEB\u901F\u5B58\u53D6\u60A8\u6700\u5E38\u4F7F\u7528\u7684\u66F8\u7C64\u3002
+bookmarksPortlet.manual.sorting.title=\u624B\u52D5\u6392\u5E8F\u66F8\u7C64  
+bookmarksPortlet.nobookmarks=\u60A8\u6C92\u6709\u66F8\u7C64\u3002
+bookmarksPortlet.showAll=\u986F\u793A\u5168\u90E8
+bookmarksPortlet.title=\u6211\u7684\u66F8\u7C64
+error.title.empty=\u8ACB\u8F38\u5165\u6A19\u984C\u3002
+form.bmdescription=\u8AAA\u660E
+form.bmtitle=\u6A19\u984C
+form.bmtype=OLAT \u8CC7\u6E90
+table.bm.description=\u8AAA\u660E
+table.bm.resource=\u8CC7\u6E90
+table.bm.title=\u6A19\u984C
+table.header.delete=\u522A\u9664
+table.header.edit=\u7DE8\u8F2F
+table.manual.sorting.date=\u65E5\u671F
+table.manual.sorting.description=\u8AAA\u660E
+table.manual.sorting.title=\u6A19\u984C
+table.manual.sorting.type=\u985E\u578B
+warn.cantlaunch=\u9019\u500B\u8CC7\u6E90\u7121\u6CD5\u986F\u793A\u3002\u4E0D\u662F\u8A72\u66F8\u7C64\u7121\u6548\uFF0C\u5C31\u662F\u60A8\u6B0A\u9650\u4E0D\u5920\u3002
+menu.bookmarks=\u66F8\u7C64
+menu.bookmarks.alt=\u958B\u59CB\u4E26\u7DE8\u8F2F\u6211\u7684\u66F8\u7C64
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/i18nBundleMetadata.properties b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/i18nBundleMetadata.properties
new file mode 100644
index 00000000000..9270f58a2a5
--- /dev/null
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/_i18n/i18nBundleMetadata.properties
@@ -0,0 +1,2 @@
+#Tue Feb 10 18:52:47 CET 2009
+bundle.priority=500
diff --git a/src/main/java/org/olat/home/_spring/homeContext.xml b/src/main/java/org/olat/home/_spring/homeContext.xml
index 17f02e3466a..6a67134a558 100644
--- a/src/main/java/org/olat/home/_spring/homeContext.xml
+++ b/src/main/java/org/olat/home/_spring/homeContext.xml
@@ -86,6 +86,27 @@
 		</property>
 	</bean>
 	
+	<!--  bookmarks -->
+	<bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints">
+		<property name="order" value="104" />
+		<property name="enabled" value="${minimalhome.ext.bookmarks}"></property>
+		<property name="navigationKey" value="bookmarks" />
+		<property name="actionController">
+			<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
+				<property name="className" value="org.olat.core.commons.services.mark.ui.BookmarksController"/>
+			</bean>
+		</property>
+		<property name="securityCallbackClassName" value="org.olat.core.extensions.security.UserOnlyExtensionSecurityCallback" />
+		<property name="translationPackage" value="org.olat.core.commons.services.mark.ui" />
+		<property name="i18nActionKey" value="menu.bookmarks"/>
+		<property name="i18nDescriptionKey" value="menu.bookmarks.alt"/>
+		<property name="extensionPoints">
+			<list>	
+				<value>org.olat.home.HomeMainController</value>		
+			</list>
+		</property>
+	</bean>	
+	
 	<!--  the users personal folder -->
 	<bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints">
 		<property name="order" value="105" />
diff --git a/src/main/resources/serviceconfig/org/olat/_spring/portalContext.xml b/src/main/resources/serviceconfig/org/olat/_spring/portalContext.xml
index 92fc5e572d7..b4883d2db4f 100644
--- a/src/main/resources/serviceconfig/org/olat/_spring/portalContext.xml
+++ b/src/main/resources/serviceconfig/org/olat/_spring/portalContext.xml
@@ -50,6 +50,10 @@
 		<property name="name" value="Groups" />
 		<property name="enabled" value="${portlet.groups.enabled}" />
 	</bean>
+	<bean id="Bookmarks" class="org.olat.core.commons.services.mark.ui.BookmarksPortlet" scope="prototype">
+		<property name="name" value="Bookmarks" />
+		<property name="enabled" value="${portlet.bookmarks.enabled}" />
+	</bean>
 	<bean id="Notes" class="org.olat.note.NotesPortlet" scope="prototype">
 		<property name="name" value="Notes" />
 		<property name="enabled" value="${portlet.notes.enabled}" />
-- 
GitLab