<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2006 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.
-->

<resources>
    <!-- The name of the Voice Dialer application. -->
    <string name="voiceDialer">Voice Dialer</string>

    <!-- title to the Tool Tip window.  open when VoiceDialer not launched
        by green Call button -->
    <string name="tool_tip_title">Did you know\u2026</string>

    <!-- message in the Tool Tip window.  purpose is to notify user of green
        Call button launch -->
    <string name="tool_tip_message">
        Pressing &amp; holding the green Call button opens the Voice
        Dialer.
    </string>

    <!-- present on the VoiceDialer main screen to give examples of valid
            speech input -->
    <string name="examples">
        Examples:
        <b>
            \n\"Call John Doe\"
            \n\"Call John Doe at home, \u2026\"
            \n\"Call voicemail\"
            \n\"Dial (866) 555 0123\"
            \n\"Dial 911, 811, \u2026\"
            \n\"Dial +44 7333 444 555\"
            \n\"Redial\"
            \n\"Open Calendar\"
        </b>
    </string>

    <!-- title to the VoiceDialer main screen -->
    <string name="title">Voice Dialer</string>

    <!-- title to the VoiceDialer main screen -->
    <string name="bluetooth_title">Bluetooth Voice Dialer</string>

    <!-- displayed on the VoiceDialer main screen while initializing -->
    <string name="initializing">Starting up.</string>

    <!-- displayed on the VoiceDialer main screen while listening to speech -->
    <string name="listening">Listening\u2026</string>

    <!-- displayed on the VoiceDialer main screen upon failure -->
    <string name="please_try_again">Please try again.</string>


    <!--displayed when there is a fatal error on initialization or
        recognition-->
    <string name="failure">Failure</string>

    <!-- displayed on the VoiceDialer main screen after unrecoverable error.
            when present, this message follows the one above -->
    <string name="recognition_error">
        You can also try restarting your phone.
    </string>

    <!-- displayed when the connection tot he bluetooth headset is lost -->
    <string name="headset_connection_lost">
      Connection to headset lost.
    </string>

    <!-- appended to recognition result from VoiceDialer.grxml to
            indicate a 'home' number.
            'Call John Smith' becomes 'Call John Smith at home'  -->
    <string name="at_home">" at home"</string>

    <!-- appended to recognition result from VoiceDialer.grxml to
            indicate a 'mobile' number.
            'Call John Smith' becomes 'Call John Smith at home'  -->
    <string name="on_mobile">" on mobile"</string>

    <!-- appended to recognition result from VoiceDialer.grxml to
            indicate a 'work' number.
            'Call John Smith' becomes 'Call John Smith at home'  -->
    <string name="at_work">" at work"</string>

    <!-- appended to recognition result from VoiceDialer.grxml to
            indicate a 'other' number.
            'Call John Smith' becomes 'Call John Smith at home'  -->
    <string name="at_other">" at other"</string>

    <!-- message in popup which indicates that VoiceDialer logging
            has been enabled -->
    <string name="logging_enabled">Voice Dialer logging is enabled.</string>
    
    <!-- message in popup which indicates that VoiceDialer logging
            has been disabled -->
    <string name="logging_disabled">Voice Dialer logging is disabled.</string>

    <!-- message that is spoken to indicate that the user can begin speaking.
    -->
    <string name="speak_now_tts">Speak now.</string>

    <!-- message that is spoken when we get no results
    -->
    <string name="no_results_tts">No results, try again.</string>

    <!-- message that is spoken when the user asks for a choice that
            is not available -->
    <string name="invalid_choice_tts">Invalid choice.</string>

    <!-- message that is spoken to inform the user that the application
            is shutting down.-->
    <string name="goodbye_tts">Goodbye.</string>

</resources>
