Refactor and expand Translation and Quest management.

This commit is contained in:
Roman Jaroš 2025-03-01 21:46:55 +01:00
parent 4660216504
commit 5f21775771
20 changed files with 2546 additions and 9969 deletions

View file

@ -6,11 +6,24 @@ import dotenv from 'dotenv';
dotenv.config({ path: '.env' }).parsed;
const normalizeTranslation = (translation: string | null | undefined) => {
if (translation == null) {
return '';
}
return translation.replace(/\n/g, '\\n').replace(/"/g, "'");
};
const prepareLuaWithFemaleVersion = (quest: Quest, type: keyof Quest, key: string) => {
let text = '';
const value = quest[type] as string;
text += '\t' + key + 'Male = "' + (value?.[0]?.replace(/\n/g, '\\n') ?? '').replace(/"/g, "'") + '", \n';
text += '\t' + key + 'Female = "' + (value?.[1]?.replace(/\n/g, '\\n') ?? '').replace(/"/g, "'") + '", \n';
const normalizedMaleValue = normalizeTranslation(value?.[0]);
const normalizedFemaleValue = normalizeTranslation(value?.[1]);
if (normalizedMaleValue != '') {
text += '\t' + key + 'Male = "' + normalizedMaleValue + '", \n';
}
if (normalizedFemaleValue != '') {
text += '\t' + key + 'Female = "' + normalizedFemaleValue + '", \n';
}
return text;
};
@ -53,7 +66,7 @@ function makeChunks(input: AddonData, chunkSize: number = 1000) {
(async () => {
const args = process.argv.slice(2);
const addonDir = path.join(process.cwd(), `../Quests/Data/${args[0]}`);
const addonDir = path.join(process.cwd(), `../Addon/Data/${args[0]}`);
const addonData: Record<string, Quest> = {};
let pageNumber = 0;
@ -63,7 +76,7 @@ function makeChunks(input: AddonData, chunkSize: number = 1000) {
while (true) {
const response = await callTolgee<TolgeeTranslationsResponse>('GET', `/translations`, {
filterTranslatedInLang: 'cs',
languages: 'cs,csf',
languages: 'cs,csf,en',
size: 2000,
page: pageNumber,
});
@ -97,6 +110,7 @@ function makeChunks(input: AddonData, chunkSize: number = 1000) {
tolgeeKey.translations.cs.text === tolgeeKey.translations.csf.text
? null
: tolgeeKey.translations.csf.text,
tolgeeKey.translations.en.text,
],
}),
...(tolgeeKey.keyNamespace === 'progress' && {
@ -117,7 +131,9 @@ function makeChunks(input: AddonData, chunkSize: number = 1000) {
}),
name: tolgeeKey.keyDescription,
id: tolgeeKey.keyName.replace('q', '').replace('i', ''),
questItem: tolgeeKey.keyName.startsWith('i'),
isQuest: tolgeeKey.keyName.startsWith('q'),
isQuestItem: tolgeeKey.keyName.startsWith('i'),
isSpeech: tolgeeKey.keyName.startsWith('s'),
};
}
} else {
@ -136,25 +152,36 @@ function makeChunks(input: AddonData, chunkSize: number = 1000) {
} catch (e) {}
for (const [, czechQuest] of Object.entries(chunk)) {
// prepare variables
let variableTable = 'quest';
let variableId = czechQuest.id;
// if quest is quest item witch pages, store it inside item table
if (czechQuest.questItem) {
variableTable = 'item';
const page = czechQuest.id.split('_page')?.[1] ?? null;
variableId = `"${czechQuest.name}${page ? `__${page}` : ''}"`;
if (czechQuest.isQuest) {
let luaQuestRecord = '';
luaQuestRecord += `CzechQuestsAddon.data.quest[${czechQuest.id}] = {\n`;
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'names', 'title');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'objectives', 'objective');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'descriptions', 'description');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'progresses', 'progress');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'completions', 'completion');
luaQuestRecord += `}\n`;
fs.appendFileSync(fileName, luaQuestRecord, 'utf8');
}
let luaQuestRecord = '';
luaQuestRecord += `CzechQuestsAddon.data.${variableTable}[${variableId}] = {\n`;
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'names', 'title');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'objectives', 'objective');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'descriptions', 'description');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'progresses', 'progress');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'completions', 'completion');
luaQuestRecord += `}\n`;
fs.appendFileSync(fileName, luaQuestRecord, 'utf8');
if (czechQuest.isQuestItem) {
const page = czechQuest.id.split('_page')?.[1] ?? null;
const variableId = `"${czechQuest.name}${page ? `__${page}` : ''}"`;
let luaQuestRecord = '';
luaQuestRecord += `CzechQuestsAddon.data.item[${variableId}] = {\n`;
luaQuestRecord += '\ttitle = "' + normalizeTranslation(czechQuest.name) + '", \n';
luaQuestRecord += '\ttext = "' + normalizeTranslation(czechQuest.descriptions?.[0]) + '", \n';
luaQuestRecord += `}\n`;
fs.appendFileSync(fileName, luaQuestRecord, 'utf8');
}
if (czechQuest.isSpeech) {
let luaQuestRecord = '';
luaQuestRecord += `CzechQuestsAddon.data.item["${czechQuest.descriptions?.[2]}"] = {\n`;
luaQuestRecord += '\ttext = "' + normalizeTranslation(czechQuest.descriptions?.[0]) + '", \n';
luaQuestRecord += `}\n`;
fs.appendFileSync(fileName, luaQuestRecord, 'utf8');
}
}
});
} catch (e) {
@ -176,7 +203,9 @@ type Quest = {
completions?: (string | null)[];
objective?: string;
objectives?: (string | null)[];
questItem: boolean;
isQuest: boolean;
isQuestItem: boolean;
isSpeech: boolean;
};
type TolgeeKeysData = {