Index: ow/models/user.py
===================================================================
--- ow/models/user.py	(revision 520b1880761b78c86873cee94dabab4d254e5386)
+++ ow/models/user.py	(revision e171dc27798295938b6c2051533ecd2431a69f09)
@@ -34,5 +34,5 @@
         self.height = kw.get('height', None)
         self.weight = kw.get('weight', None)
-        self.gender = kw.get('gender', 'female')
+        self.gender = kw.get('gender', 'robot')
         self.picture = kw.get('picture', None)  # blob
         self.timezone = kw.get('timezone', 'UTC')
Index: ow/schemas/user.py
===================================================================
--- ow/schemas/user.py	(revision 520b1880761b78c86873cee94dabab4d254e5386)
+++ ow/schemas/user.py	(revision e171dc27798295938b6c2051533ecd2431a69f09)
@@ -4,5 +4,5 @@
 
 from ow.schemas.blob import FieldStorageBlob
-from ow.utilities import get_available_locale_names
+from ow.utilities import get_available_locale_names, get_gender_names
 
 _ = TranslationStringFactory('OpenWorkouts')
@@ -73,5 +73,7 @@
     height = validators.Number()
     weight = validators.Number()
-    gender = validators.OneOf(('male', 'female'), not_empty=True)
+    gender = validators.OneOf(
+        [gender[0] for gender in get_gender_names()],
+        not_empty=True)
     picture = FieldStorageBlob(if_emtpy=None, if_missing=None,
                                whitelist=['jpg', 'jpeg', 'png', 'gif'])
Index: ow/templates/edit_profile.pt
===================================================================
--- ow/templates/edit_profile.pt	(revision 520b1880761b78c86873cee94dabab4d254e5386)
+++ ow/templates/edit_profile.pt	(revision e171dc27798295938b6c2051533ecd2431a69f09)
@@ -72,7 +72,7 @@
               </div>
               <div>
-                  <label for="gender" i18n:translate="">Gender:</label>
-                  ${form.errorlist('gender')}
-                  ${form.select('gender', ['male', 'female'])}
+                <label for="gender" i18n:translate="">Gender:</label>
+                ${form.errorlist('gender')}
+                ${form.select('gender', gender_names)}
               </div>
             </div>
Index: ow/templates/profile.pt
===================================================================
--- ow/templates/profile.pt	(revision 520b1880761b78c86873cee94dabab4d254e5386)
+++ ow/templates/profile.pt	(revision e171dc27798295938b6c2051533ecd2431a69f09)
@@ -164,5 +164,5 @@
             <li>
               <span><tal:t i18n:translate="">Gender:</tal:t></span>
-              <tal:c tal:content="getattr(user, 'gender', '-')"></tal:c>
+              <tal:c tal:content="user_gender"></tal:c>
             </li>
             <li tal:define="birth_date getattr(user, 'birth_date', None)">
Index: ow/tests/views/test_user.py
===================================================================
--- ow/tests/views/test_user.py	(revision 520b1880761b78c86873cee94dabab4d254e5386)
+++ ow/tests/views/test_user.py	(revision e171dc27798295938b6c2051533ecd2431a69f09)
@@ -409,7 +409,8 @@
         # profile page for the current day (no workouts avalable)
         response = user_views.profile(john, request)
-        assert len(response.keys()) == 5
+        assert len(response.keys()) == 6
         current_month = datetime.now(timezone.utc).strftime('%Y-%m')
         assert response['user'] == john
+        assert response['user_gender'] == 'Robot'
         assert response['current_month'] == current_month
         assert response['current_week'] is None
@@ -424,6 +425,7 @@
         request.GET['month'] = 6
         response = user_views.profile(john, request)
-        assert len(response.keys()) == 5
+        assert len(response.keys()) == 6
         assert response['user'] == john
+        assert response['user_gender'] == 'Robot'
         assert response['current_month'] == '2015-06'
         assert response['current_week'] is None
@@ -440,6 +442,7 @@
         request.GET['week'] = 25
         response = user_views.profile(john, request)
-        assert len(response.keys()) == 5
+        assert len(response.keys()) == 6
         assert response['user'] == john
+        assert response['user_gender'] == 'Robot'
         assert response['current_month'] == '2015-06'
         assert response['current_week'] == 25
@@ -455,6 +458,7 @@
         request.GET['week'] = 26
         response = user_views.profile(john, request)
-        assert len(response.keys()) == 5
+        assert len(response.keys()) == 6
         assert response['user'] == john
+        assert response['user_gender'] == 'Robot'
         assert response['current_month'] == '2015-06'
         assert response['current_week'] == 26
Index: ow/utilities.py
===================================================================
--- ow/utilities.py	(revision 520b1880761b78c86873cee94dabab4d254e5386)
+++ ow/utilities.py	(revision e171dc27798295938b6c2051533ecd2431a69f09)
@@ -310,2 +310,10 @@
         ('es', _('Spanish'))
     ]
+
+
+def get_gender_names():
+    return [
+        ('male', _('Male')),
+        ('female', _('Female')),
+        ('robot', _('Robot'))
+    ]
Index: ow/views/user.py
===================================================================
--- ow/views/user.py	(revision 520b1880761b78c86873cee94dabab4d254e5386)
+++ ow/views/user.py	(revision e171dc27798295938b6c2051533ecd2431a69f09)
@@ -9,5 +9,5 @@
 from pyramid.security import remember, forget
 from pyramid.response import Response
-from pyramid.i18n import TranslationStringFactory
+from pyramid.i18n import TranslationStringFactory, get_localizer
 from pyramid_simpleform import Form, State
 from pytz import common_timezones
@@ -295,6 +295,13 @@
             getattr(workout, 'uphill', Decimal(0)) or Decimal(0))
 
+    localizer = get_localizer(request)
+    user_gender = _('Unknown')
+    for g in get_gender_names():
+        if g[0] == context.gender:
+            user_gender = localizer.translate(g[1])
+
     return {
         'user': user,
+        'user_gender': user_gender,
         'workouts': workouts,
         'current_month': '{year}-{month}'.format(
@@ -338,5 +345,4 @@
     default_locale = request.registry.settings.get(
         'pyramid.default_locale_name')
-    available_locale_names = get_available_locale_names()
     current_locale = request.cookies.get('_LOCALE_', default_locale)
     # if not given a file there is an empty byte in POST, which breaks
@@ -372,6 +378,14 @@
         del form.data['picture']
 
+    localizer = get_localizer(request)
+    gender_names = [
+        (g[0], localizer.translate(g[1])) for g in get_gender_names()]
+    available_locale_names = [
+        (l[0], localizer.translate(l[1])) for l in get_available_locale_names()
+    ]
+
     return {'form': OWFormRenderer(form),
             'timezones': common_timezones,
+            'gender_names': gender_names,
             'available_locale_names': available_locale_names,
             'current_locale': current_locale}
