diff --git a/src/applications/project/application/PhabricatorApplicationProject.php b/src/applications/project/application/PhabricatorApplicationProject.php
index fce5a09491..6e6dbf2793 100644
--- a/src/applications/project/application/PhabricatorApplicationProject.php
+++ b/src/applications/project/application/PhabricatorApplicationProject.php
@@ -3,11 +3,11 @@
final class PhabricatorApplicationProject extends PhabricatorApplication {
public function getName() {
- return 'Projects';
+ return pht('Projects');
}
public function getShortDescription() {
- return 'Organize Work';
+ return pht('Organize Work');
}
public function getBaseURI() {
diff --git a/src/applications/project/controller/PhabricatorProjectController.php b/src/applications/project/controller/PhabricatorProjectController.php
index 1ebff28159..50ea7f23d8 100644
--- a/src/applications/project/controller/PhabricatorProjectController.php
+++ b/src/applications/project/controller/PhabricatorProjectController.php
@@ -5,7 +5,7 @@ abstract class PhabricatorProjectController extends PhabricatorController {
public function buildStandardPageResponse($view, array $data) {
$page = $this->buildStandardPageView();
- $page->setApplicationName('Project');
+ $page->setApplicationName(pht('Project'));
$page->setBaseURI('/project/');
$page->setTitle(idx($data, 'title'));
$page->setGlyph("\xE2\x98\xA3");
@@ -30,29 +30,29 @@ abstract class PhabricatorProjectController extends PhabricatorController {
$edit_uri = '/project/edit/'.$id.'/';
$members_uri = '/project/members/'.$id.'/';
- $nav_view->addFilter('dashboard', 'Dashboard');
- $nav_view->addFilter('feed', 'Feed');
- $nav_view->addFilter(null, 'Tasks '.$external_arrow, $tasks_uri);
- $nav_view->addFilter(null, 'Wiki '.$external_arrow, $phriction_uri);
- $nav_view->addFilter('people', 'People');
- $nav_view->addFilter('about', 'About');
+ $nav_view->addFilter('dashboard', pht('Dashboard'));
+ $nav_view->addFilter('feed', pht('Feed'));
+ $nav_view->addFilter(null, pht('Tasks').' '.$external_arrow, $tasks_uri);
+ $nav_view->addFilter(null, pht('Wiki').' '.$external_arrow, $phriction_uri);
+ $nav_view->addFilter('people', pht('People'));
+ $nav_view->addFilter('about', pht('About'));
$user = $this->getRequest()->getUser();
$can_edit = PhabricatorPolicyCapability::CAN_EDIT;
if (PhabricatorPolicyFilter::hasCapability($user, $project, $can_edit)) {
- $nav_view->addFilter('edit', "Edit Project\xE2\x80\xA6", $edit_uri);
- $nav_view->addFilter('members', "Edit Members\xE2\x80\xA6", $members_uri);
+ $nav_view->addFilter('edit', pht("Edit Project"), $edit_uri);
+ $nav_view->addFilter('members', pht("Edit Members"), $members_uri);
} else {
$nav_view->addFilter(
'edit',
- "Edit Project\xE2\x80\xA6",
+ pht("Edit Project"),
$edit_uri,
$relative = false,
'disabled');
$nav_view->addFilter(
'members',
- "Edit Members\xE2\x80\xA6",
+ pht("Edit Members"),
$members_uri,
$relative = false,
'disabled');
@@ -61,4 +61,40 @@ abstract class PhabricatorProjectController extends PhabricatorController {
return $nav_view;
}
+ public function buildApplicationMenu() {
+ return $this->buildSideNavView(null, true)->getMenu();
+ }
+
+ public function buildSideNavView($filter = null, $for_app = false) {
+ $user = $this->getRequest()->getUser();
+
+ $nav = new AphrontSideNavFilterView();
+ $nav
+ ->setBaseURI(new PhutilURI('/project/filter/'))
+ ->addLabel(pht('User'))
+ ->addFilter('active', pht('Active'))
+ ->addLabel(pht('All'))
+ ->addFilter('all', pht('All Projects'))
+ ->addFilter('allactive', pht('Active Projects'))
+ ->selectFilter($filter, 'active');
+
+ if ($for_app) {
+ $nav->addFilter('create/', pht('Create Project'));
+ }
+
+ return $nav;
+ }
+
+ public function buildApplicationCrumbs() {
+ $crumbs = parent::buildApplicationCrumbs();
+
+ $crumbs->addAction(
+ id(new PhabricatorMenuItemView())
+ ->setName(pht('Create Project'))
+ ->setHref($this->getApplicationURI('create/'))
+ ->setIcon('create'));
+
+ return $crumbs;
+ }
+
}
diff --git a/src/applications/project/controller/PhabricatorProjectCreateController.php b/src/applications/project/controller/PhabricatorProjectCreateController.php
index 5163804c38..d818ab1efc 100644
--- a/src/applications/project/controller/PhabricatorProjectCreateController.php
+++ b/src/applications/project/controller/PhabricatorProjectCreateController.php
@@ -63,7 +63,7 @@ final class PhabricatorProjectCreateController
$error_view = null;
if ($errors) {
$error_view = new AphrontErrorView();
- $error_view->setTitle('Form Errors');
+ $error_view->setTitle(pht('Form Errors'));
$error_view->setErrors($errors);
}
@@ -77,13 +77,13 @@ final class PhabricatorProjectCreateController
$form
->appendChild(
id(new AphrontFormTextControl())
- ->setLabel('Name')
+ ->setLabel(pht('Name'))
->setName('name')
->setValue($project->getName())
->setError($e_name))
->appendChild(
id(new AphrontFormTextAreaControl())
- ->setLabel('Blurb')
+ ->setLabel(pht('Blurb'))
->setName('blurb')
->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
->setValue($profile->getBlurb()));
@@ -92,10 +92,10 @@ final class PhabricatorProjectCreateController
$dialog = id(new AphrontDialogView())
->setUser($user)
->setWidth(AphrontDialogView::WIDTH_FORM)
- ->setTitle('Create a New Project')
+ ->setTitle(pht('Create a New Project'))
->appendChild($error_view)
->appendChild($form)
- ->addSubmitButton('Create Project')
+ ->addSubmitButton(pht('Create Project'))
->addCancelButton('/project/');
return id(new AphrontDialogResponse())->setDialog($dialog);
@@ -104,22 +104,32 @@ final class PhabricatorProjectCreateController
$form
->appendChild(
id(new AphrontFormSubmitControl())
- ->setValue('Create')
+ ->setValue(pht('Create'))
->addCancelButton('/project/'));
$panel = new AphrontPanelView();
$panel
->setWidth(AphrontPanelView::WIDTH_FORM)
- ->setHeader('Create a New Project')
+ ->setHeader(pht('Create a New Project'))
+ ->setNoBackground()
->appendChild($form);
- return $this->buildStandardPageResponse(
+ $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
+ $crumbs->addCrumb(
+ id(new PhabricatorCrumbView())
+ ->setName(pht('Create Project'))
+ ->setHref($this->getApplicationURI().'create/')
+ );
+
+ return $this->buildApplicationPage(
array(
+ $crumbs,
$error_view,
$panel,
),
array(
- 'title' => 'Create new Project',
+ 'title' => pht('Create New Project'),
+ 'device' => true
));
}
}
diff --git a/src/applications/project/controller/PhabricatorProjectListController.php b/src/applications/project/controller/PhabricatorProjectListController.php
index 869a7c2404..704acef6e5 100644
--- a/src/applications/project/controller/PhabricatorProjectListController.php
+++ b/src/applications/project/controller/PhabricatorProjectListController.php
@@ -12,14 +12,7 @@ final class PhabricatorProjectListController
public function processRequest() {
$request = $this->getRequest();
- $nav = new AphrontSideNavFilterView();
- $nav
- ->setBaseURI(new PhutilURI('/project/filter/'))
- ->addLabel('User')
- ->addFilter('active', 'Active')
- ->addLabel('All')
- ->addFilter('all', 'All Projects')
- ->addFilter('allactive','Active Projects');
+ $nav = $this->buildSideNavView($this->filter);
$this->filter = $nav->selectFilter($this->filter, 'active');
$pager = new AphrontPagerView();
@@ -33,21 +26,19 @@ final class PhabricatorProjectListController
$view_phid = $request->getUser()->getPHID();
- $status_filter = PhabricatorProjectQuery::STATUS_ANY;
-
switch ($this->filter) {
case 'active':
- $table_header = 'Your Projects';
+ $table_header = pht('Your Projects');
$query->withMemberPHIDs(array($view_phid));
$query->withStatus(PhabricatorProjectQuery::STATUS_ACTIVE);
break;
case 'allactive':
- $status_filter = PhabricatorProjectQuery::STATUS_ACTIVE;
- $table_header = 'Active Projects';
- // fallthrough
+ $table_header = pht('Active Projects');
+ $query->withStatus(PhabricatorProjectQuery::STATUS_ACTIVE);
+ break;
case 'all':
- $table_header = 'All Projects';
- $query->withStatus($status_filter);
+ $table_header = pht('All Projects');
+ $query->withStatus(PhabricatorProjectQuery::STATUS_ANY);
break;
}
@@ -122,11 +113,11 @@ final class PhabricatorProjectListController
$table = new AphrontTableView($rows);
$table->setHeaders(
array(
- 'Project',
- 'Status',
- 'Description',
- 'Population',
- 'Open Tasks',
+ pht('Project'),
+ pht('Status'),
+ pht('Description'),
+ pht('Population'),
+ pht('Open Tasks'),
));
$table->setColumnClasses(
array(
@@ -139,16 +130,25 @@ final class PhabricatorProjectListController
$panel = new AphrontPanelView();
$panel->setHeader($table_header);
- $panel->setCreateButton('Create New Project', '/project/create/');
$panel->appendChild($table);
+ $panel->setNoBackground();
$panel->appendChild($pager);
$nav->appendChild($panel);
- return $this->buildStandardPageResponse(
+ $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
+ $crumbs->addCrumb(
+ id(new PhabricatorCrumbView())
+ ->setName($table_header)
+ ->setHref($this->getApplicationURI())
+ );
+ $nav->setCrumbs($crumbs);
+
+ return $this->buildApplicationPage(
$nav,
array(
- 'title' => 'Projects',
+ 'title' => pht('Projects'),
+ 'device' => true,
));
}
}
diff --git a/src/applications/project/controller/PhabricatorProjectMembersEditController.php b/src/applications/project/controller/PhabricatorProjectMembersEditController.php
index 1e84d2823e..1c1dfa7473 100644
--- a/src/applications/project/controller/PhabricatorProjectMembersEditController.php
+++ b/src/applications/project/controller/PhabricatorProjectMembersEditController.php
@@ -83,8 +83,8 @@ final class PhabricatorProjectMembersEditController
);
}
- $header_name = 'Edit Members';
- $title = 'Edit Members';
+ $header_name = pht('Edit Members');
+ $title = pht('Edit Members');
$list = $this->renderMemberList($handles);
@@ -94,23 +94,24 @@ final class PhabricatorProjectMembersEditController
->appendChild(
id(new AphrontFormTokenizerControl())
->setName('phids')
- ->setLabel('Add Members')
+ ->setLabel(pht('Add Members'))
->setDatasource('/typeahead/common/users/'))
->appendChild(
id(new AphrontFormSubmitControl())
->addCancelButton('/project/view/'.$project->getID().'/')
- ->setValue('Add Members'));
+ ->setValue(pht('Add Members')));
$faux_form = id(new AphrontFormLayoutView())
->setBackgroundShading(true)
->setPadded(true)
->appendChild(
id(new AphrontFormInsetView())
- ->setTitle('Current Members ('.count($handles).')')
+ ->setTitle(pht('Current Members (%d)', count($handles)))
->appendChild($list));
$panel = new AphrontPanelView();
$panel->setHeader($header_name);
$panel->setWidth(AphrontPanelView::WIDTH_FORM);
+ $panel->setNoBackground();
$panel->appendChild($form);
$panel->appendChild('
');
$panel->appendChild($faux_form);
@@ -119,10 +120,24 @@ final class PhabricatorProjectMembersEditController
$nav->selectFilter('members');
$nav->appendChild($panel);
- return $this->buildStandardPageResponse(
+ $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
+ $crumbs->addCrumb(
+ id(new PhabricatorCrumbView())
+ ->setName($project->getName())
+ ->setHref('/project/view/'.$project->getID().'/')
+ );
+ $crumbs->addCrumb(
+ id(new PhabricatorCrumbView())
+ ->setName(pht('Edit Members'))
+ ->setHref($this->getApplicationURI())
+ );
+ $nav->setCrumbs($crumbs);
+
+ return $this->buildApplicationPage(
$nav,
array(
'title' => $title,
+ 'device' => true,
));
}
diff --git a/src/applications/project/controller/PhabricatorProjectProfileController.php b/src/applications/project/controller/PhabricatorProjectProfileController.php
index 60e9639e9a..df47270792 100644
--- a/src/applications/project/controller/PhabricatorProjectProfileController.php
+++ b/src/applications/project/controller/PhabricatorProjectProfileController.php
@@ -5,6 +5,7 @@ final class PhabricatorProjectProfileController
private $id;
private $page;
+ private $project;
public function willProcessRequest(array $data) {
$this->id = idx($data, 'id');
@@ -24,6 +25,7 @@ final class PhabricatorProjectProfileController
}
$project = $query->executeOne();
+ $this->project = $project;
if (!$project) {
return new Aphront404Response();
}
@@ -96,7 +98,7 @@ final class PhabricatorProjectProfileController
array(
'class' => $class,
),
- 'Join Project'));
+ pht('Join Project')));
} else {
$action = javelin_tag(
'a',
@@ -105,7 +107,7 @@ final class PhabricatorProjectProfileController
'sigil' => 'workflow',
'class' => 'grey button',
),
- 'Leave Project...');
+ pht('Leave Project...'));
}
$header->addAction($action);
@@ -115,10 +117,10 @@ final class PhabricatorProjectProfileController
$content = '
| Creator | +%s | %s |
|---|---|---|
| Created | +%s | %s |
| %s | ||
| Blurb | +%s | %s |
No one is affiliated with this project.
'; + $affiliated = + ''. + pht('No one is affiliated with this project.'). + '
'; } return 'NOTE: Policy settings are not '. - 'yet fully implemented. Some interfaces still ignore these settings, '. - 'particularly "Visible To".
')) + ->appendChild(''. + pht('NOTE: Policy settings are not yet fully implemented. '. + 'Some interfaces still ignore these settings, '. + 'particularly "Visible To".').'
') ->appendChild( id(new AphrontFormPolicyControl()) ->setUser($user) ->setName('can_view') - ->setCaption('Members can always view a project.') + ->setCaption(pht('Members can always view a project.')) ->setPolicyObject($project) ->setPolicies($policies) ->setCapability(PhabricatorPolicyCapability::CAN_VIEW)) @@ -192,13 +192,13 @@ final class PhabricatorProjectProfileEditController ->setUser($user) ->setName('can_join') ->setCaption( - 'Users who can edit a project can always join a project.') + pht('Users who can edit a project can always join a project.')) ->setPolicyObject($project) ->setPolicies($policies) ->setCapability(PhabricatorPolicyCapability::CAN_JOIN)) ->appendChild( id(new AphrontFormMarkupControl()) - ->setLabel('Profile Image') + ->setLabel(pht('Profile Image')) ->setValue( phutil_tag( 'img', @@ -207,18 +207,20 @@ final class PhabricatorProjectProfileEditController )))) ->appendChild( id(new AphrontFormImageControl()) - ->setLabel('Change Image') + ->setLabel(pht('Change Image')) ->setName('image') ->setError($e_image) - ->setCaption('Supported formats: '.implode(', ', $supported_formats))) + ->setCaption( + pht('Supported formats:').' '.implode(', ', $supported_formats))) ->appendChild( id(new AphrontFormSubmitControl()) ->addCancelButton('/project/view/'.$project->getID().'/') - ->setValue('Save')); + ->setValue(pht('Save'))); $panel = new AphrontPanelView(); $panel->setHeader($header_name); $panel->setWidth(AphrontPanelView::WIDTH_FORM); + $panel->setNoBackground(); $panel->appendChild($form); $nav = $this->buildLocalNavigation($project); @@ -229,10 +231,24 @@ final class PhabricatorProjectProfileEditController $panel, )); - return $this->buildStandardPageResponse( + $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView()); + $crumbs->addCrumb( + id(new PhabricatorCrumbView()) + ->setName($project->getName()) + ->setHref('/project/view/'.$project->getID().'/') + ); + $crumbs->addCrumb( + id(new PhabricatorCrumbView()) + ->setName(pht('Edit Project')) + ->setHref($this->getApplicationURI()) + ); + $nav->setCrumbs($crumbs); + + return $this->buildApplicationPage( $nav, array( 'title' => $title, + 'device' => true, )); } } diff --git a/src/applications/project/controller/PhabricatorProjectUpdateController.php b/src/applications/project/controller/PhabricatorProjectUpdateController.php index 9d11fd16a1..f6b6910eda 100644 --- a/src/applications/project/controller/PhabricatorProjectUpdateController.php +++ b/src/applications/project/controller/PhabricatorProjectUpdateController.php @@ -61,12 +61,14 @@ final class PhabricatorProjectUpdateController case 'leave': $dialog = new AphrontDialogView(); $dialog->setUser($user); - $dialog->setTitle('Really leave project?'); + $dialog->setTitle(pht('Really leave project?')); $dialog->appendChild( - 'Your tremendous contributions to this project will be sorely '. - 'missed. Are you sure you want to leave?
'); + ''. + pht('Your tremendous contributions to this project will be sorely '. + 'missed. Are you sure you want to leave?'). + '
'); $dialog->addCancelButton($project_uri); - $dialog->addSubmitButton('Leave Project'); + $dialog->addSubmitButton(pht('Leave Project')); break; default: return new Aphront404Response(); diff --git a/src/applications/project/editor/PhabricatorProjectEditor.php b/src/applications/project/editor/PhabricatorProjectEditor.php index 959e86da34..2992fa4f35 100644 --- a/src/applications/project/editor/PhabricatorProjectEditor.php +++ b/src/applications/project/editor/PhabricatorProjectEditor.php @@ -164,7 +164,8 @@ final class PhabricatorProjectEditor extends PhabricatorEditor { if ($slug == '/') { throw new PhabricatorProjectNameCollisionException( - "Project names must be unique and contain some letters or numbers."); + pht("Project names must be unique and contain some ". + "letters or numbers.")); } $id = $project->getID();