// /** @file
//
//   String definitions for Setup formset.
//
// Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
// **/

/=#
/////////////////////////////////   GENERIC DEFINITIONS   /////////////////////////////////
#langdef en-US                                  "English"
#string STR_NULL                                #language en-US " "

/////////////////////////////////   FORM SET   /////////////////////////////////
#string STR_FORM_SET_HELP                        #language en-US "Manage Opal disks"

/////////////////////////////////   MULTIPLE FORMS   /////////////////////////////////
#string STR_OPAL                                 #language en-US "Opal"
#string STR_MAIN_OPAL_VERSION                    #language en-US "Version 00.0.0.0000"

/////////////////////////////////   MAIN MENU FORM   /////////////////////////////////
#string STR_MAIN_PHY_DISKS_LBL                   #language en-US "Physical Disks:"

#string STR_MAIN_GOTO_DISK_INFO_0                #language en-US " "
#string STR_MAIN_GOTO_DISK_INFO_1                #language en-US " "
#string STR_MAIN_GOTO_DISK_INFO_2                #language en-US " "
#string STR_MAIN_GOTO_DISK_INFO_3                #language en-US " "
#string STR_MAIN_GOTO_DISK_INFO_4                #language en-US " "
#string STR_MAIN_GOTO_DISK_INFO_5                #language en-US " "

#string STR_MAIN_GOTO_DISK_INFO_HELP             #language en-US "Select to see Opal disk actions"

#string STR_MAIN_NO_DISKS_PRESENT_LBL            #language en-US "No disks connected to system"
#string STR_MAIN_NO_DISKS_PRESENT_LBL_HELP       #language en-US "The storage needs to be connected before EndOfDxe"

/////////////////////////////////   DISK INFO MENU FORM   /////////////////////////////////
#string STR_DISK_INFO_SELECTED_DISK_NAME         #language en-US " "

#string STR_DISK_INFO_LOCK                       #language en-US "Lock"
#string STR_DISK_INFO_UNLOCK                     #language en-US "Unlock"
#string STR_DISK_INFO_SET_ADMIN_PSWD             #language en-US "Update Drive Admin Password"
#string STR_DISK_INFO_SET_USER_PSWD              #language en-US "Set Drive User Password"
#string STR_DISK_INFO_SECURE_ERASE               #language en-US "Secure Erase User Data"
#string STR_DISK_INFO_PSID_REVERT                #language en-US "PSID Revert to factory default"
#string STR_DISK_INFO_REVERT                     #language en-US "Admin Revert to factory default and Disable"
#string STR_DISK_INFO_DISABLE_USER               #language en-US "Disable User"
#string STR_DISK_INFO_ENABLE_FEATURE             #language en-US "Enable Feature"
#string STR_DISK_INFO_ENABLE_BLOCKSID            #language en-US "TCG Storage Action"
#string STR_ENABLED                              #language en-US "Enable BlockSID"
#string STR_DISABLED                             #language en-US "Disable BlockSID"

#string STR_NONE                                 #language en-US "None"
#string STR_DISK_INFO_ENABLE_BLOCKSID_TRUE       #language en-US "Require physical presence when remote enable BlockSID"
#string STR_DISK_INFO_ENABLE_BLOCKSID_FALSE      #language en-US "Not require physical presence when remote enable BlockSID"
#string STR_DISK_INFO_DISABLE_BLOCKSID_TRUE      #language en-US "Require physical presence when remote disable BlockSID"
#string STR_DISK_INFO_DISABLE_BLOCKSID_FALSE     #language en-US "Not require physical presence when remote disable BlockSID"

#string STR_BLOCKSID_STATUS_HELP                 #language en-US "BlockSID action change status"
#string STR_BLOCKSID_STATUS                      #language en-US "Current BlockSID Status:"
#string STR_BLOCKSID_STATUS1                     #language en-US ""
#string STR_BLOCKSID_STATUS2                     #language en-US ""
#string STR_BLOCKSID_STATUS3                     #language en-US ""

#string STR_OPAL_REQUESTS_LBL                    #language en-US "Opal Password Requests:"
#string STR_DISK_INFO_LOCK_HELP                  #language en-US "Lock the disk"
#string STR_DISK_INFO_UNLOCK_HELP                #language en-US "Unlock the disk"
#string STR_DISK_INFO_SET_ADMIN_PSWD_HELP        #language en-US "Set password for the administrator, reset is required for the request to be processed in next boot"
#string STR_DISK_INFO_SET_USER_PSWD_HELP         #language en-US "Set password for User 1, reset is required for the request to be processed in next boot"
#string STR_DISK_INFO_SECURE_ERASE_HELP          #language en-US "Securely erase the disk, reset is required for the request to be processed in next boot"
#string STR_DISK_INFO_REVERT_HELP                #language en-US "Revert the disk to factory defaults, reset is required for the request to be processed in next boot"
#string STR_DISK_INFO_PSID_REVERT_HELP           #language en-US "Revert the disk to factory defaults, PSID is a 32 character case sensitive value, reset is required for the request to be processed in next boot"
#string STR_DISK_INFO_DISABLE_USER_HELP          #language en-US "Disable User, reset is required for the request to be processed in next boot"
#string STR_DISK_INFO_ENABLE_FEATURE_HELP        #language en-US "Enable Feature, reset is required for the request to be processed in next boot"
#string STR_KEEP_USER_DATA_PROMPT                #language en-US "  Keep User Data"
#string STR_KEEP_USER_DATA_HELP                  #language en-US "Check to keep user data, otherwise data will be lost"

#string STR_DISK_INFO_ENABLE_BLOCKSID_HELP       #language en-US "Change BlockSID actions, includes enable or disable BlockSID, Require or not require physical presence when remote enable or disable BlockSID"
