// 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 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();
}
