mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-08-26 12:46:08 +00:00
mediawiki: Allow setting site language code
Closes: #2137 Signed-off-by: nbenedek <contact@nbenedek.me> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
92aff3e63c
commit
f88f37c80e
@ -14,7 +14,7 @@ from plinth.modules.backups.components import BackupRestore
|
||||
from plinth.modules.firewall.components import Firewall
|
||||
from plinth.package import Packages
|
||||
|
||||
from . import manifest, privileged
|
||||
from . import manifest, privileged, forms
|
||||
|
||||
_description = [
|
||||
_('MediaWiki is the wiki engine that powers Wikipedia and other WikiMedia '
|
||||
@ -146,3 +146,14 @@ def set_server_url(domain):
|
||||
def get_site_name():
|
||||
"""Return the value of MediaWiki's site name."""
|
||||
return _get_config_value('$wgSitename') or 'Wiki'
|
||||
|
||||
|
||||
def get_default_language():
|
||||
"""Return the value of MediaWiki's default language"""
|
||||
default_lang_key = _get_config_value('$wgLanguageCode')
|
||||
language_choices = forms.get_languages()
|
||||
for code, name in language_choices:
|
||||
if code == default_lang_key:
|
||||
return code
|
||||
|
||||
return None
|
||||
|
||||
@ -45,6 +45,9 @@ $wgServer = "https://freedombox.local";
|
||||
# Site Name
|
||||
$wgSitename = "Wiki";
|
||||
|
||||
# Default language
|
||||
$wgLanguageCode = "en";
|
||||
|
||||
# Enable default extensions
|
||||
wfLoadExtension( 'Cite' );
|
||||
wfLoadExtension( 'Interwiki' );
|
||||
|
||||
@ -4,6 +4,7 @@ FreedomBox app for configuring MediaWiki.
|
||||
"""
|
||||
|
||||
import pathlib
|
||||
import re
|
||||
|
||||
from django import forms
|
||||
from django.core import validators
|
||||
@ -20,6 +21,17 @@ def get_skins():
|
||||
if skin.is_dir()]
|
||||
|
||||
|
||||
def get_languages():
|
||||
"""Return a list of available languages as choice field values."""
|
||||
with open('/var/lib/mediawiki/includes/languages/data/Names.php',
|
||||
'r') as lang_file:
|
||||
content = lang_file.read()
|
||||
matches = re.findall(r"'([a-z_-]+)' => '(.+)', # .+", content)
|
||||
language_choices = [(code, name) for code, name in matches]
|
||||
|
||||
return language_choices
|
||||
|
||||
|
||||
class MediaWikiForm(forms.Form): # pylint: disable=W0232
|
||||
"""MediaWiki configuration form."""
|
||||
password = forms.CharField(
|
||||
@ -58,3 +70,10 @@ class MediaWikiForm(forms.Form): # pylint: disable=W0232
|
||||
help_text=_('Choose a default skin for your MediaWiki installation. '
|
||||
'Users have the option to select their preferred skin.'),
|
||||
choices=get_skins)
|
||||
|
||||
default_lang = forms.ChoiceField(
|
||||
label=_('Default Language'), required=False,
|
||||
help_text=_('Choose a default language for your MediaWiki '
|
||||
'installation. Users have the option to select '
|
||||
'their preferred language.'),
|
||||
choices=get_languages)
|
||||
|
||||
@ -205,3 +205,18 @@ def set_server_url(server_url: str):
|
||||
def set_site_name(site_name: str):
|
||||
"""Set the value of $wgSitename for this MediaWiki server."""
|
||||
_update_setting('$wgSitename', f'$wgSitename = "{site_name}";\n')
|
||||
|
||||
|
||||
@privileged
|
||||
def set_default_language(language: str):
|
||||
"""Set the value of $wgLanguageCode for this MediaWiki server."""
|
||||
_update_setting('$wgLanguageCode ', f'$wgLanguageCode = "{language}";\n')
|
||||
# In MediaWiki 1.8 or older, if you change this after installation, you
|
||||
# should run the maintenance/rebuildmessages.php script to rebuild the
|
||||
# user interface messages (MediaWiki namespace). Otherwise, you will not
|
||||
# see the interface in the new language, or a mix of the old and new
|
||||
# languages.
|
||||
rebuild_messages_script = os.path.join(MAINTENANCE_SCRIPTS_DIR,
|
||||
'rebuildmessages.php')
|
||||
subprocess.check_call([
|
||||
_get_php_command(), rebuild_messages_script])
|
||||
|
||||
@ -10,7 +10,8 @@ from plinth import app as app_module
|
||||
from plinth import views
|
||||
from plinth.modules import mediawiki
|
||||
|
||||
from . import get_default_skin, get_server_url, get_site_name, privileged
|
||||
from . import (get_default_skin,
|
||||
get_server_url, get_site_name, get_default_language, privileged)
|
||||
from .forms import MediaWikiForm
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@ -36,7 +37,9 @@ class MediaWikiAppView(views.AppView):
|
||||
'domain':
|
||||
get_server_url(),
|
||||
'site_name':
|
||||
get_site_name()
|
||||
get_site_name(),
|
||||
'default_lang':
|
||||
get_default_language()
|
||||
})
|
||||
return initial
|
||||
|
||||
@ -102,4 +105,8 @@ class MediaWikiAppView(views.AppView):
|
||||
privileged.set_site_name(new_config['site_name'])
|
||||
messages.success(self.request, _('Site name updated'))
|
||||
|
||||
if is_changed('default_lang'):
|
||||
privileged.set_default_language(new_config['default_lang'])
|
||||
messages.success(self.request, _('Default language changed'))
|
||||
|
||||
return super().form_valid(form)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user