diff --git a/server/src/com/cloud/servlet/ConsoleProxyClientParam.java b/server/src/com/cloud/servlet/ConsoleProxyClientParam.java index 7ea17c8d3ef..e9793373c16 100644 --- a/server/src/com/cloud/servlet/ConsoleProxyClientParam.java +++ b/server/src/com/cloud/servlet/ConsoleProxyClientParam.java @@ -23,7 +23,7 @@ public class ConsoleProxyClientParam { private String clientHostPassword; private String clientTag; private String ticket; - + private String locale; private String clientTunnelUrl; private String clientTunnelSession; @@ -89,6 +89,14 @@ public class ConsoleProxyClientParam { this.clientTunnelSession = clientTunnelSession; } + public String getLocale() { + return this.locale; + } + + public void setLocale(String locale) { + this.locale = locale; + } + public String getAjaxSessionId() { return this.ajaxSessionId; } diff --git a/server/src/com/cloud/servlet/ConsoleProxyServlet.java b/server/src/com/cloud/servlet/ConsoleProxyServlet.java index 06e542d110e..0359a45c8b6 100644 --- a/server/src/com/cloud/servlet/ConsoleProxyServlet.java +++ b/server/src/com/cloud/servlet/ConsoleProxyServlet.java @@ -57,8 +57,10 @@ import com.cloud.utils.Pair; import com.cloud.utils.Ternary; import com.cloud.utils.db.EntityManager; import com.cloud.utils.db.TransactionLegacy; +import com.cloud.vm.UserVmDetailVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineManager; +import com.cloud.vm.dao.UserVmDetailsDao; /** * Thumbnail access : /console?cmd=thumbnail&vm=xxx&w=xxx&h=xxx @@ -82,6 +84,8 @@ public class ConsoleProxyServlet extends HttpServlet { IdentityService _identityService; @Inject EntityManager _entityMgr; + @Inject + UserVmDetailsDao _userVmDetailsDao; static ManagementServer s_ms; @@ -391,6 +395,7 @@ public class ConsoleProxyServlet extends HttpServlet { Ternary parsedHostInfo = parseHostInfo(portInfo.first()); + UserVmDetailVO details = _userVmDetailsDao.findDetail(vm.getId(), "keyboard"); String sid = vm.getVncPassword(); String tag = vm.getUuid(); String ticket = genAccessTicket(host, String.valueOf(portInfo.second()), sid, tag); @@ -401,7 +406,10 @@ public class ConsoleProxyServlet extends HttpServlet { param.setClientHostPassword(sid); param.setClientTag(tag); param.setTicket(ticket); - if (parsedHostInfo.second() != null && parsedHostInfo.third() != null) { + if (details != null) { + param.setLocale(details.getValue()); + } + if (parsedHostInfo.second() != null && parsedHostInfo.third() != null) { param.setClientTunnelUrl(parsedHostInfo.second()); param.setClientTunnelSession(parsedHostInfo.third()); } diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java index 56e2ea997fa..18d97d250af 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java @@ -79,6 +79,7 @@ public class ConsoleProxyAjaxHandler implements HttpHandler { String eventStr = queryMap.get("event"); String console_url = queryMap.get("consoleurl"); String console_host_session = queryMap.get("sessionref"); + String vm_locale = queryMap.get("locale"); if (tag == null) tag = ""; @@ -126,6 +127,7 @@ public class ConsoleProxyAjaxHandler implements HttpHandler { param.setTicket(ticket); param.setClientTunnelUrl(console_url); param.setClientTunnelSession(console_host_session); + param.setLocale(vm_locale); viewer = ConsoleProxy.getAjaxVncViewer(param, ajaxSessionIdStr); } catch (Exception e) { diff --git a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java index daef040c9b1..eb38007de9a 100644 --- a/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java +++ b/services/console-proxy/server/src/com/cloud/consoleproxy/ConsoleProxyClientBase.java @@ -287,11 +287,11 @@ public abstract class ConsoleProxyClientBase implements ConsoleProxyClient, Cons } return getAjaxViewerPageContent(sbTileSequence.toString(), imgUrl, updateUrl, width, height, tileWidth, tileHeight, title, - ConsoleProxy.keyboardType == ConsoleProxy.KEYBOARD_RAW, languages, guest); + ConsoleProxy.keyboardType == ConsoleProxy.KEYBOARD_RAW, languages, guest, this.clientParam.getLocale()); } private String getAjaxViewerPageContent(String tileSequence, String imgUrl, String updateUrl, int width, int height, int tileWidth, int tileHeight, String title, - boolean rawKeyboard, List languages, String guest) { + boolean rawKeyboard, List languages, String guest, String locale) { StringBuffer sbLanguages = new StringBuffer(""); if (languages != null) { @@ -323,7 +323,7 @@ public abstract class ConsoleProxyClientBase implements ConsoleProxyClient, Cons "
  • Japanese keyboard
  • ", "", "", "", "", "", "
    ", "