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
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
Change the language to your required language an export these two values to a reg file:
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
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
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
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
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!