Microsoft InfoPath 2010
The official blog of the Microsoft InfoPath team

InfoPath Trick to Localize a form in a single view

InfoPath Trick to Localize a form in a single view

  • Comments 4

TRICK: Localized form in a single view

Applies to: Microsoft Office InfoPath 2003 SP1

Need the same form in many languages?  Here’s a trick that’s easier than multiple views.

Summary

By taking advantage of new SP1 features, there’s a simple way to create a multi-language view without duplicating bindings.

I have used a secondary data source with read-only borderless fields as labels for the view.  This secondary data source is populated by an XML File Data Connection that grabs a file in the LabelsLanguage form library.  This form lib populates a drop-dom, changes of this update the aux-dom and refresh the view.

There are 2 buttons for adding new languages and editing the current labels of the form.  These pop up a second solution.  To add a new language, just fill out the form and submit.  Look at one of the existing languages for examples.  If you see a typo in your language, feel free to correct it and save.

To work with button labels, manually update the view using xsl:value-of elements.  Otherwise, use the workaround that I have in the screenshot.

Known issues:

  • If you update a language on the fly, you need to force IE to always update the cache so you will get the drop-down changes.
  • Some flashing when changing the language.

Example

Here’s a sample of what it might look like:

Picture with a language drop down selection 

Form Code


public void ChangeLanguage(DataDOMEvent e)
{           
      if (e.IsUndoRedo) return;
      if (e.Operation.ToUpper() == "DELETE") return; //handle double notifications
 
      // Generate the new file name from the drop-down
      string strFileName = (string)e.NewValue; //from dropdown english.xml
      XMLFileAdapter2 xfaLabels = e.XDocument.DataAdapters["Labels"] as XMLFileAdapter2;
      string strCurrentUrl = xfaLabels.FileURL; //from adapter http://server/site/francais.xml
      string strBaseUrl = strCurrentUrl.Substring(0,strCurrentUrl.LastIndexOf("/")); // http://server/site
      string strCurrentFileName = strCurrentUrl.Substring(strCurrentUrl.LastIndexOf("/")); // francais.xml
      string strNewUrl = strBaseUrl + "/" + strFileName;          // http://server/site/english.xml
      xfaLabels.FileURL = strNewUrl;
 
      // the drop-down refreshes everything
      xfaLabels.Query();
      (e.XDocument.DataAdapters["Languages"] as SharepointListAdapter).Query();
}
 
public void AddLanguage(DocActionEvent e)
{
      string strLanguagesFormUrl = "http://your-forms-url/template.xsn";
      thisApplication.XDocuments.NewFromSolution(strLanguagesFormUrl);
      (e.XDocument.DataAdapters["Languages"] as SharepointListAdapter).Query();
}
 
public void EditLabels(DocActionEvent e)
{
      XMLFileAdapter2 xfaLabels = e.XDocument.DataAdapters["Labels"] as XMLFileAdapter2;
      thisApplication.XDocuments.Open(xfaLabels.FileURL, 1);     
}
 
Leave a Comment
  • Please add 4 and 7 and type the answer here:
  • Post
  • Hi, i have a question, how can i program navigation capabilities through script. I have a button and i need to open a existing InfoPath file in preview mode. Thanks and hope you can help.
  • Hi Haaron - we'll use your question to help guide us for future postings. Until then, I really recommend you drop by our newsgroup to ask your question: newsgroup microsoft.public.infopath, URL http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.infopath - Thanks!
  • by any chance do you have a working example for localizing a form with single view. If so, can you please forward me the xsn at rajaper@hotmail.com
  • You can also check this : blog.soca.ro/.../multilanguage-infopath-forms

Page 1 of 1 (4 items)