<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you 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.
  
-->
<library>
<script>
<![CDATA[

var mess = {};

mess.home = "Home";
mess.welcome = "Welcome !<br />We now determine if your configuration is good to have the best experience with OpenMeetings.";
mess.sound = "Sound";
mess.micro = "Micro";
mess.webcam = "Webcam";
mess.bandwidth = "Bandwidth";
mess.latency = "Latency";
mess.synthesis = "Synthesis";
mess.next = "Next >";
mess.listen_sound = "Do you hear the voice ?";
mess.yes = "Yes";
mess.no = "No";
mess.microRecord = "Record your voice and click on \"Play\" button to hear if your micro works.";
mess.webcamText = "Your webcam :";
mess.bandwidthText = "We are testing the capacity of your Internet connexion.";
mess.latencyText = "We are testing the delay between your computer and our server.";
mess.synthesisText = "Your results :";
]]>
</script>
</library>
