Bilingual Translation Files
Use the Bilingual file to review translations, edit existing translations, and add translations for labels or data that haven't been translated. One Bilingual file is generated for each translation language.
Required Editions
| Metadata translation available in: Salesforce Classic and Lightning Experience |
| Data translation available in: Lightning Experience |
| Available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions |
| Data translation applies to: B2B Commerce |
XML Localization Interchange File Format (.xlf) Bilingual Translation Files
Bilingual .xlf translation file content is organized into translation units.
Translation units for translated labels contain a target tag with the translated value. Untranslated labels have a
source tag, but no target tag.
Tell your translators:
- For untranslated labels, add a
targettag containing the translated value after thesourcetag. - If the label’s translation is out of date, replace the text in the
targettag. Outdated labels have a value ofoutOfDate="true"within thetrans-unittag. - To delete a translation, replace the value in the
trans-unit'stargettag with<>. When the Bilingual file is imported, the label reverts to its primary label value. - A translated value for the data in the record’s Name field is required to translate data in other fields for that record. For example, you must provide a German translation for the name of a Product before you can translate its description into German.
- Deleting the data translated value for a record’s Name field can delete all of that record’s other translated values for that language. See Considerations for Working with Translation Files for more information.
- When translating text in a rich text area field, don’t delete HTML tags such as
<p></p>and<b></b>. If you remove those tags, the translated text can be truncated.
| Tag | Description | Edit Options |
|---|---|---|
trans-unit
|
Translation unit. Contains unique identifiers for the label, including the label’s id, maximum width, and out-of-date indicator. | Do not edit. |
source
|
Label or text in the org’s default language. | Do not edit. |
target
|
The current translation that is visible to end users selecting the target language as their personal language. | Enter the translated value. Add a target tag if needed. Replace a
value with <> to
delete the translation. |
note
|
Description of the metadata label, if defined, in the source language. | Do not edit. Translatable field descriptions each have a separate
trans-unit tag. |
For example, in an org with English as its default language, you build a new custom Business Hours field on the Account object. This label is untranslated.
Nickname, an existing custom field on the Account object, has a Spanish translated value of “Apodo.” You change the primary label on the Nickname field from “Nickname” to “Preferred Name.” This label is outdated.
Another existing custom Prior Reference Number field on the Account object has an incorrect Spanish translated value of “Número de consulta previa.” Although the translation isn’t out of date, it must be updated to “Número de referencia precedente.”
The Name field on a custom Widget object had a primary label of “SLK.” A translator misinterpreted this acronym and entered a Spanish translation of “Flojo.” Although the translation isn’t out of date, you want to revert the translation to the primary label.
Finally, a custom Number field on a custom Widget object had a primary label of “Number” and a Spanish translated value of “Número.” You update the primary label to “#” and want to remove the translated value.
The exported Bilingual .xlf translation file contains the following row in the OUTDATED AND UNTRANSLATED section.
<trans-unit id="CustomField.Account.Business_Hours.FieldLabel" maxwidth="40" size-unit="char" outOfDate="false">
<source>Business Hours</source>
</trans-unit>
<trans-unit id="CustomField.Account.Nickname.FieldLabel" maxwidth="40" size-unit="char" outOfDate="true">
<source>Preferred Name</source>
<target>Apodo</target>
<note>The name preferred by this person.</note>
</trans-unit>
<trans-unit id="CustomField.Account.Prior_Ref_No.FieldLabel" maxwidth="20" size-unit="char" outOfDate="false">
<source>Prior Reference Number</source>
<target>Número de consulta previa</target>
</trans-unit>
<trans-unit id="CustomField.Widget__c.Name.FieldLabel" maxwidth="20" size-unit="char" outOfDate="false">
<source>SLK</source>
<target>Seda</target>
</trans-unit>
<trans-unit id="CustomField.Widget__c.Number.FieldLabel" maxwidth="20" size-unit="char" outOfDate="true">
<source>#</source>
<target>Número</target>
</trans-unit>
To make the requested changes:
- Add a
targettag with the translated value to the new Business Hours field. - Update the translation values in the target tags for the Preferred Name and Prior Reference Number fields.
- To delete the translation of the Widget object’s Name and Number fields, update the
translation values in those target tags with
<>. When this file is imported, those labels revert to the primary label values. - Don’t change the
outOfDatetag values. When you import the translated file, labels with updated translations are marked as up to date.
<trans-unit id="CustomField.Account.Business_Hours.FieldLabel" maxwidth="40" size-unit="char" outOfDate="false">
<source>Business Hours</source>
<target>Horario de oficina</target>
</trans-unit>
<trans-unit id="CustomField.Account.Nickname.FieldLabel" maxwidth="40" size-unit="char" outOfDate="true">
<source>Preferred Name</source>
<target>Nombre preferido</target>
<note>The name preferred by this person.</note>
</trans-unit>
<trans-unit id="CustomField.Account.Prior_Ref_No.FieldLabel" maxwidth="20" size-unit="char" outOfDate="false">
<source>Prior Reference Number</source>
<target>Número de referencia precedente</target>
</trans-unit>
<trans-unit id="CustomField.Widget__c.Name.FieldLabel" maxwidth="20" size-unit="char" outOfDate="false">
<source>SLK</source>
<target><></target>
</trans-unit>
<trans-unit id="CustomField.Widget__c.Number.FieldLabel" maxwidth="20" size-unit="char" outOfDate="true">
<source>#</source>
<target><></target>
</trans-unit>
Salesforce Translation Format (.stf) Bilingual Translation Files
Bilingual .stf translation file content is separated into translated labels and outdated or untranslated labels.
The TRANSLATED section of the .stf file contains text that has been translated and is up to date. When importing, four columns are expected for each label in this section: KEY, LABEL, TRANSLATION, and OUT OF DATE.
For this section, tell your translators:
- To update a current translation, replace the value in the TRANSLATION column.
- To delete a translation, replace the value in the TRANSLATION column with a left
and right angle bracket pair (
<>). When the file is imported, the label reverts to its primary label’s value.
| Column | Description | Edit Options |
|---|---|---|
| KEY | Unique identifier for the label. | Do not edit. |
| LABEL | Label or text in the org’s default language. | Do not edit. |
| TRANSLATION | The current translation that is visible to end users selecting the target language as their personal language. |
|
| OUT OF DATE | Indicates whether the source text has changed since the previous translation. A dash ( |
Do not edit. |
The OUTDATED AND UNTRANSLATED section of the file contains labels changed after the label’s translation value was last updated and text that hasn't been translated. When importing, two columns are expected for each label in this section: KEY and LABEL.
For this section, tell your translators:
- Replace the text in the LABEL column with new or updated translation values.
- Delete any values in the TRANSLATED and OUT OF DATE columns.
- Delete the corresponding columns in the OUTDATED AND UNTRANSLATED section.
- To delete an outdated translation, replace the value in the LABEL column with a
left and right angle bracket pair (
<>). When the file is imported, the label reverts to its primary label’s value. - A translated value for the data in the record’s Name field is required to translate data in other fields for that record. For example, you must provide a German translation for the name of a Product before you can translate its description into German.
- Deleting the data translated value for a record’s Name field can delete all of that record’s other translated values for that language. See Considerations for Working with Translation Files for more information.
| Column | Description | Edit Options |
|---|---|---|
| KEY | Unique identifier for the label. | Do not edit. |
| LABEL | Label or text in the org’s default language. | Replace label text with new or updated translated values. |
| TRANSLATION | The current translation that is visible to end users selecting the target language as their personal language. Untranslated labels don’t have a value in this column. |
Delete this column and its contents when updating an out-of-date translation. |
| OUT OF DATE | Indicates whether the source text has changed since the previous translation. An asterisk ( Untranslated labels don’t have a value in this column. |
Delete this column and its contents when updating an out-of-date translation. |
For example, in an org with English as its default language, an existing custom Prior Reference Number field on the Account object has an incorrect Spanish translated value of “Número de consulta previa.” Although the translation isn’t out of date, it must be updated to “Número de referencia precedente.”
The Name field on a custom Widget object had a primary label of “SLK.” A translator misinterpreted this acronym and entered a Spanish translation of “Flojo.” Although the translation isn’t out of date, you want to revert the translation to the primary label.
You also build a new custom Business Hours field on the Account object. This label is untranslated.
Nickname, another existing custom field on the Account object, has a Spanish translated value of “Apodo.” You change the primary label on the Nickname field from “Nickname” to “Preferred Name.” This label is outdated.
Finally, a custom Number field on a custom Widget object had a primary label of “Number” and a Spanish translated value of “Número.” You update the primary label to “#” and want to remove the translated value.
The exported Bilingual .stf translation file contains these rows in the OUTDATED AND UNTRANSLATED section.
------------------TRANSLATED-------------------
|
|||
# KEY
|
LABEL
|
TRANSLATION
|
OUT OF DATE
|
CustomField.Account.Prior_Ref_No.FieldLabel
|
Prior Reference
Number
|
Número de consulta
previa
|
– |
CustomField.Widget__c.Name.FieldLabel
|
SLK
|
Seda
|
– |
------------------OUTDATED AND
UNTRANSLATED-----------------
|
|||
# KEY
|
LABEL
|
TRANSLATION
|
OUT OF DATE
|
CustomField.Account.Business_Hours.FieldLabel
|
Business Hours
|
||
CustomField.Account.Nickname.FieldLabel
|
Preferred Name
|
Apodo
|
*
|
CustomField.Widget__c.Number.FieldLabel
|
#
|
Número
|
*
|
To make the requested changes:
- In the TRANSLATED section, update translations by replacing the value in the
TRANSLATION column. To delete the translation of the Widget object’s Name field,
replace the TRANSLATION value with
<>. When this file is imported, the label for that Number field reverts to its primary label value of SLK. - In the OUTDATED AND UNTRANSLATED section, replace the value in the LABEL column.
Then remove the TRANSLATION and OUT OF DATE columns and their content for the
Nickname field. To delete the translation of the Widget object’s Number field,
replace the TRANSLATION value with
<>. When this file is imported, the label for that Number field reverts to its primary label value of #.
------------------TRANSLATED-------------------
|
|||
# KEY
|
LABEL
|
TRANSLATION
|
OUT OF DATE
|
CustomField.Account.Prior_Ref_No.FieldLabel
|
Prior Reference
Number
|
Número de referencia
precedente
|
– |
CustomField.Widget__c.Name.FieldLabel
|
SLK
|
<>
|
– |
------------------OUTDATED AND
UNTRANSLATED-----------------
|
|||
# KEY
|
LABEL
|
||
CustomField.Account.Business_Hours.FieldLabel
|
Horario de oficina
|
||
CustomField.Account.Nickname.FieldLabel
|
Nombre preferido
|
||
CustomField.Widget__c.Number.FieldLabel
|
<>
|
||

