// Copyright (C) 2008 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.gerrit.client.account;

import com.google.gwt.i18n.client.Constants;

public interface AccountConstants extends Constants {
  String settingsHeading();

  String changeAvatar();

  String fullName();

  String preferredEmail();

  String registeredOn();

  String accountId();

  String diffViewLabel();

  String maximumPageSizeFieldLabel();

  String dateFormatLabel();

  String contextWholeFile();

  String showSiteHeader();

  String useFlashClipboard();

  String reviewCategoryLabel();

  String messageShowInReviewCategoryNone();

  String messageShowInReviewCategoryName();

  String messageShowInReviewCategoryEmail();

  String messageShowInReviewCategoryUsername();

  String messageShowInReviewCategoryAbbrev();

  String buttonSaveChanges();

  String highlightAssigneeInChangeTable();

  String showRelativeDateInChangeTable();

  String showSizeBarInChangeTable();

  String showLegacycidInChangeTable();

  String muteCommonPathPrefixes();

  String signedOffBy();

  String publishCommentsOnPush();

  String workInProgressByDefault();

  String myMenu();

  String myMenuInfo();

  String myMenuName();

  String myMenuUrl();

  String myMenuReset();

  String tabAccountSummary();

  String tabAgreements();

  String tabContactInformation();

  String tabDiffPreferences();

  String tabEditPreferences();

  String tabGpgKeys();

  String tabHttpAccess();

  String tabMyGroups();

  String tabOAuthToken();

  String tabPreferences();

  String tabSshKeys();

  String tabWatchedProjects();

  String tabWebIdentities();

  String buttonShowAddSshKey();

  String buttonCloseAddSshKey();

  String buttonDeleteSshKey();

  String buttonClearSshKeyInput();

  String buttonAddSshKey();

  String userName();

  String password();

  String buttonSetUserName();

  String confirmSetUserNameTitle();

  String confirmSetUserName();

  String buttonClearPassword();

  String buttonGeneratePassword();

  String revokePassword();

  String linkObtainPassword();

  String linkEditFullName();

  String linkReloadContact();

  String invalidUserName();

  String invalidUserEmail();

  String labelOAuthToken();

  String labelOAuthExpires();

  String labelOAuthNetRCEntry();

  String labelOAuthGitCookie();

  String labelOAuthExpired();

  String sshKeyInvalid();

  String sshKeyAlgorithm();

  String sshKeyKey();

  String sshKeyComment();

  String sshKeyStatus();

  String addSshKeyPanelHeader();

  String addSshKeyHelpTitle();

  String addSshKeyHelp();

  String sshJavaAppletNotAvailable();

  String invalidSshKeyError();

  String sshHostKeyTitle();

  String sshHostKeyFingerprint();

  String sshHostKeyKnownHostEntry();

  String gpgKeyId();

  String gpgKeyFingerprint();

  String gpgKeyUserIds();

  String webIdStatus();

  String webIdEmail();

  String webIdIdentity();

  String untrustedProvider();

  String buttonDeleteIdentity();

  String buttonLinkIdentity();

  String buttonWatchProject();

  String defaultProjectName();

  String defaultFilter();

  String buttonBrowseProjects();

  String projects();

  String projectsClose();

  String projectListOpen();

  String watchedProjectName();

  String watchedProjectFilter();

  String watchedProjectColumnEmailNotifications();

  String watchedProjectColumnNewChanges();

  String watchedProjectColumnNewPatchSets();

  String watchedProjectColumnAllComments();

  String watchedProjectColumnSubmittedChanges();

  String watchedProjectColumnAbandonedChanges();

  String contactFieldFullName();

  String contactFieldEmail();

  String buttonOpenRegisterNewEmail();

  String buttonSendRegisterNewEmail();

  String buttonCancel();

  String titleRegisterNewEmail();

  String descRegisterNewEmail();

  String errorDialogTitleRegisterNewEmail();

  String emailFilterHelpTitle();

  String emailFilterHelp();

  String newAgreement();

  String agreementName();

  String agreementDescription();

  String newAgreementSelectTypeHeading();

  String newAgreementNoneAvailable();

  String newAgreementReviewLegalHeading();

  String newAgreementReviewContactHeading();

  String newAgreementCompleteHeading();

  String newAgreementIAGREE();

  String newAgreementAlreadySubmitted();

  String buttonSubmitNewAgreement();

  String welcomeToGerritCodeReview();

  String welcomeReviewContact();

  String welcomeContactFrom();

  String welcomeUsernameHeading();

  String welcomeSshKeyHeading();

  String welcomeSshKeyText();

  String welcomeAgreementHeading();

  String welcomeAgreementText();

  String welcomeAgreementLater();

  String welcomeContinue();

  String messageEnabled();

  String messageCCMeOnMyComments();

  String messageDisabled();

  String emailFieldLabel();

  String emailFormatFieldLabel();

  String messagePlaintextOnly();

  String messageHtmlPlaintext();

  String defaultBaseForMerges();

  String autoMerge();

  String firstParent();
}
