diff --git a/src/applications/audit/application/PhabricatorAuditApplication.php b/src/applications/audit/application/PhabricatorAuditApplication.php
--- a/src/applications/audit/application/PhabricatorAuditApplication.php
+++ b/src/applications/audit/application/PhabricatorAuditApplication.php
@@ -10,6 +10,10 @@
     return 'audit';
   }
 
+  public function getName() {
+    return pht('Audit');
+  }
+
   public function getShortDescription() {
     return pht('Browse and Audit Commits');
   }
diff --git a/src/applications/auth/application/PhabricatorAuthApplication.php b/src/applications/auth/application/PhabricatorAuthApplication.php
--- a/src/applications/auth/application/PhabricatorAuthApplication.php
+++ b/src/applications/auth/application/PhabricatorAuthApplication.php
@@ -18,6 +18,10 @@
     return $viewer->getIsAdmin();
   }
 
+  public function getName() {
+    return pht('Auth');
+  }
+
   public function getShortDescription() {
     return pht('Login/Registration');
   }
diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php
--- a/src/applications/base/PhabricatorApplication.php
+++ b/src/applications/base/PhabricatorApplication.php
@@ -27,23 +27,21 @@
 /* -(  Application Information  )-------------------------------------------- */
 
 
+  /**
+   * TODO: This should be abstract, but is not for historical reasons.
+   */
   public function getName() {
-
-    // TODO: This is sort of gross.
+    phutil_deprecated(
+      'Automatic naming of `PhabricatorApplication` classes.',
+      'You should override the `getName` method.');
 
     $match = null;
-
-    $regex = '/^Phabricator([A-Z][a-zA-Z]*)Application$/';
-    if (preg_match($regex, get_class($this), $match)) {
-      return $match[1];
-    }
-
     $regex = '/^PhabricatorApplication([A-Z][a-zA-Z]*)$/';
     if (preg_match($regex, get_class($this), $match)) {
       return $match[1];
     }
 
-    throw new Exception('Unable to determine application name automagically.');
+    throw new PhutilMethodNotImplementedException();
   }
 
   public function getShortDescription() {
diff --git a/src/applications/base/controller/__tests__/PhabricatorTestApplication.php b/src/applications/base/controller/__tests__/PhabricatorTestApplication.php
--- a/src/applications/base/controller/__tests__/PhabricatorTestApplication.php
+++ b/src/applications/base/controller/__tests__/PhabricatorTestApplication.php
@@ -4,6 +4,10 @@
 
   private $policies = array();
 
+  public function getName() {
+    return pht('Test');
+  }
+
   public function isUnlisted() {
     return true;
   }
diff --git a/src/applications/calendar/application/PhabricatorCalendarApplication.php b/src/applications/calendar/application/PhabricatorCalendarApplication.php
--- a/src/applications/calendar/application/PhabricatorCalendarApplication.php
+++ b/src/applications/calendar/application/PhabricatorCalendarApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorCalendarApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Calendar');
+  }
+
   public function getShortDescription() {
     return pht('Upcoming Events');
   }
diff --git a/src/applications/chatlog/application/PhabricatorChatLogApplication.php b/src/applications/chatlog/application/PhabricatorChatLogApplication.php
--- a/src/applications/chatlog/application/PhabricatorChatLogApplication.php
+++ b/src/applications/chatlog/application/PhabricatorChatLogApplication.php
@@ -6,6 +6,10 @@
     return '/chatlog/';
   }
 
+  public function getName() {
+    return pht('ChatLog');
+  }
+
   public function getShortDescription() {
     return pht('IRC Logs');
   }
diff --git a/src/applications/conduit/application/PhabricatorConduitApplication.php b/src/applications/conduit/application/PhabricatorConduitApplication.php
--- a/src/applications/conduit/application/PhabricatorConduitApplication.php
+++ b/src/applications/conduit/application/PhabricatorConduitApplication.php
@@ -18,6 +18,10 @@
     return PhabricatorEnv::getDoclink('Conduit Technical Documentation');
   }
 
+  public function getName() {
+    return pht('Conduit');
+  }
+
   public function getShortDescription() {
     return pht('Developer API');
   }
diff --git a/src/applications/config/application/PhabricatorConfigApplication.php b/src/applications/config/application/PhabricatorConfigApplication.php
--- a/src/applications/config/application/PhabricatorConfigApplication.php
+++ b/src/applications/config/application/PhabricatorConfigApplication.php
@@ -26,6 +26,10 @@
     return false;
   }
 
+  public function getName() {
+    return 'Config';
+  }
+
   public function getShortDescription() {
     return pht('Configure Phabricator');
   }
diff --git a/src/applications/conpherence/application/PhabricatorConpherenceApplication.php b/src/applications/conpherence/application/PhabricatorConpherenceApplication.php
--- a/src/applications/conpherence/application/PhabricatorConpherenceApplication.php
+++ b/src/applications/conpherence/application/PhabricatorConpherenceApplication.php
@@ -6,6 +6,10 @@
     return '/conpherence/';
   }
 
+  public function getName() {
+    return pht('Conpherence');
+  }
+
   public function getShortDescription() {
     return pht('Send Messages');
   }
diff --git a/src/applications/countdown/application/PhabricatorCountdownApplication.php b/src/applications/countdown/application/PhabricatorCountdownApplication.php
--- a/src/applications/countdown/application/PhabricatorCountdownApplication.php
+++ b/src/applications/countdown/application/PhabricatorCountdownApplication.php
@@ -10,6 +10,10 @@
     return 'countdown';
   }
 
+  public function getName() {
+    return pht('Countdown');
+  }
+
   public function getShortDescription() {
     return pht('Countdown to Events');
   }
diff --git a/src/applications/differential/application/PhabricatorDifferentialApplication.php b/src/applications/differential/application/PhabricatorDifferentialApplication.php
--- a/src/applications/differential/application/PhabricatorDifferentialApplication.php
+++ b/src/applications/differential/application/PhabricatorDifferentialApplication.php
@@ -6,6 +6,10 @@
     return '/differential/';
   }
 
+  public function getName() {
+    return pht('Differential');
+  }
+
   public function getShortDescription() {
     return pht('Review Code');
   }
diff --git a/src/applications/diffusion/application/PhabricatorDiffusionApplication.php b/src/applications/diffusion/application/PhabricatorDiffusionApplication.php
--- a/src/applications/diffusion/application/PhabricatorDiffusionApplication.php
+++ b/src/applications/diffusion/application/PhabricatorDiffusionApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorDiffusionApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Diffusion');
+  }
+
   public function getShortDescription() {
     return pht('Host and Browse Repositories');
   }
diff --git a/src/applications/diviner/application/PhabricatorDivinerApplication.php b/src/applications/diviner/application/PhabricatorDivinerApplication.php
--- a/src/applications/diviner/application/PhabricatorDivinerApplication.php
+++ b/src/applications/diviner/application/PhabricatorDivinerApplication.php
@@ -10,6 +10,10 @@
     return 'diviner';
   }
 
+  public function getName() {
+    return pht('Diviner');
+  }
+
   public function getShortDescription() {
     return pht('Documentation');
   }
diff --git a/src/applications/doorkeeper/application/PhabricatorDoorkeeperApplication.php b/src/applications/doorkeeper/application/PhabricatorDoorkeeperApplication.php
--- a/src/applications/doorkeeper/application/PhabricatorDoorkeeperApplication.php
+++ b/src/applications/doorkeeper/application/PhabricatorDoorkeeperApplication.php
@@ -10,6 +10,10 @@
     return false;
   }
 
+  public function getName() {
+    return pht('Doorkeeper');
+  }
+
   public function getShortDescription() {
     return pht('Connect to Other Software');
   }
diff --git a/src/applications/drydock/application/PhabricatorDrydockApplication.php b/src/applications/drydock/application/PhabricatorDrydockApplication.php
--- a/src/applications/drydock/application/PhabricatorDrydockApplication.php
+++ b/src/applications/drydock/application/PhabricatorDrydockApplication.php
@@ -6,6 +6,10 @@
     return '/drydock/';
   }
 
+  public function getName() {
+    return pht('Drydock');
+  }
+
   public function getShortDescription() {
     return pht('Allocate Software Resources');
   }
diff --git a/src/applications/feed/application/PhabricatorFeedApplication.php b/src/applications/feed/application/PhabricatorFeedApplication.php
--- a/src/applications/feed/application/PhabricatorFeedApplication.php
+++ b/src/applications/feed/application/PhabricatorFeedApplication.php
@@ -6,6 +6,10 @@
     return '/feed/';
   }
 
+  public function getName() {
+    return pht('Feed');
+  }
+
   public function getShortDescription() {
     return pht('Review Recent Activity');
   }
diff --git a/src/applications/files/application/PhabricatorFilesApplication.php b/src/applications/files/application/PhabricatorFilesApplication.php
--- a/src/applications/files/application/PhabricatorFilesApplication.php
+++ b/src/applications/files/application/PhabricatorFilesApplication.php
@@ -6,6 +6,10 @@
     return '/file/';
   }
 
+  public function getName() {
+    return pht('Files');
+  }
+
   public function getShortDescription() {
     return 'Store and Share Files';
   }
diff --git a/src/applications/flag/application/PhabricatorFlagsApplication.php b/src/applications/flag/application/PhabricatorFlagsApplication.php
--- a/src/applications/flag/application/PhabricatorFlagsApplication.php
+++ b/src/applications/flag/application/PhabricatorFlagsApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorFlagsApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Flags');
+  }
+
   public function getShortDescription() {
     return pht('Personal Bookmarks');
   }
diff --git a/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php b/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php
--- a/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php
+++ b/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php
@@ -6,6 +6,10 @@
     return '/harbormaster/';
   }
 
+  public function getName() {
+    return pht('Harbormaster');
+  }
+
   public function getShortDescription() {
     return pht('Build/CI');
   }
diff --git a/src/applications/help/application/PhabricatorHelpApplication.php b/src/applications/help/application/PhabricatorHelpApplication.php
--- a/src/applications/help/application/PhabricatorHelpApplication.php
+++ b/src/applications/help/application/PhabricatorHelpApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorHelpApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Help');
+  }
+
   public function canUninstall() {
     return false;
   }
diff --git a/src/applications/herald/application/PhabricatorHeraldApplication.php b/src/applications/herald/application/PhabricatorHeraldApplication.php
--- a/src/applications/herald/application/PhabricatorHeraldApplication.php
+++ b/src/applications/herald/application/PhabricatorHeraldApplication.php
@@ -10,6 +10,10 @@
     return 'herald';
   }
 
+  public function getName() {
+    return pht('Herald');
+  }
+
   public function getShortDescription() {
     return pht('Create Notification Rules');
   }
diff --git a/src/applications/home/application/PhabricatorHomeApplication.php b/src/applications/home/application/PhabricatorHomeApplication.php
--- a/src/applications/home/application/PhabricatorHomeApplication.php
+++ b/src/applications/home/application/PhabricatorHomeApplication.php
@@ -8,6 +8,10 @@
     return '/home/';
   }
 
+  public function getName() {
+    return pht('Home');
+  }
+
   public function getShortDescription() {
     return pht('Command Center');
   }
diff --git a/src/applications/legalpad/application/PhabricatorLegalpadApplication.php b/src/applications/legalpad/application/PhabricatorLegalpadApplication.php
--- a/src/applications/legalpad/application/PhabricatorLegalpadApplication.php
+++ b/src/applications/legalpad/application/PhabricatorLegalpadApplication.php
@@ -6,6 +6,10 @@
     return '/legalpad/';
   }
 
+  public function getName() {
+    return pht('Legalpad');
+  }
+
   public function getShortDescription() {
     return pht('Agreements and Signatures');
   }
diff --git a/src/applications/macro/application/PhabricatorMacroApplication.php b/src/applications/macro/application/PhabricatorMacroApplication.php
--- a/src/applications/macro/application/PhabricatorMacroApplication.php
+++ b/src/applications/macro/application/PhabricatorMacroApplication.php
@@ -6,6 +6,10 @@
     return '/macro/';
   }
 
+  public function getName() {
+    return pht('Macro');
+  }
+
   public function getShortDescription() {
     return pht('Image Macros and Memes');
   }
diff --git a/src/applications/maniphest/application/PhabricatorManiphestApplication.php b/src/applications/maniphest/application/PhabricatorManiphestApplication.php
--- a/src/applications/maniphest/application/PhabricatorManiphestApplication.php
+++ b/src/applications/maniphest/application/PhabricatorManiphestApplication.php
@@ -2,8 +2,12 @@
 
 final class PhabricatorManiphestApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Maniphest');
+  }
+
   public function getShortDescription() {
-    return 'Tasks and Bugs';
+    return pht('Tasks and Bugs');
   }
 
   public function getBaseURI() {
diff --git a/src/applications/meta/application/PhabricatorApplicationsApplication.php b/src/applications/meta/application/PhabricatorApplicationsApplication.php
--- a/src/applications/meta/application/PhabricatorApplicationsApplication.php
+++ b/src/applications/meta/application/PhabricatorApplicationsApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorApplicationsApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Applications');
+  }
+
   public function canUninstall() {
     return false;
   }
diff --git a/src/applications/people/application/PhabricatorPeopleApplication.php b/src/applications/people/application/PhabricatorPeopleApplication.php
--- a/src/applications/people/application/PhabricatorPeopleApplication.php
+++ b/src/applications/people/application/PhabricatorPeopleApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorPeopleApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('People');
+  }
+
   public function getShortDescription() {
     return pht('User Accounts and Profiles');
   }
diff --git a/src/applications/phrequent/application/PhabricatorPhrequentApplication.php b/src/applications/phrequent/application/PhabricatorPhrequentApplication.php
--- a/src/applications/phrequent/application/PhabricatorPhrequentApplication.php
+++ b/src/applications/phrequent/application/PhabricatorPhrequentApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorPhrequentApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Phrequent');
+  }
+
   public function getShortDescription() {
     return pht('Track Time Spent');
   }
diff --git a/src/applications/phriction/application/PhabricatorPhrictionApplication.php b/src/applications/phriction/application/PhabricatorPhrictionApplication.php
--- a/src/applications/phriction/application/PhabricatorPhrictionApplication.php
+++ b/src/applications/phriction/application/PhabricatorPhrictionApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorPhrictionApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Phriction');
+  }
+
   public function getShortDescription() {
     return pht('Wiki');
   }
diff --git a/src/applications/policy/application/PhabricatorPolicyApplication.php b/src/applications/policy/application/PhabricatorPolicyApplication.php
--- a/src/applications/policy/application/PhabricatorPolicyApplication.php
+++ b/src/applications/policy/application/PhabricatorPolicyApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorPolicyApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Policy');
+  }
+
   public function isLaunchable() {
     return false;
   }
diff --git a/src/applications/ponder/application/PhabricatorPonderApplication.php b/src/applications/ponder/application/PhabricatorPonderApplication.php
--- a/src/applications/ponder/application/PhabricatorPonderApplication.php
+++ b/src/applications/ponder/application/PhabricatorPonderApplication.php
@@ -6,6 +6,10 @@
     return '/ponder/';
   }
 
+  public function getName() {
+    return pht('Ponder');
+  }
+
   public function getShortDescription() {
     return pht('Questions and Answers');
   }
diff --git a/src/applications/repository/application/PhabricatorRepositoriesApplication.php b/src/applications/repository/application/PhabricatorRepositoriesApplication.php
--- a/src/applications/repository/application/PhabricatorRepositoriesApplication.php
+++ b/src/applications/repository/application/PhabricatorRepositoriesApplication.php
@@ -10,6 +10,10 @@
     return 'repositories';
   }
 
+  public function getName() {
+    return pht('Repositories');
+  }
+
   public function getShortDescription() {
     return pht('(Deprecated)');
   }
diff --git a/src/applications/settings/application/PhabricatorSettingsApplication.php b/src/applications/settings/application/PhabricatorSettingsApplication.php
--- a/src/applications/settings/application/PhabricatorSettingsApplication.php
+++ b/src/applications/settings/application/PhabricatorSettingsApplication.php
@@ -6,6 +6,10 @@
     return '/settings/';
   }
 
+  public function getName() {
+    return pht('Settings');
+  }
+
   public function getShortDescription() {
     return pht('User Preferences');
   }
diff --git a/src/applications/slowvote/application/PhabricatorSlowvoteApplication.php b/src/applications/slowvote/application/PhabricatorSlowvoteApplication.php
--- a/src/applications/slowvote/application/PhabricatorSlowvoteApplication.php
+++ b/src/applications/slowvote/application/PhabricatorSlowvoteApplication.php
@@ -10,8 +10,12 @@
     return 'slowvote';
   }
 
+  public function getName() {
+    return pht('Slowvote');
+  }
+
   public function getShortDescription() {
-    return 'Conduct Polls';
+    return pht('Conduct Polls');
   }
 
   public function getTitleGlyph() {
diff --git a/src/applications/subscriptions/application/PhabricatorSubscriptionsApplication.php b/src/applications/subscriptions/application/PhabricatorSubscriptionsApplication.php
--- a/src/applications/subscriptions/application/PhabricatorSubscriptionsApplication.php
+++ b/src/applications/subscriptions/application/PhabricatorSubscriptionsApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorSubscriptionsApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Subscriptions');
+  }
+
   public function isLaunchable() {
     return false;
   }
diff --git a/src/applications/support/application/PhabricatorSupportApplication.php b/src/applications/support/application/PhabricatorSupportApplication.php
--- a/src/applications/support/application/PhabricatorSupportApplication.php
+++ b/src/applications/support/application/PhabricatorSupportApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorSupportApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Support');
+  }
+
   public function canUninstall() {
     return false;
   }
diff --git a/src/applications/system/application/PhabricatorSystemApplication.php b/src/applications/system/application/PhabricatorSystemApplication.php
--- a/src/applications/system/application/PhabricatorSystemApplication.php
+++ b/src/applications/system/application/PhabricatorSystemApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorSystemApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('System');
+  }
+
   public function canUninstall() {
     return false;
   }
diff --git a/src/applications/transactions/application/PhabricatorTransactionsApplication.php b/src/applications/transactions/application/PhabricatorTransactionsApplication.php
--- a/src/applications/transactions/application/PhabricatorTransactionsApplication.php
+++ b/src/applications/transactions/application/PhabricatorTransactionsApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorTransactionsApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Transactions');
+  }
+
   public function isLaunchable() {
     return false;
   }
diff --git a/src/applications/typeahead/application/PhabricatorTypeaheadApplication.php b/src/applications/typeahead/application/PhabricatorTypeaheadApplication.php
--- a/src/applications/typeahead/application/PhabricatorTypeaheadApplication.php
+++ b/src/applications/typeahead/application/PhabricatorTypeaheadApplication.php
@@ -2,6 +2,10 @@
 
 final class PhabricatorTypeaheadApplication extends PhabricatorApplication {
 
+  public function getName() {
+    return pht('Typeahead');
+  }
+
   public function getRoutes() {
     return array(
       '/typeahead/' => array(
diff --git a/src/applications/uiexample/application/PhabricatorUIExamplesApplication.php b/src/applications/uiexample/application/PhabricatorUIExamplesApplication.php
--- a/src/applications/uiexample/application/PhabricatorUIExamplesApplication.php
+++ b/src/applications/uiexample/application/PhabricatorUIExamplesApplication.php
@@ -10,6 +10,10 @@
     return pht('Developer UI Examples');
   }
 
+  public function getName() {
+    return pht('UIExamples');
+  }
+
   public function getIconName() {
     return 'uiexamples';
   }
diff --git a/src/applications/xhprof/application/PhabricatorXHProfApplication.php b/src/applications/xhprof/application/PhabricatorXHProfApplication.php
--- a/src/applications/xhprof/application/PhabricatorXHProfApplication.php
+++ b/src/applications/xhprof/application/PhabricatorXHProfApplication.php
@@ -6,6 +6,10 @@
     return '/xhprof/';
   }
 
+  public function getName() {
+    return pht('XHProf');
+  }
+
   public function getShortDescription() {
     return pht('PHP Profiling Tool');
   }