Note: You are currently viewing documentation for Moodle 3.3. Up-to-date documentation for the latest stable version of Moodle is probably available here: Multi-language content filter.

Multi-language content filter: Difference between revisions

From MoodleDocs
(Started to put in more headings)
(→‎Common problems: Headings aren't displaying correctly)
 
(85 intermediate revisions by 13 users not shown)
Line 1: Line 1:
Moodle will allow different resources to appear to users based upon their language. This is a filter called Multi language content. This page goes into details of several ways of displaying resources to users based on language.
{{Filters}}
==Displaying text in multiple languages==
The multi-language content filter enables resources to be created in multiple languages. When turned on, it looks for <nowiki><span lang="xx" class="multilang"></nowiki> tags which indicate that a text contains multiple languages. Then it selects and outputs the text in the user's language (as set in their browser or in their preferences).


This is the information that was in [[Filters_%28administrator%29]].
==Enabling the multi-language content filter==


== Overview multi language ==
An admin can enable the multi-language content filter as follows:


The Multi-language content filter enables resources to be created in multiple languages. When turned on, it looks for <lang> tags which indicate that a text contains multiple languages. Then it selects and outputs the best language for the current user. The language of the resource will change when the user changes their selected Moodle language.  
# Go to ''Site administration > Plugins > Filters > Manage filters'' and in the dropdown menu for multi-language content select 'On'.
# If headings are to be shown in multiple languages too, select 'Content and headings' in the 'Apply to' column. Note that this may affect site performance.


== How to use ==
== How to use in a course ==
To use this feature first create your contents in multiple languages (in the same resource). Then enclose each language block in the following tags:


      <nowiki><span lang="XX">your_content_here</span>
To use this feature first create your content in multiple languages (in the same resource). Then enclose each language block (aka multilang block) in the following tags:
      <span lang="YY">your_content_in_other_language_here</span>
</nowiki>


It is essential to be in the "code" editing (press <nowiki>[<>]</nowiki> in the HTML editor), when you enter these tags for them to work.
      <nowiki><span lang="XX" class="multilang">your_content_here</span>
      <span lang="YY" class="multilang">your_content_in_other_language_here</span></nowiki>


Even the HTML tagging
It is essential to be in '''the code editing mode''' (press <nowiki>[<>]</nowiki> in the HTML editor), when you enter these tags for them to work. Only spaces, tabs and enters can be used between the individual languages in the multilang block.
      <nowiki><lang lang="XX">your_content_here</lang>
      <lang lang="YY">your_content_in_other_language_here</lang>
</nowiki>
works, but may be unsupported from 1.7.
      <nowiki><lang="XX">your_content_here</lang>
    <lang="YY">your_content_in_other_language_here</lang>
</nowiki>
does NOT work.


Note: If your site uses a child language pack (see [[Language packs]] for the list), then the first span tag must be the parent language. Otherwise, when a user using the child language views the text, it will not be in the correct language for them (as reported in MDL-55197). For example, if your site uses en_us then the en span tag (as parent language) must be first i.e.


To be able to change even resource titles and summaries, you must chose "all strings" in the adminstration choices.
  <nowiki><span lang="en" class="multilang">your_content_in English</span>
  <nowiki> <span lang="en">Matematically</span> <span lang="sv">Matematiskt (svenska)</span></nowiki>
      <span lang="de" class="multilang">your_content_in_German_here</span></nowiki>
would function as English or Swedish title.


It doesn't seem to work for course titles (neither long nor short version).
==How to use for assignment submission agreements==


In the course summary:
#With the filter enabled, go to ''Site administration > Plugins > Activity modules > Assignment > Assignment settings.
#In the submission statement, add (for example)


<nowiki><span lang="en">Growth is often a major concern in planning society.
      <nowiki><span lang="en" class="multilang">This assignment is my own work, except where I have acknowledged the use of the works of other people.</span>
How can one avoid superficial conclusions? <br>
<span lang="fr" class="multilang">Ce devoir est le fruit de mon travail personnel, sauf aux endroits où l'utilisation d'oeuvre d'autres auteurs est clairement indiquée.</span> </nowiki>
(Exists in Swedish too. Finns på svenska också)</span>
<span lang="sv">Tillväxt är ofta använt i samhällsdebatten.  
Hur kan man undvika ytliga slutsatser?
(Finns på engelska också. Exists in English too.)
<br /></span> </nowiki>


Can show in the chosen language (and point out that the other language is there).
== How it works internally ==


That the filter works on multilanguage blocks is important, see forum: http://moodle.org/mod/forum/discuss.php?d=51603 :
# Filter first looks for ''multilang blocks'' in the text
From which this is copied (and ought to be shortened):
# For each multilang block:
<nowiki>
#* If there are texts in the currently active language, print them
... how the multilang filter works:
#* Else, if there exists texts in the current parent language, print them
#* Else, print the first language found in the text
# Text outside of multilang blocks will be shown always


1) First of all it looks for multilang Blocks.
== Common problems ==
One Multilang block of text is defined as one group of <span lang="XX">
tags together, without anything between them.


2) After this detection of Blocks, for each of them, Moodle selects
# The multi-lang filter is not enabled. It can be enabled in 'Manage filters' in the Site administration'.
the best language for the user displaying the info, showing its info
# Headings aren't displaying correctly - the multi-lang filter should be set to apply to content and headings in 'Manage filters' in the Site administration'.
and discarding the rest of lang tags in the block.
# Extra characters between language span tags - editor might add <nowiki><br /></nowiki> or other tags, please review the html in source view
# If the course setting is "force" some language, you won't be able to change the displayed language.
# Extra spaces in language span tag
# The multi-lang filter does not work with the course short name! A course's short name is meant as a unique course identifier, so it does not use the multi-lang filter.


So, applying this behaviour to the example you wrote above, we have:
==The 'Restriction by language' additional plugin==
[[File:Restriction by language.png|thumb|Restriction by language]]
Language filters are great, but sometimes they can make your resources and activities very complex.


1) Moodle looks for Blocks and it finds TWO blocks:
The [https://moodle.org/plugins/view.php?plugin=availability_language Restriction by language availability condition] is an additional plugin that makes it easy to show an English resource only to English users and an activity in French only to French speaking students.


Block A: <span lang="de">von links</span>
==The Multi-Language Content (v2) additional plugin and Multi-Language Content text editor plugins==
Block B:<span lang="en"><span="en"><font size="3"> </font></span>from the left</span>
There is also an alternative multi-language content filter available called [https://moodle.org/plugins/filter_multilang2 Multi-language Content (v2)]. This filter uses very simple non-HTML tags to mark multi-language blocks (makes it easier to create multi-language content), and can be used together with the [https://moodle.org/plugins/atto_multilang2 Multi-Language Content Atto plugin] or the [https://github.com/iarenaza/moodle-tinymce_moodlelang2 Multi-Language Content TinyMCE plugin] to make it even easier to create multi-language content directly on the text editor without using the HTML view mode.


2) For each block, Moodle display the better language. As Both blocks
==The Multi-Lingual Content additional plugin==
only contain ONE lang tag, it's returned, so results are:
[https://moodle.org/plugins/filter_multilangsecond This filter] is a more flexible version of multilang filter. One of three possible choices can be selected by the filter admin setting: HTML syntax, Non HTML syntax or Both. If the non html syntax is chosen language block looks like: {mlang en}English{mlang}{mlang bg}Bulgarian{mlang}. In case of Html syntax, language block is a sequence of identical html tags with lang="XX" attributes span or div or any other.


For Block A: von links
==Any questions?==
For Block B: <span="en"><font size="3"> </font></span>from the left


Then obviously, in one web page, those results are showed as:
Please post in the [https://moodle.org/mod/forum/view.php?id=43 Languages forum] on moodle.org.


von links
==See also==
from the left


The key concept here is the Block of lang. Once you get it, everything is easily to understand.  
*[[Language]]
*Custom menu items in [[Theme settings]]
*[https://moodle.org/mod/forum/discuss.php?d=320980 Translation of MOOC] forum discussion and solution
* [https://moodle.org/mod/forum/discuss.php?d=356318 language dropdown not displayed - Boots logon page] forum thread


Also note that the HTMLEditor seems to introduce an excess of "noisy" tags
[[Category:Language]]
under some circumstances and, if it does so between lang tags, it will be,
in fact, breaking your blocks of langs! It's always recommended to check the
final HTML generated by the HTML Editor in order to verify that the lang tags
(and their grouping together is conforming blocks of langs) are properly
written.</nowiki>


If I were to want to translate a word or phrase to a chosen language in an English text:
[[de:Mehrsprachiger Inhalt]]
 
[[es:Filtro de contenido multi-idioma]]
<nowiki>If I want to include an explanation <span lang="en"> </span>
[[fr:Contenu multilingue]]
<span lang="sv">(sv: förklaring)</span> in a running text can I do it?
[[ja:多言語シンタックス]]
<br />
<br /><span lang="en">If I want to include an explanation in a running text
can I do it? </span>
<span lang="sv">If I want to include an explanation (sv: förklaring) in a
running text can I do it?</span></nowiki>
 
would both work, but not:
 
<nowiki>If I want to include an explanation <span lang="en"></span>
<span lang="sv">(sv: förklaring)</span> in a running text can I do it?
<br />If I want to include an explanation <span lang="sv">(sv: förklaring)</span>
in a running text can I do it?<br /></nowiki>
which would show the Swedish even if English was the chosen language. NOTE the "span lang=en" must contain something, at least a space.
 
== See Also ==
[[Filters_%28administrator%29]]
 
Forum discussion  http://moodle.org/mod/forum/discuss.php?d=51603

Latest revision as of 11:57, 8 September 2017

Displaying text in multiple languages

The multi-language content filter enables resources to be created in multiple languages. When turned on, it looks for <span lang="xx" class="multilang"> tags which indicate that a text contains multiple languages. Then it selects and outputs the text in the user's language (as set in their browser or in their preferences).

Enabling the multi-language content filter

An admin can enable the multi-language content filter as follows:

  1. Go to Site administration > Plugins > Filters > Manage filters and in the dropdown menu for multi-language content select 'On'.
  2. If headings are to be shown in multiple languages too, select 'Content and headings' in the 'Apply to' column. Note that this may affect site performance.

How to use in a course

To use this feature first create your content in multiple languages (in the same resource). Then enclose each language block (aka multilang block) in the following tags:

      <span lang="XX" class="multilang">your_content_here</span>
      <span lang="YY" class="multilang">your_content_in_other_language_here</span>

It is essential to be in the code editing mode (press [<>] in the HTML editor), when you enter these tags for them to work. Only spaces, tabs and enters can be used between the individual languages in the multilang block.

Note: If your site uses a child language pack (see Language packs for the list), then the first span tag must be the parent language. Otherwise, when a user using the child language views the text, it will not be in the correct language for them (as reported in MDL-55197). For example, if your site uses en_us then the en span tag (as parent language) must be first i.e.

<span lang="en" class="multilang">your_content_in English</span>
      <span lang="de" class="multilang">your_content_in_German_here</span>

How to use for assignment submission agreements

  1. With the filter enabled, go to Site administration > Plugins > Activity modules > Assignment > Assignment settings.
  2. In the submission statement, add (for example)
      <span lang="en" class="multilang">This assignment is my own work, except where I have acknowledged the use of the works of other people.</span>
<span lang="fr" class="multilang">Ce devoir est le fruit de mon travail personnel, sauf aux endroits où l'utilisation d'oeuvre d'autres auteurs est clairement indiquée.</span> 

How it works internally

  1. Filter first looks for multilang blocks in the text
  2. For each multilang block:
    • If there are texts in the currently active language, print them
    • Else, if there exists texts in the current parent language, print them
    • Else, print the first language found in the text
  3. Text outside of multilang blocks will be shown always

Common problems

  1. The multi-lang filter is not enabled. It can be enabled in 'Manage filters' in the Site administration'.
  2. Headings aren't displaying correctly - the multi-lang filter should be set to apply to content and headings in 'Manage filters' in the Site administration'.
  3. Extra characters between language span tags - editor might add <br /> or other tags, please review the html in source view
  4. If the course setting is "force" some language, you won't be able to change the displayed language.
  5. Extra spaces in language span tag
  6. The multi-lang filter does not work with the course short name! A course's short name is meant as a unique course identifier, so it does not use the multi-lang filter.

The 'Restriction by language' additional plugin

Restriction by language

Language filters are great, but sometimes they can make your resources and activities very complex.

The Restriction by language availability condition is an additional plugin that makes it easy to show an English resource only to English users and an activity in French only to French speaking students.

The Multi-Language Content (v2) additional plugin and Multi-Language Content text editor plugins

There is also an alternative multi-language content filter available called Multi-language Content (v2). This filter uses very simple non-HTML tags to mark multi-language blocks (makes it easier to create multi-language content), and can be used together with the Multi-Language Content Atto plugin or the Multi-Language Content TinyMCE plugin to make it even easier to create multi-language content directly on the text editor without using the HTML view mode.

The Multi-Lingual Content additional plugin

This filter is a more flexible version of multilang filter. One of three possible choices can be selected by the filter admin setting: HTML syntax, Non HTML syntax or Both. If the non html syntax is chosen language block looks like: {mlang en}English{mlang}{mlang bg}Bulgarian{mlang}. In case of Html syntax, language block is a sequence of identical html tags with lang="XX" attributes span or div or any other.

Any questions?

Please post in the Languages forum on moodle.org.

See also