I have built many multilingual Moodle sites over the years. Unfortunately you cannot make a course appear or not appear based on the user's current language. But you can create a multilingual Moodle site and multi-language Moodle course.

First you will need to install the Moodle language packs for each of the languages you want to support. Depending on the theme used, this should display a language selection menu in the Moodle navigation. If it doesn't display a language selection menu, contact the theme's author to have him or her fix it. When a user switches language, Moodle will display it's menus in that language. Don't forget to apply these tags to your site name (front page settings), category name and course names. Note that it does not do the translation for you.

Note that if you use a particular localization of a language such as French Canadian, you will need to install both the French language pack AND the French Canadian language pack. To avoid having them both appear in the menus, you will need to specify the list of languages you want to have appear in the menu.

Next, install and enable the Multi-Language Content (v2) filter Moodle plugin. Be sure to enable it for both Content and Headings. What this will do is give you the ability to tag text using a a plain text {mlang xx} tag so that only the current language text appears. You do not need to know any HTML for this to work.

For example: {mlang XX}content in language XX{mlang}{mlang YY}content in language YY{mlang}{mlang ZZ}content in language ZZ{mlang}

Your {mlang} tags will also need to specify the localized language code if you are using such a language pack. For example: So where French would normally be {mlang fr}Your text in French{mlang}, it would be {mlang fr-ca}Your text in French Canadian{mlang} for French Canadian. {mlang fr_ca}, with an underscore instead of a dash, works too.

As I mentioned, you can't really hide courses in Moodle. However you can create multi-language courses by also wrapping each piece of content (don't forget the course names) in an {mlang} set of tags. Not only will the user see the course in their current language, they will be able to switch language at any time as they make their way through the course.

Another option with Moodle native courses is to make use of the activity restriction option. You can display or hide activities within a course by telling Moodle to only display if the user interface is in a specific language. So you would need to create 4 activities, one in each language, and then restrict which of the 4 displays when the users is viewing the site in English for example. To make this work, you will need to install and activate the Moodle Restriction by Language availability plugin. Note the challenge you may have with this approach is in assessing course completion status since all learners will not end up completing the same activities.

If you are dealing with SCORM packages, it gets much more complex and will be a little different. You can still do it however you will need to build the language selection menu into the SCORM package as well as all of the languages. You may be able to have the default language controlled by Moodle but this may require some additional customization.

Applying these strategies, you end up with a single course that works in any of the languages it supports.

Side note: Using WordPress? You can find information on getting started with WordPress multi-language sites by taking a look at the 9 best translation plugins for WordPress websites and qTranslate-XT

Hope you find this information useful.

Best regards,

Michael Milette