feat(i18n): add simulation translations for all languages
This commit is contained in:
61
scripts/add_simulation_translations.cjs
Normal file
61
scripts/add_simulation_translations.cjs
Normal file
@@ -0,0 +1,61 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const filePath = path.join(__dirname, '../src/composables/useI18n.js');
|
||||
let content = fs.readFileSync(filePath, 'utf8');
|
||||
|
||||
const newKeys = {
|
||||
'custom.simulationHelp': 'How is this calculated?',
|
||||
'custom.hideMap': 'Hide difficulty map',
|
||||
'custom.showMap': 'Show difficulty map',
|
||||
'simulation.title': 'Difficulty Simulation',
|
||||
'simulation.status.ready': 'Ready',
|
||||
'simulation.status.stopped': 'Stopped',
|
||||
'simulation.status.completed': 'Completed',
|
||||
'simulation.status.simulating': 'Simulating {size}x{size} @ {density}%',
|
||||
'simulation.start': 'Start Simulation',
|
||||
'simulation.stop': 'Stop',
|
||||
'simulation.table.size': 'Size',
|
||||
'simulation.table.density': 'Density',
|
||||
'simulation.table.solved': 'Solved (Logic)',
|
||||
'simulation.empty': 'Press Start to run Monte Carlo simulation'
|
||||
};
|
||||
|
||||
const lines = content.split('\n');
|
||||
const processedLines = [];
|
||||
let currentLang = null;
|
||||
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
let line = lines[i];
|
||||
|
||||
// Detect start of language block
|
||||
const startMatch = line.match(/^\s{2}(['"]?[\w-]+['"]?): \{/);
|
||||
if (startMatch) {
|
||||
currentLang = startMatch[1].replace(/['"]/g, '');
|
||||
}
|
||||
|
||||
// Detect end of language block
|
||||
if (currentLang && (line.trim() === '},' || line.trim() === '}')) {
|
||||
if (currentLang !== 'pl' && currentLang !== 'en') {
|
||||
// Ensure previous line has comma
|
||||
if (processedLines.length > 0) {
|
||||
let lastLine = processedLines[processedLines.length - 1];
|
||||
if (!lastLine.trim().endsWith(',') && !lastLine.trim().endsWith('{')) {
|
||||
processedLines[processedLines.length - 1] = lastLine + ',';
|
||||
}
|
||||
}
|
||||
|
||||
// Append new keys
|
||||
Object.entries(newKeys).forEach(([key, value]) => {
|
||||
processedLines.push(` '${key}': '${value}',`);
|
||||
});
|
||||
}
|
||||
currentLang = null;
|
||||
}
|
||||
|
||||
processedLines.push(line);
|
||||
}
|
||||
|
||||
const finalContent = processedLines.join('\n');
|
||||
fs.writeFileSync(filePath, finalContent);
|
||||
console.log('Successfully added simulation translations to all languages.');
|
||||
97
scripts/add_simulation_translations.js
Normal file
97
scripts/add_simulation_translations.js
Normal file
@@ -0,0 +1,97 @@
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const filePath = path.join(__dirname, '../src/composables/useI18n.js');
|
||||
let content = fs.readFileSync(filePath, 'utf8');
|
||||
|
||||
const newKeys = {
|
||||
'custom.simulationHelp': 'How is this calculated?',
|
||||
'simulation.title': 'Difficulty Simulation',
|
||||
'simulation.status.ready': 'Ready',
|
||||
'simulation.status.stopped': 'Stopped',
|
||||
'simulation.status.completed': 'Completed',
|
||||
'simulation.status.simulating': 'Simulating {size}x{size} @ {density}%',
|
||||
'simulation.start': 'Start Simulation',
|
||||
'simulation.stop': 'Stop',
|
||||
'simulation.table.size': 'Size',
|
||||
'simulation.table.density': 'Density',
|
||||
'simulation.table.solved': 'Solved (Logic)',
|
||||
'simulation.empty': 'Press Start to run Monte Carlo simulation'
|
||||
};
|
||||
|
||||
// Regex to match the end of a language block
|
||||
// Matches " }," or " }" at the start of a line
|
||||
const blockEndRegex = /^(\s{2})\},?$/gm;
|
||||
|
||||
let newContent = content.replace(blockEndRegex, (match, indent, offset) => {
|
||||
// Determine which language we are closing
|
||||
const precedingText = content.substring(0, offset);
|
||||
const langMatch = precedingText.match(/^\s{2}(\w+([-]\w+)?): \{/gm);
|
||||
|
||||
if (!langMatch) return match;
|
||||
const currentLangLine = langMatch[langMatch.length - 1];
|
||||
const currentLang = currentLangLine.match(/^\s{2}(\w+([-]\w+)?): \{/)[1];
|
||||
|
||||
// Skip pl and en as they are already updated
|
||||
if (currentLang === 'pl' || currentLang === 'en') {
|
||||
return match;
|
||||
}
|
||||
|
||||
// Check if the previous line has a comma
|
||||
// We need to look at the lines before the match
|
||||
// This is tricky with replace callback.
|
||||
// Easier strategy: Just insert the keys.
|
||||
// If the file is well formatted, the last item might or might not have a comma.
|
||||
// But we can ensure *our* inserted block starts with a comma if needed?
|
||||
// No, standard JS objects need comma after previous item.
|
||||
|
||||
// Let's assume we simply inject before the closing brace.
|
||||
// We'll add a comma to the previous line if it doesn't have one?
|
||||
// That's hard with regex replace on the closing brace only.
|
||||
|
||||
// Alternative: Split by lines and process.
|
||||
return match; // Placeholder, we will process by lines below.
|
||||
});
|
||||
|
||||
const lines = content.split('\n');
|
||||
const processedLines = [];
|
||||
let currentLang = null;
|
||||
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
let line = lines[i];
|
||||
|
||||
// Detect start of language block
|
||||
const startMatch = line.match(/^\s{2}(['"]?[\w-]+['"]?): \{/);
|
||||
if (startMatch) {
|
||||
currentLang = startMatch[1].replace(/['"]/g, '');
|
||||
}
|
||||
|
||||
// Detect end of language block
|
||||
if (currentLang && (line.trim() === '},' || line.trim() === '}')) {
|
||||
if (currentLang !== 'pl' && currentLang !== 'en') {
|
||||
// Ensure previous line has comma
|
||||
if (processedLines.length > 0) {
|
||||
let lastLine = processedLines[processedLines.length - 1];
|
||||
if (!lastLine.trim().endsWith(',') && !lastLine.trim().endsWith('{')) {
|
||||
processedLines[processedLines.length - 1] = lastLine + ',';
|
||||
}
|
||||
}
|
||||
|
||||
// Append new keys
|
||||
Object.entries(newKeys).forEach(([key, value]) => {
|
||||
processedLines.push(` '${key}': '${value}',`);
|
||||
});
|
||||
|
||||
// Remove trailing comma from last inserted item if we want strictly JSON-like (but JS allows it)
|
||||
// It's fine to leave it.
|
||||
}
|
||||
currentLang = null;
|
||||
}
|
||||
|
||||
processedLines.push(line);
|
||||
}
|
||||
|
||||
const finalContent = processedLines.join('\n');
|
||||
fs.writeFileSync(filePath, finalContent);
|
||||
console.log('Successfully added simulation translations to all languages.');
|
||||
Reference in New Issue
Block a user