I was long wondering. I knew there is xml:lang global attribute, but
as stated in Section 6.6 of the standard, "[i]f a particular element
can only occur once based on the encoding rules discussed in Clause 8
then the technique of using the special xml:lang attribute to indicate
the language does not allow for the specification of the same element
in two or more languages."
But Appendix D.4 shows alternative way.
Firstly, there must be default locale (set of language and character
set) as MD_Metadata/*[language or characterSet]:
<language>
<LanguageCode codeList="resources/Codelist/gmxcodelists.xml#LanguageCode"
codeListValue="eng"> English </LanguageCode>
</language>
<characterSet>
<MD_CharacterSetCode
codeList="resources/Codelist/gmxcodelists.xml#MD_CharacterSetCode"
codeListValue="utf8"> UTF-8 </MD_CharacterSetCode>
</characterSet>
And then there must also be alternate locale at MD_Metadata/locale:
<locale>
<PT_Locale id="locale-fr">
<languageCode>
<LanguageCode codeList="resources/Codelist/gmxcodelists.xml#LanguageCode"
codeListValue="fra"> French </LanguageCode>
</languageCode>
<characterEncoding>
<MD_CharacterSetCode
codeList="resources/Codelist/gmxcodelists.xml#MD_CharacterSetCode"
codeListValue="utf8">UTF 8</MD_CharacterSetCode>
</characterEncoding>
</PT_Locale>
</locale>
Finally we can use this construct in <abstract>
<abstract xsi:type="PT_FreeText_PropertyType">
<gco:CharacterString>Brief narrative summary of the content of the
resource</gco:CharacterString>
<!--== Alternative value ==-->
<PT_FreeText>
<textGroup>
<LocalisedCharacterString locale="#locale-fr">Résumé succinct du
contenu de la ressource</LocalisedCharacterString>
</textGroup>
</PT_FreeText>
</abstract>
Complex, isn't it?
If we cannot speak French, we can prepare a reference and let French
guy write translation file:
<abstract xsi:type="PT_FreeText_PropertyType">
<gco:CharacterString>Brief narrative summary of the content of the
resource</gco:CharacterString>
<!--== Alternative value ==-->
<PT_FreeText>
<textGroup xlink:href="fr-fr.xml#abstract-fr"/>
</PT_FreeText>
</abstract>
In this way there must <textGroup>. If none, we have to edit
English-only version.