From 9effe1630d97039b3e01cd9b58ed07e75be1d63c Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 25 Feb 2013 08:40:30 -0500
Subject: [PATCH] Merge pull request #75 from thefake/master

---
 src/com/gitblit/wicket/pages/RepositoriesPage.java |   83 +++++++++++++++++++++++++----------------
 1 files changed, 50 insertions(+), 33 deletions(-)

diff --git a/src/com/gitblit/wicket/pages/RepositoriesPage.java b/src/com/gitblit/wicket/pages/RepositoriesPage.java
index f679c76..4bce77f 100644
--- a/src/com/gitblit/wicket/pages/RepositoriesPage.java
+++ b/src/com/gitblit/wicket/pages/RepositoriesPage.java
@@ -16,17 +16,19 @@
 package com.gitblit.wicket.pages;
 
 import java.io.File;
-import java.io.FileReader;
+import java.io.FileInputStream;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.text.MessageFormat;
+import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.wicket.Application;
 import org.apache.wicket.Component;
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.resource.ContextRelativeResource;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.eclipse.jgit.lib.Constants;
 
 import com.gitblit.GitBlit;
 import com.gitblit.Keys;
@@ -80,7 +82,7 @@
 		List<RepositoryModel> repositories = getRepositories(params);
 
 		RepositoriesPanel repositoriesPanel = new RepositoriesPanel("repositoriesPanel", showAdmin,
-				repositories, true, getAccessRestrictions());
+				true, repositories, true, getAccessRestrictions());
 		// push the panel down if we are hiding the admin controls and the
 		// welcome message
 		if (!showAdmin && !repositoriesMessage.isVisible()) {
@@ -117,17 +119,20 @@
 		} else {
 			// Read user-supplied message
 			if (!StringUtils.isEmpty(messageSource)) {
-				File file = new File(messageSource);
+				File file = GitBlit.getFileOrFolder(messageSource);
 				if (file.exists()) {
 					try {
-						FileReader reader = new FileReader(file);
+						FileInputStream fis = new FileInputStream(file);
+						InputStreamReader reader = new InputStreamReader(fis,
+								Constants.CHARACTER_ENCODING);
 						message = MarkdownUtils.transformMarkdown(reader);
+						reader.close();
 					} catch (Throwable t) {
-						message = "Failed to read " + file;
+						message = getString("gb.failedToRead") + " " + file;
 						warn(message, t);
 					}
 				} else {
-					message = messageSource + " is not a valid file.";
+					message = messageSource + " " + getString("gb.isNotValidFile");
 				}
 			}
 		}
@@ -135,35 +140,47 @@
 	}
 
 	private String readDefaultMarkdown(String file) {
-		String message;
-		try {
-			ContextRelativeResource res = WicketUtils.getResource(file);
-			InputStream is = res.getResourceStream().getInputStream();
-			InputStreamReader reader = new InputStreamReader(is);
-			message = MarkdownUtils.transformMarkdown(reader);
-			reader.close();
-		} catch (Throwable t) {
-			message = MessageFormat.format("Failed to read default message from {0}!", file);
-			error(message, t, false);
-		}
-		return message;
-	}
+		String base = file.substring(0, file.lastIndexOf('.'));
+		String ext = file.substring(file.lastIndexOf('.'));
+		String lc = getLanguageCode();
+		String cc = getCountryCode();
 
-	@Override
-	protected void onBeforeRender() {
-		if (GitBlit.isDebugMode()) {
-			// strip Wicket tags in debug mode for jQuery DOM traversal
-			Application.get().getMarkupSettings().setStripWicketTags(true);
+		// try to read file_en-us.ext, file_en.ext, file.ext
+		List<String> files = new ArrayList<String>();
+		if (!StringUtils.isEmpty(lc)) {
+			if (!StringUtils.isEmpty(cc)) {
+				files.add(base + "_" + lc + "-" + cc + ext);
+				files.add(base + "_" + lc + "_" + cc + ext);
+			}
+			files.add(base + "_" + lc + ext);
 		}
-		super.onBeforeRender();
-	}
+		files.add(file);
 
-	@Override
-	protected void onAfterRender() {
-		if (GitBlit.isDebugMode()) {
-			// restore Wicket debug tags
-			Application.get().getMarkupSettings().setStripWicketTags(false);
+		for (String name : files) {
+			String message;
+			InputStreamReader reader = null;
+			try {
+				ContextRelativeResource res = WicketUtils.getResource(name);
+				InputStream is = res.getResourceStream().getInputStream();
+				reader = new InputStreamReader(is, Constants.CHARACTER_ENCODING);
+				message = MarkdownUtils.transformMarkdown(reader);
+				reader.close();
+				return message;
+			} catch (ResourceStreamNotFoundException t) {
+				continue;
+			} catch (Throwable t) {
+				message = MessageFormat.format(getString("gb.failedToReadMessage"), file);
+				error(message, t, false);
+				return message;
+			} finally {
+				if (reader != null) {
+					try {
+						reader.close();
+					} catch (Exception e) {
+					}
+				}
+			}			
 		}
-		super.onAfterRender();
+		return MessageFormat.format(getString("gb.failedToReadMessage"), file);
 	}
 }

--
Gitblit v1.9.1