The default locale is the locale that is set by the Web browser of the user, or the English (United States) locale if the vSphere Client does not support the set locale.
In the vSphere Client locales are usually handled on the user interface layer. In some cases, the HTML plug-in must return text from the Java service layer such as the properties of a vSphere object adm error messages.
Handling Resources in the plugin.xml Manifest File
The localized resources for your plug-in are located in the locales directory of the WAR file. The plugin.xml manifest file contains the <resources>
element that you must use to specify the location of plug-in resources such as images and localization data. The defaultBundle
attribute of the <plugin>
element specifies the name of the main .properties file of the plug-in and is added automatically by the Ant build scripts.
To instruct the vSphere Client to use the locale that your Web browser specifies at runtime, set {locale}
as a value to the locale
attribute of the <resource>
element in the plugin.xml manifest file. You must avoid hard-coding a specific locale as a value to the locale
attribute.
The plugin.xml manifest file contains the names of views, dialogs, action menus, icons, and other localizable objects. These strings and icons must be localized and not hard-coded in a particular language. If the string or icon is defined in the main properties file specified with the defaultBundle
attribute, you must use the #{RESOURCE_KEY}
syntax for the element and attribute values. If the string or icon is defined in a different .properties file, use the #{BUNDLE_NAME:RESOURCE_KEY}
syntax for the element and attribute values.
Localizing Strings and Icons in the plugin.xml Manifest File
The following code snippet demonstrates how you can specify the values for strings and icons that must be localized in the vSphere Client depending on the settings of the Web browser. The main properties file of the plug-in is locale/en_US/com_vmware_samples_chassisa.properties which is reflected with the value of the defaultBundle
attribute.
<plugin id="com.vmware.samples.chassisa" defaultBundle="com_vmware_samples_chassisa"> <resources> <resource locale="{locale}"> <module uri="locales/chassisa-{locale}.swf"/> </resource> </resources> ... <templateInstance id="com.vmware.samples.lists.allChassis"> <templateId>vsphere.core.inventorylist.objectCollectionTemplate</templateId> <variable name="namespace" value="com.vmware.samples.chassisa_collection"/> <variable name="title" value="#{chassisLabel}"/> <variable name="icon" value="#{chassis}"/> ...
chassisLabel
string and the
chassis
icon are defined in the
com_vmware_samples_chassisa.properties file in the following way:
# ------- String properties -------- chassisLabel = ChassisA summary.title = Chassis main info ... # ------------- Images ------------- chassis = Embed("../../assets/images/chassis.png") localizedImage.url = assets/images/localizedImage-en_US.png ...
Handling Resources in the HTML and JavaScript Code
You can retrieve the current client locale by using the app.getClientLocale() method from the JavaScript API. You can use the locale information to localize your plug-in UI with a framework of your choice. For an example of localizing a plug-in UI, see the HTML sample plug-in included with the SDK.
Handling Resources at the Service Layer
In some cases your plug-in might return strings from the service layer that must be displayed in the vSphere Client. For example, the service layer can return the properties of a vSphere object that must be displayed in a human-readable format, or an error message that comes from the back end. You must retrieve the current locale of the user and return the translated text for that locale in your Java code.
In case of error messages, your back end server might have the messages localized. In other cases, you can use the standard Java localization APIs and add .properties files inside your JAR files. These properties files are used to load the correct strings based on the locale.
// see the vsphere-wssdk-service sample for injecting _userSessionService in your class UserSession userSession = _userSessionService.getUserSession(); String locale = userSession.locale; ...