No edit summary |
No edit summary |
||
(20 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
A wiki can be set up to include different language versions | {{DISPLAYTITLE:Multilingual wiki (single wiki)}} | ||
[[File:hallo-cloud.png|alt=word cloud with translations of the greeting "hello"|right|200x200px]] | |||
A wiki can be set up to include different language versions for wiki pages. Wiki administrators have to make some decisions regarding how they want to support each wiki user's language setting in addition to simply providing translated page content. | |||
The following considerations refer to a single-wiki scenario and don't apply if the language versions are maintained in | The following considerations refer to a single-wiki scenario in ''BlueSpice free or pro'' and don't apply if the language versions are maintained in separate wikis. | ||
== Concepts == | == Concepts == | ||
To make a wiki multilingual, | To make a single wiki multilingual, you can: | ||
* Create wiki pages with '''automatically''' '''linked''' '''translation subpages''' | |||
In addition, depending on your wiki setup, it is possible to create: | |||
* multilingual '''navigation links''' | |||
* '''flexible''' '''page lists''' for each language | |||
* '''portal pages''' based on user language | |||
* '''template and form labels''' based on user language | |||
* a multilingual '''category system''' | |||
== Techniques == | |||
[[File:langswitcher.png|alt=globe icon with submenu links to English and French translations|thumb|language switcher|150x150px]] | |||
[[File:usrelanguage-switchlabels.png|alt=Content based on user language settings|thumb|250x250px|Content based on user language ]] | |||
[[File:multilingual-categories.png|alt=Multilingual category tree|thumb|250x250px|Multilingual category tree]]The explanations on this page use the following techniques, which we will look at in more detail: | |||
#'''Automatic language switcher:''' | |||
#*The wiki automatically adds a language switcher to a page that has at least one language subpage.<br /> | |||
#'''User language:''' A simple mechanism to determine which language a user has defined in their personal settings. It provides options to: | |||
#*show or hide content based on the user language | |||
#*swap the entire page content shown to the user | |||
#*customize the main navigation | |||
#*display template and form labels to users based on their user preference. <br /> | |||
#'''Categories:''' A multilingual category system. It is useful for: | |||
#*users that don't speak the "main" language (the content language) of the wiki and, therefore, want to tag pages in another supported language. | |||
[[ | ==A note about MediaWiki translation extensions== | ||
The following information gives you some suggestions for organising a wiki around its multilingual content based on the previously mentioned aspects. It does not consider using MediaWiki extensions like [[mediawikiwiki:Extension:Translate|Translate]] or the [[mediawikiwiki:MediaWiki_Language_Extension_Bundle|MW Language Extension Bundle]] which can be installed in multlingual wikis to enable a section-by-section translation of wiki pages. | |||
== | If most of your wiki content needs consistently accurate translations, these extensions can be valuable. Such a focus on translation, however, requires an understanding of how this mechanism technically works and might hinder the spontaneous contribution to the wiki by a broad user base. In addition, these extensions are not bundled with BlueSpice and require additional administrative effort during wiki updates or upgrades. | ||
Let's take a page called '' | |||
File:language-subpage-de.png|alt=German content version with user language preference English.|German content version with user language preference English. | Here, we look at techniques that support multilingual content in an easy way. | ||
== Considerations before using the subpages approach == | |||
Many wikis use the approach of creating language subpages of a page that is written in the wiki's main language (=content language defined during wiki installation). This is a great mechanism if we assume that the majority of content is available in the wiki's main language first. This is often the case in English wikis. But what if there is no "main" language in a wiki - when the language(s) of many contributors do not match this content language of the wiki? | |||
The solution in this case is often to maintain separate wikis for each language "community" and then connect the wikis via so called [[Manual:Extension/BlueSpiceInterWikiLinks|Interwiki links]]. | |||
=== Interwiki links used within a single wiki === | |||
It is possible to think of each language as independent and to allow users to create pages in their preferred language. A German speaking user could create a page "Urlaubsregelung" in an English wiki. If another user creates a "matching" page "Vacation policy" in the wiki, these two pages can be connected manually by adding interlanguage links to the page. For this purpose, wiki administrators can create the needed interwiki links. The language switcher configuration can then be switched from suppporting language subpages to consider Interwiki links instead. A combination of both subpages and Interwiki links is not supported. | |||
==Creating wiki pages with translated subpages== | |||
Let's take a page called ''Vacation policy'' in a wiki with English as its content language and create a German language version. | |||
{{Messagebox|boxtype=note|icon=|Note text=When working with translation subpages, it is important to know the [https://www.mediawiki.org/wiki/Manual:Language content language] of the wiki. It is the language in which the wiki has been installed. To find it out, you can add the magic word <nowiki>{{CONTENTLANGUAGE}}</nowiki> to the source view of any wiki page and save it. The page will then display the language code.|bgcolor=}} | |||
To create a language version for the main language (=content language), a subpage with the [[wikipedia:List_of_ISO_639-1_codes|ISO-639-1]] language code as subpage name is created. This means that for the page ''Vacation policy'' in an English wiki, you need to create the subpage ''Vacation policy/de'' for the German translation. | |||
As you can see in the screenshots below, the page content is always shown in the context of the user language preferences of each user. This means that the user interface elements do not necessarily correspond to the translated language. But since the user decided to use this language setting, it does not negatively affect this user, but actually supports them when navigating the wiki. | |||
<gallery widths="500" heights="350"> | |||
File:language-subpage-de.png|alt=German content version with user language preference English.|German content version (1) with user language preference English (2). | |||
File:language-subpage-de-uselang-de.png|alt=German content version with user language preference German.|German content version with user language preference German. | File:language-subpage-de-uselang-de.png|alt=German content version with user language preference German.|German content version with user language preference German. | ||
</gallery> | </gallery> | ||
== Connecting unrelated wiki pages instead of subpages == | |||
If you want to relate pages in the wiki as language equivalents, the language switcher [[Reference:BlueSpiceDiscovery#Configuration|needs to be configured on the server]] to consider interwiki links instead of subpages. | |||
If you need a way to connect German and English pages on the same wiki, you need to set up the same interwiki link with a different prefix on the page ''Special:InterWikiLinks''. | |||
[[File:interwikilinks-edit.png|alt=edit dialog for a interwiki link with the prefix "de"|center|thumb|450x450px|Setting up an interwiki link]] | |||
The URL is always the same, the path of your wiki and the placeholder <code>$1</code> for the pagename. The prefix reflects the language: ''de''=German, ''en''=English, ''fr''=French, and so on. | |||
You can then connect the page "Urlaubsregelung" to the English page "Vacation policy" by adding the following interwiki link to the wikisource of the page "Urlaubsregelung":<syntaxhighlight lang="text"> | |||
[[en:Vacation policy]] | |||
</syntaxhighlight> | |||
== Creating portal pages based on user language settings == | |||
Portal pages are pages that serve as entry points to different topics or areas in the portal, often considering the needs of specific user groups. A typical example is the main page of the wiki, which should give users a high-level orientation in the wiki. A portal page is a good place to take the language needs of different users into account. | |||
Here, we can take two different approaches: | |||
#Show the '''same page to all users''', but include '''some content''' that targets specific user languages. | |||
#Show completely '''separate content''' to users based on their user language. | |||
===What is the user language?=== | |||
Wiki users can change their own language setting in the user preferences: | |||
[[File:userlanguage.png|alt=User language preference|center|thumb|550x550px|User language preference]] | |||
Depending on this setting, users then see the user interface elements in that language as we have seen in [[Multilingual wiki#Creating wiki pages with translated subpages|previous screenshots]]. This applies to interface elements that already have translated system messages. | |||
To provide additional support for this setting, we can include checks on wiki pages that determine the user language and serve up additional or alternative information as needed. | |||
===Preparing the user language check=== | |||
Checking for the user language requires that we create a system message for this purpose. This is easy to do, but needs to be done by users in the role ''admin'' or ''structuremanager.'' | |||
To create a system message for the user language: | |||
#'''Create''' the page ''MediaWiki:lang w''ith the content being the language code of the content language of your wiki. If you are not sure in what language your wiki was installed, you can add the magic word <nowiki>{{CONTENTLANGUAGE}}</nowiki> to the source of any wiki page and look at its output. If you have an English wiki, you need to add "en" as the content to this page. If your wiki is German, add "de" instead.[[File:message key-lang.png|alt=Page MediaWiki:Lang|center|thumb|650x650px|Page MediaWiki:Lang]] | |||
#'''Create''' subpages to this page for the user languages you want to support. For example in an English wiki: | |||
#*MediaWiki:Lang/de | |||
#*MediaWiki:Lang/fr | |||
Now we have a mechanism to detect the user language. By checking for the value of the "[[mediawikiwiki:Help:Magic_words#Localization|magic word]]" <nowiki>{{int:lang}}</nowiki> , we can use it in many different scenarios. | |||
===Displaying additional content=== | |||
To show content on a page only to users with a specific language setting — for example, German — we can add the following check:<syntaxhighlight lang="text"> | |||
{{#ifeq: {{int:lang}}|de|show this content|}} | |||
</syntaxhighlight> | |||
===Switching to different page content=== | |||
To show entirely different content to users with different language settings, you can prepare different pages and then serve them up as needed. As an example we take the homepage of the wiki. | |||
To display different homepage content based on user language in an English wiki, where the homepage is called ''Main Page'': | |||
#Create a subpage for each language you want to support, e.g. | |||
## Main Page/en | |||
##Main Page/de | |||
## Main Page/fr | |||
#On the page Main Page, add the following switch:<syntaxhighlight lang="text"> | |||
{{#switch: {{int:lang}}|de={{:Main Page/de}}|fr={{:Main Page/fr}}|{{:Main Page/en}} }} | |||
</syntaxhighlight>Users with language setting "de" will see the content of page ''Main Page/de'', users with "fr" language setting the page ''Main Page/fr'', all other users get the page Main ''Page/en''. | |||
===Switching labels=== | |||
To show different labels or short text snippets directly on a page, we can also use the switch function:<syntaxhighlight lang="text"> | |||
{{#switch:{{int:lang}}|de=Überschrift 2|en=Heading 2}} | |||
</syntaxhighlight>To summarize, the following main page can be accomplished in two different ways: | |||
#By creating separate subpages for each user language and then transcluding them with a user language check on the actual Main Page. | |||
#By loading the actual Main Page and then building the language checks into the page itself. The following picture shows examples of: | |||
#*(1), (2) Switching headings | |||
#*(3) Displaying query results based on the tracked language from the language switcher template (e.g., <nowiki>[[Languages/tracklang::en]]</nowiki>) | |||
#*(4) Switching display labels in templates (this can also be applied to page forms) | |||
#*(5) Switching image captions | |||
[[File:usrelanguage-switchlabels.png|alt=Content based on user language settings|center|thumb|750x750px|Content based on user language settings]] | |||
===Switching template and form labels=== | |||
As the previous screenshot shows, labels in templates (and forms) can also be shown based on user language. You can simply add the switch function directly in the template. The template ''Template:Contactinfo'' collects street, zip and city info:<syntaxhighlight lang="text"> | |||
{| class="wikitable" | |||
! {{#switch:{{int:lang}}|en=Street|de=Straße}} | |||
| {{{street|}}} | |||
|- | |||
! {{#switch:{{int:lang}}|en=Zip|de=PLZ}} | |||
| {{{zip|}}} | |||
|- | |||
! {{#switch:{{int:lang}}|en=City|de=Stadt}} | |||
| {{{city|}}} | |||
|} | |||
</syntaxhighlight>It displays the different labels as needed:<gallery widths="180" heights="100"> | |||
File:uselang-template-en.png|alt=English labels|English labels | |||
File:uselang-template-de.png|alt=German labels|German labels | |||
</gallery> | |||
==Multilingual navigation== | |||
Currently, there is no easy mechanism to create multilingual navigation menus, such as the main navigation or the custom menu. More support should be coming in one of the next minor releases of BlueSpice (4.2 or 4.3). In the meantime, you can create [[Manual:Extension/BlueSpiceDiscovery/Main navigation/Language support|individual links based on a user's language settings]]. | |||
==Multilingual categories== | |||
An important aspect of organizing content is a well-designed category system for your wiki. By tagging your content, you support both the search functionality and the possibility of creating context-based page lists in all kinds of variations. | |||
One way to accomplish this is to work with a prefix system that associates the different language categories. | |||
For example, for the category Application, you would use (in an English wiki) the English category ''APP Application'' and the German category ''APPde Anwendung''. They would have a subcategory APP SAP (English subcategory) and APPde SAP (German subcategory). | |||
= | [[File:multilingual-categories.png|alt=Multilingual category tree|center|thumb|550x550px|Multilingual category tree]] | ||
===Creating a root category first=== | |||
It is also a good idea to start your category system with a single root category: | |||
[[File:rootcategory.png|alt=Starting with a root category|center|thumb|250x250px|Starting with a root category]] | |||
This allows you to later manage your category system without entangling it with other unrelated categories that might be created by users. Besides your category system, other types of categories might coexist: | |||
*[[mediawikiwiki:Help:Categories#Hidden_categories|Hidden categories]] | |||
*[[mediawikiwiki:Help:Tracking_categories|Tracking categories]] | |||
*Informal tagging-categories created by users "on-the-go" | |||
===Querying pages by language categories=== | |||
{{#ask: | To find the pages in a particular language and in a particular category, we can now use our multilingual category system. For example, we can show all pages in the English category ''DOC Process description:''<syntaxhighlight lang="text"> | ||
[[: | {{#ask: [[Category:DOC Process description]] [[Modification date::+]] | ||
|format= | |format=Category | ||
}} | }} | ||
</syntaxhighlight> | |||
{{Messagebox|boxtype=note|icon=|Note text=To avoid deleted pages showing up in your results list, you can add the property <nowiki>[[Modification date::+]]</nowiki> to any of your queries.|bgcolor=}} | |||
[[de:Mehrsprachiges Wiki]] | |||
[[Category: | [[Category:Translation]] |
Latest revision as of 16:15, 19 December 2023
A wiki can be set up to include different language versions for wiki pages. Wiki administrators have to make some decisions regarding how they want to support each wiki user's language setting in addition to simply providing translated page content.
The following considerations refer to a single-wiki scenario in BlueSpice free or pro and don't apply if the language versions are maintained in separate wikis.
Concepts
To make a single wiki multilingual, you can:
- Create wiki pages with automatically linked translation subpages
In addition, depending on your wiki setup, it is possible to create:
- multilingual navigation links
- flexible page lists for each language
- portal pages based on user language
- template and form labels based on user language
- a multilingual category system
Techniques
The explanations on this page use the following techniques, which we will look at in more detail:
- Automatic language switcher:
- The wiki automatically adds a language switcher to a page that has at least one language subpage.
- The wiki automatically adds a language switcher to a page that has at least one language subpage.
- User language: A simple mechanism to determine which language a user has defined in their personal settings. It provides options to:
- show or hide content based on the user language
- swap the entire page content shown to the user
- customize the main navigation
- display template and form labels to users based on their user preference.
- Categories: A multilingual category system. It is useful for:
- users that don't speak the "main" language (the content language) of the wiki and, therefore, want to tag pages in another supported language.
A note about MediaWiki translation extensions
The following information gives you some suggestions for organising a wiki around its multilingual content based on the previously mentioned aspects. It does not consider using MediaWiki extensions like Translate or the MW Language Extension Bundle which can be installed in multlingual wikis to enable a section-by-section translation of wiki pages.
If most of your wiki content needs consistently accurate translations, these extensions can be valuable. Such a focus on translation, however, requires an understanding of how this mechanism technically works and might hinder the spontaneous contribution to the wiki by a broad user base. In addition, these extensions are not bundled with BlueSpice and require additional administrative effort during wiki updates or upgrades.
Here, we look at techniques that support multilingual content in an easy way.
Considerations before using the subpages approach
Many wikis use the approach of creating language subpages of a page that is written in the wiki's main language (=content language defined during wiki installation). This is a great mechanism if we assume that the majority of content is available in the wiki's main language first. This is often the case in English wikis. But what if there is no "main" language in a wiki - when the language(s) of many contributors do not match this content language of the wiki?
The solution in this case is often to maintain separate wikis for each language "community" and then connect the wikis via so called Interwiki links.
Interwiki links used within a single wiki
It is possible to think of each language as independent and to allow users to create pages in their preferred language. A German speaking user could create a page "Urlaubsregelung" in an English wiki. If another user creates a "matching" page "Vacation policy" in the wiki, these two pages can be connected manually by adding interlanguage links to the page. For this purpose, wiki administrators can create the needed interwiki links. The language switcher configuration can then be switched from suppporting language subpages to consider Interwiki links instead. A combination of both subpages and Interwiki links is not supported.
Creating wiki pages with translated subpages
Let's take a page called Vacation policy in a wiki with English as its content language and create a German language version.
To create a language version for the main language (=content language), a subpage with the ISO-639-1 language code as subpage name is created. This means that for the page Vacation policy in an English wiki, you need to create the subpage Vacation policy/de for the German translation.
As you can see in the screenshots below, the page content is always shown in the context of the user language preferences of each user. This means that the user interface elements do not necessarily correspond to the translated language. But since the user decided to use this language setting, it does not negatively affect this user, but actually supports them when navigating the wiki.
If you want to relate pages in the wiki as language equivalents, the language switcher needs to be configured on the server to consider interwiki links instead of subpages.
If you need a way to connect German and English pages on the same wiki, you need to set up the same interwiki link with a different prefix on the page Special:InterWikiLinks.
The URL is always the same, the path of your wiki and the placeholder $1
for the pagename. The prefix reflects the language: de=German, en=English, fr=French, and so on.
You can then connect the page "Urlaubsregelung" to the English page "Vacation policy" by adding the following interwiki link to the wikisource of the page "Urlaubsregelung":
[[en:Vacation policy]]
Creating portal pages based on user language settings
Portal pages are pages that serve as entry points to different topics or areas in the portal, often considering the needs of specific user groups. A typical example is the main page of the wiki, which should give users a high-level orientation in the wiki. A portal page is a good place to take the language needs of different users into account.
Here, we can take two different approaches:
- Show the same page to all users, but include some content that targets specific user languages.
- Show completely separate content to users based on their user language.
What is the user language?
Wiki users can change their own language setting in the user preferences:
Depending on this setting, users then see the user interface elements in that language as we have seen in previous screenshots. This applies to interface elements that already have translated system messages.
To provide additional support for this setting, we can include checks on wiki pages that determine the user language and serve up additional or alternative information as needed.
Preparing the user language check
Checking for the user language requires that we create a system message for this purpose. This is easy to do, but needs to be done by users in the role admin or structuremanager.
To create a system message for the user language:
- Create the page MediaWiki:lang with the content being the language code of the content language of your wiki. If you are not sure in what language your wiki was installed, you can add the magic word {{CONTENTLANGUAGE}} to the source of any wiki page and look at its output. If you have an English wiki, you need to add "en" as the content to this page. If your wiki is German, add "de" instead.
- Create subpages to this page for the user languages you want to support. For example in an English wiki:
- MediaWiki:Lang/de
- MediaWiki:Lang/fr
Now we have a mechanism to detect the user language. By checking for the value of the "magic word" {{int:lang}} , we can use it in many different scenarios.
Displaying additional content
To show content on a page only to users with a specific language setting — for example, German — we can add the following check:
{{#ifeq: {{int:lang}}|de|show this content|}}
Switching to different page content
To show entirely different content to users with different language settings, you can prepare different pages and then serve them up as needed. As an example we take the homepage of the wiki.
To display different homepage content based on user language in an English wiki, where the homepage is called Main Page:
- Create a subpage for each language you want to support, e.g.
- Main Page/en
- Main Page/de
- Main Page/fr
- On the page Main Page, add the following switch:Users with language setting "de" will see the content of page Main Page/de, users with "fr" language setting the page Main Page/fr, all other users get the page Main Page/en.
{{#switch: {{int:lang}}|de={{:Main Page/de}}|fr={{:Main Page/fr}}|{{:Main Page/en}} }}
Switching labels
To show different labels or short text snippets directly on a page, we can also use the switch function:
{{#switch:{{int:lang}}|de=Überschrift 2|en=Heading 2}}
To summarize, the following main page can be accomplished in two different ways:
- By creating separate subpages for each user language and then transcluding them with a user language check on the actual Main Page.
- By loading the actual Main Page and then building the language checks into the page itself. The following picture shows examples of:
- (1), (2) Switching headings
- (3) Displaying query results based on the tracked language from the language switcher template (e.g., [[Languages/tracklang::en]])
- (4) Switching display labels in templates (this can also be applied to page forms)
- (5) Switching image captions
Switching template and form labels
As the previous screenshot shows, labels in templates (and forms) can also be shown based on user language. You can simply add the switch function directly in the template. The template Template:Contactinfo collects street, zip and city info:
{| class="wikitable"
! {{#switch:{{int:lang}}|en=Street|de=Straße}}
| {{{street|}}}
|-
! {{#switch:{{int:lang}}|en=Zip|de=PLZ}}
| {{{zip|}}}
|-
! {{#switch:{{int:lang}}|en=City|de=Stadt}}
| {{{city|}}}
|}
It displays the different labels as needed:
Currently, there is no easy mechanism to create multilingual navigation menus, such as the main navigation or the custom menu. More support should be coming in one of the next minor releases of BlueSpice (4.2 or 4.3). In the meantime, you can create individual links based on a user's language settings.
Multilingual categories
An important aspect of organizing content is a well-designed category system for your wiki. By tagging your content, you support both the search functionality and the possibility of creating context-based page lists in all kinds of variations.
One way to accomplish this is to work with a prefix system that associates the different language categories.
For example, for the category Application, you would use (in an English wiki) the English category APP Application and the German category APPde Anwendung. They would have a subcategory APP SAP (English subcategory) and APPde SAP (German subcategory).
Creating a root category first
It is also a good idea to start your category system with a single root category:
This allows you to later manage your category system without entangling it with other unrelated categories that might be created by users. Besides your category system, other types of categories might coexist:
- Hidden categories
- Tracking categories
- Informal tagging-categories created by users "on-the-go"
Querying pages by language categories
To find the pages in a particular language and in a particular category, we can now use our multilingual category system. For example, we can show all pages in the English category DOC Process description:
{{#ask: [[Category:DOC Process description]] [[Modification date::+]]
|format=Category
}}