You'll need to perform a RetrieveAttributeRequest to get the EnumAttributeMetadata, then lookup the correct value based on the language code:
string languageCode = germanLanguageCode; // Set
int optSetValue = 0; // Set
RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest
{
EntityLogicalName = entityLogicalName,
LogicalName = attributeName,
RetrieveAsIfPublished = true
};
var response = (RetrieveAttributeResponse)service.Execute(attributeRequest);
var optionList = ((EnumAttributeMetadata)response.AttributeMetadata).OptionSet.Options;
return optionList.GetFirst(o => o.Value == optSetValue).Label.LocalizedLabels.First(l => l.LanguageCode == languageCode).Label;
Alternatively, if your service is running as the German user, then you can access the German text via return optionList.GetFirst(o => o.Value == optSetValue).Label.UserLocalizedLabel.Label;
I tend to like to cache the metadata rather than hitting the CRM server constantly for the text information. But then again, I'm in an English only org and don't have to worry about what language people are using...
Additional Answers from Comments
GetFirst() is just a standard Linq Method. As long as you've added the System.Linq namespace in a using statement, any IEnumerable will have it.
The German language is located 1031. Although the more correct route would be to lookup the user's UsersSetting.UILanguageId. I believe that should contain the correct code, although I haven't tested it...