Web Applications-Development-Localization and Internationalization

Version 4.1 by Pascal Robert on 2007/09/03 15:13

Unicode

To Enable Unicode for your WO app, add the following to your application constructor:


WOMessage.setDefaultEncoding("UTF8");

This tells all WOResponse and WORequest to use UTF8 (Unicode).

Then you just need to tell the browser. Make all your .wo pages include this meta tag in their HTML:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- etc... -->

Jesse Barnum

Great tip - here is a simple method call you can stick in your Application object to automatically achieve the results outlined above:


private boolean enableUTFEncoding = false;

public void enableUTFEncoding() {
 enableUTFEncoding = true;
 WOMessage.setDefaultEncoding(_NSUtilities.UTF8StringEncoding);
}

public WOResponse dispatchRequest(WORequest theRequest) {
 WOResponse result = super.dispatchRequest(theRequest);
 if( enableUTFEncoding && "text/html".equals(result.headerForKey("content-type")) ) {
   result.setHeader("text/html; charset=UTF-8; encoding=UTF-8", "content-type");
  }
 return result;
}

Helmut Schottmüller

Unfortunately it's not so easy if you want to use file upload fields and UTF-8 encoding in the same form. Adding a file upload component means that you have to set the form's enctype to "multipart/form-data". To force a multipart form to use UTF-8 encoding usually needs an enctype of "multipart/form-data; charset=UTF-8" but WO is not able to identify such a form as multipart form. You will get a "java.lang.IllegalArgumentException: This form is missing a 'enctype=multipart/form-data' attribute. It is required for WOFileUpload to work." error when you open the form in the browser.

To make sure that UTF-8 is supported in multipart forms as well, you have to add the following code to your Application object:


public WORequest createRequest(String aMethod, String aURL, String anHTTPVersion,
   NSDictionary someHeaders, NSData aContent, NSDictionary someInfo) {
 WORequest newRequest = super.createRequest(aMethod, aURL, anHTTPVersion,
     someHeaders, aContent, someInfo);
 newRequest.setDefaultFormValueEncoding(_NSUtilities.UTF8StringEncoding);
 return newRequest;
}

To make WOFileUpload components working I also had to add the launch parameter WOUseLegacyMultipartParser true to my application. This launch parameter forces the parsing of all form values, the first time WORequest.formValues is called. See the apple developer documentation for additional information. Without WOUseLegacyMultipartParser true I had serious problems in my applications using a WOFileUpload component because the bindings data and filePath have been emptied after a form POST.

With Jesse's code and this extension, you will be able to handle UTF-8 character data correctly in your WO application.

If you use localized strings in your UTF-8 application you may also check out Project Wonder's ERXLocalizer class.