         className: componentClass
         text?(value) ? value
 
-  renderPlaystyle: =>
-    value = @props.user.playstyle
+
+  renderText: (key) =>
+    value = @props.user[key]
 
     return unless value?
 
-    playsWith = value.map (s) ->
-      osu.trans "common.device.#{s}"
-    .join ', '
+    {html, title} = textMapping[key](value, @props.user)
 
     div
       className: "#{bn}__item"
-      key: 'playstyle'
+      key: key
+      title: title
       dangerouslySetInnerHTML:
-        __html:
-          osu.trans 'users.show.plays_with',
-            devices: rowValue playsWith
-
-
-  renderPostCount: =>
-    count = osu.transChoice 'users.show.post_count.count', @props.user.post_count.toLocaleString()
-    url = laroute.route('users.posts', user: @props.user.id)
-
-    div
-      className: "#{bn}__item"
-      key: 'post_count'
-      dangerouslySetInnerHTML:
-        __html:
-          osu.trans 'users.show.post_count._',
-            link: rowValue count, href: url
+        __html: html

      text: (val) -> val.replace(/^https?:\/\//, '')


  render: =>
    rows = [
      [
        @renderJoinDate()
        @renderLastVisit()
        @renderPlaystyle()
        @renderPostCount()
      ]
      ['location', 'interests', 'occupation'].map @renderLink
      ['twitter', 'discord', 'skype', 'lastfm', 'website'].map @renderLink
    ]

    div className: bn,
      for row, j in rows when _.compact(row).length > 0
        div key: j, className: "#{bn}__row #{bn}__row--#{j}", row


  renderLink: (key) =>
