Skip to content

Commit cf22e7a

Browse files
committed
Implement language detection and label service macro
1 parent 5c0cef4 commit cf22e7a

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{% macro labels(variables, languages) -%}
2+
{% for variable in variables -%}
3+
{% for language in languages -%}
4+
OPTIONAL { {{ variable }} <http://www.w3.org/2000/01/rdf-schema#label> {{ variable }}Label_{{ language | replace("-", "_") }}. FILTER(LANG({{ variable }}Label_{{ language | replace("-", "_") }}) = "{{ language }}") }
5+
{% endfor -%}
6+
BIND(COALESCE(
7+
{%- for language in languages -%}
8+
{{ variable }}Label_{{ language | replace("-", "_") }}
9+
{%- if not loop.last %}, {% endif %}
10+
{%- endfor -%}
11+
) AS {{ variable }}Label)
12+
13+
{%- if not loop.last %}
14+
{% endif %}
15+
{%- endfor %}
16+
{%- endmacro -%}
17+
18+
{%- macro descriptions(variables, languages) -%}
19+
{% for variable in variables -%}
20+
{% for language in languages -%}
21+
OPTIONAL { {{ variable }} <http://schema.org/description> {{ variable }}Description_{{ language | replace("-", "_") }}. FILTER(LANG({{ variable }}Description_{{ language | replace("-", "_") }}) = "{{ language }}") }
22+
{% endfor -%}
23+
BIND(COALESCE(
24+
{%- for language in languages -%}
25+
{{ variable }}Description_{{ language | replace("-", "_") }}
26+
{%- if not loop.last %}, {% endif %}
27+
{%- endfor -%}
28+
) AS {{ variable }}Description)
29+
30+
{%- if not loop.last %}
31+
{% endif %}
32+
{%- endfor %}
33+
{%- endmacro -%}

scholia/app/views.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import datetime
44
import re
55

6-
from flask import (Blueprint, current_app, redirect, render_template, request,
7-
Response, url_for)
6+
from flask import (Blueprint, current_app, redirect, render_template as render_template_base,
7+
request, Response, url_for)
88
from jinja2 import TemplateNotFound
99
from werkzeug.routing import BaseConverter
1010

@@ -384,6 +384,25 @@ def get_js_config():
384384
config['query-server'].get('sparql_endpoint_name'),
385385
}
386386

387+
def get_languages():
388+
"""Get language fallback chain for a given request.
389+
390+
Returns
391+
-------
392+
languages : str[]
393+
Language fallback chain.
394+
395+
"""
396+
languages = [x[0] for x in request.accept_languages]
397+
if 'en' not in request.accept_languages:
398+
languages.append('en')
399+
languages.append('mul')
400+
return languages
401+
402+
def render_template(*args, **kwargs):
403+
if 'languages' not in kwargs:
404+
kwargs['languages'] = get_languages()
405+
return render_template_base(*args, **kwargs)
387406

388407
@main.context_processor
389408
def inject_js_config():

0 commit comments

Comments
 (0)