[SalesForce] Translation Workbench CustomObjectTranslation Metadata

I'm trying to retrieve the translations in translation workbench to add to Stash. My sample .xml file is below.

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
    <members>Sample_Object__c-es_CO</members>
    <name>CustomObjectTranslation</name>
</types>
    <version>37.0</version>
</Package>

I am able to successfully retrieve the object, but the file does not contain any of the translations that I have added. I have verified that I am using the correct sandbox, I verified the object name, I verified that I added the translations in my sandbox, but still no luck.

The sample output in the file is below:

<?xml version="1.0" encoding="UTF-8"?>
<CustomObjectTranslation xmlns="http://soap.sforce.com/2006/04/metadata">
    <caseValues>
        <plural>false</plural>
        <value><!-- Sample Object --></value>
    </caseValues>
    <caseValues>
        <plural>true</plural>
        <value><!-- Sample Object --></value>
    </caseValues>
    <gender><!-- Feminine --></gender>
    <nameFieldLabel><!-- Sample Object Name --></nameFieldLabel>
</CustomObjectTranslation>

Best Answer

Object's translations are retrieved only for object's custom metadata, which is included into package.xml For example, if package xml contains only one custom field and one page layout, then translation will be returned for that field only

For example:

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>Sample_Object__c-es_CO</members>
        <name>CustomObjectTranslation</name>
    </types>
    <types>
        <members>Sample_Object__c.Sample_Field__c</members>
        <name>CustomField</name>
    </types>
    <version>37.0</version>
</Package>

That will return Sample_Field__c translation as result.

In case if entire sObject needs to be translated, then package.xml should be like next:

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>Sample_Object__c-es_CO</members>
        <name>CustomObjectTranslation</name>
    </types>
    <types>
        <members>Sample_Object__c</members>
        <name>CustomObject</name>
    </types>
    <version>37.0</version>
</Package>

P.S. Very interesting behaviour, found by me: In case if package.xml contains custom object from managed package, and also page layout from managed package, together with non-English language, may cause translation for page layout name returned without prefix . For example:

<layouts>
    <layout>Sample Object Layout</layout>
    <sections>
        <label><!-- Address Information --></label>
        ...
    </sections>
    ...
</layouts> 

Problem is that it may fail on deployment. Fix is easy -- add prefix manually before deployment:

<layouts>
    <layout>MY_AMAZING_PACKAGE__Sample Object Layout</layout>
    <sections>
        <label><!-- Address Information --></label>
        ...
    </sections>
    ...
</layouts>
Related Topic