At the moment managing metadata in multiple languages is not exposed in the ImageVault UI. It is possible to work with metadata in multiple languages through the API, here is an example.

       

var client = ClientFactory.GetSdkClient();
 
// Get an existing metadata definition that we want to make multilangual.
// I'm using a filter/option approach with a template here but you can also filter out the metadata definition with client.Query if you know the ID,
// for more information, see: http://imagevault.se/sv/dokumentation/Api-Dokumentation1/?page=csharp/examples/querymetadatadefinition.html
 
var metadataDefinitionService = client.CreateChannel<IMetadataDefinitionService>();
 
var metadataTemplate = new MetadataDefinition {
    MetadataType = MetadataTypes.String,
    MetadataDefinitionType = MetadataDefinitionTypes.User,
    Name = "my multilang metatadadef"
};
 
var metadataDefinition = metadataDefinitionService.Find(new MetadataDefinitionQuery {
    Filter = new MetadataDefinitionFilter {
        MetadataDefinitionType = metadataTemplate.MetadataDefinitionType,
        MetadataType = metadataTemplate.MetadataType,
    }
}).FirstOrDefault(m => m.Name == "my multilang metatadadef");
 
if (metadataDefinition == null) {
    // in this test I know the metadata definition exists,
    // if it doesn't you can create/save the metadataDefinition here
}
 
// set multilangual property on the metadataDefinition
// this can also be set through the UI when creating the definition
metadataDefinition.IsMultilingual = true;
 
// and save the metadata definition
metadataDefinitionService.Save(metadataDefinition);
 
// let's start with swedish
// check if the language we want to use exists in IV4
var langService = client.CreateChannel<ILanguageService>();
var swedishLanguage = langService.GetAllLanguages().FirstOrDefault(l => String.Equals("se", l.LanguageCode, StringComparison.InvariantCultureIgnoreCase));
 
if (swedishLanguage == null) {
    // the language didnt exist, so create it
    swedishLanguage = langService.Create("se");
}
 
// create a language specific metadata of this metadatadefinition. Note the usage of language ID.
var swedishMetadata = Metadata.CreateInstance(metadataDefinition, swedishLanguage.Id, false, false, false, false);
swedishMetadata.Value = "This is the swedish metadata";
 
// now let's create another metadata of the same metadata definition, but in english
// start by getting the language, or creating it if necessary
var englishLanguage = langService.GetAllLanguages().FirstOrDefault(l => String.Equals("en", l.LanguageCode, StringComparison.InvariantCultureIgnoreCase));
 
if (englishLanguage == null) {
    // the language didnt exist, so create it
    englishLanguage = langService.Create("en");
}
 
// create the language specific metadata. Note the usage of language.
var englishMetadata = Metadata.CreateInstance(metadataDefinition, englishLanguage.Id, false, false, false, false);
englishMetadata.Value = "This is the english metadata";
 
// now we can load a media and assign both our swedish and english metadata to its metadata list
var media = client.Load<mediaitem>(1167).Include(m => m.Metadata).FirstOrDefault();
media.Metadata.AddRange(new []{swedishMetadata, englishMetadata});
 
// and then save the media, using MediaServiceSaveOptions.Metadata cause that's all we changed
var mediaService = client.CreateChannel<IMediaService>();
mediaService.Save(new []{media}, MediaServiceSaveOptions.Metadata);