Skip to content

Commit abb9e4b

Browse files
committed
Generalize the usage of the translate method
1 parent a7e117f commit abb9e4b

File tree

6 files changed

+39
-35
lines changed

6 files changed

+39
-35
lines changed

src/core.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ QueryBuilder.prototype.checkFilters = function(filters) {
124124
else {
125125
var self = this;
126126
filters.sort(function(a, b) {
127-
return self.getTranslatedLabel(a.label).localeCompare(self.getTranslatedLabel(b.label));
127+
return self.translate(a.label).localeCompare(self.translate(b.label));
128128
});
129129
}
130130
}
@@ -884,7 +884,7 @@ QueryBuilder.prototype.updateError = function(node) {
884884
node.$el.removeClass('has-error');
885885
}
886886
else {
887-
var errorMessage = this.lang.errors[node.error[0]] || node.error[0];
887+
var errorMessage = this.translate('errors', node.error[0]);
888888
errorMessage = Utils.fmt(errorMessage, node.error.slice(1));
889889

890890
/**

src/data.js

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -592,30 +592,36 @@ QueryBuilder.prototype.getGroupFlags = function(flags, all) {
592592
};
593593

594594
/**
595-
* Retrieve a translation in the `lang` object
595+
* Translate a label either by looking in the `lang` object or in itself if it's an object where keys are language codes
596596
* @param {string} [category]
597-
* @param {string} key
597+
* @param {string|object} key
598598
* @returns {string}
599+
* @fires QueryBuilder#changer:translate
599600
*/
600601
QueryBuilder.prototype.translate = function(category, key) {
601602
if (!key) {
602603
key = category;
603604
category = undefined;
604605
}
605606

606-
var translation = (category ? this.lang[category] : this.lang)[key] || key;
607-
608-
return this.change('translate', translation, category, key);
609-
};
607+
var translation;
608+
if (typeof key === 'object') {
609+
translation = key[this.settings.lang_code] || key['en'];
610+
}
611+
else {
612+
translation = (category ? this.lang[category] : this.lang)[key] || key;
613+
}
610614

611-
/**
612-
* Translates a label
613-
* @param {string|object} label
614-
* @returns {string}
615-
* @private
616-
*/
617-
QueryBuilder.prototype.getTranslatedLabel = function(label) {
618-
return typeof label == 'object' ? (label[this.settings.lang_code] || label['en']) : label;
615+
/**
616+
* Modifies the translated label
617+
* @event changer:translate
618+
* @memberof QueryBuilder
619+
* @param {string} translation
620+
* @param {string|object} key
621+
* @param {string} [category]
622+
* @returns {string}
623+
*/
624+
return this.change('translate', translation, key, category);
619625
};
620626

621627
/**

src/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ var QueryBuilder = function($el, options) {
101101
* @member {object}
102102
* @readonly
103103
*/
104-
this.lang = undefined;
104+
this.lang = null;
105105

106106
// translations : english << 'lang_code' << custom
107107
if (QueryBuilder.regional['en'] === undefined) {

src/plugins/invert/plugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,14 @@ QueryBuilder.define('invert', function(options) {
6565
// Modify templates
6666
this.on('getGroupTemplate.filter', function(h, level) {
6767
var $h = $(h.value);
68-
$h.find(Selectors.condition_container).after('<button type="button" class="btn btn-xs btn-default" data-invert="group"><i class="' + options.icon + '"></i> ' + self.lang.invert + '</button>');
68+
$h.find(Selectors.condition_container).after('<button type="button" class="btn btn-xs btn-default" data-invert="group"><i class="' + options.icon + '"></i> ' + self.translate('invert') + '</button>');
6969
h.value = $h.prop('outerHTML');
7070
});
7171

7272
if (options.display_rules_button && options.invert_rules) {
7373
this.on('getRuleTemplate.filter', function(h) {
7474
var $h = $(h.value);
75-
$h.find(Selectors.rule_actions).prepend('<button type="button" class="btn btn-xs btn-default" data-invert="rule"><i class="' + options.icon + '"></i> ' + self.lang.invert + '</button>');
75+
$h.find(Selectors.rule_actions).prepend('<button type="button" class="btn btn-xs btn-default" data-invert="rule"><i class="' + options.icon + '"></i> ' + self.translate('invert') + '</button>');
7676
h.value = $h.prop('outerHTML');
7777
});
7878
}

src/plugins/not-group/plugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ QueryBuilder.define('not-group', function(options) {
4949
var $h = $(h.value);
5050
$h.find(QueryBuilder.selectors.condition_container).prepend(
5151
'<button type="button" class="btn btn-xs btn-default" data-not="group">' +
52-
'<i class="' + options.icon_unchecked + '"></i> ' + self.lang.NOT +
52+
'<i class="' + options.icon_unchecked + '"></i> ' + self.translate('NOT') +
5353
'</button>'
5454
);
5555
h.value = $h.prop('outerHTML');

src/template.js

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@ QueryBuilder.templates.group = '\
33
<dt class="rules-group-header"> \
44
<div class="btn-group pull-right group-actions"> \
55
<button type="button" class="btn btn-xs btn-success" data-add="rule"> \
6-
<i class="{{= it.icons.add_rule }}"></i> {{= it.lang.add_rule }} \
6+
<i class="{{= it.icons.add_rule }}"></i> {{= it.translate("add_rule") }} \
77
</button> \
88
{{? it.settings.allow_groups===-1 || it.settings.allow_groups>=it.level }} \
99
<button type="button" class="btn btn-xs btn-success" data-add="group"> \
10-
<i class="{{= it.icons.add_group }}"></i> {{= it.lang.add_group }} \
10+
<i class="{{= it.icons.add_group }}"></i> {{= it.translate("add_group") }} \
1111
</button> \
1212
{{?}} \
1313
{{? it.level>1 }} \
1414
<button type="button" class="btn btn-xs btn-danger" data-delete="group"> \
15-
<i class="{{= it.icons.remove_group }}"></i> {{= it.lang.delete_group }} \
15+
<i class="{{= it.icons.remove_group }}"></i> {{= it.translate("delete_group") }} \
1616
</button> \
1717
{{?}} \
1818
</div> \
1919
<div class="btn-group group-conditions"> \
2020
{{~ it.conditions: condition }} \
2121
<label class="btn btn-xs btn-primary"> \
22-
<input type="radio" name="{{= it.group_id }}_cond" value="{{= condition }}"> {{= it.lang.conditions[condition] || condition }} \
22+
<input type="radio" name="{{= it.group_id }}_cond" value="{{= condition }}"> {{= it.translate("conditions", condition) }} \
2323
</label> \
2424
{{~}} \
2525
</div> \
@@ -37,7 +37,7 @@ QueryBuilder.templates.rule = '\
3737
<div class="rule-header"> \
3838
<div class="btn-group pull-right rule-actions"> \
3939
<button type="button" class="btn btn-xs btn-danger" data-delete="rule"> \
40-
<i class="{{= it.icons.remove_rule }}"></i> {{= it.lang.delete_rule }} \
40+
<i class="{{= it.icons.remove_rule }}"></i> {{= it.translate("delete_rule") }} \
4141
</button> \
4242
</div> \
4343
</div> \
@@ -70,7 +70,7 @@ QueryBuilder.templates.filterSelect = '\
7070
QueryBuilder.templates.operatorSelect = '\
7171
{{? it.operators.length === 1 }} \
7272
<span> \
73-
{{= it.lang.operators[it.operators[0].type] || it.operators[0].type }} \
73+
{{= it.translate("operators", it.operators[0].type) }} \
7474
</span> \
7575
{{?}} \
7676
{{ var optgroup = null; }} \
@@ -82,7 +82,7 @@ QueryBuilder.templates.operatorSelect = '\
8282
<optgroup label="{{= it.translate(it.settings.optgroups[optgroup]) }}"> \
8383
{{?}} \
8484
{{?}} \
85-
<option value="{{= operator.type }}">{{= it.lang.operators[operator.type] || operator.type }}</option> \
85+
<option value="{{= operator.type }}">{{= it.translate("operators", operator.type) }}</option> \
8686
{{~}} \
8787
{{? optgroup !== null }}</optgroup>{{?}} \
8888
</select>';
@@ -102,8 +102,8 @@ QueryBuilder.prototype.getGroupTemplate = function(group_id, level) {
102102
level: level,
103103
conditions: this.settings.conditions,
104104
icons: this.icons,
105-
lang: this.lang,
106-
settings: this.settings
105+
settings: this.settings,
106+
translate: this.translate.bind(this)
107107
});
108108

109109
/**
@@ -129,8 +129,8 @@ QueryBuilder.prototype.getRuleTemplate = function(rule_id) {
129129
builder: this,
130130
rule_id: rule_id,
131131
icons: this.icons,
132-
lang: this.lang,
133-
settings: this.settings
132+
settings: this.settings,
133+
translate: this.translate.bind(this)
134134
});
135135

136136
/**
@@ -157,9 +157,8 @@ QueryBuilder.prototype.getRuleFilterSelect = function(rule, filters) {
157157
rule: rule,
158158
filters: filters,
159159
icons: this.icons,
160-
lang: this.lang,
161160
settings: this.settings,
162-
translate: this.getTranslatedLabel
161+
translate: this.translate.bind(this)
163162
});
164163

165164
/**
@@ -188,9 +187,8 @@ QueryBuilder.prototype.getRuleOperatorSelect = function(rule, operators) {
188187
rule: rule,
189188
operators: operators,
190189
icons: this.icons,
191-
lang: this.lang,
192190
settings: this.settings,
193-
translate: this.getTranslatedLabel
191+
translate: this.translate.bind(this)
194192
});
195193

196194
/**

0 commit comments

Comments
 (0)