Skip to content

Commit 85d3b22

Browse files
committed
Improve Language/Literacy handling (#458)
- Fix #458 - Custom Language generation now uses Foundry's String#slugify - Added generic support for Literacy languages
1 parent 12fed2f commit 85d3b22

File tree

5 files changed

+23
-11
lines changed

5 files changed

+23
-11
lines changed

src/lang/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@
184184
"UESRPG.Language": "Language",
185185
"Generic": {
186186
"Language": "Language",
187+
"Literacy": "Literacy",
187188
"Read": "Read"
188189
},
189190
"COC7": {

src/module/logic.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export class Polyglot {
120120
}
121121

122122
get omniglot() {
123-
return this._omniglot.trim().toLowerCase().replace(/[\s']/g, "_");
123+
return this._omniglot.slugify({ replacement: "_" });
124124
}
125125

126126
set omniglot(lang) {
@@ -131,7 +131,7 @@ export class Polyglot {
131131
}
132132

133133
get comprehendLanguages() {
134-
return this._comprehendLanguages.trim().toLowerCase().replace(/[\s']/g, "_");
134+
return this._comprehendLanguages.slugify({ replacement: "_" });
135135
}
136136

137137
set comprehendLanguages(lang) {
@@ -142,7 +142,7 @@ export class Polyglot {
142142
}
143143

144144
get truespeech() {
145-
return this._truespeech.trim().toLowerCase().replace(/[\s']/g, "_");
145+
return this._truespeech.slugify({ replacement: "_" });
146146
}
147147

148148
set truespeech(lang) {

src/module/providers/templates/Base.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ export default class LanguageProvider {
502502
addLanguage(lang, options = {}) {
503503
if (!lang) return;
504504

505-
const key = lang.toLowerCase().replace(/[\s']/g, "_");
505+
const key = lang.slugify({ replacement: "_" });
506506
const languagesSetting = game.settings.get("polyglot", "Languages");
507507
const defaultOptions = {
508508
font: languagesSetting[key]?.font ?? this.defaultFont,
@@ -524,7 +524,7 @@ export default class LanguageProvider {
524524
if (!lang) return;
525525
const customLanguages = game.settings.get("polyglot", "customLanguages");
526526
if (customLanguages.includes(lang)) return;
527-
const key = lang.trim().toLowerCase().replace(/[\s']/g, "_");
527+
const key = lang.slugify({ replacement: "_" });
528528
delete this.languages[key];
529529
this.removeFromConfig(key);
530530
}
@@ -645,12 +645,19 @@ export default class LanguageProvider {
645645
}
646646
} else if (game.settings.settings.has("polyglot.LanguageRegex")) {
647647
const languageRegex = game.settings.get("polyglot", "LanguageRegex");
648-
let myRegex = new RegExp(`${languageRegex}\\s*\\((.+)\\)`, "i");
648+
let literacyRegex;
649+
if (game.settings.settings.has("polyglot.LiteracyRegex")) {
650+
literacyRegex = game.settings.get("polyglot", "LiteracyRegex");
651+
}
652+
const langRegex = new RegExp(`${languageRegex}\\s*\\((.+)\\)`, "i");
653+
const litRegex = new RegExp(`${literacyRegex} \\((.+)\\)`, "i");
649654
for (let item of actor.items) {
650655
const name = item?.flags?.babele?.originalName || item.name;
651656
// adding only the descriptive language name, not "Language (XYZ)"
652-
if (myRegex.test(name)) {
653-
knownLanguages.add(name.match(myRegex)[1].trim().toLowerCase());
657+
if (langRegex.test(name)) {
658+
knownLanguages.add(name.match(langRegex)[1].slugify({ replacement: "_" }));
659+
} else if (literacyRegex && litRegex.test(name)) {
660+
literateLanguages.add(name.match(litRegex)[1].slugify({ replacement: "_" }));
654661
}
655662
}
656663
}

src/module/providers/templates/Generic.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ export default class GenericLanguageProvider extends LanguageProvider {
2323
type: String,
2424
default: game.i18n.localize("POLYGLOT.Generic.Language"),
2525
},
26+
LiteracyRegex: {
27+
type: String,
28+
default: game.i18n.localize("POLYGLOT.Generic.Literacy"),
29+
},
2630
};
2731
}
2832

src/module/providers/wwn.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export default class wwnLanguageProvider extends LanguageProvider {
2929
game.settings.set("wwn", "languageList", languages);
3030
}
3131
lang = lang.trim();
32-
const key = lang.toLowerCase().replace(/[\s']/g, "_");
32+
const key = lang.slugify({ replacement: "_" });
3333
this.languages[key] = {
3434
label: lang,
3535
font: languagesSetting[key]?.font ?? this.defaultFont,
@@ -44,14 +44,14 @@ export default class wwnLanguageProvider extends LanguageProvider {
4444
languages.replace(new RegExp(`,\\s*${lang}`), "");
4545
game.settings.set("wwn", "languageList", languages);
4646
}
47-
const key = lang.trim().toLowerCase().replace(/[\s']/g, "_");
47+
const key = lang.slugify({ replacement: "_" });
4848
delete this.languages[key];
4949
}
5050

5151
async getLanguages() {
5252
const languagesSetting = game.settings.get("polyglot", "Languages");
5353
for (let lang of game.settings.get("wwn", "languageList").split(",")) {
54-
const key = lang.toLowerCase().replace(/[\s']/g, "_");
54+
const key = lang.slugify({ replacement: "_" });
5555
this.languages[key] = {
5656
label: lang,
5757
font: languagesSetting[key]?.font || this.defaultFont,

0 commit comments

Comments
 (0)