Index: trunk/presets/presets.xml
===================================================================
--- trunk/presets/presets.xml	(revision 2229)
+++ trunk/presets/presets.xml	(revision 2230)
@@ -35,4 +35,6 @@
   text: fixed label to display
   values: comma seperated list of values
+  display_values: comma seperated list of values to be displayed instead of the
+                  database values, order and number must be equal to values
   default: default string to display
   delete_if_empty: true/false
@@ -53,4 +55,13 @@
 
 See also http://josm.openstreetmap.de/wiki/TaggingPresets.
+
+The fields "name", "text", "display_values" may also be localized (e.g. de.name).
+When translations of equal words but different meanings may conflict, a translation
+context should be specified. Use "name_conext", "text_context" or "values_context"
+for this. The context should be a meaningful short description to help translators.
+
+In JOSM internally all "name", "text" and "display_values" are translated when
+no specific translation has been given in XML file. When no "display_values"
+are supplied, then "values" will be treated as "display_values" and translated instead.
 -->
 <annotations>
@@ -1367,7 +1378,7 @@
             <text key="name" text="Name" default="" delete_if_empty="true" />
         </item>
-        <item name="Station" icon="presets/aerialway_station.png" type="node,closedway">
+        <item name="Station" name_context="aerialway" icon="presets/aerialway_station.png" type="node,closedway">
             <link href="http://wiki.openstreetmap.org/wiki/Proposed_features/Piste_Maps" />
-            <label text="Edit Station" />
+            <label text="Edit Station" text_context="aerialway" />
             <key key="aerialway" value="station" />
             <text key="name" text="Name" default="" delete_if_empty="true" />
@@ -1462,8 +1473,8 @@
     </group> <!-- Bicycle -->
     <group name="Public Transport" icon="presets/bus.png">
-        <item name="Station" icon="presets/station.png" type="node,closedway">
+        <item name="Station" name_context="railway" icon="presets/station.png" type="node,closedway">
             <link href="http://wiki.openstreetmap.org/wiki/Tag:railway=station"
                   de.href="http://wiki.openstreetmap.org/wiki/DE:Tag:railway=station" />
-            <label text="Edit Station" />
+            <label text="Edit Station" text_context="railway" />
             <space />
             <key key="railway" value="station" />
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 2229)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 2230)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trc;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
@@ -68,4 +69,5 @@
     public TaggingPresetMenu group = null;
     public String name;
+    public String name_context;
     public String locale_name;
 
@@ -141,4 +143,5 @@
         public String text;
         public String locale_text;
+        public String text_context;
         public String default_;
         public String originalValue;
@@ -178,5 +181,8 @@
             }
             if(locale_text == null) {
-                locale_text = tr(text);
+                if(text_context != null)
+                    locale_text = trc(text_context, text);
+                else
+                    locale_text = tr(text);
             }
             p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
@@ -209,4 +215,5 @@
         public String key;
         public String text;
+        public String text_context;
         public String locale_text;
         public boolean default_ = false; // only used for tagless objects
@@ -224,5 +231,8 @@
 
             if(locale_text == null) {
-                locale_text = tr(text);
+                if(text_context != null)
+                    locale_text = trc(text_context, text);
+                else
+                    locale_text = tr(text);
             }
 
@@ -287,6 +297,8 @@
         public String key;
         public String text;
+        public String text_context;
         public String locale_text;
         public String values;
+        public String values_context;
         public String display_values;
         public String locale_display_values;
@@ -321,7 +333,7 @@
             }
             for (int i=0; i<value_array.length; i++) {
-                lhm.put(value_array[i],
-                        (locale_display_values == null) ?
-                                tr(display_array[i]) : display_array[i]);
+                lhm.put(value_array[i], (locale_display_values == null)
+                ? (values_context == null ? tr(display_array[i])
+                : tr(values_context, display_array[i])) : display_array[i]);
             }
             if(!usage.unused()){
@@ -365,5 +377,8 @@
 
             if(locale_text == null) {
-                locale_text = tr(text);
+                if(text_context != null)
+                    locale_text = trc(text_context, text);
+                else
+                    locale_text = tr(text);
             }
             p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
@@ -407,9 +422,13 @@
     public static class Label extends Item {
         public String text;
+        public String text_context;
         public String locale_text;
 
         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
             if(locale_text == null) {
-                locale_text = tr(text);
+                if(text_context != null)
+                    locale_text = trc(text_context, text);
+                else
+                    locale_text = tr(text);
             }
             p.add(new JLabel(locale_text), GBC.eol());
@@ -422,4 +441,5 @@
         public String href;
         public String text;
+        public String text_context;
         public String locale_text;
         public String locale_href;
@@ -427,5 +447,10 @@
         @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
             if(locale_text == null) {
-                locale_text = text == null ? tr("More information about this feature") : tr(text);
+                if(text == null)
+                    locale_text = tr("More information about this feature");
+                if(text_context != null)
+                    locale_text = trc(text_context, text);
+                else
+                    locale_text = tr(text);
             }
             String url = locale_href;
@@ -500,5 +525,8 @@
     public String getLocaleName() {
         if(locale_name == null) {
-            locale_name = tr(name);
+            if(name_context != null)
+                locale_name = trc(name_context, name);
+            else
+                locale_name = tr(name);
         }
         return locale_name;
