// *++
//
// Copyright (c) 1999 - 2014, 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.
//
// -- *

#langdef   en-US "English"
#langdef   fr-FR "Français"

#string STR_FWUPDATE_FIRMWARE_VOL_UPDATE  #language en-US  "Intel(R) UDK2014 Firmware Update Utility for the Intel(R) MinnowMax\n"
#string STR_FWUPDATE_COPYRIGHT            #language en-US  "Copyright(c) Intel Corporation 2006 - 2014\n"
                                          #language fr-FR  "Déposer(c) la Société commerciale de Intel 2006 - 2014\n"
#string STR_FWUPDATE_VERSION              #language en-US  "Version 0.72\n"

#string STR_FWUPDATE_ZEROLENGTH_ARG       #language en-US  "Argument with zero length is not allowed\n"
                                          #language fr-FR  "L'argument avec zéro longueur n'est pas permis\n"
#string STR_FWUPDATE_INVAILD_MAC          #language en-US  "Invalid MAC address.\n"
										  #string STR_FWUPDATE_READ_FILE            #language en-US  "\nReading file %s\n"
#string STR_FWUPDATE_READ_FILE_ERROR      #language en-US  "Unable to read file %s\n"
#string STR_FWUPDATE_SIZE                 #language en-US  "File size should be 16MB\n"
                                          #language fr-FR  "Doit être 16 MB\n"
#string STR_FWUPDATE_UPDATE_SUCCESS       #language en-US  "Update successful\n"
                                          #language fr-FR  "Met à jour prospère\n"
#string STR_FWUPDATE_UPDATE_FAILED        #language en-US  "\nUpdate failed.  Please make sure the flash is not write protected.\n"
#string STR_FWUPDATE_RESET                #language en-US  "\rResetting system in %d seconds ..."
                                          #language fr-FR  "\rLe système qui remettre à l'état initial dans %d les secondes ..."
#string STR_FWUPDATE_SHUTDOWN             #language en-US  "\rShutdown system in %d seconds ..."								  
#string STR_FWUPDATE_MANUAL_RESET         #language en-US  "\nPls manually reset system ...\n"
                                          #language fr-FR  "\nS'il vous plaît manuellement remet à l'état initial le système ...\n"
#string STR_FWUPDATE_NO_RESET             #language en-US  "Already up to date\n"
#string STR_MISSING_MAC_ARG               #language en-US  "Option -m specified without MAC address.\n"
#string STR_INVALID_MAC_ARG               #language en-US  "Invalid MAC address format used (e.g. -m 0011AA33CC55).\n"
#string STR_FWUPDATE_FILE_NOT_FOUND_ERROR #language en-US  "File %s not found.\n"
#string STR_FWUPDATE_PATH_ERROR           #language en-US  "File path/name too long.\n"
#string STR_FWUPDATE_UPDATING_FIRMWARE    #language en-US  "\nUpdating Firmware.  This may take a few minutes.\n"
#string STR_FWUPDATE_UPDATING_MAC         #language en-US  "\nUpdating MAC Address.\n"
#string STR_SPI_NOT_FOUND                 #language en-US  "\nSPI Protocol is not found.\n"

#string STR_FWUPDATE_USAGE                #language en-US  "Usage: FirmwareUpdate [IMAGEFILE]\n"
#string STR_FWUPDATE_USAGE_1              #language en-US  "\n"
#string STR_FWUPDATE_USAGE_2              #language en-US  "   Programs the 8MB IMAGEFILE for the MinnowMax.\n"
#string STR_FWUPDATE_USAGE_3              #language en-US  " \n"
#string STR_FWUPDATE_USAGE_4              #language en-US  " \n"

