Instead of outputting the value of the name elements in the template that matches "mountain", have separate templates for them
<xsl:template match="name[@language='English']">
Mountain Name: <xsl:value-of select="." />
</xsl:template>
<xsl:template match="name[@language='PigLatin']">
Mountain Name:(<xsl:value-of select="." />)
</xsl:template>
Then replace the xsl:value-of with xsl:apply-templates* in the main template
<xsl:apply-templates select="name[@language='English']" />
<xsl:apply-templates select="name[@language='PigLatin']" />
That way, if there is no such name, nothing is output.
Try this XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" ><xsl:output indent="no" method="text"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
Famous Mountains of the World
<xsl:apply-templates />
</xsl:template>
<xsl:template match="mountain[string-length() !=0]">
<xsl:apply-templates select="name[@language='English']" />
<xsl:apply-templates select="name[@language='PigLatin']" />
</xsl:template>
<xsl:template match="name[@language='English']">
Mountain Name: <xsl:value-of select="." />
</xsl:template>
<xsl:template match="name[@language='PigLatin']">
Mountain Name:(<xsl:value-of select="." />)
</xsl:template>
</xsl:stylesheet>
Note that if "English" always occurs before "Piglatin" in your XML, you could replace the two xsl:apply-templates with a single one
<xsl:apply-templates select="name" />