Skip to content

Commit

Permalink
feat: fix missing gettext functions if translations aren't pulled
Browse files Browse the repository at this point in the history
in devstack
  • Loading branch information
OmarIthawi committed Mar 27, 2024
1 parent f131110 commit 9a0f19c
Show file tree
Hide file tree
Showing 3 changed files with 144 additions and 2 deletions.
7 changes: 6 additions & 1 deletion cms/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,12 @@
</script>
% endif

<script type="text/javascript" src="${static.url(jsi18n_path)}"></script>
% if LANGUAGE_CODE != 'en':
<script type="text/javascript" src="${static.url(jsi18n_path)}"></script>
% elif settings.DEBUG or LANGUAGE_CODE == 'en':
## Provides a fallback for gettext functions for English and in debug mode
<script type="text/javascript" src="${static.url('js/src/gettext_fallback.js')}"></script>
% endif
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="path_prefix" content="${EDX_ROOT_URL}">
<%block name="header_meta"></%block>
Expand Down
132 changes: 132 additions & 0 deletions common/static/js/src/gettext_fallback.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
'use strict';

/**
* This is a fallback file for the Django JavaScript internationalization library if the language gettext catalog
* is not available.
*/

(function(globals) {
const django = globals.django || (globals.django = {});

/* gettext library */
if (!django.jsi18n_initialized) {
django.catalog = django.catalog || {};

django.pluralidx = function(n) {
const v = (n != 1);
if (typeof v === 'boolean') {
return v ? 1 : 0;
} else {
return v;
}
};

django.gettext = function(msgid) {
const value = django.catalog[msgid];
if (typeof value === 'undefined') {
return msgid;
} else {
return (typeof value === 'string') ? value : value[0];
}
};

django.ngettext = function(singular, plural, count) {
const value = django.catalog[singular];
if (typeof value === 'undefined') {
return (count == 1) ? singular : plural;
} else {
return value.constructor === Array ? value[django.pluralidx(count)] : value;
}
};

django.gettext_noop = function(msgid) {
return msgid;
};

django.pgettext = function(context, msgid) {
let value = django.gettext(context + '\x04' + msgid);
if (value.includes('\x04')) {
value = msgid;
}
return value;
};

django.npgettext = function(context, singular, plural, count) {
let value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count);
if (value.includes('\x04')) {
value = django.ngettext(singular, plural, count);
}
return value;
};

django.interpolate = function(fmt, obj, named) {
if (named) {
return fmt.replace(/%\(\w+\)s/g, function(match) {
return String(obj[match.slice(2, -2)])
});
} else {
return fmt.replace(/%s/g, function(match) {
return String(obj.shift())
});
}
};

/* formatting library */
django.formats = {
DATETIME_FORMAT: 'N j, Y, P',
DATETIME_INPUT_FORMATS: [
'%Y-%m-%d %H:%M:%S',
'%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M',
'%m/%d/%Y %H:%M:%S',
'%m/%d/%Y %H:%M:%S.%f',
'%m/%d/%Y %H:%M',
'%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f',
'%m/%d/%y %H:%M',
'%Y-%m-%d'
],
DATE_FORMAT: 'N j, Y',
DATE_INPUT_FORMATS: [
'%Y-%m-%d',
'%m/%d/%Y',
'%m/%d/%y'
],
DECIMAL_SEPARATOR: '.',
FIRST_DAY_OF_WEEK: 0,
MONTH_DAY_FORMAT: 'F j',
NUMBER_GROUPING: 3,
SHORT_DATETIME_FORMAT: 'm/d/Y P',
SHORT_DATE_FORMAT: 'm/d/Y',
THOUSAND_SEPARATOR: ',',
TIME_FORMAT: 'P',
TIME_INPUT_FORMATS: [
'%H:%M:%S',
'%H:%M:%S.%f',
'%H:%M'
],
YEAR_MONTH_FORMAT: 'F Y'
};

django.get_format = function(format_type) {
const value = django.formats[format_type];
if (typeof value === 'undefined') {
return format_type;
} else {
return value;
}
};

/* add to global namespace */
globals.pluralidx = django.pluralidx;
globals.gettext = django.gettext;
globals.ngettext = django.ngettext;
globals.gettext_noop = django.gettext_noop;
globals.pgettext = django.pgettext;
globals.npgettext = django.npgettext;
globals.interpolate = django.interpolate;
globals.get_format = django.get_format;

django.jsi18n_initialized = true;
}
}(this));
7 changes: 6 additions & 1 deletion lms/templates/main.html
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,12 @@
}
</script>
% endif
<script type="text/javascript" src="${static.url(jsi18n_path)}"></script>
% if LANGUAGE_CODE != 'en':
<script type="text/javascript" src="${static.url(jsi18n_path)}"></script>
% elif settings.DEBUG or LANGUAGE_CODE == 'en':
## Provides a fallback for gettext functions for English and in debug mode
<script type="text/javascript" src="${static.url('js/src/gettext_fallback.js')}"></script>
% endif
<script type="text/javascript" src="${static.url(ie11_fix_path)}"></script>
<% favicon_url = branding_api.get_favicon_url() %>
<link rel="icon" type="image/x-icon" href="${favicon_url}"/>
Expand Down

0 comments on commit 9a0f19c

Please sign in to comment.