The Best French online language courses 2024 Comparison (2024)

Price comparison: 1 week French course

Sort by: Best rated (overall)|Most popular|Best rated teaching quality|Best rated social activities|Lowest price

See all 161 French courses in Tours

Interested in courses in other cities?

All 842 courses in France

Tours map with schools offering courses

The Best French online language courses 2024 Comparison (1)

The Best French online language courses 2024 Comparison (2)The Best French online language courses 2024 Comparison (3)The Best French online language courses 2024 Comparison (4)

Reviews by former students who attended a course in Tours

The Best French online language courses 2024 Comparison (5)

Everyone was always very kind and helpful. It was like a family atmosphere. Teachers, staff and the owner of the school included. I felt supported from the moment I arrived, and I was there for 12 weeks from Oct-Dec 2023.
Great, family-like atmosphere

27 December 2023
Course: Semester Session 20 - 12 weeks
Student age: 33 years

Show more

4.7 | 68 reviews

MeganTours Langues

The Best French online language courses 2024 Comparison (6)

Great school! Very deep learning; moved the needle on the speaking & grammar of French. Excellent teaching staff.

2 October 2023
Course: General French 20 - 2 weeks
Student age: 47 years

Show more

4.7 | 68 reviews

KoenTours Langues

The Best French online language courses 2024 Comparison (7)

Max 10 person/class even in busy season. Excellent teaching quality.

23 August 2023
Course: General French 20 - 4 weeks
Student age: 30 years

Show more

4.7 | 68 reviews

HirokiTours Langues

The Best French online language courses 2024 Comparison (8)

Very tight-knit community, the students actually want to learn, and the teachers are fun.
The vast majority of the students are Japanese. Good occasion to practice that language also.

16 August 2023
Course: General French 20 - 6 weeks
Student age: 18 years

Show more

4.7 | 68 reviews

MikhailTours Langues

The Best French online language courses 2024 Comparison (9)

The teachers were very good. They prepare their lessons and motivate us.
Overall, it's a good school for young people with a great atmosphere.

12 June 2023
Course: General French 20 - 2 weeks
Student age: 59 years

Show more

4.7 | 68 reviews

MarielaTours Langues

The Best French online language courses 2024 Comparison (10)

Super school.

25 August 2022
Course: General French 20 - 2 weeks
Student age: 44 years

Show more

4.7 | 68 reviews

The Best French online language courses 2024 Comparison (11)

I had individual lessons with the director Yannik Durand himself. The lessons were top, with many interesting topics and conversations.
Small, manageable, fine - located right on the city's beautiful main square.

21 August 2022
Course: One-to-One Package 12 - 1 week
Student age: 57 years

Show more

4.7 | 68 reviews

JohannTours Langues

The Best French online language courses 2024 Comparison (12)

Small classes. Teachers engage in adult education and adapt to the abilities of the students. Teaching materials are used to promote language comprehension and thus not to dully work off cloze texts.

19 August 2022
Course: General French 20 - 2 weeks
Student age: 56 years

Show more

4.7 | 68 reviews

AndreTours Langues

The Best French online language courses 2024 Comparison (13)

Small school, small courses. Home stay was ideal: warm and friendly family. It was also close to the train station so we could take easy day trips.
The only down side was that the numerous female Asian students often had strong accents and spoke very quietly and timidly, if at all.

14 October 2019
Course: General French 15 - 2 weeks
Student age: 72 years

Show more

4.7 | 68 reviews

SamTours Langues

The Best French online language courses 2024 Comparison (14)

I liked the fact that both Caroline and Yannick were totally responsive to every question and went out of their way to research topics of interest to me.

18 September 2019
Course: One-to-One Package 8 - 1 week
Student age: 63 years

Show more

4.7 | 68 reviews

JeanTours Langues

The Best French online language courses 2024 Comparison (15)

The friendly, funny and very helpful teachers

5 September 2019
Course: General French 20 - 1 week
Student age: 19 years

Show more

4.7 | 68 reviews

RonjaTours Langues

The Best French online language courses 2024 Comparison (16)

Teachers

19 August 2019
Course: General French 20 - 2 weeks
Student age: 45 years

Show more

4.7 | 68 reviews

RenataTours Langues

The Best French online language courses 2024 Comparison (17)

The building is a lovely old rickety place in an excellent location. The constraints imposed by the building mean that more usual modern facilities are not easy to provide. I personally would not want it any other way, but I can imagine some students might find it unusual.The staff went a very long way to tailor our course to our needs - first class. They were without exception charming, helpful and focused. We loved it.There was one lack of communication that spoiled an otherwise perfect time: the details of the trip arranged for the final afternoon were not revealed to us until the day before, and we had already visited the places the trip was planned for. A pity, but nothing much to worry about.

13 April 2019
Course: General French 20 - 1 week
Student age: 71 years

Show more

4.7 | 68 reviews

DerekTours Langues

The Best French online language courses 2024 Comparison (18)

Friendly staff eager to look after the idividual needs of pupils.

3 April 2019
Course: General French 20 - 1 week
Student age: 73 years

Show more

4.7 | 68 reviews

MariaTours Langues

The Best French online language courses 2024 Comparison (19)

The location

10 September 2018
Course: General French 10 - 1 week
Student age: 46 years

Show more

4.7 | 68 reviews

AlmudenaTours Langues

The Best French online language courses 2024 Comparison (20)

The positive and friendly atmosphere helped to provide a great social and working environment. The social activities arranged by the language school were an excellent opportunity to make friends and practice French speaking skills in spontaneous conversation.

15 August 2018
Course: General French 20 - 1 week
Student age: 17 years

Show more

4.7 | 68 reviews

LydiaTours Langues

The Best French online language courses 2024 Comparison (21)

Everything is really amazing, the professors, the students from different places and cultures, the class environment, the location of the school....

8 August 2018
Course: General French 15 - 4 weeks
Student age: 26 years

Show more

4.7 | 68 reviews

Batlaa Tours Langues

The Best French online language courses 2024 Comparison (22)

very small class size, lessons very varied with lots of fun, teacher very motivated, very informal atmosphere,

22 May 2018
Course: General French 20 - 2 weeks
Student age: 55 years

Show more

4.7 | 68 reviews

MartinaTours Langues

The Best French online language courses 2024 Comparison (23)

The teacher Brahim was excellent.
All the staff are very friendly and helpful.

12 February 2018
Course: General French 15 - 2 weeks
Student age: 60 years

Show more

4.7 | 68 reviews

KevinTours Langues

The Best French online language courses 2024 Comparison (24)

the teacher
Great friendly school.

11 September 2017
Course: One-to-One Package 12 - 2 weeks
Student age: 47 years

Show more

4.7 | 68 reviews

GordanaTours Langues

Q&A - Questions and answers about Tours

  • In Tours, we have a really exceptional school: Tours Langues. It accepts students from the age of 16 and, therefore, your daughter can also take part in the adult course. However, we recommend accommodation with a host family at this age.

    Lisa Saskia Schiwy, LanguageCourse.Net - Mar 28, 2023

    FAQ about courses in Tours

    • Tours Langues has received the best overall rating in Tours.

    • Tours Langues, located in 36 rue Briconnet has been voted as the school with the best location in Tours.

    • Students rated the activity program at Tours Langues as the best.

    • Tours Langues was rated highest for quality of teaching.

    • 'Homestay' at Tours Langues is the best rated accommodation in Tours.

      Questions about French schools in Tours?

      Get free advice from our language travel experts to help you find the best school for you.

      The Best French online language courses 2024 Comparison (25)Send a questionOr+1-646 503 18 10 / +44-330 124 03 17

      course destinations

      French schools in France

      • Aix-en-Provence (29 courses)
      • Ajaccio (Corsica) (4 courses)
      • Annecy (25 courses)
      • Antibes (44 courses)
      • Avignon (1 course)
      • Bayonne (9 courses)
      • Béziers (1 course)
      • Biarritz (30 courses)
      • Bordeaux (28 courses)
      • Brest (8 courses)
      • Caen (4 courses)
      • Cannes (21 courses)
      • Carcassonne (4 courses)
      • Chamonix (2 courses)
      • La Rochelle (27 courses)
      • Lille (24 courses)
      • Lyon (45 courses)
      • Marseille (8 courses)
      • Montévrain (2 courses)
      • Montpellier (83 courses)
      • Morzine (Alpes) (12 courses)
      • Nantes (9 courses)
      • Nice (117 courses)
      • Nîmes (4 courses)
      • Paris (191 courses)
      • Perpignan (4 courses)
      • Rennes (4 courses)
      • Rouen (24 courses)
      • Royan (8 courses)
      • Saint Laurent de Cerdans (2 courses)
      • Strasbourg (4 courses)
      • Toulon (1 course)
      • Toulouse (28 courses)
      • Tours (27 courses)
      • Vichy (8 courses)

      French schools in the rest of the world

      • Algeria (2 courses)
      • Armenia (1 course)
      • Australia (4 courses)
      • Austria (19 courses)
      • Belgium (16 courses)
      • Brazil (13 courses)
      • Canada (207 courses)
      • Chile (3 courses)
      • Czech Republic (26 courses)
      • Ecuador (1 course)
      • England UK (44 courses)
      • Germany (39 courses)
      • Greece (2 courses)
      • Guadeloupe (6 courses)
      • Hong Kong (3 courses)
      • Hungary (11 courses)
      • India (6 courses)
      • Ireland (3 courses)
      • Italy (54 courses)
      • Japan (11 courses)
      • Latvia (2 courses)
      • Malaysia (2 courses)
      • Martinique (4 courses)
      • Mexico (2 courses)
      • Morocco (9 courses)
      • Netherlands (14 courses)
      • Northern Ireland (1 course)
      • Norway (1 course)
      • Peru (1 course)
      • Poland (17 courses)
      • Portugal (1 course)
      • Russia (8 courses)
      • Scotland (1 course)
      • Singapore (6 courses)
      • South Africa (2 courses)
      • Spain (136 courses)
      • Switzerland (150 courses)
      • Tanzania (5 courses)
      • Tunisia (10 courses)
      • Turkey (2 courses)
      • Ukraine (1 course)
      • Uruguay (5 courses)
      • USA (51 courses)
`; } } jQuery("#activeFilters, #activeFiltersBot").html(htmlFilters);var results_ids = "#filterResult";if (intersec.length > 2) {results_ids += ", #filterResultBot";} else {jQuery("#filterResultBot").css('display', 'none');}if (jQuery("#juniorIntro, #topCityWrap").length > 0) { if (htmlFilters) {jQuery("#juniorIntro, #topCityWrap").fadeOut(400, function() {jQuery(results_ids).css('display', 'inline-block');scroll_if_anchor('#filterResult'); }); }} else {jQuery(results_ids).css('display', 'inline-block');scroll_if_anchor('#filterResult');} if (!htmlFilters) { jQuery("#filterResult, #filterResultBot").css('display', 'none'); }jQuery("#filterNum, #filterNumBot").text(replacedString); // check if there's no checkbox filter checked before hiding the whole filterResult} else if (!jQuery(".filterIndicator").hasClass("isACheckBox") && !jQuery(".filterIndicator").hasClass("isADropDown")) { jQuery("#filterResult, #filterResultBot").css('display', 'none'); jQuery("#juniorIntro, #topCityWrap").fadeIn();} else { // if there are checkbox filter checked but no other filter running, update the message accordingly and remove all non-checkboxes pills (.filterIndicator) var str; if (intersec.length > 0) { if (intersec.length == 1) { str = " course in Tours matches the following filters: "; } else { str = " courses in Tours match the following filters: "; } } else { str = "No results found that match the following filters:"; } var replacedString = str.replace("", intersec.length ); jQuery("#juniorIntro").hide(400); jQuery(".topCityWrap").slideUp(); jQuery("#filterNum, #filterNumBot").text(replacedString); jQuery('.filterIndicator:not(.isACheckBox):not(.isADropDown)').remove(); }} function setCookie(name, value) { document.cookie = name + "=" + (value || "") + "; path=/"; } let setupPaginationObj = false; function storeFunctionCall(functionName, parameters) { if (isFacetJs) { if (!setupPaginationObj && paginationFunctionCall) { paginatedFiltersObj = paginationFunctionCall; paginatedFiltersObj.url = currentURL; setupPaginationObj = true; } const filterName = paginatedFiltersObj[functionName]; if (functionName === "filter_dropdown") { filterName[parameters[1]] = parameters[0]; } else if (functionName === "filter_checkbox") { !filterName[parameters[2]] && (filterName[parameters[2]] = []); // Add/remove value depending on "isChecked" if (parameters[1]) { if (!filterName[parameters[2]].includes(parameters[0])) { filterName[parameters[2]].push(parameters[0]); } } else { filterName[parameters[2]] = filterName[parameters[2]].filter(item => item !== parameters[0]); } } else if (functionName === "filter_rating") { paginatedFiltersObj[functionName] = parameters[0]; } else if (functionName === "filter_lessons" || functionName === "filter_students" || functionName === "filter_price_per_lesson" || functionName === "filter_prices") { filterName[0] = parameters[0]; filterName[1] = parameters[1]; } setCookie('functionCallPagination', JSON.stringify(paginatedFiltersObj)); } else { setCookie('functionCall', JSON.stringify({functionName, parameters, rangeSliderIndex: handleIndex})); document.getElementById("cover-spin").style.display = "block"; // IF (in age filter an age of less than 16 years has been selected) => load the junior course page instead of standard course page. if (1 && parameters[1] === "student_age_filter" && parameters[0] < 16) { window.location = "/schools-tours/"; } else { window.location = "/schools-tours/general"; } } }function filter_accommo(enable_acco_list) {filter_results['accommo'] = [];if (enable_acco_list.length > 0) {for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['accommo_types'].length > 0) {var inters = enable_acco_list.filter(function(value) {return -1 !== schools[id]['accommo_types'].indexOf(value)});if (inters.length > 0) {filter_results['accommo'].push(id);}}}} else {// No filterfilter_results['accommo'] = filter_results['all'];}apply_all_filters();}function filter_subcats(enable_cat_list) {filter_results['subcats'] = [];if (enable_cat_list.length > 0) {for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (enable_cat_list.includes(parseInt(schools[id]['subcategory'])))filter_results['subcats'].push(id);}}apply_all_filters();}function filter_lessons(min, max) { storeFunctionCall('filter_lessons', [...arguments]); if (!isFacetJs) return;filter_results['lessons'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['lessons_per_week'].length > 0) {if (parseInt(schools[id]['lessons_per_week']) >= min && parseInt(schools[id]['lessons_per_week']) <= max) {filter_results['lessons'].push(id);}}}apply_all_filters();}function filter_students(min, max) { storeFunctionCall('filter_students', [...arguments]); if (!isFacetJs) return;filter_results['students'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['max_students'].length > 0) {if (parseInt(schools[id]['max_students']) >= min && parseInt(schools[id]['max_students']) <= max) {filter_results['students'].push(id);}}}apply_all_filters();}function filter_rating(min) { storeFunctionCall('filter_rating', [...arguments]); if (!isFacetJs) return;if (min > 0) {filter_results['rating'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['rating'].length > 0) {if (parseFloat(schools[id]['rating']) >= min) {filter_results['rating'].push(id);}}}} else {// No filterfilter_results['rating'] = filter_results['all'];}apply_all_filters();} function filter_checkbox(checkboxValue, isChecked, filterType) { storeFunctionCall('filter_checkbox', [...arguments]); if (!isFacetJs) return; const checkboxValueToNum = +checkboxValue; const checkedCheckboxes = jQuery(`#${filterType} input:checked`); const type = filterType.replace("checkBox_", ""); const checksLength = checkedCheckboxes.length; // Reset array if previously zero checks (isChecked && checksLength === 1) && (filter_results[type] = []); for (let i = filter_results['all'].length - 1; i >= 0; i--) { const id = filter_results['all'][i]; // Normalize course value as an array always to simplify further calculations const courseVal = Array.isArray(schools[id][type]) ? schools[id][type].map(Number) : [+schools[id][type]]; const filterArr = filter_results[type]; // Determine if checkboxValue is an array and handle accordingly const matchCondition = courseVal.includes(checkboxValueToNum); if (matchCondition) { // Include the course id in the filter array if the checked checkbox value is in the looping course value and not already present in the filter array if (isChecked) { !filterArr.includes(id) && filterArr.push(id); // Remove the course id from the filter array if the unchecked checkbox value is in the looping course value and doesn't match to other checked values in the case there are currently other checked checkboxes } else if (!isChecked) { // Before removing the current looping course, ensure no other checked checkboxes match any of its course values const allCheckedValues = checkedCheckboxes.map(function() { return +jQuery(this).val(); }).get(); const isPresentInOtherChecks = courseVal.some(val => allCheckedValues.includes(+val)); if (!isPresentInOtherChecks) { const index = filterArr.indexOf(id); if (index > -1) filterArr.splice(index, 1); } } } } // Reset array if currently zero checks if (checksLength === 0) { filter_results[type] = filter_results['all'].slice(); // slice with empty parameter to create a shallow copy of the array } apply_all_filters(false, true, type, checksLength === 0); } function filter_dropdown(dropDownValue, filterType) { storeFunctionCall('filter_dropdown', [...arguments]); if (!isFacetJs) return; const type = filterType.replace("_filter", ""); // Reset array if val is "0" if (dropDownValue === 0) { filter_results[type] = filter_results['all'].slice(); } else { for (let i = filter_results['all'].length - 1; i >= 0; i--) { const id = filter_results['all'][i]; const courseVal = schools[id][type]; const filterArr = filter_results[type]; let matchCondition = false; if (type === "course_duration") { matchCondition = courseVal.map(Number).includes(dropDownValue); } if (type === "student_age") { const [minAge, maxAge] = courseVal; matchCondition = (+minAge === 0 || +minAge <= dropDownValue) && (+maxAge === 0 || +maxAge >= dropDownValue); if (dropDownValue <= 17) { jQuery("#juniorCoursesSpecialMsg").show(); } } if (matchCondition) { !filterArr.includes(id) && filterArr.push(id); } else { const index = filterArr.indexOf(id); if (index > -1) filterArr.splice(index, 1); } } } apply_all_filters(false, false, type, false, true); }function filter_prices(min, max) { storeFunctionCall('filter_prices', [...arguments]); if (!isFacetJs) return;filter_results['prices'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['course_price'].length > 0) {if (parseInt(schools[id]['course_price']) >= min && parseInt(schools[id]['course_price']) <= max)filter_results['prices'].push(id);}}apply_all_filters();} function filter_price_per_lesson(min, max) { storeFunctionCall('filter_price_per_lesson', [...arguments]); if (!isFacetJs) return; filter_results['price_per_lesson'] = []; for (var i = filter_results['all'].length - 1; i >= 0; i--) { var id = filter_results['all'][i]; if (schools[id]['price_per_lesson'].length > 0) { if (parseInt(schools[id]['price_per_lesson']) >= min && parseInt(schools[id]['price_per_lesson']) <= max) filter_results['price_per_lesson'].push(id); } } apply_all_filters(); }function onChangeSubcatFilter() {var cat_list = [];var subcatNavSpan = document.querySelectorAll("#subcatNav ul li span");for (var i = 0, len = subcatNavSpan.length; i < len; i++) {if (subcatNavSpan[i].getElementsByTagName("input")[0].checked) {cat_list.push( parseInt( subcatNavSpan[i].attributes['cat_type'].value ) );}}filter_subcats(cat_list);}function reset_subcats() {filter_results['subcats'] = filter_results['all'];var subcatNavSpan = document.querySelectorAll("#subcatNav ul li span");for (var i = 0, len = subcatNavSpan.length; i < len; i++) {subcatNavSpan[i].getElementsByTagName("input")[0].checked = true;}apply_all_filters();}function onChangeAccoFilter() {var acco_list = [];var accommoNavSpan = document.querySelectorAll("#accommoNav ul li span");for (var i = 0, len = accommoNavSpan.length; i < len; i++) {if (accommoNavSpan[i].getElementsByTagName("input")[0].checked) {acco_list.push( parseInt( accommoNavSpan[i].attributes['acco_type'].value ) );}};filter_accommo(acco_list);}function reset_accommo() {filter_results['accommo'] = filter_results['all'];var accommoNavSpan = document.querySelectorAll("#accommoNav ul li span");for (var i = 0, len = accommoNavSpan.length; i < len; i++) {accommoNavSpan[i].getElementsByTagName("input")[0].checked = false;};apply_all_filters();}function reset_prices() {filter_results['prices'] = filter_results['all'];jQuery("#coursePrice_left").text(rangesSliders["course_price"][0]);jQuery("#coursePrice_right").text(rangesSliders["course_price"][1]);jQuery('#sliderRange_coursePrice').slider("option", "values", [rangesSliders["course_price"][0], rangesSliders["course_price"][1]]);apply_all_filters();} function reset_price_per_lesson() { filter_results['price_per_lesson'] = filter_results['all']; jQuery("#pricePerLesson_left").text(rangesSliders["price_per_lesson"][0]); jQuery("#pricePerLesson_right").text(rangesSliders["price_per_lesson"][1]); jQuery('#sliderRange_pricePerLesson').slider("option", "values", [rangesSliders["price_per_lesson"][0], rangesSliders["price_per_lesson"][1]]); apply_all_filters(); }function reset_lessons() {filter_results['lessons'] = filter_results['all'];jQuery("#numOfLessons_left").text(rangesSliders["lessons_per_week"][0]);jQuery("#numOfLessons_right").text(rangesSliders["lessons_per_week"][1]);jQuery('#sliderRange_numOfLessons').slider("option", "values", [rangesSliders["lessons_per_week"][0], rangesSliders["lessons_per_week"][1]]);apply_all_filters();}function reset_students() {filter_results['students'] = filter_results['all'];jQuery("#numOfStudents_left").text(rangesSliders["max_students"][0]);jQuery("#numOfStudents_right").text(rangesSliders["max_students"][1]);jQuery('#sliderRange_numOfStudents').slider("option", "values", [rangesSliders["max_students"][0], rangesSliders["max_students"][1]]);apply_all_filters();}function reset_rating() {filter_rating(0);jQuery('#ratingStarsLeftBar use').removeClass('starFiltselected');} function reset_checkbox(type) { jQuery(`#checkBox_${type} input:checked`).click(); } function reset_student_age() { jQuery('#student_age_filter ul li:first-child a').click(); } function reset_course_duration() { jQuery('#course_duration_filter ul li:first-child a').click(); }function filter_details(filter, value) {var detail = "";var starEl = jQuery('#ratingStarsLeftBar .starFiltselected');var ratingValue = parseInt(starEl.last().data('value'), 10) || value;switch(filter) {case "lessons": detail = ": [" + jQuery('#sliderRange_numOfLessons').slider("option", "values")[0] + " - " + jQuery('#sliderRange_numOfLessons').slider("option", "values")[1] + "]"; break;case "students": detail = ": [" + jQuery('#sliderRange_numOfStudents').slider("option", "values")[0] + " - " + jQuery('#sliderRange_numOfStudents').slider("option", "values")[1] + "]"; break;case "prices": detail = ": [" + jQuery('#sliderRange_coursePrice').slider("option", "values")[0] + " € - " + jQuery('#sliderRange_coursePrice').slider("option", "values")[1] + " €]"; break; case "price_per_lesson": detail = ": [" + jQuery('#sliderRange_pricePerLesson').slider("option", "values")[0] + " € - " + jQuery('#sliderRange_pricePerLesson').slider("option", "values")[1] + " €]"; break;case "rating": detail = ": [" + ratingValue +" stars or better]"; break;case "accommo": detail += ": " + jQuery("#checkBox_accommo input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "school": detail += ": " + jQuery("#checkBox_school input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "cities": detail += ": " + jQuery("#checkBox_cities input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "room_occupancy": detail += ": " + jQuery("#checkBox_room_occupancy input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "language_level": detail += ": " + jQuery("#checkBox_language_level input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "accommodation_type": detail += ": " + jQuery("#checkBox_accommodation_type input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "meal_plans": detail += ": " + jQuery("#checkBox_meal_plans input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "course_duration": const cDurVal = jQuery("#course_duration_dd_filter .sel_filter").text(); detail += ": " + cDurVal + " " + (+cDurVal === 1 ? "week" : "weeks"); break; case "student_age": detail += ": " + jQuery("#student_age_dd_filter .sel_filter").text() + " years old"; break;default:;}return detail;}

Do you need a visa?


Country of Nationality:

Duration: weeks

Warning!

Please choose a Monday as a course starting date.

";if (pc_result['prices']['discount_tuition'] > 0) {tpl += "

" + pc_result['prices']['tuition_before_so'] + currency + "";} else {tpl += "";}tpl += Math.ceil(pc_result['prices']['tuition_before_so'] - pc_result['prices']['discount_tuition']) + currency + "" + pc_result['prices']['course_name'] + "

";if (pc_result['prices']['accommodation_accom'] > 0 && pc_result['prices']['includes_accommodation'] != 1) {tpl += "

" + pc_result['prices']['accommodation_accom'] + currency + "" + pc_result['prices']['accommodation_name'] + "

";}if (pc_result['prices']['inscription']>0) {tpl += "

" + pc_result['prices']['inscription'] + currency + "School's administrative fee

";}if (pc_result['prices']['includes_accommodation'] != 1 && pc_result['prices']['accommodation_fee']>0) {tpl += "

" + pc_result['prices']['accommodation_fee'] + currency + "One time accommodation fee charged by school

";}if (pc_result['prices']['hs_course'] > 0 && selected_date!=0) {tpl += "

" + pc_result['prices']['hs_course'] + currency + "High season supplement (Course)

";}if (pc_result['prices']['hs_accommodation'] > 0 && selected_date!=0) {tpl += "

" + pc_result['prices']['hs_accommodation'] + currency + "High season supplement (Accommodation)

";}if (pc_result['prices']['hasCourseOffer'] == true && pc_result['prices']['offerCourseDiscount'] > 0) {tpl += "

" + "-" + pc_result['prices']['offerCourseDiscount'] + currency + "" + pc_result['prices']['textSpecialOfferCourse'] + "

";}if (pc_result['prices']['hasAccommodationOffer'] == true && pc_result['prices']['offerAccommodationDiscount'] > 0) {tpl += "

" + "-" + pc_result['prices']['offerAccommodationDiscount'] + currency + "" + pc_result['prices']['textSpecialOfferAccommodation'] + "

";}tpl += "

";var total = pc_result['prices']['total'];var total_nodiscount = pc_result['prices']['subtotal'] + pc_result['prices']['offerCourseDiscount'] + pc_result['prices']['offerAccommodationDiscount'];if (selected_date==0) {var hs_course = parseInt(pc_result['prices']['hs_course']);if (isNaN(hs_course)) {hs_course=0;}var hs_accommo = parseInt(pc_result['prices']['hs_accommodation']);if (isNaN(hs_accommo)) {hs_accommo=0;}total -= ( hs_course + hs_accommo);total_nodiscount -= ( hs_course + hs_accommo);}if (total_nodiscount > total) {tpl += "

" + Math.ceil(total_nodiscount) + currency + "";} else {tpl += "";}tpl += Math.ceil(total) + currency + "

";if (selected_date!=0) {tpl += "Total final price including seasonal supplements, school registration fees and applicable sales tax.";} else {tpl += "Total final price including school registration fees and applicable sales tax.";}//tpl += jQuery("#courseSelected_" + school_id).attr("extra-info");tpl += jQuery("#infotooltip_" + school_index).attr("extra-info");jQuery("#infotooltip_" + school_index).attr("data-original-title", tpl);}

");const alterTooltipf = function() {if (jQuery(".mobileCloseTooltip").length == 0) {jQuery('.tooltip-inner').prepend(newInsert);}}if (aDataToggleTooltip.length !== 0 ) {let i;for (i = aDataToggleTooltip.length - 1; i >= 0; i--) {const el = jQuery(aDataToggleTooltip[i]);el.on('inserted.bs.tooltip', alterTooltipf)}}}// touch screen device detectionif ( ("ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch) === true ) {// put close button in tooltips when touchscreen is detected setTimeout(function() { itsTouchScreen(); }, 2500);}function destroyFlagToolEtc() {// destroy language flags tooltip when mobile// Mobile search box micro-plugin variables// const searchQuery = jQuery("#search_query");// destroy the flags info tooltip in mobileif (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}langListPop.off('hide.bs.popover');// turn off the event to re-init the tooltip after flags selector popover hideslangListPop.on('show.bs.popover', function() {langListPop.off('hide.bs.popover');});/** Mobile search box micro-plugin **/// start with transparent in order to don't hide magnifying glass icon// searchQuery.css('background-color', 'transparent');// bind focus event// searchQuery.on('focus', function() {// const that = jQuery(this);// to calculate search box deployment final width// const totalSearchFieldWidth = jQuery("#cBoxTabWrap").outerWidth() - jQuery("#searchForm_small").outerWidth() - 87;// background-color play to always show icon and have white background in search field// that.css('background-color', '#fff');// Show 'searchPlaceholderVar' variable is defined in the 'page_header.tpl' then animate the search field// that.attr('placeholder', searchPlaceholderVar).animate({// width: totalSearchFieldWidth,// }, 400, "swing", function() { // jQuery("#magniFyingGlass").hide(); // jQuery("#closeSearchBar").show(); // });// });//bind blur event// searchQuery.on('blur', function() {// const that = jQuery(this);// const glyphiconSearch = jQuery("#searchForm_small").find(".fa-search");// //contactBoxPhonesMobText.css('color', '');// // z-index play// glyphiconSearch.css('z-index', '4');// that.animate({// // animate back to zero width to close the field// width: 0,// }, 400, function() { // // jQuery("#magniFyingGlass").show(); // // jQuery("#closeSearchBar").hide();// // // background and z-index play// // that.css('background-color', 'transparent');// // glyphiconSearch.css('z-index', '');// });// });/** END OF => Mobile search box micro-plugin **/}// La siguiente función "slidingMenu();" sirve para mostrar y ocultar el sliding facetted menú lateral en el responsive modefunction slidingMenu() {// toggle side menuconst leftMenuBtns = jQuery("#filterMobBut, #cbp-spmenu-s2, #showLeft, #closeButtonSlideMenuTop, #closeButtonSlideMenuBot");// elements for toggling classes overconst bodyContent = jQuery("#body_content");const menuLeft = jQuery("#cbp-spmenu-s2");const closeButTopEl = jQuery('#closeButtonSlideMenuTop')[0];const closeButBotEl = jQuery('#closeButtonSlideMenuBot')[0];leftMenuBtns.on('click', function(event) {const transitionEvent = whichTransitionEvent();// No need of using event.stopPropagation() anymore writing the condition below!// to check if click is originated from outside the side menu itself// https://css-tricks.com/dangers-stopping-event-propagation/#article-header-id-2if (!jQuery(event.target).closest('#wrapSlideMenu').length || (event.target == closeButTopEl && event.currentTarget.id != "cbp-spmenu-s2") || (event.target == closeButBotEl && event.currentTarget.id != "cbp-spmenu-s2") ) {menuLeft.toggleClass('cbp-spmenu-open');// triggered only when closing the sidebar, so detect the transition end before changing z-indexif (bodyContent.hasClass('cbp-spmenu-opened')) {// .one() => because if the event handler is not removed after its called, the class will be removed from the second triggering and so on (the handler continue running if not cancelled)menuLeft.one(transitionEvent, function() {bodyContent.removeClass('cbp-spmenu-opened');});} else {// triggered only when opening the sidebar: no need of changing z-indexbodyContent.addClass('cbp-spmenu-opened');}}});}// END of slidingMenu() logicif (currentSize.width <= 1024) {slidingMenu();}// trigger reflows on resize width from desktop to mobilejQuery(window).on('widthOnlyResizedMobile', function() {var leftMenuBtns = jQuery("#filterMobBut, #cbp-spmenu-s2, #showLeft, #closeButtonSlideMenuTop, #closeButtonSlideMenuBot");leftMenuBtns.off('click');slidingMenu();}); /***********************************//** Main school_overview reflows **//*********************************/// school_overview repositions when resizing from desktop to mobilefunction mobileResp() {const contentPanel = jQuery("#content_panel");const schoolContainer = contentPanel.find(".schoolContainer");let starting_date = jQuery("#calendar_date").val();const schoolDetailsDropWrap = contentPanel.find(".schoolDetailsDropWrap");const resultsDetails2 = jQuery(".resultsDetails2"); // const reflowBlocks = jQuery(".reflowBlocks");const ratingWrap = jQuery(".ratingBlockWrap").find(".ratingWrap");// var textInsideCalc = jQuery('.textInsideCalc');// var calcModal = jQuery("#calcModal");// calcModal.appendTo(textInsideCalc);// modal changes on resizejQuery(".modal-backdrop").css('display', '');// calcModal.addClass('modal fade').removeClass('modalDisplay');jQuery("#decorator_xx10").addClass('modal-dialog');// jQuery("#modalContent").addClass('modal-content');// school_overview FACETS onlycontentPanel.find(".wrappableDivFacets").addClass('collapse').css('height', '');/*reflowBlocks.each(function() { const that = jQuery(this); const closest = that.closest(".middleAndResults"); closest.find(".resultsDetails2").insertAfter(that); that.insertAfter(closest.find(".mainRatingWrap")); });*/ resultsDetails2.each(function() { const that = jQuery(this); that.insertAfter(that.closest(".middleAndResults").find(".reflowBlocks")); });schoolDetailsDropWrap.each(function(){const that = jQuery(this);that.closest(".middleAndResults").find('.buttonToSchoolWrap').appendTo(that.closest('.schoolRightContentWrap'));// that.parent().find('.resultsLogos').after(that.find('.school_overview_p_inside_box_results'));if (that.hasClass('secondarySchoolBlock')) {that.appendTo(that.closest('.middleTop').find('.contentSideImg'));}});ratingWrap.each(function() {const that = jQuery(this);that.after(that.prev());});schoolContainer.each(function() {const that = jQuery(this);that.find(".resultsBand").prependTo(that.find(".middleTop"));// schoolDetailsDropWrap.css('width', '');that.find(".newBadge").insertAfter(that.find(".schoolPictWrap"));that.find(".schoolStrenghtsWrap").appendTo(that.find(".resultsDetails2")); that.find(".schoolDetailsDropWrap").insertAfter(that.find(".mainRatingWrap"));});// school_overview calculator partjQuery("#mob_duration_sel").html(jQuery("#duration_sel").html());if (starting_date == "") {starting_date = jQuery("#calendar_date_intro").html();jQuery("#calendarIndicator").html("+").addClass("calNumEmpty").removeClass("calNumFilled");} else if (typeof(starting_date) !== 'undefined') {jQuery("#calendarIndicator").html( starting_date.substr(0, starting_date.indexOf(' ')) ).addClass("calNumFilled").removeClass("calNumEmpty");}// jQuery("#mob_calendar_date").html(starting_date);jQuery("#mob_course_category_sel").html(jQuery("#course_category_sel").html());jQuery("#mob_accommodation_type_sel").html(jQuery("#accommodation_type_sel").html());jQuery(".modal-backdrop").css('display', '');// calcModal.addClass('modal fade').removeClass('modalDisplay');jQuery("#decorator_xx10").addClass('modal-dialog');// jQuery("#modalContent").addClass('modal-content');jQuery("span.city_video_big").addClass("city_video").removeClass("city_video_big");// school_overview secondary schools collapsibles// jQuery('[id^=schoolAltRatings], [id^=dataSchool]').collapse('show');// jQuery('[id^=S_Name]').removeClass("DDColl").addClass("DDExp");}// Main school_overview desktop repositionsfunction schoolOverviewReposition() {const contentPanel = jQuery("#content_panel");const schoolContainer = contentPanel.find(".schoolContainer");const schoolRightContentWrap = jQuery(".schoolRightContentWrap");const resultsDetails2_1 = jQuery(".resultsDetails2_1");const ratingWrap = jQuery(".ratingBlockWrap").find(".ratingWrap");const middleWrap = jQuery('.middleWrap');// var boxedBottWrap = jQuery('#boxedBottWrap');// var calcModal = jQuery("#calcModal");// calcModal.appendTo(boxedBottWrap);schoolContainer.each(function() {const that = jQuery(this);that.find(".resultsBand").insertBefore(that.find(schoolRightContentWrap));that.find(".newBadge").prependTo(that.find(".buttonToSchoolWrap"));that.find(".schoolStrenghtsWrap").insertAfter(that.find(".middleBot")); that.find(".schoolDetailsDropWrap ").appendTo(that.find(".middleTop"))// To avoid elements repositioning flashes during page load// that.find(".contentSideImg, .schoolDetailsDropWrap, .buttonToSchoolWrap").show();});schoolRightContentWrap.each(function() {const that = jQuery(this);// https://es.stackoverflow.com/questions/61505/c%C3%B3mo-hacer-para-aplicar-important-de-css-con-jquery-javascriptif (that.find(".schoolDetailsDropWrap")[0]) {// that.find(".schoolDetailsDropWrap")[0].style.setProperty('width', '88%', 'important');that.find(".buttonToSchoolWrap").appendTo(that.find(resultsDetails2_1));}});// resultsDetails2_1.each(function() {// const that = jQuery(this);// that.closest(".middleAndResults").find(".reflowBlocks").insertAfter(that.closest(".middleAndResults").find(".head_yellow_7"));// });middleWrap.each(function(){const that = jQuery(this);that.after(that.find(".resultsDetails2"));// that.find(".school_overview_p_inside_box_results").prependTo(that.find(".schoolDetailsDropWrap"));});ratingWrap.each(function() {const that = jQuery(this);that.next().after(that);});contentPanel.find(".schoolDetailsDropWrap").find(".wrappableDiv").unwrap();// calcModal.removeClass('modal fade').addClass('modalDisplay');jQuery("#decorator_xx10").removeClass('modal-dialog');// jQuery("#modalContent").removeClass('modal-content');jQuery("span.city_video").addClass("city_video_big").removeClass("city_video");// school_overview FACETS onlycontentPanel.find(".wrappableDivFacets").removeClass('collapse').css('height', 'auto');// school_overview secondary schools collapsibles// jQuery('[id^=schoolPicture]').collapse('hide').height('0px');// jQuery('[id^=S_Name]').removeClass("DDExp").addClass("DDColl");} function trimSchoolDescriptions(textLength, removeLink = false) { function trimToWords(text, wordCount) { // Remove line breaks and extra spaces text = text.replace(/\s+/g, ' ').trim(); const words = text.split(' '); if (words.length <= wordCount) { return text; } let trimmed = words.slice(0, wordCount).join(' '); // Remove any non-alphanumeric characters from the end of the trimmed text trimmed = trimmed.replace(/[^a-zA-Z0-9]+$/, ''); return trimmed + ' ...'; } const elements = document.querySelectorAll('.school_overview_p_inside_box_results_inside'); for (let i = 0; i < elements.length; i++) { const originalText = elements[i].textContent || elements[i].innerText; elements[i].textContent = trimToWords(originalText, textLength); } }if (currentSize.width >= 1025) {schoolOverviewReposition(); trimSchoolDescriptions(22);// const bar_flags_new = jQuery("#bar_flags_new").detach();// bar_flags_new.appendTo("#searchFormSmallWrap");} else { trimSchoolDescriptions(12, true); } jQuery('[id^=schoolPicture]').collapse('hide').height('0px');// trigger reflows to be done in mobile mode when resizing from desktop to mobilejQuery(window).on('widthOnlyResizedMobile', mobileResp);// ... and viceversajQuery(window).on('widthOnlyResizedDesktop', function() {// const mainRatingWrap = jQuery(".mainRatingWrap");schoolOverviewReposition();// jQuery(".resultsDetails2_1").each(function() {// const that = jQuery(this);// that.closest(".middleAndResults").find(mainRatingWrap).prependTo(that);// });});/**************************//** Main school reflows **//************************/function allPagesDesktopReflows() {// const bar_flags_new = jQuery("#bar_flags_new").detach();// ALL pages => flags widget// bar_flags_new.appendTo("#searchFormSmallWrap");// ALL pages => "wechat" "whatsapp" "kakao" & "skype"jQuery("#contactBoxSkype").insertAfter("#contactBoxPhones"); // ALL pages => cBox jQuery("#contactBoxChat").insertBefore("#contactBoxTextareaDiv");// ALL PAGES (footer)// ALL pages where we use bootstrap modalsjQuery('.modal-backdrop.fade.in').css('display', 'none');// All pages but UG (header)jQuery("#searchFormSmallWrap").prependTo("#headSearchBar");} // remove placeholder on focus event jQuery("#searchBarMob .search_query, .searchQueryWrap .search_query").on('focus', function() { jQuery(this).removeAttr('placeholder'); });flagsTooltipInit = function() {if (typeof jQuery().tooltip === 'function') {// destroy lang flags tooltip if flags popover is shownlangListPop.on('show.bs.popover', function() {flagsTooltip.tooltip('destroy');});if (currentSize.width <= 1024) {if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}} else {if (!windowMatchObj.mqoh.matches) {// re-init lang flags tooltip when flags popover is hiddenlangListPop.on('hide.bs.popover', function() {jQuery('[data-toggle="tooltipTop"]').tooltip({trigger : 'hover',placement: 'top'});});}if (windowMatchObj.mqoh.matches) {if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');langListPop.off('hide.bs.popover');}}}}}// avoid hiding flags selector if the cBox is overlapping itfunction avoidHidingFlags() {if (windowMatchObj.mqoh.matches) { const contactBoxWrapper = jQuery('#contactBoxWrapper');langListPop.on('show.bs.popover', function () {contactBoxWrapper.css('z-index', '10');});langListPop.one('hide.bs.popover', function () {contactBoxWrapper.css('z-index', '');if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}});flagsTooltip.on('show.bs.tooltip', function () {if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}});} else {langListPop.off('show.bs.popover hidden.bs.popover');flagsTooltipInit();}}avoidHidingFlags();windowMatchObj.mqoh.addListener(avoidHidingFlags);jQuery(window).on('widthOnlyResized', function() {// restart bind and width in case of window resize in order to don't hide magnifying glass icon// jQuery("#search_query").off('focus blur').css('width', '');});if (currentSize.width <= 1024) {destroyFlagToolEtc();}if (currentSize.width >= 1025) {allPagesDesktopReflows(); } // remove heading middle line if 2 lines if (!(jQuery('#school_overview').length && currentSize.width <= 1024)) { const h2Elements = jQuery('h2'); for (let i = 0; i < h2Elements.length; i++) { const el = jQuery(h2Elements[i]); if (el.find('.titleSep').height() > 40) { el.addClass('removeBorderBottom'); } }; }// execute destroy language flags tooltip + mobile searchbar (triggered only on mobile and only on resize from desktop mode)jQuery(window).on('widthOnlyResizedMobile', function() {// const bar_flags_new = jQuery("#bar_flags_new").detach();destroyFlagToolEtc();// bar_flags_new.appendTo(jQuery("#cBoxTabWrap"));jQuery("#contactBoxChat").insertAfter("#contactBoxTextareaDiv");jQuery("#searchFormSmallWrap").insertAfter("#contactBoxChat");if (typeof getLangSuggestion === "function") {getLangSuggestion(0);}reInitPopover('#changeLanguageFlags'); jQuery("#contactBoxSkype").insertBefore("#sendBlockWrap");});// Triggered only on desktop and only on resize from mobile modejQuery(window).on('widthOnlyResizedDesktop', function() {// ALL PAGES => re-init the tooltip if previously destroyed on mobileallPagesDesktopReflows();if (typeof(flagsTooltip.tooltip) === 'function') {// IMPORTANT: .tooltip('destroy') is asynchronous, and immediate creation of another popover fails, while the previous one is being destroyed [same that happens with .popover('destroy') method].// https://stackoverflow.com/questions/27238938/bootstrap-popover-destroy-recreate-works-only-every-second-time#answer-27345242setTimeout(function() {flagsTooltip.tooltip({trigger : 'hover',placement: 'top'});}, 200);}// ALL PAGES => re-init event handler if previously turned off on mobilelangListPop.on('show.bs.popover', function() {// re-init lang flags tooltip when flags popover is hiddenlangListPop.on('hide.bs.popover', function() {setTimeout(function() {flagsTooltip.tooltip({trigger : 'hover',placement: 'top'});}, 200);});});reInitPopover('body');});}); /* CLOSING BIG WINDOW ONLOAD FUNCTION */

The Best French online language courses 2024 Comparison (2024)

References

Top Articles
50 of Grandma's Easiest Dinner Recipes (Ever!)
Peanut Butter Blossoms Cookie Recipe
Costco Bloomfield Hills Gas Price
1401 Rankin Road Suite 400 Houston Tx 77073
Miami Heat Newsnow
Ancient Altar Balthazar
Cool Math Games: Fun, Learning, and the Digital Playground - soflacil
Play Crazy Eights Game Online - Free Card Games - solitairerelax.com
Estragon South End
Charmed Halliwell Family Tree
Yesteryear Autos Slangily
Times Like These by Eden Project
Latest Posts
Tom Brady Shares His 6 Plant-Based Recipes | The Beet
21 Easy and Delicious Savory Pie Recipes
Article information

Author: Jamar Nader

Last Updated:

Views: 6114

Rating: 4.4 / 5 (75 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Jamar Nader

Birthday: 1995-02-28

Address: Apt. 536 6162 Reichel Greens, Port Zackaryside, CT 22682-9804

Phone: +9958384818317

Job: IT Representative

Hobby: Scrapbooking, Hiking, Hunting, Kite flying, Blacksmithing, Video gaming, Foraging

Introduction: My name is Jamar Nader, I am a fine, shiny, colorful, bright, nice, perfect, curious person who loves writing and wants to share my knowledge and understanding with you.