Recently, while working with James we had to support synchronization of identity data that used language types/codes. Here’s a little background…
Directories that support RFC 3866 (in this case Sun One) allow you to specify the language of an attribute’s value. Here’s a simple example, say your company has a presence in the States and in Germany and you want to be able to store the user’s title “Software products” in both English and German, you can do that like this:
title;lang-en: Software products
title;lang-de: Softwareprodukte
Now, FIM will support reading these attributes out of the directory and storing them into the CS, up to a point. If you were to import this attribute, what you would get is a single multi-valued title attribute with both values, at which point you have lost all of the language information:
In order to preserve this information, we ended up writing our own XMA to bring in the attribute with its language type as an attribute in its own right. So using the DirectoryServices (or DirectoryServices.Protocols, if you prefer) namespace we were able to access the directory and retrieve the full name of the attribute, we then wrote this out to our file so that FIM would see them as different items. (If you end up writing your XMA using the LDIF file format, like we did, you will have to actually transform the attribute name on the way out to the file to remove/replace the “;” or you will continue to have the issue above!)
We can now flow these attributes with the language information intact to other downstream systems.