Skip to content

Commit cbfeb83

Browse files
authored
Merge pull request #1641 from RogerHaase/39-lang
language attributes missing; fixes #39
2 parents 6ce8bcd + 2032b80 commit cbfeb83

File tree

13 files changed

+62
-44
lines changed

13 files changed

+62
-44
lines changed

docs/admin/configure.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ Here is the source code segment from snippets.html::
328328

329329
{# Header/Sidebar for topside_cms theme - see docs for tips on customization #}
330330
{% macro cms_header() %}
331-
<header id="moin-header">
331+
<header id="moin-header" lang="{{ theme_supp.user_lang }}" dir="{{ theme_supp.user_dir }}">
332332
{% block header %}
333333

334334
{% if logo() %}

src/moin/app.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,9 +293,6 @@ def before_wiki():
293293
flaskg.dicts = app.cfg.dicts()
294294
flaskg.groups = app.cfg.groups()
295295

296-
flaskg.content_lang = app.cfg.language_default
297-
flaskg.current_lang = app.cfg.language_default
298-
299296
if cli_no_request_ctx: # no request.user_agent if this is pytest or cli
300297
flaskg.add_lineno_attr = False
301298
else:

src/moin/cli/migration/moin19/import19.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,8 @@ def __init__(self, item, revno, path, target_namespace):
458458
meta[REV_NUMBER] = revno
459459
meta[NAMESPACE] = target_namespace
460460
meta[ITEMTYPE] = ITEMTYPE_DEFAULT
461+
if LANGUAGE not in meta:
462+
meta[LANGUAGE] = app.cfg.language_default
461463
if meta[NAME][0].endswith('Template'):
462464
if TAGS in meta:
463465
meta[TAGS].append(TEMPLATE)
@@ -644,6 +646,8 @@ def __init__(self, item_name, attach_name, attpath, editlog, acl):
644646
meta[REVID] = make_uuid()
645647
meta[REV_NUMBER] = 1
646648
meta[ITEMTYPE] = ITEMTYPE_DEFAULT
649+
if LANGUAGE not in meta:
650+
meta[LANGUAGE] = app.cfg.language_default
647651
meta[WIKINAME] = app.cfg.sitename # old 1.9 sitename is not available
648652
for attr in (COMMENT, SUMMARY, ):
649653
meta[attr] = ""

src/moin/config/default.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import re
1616
import os
1717

18-
from babel import parse_locale
18+
from babel import Locale, parse_locale
1919

2020
from moin.i18n import _, L_, N_
2121
from moin import error
@@ -87,7 +87,8 @@ def __init__(self):
8787
# to give browser language detection a chance.
8888
try:
8989
self.language_default = parse_locale(self.locale_default)[0]
90-
except ValueError:
90+
self.content_dir = Locale(self.language_default).text_direction
91+
except Exception: # noqa
9192
raise error.ConfigurationError("Invalid locale_default value (give something like 'en_US').")
9293

9394
# post process

src/moin/converters/_tests/test_include.py

Lines changed: 25 additions & 25 deletions
Large diffs are not rendered by default.

src/moin/converters/html_out.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
import re
1313

1414
from flask import current_app as app
15+
from flask import g as flaskg
1516
from emeraldtree import ElementTree as ET
1617
from urllib.parse import urlencode
18+
from babel import Locale
1719

1820
from moin import wikiutil
1921
from moin.i18n import _
@@ -22,6 +24,7 @@
2224
from moin.utils.tree import html, moin_page, xlink, xml
2325
from moin.constants.contenttypes import CONTENTTYPE_NONEXISTENT, CHARSET
2426
from moin.utils.mime import Type, type_moin_document
27+
from moin.constants.keys import LANGUAGE
2528

2629
from . import default_registry, ElementException
2730

@@ -65,6 +68,13 @@ def mark_item_as_transclusion(elem, href_or_item):
6568
if isinstance(href_or_item, Item):
6669
query = urlencode({'do': 'show'}, encoding=CHARSET)
6770
href = Iri(scheme='wiki', authority='', path='/' + href_or_item.fqname.fullname, query=query)
71+
if hasattr(href_or_item, 'meta') and LANGUAGE in href_or_item.meta:
72+
elem.attrib[html.lang] = href_or_item.meta[LANGUAGE]
73+
elif hasattr(flaskg.user, LANGUAGE):
74+
elem.attrib[html.lang] = flaskg.user.language
75+
else:
76+
elem.attrib[html.lang] = app.cfg.language_default
77+
elem.attrib[html.dir] = Locale(elem.attrib[html.lang]).text_direction
6878
else: # isinstance(href_or_item, Iri)
6979
href = href_or_item
7080
elem.attrib[html.data_href] = href

src/moin/items/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
HASH_ALGORITHM, ITEMID, REVID, DATAID, CURRENT, PARENTID, NAMESPACE,
6060
UFIELDS_TYPELIST, UFIELDS, TRASH, REV_NUMBER,
6161
ACTION_SAVE, ACTION_REVERT, ACTION_TRASH, ACTION_RENAME, TAGS, TEMPLATE,
62-
LATEST_REVS, EDIT_ROWS, FQNAMES, USERGROUP, WIKIDICT
62+
LATEST_REVS, EDIT_ROWS, FQNAMES, USERGROUP, WIKIDICT, LANGUAGE
6363
)
6464
from moin.constants.chartypes import CHARS_UPPER, CHARS_LOWER
6565
from moin.constants.namespaces import NAMESPACE_ALL, NAMESPACE_USERPROFILES
@@ -990,6 +990,10 @@ def _save(self, meta, data=None, names=None, action=ACTION_SAVE, contenttype_gue
990990
contenttype_current = None
991991

992992
meta = dict(meta) # we may get a read-only dict-like, copy it
993+
if flaskg.user.language:
994+
meta[LANGUAGE] = flaskg.user.language
995+
else:
996+
meta[LANGUAGE] = app.cfg.language_default
993997

994998
if 'acl' in meta:
995999
# we treat this as nothing specified, so fallback to default

src/moin/templates/layout.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
<div id="moin-main-wrapper">
1818
{{ before_header }}
19-
<header id="moin-header">
19+
<header id="moin-header" lang="{{ theme_supp.user_lang }}" dir="{{ theme_supp.user_dir }}">
2020
{% block header %}
2121
{% if search_form %}
2222
{{ header_search(search_form) }}
@@ -52,7 +52,7 @@
5252
</header>
5353
{{ after_header }}
5454

55-
<div id="moin-page" role="main" lang="{{ theme_supp.content_lang }}" dir="{{ theme_supp.content_dir }}">
55+
<div id="moin-page" role="main">
5656
{% block item -%}
5757
{# If you want itemviews in your template, extend from show.html, not from here. #}
5858
<div id="moin-content">

src/moin/templates/snippets.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080

8181
{% macro footer_meta() %}
8282
{% if rev %}
83-
<p id="moin-pageinfo" lang="{{ theme_supp.ui_lang }}" dir="{{ theme_supp.ui_dir }}">
83+
<p id="moin-pageinfo">
8484
{% if cfg.show_interwiki %}
8585
{{ cfg.interwikiname }}:
8686
{% endif %}
@@ -109,7 +109,7 @@
109109

110110
{# Header/Sidebar for topside_cms theme - see docs for tips on customization #}
111111
{% macro cms_header() %}
112-
<header id="moin-header">
112+
<header id="moin-header" lang="{{ theme_supp.user_lang }}" dir="{{ theme_supp.user_dir }}">
113113
{% block header %}
114114

115115
{% if logo() %}

src/moin/themes/__init__.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
from flask import url_for, request
2121
from flask_theme import get_theme, render_theme_template
2222

23+
from babel import Locale
24+
2325
from moin.i18n import _, L_
2426
from moin import wikiutil, user
2527
from moin.constants.keys import USERID, ADDRESS, HOSTNAME, REVID, ITEMID, NAME_EXACT, ASSIGNED_TO, NAME, NAMESPACE
@@ -84,10 +86,10 @@ def __init__(self, cfg):
8486
self.cfg = cfg
8587
self.user = flaskg.user
8688
self.storage = flaskg.storage
87-
self.ui_lang = 'en' # XXX
88-
self.ui_dir = 'ltr' # XXX
89-
self.content_lang = flaskg.content_lang # XXX
90-
self.content_dir = 'ltr' # XXX
89+
self.ui_lang = cfg.language_default
90+
self.ui_dir = cfg.content_dir
91+
self.user_lang = flaskg.user.language or self.ui_lang
92+
self.user_dir = Locale(self.user_lang).text_direction
9193
if request.url_root[len(request.host_url):-1]:
9294
self.wiki_root = '/' + request.url_root[len(request.host_url):-1]
9395
else:

0 commit comments

Comments
 (0)