Lately I’ve been implementing a new Citrix XenApp 6.5 environment for a large international customer.
Because the environment will be used by people from all over the world, the customer requested to have multiple language packs installed and all users should get their correct language settings, regional options and keyboards at logon according to their active directory security group memberships.
I remember from back in the days on windows 2003 this could be a nightmare, but on windows 2008 R2 with a few registry keys in AppSense and some GPO’s it’s quite easy to get this right.
First install all your required language packs on your XenApp or RDS server or if you’re using Citrix Provisioning, install them in your vDisk.
1 . Security groups
Create a separate active directory security group for each language. I’m going to use these groups as conditions in AppSense environment manager and for security filtering on the active directory GPO’s.
So for example create a security group called “Japanese language” and add all Japanese users to this group.
2. Ignore remote keyboard
When a RDP client connects to a remote desktop server, the client’s input language and keyboard settings are detected, which will obviously cause trouble if you want to push language and keyboard settings for your users.
To disable this feature on your remote desktop or Citrix XenApp server, add a DWORD value called IgnoreRemoteKeyboardLayout with a value of 1 under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout.
3. Regional options
Create a separate GPO for all your languages, remove the “Authenticated Users” from the security filtering and add your corresponding active directory security group to each GPO.
Edit each GPO with the regional options you require and make sure to hit F5 on all tabs so that the dotted red line turns into a green line (only settings which have a green line underneath are applied).
4. Display language
Create a node in your AppSense environment manager policy configuration and add the active directory security groups as a user group conditions.
The registry settings for the display language are located under HKEY_CURRENT_USER\Control Panel\Desktop.
Change the language to your required language an export these two values to a reg file: PreferredUILanguages and PreferredUILanguagesPending.
So if you created an AppSense environment manager user group condition for the Japanese active directory security group, import the Japanese reg file underneath that condition.
5. Keyboard layout
The preferred keyboard layout registry key is located under HKEY_CURRENT_USER\Keyboard Layout\Preload.
The string value named 1 is the one you need. The value will be the keyboard code for your country.
So for a Japanese keyboard we need a string valued named 1 with a value of 00000411
For a complete list of keyboard codes, refer to http://support.microsoft.com/kb/262283
6. Geographical location
The geographical location registry key is located under HKEY_CURRENT_USER\Control Panel\International\Geo.
The value of the string value called Nation determines the user’s geographical location.
For a complete list of geographical location values, refer to http://msdn.microsoft.com/en-us/library/ms912039.aspx
Import this registry key in your AppSense environment manager policy configuration.
7. Hide the language bar
If you are going to push all these language en regional settings to your users, you might as well hide the language bar.
To do this, create a DWORD value named ShowStatus with a value of 3 under
HKEY_CURRENT_USER\Software\Microsoft\CTF\LangBar in your AppSense environment manager policy configuration.
8. AppSense personalization desktop settings
Now that we have all settings in place, we have to tweak AppSense personalization.
When you would remove a user from the Japanese security group and add him to another language security group after he has already logged in at least once, you will see some unexpected behavior.
The desktop settings from AppSense personalization will persist some of his old Japanese settings and the user will now have a mixture of language settings.
Connect to your AppSense personalization server, go to desktop settings and uncheck the following: Keyboard, language and locale.
Everything is now configured properly and ready to go!






Thanks, you saved my day !
I had troubles with the gpp for regional settings. At the end it was due to the personalization of Appsense which rolled back my gpp for the regional settings.
Great article and really helped me with our XenApp Desktop deployment. One question remains, although I now have the keyboard and language settings correct how do I change the time zone settings in Appsese, baring in mind we are not doing VDI but XenApp hosted desktop where you use the same VHD image
Hi John,
Great to hear my article helped you out!
About the timezones: I think it can be done through time zone redirection.
Check out this article, this is probably what you are looking for: http://support.citrix.com/article/CTX126099
Hi Michel
Absolutely brilliant it is all now working, what a great site! Many, many thanks.
John@404team.com
Hi Michel,
Great article !
This was just the information I needed since I’ve just started the build of a multi language Citrix XenApp 6.5 environment including Appsense for one of my customers.
I have one question though…..why do I need to create GPO’s for each language separately , can this work also without the creation and usage of GPO’s ?
Isn’t it sufficient to just import the proper registry settings for each language within a condition ?
Since I’m new to working with Appsense perhaps this is a silly question.
Thanks in advance for your help !
Hi Ray,
Ofcourse you could also capture the corresponding registry keys for each language, that’s up to you.
I prefer to use Microsoft GPO as a first choice and if the option is not available, I use AppSense EM.
This is great info!! Thanks!
One other one to look out for is the ICA Client settings:
http://support.citrix.com/article/CTX129166/
This can cause the local client settings to override the Keyboard Layout / Substitution settings applied via Desktop Settings as they apply last, and refresh last – its made harder to diagnose by the fact the ICA Client doesn’t actually write the passed-thru settings to the registry within the ICA Session, so the registry looks correct.
As per the above article, add or edit the KeyboardLayout setting under [WFClient] in %appdata%\ICAClient\appsrv.ini
KeyboardLayout=(Server Default)
If this line is missing, it effectively defaults to:
KeyboardLayout=(User Profile)
Regards,
Richard
Hi,
I have created the same GPO for japanese language but I have enabled the Loop back policy with Replace mode and added the group and citrix server in security filtering in GPO.
Now its working fine for those users are member of security group but the symbol of citrix servers has been changed for all other users on which GPO is not applied.
Symbol are changed like \ to japense language and its showing in all shared drives and folder properties as well.
Is there any way to change in English symbol for other users ??
Pls help me ..
I read your article and found it to be helpful. I have a situation were the primary language is English but the users need to be able to change keyboards to do translation work. I have language packs installed on the servers. Will the local settings transfer into the session?
Hi Michael,
This blogpost is more about pushing settings out to your users.
Setting the registry according to step 2 will basically disable the functionality you require.