Skip to content

Commit

Permalink
Support language dialects for current and default locales in survey s…
Browse files Browse the repository at this point in the history
…trings fixed #5752
  • Loading branch information
andrewtelnov committed Mar 9, 2023
1 parent f10aeb7 commit 05e8312
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 19 deletions.
41 changes: 22 additions & 19 deletions src/surveyStrings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,30 @@ export var surveyLocalization = {
getLocaleStrings(loc: string): any {
return this.locales[loc];
},
getCurrentStrings(locale?: string): any {
let loc = locale && this.locales[locale];
if (!loc) loc = this.currentLocale ? this.locales[this.currentLocale] : this.locales[this.defaultLocale];
if (!loc) loc = this.locales[this.defaultLocale];
if (!loc) loc = this.locales["en"];
return loc;
},
getString: function (strName: string, locale: string = null) {
const originalLocale = locale;
locale = locale || this.currentLocale || this.defaultLocale;
var loc = this.getCurrentStrings(locale);
if (!!loc[strName]) return loc[strName];
const index = !!locale ? locale.indexOf("-") : -1;
if(index > -1) return this.getString(strName, locale.substring(0, index));
loc = this.locales[this.defaultLocale];
var result = loc[strName];
if (result === undefined) {
result = this.locales["en"][strName];
const locs = new Array<any>();
const addLocaleCore = (locName: string): void => {
if(!!this.locales[locName]) locs.push(this.locales[locName]);
};
const addLocale = (locName: string): void => {
if(!locName) return;
addLocaleCore(locName);
const index = locName.indexOf("-");
if(index < 1) return;
locName = locName.substring(0, index);
addLocaleCore(locName);
};
addLocale(locale);
addLocale(this.currentLocale);
addLocale(this.defaultLocale);
if(this.defaultLocale !== "en") {
addLocale("en");
}
for(let i = 0; i < locs.length; i ++) {
const res = locs[i][strName];
if(res !== undefined) return res;
}
if(result === undefined) return this.onGetExternalString(strName, originalLocale);
return result;
return this.onGetExternalString(strName, locale);
},
getLocales: function (removeDefaultLoc: boolean = false): Array<string> {
var res = [];
Expand Down
54 changes: 54 additions & 0 deletions tests/surveyLocalizationTests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import "../src/localization/czech";
import "../src/localization/portuguese";
import "../src/localization/portuguese-br";
import { QuestionCheckboxBase } from "../src/question_baseselect";
import { englishStrings } from "../src/localization/english";

export default QUnit.module("LocalizationsTests");

Expand Down Expand Up @@ -269,4 +270,57 @@ QUnit.test(
QUnit.test("Support language dialect", function(assert) {
assert.equal(surveyLocalization.getString("pagePrevText", "pt-br"), "Anterior", "get from pt");
assert.equal(surveyLocalization.getString("loadingFile", "pt-br"), "Carregando...", "get from pt-br");
});

QUnit.test("Support language dialect & current locale", function(assert) {
const locABABTest = {
prop1: "Prop1 ABABTest",
prop2: "Prop2 ABABTest",
};
const locABTest = {
prop2: "Prop2 ABTest",
prop3: "Prop3 ABTest",
};
const locCDCDTest = {
prop3: "Prop3 CDCDTest",
prop4: "Prop4 CDCDTest",
};
const locCDTest = {
prop4: "Prop4 CDTest",
prop5: "Prop5 CDTest",
};
const locEFEFTest = {
prop5: "Prop5 EFEFTest",
prop6: "Prop6 EFEFTest",
};
const locEFTest = {
prop6: "Prop5 EFTest",
prop7: "Prop7 EFTest",
};
englishStrings["prop7"] = "Prop7 EnTest";
englishStrings["prop8"] = "Prop8 EnTest";
surveyLocalization.locales["ab-AB"] = locABABTest;
surveyLocalization.locales["ab"] = locABTest;
surveyLocalization.locales["cd-CD"] = locCDCDTest;
surveyLocalization.locales["cd"] = locCDTest;
surveyLocalization.locales["ef-EF"] = locEFEFTest;
surveyLocalization.locales["ef"] = locEFTest;
surveyLocalization.defaultLocale = "ef-EF";
surveyLocalization.currentLocale = "cd-CD";
assert.equal(surveyLocalization.getString("prop1", "ab-AB"), "Prop1 ABABTest", "prop1");
assert.equal(surveyLocalization.getString("prop2", "ab-AB"), "Prop2 ABABTest", "prop2");
assert.equal(surveyLocalization.getString("prop3", "ab-AB"), "Prop3 ABTest", "prop3");
assert.equal(surveyLocalization.getString("prop4", "ab-AB"), "Prop4 CDCDTest", "prop4");
assert.equal(surveyLocalization.getString("prop5", "ab-AB"), "Prop5 CDTest", "prop5");
assert.equal(surveyLocalization.getString("prop6", "ab-AB"), "Prop6 EFEFTest", "prop6");
assert.equal(surveyLocalization.getString("prop7", "ab-AB"), "Prop7 EFTest", "prop7");
assert.equal(surveyLocalization.getString("prop8", "ab-AB"), "Prop8 EnTest", "prop8");

surveyLocalization.defaultLocale = "en";
surveyLocalization.currentLocale = "";
delete surveyLocalization.locales["ab-AB"];
delete surveyLocalization.locales["ab"];
delete surveyLocalization.locales["cd-CD"];
delete surveyLocalization.locales["cd"];
delete surveyLocalization.locales["df"];
});

0 comments on commit 05e8312

Please sign in to comment.