Index: trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 8090)
+++ trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 8091)
@@ -28,4 +28,5 @@
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.LanguageInfo;
 
 /**
@@ -152,6 +153,8 @@
     /** name of the imagery entry (gets translated by josm usually) */
     private String name;
-    /** original name of the imagery entry in case of translation call */
+    /** original name of the imagery entry in case of translation call, for multiple languages English when possible */
     private String origName;
+    /** (original) language of the translated name entry */
+    private String langName;
     /** id for this imagery entry, optional at the moment */
     private String id;
@@ -166,5 +169,8 @@
     private ImageryBounds bounds = null;
     private List<String> serverProjections;
+    /** description of the imagery entry, should contain notes what type of data it is */
     private String description;
+    /** language of the description entry, "" for tr() result */
+    private String langDescription;
     private String attributionText;
     private String attributionLinkURL;
@@ -686,11 +692,18 @@
 
     /**
-     * Sets the entry name and translates it.
+     * Sets the entry name and handle translation.
+     * @param name The used language
      * @param name The entry name
-     * @since 6968
-     */
-    public void setTranslatedName(String name) {
-        this.name = tr(name);
-        this.origName = name;
+     * @since 8091
+     */
+    public void setName(String language, String name) {
+        boolean isdefault = LanguageInfo.getJOSMLocaleCode(null).equals(language);
+        if(LanguageInfo.isBetterLanguage(langName, language)) {
+            this.name = isdefault ? tr(name) : name;
+            this.langName = language;
+        }
+        if(origName == null || isdefault) {
+            this.origName = name;
+        }
     }
 
@@ -791,9 +804,14 @@
     /**
      * Sets the description text when existing.
+     * @param name The used language
      * @param description the imagery description text
-     * @since 8065
-     */
-    public void setDescription(String description) {
-        this.description = description;
+     * @since 8091
+     */
+    public void setDescription(String language, String description) {
+        boolean isdefault = LanguageInfo.getJOSMLocaleCode(null).equals(language);
+        if(LanguageInfo.isBetterLanguage(langDescription, language)) {
+            this.description = isdefault ? tr(description) : description;
+            this.langDescription = language;
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 8090)
+++ trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 8091)
@@ -20,4 +20,5 @@
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.UTFInputStreamReader;
+import org.openstreetmap.josm.tools.LanguageInfo;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -82,4 +83,6 @@
         ImageryBounds bounds;
         Shape shape;
+        // language of last element, does only work for simple ENTRY_ATTRIBUTE's
+        String lang;
         List<String> projections;
 
@@ -133,4 +136,5 @@
                 }).contains(qName)) {
                     newState = State.ENTRY_ATTRIBUTE;
+                    lang = atts.getValue("lang");
                 } else if ("bounds".equals(qName)) {
                     try {
@@ -207,10 +211,8 @@
                 switch(qName) {
                 case "name":
-                    /* TODO: don't ignore lang attribute */
-                    entry.setTranslatedName(accumulator.toString());
+                    entry.setName(lang == null ? LanguageInfo.getJOSMLocaleCode(null) : lang, accumulator.toString());
                     break;
                 case "description":
-                    /* TODO: don't ignore lang attribute */
-                    entry.setDescription(accumulator.toString());
+                    entry.setDescription(lang, accumulator.toString());
                     break;
                 case "id":
Index: trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java	(revision 8090)
+++ trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java	(revision 8091)
@@ -123,8 +123,37 @@
     }
 
+    /**
+     * Check if a new language is better than a previous existing. Can be used in classes where
+     * multiple user supplied language marked strings appear and the best one is searched. Following
+     * priorities: current language, english, any other
+     *
+     * @param oldLanguage the language code of the existing string
+     * @param newLanguage the language code of the new string
+     * @return true if new one is better
+     * @since 8091
+     */
+    public static boolean isBetterLanguage(String oldLanguage, String newLanguage) {
+        if (oldLanguage == null)
+            return true;
+        String want = getJOSMLocaleCode();
+        return want.equals(newLanguage) || (!want.equals(oldLanguage) && newLanguage.startsWith("en"));
+    }
+    
+    /**
+     * Replies the language prefix for use in XML elements (with a dot appended).
+     *
+     * @return the XML language prefix
+     * @see #getJOSMLocaleCode()
+     */
     public static String getLanguageCodeXML() {
         return getJOSMLocaleCode()+".";
     }
 
+    /**
+     * Replies the language prefix for use in manifests (with an underscore appended).
+     *
+     * @return the manifest language prefix
+     * @see #getJOSMLocaleCode()
+     */
     public static String getLanguageCodeManifest() {
         return getJOSMLocaleCode()+"_";
