Shahar Havivi has uploaded a new change for review.

Change subject: engine: RFE: set locale language and keyboard via Sysprep
......................................................................

engine: RFE: set locale language and keyboard via Sysprep

We want to add ability for the user to specify the language layout via
Windows Sysprep, added 4 new fields that represented the following
Sysprep data:
   <InputLocale>en-US</InputLocale>
   <UILanguage>en-US</UILanguage>
   <SystemLocale>en-US</SystemLocale>
   <UserLocale>en-US</UserLocale>

Change-Id: I414c1d097a7cf8e23b322ca0f23dcb9d66ac0691
Signed-off-by: Shahar Havivi <shah...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmInit.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVmFromSysPrepVDSCommand.java
D 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVmFromSysPrepVDSCommandParameters.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SysprepHandler.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.ui.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInitModel.java
M packaging/conf/sysprep/sysprep.2k12x64
M packaging/conf/sysprep/sysprep.2k8
M packaging/conf/sysprep/sysprep.2k8x64
M packaging/conf/sysprep/sysprep.w7
M packaging/conf/sysprep/sysprep.w7x64
M packaging/conf/sysprep/sysprep.w8
M packaging/conf/sysprep/sysprep.w8x64
A packaging/dbscripts/upgrade/03_05_0100_vm_init_add_sysprep_locale.sql
M packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
M packaging/dbscripts/vms_sp.sql
24 files changed, 326 insertions(+), 131 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/88/25488/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmInit.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmInit.java
index 03d1beb..8383f85 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmInit.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmInit.java
@@ -23,6 +23,11 @@
     private boolean passwordAlreadyStored;
     private String customScript;
 
+    private String inputLocale;
+    private String uiLanguage;
+    private String systemLocale;
+    private String userLocale;
+
     public VmInit() {
     }
 
@@ -125,4 +130,36 @@
     public void setPasswordAlreadyStored(boolean passwordAlreadyStored) {
         this.passwordAlreadyStored = passwordAlreadyStored;
     }
+
+    public String getInputLocale() {
+        return inputLocale;
+    }
+
+    public void setInputLocale(String inputLocale) {
+        this.inputLocale = inputLocale;
+    }
+
+    public String getUiLanguage() {
+        return uiLanguage;
+    }
+
+    public void setUiLanguage(String uiLanguage) {
+        this.uiLanguage = uiLanguage;
+    }
+
+    public String getSystemLocale() {
+        return systemLocale;
+    }
+
+    public void setSystemLocale(String systemLocale) {
+        this.systemLocale = systemLocale;
+    }
+
+    public String getUserLocale() {
+        return userLocale;
+    }
+
+    public void setUserLocale(String userLocale) {
+        this.userLocale = userLocale;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
index a7a3337..810bd01 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
@@ -1638,5 +1638,9 @@
     @DefaultValueAttribute("true")
     ImportGlanceImageAsTemplate,
 
+    @TypeConverterAttribute(String.class)
+    @DefaultValueAttribute("en_US")
+    DefaultSysprepLocale,
+
     Invalid;
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java
index e0af569..6173b1c 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java
@@ -68,7 +68,11 @@
                 .addValue("networks", 
VmInitUtils.networkListToJson(vmInit.getNetworks()))
                 .addValue("password", 
DbFacadeUtils.encryptPassword(vmInit.getRootPassword()))
                 .addValue("winkey", vmInit.getWinKey())
-                .addValue("custom_script", vmInit.getCustomScript());
+                .addValue("custom_script", vmInit.getCustomScript())
+                .addValue("input_locale", vmInit.getInputLocale())
+                .addValue("ui_language", vmInit.getUiLanguage())
+                .addValue("system_locale", vmInit.getSystemLocale())
+                .addValue("user_locale", vmInit.getUserLocale());
     }
 
     private static class VMInitRowMapper implements RowMapper<VmInit> {
@@ -90,6 +94,10 @@
             entity.setDnsServers(rs.getString("dns_servers"));
             entity.setDnsSearch(rs.getString("dns_search_domains"));
             entity.setCustomScript(rs.getString("custom_script"));
+            entity.setInputLocale(rs.getString("input_locale"));
+            entity.setUiLanguage(rs.getString("ui_language"));
+            entity.setSystemLocale(rs.getString("system_locale"));
+            entity.setUserLocale(rs.getString("user_locale"));
 
             return entity;
         }
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 09325e2..fbfd74a 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -6071,6 +6071,10 @@
         <column>password</column>
         <column>winkey</column>
         <column>custom_script</column>
+        <column>input_locale</column>
+        <column>ui_language</column>
+        <column>system_locale</column>
+        <column>user_locale</column>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4354</value>
             <value>users.mydomain.com</value>
@@ -6084,6 +6088,10 @@
             <value></value>
             <value></value>
             <value></value>
+            <value>en_US</value>
+            <value>en_US</value>
+            <value>en_US</value>
+            <value>en_US</value>
         </row>
     </table>
 </dataset>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
index 28ad6be..de73a21 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
@@ -2506,6 +2506,10 @@
         <xs:element name="windows_license_key" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
         <xs:element name="root_password" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
         <xs:element name="custom_script" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
+        <xs:element name="input_locale" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
+        <xs:element name="ui_language" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
+        <xs:element name="system_locale" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
+        <xs:element name="user_locale" type="xs:string" minOccurs="0" 
maxOccurs="1"/>
       </xs:sequence>
   </xs:complexType>
 
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
index a6cf6c6..ed1feef 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
@@ -1030,6 +1030,22 @@
             }
             entity.setNetworks(networks);
         }
+
+        if (model.isSetInputLocale()) {
+            entity.setInputLocale(model.getInputLocale());
+        }
+
+        if (model.isSetUiLanguage()) {
+            entity.setUiLanguage(model.getUiLanguage());
+        }
+
+        if (model.isSetSystemLocale()) {
+            entity.setSystemLocale(model.getSystemLocale());
+        }
+
+        if (model.isSetUserLocale()) {
+            entity.setUserLocale(model.getUserLocale());
+        }
         return entity;
     }
 
@@ -1074,6 +1090,18 @@
                 
model.getNicConfigurations().getNicConfigurations().add(map(network, null));
             }
         }
+        if (entity.getInputLocale() != null) {
+            model.setInputLocale(entity.getInputLocale());
+        }
+        if (entity.getUiLanguage() != null) {
+            model.setUiLanguage(entity.getUiLanguage());
+        }
+        if (entity.getSystemLocale() != null) {
+            model.setSystemLocale(entity.getSystemLocale());
+        }
+        if (entity.getUserLocale() != null) {
+            model.setUserLocale(entity.getUserLocale());
+        }
         return model;
     }
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
index f6be592..a9b9e6a 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
@@ -16,7 +16,6 @@
 import org.ovirt.engine.core.vdsbroker.vdsbroker.CreateVDSCommand;
 import 
org.ovirt.engine.core.vdsbroker.vdsbroker.CreateVmFromCloudInitVDSCommand;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.CreateVmFromSysPrepVDSCommand;
-import 
org.ovirt.engine.core.vdsbroker.vdsbroker.CreateVmFromSysPrepVDSCommandParameters;
 import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSGenericException;
 
 public class CreateVmVDSCommand<P extends CreateVmVDSCommandParameters> 
extends VdsIdVDSCommandBase<P> {
@@ -63,19 +62,14 @@
 
     private CreateVDSCommand<?> initCreateVDSCommand(VM vm) throws Exception {
         if (vm.isSysprepUsed()) {
-            String domain = (vm.getVmInit() != null && 
vm.getVmInit().getDomain() != null) ?
-                    vm.getVmInit().getDomain() : "";
-            String hostName = (vm.getVmInit() != null && 
vm.getVmInit().getHostname() != null) ?
-                    vm.getVmInit().getHostname() : vm.getName();
+
             // use answer file to run after sysprep.
-            CreateVmFromSysPrepVDSCommandParameters createVmFromSysPrepParam =
-                    new CreateVmFromSysPrepVDSCommandParameters(
+            CreateVmVDSCommandParameters createVmFromSysPrepParam =
+                    new CreateVmVDSCommandParameters(
                             getVdsId(),
-                            vm,
-                            hostName,
-                            domain);
+                            vm);
             
createVmFromSysPrepParam.setSysPrepParams(getParameters().getSysPrepParams());
-            return new 
CreateVmFromSysPrepVDSCommand<CreateVmFromSysPrepVDSCommandParameters>(createVmFromSysPrepParam);
+            return new 
CreateVmFromSysPrepVDSCommand<CreateVmVDSCommandParameters>(createVmFromSysPrepParam);
         }
         else if (vm.isCloudInitUsed()) {
             return new 
CreateVmFromCloudInitVDSCommand<CreateVmVDSCommandParameters>(getParameters());
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVmFromSysPrepVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVmFromSysPrepVDSCommand.java
index ce344dd..862e052 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVmFromSysPrepVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVmFromSysPrepVDSCommand.java
@@ -1,14 +1,14 @@
 package org.ovirt.engine.core.vdsbroker.vdsbroker;
 
+import org.ovirt.engine.core.common.vdscommands.CreateVmVDSCommandParameters;
 
-public class CreateVmFromSysPrepVDSCommand<P extends 
CreateVmFromSysPrepVDSCommandParameters>
+
+public class CreateVmFromSysPrepVDSCommand<P extends 
CreateVmVDSCommandParameters>
         extends CreateVDSCommand<P> {
     public CreateVmFromSysPrepVDSCommand(P parameters) {
         super(parameters);
         String sysPrepContent =
                 SysprepHandler.getSysPrep(parameters.getVm(),
-                        parameters.getHostName(),
-                        parameters.getDomain(),
                         parameters.getSysPrepParams());
 
         if (!"".equals(sysPrepContent)) {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVmFromSysPrepVDSCommandParameters.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVmFromSysPrepVDSCommandParameters.java
deleted file mode 100644
index 5cabff9..0000000
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVmFromSysPrepVDSCommandParameters.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.ovirt.engine.core.vdsbroker.vdsbroker;
-
-import org.ovirt.engine.core.common.businessentities.VM;
-import org.ovirt.engine.core.common.vdscommands.CreateVmVDSCommandParameters;
-import org.ovirt.engine.core.compat.Guid;
-
-public class CreateVmFromSysPrepVDSCommandParameters extends 
CreateVmVDSCommandParameters {
-    private String _hostName;
-    private String _domain;
-
-    public CreateVmFromSysPrepVDSCommandParameters(Guid vdsId, VM vm, String 
hostName, String domain) {
-        super(vdsId, vm);
-        _hostName = hostName;
-        _domain = domain;
-    }
-
-    public String getHostName() {
-        return _hostName;
-    }
-
-    public String getDomain() {
-        return _domain;
-    }
-
-    @Override
-    public String toString() {
-        return String.format("%s, hostName=%s, domain=%s", super.toString(), 
getHostName(), getDomain());
-    }
-}
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SysprepHandler.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SysprepHandler.java
index 9807734..c3589ec 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SysprepHandler.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SysprepHandler.java
@@ -60,10 +60,15 @@
         passwordPerDomain = Config.<DomainsPasswordMap> 
getValue(ConfigValues.AdUserPassword);
     }
 
-    public static String getSysPrep(VM vm, String hostName, String domain, 
SysPrepParams sysPrepParams) {
+    public static String getSysPrep(VM vm, SysPrepParams sysPrepParams) {
         String sysPrepContent = "";
         sysPrepContent = LoadFile(osRepository.getSysprepPath(vm.getVmOsId(), 
null));
         sysPrepContent = replace(sysPrepContent, "$ProductKey$", 
osRepository.getProductKey(vm.getVmOsId(), null));
+
+        String domain = (vm.getVmInit() != null && vm.getVmInit().getDomain() 
!= null) ?
+                vm.getVmInit().getDomain() : "";
+        String hostName = (vm.getVmInit() != null && 
vm.getVmInit().getHostname() != null) ?
+                vm.getVmInit().getHostname() : vm.getName();
 
         if (sysPrepContent.length() > 0) {
 
@@ -75,6 +80,19 @@
 
             sysPrepContent = replace(sysPrepContent, "$TimeZone$", timeZone);
             sysPrepContent = replace(sysPrepContent, "$OrgName$", 
Config.<String> getValue(ConfigValues.OrganizationName));
+
+            if (vm.getVmInit() != null) {
+                sysPrepContent = replace(sysPrepContent, 
"$SetupUiLanguageUiLanguage$", vm.getVmInit().getInputLocale() != null ?
+                        vm.getVmInit().getInputLocale() : Config.<String> 
getValue(ConfigValues.DefaultSysprepLocale));
+                sysPrepContent = replace(sysPrepContent, "$InputLocale$", 
vm.getVmInit().getInputLocale() != null ?
+                        vm.getVmInit().getInputLocale() : Config.<String> 
getValue(ConfigValues.DefaultSysprepLocale));
+                sysPrepContent = replace(sysPrepContent, "$UiLanguage$", 
vm.getVmInit().getUiLanguage() != null ?
+                        vm.getVmInit().getUiLanguage() : Config.<String> 
getValue(ConfigValues.DefaultSysprepLocale));
+                sysPrepContent = replace(sysPrepContent, "$SystemLocale$", 
vm.getVmInit().getSystemLocale() != null ?
+                        vm.getVmInit().getSystemLocale() : Config.<String> 
getValue(ConfigValues.DefaultSysprepLocale));
+                sysPrepContent = replace(sysPrepContent, "$UserLocale$", 
vm.getVmInit().getUserLocale() != null ?
+                        vm.getVmInit().getUserLocale() : Config.<String> 
getValue(ConfigValues.DefaultSysprepLocale));
+            }
         }
 
         return sysPrepContent;
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
index ece625c..38daa85 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
@@ -157,6 +157,18 @@
     @DefaultStringValue("Use Cloud-Init")
     String runOncePopupCloudInitLabel();
 
+    @DefaultStringValue("Input Locale")
+    String inputLocaleLabel();
+
+    @DefaultStringValue("UI Language")
+    String uiLanguageLabel();
+
+    @DefaultStringValue("System Locale")
+    String systemLocaleLabel();
+
+    @DefaultStringValue("User Locale")
+    String userLocaleLabel();
+
     @DefaultStringValue("VM Hostname")
     String cloudInitHostnameLabel();
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.java
index 39cef26..6a232d0 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.java
@@ -2,7 +2,6 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.editor.client.SimpleBeanEditorDriver;
-import com.google.gwt.editor.client.Editor.Ignore;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.resources.client.ClientBundle;
@@ -110,6 +109,26 @@
     @Path(value = "windowsHostname.entity")
     @WithElementId
     EntityModelTextBoxEditor windowsHostnameEditor;
+
+    @UiField
+    @Path(value = "inputLocale.entity")
+    @WithElementId
+    EntityModelTextBoxEditor inputLocaleEditor;
+
+    @UiField
+    @Path(value = "uiLanguage.entity")
+    @WithElementId
+    EntityModelTextBoxEditor uiLanguageEditor;
+
+    @UiField
+    @Path(value = "systemLocale.entity")
+    @WithElementId
+    EntityModelTextBoxEditor systemLocaleEditor;
+
+    @UiField
+    @Path(value = "userLocale.entity")
+    @WithElementId
+    EntityModelTextBoxEditor userLocaleEditor;
 
     @UiField
     @Path(value = "hostname.entity")
@@ -329,6 +348,10 @@
     void localize() {
         hostnameEditor.setLabel(constants.cloudInitHostnameLabel());
         windowsHostnameEditor.setLabel(constants.cloudInitHostnameLabel());
+        inputLocaleEditor.setLabel(constants.inputLocaleLabel());
+        uiLanguageEditor.setLabel(constants.uiLanguageLabel());
+        systemLocaleEditor.setLabel(constants.systemLocaleLabel());
+        userLocaleEditor.setLabel(constants.userLocaleLabel());
         
authorizedKeysEditor.setLabel(constants.cloudInitAuthorizedKeysLabel());
         passwordSetEditor.setLabel(constants.vmInitPasswordSetLabel());
         
regenerateKeysEnabledEditor.setLabel(constants.cloudInitRegenerateKeysLabel());
@@ -397,6 +420,10 @@
         
networkStartOnBootEditor.addStyleName(customizableStyle.primaryOption());
         networkDhcpEditor.addStyleName(customizableStyle.primaryOption());
         
windowsSysprepTimeZoneEditor.addStyleName(customizableStyle.primaryOption());
+        inputLocaleEditor.addStyleName(customizableStyle.primaryOption());
+        uiLanguageEditor.addStyleName(customizableStyle.primaryOption());
+        systemLocaleEditor.addStyleName(customizableStyle.primaryOption());
+        userLocaleEditor.addStyleName(customizableStyle.primaryOption());
         hostnameEditor.addStyleName(customizableStyle.primaryOption());
         windowsHostnameEditor.addStyleName(customizableStyle.primaryOption());
         domainEditor.addStyleName(customizableStyle.primaryOption());
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.ui.xml
index bf18bc6..1ca489e 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.ui.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmInitWidget.ui.xml
@@ -60,6 +60,10 @@
             <e:EntityModelTextBoxEditor ui:field="windowsHostnameEditor" />
             <e:EntityModelCheckBoxEditor 
ui:field="windowsSyspreptimeZoneEnabledEditor" />
             <e:ListModelListBoxEditor ui:field="windowsSysprepTimeZoneEditor" 
/>
+            <e:EntityModelTextBoxEditor ui:field="inputLocaleEditor" />
+            <e:EntityModelTextBoxEditor ui:field="uiLanguageEditor" />
+            <e:EntityModelTextBoxEditor ui:field="systemLocaleEditor" />
+            <e:EntityModelTextBoxEditor ui:field="userLocaleEditor" />
         </g:FlowPanel>
 
         <g:FlowPanel ui:field="cloudInitOptionsContent">
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInitModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInitModel.java
index d3d5f55..17083fc 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInitModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInitModel.java
@@ -71,6 +71,38 @@
         privateWindowsHostname = value;
     }
 
+    private EntityModel privateInputLocale;
+    public EntityModel getInputLocale() {
+        return privateInputLocale;
+    }
+    private void setInputLocale(EntityModel value) {
+        privateInputLocale = value;
+    }
+
+    private EntityModel privateUiLanguage;
+    public EntityModel getUiLanguage() {
+        return privateUiLanguage;
+    }
+    private void setUiLanguage(EntityModel value) {
+        privateUiLanguage = value;
+    }
+
+    private EntityModel privateSystemLocale;
+    public EntityModel getSystemLocale() {
+        return privateSystemLocale;
+    }
+    private void setSystemLocale(EntityModel value) {
+        privateSystemLocale = value;
+    }
+
+    private EntityModel privateUserLocale;
+    public EntityModel getUserLocale() {
+        return privateUserLocale;
+    }
+    private void setUserLocale(EntityModel value) {
+        privateUserLocale = value;
+    }
+
     private EntityModel privateHostname;
     public EntityModel getHostname() {
         return privateHostname;
@@ -343,6 +375,10 @@
         setWindowsSysprepTimeZone(new ListModel());
         setWindowsSysprepTimeZoneEnabled(new EntityModel());
         setWindowsHostname(new EntityModel());
+        setInputLocale(new EntityModel());
+        setUiLanguage(new EntityModel());
+        setSystemLocale(new EntityModel());
+        setUserLocale(new EntityModel());
 
         setHostname(new EntityModel());
         setDomain(new EntityModel());
@@ -404,6 +440,10 @@
         getPasswordSet().setIsChangable(false);
 
         getWindowsHostname().setEntity("");
+        getInputLocale().setEntity("");
+        getUiLanguage().setEntity("");
+        getSystemLocale().setEntity("");
+        getUserLocale().setEntity("");
         getHostname().setEntity("");
         getDomain().setEntity("");
         getRootPassword().setEntity("");
@@ -439,6 +479,18 @@
             if (!StringHelper.isNullOrEmpty(vmInit.getHostname())) {
                 getHostname().setEntity(vmInit.getHostname());
                 getWindowsHostname().setEntity(vmInit.getHostname());
+            }
+            if (!StringHelper.isNullOrEmpty(vmInit.getInputLocale())) {
+                getInputLocale().setEntity(vmInit.getInputLocale());
+            }
+            if (!StringHelper.isNullOrEmpty(vmInit.getUiLanguage())) {
+                getUiLanguage().setEntity(vmInit.getUiLanguage());
+            }
+            if (!StringHelper.isNullOrEmpty(vmInit.getSystemLocale())) {
+                getSystemLocale().setEntity(vmInit.getSystemLocale());
+            }
+            if (!StringHelper.isNullOrEmpty(vmInit.getUserLocale())) {
+                getUserLocale().setEntity(vmInit.getUserLocale());
             }
             getDomain().setEntity(vmInit.getDomain());
             final String tz = vmInit.getTimeZone();
@@ -697,6 +749,12 @@
             vmInit.setHostname(isWindowsOS ? (String) 
getWindowsHostname().getEntity() :
                 (String) getHostname().getEntity());
         }
+        if (isWindowsOS) {
+            vmInit.setInputLocale((String)getInputLocale().getEntity());
+            vmInit.setUiLanguage((String)getUiLanguage().getEntity());
+            vmInit.setSystemLocale((String)getSystemLocale().getEntity());
+            vmInit.setUserLocale((String)getUserLocale().getEntity());
+        }
 
         if (getRootPasswordEnabled()) {
             vmInit.setRootPassword((String) getRootPassword().getEntity());
@@ -818,7 +876,7 @@
     }
 
     private void removeNetwork() {
-        networkMap.remove((String) getNetworkList().getSelectedItem());
+        networkMap.remove(getNetworkList().getSelectedItem());
         getNetworkList().setItems(new ArrayList<String>(networkMap.keySet()));
         
getNetworkList().setSelectedItem(Linq.firstOrDefault(networkMap.keySet()));
     }
diff --git a/packaging/conf/sysprep/sysprep.2k12x64 
b/packaging/conf/sysprep/sysprep.2k12x64
index 67f1b99..6f82c1e 100644
--- a/packaging/conf/sysprep/sysprep.2k12x64
+++ b/packaging/conf/sysprep/sysprep.2k12x64
@@ -24,10 +24,10 @@
         </component>
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <InputLocale>0409:00000409</InputLocale>
-            <SystemLocale>en-us</SystemLocale>
-            <UILanguage>en-us</UILanguage>
-            <UILanguageFallback>en-us</UILanguageFallback>
-            <UserLocale>en-us</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <UILanguageFallback>en-US</UILanguageFallback>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
         <component name="Microsoft-Windows-Shell-Setup" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <Display>
@@ -54,13 +54,13 @@
     <settings pass="windowsPE">
         <component name="Microsoft-Windows-International-Core-WinPE" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <SetupUILanguage>
-                <UILanguage>en-us</UILanguage>
+                <UILanguage>$SetupUiLanguageUiLanguage$</UILanguage>
             </SetupUILanguage>
             <InputLocale>0409:00000409</InputLocale>
-            <UILanguage>en-us</UILanguage>
-            <SystemLocale>en-us</SystemLocale>
-            <UILanguageFallback>en-us</UILanguageFallback>
-            <UserLocale>en-us</UserLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguageFallback>en-US</UILanguageFallback>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
         <component name="Microsoft-Windows-Setup" processorArchitecture="x86" 
publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <UserData>
diff --git a/packaging/conf/sysprep/sysprep.2k8 
b/packaging/conf/sysprep/sysprep.2k8
index 187aed9..12ff6c0 100644
--- a/packaging/conf/sysprep/sysprep.2k8
+++ b/packaging/conf/sysprep/sysprep.2k8
@@ -62,10 +62,10 @@
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
                <!-- REgionalSettings/Language -->
             <InputLocale>0409:00000409</InputLocale>
-            <SystemLocale>en-us</SystemLocale>
-            <UILanguage>en-us</UILanguage>
-            <UILanguageFallback>en-us</UILanguageFallback>
-            <UserLocale>en-us</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <UILanguageFallback>en-US</UILanguageFallback>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
     </settings>
     <settings pass="windowsPE">
@@ -83,14 +83,14 @@
         </component>
         <component name="Microsoft-Windows-International-Core-WinPE" 
processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <SetupUILanguage>
-                <UILanguage>en-us</UILanguage>
+                <UILanguage>$SetupUiLanguageUiLanguage$</UILanguage>
             </SetupUILanguage>
                <!-- REgionalSettings/Language -->
             <InputLocale>0409:00000409</InputLocale>
-            <SystemLocale>en-us</SystemLocale>
-            <UILanguage>en-us</UILanguage>
-            <UILanguageFallback>en-us</UILanguageFallback>
-            <UserLocale>en-us</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <UILanguageFallback>en-US</UILanguageFallback>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
     </settings>
     <cpi:offlineImage cpi:source="wim:c:/osc/sources/install.wim#Windows 
Longhorn SERVERSTANDARD" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
diff --git a/packaging/conf/sysprep/sysprep.2k8x64 
b/packaging/conf/sysprep/sysprep.2k8x64
index 434e70b..5a93807 100644
--- a/packaging/conf/sysprep/sysprep.2k8x64
+++ b/packaging/conf/sysprep/sysprep.2k8x64
@@ -24,10 +24,10 @@
         </component>
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <InputLocale>0409:00000409</InputLocale>
-            <SystemLocale>en-us</SystemLocale>
-            <UILanguage>en-us</UILanguage>
-            <UILanguageFallback>en-us</UILanguageFallback>
-            <UserLocale>en-us</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <UILanguageFallback>en-US</UILanguageFallback>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
         <component name="Microsoft-Windows-Shell-Setup" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <Display>
@@ -54,13 +54,13 @@
     <settings pass="windowsPE">
         <component name="Microsoft-Windows-International-Core-WinPE" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <SetupUILanguage>
-                <UILanguage>en-us</UILanguage>
+                <UILanguage>$SetupUiLanguageUiLanguage$</UILanguage>
             </SetupUILanguage>
             <InputLocale>0409:00000409</InputLocale>
-            <UILanguage>en-us</UILanguage>
-            <SystemLocale>en-us</SystemLocale>
-            <UILanguageFallback>en-us</UILanguageFallback>
-            <UserLocale>en-us</UserLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguageFallback>en-US</UILanguageFallback>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
         <component name="Microsoft-Windows-Setup" processorArchitecture="x86" 
publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <UserData>
diff --git a/packaging/conf/sysprep/sysprep.w7 
b/packaging/conf/sysprep/sysprep.w7
index 8172033..a60e412 100644
--- a/packaging/conf/sysprep/sysprep.w7
+++ b/packaging/conf/sysprep/sysprep.w7
@@ -18,12 +18,12 @@
         </component>
         <component name="Microsoft-Windows-International-Core-WinPE" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <SetupUILanguage>
-                <UILanguage>en-US</UILanguage>
+                <UILanguage>$SetupUiLanguageUiLanguage$</UILanguage>
             </SetupUILanguage>
-            <InputLocale>en-US</InputLocale>
-            <UILanguage>en-US</UILanguage>
-            <SystemLocale>en-US</SystemLocale>
-            <UserLocale>en-US</UserLocale>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
     </settings>
     <settings pass="specialize">
@@ -49,10 +49,10 @@
             <TimeZone>$TimeZone$</TimeZone>
         </component>
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-            <InputLocale>en-US</InputLocale>
-            <UserLocale>en-US</UserLocale>
-            <SystemLocale>en-US</SystemLocale>
-            <UILanguage>en-US</UILanguage>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UserLocale>$UserLocale$</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
         </component>
     </settings>
     <settings pass="oobeSystem">
@@ -81,10 +81,10 @@
             </OOBE>
         </component>
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-            <InputLocale>en-US</InputLocale>
-            <UserLocale>en-US</UserLocale>
-            <SystemLocale>en-US</SystemLocale>
-            <UILanguage>en-US</UILanguage>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UserLocale>$UserLocale$</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
         </component>
     </settings>
     <cpi:offlineImage cpi:source="wim:d:/sources/install.wim#Windows 7 
ENTERPRISE" xmlns:cpi="urn:schemas-microsoft-com:cpi"/>
diff --git a/packaging/conf/sysprep/sysprep.w7x64 
b/packaging/conf/sysprep/sysprep.w7x64
index a31242a..864876f 100644
--- a/packaging/conf/sysprep/sysprep.w7x64
+++ b/packaging/conf/sysprep/sysprep.w7x64
@@ -18,12 +18,12 @@
         </component>
         <component name="Microsoft-Windows-International-Core-WinPE" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <SetupUILanguage>
-                <UILanguage>en-US</UILanguage>
+                <UILanguage>$SetupUiLanguageUiLanguage$</UILanguage>
             </SetupUILanguage>
-            <InputLocale>en-US</InputLocale>
-            <UILanguage>en-US</UILanguage>
-            <SystemLocale>en-US</SystemLocale>
-            <UserLocale>en-US</UserLocale>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
     </settings>
     <settings pass="specialize">
@@ -39,10 +39,10 @@
             <TimeZone>$TimeZone$</TimeZone>
         </component>
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-            <InputLocale>en-US</InputLocale>
-            <UserLocale>en-US</UserLocale>
-            <SystemLocale>en-US</SystemLocale>
-            <UILanguage>en-US</UILanguage>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UserLocale>$UserLocale$</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
         </component>
         <component name="Microsoft-Windows-UnattendedJoin" 
processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <Identification>
@@ -57,10 +57,10 @@
     </settings>
     <settings pass="oobeSystem">
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-            <InputLocale>en-US</InputLocale>
-            <UserLocale>en-US</UserLocale>
-            <SystemLocale>en-US</SystemLocale>
-            <UILanguage>en-US</UILanguage>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UserLocale>$UserLocale$</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
         </component>
         <component name="Microsoft-Windows-Shell-Setup" 
processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <OOBE>
diff --git a/packaging/conf/sysprep/sysprep.w8 
b/packaging/conf/sysprep/sysprep.w8
index 20237a5..36b365e 100644
--- a/packaging/conf/sysprep/sysprep.w8
+++ b/packaging/conf/sysprep/sysprep.w8
@@ -18,12 +18,12 @@
         </component>
         <component name="Microsoft-Windows-International-Core-WinPE" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <SetupUILanguage>
-                <UILanguage>en-US</UILanguage>
+                <UILanguage>$SetupUiLanguageUiLanguage$</UILanguage>
             </SetupUILanguage>
-            <InputLocale>en-US</InputLocale>
-            <UILanguage>en-US</UILanguage>
-            <SystemLocale>en-US</SystemLocale>
-            <UserLocale>en-US</UserLocale>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
     </settings>
     <settings pass="specialize">
@@ -49,10 +49,10 @@
             <TimeZone>$TimeZone$</TimeZone>
         </component>
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-            <InputLocale>en-US</InputLocale>
-            <UserLocale>en-US</UserLocale>
-            <SystemLocale>en-US</SystemLocale>
-            <UILanguage>en-US</UILanguage>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UserLocale>$UserLocale$</UserLocale>
+            <SystemLocale>$UILanguage$</SystemLocale>
+            <UILanguage>$SystemLocale$</UILanguage>
         </component>
     </settings>
     <settings pass="oobeSystem">
@@ -81,10 +81,10 @@
             </OOBE>
         </component>
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-            <InputLocale>en-US</InputLocale>
-            <UserLocale>en-US</UserLocale>
-            <SystemLocale>en-US</SystemLocale>
-            <UILanguage>en-US</UILanguage>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UserLocale>$UserLocale$</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
         </component>
     </settings>
     <cpi:offlineImage cpi:source="wim:d:/sources/install.wim#Windows 8 
ENTERPRISE" xmlns:cpi="urn:schemas-microsoft-com:cpi"/>
diff --git a/packaging/conf/sysprep/sysprep.w8x64 
b/packaging/conf/sysprep/sysprep.w8x64
index 63e06ba..c8d2dbf 100644
--- a/packaging/conf/sysprep/sysprep.w8x64
+++ b/packaging/conf/sysprep/sysprep.w8x64
@@ -18,12 +18,12 @@
         </component>
         <component name="Microsoft-Windows-International-Core-WinPE" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <SetupUILanguage>
-                <UILanguage>en-US</UILanguage>
+                <UILanguage>$SetupUiLanguageUiLanguage$</UILanguage>
             </SetupUILanguage>
-            <InputLocale>en-US</InputLocale>
-            <UILanguage>en-US</UILanguage>
-            <SystemLocale>en-US</SystemLocale>
-            <UserLocale>en-US</UserLocale>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UILanguage>$UILanguage$</UILanguage>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UserLocale>$UserLocale$</UserLocale>
         </component>
     </settings>
     <settings pass="specialize">
@@ -39,10 +39,10 @@
             <TimeZone>$TimeZone$</TimeZone>
         </component>
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-            <InputLocale>en-US</InputLocale>
-            <UserLocale>en-US</UserLocale>
-            <SystemLocale>en-US</SystemLocale>
-            <UILanguage>en-US</UILanguage>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UserLocale>$UserLocale$</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
         </component>
         <component name="Microsoft-Windows-UnattendedJoin" 
processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <Identification>
@@ -57,10 +57,10 @@
     </settings>
     <settings pass="oobeSystem">
         <component name="Microsoft-Windows-International-Core" 
processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
-            <InputLocale>en-US</InputLocale>
-            <UserLocale>en-US</UserLocale>
-            <SystemLocale>en-US</SystemLocale>
-            <UILanguage>en-US</UILanguage>
+            <InputLocale>$InputLocale$</InputLocale>
+            <UserLocale>$UserLocale$</UserLocale>
+            <SystemLocale>$SystemLocale$</SystemLocale>
+            <UILanguage>$UILanguage$</UILanguage>
         </component>
         <component name="Microsoft-Windows-Shell-Setup" 
processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" 
language="neutral" versionScope="nonSxS" 
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
             <OOBE>
diff --git 
a/packaging/dbscripts/upgrade/03_05_0100_vm_init_add_sysprep_locale.sql 
b/packaging/dbscripts/upgrade/03_05_0100_vm_init_add_sysprep_locale.sql
new file mode 100644
index 0000000..040deca
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_05_0100_vm_init_add_sysprep_locale.sql
@@ -0,0 +1,8 @@
+-- ----------------------------------------------------------------------
+-- Adding setup language options for Windows Sysprep
+-- ----------------------------------------------------------------------
+alter table vm_init
+add column input_locale VARCHAR(256) DEFAULT NULL,
+add column ui_language VARCHAR(256) DEFAULT NULL,
+add column system_locale VARCHAR(256) DEFAULT NULL,
+add column user_locale VARCHAR(256) DEFAULT NULL;
diff --git a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql 
b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
index b3c78bd..f4d29d4 100644
--- a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
+++ b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
@@ -203,6 +203,7 @@
 select fn_db_add_config_value('CloudInitSupported','false','3.0');
 select fn_db_add_config_value('CloudInitSupported','false','3.1');
 select fn_db_add_config_value('CloudInitSupported','false','3.2');
+select fn_db_add_config_value('DefaultSysprepLocale','en_US','general');
 select fn_db_add_config_value('ImportGlanceImageAsTemplate','false','3.0');
 select fn_db_add_config_value('ImportGlanceImageAsTemplate','false','3.1');
 select fn_db_add_config_value('ImportGlanceImageAsTemplate','false','3.2');
diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql
index 228a359..3c9152c 100644
--- a/packaging/dbscripts/vms_sp.sql
+++ b/packaging/dbscripts/vms_sp.sql
@@ -1194,7 +1194,12 @@
     v_networks TEXT,
     v_password TEXT,
     v_winkey VARCHAR(30),
-    v_custom_script TEXT)
+    v_custom_script TEXT,
+    v_input_locale VARCHAR(256),
+    v_ui_language VARCHAR(256),
+    v_system_locale VARCHAR(256),
+    v_user_locale VARCHAR(256))
+
 RETURNS VOID
 
    AS $procedure$
@@ -1202,7 +1207,9 @@
       UPDATE vm_init
       SET host_name=v_host_name, domain=v_domain, 
authorized_keys=v_authorized_keys, regenerate_keys=v_regenerate_keys,
           time_zone=v_time_zone, dns_servers=v_dns_servers, 
dns_search_domains=v_dns_search_domains,
-          networks=v_networks, password=v_password, winkey=v_winkey, 
custom_script=v_custom_script
+          networks=v_networks, password=v_password, winkey=v_winkey, 
custom_script=v_custom_script,
+          input_locale=v_input_locale, ui_language=v_ui_language, 
system_locale=v_system_locale,
+          user_locale=v_user_locale
       WHERE vm_id = v_vm_id;
 END; $procedure$
 LANGUAGE plpgsql;
@@ -1231,14 +1238,20 @@
     v_networks TEXT,
     v_password TEXT,
     v_winkey VARCHAR(30),
-    v_custom_script TEXT)
+    v_custom_script TEXT,
+    v_input_locale VARCHAR(256),
+    v_ui_language VARCHAR(256),
+    v_system_locale VARCHAR(256),
+    v_user_locale VARCHAR(256))
 RETURNS VOID
    AS $procedure$
 BEGIN
 INSERT INTO vm_init(vm_id, host_name, domain, authorized_keys, 
regenerate_keys, time_zone, dns_servers, dns_search_domains,
-                    networks, password, winkey, custom_script)
+                    networks, password, winkey, custom_script, input_locale, 
ui_language,
+                    system_locale, user_locale)
        VALUES(v_vm_id, v_host_name, v_domain, v_authorized_keys, 
v_regenerate_keys, v_time_zone, v_dns_servers, v_dns_search_domains,
-                    v_networks, v_password, v_winkey, v_custom_script);
+                    v_networks, v_password, v_winkey, v_custom_script, 
v_input_locale, v_ui_language,
+                    v_system_locale, v_user_locale);
 
 END; $procedure$
 LANGUAGE plpgsql;


-- 
To view, visit http://gerrit.ovirt.org/25488
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I414c1d097a7cf8e23b322ca0f23dcb9d66ac0691
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Shahar Havivi <shav...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to