Merge pull request #12813 from surajshetty3416/website-language-switcher
This commit is contained in:
commit
66720e0069
4 changed files with 69 additions and 12 deletions
|
|
@ -110,5 +110,39 @@
|
|||
{%- endblock %}
|
||||
<!-- csrf_token -->
|
||||
{%- block body_include %}{{ body_include or "" }}{% endblock -%}
|
||||
<script>
|
||||
frappe.ready(() => {
|
||||
if (frappe.session.user === 'Guest') {
|
||||
frappe.call("frappe.translate.get_all_languages", {
|
||||
with_language_name: true
|
||||
}).then(res => {
|
||||
let language_list = res.message;
|
||||
let language = frappe.get_cookie('preferred_language');
|
||||
let language_codes = [];
|
||||
language_list.forEach(language_doc => {
|
||||
language_codes.push(language_doc.language_code)
|
||||
$("#language-switcher")
|
||||
.append(
|
||||
$("<option></option>")
|
||||
.attr("value", language_doc.language_code)
|
||||
.text(language_doc.language_name)
|
||||
);
|
||||
});
|
||||
$("#language-switcher").removeClass('hide');
|
||||
language = language || language_codes.includes(navigator.language) ? navigator.language : 'en';
|
||||
$("#language-switcher").val(language);
|
||||
document.documentElement.lang = language;
|
||||
$("#language-switcher").change((e) => {
|
||||
let lang = $("#language-switcher").val();
|
||||
frappe.call("frappe.translate.set_preferred_language_cookie", {
|
||||
"preferred_language": lang
|
||||
}).then(() => {
|
||||
window.location.reload();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -21,5 +21,8 @@
|
|||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
{% include "templates/includes/navbar/navbar_items.html" %}
|
||||
</div>
|
||||
<div class="form-group mb-0">
|
||||
<select class="form-control hide" id="language-switcher"></select>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<li class="nav-item dropdown {% if submenu %} dropdown-submenu {% endif %}">
|
||||
<a class="nav-link dropdown-toggle" href="#" id="{{ dropdown_id }}" role="button"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{{ item.label }}
|
||||
{{ _(item.label) }}
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="{{ dropdown_id }}">
|
||||
{% for child in item.child_items %}
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
<li class="dropdown {% if submenu %} dropdown-submenu {% endif %}">
|
||||
<a class="dropdown-item dropdown-toggle" href="#" id="{{ dropdown_id }}" role="button"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{{ item.label }}
|
||||
{{ _(item.label) }}
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="{{ dropdown_id }}">
|
||||
{% for child in item.child_items %}
|
||||
|
|
@ -36,13 +36,13 @@
|
|||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ (item.url or '')|abs_url }}"
|
||||
{% if item.open_in_new_tab %} target="_blank" {% endif %}>
|
||||
{{ item.label }}
|
||||
{{ _(item.label) }}
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
<a class="dropdown-item" href="{{ (item.url or '') | abs_url }}"
|
||||
{% if item.open_in_new_tab %} target="_blank" {% endif %}>
|
||||
{{ item.label }}
|
||||
{{ _(item.label) }}
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,11 @@ import itertools, operator
|
|||
|
||||
def guess_language(lang_list=None):
|
||||
"""Set `frappe.local.lang` from HTTP headers at beginning of request"""
|
||||
user_preferred_language = frappe.request.cookies.get('preferred_language')
|
||||
is_guest_user = not frappe.session.user or frappe.session.user == 'Guest'
|
||||
if is_guest_user and user_preferred_language:
|
||||
return user_preferred_language
|
||||
|
||||
lang_codes = frappe.request.accept_languages.values()
|
||||
if not lang_codes:
|
||||
return frappe.local.lang
|
||||
|
|
@ -77,14 +82,6 @@ def set_default_language(lang):
|
|||
frappe.db.set_default("lang", lang)
|
||||
frappe.local.lang = lang
|
||||
|
||||
def get_all_languages():
|
||||
"""Returns all language codes ar, ch etc"""
|
||||
def _get():
|
||||
if not frappe.db:
|
||||
frappe.connect()
|
||||
return frappe.db.sql_list('select name from tabLanguage')
|
||||
return frappe.cache().get_value('languages', _get)
|
||||
|
||||
def get_lang_dict():
|
||||
"""Returns all languages in dict format, full name is the key e.g. `{"english":"en"}`"""
|
||||
return dict(frappe.db.sql('select language_name, name from tabLanguage'))
|
||||
|
|
@ -244,6 +241,8 @@ def get_translation_dict_from_file(path, lang, app):
|
|||
return translation_map
|
||||
|
||||
def get_user_translations(lang):
|
||||
if not frappe.db:
|
||||
frappe.connect()
|
||||
out = frappe.cache().hget('lang_user_translations', lang)
|
||||
if out is None:
|
||||
out = {}
|
||||
|
|
@ -813,3 +812,24 @@ def get_contribution_status(message_id):
|
|||
|
||||
def get_translator_url():
|
||||
return frappe.get_hooks()['translator_url'][0]
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def get_all_languages(with_language_name=False):
|
||||
"""Returns all language codes ar, ch etc"""
|
||||
def get_language_codes():
|
||||
return frappe.db.sql_list('select name from tabLanguage')
|
||||
|
||||
def get_all_language_with_name():
|
||||
return frappe.db.get_all('language', ['language_code', 'language_name'])
|
||||
|
||||
if not frappe.db:
|
||||
frappe.connect()
|
||||
|
||||
if with_language_name:
|
||||
return frappe.cache().get_value('languages_with_name', get_all_language_with_name)
|
||||
else:
|
||||
return frappe.cache().get_value('languages', get_language_codes)
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def set_preferred_language_cookie(preferred_language):
|
||||
frappe.local.cookie_manager.set_cookie("preferred_language", preferred_language)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue